@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=Inter:wght@400;500;600;700&display=swap";
*,:before,:after,::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:#3b82f680;--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: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.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);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-16{height:4rem}.h-full{height:100%}.h-screen{height:100vh}.w-16{width:4rem}.w-full{width:100%}.max-w-3xl{max-width:48rem}.max-w-screen-md{max-width:768px}.grow{flex-grow:1}.transform{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-gpu{transform:translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.rounded-2xl{border-radius:1rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}.fill-current{fill:currentColor}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pt-16{padding-top:4rem}.pt-5{padding-top:1.25rem}.text-center{text-align:center}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-fuchsia-100{--tw-text-opacity:1;color:rgb(250 232 255/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.filter{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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-500{transition-duration:.5s}.will-change-\[outline\,_transform\]{will-change:outline, transform}html,body{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1));margin:0}html.dark,body.dark{--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}body{min-height:100vh}.highlight{--tw-border-opacity:1;border-width:2px;border-color:rgb(59 130 246/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.loading-spinner{border:.35rem solid #d1d5db;border-top-color:#123abc;border-radius:50%;width:3rem;height:3rem;animation:.8s linear infinite portfolio-spinner}.scroll-to-top{z-index:4;justify-content:center;width:2.75rem;height:2.75rem;padding:0;font-size:1.5rem;position:fixed;bottom:2rem;right:2rem}@keyframes portfolio-spinner{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.loading-spinner{animation-duration:2s}}.focus\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.active\:scale-100:active{--tw-scale-x:1;--tw-scale-y:1;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))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95;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))}.group:hover .group-hover\:scale-\[1\.3\]{--tw-scale-x:1.3;--tw-scale-y:1.3;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))}.dark\:inline:is(.dark *){display:inline}.dark\:hidden:is(.dark *){display:none}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:bg-dark-bg:is(.dark *){--tw-bg-opacity:1;background-color:rgb(18 18 18/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-indigo-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity,1))}.dark\:bg-neutral-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.dark\:text-dark-text:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}@media (min-width:640px){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:h-20{height:5rem}.sm\:w-40{width:10rem}.sm\:w-fit{width:fit-content}.sm\:max-w-xs{max-width:20rem}.sm\:flex-row{flex-direction:row}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-4{grid-column:span 4/span 4}}@media (min-width:1024px){.lg\:mb-16{margin-bottom:4rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}}
:root{--gray-1:#eee;--gray-2:#e6e6e6;--gray-3:#ddd;--gray-5:#999;--gray-6:#2f2f2f;--gray-65:#080606;--gray-10:#181818;--green:#5eddac;--orange:#ff7e22;--yellow:#fca62a;--light-yellow:#f6cd5d;--pink:#f57ad0;--lavendar:#9b78fa;--violet:#ff67f7;--blue:#59abf7;--purple:#673ece;--indigo:#5a43f1;--indigo-dark:#4509cf;--indigo-light:#969bf6;--indigo-muted:#f1f2fd;--font-family-base:"Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--font-family-monospace:Menlo, "IBM Plex Mono", Menlo, monospace;--font-family-heading:"Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--font-family-nav:"Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;--font-color-base:var(--gray-7);--font-color-muted:var(--gray-6);--font-color-heading:var(--gray-9);--font-color-heading3:var(--gray-7);--font-color-bright:var(--gray-9);--font-color-hero-heading:var(--gray-0);--border-color:var(--gray-3);--border-color-hover:var(--gray-4);--border-radius:10px;--background-color:white;--card-background-color:var(--gray-0);--button-background-color:var(--gray-05);--marker:var(--border-color-hover);--link:var(--indigo);--link-hover-color:var(--indigo-muted);--navbar:var(--gray-1);--navbar-border:var(--gray-2);--navbar-color:var(--gray-8);--navbar-color-hover:var(--gray-9);--navbar-background-hover:var(--gray-1);--year:var(--green);--star:var(--yellow);--post-time-color:var(--gray-6);--card-time-color:var(--gray-5);--project-time-color:var(--font-color-muted);--highlight-color:var(--green);--blockquote-background:var(--indigo-muted);--file-background:#eee;--inline-code-background-color:var(--gray-0);--category-link:#dd4eb2;--scrollbar-color:var(--gray-3);--scrollbar-track:var(--gray-4);--content-width:780px;--content-width--small:560px;--content-width--medium:700px;--navbar-height-small:60px}*,:before,:after{box-sizing:border-box}html{font-family:var(--font-family-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-kerning:normal;font-size:16px;font-weight:400;line-height:1.6}body{background:var(--background-color);margin:0;padding:0}a{color:var(--link);text-decoration:none}p,ul,ol,ul,table,blockquote{color:var(--font-color-base);font-size:1rem}@media screen and (min-width:700px){p,ul,ol,ul,table,blockquote{letter-spacing:-.01rem;font-size:1.1rem;line-height:1.625}}p,ul,ol{-webkit-font-smoothing:auto;line-height:1.625;margin-top:0!important;margin-bottom:1.5rem!important}ul{padding-left:1.5rem}ul li ul,ol li ol{margin-top:.5rem;margin-bottom:0}li{margin-bottom:.5rem;padding-left:.25rem;line-height:1.5}li::marker{color:var(--marker);font-size:1.1rem;line-height:1}main{margin-top:var(--navbar-height-small)}blockquote{border:1px solid var(--indigo-light);border-left:6px solid var(--indigo-light);background:var(--blockquote-background);border-radius:var(--border-radius);margin:2rem 0;padding:1.5rem}blockquote p{font-size:1rem;font-weight:400;line-height:1.6}blockquote :last-child{margin:0}blockquote ul{margin-top:1.5rem}blockquote strong{font-weight:700;text-decoration-line:underline;text-decoration-thickness:2px}blockquote.quotation{border:none;border-left:12px solid var(--border-color);color:var(--font-color-base);background:0 0;border-radius:0;padding:0 0 0 1.5rem;font-family:Georgia;font-size:1.1rem;font-style:italic}blockquote.quotation cite{text-transform:uppercase;margin-top:1rem;font-size:.9rem;font-style:normal;display:block}h1,h2,h3,h4,h5{color:var(--font-color-heading);margin-top:0;margin-bottom:1.5rem;scroll-margin-top:3rem;font-weight:600;line-height:1.1}h1:not(:first-child),h2:not(:first-child),h3:not(:first-child),h4:not(:first-child){margin-top:3.5rem}h2+h3{margin-top:1.5rem!important}h2{border-bottom:1px solid var(--border-color);font-size:1.7rem;font-weight:700;font-family:var(--font-family-nav);color:var(--font-color-heading);letter-spacing:-.05rem;margin:0 0 1rem;padding-bottom:.4rem}h2.year{border-bottom:none;font-size:1.9rem}h2 code{font-size:1.7rem!important}h3{color:var(--font-color-heading3);font-size:1.5rem;font-weight:500;font-family:var(--font-family-heading);margin-bottom:1.25rem}h3 code{font-size:1.4rem!important}@media screen and (min-width:700px){main,.dark-margin{margin-top:1rem}h2{font-size:2rem}h2 code{font-size:1.9rem!important}h2.year{border-bottom:none;font-size:2.3rem}h3{letter-spacing:-.02rem;font-size:1.6rem}h3 code{font-size:1.7rem!important}}h4,h4 code{color:var(--font-color-base);text-transform:uppercase;margin-bottom:1.5rem;font-size:1.2rem;font-weight:600}h5{color:var(--font-color-base);font-size:1.1rem;font-weight:700;font-family:var(--font-family-heading);margin-bottom:1rem}.home-heading{border:0;justify-content:space-between;align-items:center;margin-top:2rem;margin-bottom:2rem;padding:0;display:flex}.home-heading .title{font-size:1.7rem;font-family:var(--font-family-base);margin-bottom:0;font-weight:700}@media screen and (min-width:700px){.home-heading{gap:2rem}.home-heading .title{font-size:2rem}}table{border:1px solid var(--border-color);border-collapse:separate;border-spacing:0;border-radius:var(--border-radius);width:100%;max-width:100%;margin-top:0;margin-bottom:1.5rem;font-size:1rem;line-height:1.5;display:table;overflow-x:auto}td,th{-webkit-hyphens:auto;hyphens:auto;text-align:left;word-break:break-word;border-bottom:1px solid var(--border-color);padding:.5rem}th{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);background:var(--card-background-color);border-bottom:2px solid var(--border-color)}img{max-width:100%;display:block}.welcome-splash{z-index:50;color:#f3f4f6;pointer-events:none;background:#030712;justify-content:center;align-items:center;display:flex;position:fixed;inset:0;overflow:hidden}.welcome-splash h1{margin:0;font-size:clamp(3rem,8vw,8rem);font-weight:700}.welcome-splash--leaving{animation:.35s ease-in .4s forwards welcome-splash-exit}@keyframes welcome-splash-exit{to{opacity:0;visibility:hidden;transform:translateY(-100%)}}@media (prefers-reduced-motion:reduce){.welcome-splash--leaving{animation:none}}mark{background:#fdd94a;font-weight:600}u{text-decoration-line:underline;text-decoration-thickness:2px}.container{max-width:var(--content-width);margin-left:auto;margin-right:auto;padding:0 1rem}@media screen and (min-width:700px){.container{padding:0 2rem}}.layout{flex-direction:column;min-height:100vh;display:flex}.segment{margin-top:2rem;margin-bottom:2rem}.segment.small{margin-top:1rem;margin-bottom:1rem}.segment.large{margin-top:3rem;margin-bottom:3rem}.segment.first{margin-top:3rem}@media screen and (min-width:700px){.segment{margin-top:3rem;margin-bottom:3rem}.segment.large{margin-top:5rem;margin-bottom:5rem}.segment.small{margin-top:1.5rem;margin-bottom:1.5rem}}button,a.button{background:var(--button-background-color);font-family:var(--font-family-nav);border-radius:var(--border-radius);cursor:pointer;color:var(--font-color-base);border:1px solid var(--border-color);letter-spacing:0;white-space:nowrap;align-items:center;gap:.25rem;padding:.6rem 1rem;font-size:.9rem;font-weight:500;line-height:1;transition:transform .2s ease-in-out;display:inline-flex}button.large,a.button.large{padding:1rem 1.75rem;font-size:1.1rem;font-weight:400}button.small,a.button.small{padding:.5rem .6rem;font-size:.9rem}button img,a.button img{width:auto;min-width:20px;height:auto;min-height:20px;max-height:20px;margin-right:.25rem}button:hover,a.button:hover{color:var(--font-color-bright);border-color:var(--border-color-hover)}button:active,a.button:active{transform:scale(.95)}@media screen and (min-width:700px){button,a.button{padding:.75rem 1rem;font-size:1rem}}.navigation{z-index:3;background:var(--background-color);width:100%;height:var(--navbar-height-small);font-family:var(--font-family-nav);border-bottom:1px solid var(--border-color);position:fixed;top:0;left:0}.navigation .container{height:var(--navbar-height-small);justify-content:space-between;display:flex}.navigation .nav-wrapper{display:flex}.navigation a,.navigation a:hover{background:0 0;text-decoration:none}.navigation .item.brand span,.theme-toggle span{display:none}.logo{width:36px;min-width:36px;height:36px;min-height:36px}.navigation nav{justify-content:space-between;align-items:center;gap:.3rem;display:flex}.nav-item-outer{align-items:center;display:flex}.nav-image{width:16px;min-width:16px;height:16px;min-height:16px}.navigation a.item,.navigation button.item{cursor:pointer;color:var(--navbar-color);border-radius:var(--border-radius);border:1px solid var(--border-color);justify-content:space-between;align-items:center;gap:.25rem;padding:.3rem .35rem;font-size:.9rem;font-weight:500;transition:transform .2s ease-in-out;display:flex}.navigation nav a.item span{display:none}.navigation a.item.brand{color:var(--font-color-bright);border:none;gap:.4rem;padding:0;font-size:1.1rem;font-weight:700;line-height:1;display:none}.navigation a.item.brand:hover{background:0 0}.navigation a.item:hover,.navigation button.item:hover{background:var(--button-background-color);border-color:var(--border-color-hover);color:var(--navbar-color-hover)}.navigation a.item.active,.navigation button.item.active{background:var(--gray-5);border-color:var(--border-color);color:var(--font-color-bright)}.navigation a.item:active,.navigation button.item:active{transform:scale(.95)}.theme-toggle{align-self:center}.theme-toggle button img{margin:0}.theme-toggle button{border-radius:50%;padding:.4rem}.git-hub{gap:.5rem}@media screen and (min-width:700px){.navigation{border-bottom:none;height:auto;padding:2rem 0;position:static}.navigation .nav-wrapper{display:block}.navigation a.item{gap:.5rem;padding:.5rem .75rem;font-size:1rem}.navigation a.item.brand{margin-bottom:1.5rem;padding:0;font-size:1.2rem;display:inline-flex}.navigation a.item.brand span,.navigation nav a.item span,.theme-toggle span{display:block}.nav-image{width:20px;min-width:20px;height:20px;min-height:20px}.navigation nav{gap:.5rem}.navigation,.navigation .container{height:auto}.theme-toggle{align-self:flex-end}.theme-toggle button{padding:.75rem}}.star{color:var(--star);font-size:.9rem;font-family:var(--font-family-monospace);align-items:center;gap:.5rem;display:flex}.star a:hover{color:var(--font-color-bright);text-decoration-line:underline;text-decoration-thickness:2px}.stars{position:absolute;top:1rem;right:1rem}.card{border:1px solid var(--border-color);border-radius:var(--border-radius);background:var(--card-background-color);padding:1rem;position:relative}@media screen and (min-width:700px){.card.anchored{padding-bottom:3.5rem}.card.anchored.large{padding-bottom:5rem}}.card a.card-header,.card h2{font-size:1rem;line-height:1.3;font-family:var(--font-family-base);color:var(--font-color-heading);border:0;margin:.1rem 0 .5rem;padding:0;font-weight:500;text-decoration:none;display:block}.card a.card-header:hover,.card h2:hover{color:var(--font-color-bright);text-decoration-line:underline;text-decoration-thickness:2px}.card p{font-size:.9rem;line-height:1.5;font-family:var(--font-family-base);margin:0}.card.single{padding:1.5rem}.card.single p{margin:0 0 1.5rem}.card time{font-family:var(--font-family-monospace);color:var(--year);letter-spacing:-.01rem;font-size:.9rem;display:block}.card.muted{background:0 0;border:1px solid #0000;align-items:center;padding:0}.card.muted .pin-image-wrapper{width:30px;height:30px;max-width:30px!important;max-height:30px!important}.card.muted time{display:block}.card.muted h2{margin:.25rem 0 1rem}@media screen and (min-width:700px){.card{padding:1.5rem}.card.muted time{display:block}.card.muted .pin-image-wrapper{width:45px;height:45px;max-width:45px!important;max-height:45px!important}.card a.card-header,.card h2{font-size:1.1rem;font-weight:500}.card.muted{border:1px solid var(--border-color);background:0 0;align-items:center;padding:1rem}.stars{top:1.5rem;right:1.5rem}}main{flex:1}.hero-wrapper{padding-top:2rem;display:grid}.hero{order:2;width:100%;padding:1rem 0 0;position:relative;overflow:hidden}.decoration{order:1;align-items:center;display:flex}.hero h1{color:var(--font-color-heading);margin-bottom:1rem;font-size:2.2rem;font-weight:700;line-height:1.1}p.hero-description{-webkit-font-smoothing:antialiased;color:var(--font-color-base);letter-spacing:-.01rem;margin-top:1.5rem;margin-bottom:1.5rem;font-size:1rem;font-weight:500;line-height:1.6}p.hero-description a{text-decoration-line:underline;text-decoration-thickness:2px}p.hero-description a:hover{text-decoration:none}.hero .sub-title{color:var(--font-color-muted);margin-bottom:.5rem;font-size:1.1rem;font-weight:500}@media screen and (min-width:700px){.hero-wrapper{grid-template-columns:4fr 2fr;align-items:center;gap:1.5rem;padding-top:0}p.hero-description{margin-bottom:0;font-size:1.2rem}.hero{order:1}.decoration{order:2;justify-content:flex-end}.hero h1{font-size:3rem}.hero.index{padding:5rem 0 3rem}}.highlight{color:var(--highlight-color)}.highlight-preview{gap:.5rem;display:grid}@media screen and (min-width:700px){.highlight-preview{grid-template-columns:repeat(2,1fr);gap:1rem}}.project-preview,.image-preview{gap:1rem;display:grid}.image-preview{grid-template-columns:repeat(2,1fr)}.image-thumbnail{height:150px}@media screen and (min-width:700px){.project-preview{grid-template-columns:repeat(2,1fr)}.image-preview{grid-template-columns:repeat(3,1fr)}.image-thumbnail{height:220px}}.post-preview .card p{margin-bottom:1rem}.project-preview .card time{color:var(--year)}.post-preview{gap:1rem;display:grid}@media screen and (min-width:700px){.post-preview{grid-template-columns:repeat(3,1fr);gap:1rem}}.post-preview>div{flex:1}.post-preview a.button{padding:.5rem .6rem;font-size:.9rem}.post-content a{text-decoration-line:underline;text-decoration-thickness:2px}.post-content a:hover{background:var(--link);color:var(--link-hover-color);text-decoration:none}a.anchor,a.anchor:hover{color:var(--link);background:0 0!important}a.anchor svg{fill:var(--link)}a.post{border-bottom:1px solid var(--border-color);background:0 0;gap:1rem;padding:.4rem 0;text-decoration:none;display:flex}a.post:last-of-type{border:none}a.post:hover,a.post:hover h3{color:var(--font-color-bright)}a.post:hover h3{text-decoration-line:underline;text-decoration-thickness:2px}a.post h3{color:var(--font-color-muted);font-size:1rem;font-weight:500;font-family:var(--font-family-base);margin:0;line-height:1.3}a.post time{font-family:var(--font-family-monospace);color:var(--post-time-color);white-space:nowrap;margin-left:auto;font-size:.9rem;font-weight:500;display:none}@media screen and (min-width:700px){.posts.newspaper{-moz-column-gap:2rem;column-gap:2rem;display:grid}a.post time{display:block}a.post h3{font-size:1.1rem;font-weight:600}}.article-content{min-width:0;max-width:100%}.links{margin-top:1rem}@media screen and (min-width:700px){.post-sidebar{grid-template-columns:1fr 1fr;gap:1.5rem;display:grid}}.post-sidebar-card{border:1px solid var(--border-color);background:var(--card-background-color);border-radius:var(--border-radius);margin:1.5rem 0;padding:1rem}.post-sidebar h2{color:var(--font-color-heading);letter-spacing:0;border:none;margin:0 0 1rem;font-size:1.1rem;font-weight:700}.post-sidebar p,.post-sidebar ul{font-size:.9rem}.post-sidebar p:last-of-type{margin-bottom:0}.post-sidebar .tags{gap:.3rem}.post-sidebar a{text-decoration-line:underline;text-decoration-thickness:2px}.post-sidebar a:hover{text-decoration:none}.sidebar-avatar{border-radius:var(--border-radius);max-width:100px;max-height:100px;margin-bottom:1rem;display:block}.list a{color:var(--font-color-base);border-radius:var(--border-radius);background-color:#0000;margin:0 -.3rem;padding:.1rem .5rem;font-size:1rem;font-weight:600}.list a:hover{color:var(--highlight-color);background:#ffffff0d;text-decoration:none}@media screen and (min-width:700px){.post-sidebar-card{padding:1.5rem}.post-sidebar h2{font-size:1.3rem}}.tags,.links{flex-wrap:wrap;gap:.5rem;display:flex}a.tag{border:1px solid var(--border-color);border-radius:var(--border-radius);color:var(--font-color-base);padding:.2rem .4rem;font-size:.8rem;font-weight:400;text-decoration:none;background:var(--button-background-color)!important}a.tag:hover{color:var(--font-color-bright);border-color:var(--highlight-color);text-decoration:none}a.tag.active{color:var(--highlight-color);border-color:var(--highlight-color);font-weight:600}@media screen and (min-width:700px){.categories.anchored,.links.anchored{position:absolute;bottom:1.5rem;left:1.5rem}}a.category{justify-content:space-between;align-items:center;text-decoration:none;display:flex}a.category.active,a.category:hover .count,a.category.active .count{color:var(--highlight-color)}.category .name{font-size:.9rem}.category .count{color:var(--font-color-muted);font-size:.9rem;font-weight:400;font-family:var(--font-family-monospace)}.width.small{max-width:var(--content-width--small)}.width.medium{max-width:var(--content-width--medium)}.flex{gap:1rem;display:flex}.space-between{justify-content:space-between}.align-center{align-items:center}.align-end{align-items:flex-end}.desktop-only{display:none!important}@media screen and (min-width:700px){.desktop-only{display:flex!important}.mobile-only{display:none!important}}.post-image{text-align:center;margin-top:2rem}.header-post-image{margin-bottom:1rem}.header-post-image .pin-image-wrapper{max-width:50px;max-height:50px}.post-header{padding:2rem 0 1rem}.post-header h1{letter-spacing:-.05rem;margin:0;font-size:1.9rem;font-weight:700;line-height:1.2}@media screen and (min-width:700px){.post-header{padding-bottom:1rem}.header-post-image .pin-image-wrapper{max-width:100px;max-height:100px}.post-header h1{font-size:2.6rem;line-height:1.2}}.post-header time{font-family:var(--font-family-monospace);color:var(--font-color-muted);margin-bottom:.25rem;font-size:.9rem;font-weight:400;display:block}.footer{font-family:var(--post-font-family);padding:3rem 0}.footer section{flex-direction:column;align-items:center;gap:1.25rem;display:flex}.footer img{width:auto;max-height:20px;display:inline-block}.footer nav{gap:.25rem;margin:0 1rem;display:flex}.footer a,.footer span{color:var(--font-color-base);align-items:center;padding:0 .5rem;font-size:.9rem;display:flex}.footer a:hover{text-decoration-line:underline;text-decoration-thickness:2px}.pin-resp-image-wrapper{margin-left:0!important}a.pin-resp-image-link{background:0 0!important}.circles{gap:1rem;display:flex}.circle{border-radius:50%;width:40px;min-width:40px;height:40px;min-height:40px;margin:.5rem 0}@media screen and (min-width:700px){.circle{width:30px;min-width:30px;height:30px;min-height:30px}}.image{max-width:100%}.hero-image{max-width:100px}@media screen and (min-width:700px){.hero-image{width:200px;max-width:100%}}.image-thumbnail{border-radius:var(--border-radius);background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%}.text-muted{color:var(--font-color-base)}.text-medium,p.text-medium{font-size:1rem}:root{--gray-0:#faf9f5;--gray-05:#f3f1e9;--gray-4:#a7aaa2;--gray-7:#242824;--gray-8:#202420;--gray-9:#151a16;--portfolio-accent:#315d43;--portfolio-surface:#f5f4ed;--portfolio-pattern:#315d431a;--portfolio-motion:.16s ease-out;--space-small:.75rem;--space-medium:1.5rem;--space-large:clamp(3rem, 6vw, 5rem);--surface-radius:10px;--control-min-height:44px;--content-width:1120px}html.dark{--gray-0:#202420;--gray-05:#282d29;--gray-3:#454d47;--gray-4:#8d9990;--gray-5:#afb9b1;--gray-6:#c6cfc8;--gray-7:#e5eae5;--gray-8:#eef2ee;--gray-9:#f6f8f5;--portfolio-accent:#a5dbb6;--portfolio-surface:#1c231e;--portfolio-pattern:#a5dbb61f;--background-color:#121212;--year:#a5dbb6;--link:#b7c4ff}::selection{color:#15291a;background:#bde5c5}:focus-visible{outline:3px solid var(--portfolio-accent);outline-offset:3px}.skip-link{z-index:20;background:var(--portfolio-surface);color:var(--font-color-heading);padding:.75rem 1rem;position:fixed;top:.5rem;left:.5rem;transform:translateY(-200%)}.skip-link:focus{transform:none}.navigation .item,button,a.button{transition:background-color var(--portfolio-motion), color var(--portfolio-motion), border-color var(--portfolio-motion), transform var(--portfolio-motion)}.navigation a.item.active{background:var(--portfolio-surface);border-color:var(--portfolio-accent)}.navigation a.item,.theme-toggle button{min-width:var(--control-min-height);min-height:var(--control-min-height);justify-content:center}.post-preview a.button{min-height:var(--control-min-height)}.project-preview .card,.about-introduction,.technology-grid{background:var(--portfolio-surface);border:1px solid var(--border-color);border-radius:var(--surface-radius)}.technology-grid{color:var(--portfolio-accent)}.project-preview .card{overflow-wrap:anywhere;min-width:0}.about-introduction{padding:var(--space-medium);margin-bottom:var(--space-large);max-width:75ch}.contact-section{background:var(--background-color)}.contact-section input,.contact-section textarea,.contact-section button{min-height:var(--control-min-height)}button:disabled{cursor:not-allowed;opacity:.6}.project-preview a.button,.project-preview+.card a.button,.project-preview~div button{min-height:var(--control-min-height)}.footer a{min-width:var(--control-min-height);min-height:var(--control-min-height);justify-content:center}.home-heading a.button,.about-introduction~.group a{min-height:var(--control-min-height)}.card a.card-header{min-height:var(--control-min-height);align-items:center;display:flex}.star a{min-width:var(--control-min-height);min-height:var(--control-min-height);justify-content:center;align-items:center;display:inline-flex}.footer img.nav-image{width:auto;height:20px}.home-content{background:var(--background-color);color:var(--font-color-base)}.hero-wrapper{gap:1.5rem;padding:2rem 0 1rem}.hero.index{order:1;overflow:visible}.hero-wrapper .decoration{order:2}.hero.index h1{letter-spacing:-.035em;text-wrap:balance;font-size:clamp(2.6rem,5.5vw,4.5rem)}.hero.index .hero-description{max-width:36rem;color:var(--font-color-muted);font-weight:400}.hero-actions{flex-wrap:wrap;gap:.75rem;margin-top:1.75rem;display:flex}.hero-actions .button{min-height:44px;text-decoration:none}.hero-actions .hero-primary{color:#fff;background:#315d43;border-color:#315d43}.hero-actions .hero-primary:hover{color:#fff;background:#254a34;border-color:#254a34}.decoration{position:relative}.hero-wrapper .decoration{background-color:var(--portfolio-surface);background-image:radial-gradient(var(--portfolio-pattern) 1px, transparent 1px);background-size:10px 10px;border-radius:12px;justify-self:start;padding:1rem}.hero-image{border-radius:4px;width:150px;max-width:100%;height:auto;display:block}.home-content .segment.large{margin-block:clamp(3.5rem,7vw,6rem)}.home-heading h2.title{border:0;margin:0;padding:0}.home-content .card{background:var(--portfolio-surface)}.home-content .card.muted{background:0 0}.card .card-header{color:var(--font-color-heading);font-size:1rem;font-weight:500;line-height:1.3;display:block}.card time,.star{font-variant-numeric:tabular-nums}.home-content .card time,.project-preview .card time{color:var(--portfolio-accent)}.contact-section input::-moz-placeholder{color:#626b78;opacity:1}.contact-section textarea::-moz-placeholder{color:#626b78;opacity:1}.contact-section input::placeholder,.contact-section textarea::placeholder{color:#626b78;opacity:1}html.dark .contact-section input::-moz-placeholder{color:#d1d5db}html.dark .contact-section textarea::-moz-placeholder{color:#d1d5db}html.dark .contact-section input::placeholder,html.dark .contact-section textarea::placeholder{color:#d1d5db}:root{--motion-ease:cubic-bezier(.16, 1, .3, 1);--motion-entrance:.8s;--motion-feedback:.22s}.hero-wrapper .decoration{background-image:radial-gradient(var(--portfolio-pattern) 1px, transparent 1px), linear-gradient(145deg, var(--portfolio-surface), var(--gray-05));box-shadow:0 16px 38px -28px #142d1c80}.home-content .post-preview .card,.project-preview .card{transition:transform var(--motion-feedback) var(--motion-ease), box-shadow var(--motion-feedback) var(--motion-ease), border-color var(--motion-feedback) var(--motion-ease)}.navigation .item,.theme-toggle button,a.button,button.button{transition-duration:var(--motion-feedback);transition-timing-function:var(--motion-ease)}.navigation .item:active,.theme-toggle button:active,a.button:active,button.button:active{transform:scale(.97)}.navigation .item.active .nav-image{transform:translateY(-2px)}.navigation .nav-image,.theme-toggle img{transition:transform var(--motion-feedback) var(--motion-ease)}@media (hover:hover) and (pointer:fine){.navigation .item:hover .nav-image,.theme-toggle button:hover img{transform:translateY(-3px)rotate(-6deg)}.home-content .post-preview .card:hover,.project-preview .card:hover{border-color:var(--portfolio-accent);transform:perspective(900px)rotateX(2deg)rotateY(-3deg)translateY(-6px);box-shadow:0 18px 30px -22px #142d1ca6}}.home-content .post-preview .card:focus-within,.project-preview .card:focus-within{border-color:var(--portfolio-accent)}@media screen and (min-width:700px){.home-content .post-preview{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.home-content .post-preview>.card:first-child{background-image:radial-gradient(var(--portfolio-pattern) 1px, transparent 1px);background-size:12px 12px;grid-row:span 2;min-height:18rem;padding:clamp(1.5rem,3vw,2.5rem)}.home-content .post-preview>.card:first-child .card-header{font-size:clamp(1.5rem,2.5vw,2.2rem);font-weight:700}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}.hero.index h1,.hero:not(.index) h1,.contact-section h1,.hero.index .hero-description,.hero-actions,.hero-wrapper .decoration{animation:portfolio-arrive var(--motion-entrance) var(--motion-ease) both}.hero.index .hero-description{animation-delay:80ms}.hero-actions{animation-delay:.16s}.hero-wrapper .decoration{animation-delay:.12s}@supports (animation-timeline:view()){.home-content .segment,.home-content .post-preview .card,.home-content .highlight-preview .card,.project-preview .card,.about-introduction,.technology-grid{animation:linear both portfolio-reveal;animation-timeline:view();animation-range:entry entry 75%}}}@keyframes portfolio-arrive{0%{transform:translateY(18px)}to{transform:translateY(0)}}@keyframes portfolio-reveal{0%{translate:0 24px}to{translate:0}}@media screen and (min-width:700px){.hero-wrapper{grid-template-columns:minmax(0,1fr) minmax(220px,320px);gap:clamp(2rem,6vw,5rem);padding-block:2rem 1rem}.hero.index{padding:2rem 0}.hero-wrapper .decoration{justify-self:end;width:100%;padding:1.25rem}.hero-image{width:100%}}@media (prefers-reduced-motion:reduce){.navigation .item,.navigation .nav-image,.theme-toggle img,.home-content .post-preview .card,.project-preview .card,button,a.button{transition:none}.home-content .post-preview .card:hover,.project-preview .card:hover,.navigation .item:hover .nav-image,.theme-toggle button:hover img,.navigation .item:active,.theme-toggle button:active,a.button:active,button.button:active{transform:none}}::-webkit-scrollbar{background:var(--scrollbar-track);width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--scrollbar-color);border-radius:2px}
