:root{--color-accent:#e3de13;--color-accent-soft:var(--color-accent);--color-accent-icon:var(--color-accent);--color-accent-border:#827f2b;--color-accent-rgb:227 222 19;--color-ink:#111;--color-text:#f3f3f4;--color-muted:#c5c8b5;--color-subtle:#a9ad9a;--color-surface:#171813;--color-surface-raised:#222419;--color-border:#555a38;--color-glow:#3e3c20;--color-page:#111;--color-outer:#1c1b1b;--blog-arrow-filter:invert(0);color-scheme:dark}@media (prefers-color-scheme:light){:root{--color-accent-soft:#595600;--color-accent-icon:#8b8500;--color-accent-border:#817d32;--color-text:#202516;--color-muted:#505745;--color-subtle:#606953;--color-surface:#fefef9;--color-surface-raised:#eef1df;--color-border:#838d66;--color-glow:#e9e7bd;--color-page:#fafaf3;--color-outer:#f4f5e9;--blog-arrow-filter:invert(1);color-scheme:light}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#f3f3f4;color:var(--color-text)}.typewriter-visible{position:relative}.typewriter-visible.is-typing:after{content:"_";position:absolute}.typewriter-pending{visibility:hidden}@font-face{font-display:swap;font-family:CallingCode;src:url(/static/media/CallingCode-Regular.dfdcf6beb52d8309d87d.otf)}@font-face{font-display:swap;font-family:Larabie;src:url(/static/media/Code-Squared.5f8cb97f1e8ecbc61b5b.woff) format("woff")}html{background-color:#1c1b1b;background-color:var(--color-outer)}:focus-visible{outline:3px solid #e3de13;outline:3px solid var(--color-accent-soft);outline-offset:5px}html{scroll-behavior:smooth}[id=portfolio],section{scroll-margin-top:1rem}.site-shell{display:flow-root}.site-tools{align-items:center;display:flex;gap:1rem;justify-content:flex-end;margin:0 auto;width:min(1120px,100% - 2rem)}.site-tools .mobile-menu-bar{margin-right:auto}.site-logo{border-radius:8px}.navigation-link{color:#f3f3f4;color:var(--color-text);display:block;min-height:44px;padding:.75rem .25rem}.navigation-link:hover{color:#e3de13;color:var(--color-accent-soft)}.mobile-menu-bar{background:#222419;background:var(--color-surface-raised)}.menu-toggle{font-size:1.5rem;min-height:48px;min-width:48px}.mobile-navigation{border-bottom:1px solid #555a38;border-bottom:1px solid var(--color-border);padding:1rem}.mobile-navigation[hidden]{display:none}.skip-link{background:#111;color:#fff;left:1rem;padding:.75rem;position:absolute;top:-100px;z-index:100}.skip-link:focus{top:1rem}.site-footer{color:#c5c8b5;color:var(--color-muted);font-size:.875rem;padding:2rem 1rem;text-align:center}.contact-section{padding:3rem 1rem}@media (prefers-color-scheme:light){.contact-section .title{color:#f3f3f4;color:var(--color-text)}}.social-links{grid-gap:clamp(1rem,3vw,2.5rem);display:grid;gap:clamp(1rem,3vw,2.5rem);grid-template-columns:repeat(2,minmax(0,1fr));justify-items:center;margin:0 auto;width:min(360px,100%)}.social-action{align-items:center;aspect-ratio:1;background:transparent;border:1px solid #827f2b;border:1px solid var(--color-accent-border);border-radius:50%;color:#f3f3f4;color:var(--color-text);display:flex;flex-direction:column;font-size:.95rem;gap:.7rem;justify-content:center;line-height:1.25;max-width:160px;padding:.75rem;text-align:center;transition:background-color .2s,-webkit-transform .2s;transition:background-color .2s,transform .2s;transition:background-color .2s,transform .2s,-webkit-transform .2s;width:100%}.social-action:focus-visible,.social-action:hover{background:#e3de13;background:var(--color-accent);color:#111;color:var(--color-ink)}.social-action:focus-visible{outline:3px solid #e3de13;outline:3px solid var(--color-accent-soft)}.social-action:hover{-webkit-transform:translateY(-4px);transform:translateY(-4px)}.social-icon{fill:currentColor;color:#e3de13;color:var(--color-accent-icon);flex-shrink:0;height:clamp(30px,4vw,40px);width:clamp(30px,4vw,40px)}.social-action:focus-visible .social-icon,.social-action:hover .social-icon{color:#111;color:var(--color-ink)}@media (min-width:640px){.social-links{grid-template-columns:repeat(4,minmax(0,1fr));width:min(760px,100%)}}.blog-entry{display:block}.blog-entry:focus,.blog-entry:hover{background:#e3de13;background:var(--color-accent)}.blog-date{color:#c5c8b5;color:var(--color-muted);display:block;font-size:.875rem;margin-top:.75rem}.blog-entry:focus .blog-date,.blog-entry:hover .blog-date{color:#111;color:var(--color-ink)}.blog-entry .blog-title{color:#f3f3f4;color:var(--color-text);font-size:clamp(1rem,2vw,1.75rem);line-height:1.5;overflow-wrap:anywhere}.blog-entry:focus .blog-title,.blog-entry:hover .blog-title{color:#111;color:var(--color-ink)}.blog-arrow{-webkit-filter:invert(0);filter:invert(0);-webkit-filter:var(--blog-arrow-filter);filter:var(--blog-arrow-filter)}.blog-entry:focus .blog-arrow,.blog-entry:hover .blog-arrow{-webkit-filter:invert(1);filter:invert(1)}.blog-entry img{min-width:24px;width:40px}.blog-section{margin-top:4rem}@media (prefers-reduced-motion:reduce){.social-action:hover{-webkit-transform:none;transform:none}html{scroll-behavior:auto}*,:after,:before{-webkit-animation:none!important;animation:none!important;scroll-behavior:auto!important;transition:none!important}}

/*
! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com
*/*,:after,:before{border:0 solid;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.-left-16{left:-4rem}.-left-\[1\.85rem\]{left:-1.85rem}.-right-1{right:-.25rem}.-top-0{top:0}.-top-0\.5{top:-.125rem}.-top-2{top:-.5rem}.-top-5{top:-1.25rem}.-top-52{top:-13rem}.-top-\[0\.25rem\]{top:-.25rem}.-top-\[0\.2rem\]{top:-.2rem}.bottom-2{bottom:.5rem}.bottom-5{bottom:1.25rem}.bottom-8{bottom:2rem}.bottom-\[13\%\]{bottom:13%}.bottom-\[15\%\]{bottom:15%}.bottom-\[26\%\]{bottom:26%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-10{left:2.5rem}.left-11{left:2.75rem}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-20{left:5rem}.left-24{left:6rem}.left-3{left:.75rem}.left-3\.5{left:.875rem}.left-5{left:1.25rem}.left-8{left:2rem}.left-\[0\%\]{left:0}.left-\[1\.85rem\]{left:1.85rem}.left-\[10\%\]{left:10%}.left-\[10px\]{left:10px}.left-\[15\%\]{left:15%}.left-\[20\%\]{left:20%}.left-\[25\%\]{left:25%}.left-\[26\.2\%\]{left:26.2%}.left-\[31\.5\%\]{left:31.5%}.left-\[5\%\]{left:5%}.left-\[50\%\]{left:50%}.left-\[67\%\]{left:67%}.left-\[75\%\]{left:75%}.right-0{right:0}.right-1{right:.25rem}.right-10{right:2.5rem}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-5{right:1.25rem}.right-\[1\.85rem\]{right:1.85rem}.right-\[38\%\]{right:38%}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-16{top:4rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-32{top:8rem}.top-8{top:2rem}.top-\[0\.25rem\]{top:.25rem}.top-\[12\%\]{top:12%}.top-\[13\%\]{top:13%}.top-\[15\%\]{top:15%}.top-\[2\%\]{top:2%}.top-\[3\%\]{top:3%}.top-\[7\%\]{top:7%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.my-12{margin-bottom:3rem;margin-top:3rem}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.mb-14{margin-bottom:3.5rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-24{margin-bottom:6rem}.mb-4{margin-bottom:1rem}.mr-3{margin-right:.75rem}.mt-10{margin-top:2.5rem}.mt-24{margin-top:6rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-72{height:18rem}.h-\[200px\]{height:200px}.h-\[28rem\]{height:28rem}.h-\[3\.5\%\]{height:3.5%}.h-\[30rem\]{height:30rem}.h-\[55\%\]{height:55%}.h-\[70\%\]{height:70%}.h-\[8\%\]{height:8%}.h-\[80\%\]{height:80%}.h-\[90\%\]{height:90%}.h-\[94\%\]{height:94%}.h-\[95\%\]{height:95%}.h-\[96\%\]{height:96%}.h-\[98\%\]{height:98%}.h-\[99\%\]{height:99%}.h-full{height:100%}.w-0{width:0}.w-0\.5{width:.125rem}.w-1\/2{width:50%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-10\/12{width:83.333333%}.w-11\/12{width:91.666667%}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-9\/12{width:75%}.w-\[10\%\]{width:10%}.w-\[100\%\]{width:100%}.w-\[20\%\]{width:20%}.w-\[200px\]{width:200px}.w-\[30\%\]{width:30%}.w-\[42\%\]{width:42%}.w-\[49\%\]{width:49%}.w-\[52\%\]{width:52%}.w-\[55\%\]{width:55%}.w-\[70\%\]{width:70%}.w-\[77\%\]{width:77%}.w-\[80\%\]{width:80%}.w-\[90\%\]{width:90%}.w-\[94\%\]{width:94%}.w-\[96\%\]{width:96%}.w-\[98\%\]{width:98%}.w-\[99\%\]{width:99%}.w-full{width:100%}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-\[135deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[135deg\]{--tw-rotate:135deg}.rotate-\[300deg\]{--tw-rotate:300deg}.rotate-\[300deg\],.rotate-\[90deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[90deg\]{--tw-rotate:90deg}.skew-x-\[35deg\]{--tw-skew-x:35deg}.scale-y-\[-1\],.skew-x-\[35deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-y-\[-1\]{--tw-scale-y:-1}.scale-y-\[1\]{--tw-scale-y:1}.scale-y-\[1\],.transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.whitespace-nowrap{white-space:nowrap}.rounded-3xl{border-radius:5.5rem}.rounded-\[50\%\]{border-radius:50%}.rounded-\[9999px\]{border-radius:9999px}.rounded-\[999px\]{border-radius:999px}.rounded-bl-3xl{border-bottom-left-radius:5.5rem}.rounded-br-3xl{border-bottom-right-radius:5.5rem}.rounded-tl-\[80\%\]{border-top-left-radius:80%}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b-2{border-bottom-width:2px}.border-b-8{border-bottom-width:8px}.border-l-2{border-left-width:2px}.border-l-8{border-left-width:8px}.border-r-2{border-right-width:2px}.border-r-8{border-right-width:8px}.border-t-2{border-top-width:2px}.border-t-8{border-top-width:8px}.border-dashed{border-style:dashed}.border-dark-green{border-color:var(--color-surface-raised)}.border-green,.border-light-green{border-color:var(--color-accent-soft)}.border-transparent-green{border-color:rgb(var(--color-accent-rgb)/.13)}.border-white{border-color:var(--color-text)}.border-b-transparent{border-bottom-color:transparent}.border-l-transparent{border-left-color:transparent}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-dark-green{background-color:var(--color-surface-raised)}.bg-facade{background-color:var(--color-page)}.bg-gray-green{background-color:var(--color-muted)}.bg-green{background-color:var(--color-accent-soft)}.bg-medium-green{background-color:var(--color-accent-border)}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-transparent-green{background-color:rgb(var(--color-accent-rgb)/.13)}.bg-white{background-color:var(--color-text)}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-facade{--tw-gradient-from:var(--color-page) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-single-gradient{--tw-gradient-from:rgb(var(--color-accent-rgb)/0.4) var(--tw-gradient-from-position);--tw-gradient-to:rgb(var(--color-accent-rgb)/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-via-gradient{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--color-accent-border) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-facade{--tw-gradient-to:var(--color-page) var(--tw-gradient-to-position)}.object-cover{object-fit:cover}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pb-16{padding-bottom:4rem}.pb-3{padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pt-6{padding-top:1.5rem}.text-center{text-align:center}.font-callingCode{font-family:CallingCode}.font-larabie{font-family:Larabie}.text-1xs{font-size:.6rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-2xs{font-size:.4rem;line-height:1rem}.text-9xl{font-size:8rem;line-height:5.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-extrabold{font-weight:800}.font-normal{font-weight:400}.text-dark-green{color:var(--color-surface-raised)}.text-gray{color:var(--color-subtle)}.text-green,.text-light-green{color:var(--color-accent-soft)}.text-white{color:var(--color-text)}.opacity-25{opacity:.25}.opacity-5{opacity:.05}.opacity-50{opacity:.5}.filter{-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.left-arrow{-webkit-clip-path:polygon(4% 0,0 50%,5% 100%,100% 100%,95% 0,10% 0);clip-path:polygon(4% 0,0 50%,5% 100%,100% 100%,95% 0,10% 0)}.shadow-arrow{background:linear-gradient(.5turn,transparent,#0a8858,transparent);-webkit-clip-path:polygon(60% 0,10% 50%,70% 100%,95% 100%,35% 50%,85% 0);clip-path:polygon(60% 0,10% 50%,70% 100%,95% 100%,35% 50%,85% 0);height:100%;width:100%}.corners{border-color:var(--color-accent-soft);height:2rem;position:relative;width:2rem}@media (min-width:640px){.corners{height:5rem;width:5rem}}@media (min-width:768px){.corners{height:6rem;width:6rem}}.shape-full{height:100%;width:100%}.center-div{align-items:center;display:flex;justify-content:center}.challenge-vertical-line{border-color:var(--color-accent-border);border-left-width:2px;height:3rem}@media (min-width:640px){.challenge-vertical-line{height:5rem}}@media (min-width:1024px){.challenge-vertical-line{height:6rem}}@media (min-width:1280px){.challenge-vertical-line{height:7rem}}.challenge-horizontal-line{border-color:var(--color-accent-border);border-top-width:2px;height:.125rem;width:.5rem}@media (min-width:640px){.challenge-horizontal-line{height:.25rem;width:1.25rem}}@media (min-width:1024px){.challenge-horizontal-line{height:.5rem;width:1.5rem}}@media (min-width:1280px){.challenge-horizontal-line{height:.5rem;width:2.5rem}}.challenge-open-brace{border-bottom-width:4px;border-color:var(--color-accent-soft);border-left-width:4px;border-top-width:4px;height:3rem;left:.25rem;position:relative;width:.625rem}@media (min-width:640px){.challenge-open-brace{height:5rem;left:.5rem;width:1.25rem}}@media (min-width:1024px){.challenge-open-brace{height:6rem;left:1.25rem;width:2rem}}@media (min-width:1280px){.challenge-open-brace{height:7rem;width:2.5rem}}.challenge-close-brace{border-bottom-width:4px;border-color:var(--color-accent-soft);border-right-width:4px;border-top-width:4px;height:3rem;position:relative;right:.25rem;width:.625rem}@media (min-width:640px){.challenge-close-brace{height:5rem;right:.5rem;width:1.25rem}}@media (min-width:1024px){.challenge-close-brace{height:6rem;right:1.25rem;width:2rem}}@media (min-width:1280px){.challenge-close-brace{height:7rem;width:2.5rem}}.challenge-solution-text{font-family:Larabie;font-size:.6rem;line-height:1rem}@media (min-width:640px){.challenge-solution-text{font-size:.875rem;line-height:1.25rem}}@media (min-width:1024px){.challenge-solution-text{font-size:1.875rem;line-height:2.5rem}}.challenge-solution-bg{padding:.5rem 1.25rem}@media (min-width:640px){.challenge-solution-bg{height:3.5rem;padding:.5rem 6rem;width:7rem}}@media (min-width:1024px){.challenge-solution-bg{height:4rem;width:15rem}}@media (min-width:1280px){.challenge-solution-bg{height:5.5rem;width:20rem}}.lets-go-arrow-size{height:1.5rem;position:relative;width:1rem}@media (min-width:640px){.lets-go-arrow-size{height:3.5rem;width:2.7rem}}.white-circle{background-color:var(--color-text);border-radius:5.5rem;height:.25rem;position:relative;width:.25rem}@media (min-width:768px){.white-circle{height:.5rem;width:.5rem}}.white-arc{border-color:var(--color-text);border-bottom-color:transparent;border-left-color:transparent;border-radius:9999px;border-right-color:transparent;border-width:1px;position:relative}.pagination{--tw-rotate:45deg;border-color:var(--color-accent-soft);border-width:1px;height:1rem;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:1rem}.shadow-arrow-bg{background:linear-gradient(.5turn,transparent,#00ff95,transparent);-webkit-clip-path:polygon(55% 0,5% 50%,65% 100%,100% 100%,40% 50%,90% 0);clip-path:polygon(55% 0,5% 50%,65% 100%,100% 100%,40% 50%,90% 0);height:1.5rem;position:relative;width:.75rem}@media (min-width:640px){.shadow-arrow-bg{height:1.75rem;width:.75rem}}@media (min-width:768px){.shadow-arrow-bg{height:3.5rem;width:1.5rem}}.showcase-gon{-webkit-clip-path:polygon(13% 0,87% 0,95% 5%,95% 25%,100% 28%,100% 75%,95% 78%,95% 90%,95% 95%,87% 100%,13% 100%,5% 95%,5% 78%,0 75%,0 28%,5% 25%,5% 5%);clip-path:polygon(13% 0,87% 0,95% 5%,95% 25%,100% 28%,100% 75%,95% 78%,95% 90%,95% 95%,87% 100%,13% 100%,5% 95%,5% 78%,0 75%,0 28%,5% 25%,5% 5%);position:relative}.lets-go{-webkit-clip-path:polygon(10% 0,90% 0,100% 50%,90% 100%,10% 100%,0 50%);clip-path:polygon(10% 0,90% 0,100% 50%,90% 100%,10% 100%,0 50%)}.title{font-family:Larabie;font-size:1.125rem;line-height:1.75rem}@media (min-width:640px){.title{font-size:1.25rem;line-height:1.75rem;margin-bottom:.75rem}}@media (min-width:768px){.title{font-size:1.875rem;line-height:2.5rem}}@media (min-width:1024px){.title{font-size:3rem;line-height:3.5rem;margin-bottom:1.5rem}}.description{font-size:.6rem;line-height:1rem;width:100%}@media (min-width:640px){.description{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.description{font-size:1.125rem;line-height:1.75rem}}@media (min-width:1024px){.description{font-size:1.25rem;line-height:1.75rem}}.blog-title{font-family:Larabie;font-size:1rem;font-weight:400;line-height:1.5rem}@media (min-width:640px){.blog-title{font-size:1.125rem;line-height:1.75rem}}@media (min-width:768px){.blog-title{font-size:2.25rem;line-height:3rem}}.col-divider{margin-bottom:2.5rem}@media (min-width:640px){.col-divider{margin-bottom:5rem}}@media (min-width:768px){.col-divider{margin-bottom:11rem}}@media (min-width:1024px){.col-divider{margin-bottom:3rem}}.previous-arrow{background-color:var(--color-accent-soft);height:3rem;width:1.5rem}@media (min-width:768px){.previous-arrow{height:4rem;width:2.5rem}}.previous-arrow{-webkit-clip-path:polygon(50% 0,100% 0,50% 50%,100% 100%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 0,50% 50%,100% 100%,50% 100%,0 50%)}.previous-arrow-bg{background-color:var(--color-surface-raised);-webkit-clip-path:polygon(52% 0,96% 0,44% 50%,96% 100%,52% 100%,0 50%);clip-path:polygon(52% 0,96% 0,44% 50%,96% 100%,52% 100%,0 50%);height:96%;width:92%}.next-arrow{background-color:var(--color-accent-soft);height:3rem;width:1.5rem}@media (min-width:768px){.next-arrow{height:4rem;width:2.5rem}}.next-arrow{-webkit-clip-path:polygon(0 100%,50% 100%,100% 50%,50% 0,0 0,50% 50%);clip-path:polygon(0 100%,50% 100%,100% 50%,50% 0,0 0,50% 50%)}.next-arrow-bg{background-color:var(--color-surface-raised);-webkit-clip-path:polygon(5% 100%,45% 100%,98% 50%,45% 0,5% 0,58% 50%);clip-path:polygon(5% 100%,45% 100%,98% 50%,45% 0,5% 0,58% 50%);height:96%;width:92%}.num-counter{-webkit-clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);position:relative}.goal-box{-webkit-clip-path:polygon(7% 100%,30% 100%,33% 95%,72% 95%,75% 100%,93% 100%,100% 85%,100% 15%,80% 0,75% 5%,50% 5%,46% 10%,30% 10%,25% 0,10% 0,0 15%,0 85%);clip-path:polygon(7% 100%,30% 100%,33% 95%,72% 95%,75% 100%,93% 100%,100% 85%,100% 15%,80% 0,75% 5%,50% 5%,46% 10%,30% 10%,25% 0,10% 0,0 15%,0 85%)}.goal-box-2{-webkit-clip-path:polygon(7% 100%,29.5% 100%,32.5% 95%,72.5% 95%,75.5% 100%,93% 100%,100% 85%,100% 15%,80.5% 0,75.5% 5%,50% 5%,46% 10%,29.5% 10%,24.5% 0,10% 0,0 15%,0 85%);clip-path:polygon(7% 100%,29.5% 100%,32.5% 95%,72.5% 95%,75.5% 100%,93% 100%,100% 85%,100% 15%,80.5% 0,75.5% 5%,50% 5%,46% 10%,29.5% 10%,24.5% 0,10% 0,0 15%,0 85%)}.goal-extra-1{-webkit-clip-path:polygon(5% 0,95% 0,100% 100%,0 100%);clip-path:polygon(5% 0,95% 0,100% 100%,0 100%)}.goal-extra-2{-webkit-clip-path:polygon(0 0,100% 0,93% 40%,45% 40%,38% 100%,8% 100%);clip-path:polygon(0 0,100% 0,93% 40%,45% 40%,38% 100%,8% 100%)}.small-left-arrow{-webkit-clip-path:polygon(45% 0,60% 0,15% 50%,60% 100%,45% 100%,0 50%);clip-path:polygon(45% 0,60% 0,15% 50%,60% 100%,45% 100%,0 50%)}.small-right-arrow{-webkit-clip-path:polygon(45% 0,60% 0,100% 50%,60% 100%,45% 100%,85% 50%);clip-path:polygon(45% 0,60% 0,100% 50%,60% 100%,45% 100%,85% 50%)}.font-box{-webkit-clip-path:polygon(8% 0,100% 0,100% 100%,0 100%,0 35%);clip-path:polygon(8% 0,100% 0,100% 100%,0 100%,0 35%)}.small-font-box{-webkit-clip-path:polygon(38% 0,100% 0,100% 100%,0 100%,0 35%);clip-path:polygon(38% 0,100% 0,100% 100%,0 100%,0 35%)}@-webkit-keyframes rcw-loop-one{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes rcw-loop-one{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@-webkit-keyframes rotate-clock-wise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate-clock-wise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes rotate-anti-clock-wise{0%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes rotate-anti-clock-wise{0%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.donut{align-items:center;background-color:var(--color-surface-raised);border-color:var(--color-accent-border);display:flex;flex-direction:column;height:200px;justify-content:center;width:200px}.donut:after,.donut:before{content:var(--tw-content);height:14rem;width:14rem}@media (min-width:640px){.donut{height:290px;width:290px}.donut:after,.donut:before{content:var(--tw-content);height:315px;width:315px}}.donut{-webkit-animation:draw-dashed-border 5s linear infinite;animation:draw-dashed-border 5s linear infinite;border:2px dashed #00ff94;border-radius:50%;position:relative}.donut:after,.donut:before{border:18px solid transparent;bottom:-15px;content:"";position:absolute}@media (min-width:640px){.donut:after,.donut:before{border-width:25px}}.donut:after,.donut:before{-webkit-animation:rotate-anti-clock-wise 10s linear infinite;animation:rotate-anti-clock-wise 10s linear infinite;border-radius:50%;opacity:.5;-webkit-transform:rotate(30deg);transform:rotate(30deg)}.donut:before{-webkit-animation:rotate-clock-wise 10s linear infinite;animation:rotate-clock-wise 10s linear infinite;border-left-color:#90ee90;left:-15px}.clips{-webkit-animation:rotate-clock-wise 5s linear infinite;animation:rotate-clock-wise 5s linear infinite}.clips,.clips-2{background-color:initial;border-color:transparent;border-radius:9999px;border-width:1px;position:absolute}.clips-2{-webkit-animation:rotate-anti-clock-wise 5s linear infinite;animation:rotate-anti-clock-wise 5s linear infinite}.clips-3{-webkit-animation:rcw-loop-one 5s linear infinite;animation:rcw-loop-one 5s linear infinite;background-color:initial;border-color:transparent;border-radius:9999px;border-width:1px;position:absolute}.donut:after{border-right-color:#90ee90;right:-15px}@-webkit-keyframes draw-dashed-border{0%{stroke-dasharray:0 100%}to{stroke-dasharray:100% 100%}}@keyframes draw-dashed-border{0%{stroke-dasharray:0 100%}to{stroke-dasharray:100% 100%}}.custom-border{border:1px solid transparent;border-image:linear-gradient(180deg,transparent,transparent,#00ff95) 1;border-top:none}.custom-border-center{border:1px solid transparent;border-image:linear-gradient(180deg,transparent,#00ff95,transparent) 1;border-top:none}progress::-webkit-progress-bar{background-color:var(--color-surface-raised)}progress::-webkit-progress-value{background-color:var(--color-accent-soft)}progress::-moz-progress-bar{background-color:var(--color-accent-soft)}.letter{will-change:transform,opacity}.parallax-image.\!active{-webkit-transform:scale(1.2)!important;transform:scale(1.2)!important}.parallax-image.active{-webkit-transform:scale(1.2);transform:scale(1.2)}@media (min-width:640px){.sm\:-left-\[5\.2rem\]{left:-5.2rem}.sm\:bottom-16{bottom:4rem}.sm\:bottom-\[2\.5rem\]{bottom:2.5rem}.sm\:left-14{left:3.5rem}.sm\:left-2{left:.5rem}.sm\:left-3{left:.75rem}.sm\:left-3\.5{left:.875rem}.sm\:left-5{left:1.25rem}.sm\:left-7{left:1.75rem}.sm\:left-\[5\.2rem\]{left:5.2rem}.sm\:right-10{right:2.5rem}.sm\:right-14{right:3.5rem}.sm\:right-7{right:1.75rem}.sm\:right-\[5\.2rem\]{right:5.2rem}.sm\:top-16{top:4rem}.sm\:top-28{top:7rem}.sm\:top-4{top:1rem}.sm\:mx-12{margin-left:3rem;margin-right:3rem}.sm\:-mt-3{margin-top:-.75rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:ml-8{margin-left:2rem}.sm\:mr-0{margin-right:0}.sm\:mt-0{margin-top:0}.sm\:h-14{height:3.5rem}.sm\:h-40{height:10rem}.sm\:h-7{height:1.75rem}.sm\:h-\[290px\]{height:290px}.sm\:h-\[3\%\]{height:3%}.sm\:h-\[30rem\]{height:30rem}.sm\:h-\[8\%\]{height:8%}.sm\:h-\[94\%\]{height:94%}.sm\:h-\[98\%\]{height:98%}.sm\:w-11\/12{width:91.666667%}.sm\:w-36{width:9rem}.sm\:w-40{width:10rem}.sm\:w-48{width:12rem}.sm\:w-64{width:16rem}.sm\:w-9\/12{width:75%}.sm\:w-\[290px\]{width:290px}.sm\:w-\[42\%\]{width:42%}.sm\:w-\[71\.5\%\]{width:71.5%}.sm\:w-\[85\%\]{width:85%}.sm\:w-\[90\%\]{width:90%}.sm\:w-\[96\%\]{width:96%}.sm\:w-\[98\%\]{width:98%}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:justify-center{justify-content:center}.sm\:gap-4{gap:1rem}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:py-4{padding-bottom:1rem;padding-top:1rem}.sm\:pt-12{padding-top:3rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.5rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:768px){.md\:bottom-24{bottom:6rem}.md\:left-10{left:2.5rem}.md\:left-3{left:.75rem}.md\:left-3\.5{left:.875rem}.md\:left-5{left:1.25rem}.md\:left-\[1\.70rem\]{left:1.7rem}.md\:right-3{right:.75rem}.md\:top-24{top:6rem}.md\:top-28{top:7rem}.md\:top-6{top:1.5rem}.md\:mx-0{margin-left:0;margin-right:0}.md\:mb-10{margin-bottom:2.5rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-14{height:3.5rem}.md\:h-20{height:5rem}.md\:h-96{height:24rem}.md\:w-1\/3{width:33.333333%}.md\:w-20{width:5rem}.md\:w-36{width:9rem}.md\:w-72{width:18rem}.md\:w-80{width:20rem}.md\:w-\[88\%\]{width:88%}.md\:w-full{width:100%}.md\:flex-row{flex-direction:row}.md\:items-stretch{align-items:stretch}.md\:justify-center{justify-content:center}.md\:justify-around{justify-content:space-around}.md\:px-14{padding-left:3.5rem;padding-right:3.5rem}.md\:py-7{padding-bottom:1.75rem;padding-top:1.75rem}.md\:pl-5{padding-left:1.25rem}.md\:text-4xl{font-size:2.25rem;line-height:3rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:1024px){.lg\:left-10{left:2.5rem}.lg\:left-2{left:.5rem}.lg\:right-2{right:.5rem}.lg\:mx-24{margin-left:6rem;margin-right:6rem}.lg\:-mt-6{margin-top:-1.5rem}.lg\:mb-24{margin-bottom:6rem}.lg\:mt-16{margin-top:4rem}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:w-\[84\.5\%\]{width:84.5%}.lg\:items-center{align-items:center}.lg\:px-28{padding-left:7rem;padding-right:7rem}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}.lg\:text-3xl{font-size:1.875rem;line-height:2.5rem}.lg\:text-lg{font-size:1.125rem;line-height:1.75rem}.lg\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:1280px){.xl\:left-20{left:5rem}.xl\:w-10\/12{width:83.333333%}.xl\:w-\[40\%\]{width:40%}}@media (min-width:1536px){.\32xl\:mx-44{margin-left:11rem;margin-right:11rem}}.project-detail,.projects-section,.skills-section{color:var(--color-text);margin:4rem auto;width:min(1120px,100% - 2rem)}.section-heading{margin:0 auto 2.5rem;max-width:760px;text-align:center}.section-heading p,.section-intro{color:var(--color-muted);line-height:1.7}.code-label{color:var(--color-muted);display:block;font-size:.875rem}.section-heading .title{margin:.75rem 0 1rem}.project-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(2,minmax(0,1fr))}.project-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;min-width:0;overflow:hidden}.project-card-spotlight{border-color:var(--color-accent-border);display:grid;grid-column:1/-1;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr)}.project-image{aspect-ratio:8/5;background:var(--color-surface-raised);overflow:hidden}.project-image img{height:100%;object-fit:cover;width:100%}.project-card-spotlight .project-image img{object-fit:contain}.project-card-spotlight .project-image{align-self:center;aspect-ratio:8/5}.project-preview-link{align-self:center;border-radius:12px;color:var(--color-accent-soft);display:block;min-width:0;position:relative}.project-preview-caption{background:var(--color-surface-raised);display:flex;font-size:.8rem;gap:1rem;justify-content:space-between;padding:.85rem 1rem}.project-showcase{border-bottom:1px solid var(--color-accent-border);border-top:1px solid var(--color-accent-border)}.project-selector{grid-gap:.5rem;border-bottom:1px solid var(--color-border);display:grid;gap:.5rem;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));padding:1rem 0}.project-selector button{align-items:center;border:1px solid transparent;border-radius:6px;color:var(--color-muted);display:flex;gap:.6rem;line-height:1.5;min-height:56px;overflow-wrap:anywhere;padding:.7rem;text-align:left}.project-selector-number{color:var(--color-accent-soft);flex-shrink:0;font-size:.75rem;white-space:nowrap}.project-selector button[aria-pressed=true]{background:var(--color-surface-raised);border-color:var(--color-accent-border);color:var(--color-text)}.project-selector button:hover{background:var(--color-surface-raised);color:var(--color-accent-soft)}.project-showcase .project-card{align-items:center;background:transparent;border:0;border-radius:0;gap:2rem;min-height:36rem;overflow:visible;padding:2.5rem 1rem;position:relative}@-webkit-keyframes featured-project-enter{0%{opacity:0}to{opacity:1}}@keyframes featured-project-enter{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:no-preference){.project-showcase .project-card{-webkit-animation:featured-project-enter .24s ease-out;animation:featured-project-enter .24s ease-out}}.project-showcase .project-content{padding:0}.project-showcase .project-content h3{font-size:clamp(1.6rem,3.2vw,2.7rem)}.project-showcase .project-preview-link:after,.project-showcase .project-preview-link:before{aspect-ratio:1;border:1px solid var(--color-accent-border);border-radius:50%;content:"";left:50%;pointer-events:none;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease;width:90%}.project-showcase .project-preview-link:after{border-style:dashed;opacity:.6;width:100%}.project-showcase .project-preview-link:focus-visible:before,.project-showcase .project-preview-link:hover:before{-webkit-transform:translate(-50%,-50%) scale(1.05);transform:translate(-50%,-50%) scale(1.05)}.project-showcase .project-preview-caption,.project-showcase .project-preview-link .project-image{position:relative;z-index:1}.project-showcase .project-preview-link .project-image{border:1px solid var(--color-border);border-radius:10px 10px 0 0}.project-showcase .project-preview-caption{border:1px solid var(--color-border);border-radius:0 0 10px 10px;border-top:0}.showcase-navigation{align-items:center;display:flex;gap:1.5rem;justify-content:center;padding:0 0 2rem}.showcase-navigation button{border:1px solid var(--color-accent-border);border-radius:50%;color:var(--color-accent-soft);display:grid;flex-shrink:0;font-size:1.5rem;height:48px;place-items:center;width:48px}.showcase-navigation button:hover{background:var(--color-accent);color:var(--color-ink)}.showcase-progress{color:var(--color-muted);font-size:.75rem;text-align:center;width:min(280px,45%)}.showcase-progress progress{-webkit-appearance:none;appearance:none;background:var(--color-border);border:none;border-radius:2px;color:var(--color-accent);display:block;height:4px;margin-top:.75rem;overflow:hidden;width:100%}.showcase-progress progress::-webkit-progress-bar{background:var(--color-border)}.showcase-progress progress::-webkit-progress-value{background:var(--color-accent)}.showcase-progress progress::-moz-progress-bar{background:var(--color-accent)}@media (max-width:767px){.project-selector{grid-template-columns:repeat(2,minmax(0,1fr))}.project-showcase .project-card{grid-template-columns:minmax(0,1fr);min-height:0;padding:2rem 0}.project-showcase .project-preview-link:after,.project-showcase .project-preview-link:before{width:72%}.project-showcase .project-preview-link:after{width:80%}}@media (prefers-reduced-motion:reduce){.project-showcase .project-preview-link:after,.project-showcase .project-preview-link:before{transition:none}.project-showcase .project-preview-link:focus-visible:before,.project-showcase .project-preview-link:hover:before{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}}.project-image-fallback{background:radial-gradient(ellipse at 30% 15%,var(--color-glow),transparent 70%),var(--color-surface);display:grid;height:100%;min-height:220px;overflow:hidden;place-content:center;position:relative}.project-orbit{border:1px solid var(--color-accent-border);border-radius:50%;height:200px;left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:200px}.project-orbit:after{background:var(--color-accent);border-radius:50%;box-shadow:0 0 18px var(--color-accent);content:"";height:8px;left:25px;position:absolute;top:25px;width:8px}.project-monogram{color:var(--color-accent-soft);font-family:Larabie,monospace;font-size:3rem;text-align:center}.project-image-caption{color:var(--color-muted);font-size:.75rem;margin-top:.75rem;position:relative}.project-content{min-width:0;padding:clamp(1.25rem,3vw,2rem)}.project-eyebrow{align-items:center;color:var(--color-accent-soft);display:flex;flex-wrap:wrap;font-size:.8rem;gap:.75rem}.project-status{border:1px solid var(--color-accent-border);border-radius:4px;padding:.15rem .5rem}.project-content h3{font-family:Larabie,monospace;font-size:clamp(1.4rem,2.5vw,2rem);line-height:1.4;margin:.8rem 0;overflow-wrap:anywhere}.project-detail p,.project-summary{line-height:1.7}.project-role{color:var(--color-muted);font-size:.875rem;line-height:1.6;margin-top:1rem}.project-topics{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;margin:1.25rem 0;padding:0}.project-topics li{border:1px solid var(--color-border);border-radius:4px;color:var(--color-text);font-size:.75rem;overflow-wrap:anywhere;padding:.2rem .5rem}.project-links{display:flex;flex-wrap:wrap;gap:.75rem;margin:1.25rem 0 .5rem}.hero-links button,.project-links a{align-items:center;border:1px solid var(--color-accent-border);border-radius:4px;color:var(--color-accent-soft);display:inline-flex;gap:.75rem;min-height:44px;padding:.5rem 1rem}.hero-links button:hover,.project-links a:hover{background:var(--color-accent);color:#111}.project-details-link{color:var(--color-accent-soft);display:inline-block;padding:.75rem 0;text-decoration:underline;text-underline-offset:4px}.earlier-projects{margin-top:4rem}.earlier-projects .section-intro{margin-bottom:1.5rem}.earlier-list{grid-column-gap:2rem;-webkit-column-gap:2rem;column-gap:2rem;display:grid;grid-template-columns:minmax(0,1fr)}.earlier-toggle{align-items:center;background:var(--color-surface);border:1px solid var(--color-accent-border);border-radius:4px;color:var(--color-accent-soft);display:inline-flex;gap:.75rem;justify-content:center;min-height:44px;padding:.75rem 1rem}.earlier-toggle:hover{background:var(--color-accent);color:var(--color-ink)}.earlier-collapse{margin-top:1.5rem}.earlier-project{border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:1rem;justify-content:space-between;min-width:0;padding:1.25rem 0}.earlier-project h3{font-size:1.15rem;overflow-wrap:anywhere}.earlier-project h3 a{display:inline-block;padding:.5rem 0;text-decoration:underline;text-underline-offset:4px}.earlier-project .project-role{margin:0}.earlier-project .project-summary{font-size:.875rem;margin:.5rem 0}.earlier-technologies{color:var(--color-muted);font-size:.75rem;line-height:1.6}.earlier-project .project-links{margin:0}.earlier-project .project-links a{border-color:var(--color-border)}.project-contributions{line-height:1.7;list-style:disc;padding-left:1.25rem}.project-contributions li+li{margin-top:.75rem}@media (min-width:640px){.earlier-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.earlier-list{grid-template-columns:repeat(3,minmax(0,1fr))}.earlier-toggle{display:none}}@media (max-width:1023px){.earlier-list[data-expanded=false]{display:none}}.project-archive{border-top:1px solid var(--color-border);color:var(--color-muted);margin-top:2rem;padding-top:1.5rem}.project-archive summary{cursor:pointer;padding:.5rem 0}.project-archive ul{list-style:disc;padding-left:1.5rem}.project-archive a{display:inline-block;padding:.5rem 0;text-decoration:underline}.project-detail{max-width:960px}.project-index{color:var(--color-muted);font-size:.875rem;margin:1.5rem 0}.project-index ul{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;margin-top:.5rem}.project-index a{color:var(--color-accent-soft);display:inline-block;padding:.65rem 0;text-decoration:underline;text-underline-offset:.2em}.project-detail h1{font-family:Larabie,monospace;font-size:clamp(1.75rem,5vw,3rem);line-height:1.3;margin:1rem 0;overflow-wrap:anywhere}.project-detail h2{color:var(--color-accent-soft);font-size:1.3rem;margin:2rem 0 1rem}.project-detail .project-image{aspect-ratio:auto;border-radius:12px;margin:2rem 0}.project-detail .project-image img{height:auto;object-fit:contain}.screenshot-trigger{color:var(--color-accent-soft);cursor:zoom-in;display:block;text-align:left;width:100%}.screenshot-trigger:focus-visible{outline-offset:-4px}.screenshot-trigger>span{display:flex;font-size:.875rem;gap:1rem;justify-content:space-between;min-height:44px;padding:.75rem 1rem}.screenshot-dialog{background:var(--color-surface);border:1px solid var(--color-accent-border);border-radius:12px;color:var(--color-text);inset:0;margin:auto;max-height:calc(100vh - 2rem);max-height:calc(100dvh - 2rem);max-width:none;overflow:hidden;padding:0;position:fixed;width:min(1440px,calc(100% - 2rem))}.screenshot-dialog[open]{display:flex;flex-direction:column}.screenshot-dialog::-webkit-backdrop{background:#080a06e8}.screenshot-dialog::backdrop{background:#080a06e8}.screenshot-toolbar,.screenshot-tools{align-items:center;display:flex;flex-shrink:0;gap:.75rem;justify-content:space-between;padding:.75rem 1rem}.screenshot-toolbar{border-bottom:1px solid var(--color-border)}.screenshot-toolbar h2{font-size:1rem;overflow-wrap:anywhere}.screenshot-tools{color:var(--color-muted);flex-wrap:wrap;font-size:.75rem;justify-content:flex-start}.screenshot-tools [aria-pressed=true]{background:var(--color-accent);color:var(--color-ink)}.screenshot-tools [aria-pressed=false]:hover{background:var(--color-surface-raised);color:var(--color-accent-soft)}.screenshot-canvas{background:#111;min-height:0;overflow:auto;overscroll-behavior:contain}.screenshot-canvas:focus-visible{outline-offset:-4px}.screenshot-canvas img{display:block;height:auto;margin:auto;max-height:calc(100dvh - 14rem);max-width:100%;object-fit:contain;width:auto}.screenshot-actual-size img{max-height:none;max-width:none}.project-detail-back{color:var(--color-accent-soft);display:inline-block;padding:1rem 0;text-decoration:underline}.project-detail dl{display:flex;flex-wrap:wrap;gap:1.5rem;margin:2rem 0;overflow-wrap:anywhere}.project-detail dt{color:var(--color-muted);font-size:.875rem}.project-modal{background:var(--color-surface);border:1px solid var(--color-accent-border);border-radius:20px;box-shadow:0 28px 100px #0009,0 0 60px rgb(var(--color-accent-rgb)/.06);color:var(--color-text);inset:0;margin:auto;max-height:calc(100vh - 3rem);max-height:calc(100dvh - 3rem);max-width:none;overflow-y:auto;overscroll-behavior:contain;padding:0;position:fixed;width:min(1080px,calc(100% - 3rem))}.project-modal::-webkit-backdrop{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#080a06b8}.project-modal::backdrop{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#080a06b8}.project-modal-toolbar{align-items:center;background:var(--color-surface);border-bottom:1px solid var(--color-border);display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;padding:.75rem clamp(1.25rem,3vw,2.5rem);position:-webkit-sticky;position:sticky;top:0;z-index:1}.project-modal-toolbar>span{color:var(--color-muted);font-size:.75rem;letter-spacing:.1em;text-transform:uppercase}.project-modal-navigation{align-items:center;display:flex;flex-basis:100%;gap:.75rem;justify-content:space-between}.project-modal-navigation button{align-items:center;color:var(--color-accent-soft);display:inline-flex;font-size:.875rem;gap:.5rem;min-height:44px;padding:.5rem .25rem}.project-modal-navigation button:hover{text-decoration:underline;text-underline-offset:4px}.project-modal-position{color:var(--color-muted);font-size:.75rem;white-space:nowrap}.project-modal-close{align-items:center;border:1px solid var(--color-border);border-radius:8px;color:var(--color-accent-soft);display:inline-flex;font-size:.875rem;gap:.75rem;justify-content:center;min-height:44px;padding:.4rem .75rem}.project-modal-close [aria-hidden]{font-size:1.5rem;line-height:1}.project-modal-close:hover{background:var(--color-accent);color:var(--color-ink)}.project-modal .project-detail{margin:0;max-width:none;padding:clamp(1.25rem,3vw,2.5rem);width:100%}.project-modal .project-overview{grid-gap:2rem;align-items:center;border-bottom:1px solid var(--color-border);display:grid;gap:2rem;grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding-bottom:2rem}.project-modal .project-overview .project-image{border:1px solid var(--color-border);margin:0}.project-modal .project-detail>section{max-width:72ch}.project-modal .project-detail dl{border-top:1px solid var(--color-border);margin-bottom:0;padding-top:1.5rem}@media (max-width:767px){.project-modal{border-bottom:0;border-radius:20px 20px 0 0;inset:auto 0 0;margin:0;max-height:94vh;max-height:94dvh;width:100%}.project-modal .project-overview{gap:1.5rem;grid-template-columns:minmax(0,1fr)}.project-modal .project-detail{padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:no-preference){.project-modal[open]{-webkit-animation:project-reveal .24s ease-out;animation:project-reveal .24s ease-out}.project-modal[open]::-webkit-backdrop{-webkit-animation:project-backdrop .24s ease-out;animation:project-backdrop .24s ease-out}.project-modal[open]::backdrop{-webkit-animation:project-backdrop .24s ease-out;animation:project-backdrop .24s ease-out}}@-webkit-keyframes project-reveal{0%{opacity:0;-webkit-transform:translateY(20px) scale(.98);transform:translateY(20px) scale(.98)}to{opacity:1;-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1)}}@keyframes project-reveal{0%{opacity:0;-webkit-transform:translateY(20px) scale(.98);transform:translateY(20px) scale(.98)}to{opacity:1;-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1)}}@-webkit-keyframes project-backdrop{0%{opacity:0}to{opacity:1}}@keyframes project-backdrop{0%{opacity:0}to{opacity:1}}.skill-groups{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:2rem}.platform-statement{margin-top:1.5rem;max-width:78ch}.platform-links{margin-top:1.5rem}.learning-interests{border-left:2px solid var(--color-accent-border);margin-top:2rem;max-width:78ch;padding-left:1rem}.learning-interests h3,.skill-groups h3{color:var(--color-accent-soft);margin-bottom:.75rem}.learning-interests p,.skill-groups p{color:var(--color-muted);line-height:1.8}@media (max-width:640px){.project-card-spotlight,.project-grid,.skill-groups{grid-template-columns:minmax(0,1fr)}.project-card-spotlight .project-image{aspect-ratio:8/5;min-height:0}.projects-section,.skills-section{margin:3rem auto}}.project-contribution{border-left:2px solid var(--color-accent-border);font-size:.875rem;line-height:1.7;margin-top:1rem;padding-left:.75rem}.project-contribution span{color:var(--color-accent-soft);display:block}.case-study-grid{grid-gap:3rem;display:grid;gap:3rem;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.contribution-list{line-height:1.7;list-style:disc;padding-left:1.25rem}.contribution-list li+li{margin-top:.75rem}.evidence-links{list-style:none;padding:0}.evidence-links a{color:var(--color-accent-soft);display:inline-block;line-height:1.6;padding:.65rem 0;text-decoration:underline;text-underline-offset:4px}.hero{grid-column-gap:3rem;align-items:center;color:var(--color-text);-webkit-column-gap:3rem;column-gap:3rem;display:grid;grid-template-areas:"copy orbit" "actions orbit";grid-template-columns:minmax(0,1fr) 230px;margin:2rem auto 4rem;width:min(1120px,100% - 2rem)}.hero-copy{grid-area:copy}.hero-links{grid-area:actions}.hero-greeting{color:var(--color-accent-soft)}.hero-name{margin:1rem 0 1.5rem}.hero h1{font-family:Larabie,monospace;font-size:clamp(2.1rem,4.8vw,4.4rem);line-height:1.15;margin:.5rem 0 .5rem 1rem}.hero-position{color:var(--color-accent-soft);font-size:clamp(1.1rem,2vw,1.4rem)}.hero-stack{color:var(--color-muted);margin:.5rem 0 1.25rem}.hero-intro{line-height:1.8;max-width:62ch}.hero-hiring-note{color:var(--color-accent-soft);line-height:1.7;margin-top:1rem;max-width:62ch}.hero-links a:first-child{background:var(--color-accent);color:var(--color-ink)}.hero-orbit{display:grid;grid-area:orbit;height:220px;place-items:center;position:relative;width:220px}.hero-ring{border:1px solid var(--color-accent-border);border-right:1px solid transparent;inset:0}.hero-ring,.hero-ring:before{border-radius:50%;position:absolute}.hero-ring:before{background:var(--color-accent);content:"";height:6px;left:14%;top:12%;width:6px}.hero-ring:nth-child(2){inset:14px}.hero-ring:nth-child(3){inset:28px}.hero-cv-link{background:var(--color-surface);border:1px solid var(--color-accent-border);border-radius:50%;color:var(--color-accent-soft);display:grid;font-size:.8125rem;height:136px;place-items:center;position:relative;width:136px;z-index:1}.hero-cv-link:focus-visible,.hero-cv-link:hover{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-ink)}@media (prefers-reduced-motion:no-preference){.hero-cv-link{transition:background-color .18s ease,color .18s ease}}@media (max-width:900px){.hero{-webkit-column-gap:1rem;column-gap:1rem;grid-template-areas:"copy copy" "actions orbit";grid-template-columns:minmax(0,1fr) 144px}.hero-orbit{height:144px;margin-top:1rem;overflow:hidden;width:144px}.hero-ring:nth-child(2){inset:8px}.hero-ring:nth-child(3){inset:16px}.hero-cv-link{font-size:.75rem;height:108px;width:108px}.case-study-grid{gap:0;grid-template-columns:minmax(0,1fr)}}@media (max-width:767px){.earlier-row{grid-template-columns:minmax(0,1fr)}.hero{margin-bottom:3rem;margin-top:2rem}}.contact-invitation{color:var(--color-muted);margin:0 auto 2rem;text-align:center}.contact-button,.contact-close{align-items:center;border:1px solid var(--color-accent-border);border-radius:4px;display:inline-flex;gap:.75rem;justify-content:center;min-height:44px;padding:.75rem 1.25rem}.contact-button{background:var(--color-accent);color:var(--color-ink)}.contact-button:hover{background:#fff}.contact-button:disabled{cursor:wait;opacity:.7}.contact-close{background:var(--color-surface);color:var(--color-text)}.contact-close:hover{background:var(--color-surface-raised)}.contact-dialog{background:var(--color-page);border:1px solid var(--color-accent-border);border-radius:12px;box-shadow:0 20px 80px rgba(0,0,0,.35);color:var(--color-text);margin:auto;max-height:calc(100dvh - 2rem);overflow-y:auto;overscroll-behavior:contain;padding:clamp(1.25rem,4vw,2rem);width:min(36rem,calc(100% - 2rem))}.contact-dialog::-webkit-backdrop{background:rgba(0,0,0,.75)}.contact-dialog::backdrop{background:rgba(0,0,0,.75)}.contact-dialog-header{align-items:center;display:flex;gap:1rem;justify-content:space-between;margin-bottom:1.5rem}.contact-dialog h2{font-size:clamp(1.4rem,4vw,1.8rem);line-height:1.3}.contact-intro{color:var(--color-muted);line-height:1.6;margin:.75rem 0 1.5rem}.contact-dialog fieldset{grid-gap:1rem;display:grid;gap:1rem;min-width:0}.contact-dialog label,.contact-field{grid-gap:.4rem;display:grid;font-size:.875rem;gap:.4rem;min-width:0}.contact-field-pair{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(2,minmax(0,1fr))}.contact-dialog input,.contact-dialog select,.contact-dialog textarea{background:var(--color-surface);border:1px solid var(--color-border);border-radius:4px;color:var(--color-text);font-size:1rem;line-height:1.5;min-height:44px;min-width:0;padding:.65rem;width:100%}.contact-dialog textarea{resize:vertical}.contact-note{color:var(--color-muted);font-size:.8rem;line-height:1.5;margin:1rem 0}.contact-error,.contact-status:not(:empty){line-height:1.6;margin:1rem 0}.contact-error{border-left:3px solid var(--color-accent-soft);padding-left:.75rem}.contact-error a{text-decoration:underline}@media (max-width:479px){.contact-field-pair{grid-template-columns:minmax(0,1fr)}}
/*# sourceMappingURL=main.7c41e4a7.css.map*/