/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);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}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hidden{display:none}.table{display:table}.h-620{height:calc(var(--spacing) * 620)}.resize{resize:both}.overline{text-decoration-line:overline}}.header{z-index:11;width:100%;height:var(--nav-height);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:var(--transition);background-color:#0a192fd9;justify-content:space-between;align-items:center;padding:0 50px;display:flex;position:fixed;top:0;filter:none!important;pointer-events:auto!important;-webkit-user-select:auto!important;user-select:auto!important}@media (max-width:1080px){.header{padding:0 40px}}@media (max-width:768px){.header{padding:0 25px}}@media (prefers-reduced-motion:no-preference){.header.scroll-up{height:var(--nav-scroll-height);box-shadow:0 10px 30px -10px var(--navy-shadow);background-color:#0a192fd9;transform:translateY(0)}.header.scroll-down{height:var(--nav-scroll-height);transform:translateY(calc(var(--nav-scroll-height) * -1));box-shadow:0 10px 30px -10px var(--navy-shadow)}}.nav{width:100%;color:var(--lightest-slate);font-family:var(--font-mono);counter-reset:item 0;z-index:12;justify-content:space-between;align-items:center;display:flex;position:relative}.nav .logo{justify-content:center;align-items:center;display:flex}.nav .logo a{z-index:1;width:42px;height:42px;display:block;position:relative}.nav .logo a .logo-img{-webkit-user-select:none;user-select:none;border-radius:8px;width:42px;height:42px;display:block}@media (prefers-reduced-motion:no-preference){.nav .logo a .logo-img{transition:var(--transition)}}.nav .logo a:hover,.nav .logo a:focus{outline:0;transform:translate(-4px,-4px)}:is(.nav .logo a:hover,.nav .logo a:focus) .logo-img{box-shadow:4px 4px 0 0 var(--green)}.nav-links{align-items:center;display:flex}@media (max-width:768px){.nav-links{display:none}}.nav-links ol{justify-content:space-between;align-items:center;margin:0;padding:0;list-style:none;display:flex}.nav-links ol li{counter-increment:item 1;font-size:var(--fz-xs);margin:0 5px;position:relative}.nav-links ol li a{padding:10px}.nav-links ol li a:before{content:"0" counter(item) ".";color:var(--green);font-size:var(--fz-xxs);text-align:right;margin-right:5px}.nav-links .resume-button{font-size:var(--fz-xs);margin-left:15px}@media (prefers-reduced-motion:no-preference){.nav-fade{opacity:0;animation:fadein .3s var(--easing) both;animation-delay:var(--nav-delay,0s)}.nav-fadedown{opacity:0;animation:fadedown .3s var(--easing) both;animation-delay:var(--nav-delay,0s)}}.menu{display:none}@media (max-width:768px){.menu{display:block}}.hamburger-button{display:none}@media (max-width:768px){.hamburger-button{z-index:10;color:inherit;text-transform:none;background-color:#0000;border:0;justify-content:center;align-items:center;margin-right:-15px;padding:15px;transition-property:opacity,filter;transition-duration:.15s;transition-timing-function:linear;display:flex;position:relative}}.hamburger-button .ham-box{width:var(--hamburger-width);height:24px;display:inline-block;position:relative}.hamburger-button .ham-box-inner{width:var(--hamburger-width);border-radius:var(--border-radius);background-color:var(--green);height:2px;transition:transform .22s cubic-bezier(.55,.055,.675,.19);position:absolute;top:50%;right:0;transform:rotate(0)}.hamburger-button .ham-box-inner:before,.hamburger-button .ham-box-inner:after{content:"";width:var(--hamburger-width);background-color:var(--green);border-radius:4px;height:2px;transition-property:transform;transition-duration:.15s;transition-timing-function:ease;display:block;position:absolute;left:auto;right:0}.hamburger-button .ham-box-inner:before{opacity:1;width:120%;transition:var(--ham-before);top:-10px}.hamburger-button .ham-box-inner:after{width:80%;transition:var(--ham-after);bottom:-10px;transform:rotate(0)}.hamburger-button.menu-open .ham-box-inner{transition-delay:.12s;transition-timing-function:cubic-bezier(.215,.61,.355,1);transform:rotate(225deg)}.hamburger-button.menu-open .ham-box-inner:before{opacity:0;width:100%;transition:var(--ham-before-active);top:0}.hamburger-button.menu-open .ham-box-inner:after{width:100%;transition:var(--ham-after-active);bottom:0;transform:rotate(-90deg)}.sidebar{display:none}@media (max-width:768px){.sidebar{background-color:var(--light-navy);width:min(75vw,400px);height:100vh;box-shadow:-10px 0px 30px -15px var(--navy-shadow);z-index:9;visibility:hidden;transition:var(--transition);outline:0;justify-content:center;align-items:center;padding:50px 10px;display:flex;position:fixed;top:0;bottom:0;right:0;transform:translate(100vw)}.sidebar.menu-open{visibility:visible;transform:translate(0)}}.sidebar nav{width:100%;color:var(--lightest-slate);font-family:var(--font-mono);text-align:center;flex-direction:column;justify-content:space-between;align-items:center;display:flex}.sidebar ol{width:100%;margin:0;padding:0;list-style:none}.sidebar ol li{counter-increment:item 1;font-size:clamp(var(--fz-sm), 4vw, var(--fz-lg));margin:0 auto 20px;position:relative}@media (max-width:600px){.sidebar ol li{margin:0 auto 10px}}.sidebar ol li:before{content:"0" counter(item) ".";color:var(--green);font-size:var(--fz-sm);margin-bottom:5px;display:block}.sidebar ol a{color:inherit;transition:var(--transition);width:100%;padding:3px 20px 20px;text-decoration:none;display:inline-block;position:relative}:is(.sidebar ol a:hover,.sidebar ol a:focus-visible){color:var(--green);outline:0}.sidebar .resume-link{width:max-content;margin:10% auto 0;padding:18px 50px}.side{z-index:10;width:40px;color:var(--light-slate);position:fixed;bottom:0}.side.side-left{left:40px;right:auto}.side.side-right{left:auto;right:40px}@media (max-width:1080px){.side.side-left{left:20px}.side.side-right{right:20px}}@media (max-width:768px){.side{display:none}}@media (prefers-reduced-motion:no-preference){.side{opacity:0;animation:fadein .3s var(--easing) both;animation-delay:2s}}.social-list{flex-direction:column;align-items:center;margin:0;padding:0;list-style:none;display:flex}.social-list:after{content:"";background-color:var(--light-slate);width:1px;height:90px;margin:0 auto;display:block}.social-list li:last-of-type{margin-bottom:20px}.social-list li a{padding:10px}.social-list li a:hover,.social-list li a:focus{transform:translateY(-3px)}.social-list li a svg{width:20px;height:20px}.email-side{flex-direction:column;align-items:center;display:flex;position:relative}.email-side:after{content:"";background-color:var(--light-slate);width:1px;height:90px;margin:0 auto;display:block}.email-side a{font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:var(--fz-lg);letter-spacing:.1em;writing-mode:vertical-rl;margin:20px auto;padding:10px}.email-side a:hover,.email-side a:focus{transform:translateY(-3px)}.hero{flex-direction:column;justify-content:center;align-items:flex-start;height:100vh;min-height:100vh;padding:0;display:flex}@media (max-height:700px) and (min-width:700px),(max-width:360px){.hero{height:auto;padding-top:var(--nav-height)}}.hero h1{color:var(--green);font-family:var(--font-mono);font-size:clamp(var(--fz-sm), 5vw, var(--fz-md));margin:0 0 30px 4px;font-weight:400}@media (max-width:480px){.hero h1{margin:0 0 20px 2px}}.hero h3{color:var(--slate);margin-top:5px;line-height:.9}.hero p{max-width:540px;margin:20px 0 0}.hero .email-link{margin-top:50px}@media (prefers-reduced-motion:no-preference){.hero .hero-item{opacity:0;animation:fadeup .5s var(--easing) both;animation-delay:var(--hero-delay,.1s)}}.about{max-width:900px}.about .inner{grid-gap:50px;grid-template-columns:3fr 2fr;display:grid}@media (max-width:768px){.about .inner{display:block}}.about ul.skills-list{grid-gap:0 10px;grid-template-columns:repeat(2,minmax(140px,200px));margin:20px 0 0;padding:0;list-style:none;display:grid;overflow:hidden}.about ul.skills-list li{font-family:var(--font-mono);font-size:var(--fz-xs);margin-bottom:10px;padding-left:20px;position:relative}.about ul.skills-list li:before{content:"▹";color:var(--green);font-size:var(--fz-sm);line-height:12px;position:absolute;left:0}.about .pic{max-width:300px;position:relative}@media (max-width:768px){.about .pic{width:70%;margin:50px auto 0}}.about .pic .wrapper{box-shadow:0 10px 30px -15px var(--navy-shadow);border-radius:var(--border-radius);background-color:var(--green);width:100%;transition:var(--transition);display:block;position:relative}.about .pic .wrapper:hover,.about .pic .wrapper:focus{box-shadow:0 20px 30px -15px var(--navy-shadow);outline:0;transform:translate(-4px,-4px)}:is(.about .pic .wrapper:hover,.about .pic .wrapper:focus):after{transform:translate(8px,8px)}:is(.about .pic .wrapper:hover,.about .pic .wrapper:focus) .img{filter:none;mix-blend-mode:normal}.about .pic .wrapper .img{border-radius:var(--border-radius);mix-blend-mode:multiply;filter:grayscale()contrast();transition:var(--transition);position:relative}.about .pic .wrapper:before,.about .pic .wrapper:after{content:"";border-radius:var(--border-radius);width:100%;height:100%;transition:var(--transition);display:block;position:absolute}.about .pic .wrapper:before{background-color:var(--navy);mix-blend-mode:screen;top:0;left:0}.about .pic .wrapper:after{border:2px solid var(--green);z-index:-1;top:14px;left:14px}.jobs{max-width:700px}.jobs .inner{display:flex}@media (max-width:600px){.jobs .inner{display:block}}@media (min-width:700px){.jobs .inner{min-height:340px}}.jobs-tab-list{z-index:3;width:max-content;margin:0;padding:0;list-style:none;position:relative}@media (max-width:600px){.jobs-tab-list{width:calc(100% + 100px);margin-bottom:30px;margin-left:-50px;padding-left:50px;display:flex;overflow-x:auto}}@media (max-width:480px){.jobs-tab-list{width:calc(100% + 50px);margin-left:-25px;padding-left:25px}}@media (max-width:600px){.jobs-tab-list button:first-of-type{margin-left:50px}}@media (max-width:480px){.jobs-tab-list button:first-of-type{margin-left:25px}}@media (max-width:600px){.jobs-tab-list button:last-of-type{padding-right:50px}}@media (max-width:480px){.jobs-tab-list button:last-of-type{padding-right:25px}}.jobs-tab-button{width:100%;height:var(--tab-height);border-left:2px solid var(--lightest-navy);color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-xs);text-align:left;white-space:nowrap;transition:var(--transition);background-color:#0000;align-items:center;padding:0 20px 2px;text-decoration:none;display:flex;position:relative}.jobs-tab-button.active{color:var(--green)}@media (max-width:768px){.jobs-tab-button{padding:0 15px 2px}}@media (max-width:600px){.jobs-tab-button{border-left:0;border-bottom:2px solid var(--lightest-navy);text-align:center;justify-content:center;min-width:120px;padding:0 15px}}.jobs-tab-button:hover,.jobs-tab-button:focus{background-color:var(--light-navy);color:var(--green)}.jobs-highlight{z-index:10;width:2px;height:var(--tab-height);border-radius:var(--border-radius);background:var(--green);transform:translateY(calc(var(--active-tab) * var(--tab-height)));transition:transform .25s cubic-bezier(.645,.045,.355,1) .1s;position:absolute;top:0;left:0}@media (max-width:600px){.jobs-highlight{width:100%;max-width:var(--tab-width);height:2px;transform:translateX(calc(var(--active-tab) * var(--tab-width)));margin-left:50px;top:auto;bottom:0}}@media (max-width:480px){.jobs-highlight{margin-left:25px}}.jobs-tab-panels{width:100%;margin-left:20px;position:relative}@media (max-width:600px){.jobs-tab-panels{margin-left:0}}.jobs-tab-panel{width:100%;height:auto;padding:10px 5px}@media (prefers-reduced-motion:no-preference){.jobs-tab-panel{animation:fadein .25s var(--easing) both}}.jobs-tab-panel ul{font-size:var(--fz-lg);margin:0;padding:0;list-style:none}.jobs-tab-panel ul li{margin-bottom:10px;padding-left:30px;position:relative}.jobs-tab-panel ul li:before{content:"▹";color:var(--green);position:absolute;left:0}.jobs-tab-panel h3{font-size:var(--fz-xxl);margin-bottom:2px;font-weight:500;line-height:1.3}.jobs-tab-panel h3 .company{color:var(--green)}.jobs-tab-panel .range{color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xs);margin-bottom:25px}.featured-grid{margin:0;padding:0;list-style:none}.featured-grid a{z-index:1;position:relative}.featured-project{grid-gap:10px;grid-template-columns:repeat(12,1fr);align-items:center;display:grid;position:relative}@media (max-width:768px){.featured-project{box-shadow:0 10px 30px -15px var(--navy-shadow)}}.featured-project:not(:last-of-type){margin-bottom:100px}@media (max-width:768px){.featured-project:not(:last-of-type){margin-bottom:70px}}@media (max-width:480px){.featured-project:not(:last-of-type){margin-bottom:30px}}.featured-project:nth-of-type(odd) .project-content{text-align:right;grid-column:7/-1}@media (max-width:1080px){.featured-project:nth-of-type(odd) .project-content{grid-column:5/-1}}@media (max-width:768px){.featured-project:nth-of-type(odd) .project-content{text-align:left;grid-column:1/-1;padding:40px 40px 30px}}@media (max-width:480px){.featured-project:nth-of-type(odd) .project-content{padding:25px 25px 20px}}.featured-project:nth-of-type(odd) .project-tech-list{justify-content:flex-end}@media (max-width:768px){.featured-project:nth-of-type(odd) .project-tech-list{justify-content:flex-start}}.featured-project:nth-of-type(odd) .project-tech-list li{margin:0 0 5px 20px}@media (max-width:768px){.featured-project:nth-of-type(odd) .project-tech-list li{margin:0 10px 5px 0}}.featured-project:nth-of-type(odd) .project-links{justify-content:flex-end;margin-left:0;margin-right:-10px}@media (max-width:768px){.featured-project:nth-of-type(odd) .project-links{justify-content:flex-start;margin-left:-10px;margin-right:0}}.featured-project:nth-of-type(odd) .project-image{grid-column:1/8}@media (max-width:768px){.featured-project:nth-of-type(odd) .project-image{grid-column:1/-1}}.featured-project .project-content{grid-area:1/1/-1/7;position:relative}@media (max-width:1080px){.featured-project .project-content{grid-column:1/9}}@media (max-width:768px){.featured-project .project-content{z-index:5;flex-direction:column;grid-column:1/-1;justify-content:center;height:100%;padding:40px 40px 30px;display:flex}}@media (max-width:480px){.featured-project .project-content{padding:30px 25px 20px}}.featured-project .project-overline{color:var(--green);font-family:var(--font-mono);font-size:var(--fz-xs);margin:10px 0;font-weight:400}.featured-project .project-title{color:var(--lightest-slate);font-size:clamp(24px,5vw,28px)}@media (min-width:768px){.featured-project .project-title{margin:0 0 20px}}@media (max-width:768px){.featured-project .project-title{color:var(--white)}.featured-project .project-title a{position:static}.featured-project .project-title a:before{content:"";z-index:0;width:100%;height:100%;display:block;position:absolute;top:0;left:0}}.featured-project .project-description{box-shadow:0 10px 30px -15px var(--navy-shadow);transition:var(--transition);z-index:2;border-radius:var(--border-radius);background-color:var(--light-navy);color:var(--light-slate);font-size:var(--fz-lg);padding:25px;position:relative}.featured-project .project-description:hover{box-shadow:0 20px 30px -15px var(--navy-shadow)}@media (max-width:768px){.featured-project .project-description{box-shadow:none;background-color:#0000;padding:20px 0}.featured-project .project-description:hover{box-shadow:none}}.featured-project .project-description strong{color:var(--white);font-weight:400}.featured-project .project-tech-list{z-index:2;flex-wrap:wrap;margin:25px 0 10px;padding:0;list-style:none;display:flex;position:relative}.featured-project .project-tech-list li{color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xs);white-space:nowrap;margin:0 20px 5px 0}@media (max-width:768px){.featured-project .project-tech-list{margin:10px 0}.featured-project .project-tech-list li{color:var(--lightest-slate);margin:0 10px 5px 0}}.featured-project .project-links{color:var(--lightest-slate);align-items:center;margin-top:10px;margin-left:-10px;display:flex;position:relative}.featured-project .project-links a{justify-content:center;align-items:center;padding:10px;display:flex}.featured-project .project-links a.external svg{width:22px;height:22px;margin-top:-4px}.featured-project .project-links a svg{width:20px;height:20px}.featured-project .project-image{box-shadow:0 10px 30px -15px var(--navy-shadow);transition:var(--transition);z-index:1;grid-area:1/6/-1/-1;position:relative}.featured-project .project-image:hover{box-shadow:0 20px 30px -15px var(--navy-shadow)}@media (max-width:768px){.featured-project .project-image{opacity:.25;grid-column:1/-1;height:100%}}.featured-project .project-image a{background-color:var(--green);border-radius:var(--border-radius);vertical-align:middle;width:100%;height:100%}.featured-project .project-image a:hover,.featured-project .project-image a:focus{background:0 0;outline:0}:is(.featured-project .project-image a:hover,.featured-project .project-image a:focus):before,:is(.featured-project .project-image a:hover,.featured-project .project-image a:focus) .img{filter:none;background:0 0}.featured-project .project-image a:before{content:"";z-index:3;width:100%;height:100%;transition:var(--transition);background-color:var(--navy);mix-blend-mode:screen;position:absolute;inset:0}.featured-project .project-image .img{border-radius:var(--border-radius);mix-blend-mode:multiply;filter:grayscale()contrast()brightness(90%)}@media (max-width:768px){.featured-project .project-image .img{object-fit:cover;filter:grayscale()contrast()brightness(50%);width:auto;height:100%}}.other-projects{flex-direction:column;align-items:center;display:flex}.other-projects h2{font-size:clamp(24px, 5vw, var(--fz-heading))}.other-projects .archive-link{font-family:var(--font-mono);font-size:var(--fz-sm)}.other-projects .archive-link:after{bottom:.1em}.other-projects .projects-grid{grid-gap:15px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));margin:50px 0 0;padding:0;list-style:none;display:grid;position:relative}@media (max-width:1080px){.other-projects .projects-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}}.other-projects .more-button{margin:80px auto 0}.project-card{cursor:default;transition:var(--transition);position:relative}@media (prefers-reduced-motion:no-preference){:is(.project-card:hover,.project-card:focus-within) .project-inner{transform:translateY(-7px)}}.project-card a{z-index:1;position:relative}.project-card .project-inner{box-shadow:0 10px 30px -15px var(--navy-shadow);border-radius:var(--border-radius);background-color:var(--light-navy);height:100%;transition:var(--transition);flex-direction:column;justify-content:space-between;align-items:flex-start;padding:2rem 1.75rem;display:flex;position:relative;overflow:auto}.project-card .project-inner:hover{box-shadow:0 20px 30px -15px var(--navy-shadow)}.project-card .project-top{justify-content:space-between;align-items:center;width:100%;margin-bottom:35px;display:flex}.project-card .project-top .folder{color:var(--green)}.project-card .project-top .folder svg{width:40px;height:40px}.project-card .project-top .project-links{color:var(--light-slate);align-items:center;margin-right:-10px;display:flex}.project-card .project-top .project-links a{justify-content:center;align-items:center;padding:5px 7px;display:flex}.project-card .project-top .project-links a.external svg{width:22px;height:22px;margin-top:-4px}.project-card .project-top .project-links a svg{width:20px;height:20px}.project-card .project-title{color:var(--lightest-slate);font-size:var(--fz-xxl);margin:0 0 10px}.project-card .project-title a{position:static}.project-card .project-title a:before{content:"";z-index:0;width:100%;height:100%;display:block;position:absolute;top:0;left:0}.project-card .project-description{color:var(--light-slate);font-size:17px}.project-card .project-tech-list{flex-wrap:wrap;flex-grow:1;align-items:flex-end;margin:20px 0 0;padding:0;list-style:none;display:flex}.project-card .project-tech-list li{font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:1.75}.project-card .project-tech-list li:not(:last-of-type){margin-right:15px}.contact{text-align:center;max-width:600px;margin:0 auto 100px}@media (max-width:768px){.contact{margin:0 auto 50px}}.contact .contact-overline{color:var(--green);font-family:var(--font-mono);font-size:var(--fz-md);margin-bottom:20px;font-weight:400;display:block}.contact .contact-overline:before{font-size:var(--fz-sm);bottom:0}.contact .contact-overline:after{display:none}.contact .title{font-size:clamp(40px,5vw,60px)}.contact .email-link{margin-top:50px}.contact .contact-phone{color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-sm);margin-top:20px}.contact .contact-phone a{color:inherit}.footer{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:auto;min-height:70px;padding:15px;display:flex}.footer .footer-socials{display:none}@media (max-width:768px){.footer .footer-socials{width:100%;max-width:270px;color:var(--light-slate);margin:0 auto 10px;display:block}}.footer .footer-socials ul{justify-content:space-between;align-items:center;margin:0;padding:0;list-style:none;display:flex}.footer .footer-socials ul a{padding:10px}.footer .footer-socials ul a svg{width:20px;height:20px}.footer .credit{color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:1}.footer .credit a{padding:10px}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Light.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-LightItalic.woff2)format("woff2");font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-RegularItalic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-MediumItalic.woff2)format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Semibold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-SemiboldItalic.woff2)format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-RegularItalic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-MediumItalic.woff2)format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-Semibold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-SemiboldItalic.woff2)format("woff2");font-weight:600;font-style:italic;font-display:swap}:root{--dark-navy:#020c1b;--navy:#0a192f;--light-navy:#112240;--lightest-navy:#233554;--navy-shadow:#020c1bb3;--dark-slate:#495670;--slate:#8892b0;--light-slate:#a8b2d1;--lightest-slate:#ccd6f6;--white:#e6f1ff;--green:#64ffda;--green-tint:#64ffda1a;--font-sans:"Calibre", "Inter", "San Francisco", "SF Pro Text", -apple-system, system-ui, sans-serif;--font-mono:"SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;--fz-xxs:12px;--fz-xs:13px;--fz-sm:14px;--fz-md:16px;--fz-lg:18px;--fz-xl:20px;--fz-xxl:22px;--fz-heading:32px;--border-radius:4px;--nav-height:100px;--nav-scroll-height:70px;--tab-height:42px;--tab-width:120px;--easing:cubic-bezier(.645, .045, .355, 1);--transition:all .25s cubic-bezier(.645, .045, .355, 1);--hamburger-width:30px;--ham-before:top .1s ease-in .25s, opacity .1s ease-in;--ham-before-active:top .1s ease-out, opacity .1s ease-out .12s;--ham-after:bottom .1s ease-in .25s, transform .22s cubic-bezier(.55, .055, .675, .19);--ham-after-active:bottom .1s ease-out, transform .22s cubic-bezier(.215, .61, .355, 1) .12s;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{box-sizing:border-box;scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:var(--dark-slate) var(--navy);width:100%}*,:before,:after{box-sizing:inherit}::selection{background-color:var(--lightest-navy);color:var(--lightest-slate)}:focus{outline:2px dashed var(--green);outline-offset:3px}:focus:not(:focus-visible){outline-offset:0px;outline:none}:focus-visible{outline:2px dashed var(--green);outline-offset:3px}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:var(--navy)}::-webkit-scrollbar-thumb{background-color:var(--dark-slate);border:3px solid var(--navy);border-radius:10px}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:var(--navy);width:100%;min-height:100%;color:var(--slate);font-family:var(--font-sans);font-size:var(--fz-xl);margin:0;line-height:1.3;overflow-x:hidden}@media (max-width:480px){body{font-size:var(--fz-lg)}}body.nav-open{overflow:hidden}body.nav-open .header{background-color:#0000;transform:none}body.nav-open #content>*{filter:blur(5px)brightness(.7);transition:var(--transition);pointer-events:none;-webkit-user-select:none;user-select:none}#root{grid-template-rows:1fr auto;grid-template-columns:100%;min-height:100vh;display:grid}main{counter-reset:section;width:100%;max-width:1600px;min-height:100vh;margin:0 auto;padding:0 150px}@media (max-width:1080px){main{padding:0 100px}}@media (max-width:768px){main{padding:0 50px}}@media (max-width:480px){main{padding:0 25px}}section{max-width:1000px;margin:0 auto;padding:100px 0}@media (max-width:768px){section{padding:80px 0}}@media (max-width:480px){section{padding:60px 0}}h1,h2,h3,h4,h5,h6{color:var(--lightest-slate);margin:0 0 10px;font-weight:600;line-height:1.1}.big-heading{margin:0;font-size:clamp(40px,8vw,80px)}.medium-heading{margin:0;font-size:clamp(40px,8vw,60px)}.numbered-heading{width:100%;font-size:clamp(26px, 5vw, var(--fz-heading));white-space:nowrap;align-items:center;margin:10px 0 40px;display:flex;position:relative}.numbered-heading:before{counter-increment:section;content:"0" counter(section) ".";color:var(--green);font-family:var(--font-mono);font-size:clamp(var(--fz-md), 3vw, var(--fz-xl));margin-right:10px;font-weight:400;position:relative;bottom:4px}@media (max-width:480px){.numbered-heading:before{margin-bottom:-3px;margin-right:5px}}.numbered-heading:after{content:"";background-color:var(--lightest-navy);width:300px;height:1px;margin-left:20px;display:block;position:relative;top:-5px}@media (max-width:1080px){.numbered-heading:after{width:200px}}@media (max-width:768px){.numbered-heading:after{width:100%}}@media (max-width:600px){.numbered-heading:after{margin-left:10px}}img,svg{vertical-align:middle;width:100%;max-width:100%}svg{fill:currentColor;height:100%}svg.feather{fill:none}a{text-decoration-skip-ink:auto;color:inherit;transition:var(--transition);text-decoration:none;display:inline-block;position:relative}a:hover,a:focus{color:var(--green)}button{cursor:pointer;border:0;border-radius:0;font-family:inherit}p{margin:0 0 15px}p:last-child,p:last-of-type{margin:0}p>a{color:var(--green);transition:var(--transition);display:inline-block;position:relative}:is(p>a:hover,p>a:focus-visible){color:var(--green);outline:0}:is(p>a:hover,p>a:focus-visible):after{width:100%}p>a:after{content:"";background-color:var(--green);opacity:.5;width:0;height:1px;display:block;position:relative;bottom:.37em}@media (prefers-reduced-motion:no-preference){p>a:after{transition:var(--transition)}}.inline-link{color:var(--green);transition:var(--transition);display:inline-block;position:relative}:is(.inline-link:hover,.inline-link:focus-visible){color:var(--green);outline:0}:is(.inline-link:hover,.inline-link:focus-visible):after{width:100%}.inline-link:after{content:"";background-color:var(--green);opacity:.5;width:0;height:1px;display:block;position:relative;bottom:.37em}@media (prefers-reduced-motion:no-preference){.inline-link:after{transition:var(--transition)}}.btn,.btn-small,.btn-big{color:var(--green);border:1px solid var(--green);border-radius:var(--border-radius);font-family:var(--font-mono);transition:var(--transition);background-color:#0000;line-height:1;text-decoration:none}:is(:is(.btn,.btn-small,.btn-big):hover,:is(.btn,.btn-small,.btn-big):focus-visible){box-shadow:4px 4px 0 0 var(--green);outline:none;transform:translate(-5px,-5px)}:is(.btn,.btn-small,.btn-big):after{display:none!important}.btn{font-size:var(--fz-xs);padding:1.25rem 1.75rem}.btn-small{font-size:var(--fz-xs);padding:.75rem 1rem}:is(.btn-small:hover,.btn-small:focus-visible){box-shadow:3px 3px 0 0 var(--green);transform:translate(-4px,-4px)}.btn-big{font-size:var(--fz-sm);padding:1.25rem 1.75rem}.fancy-list{font-size:var(--fz-lg);margin:0;padding:0;list-style:none}.fancy-list li{margin-bottom:10px;padding-left:30px;position:relative}.fancy-list li:before{content:"▹";color:var(--green);position:absolute;left:0}.skip-to-content{color:var(--green);border:1px solid var(--green);border-radius:var(--border-radius);font-size:var(--fz-xs);font-family:var(--font-mono);transition:var(--transition);z-index:-99;background-color:#0000;width:1px;height:1px;padding:1.25rem 1.75rem;line-height:1;text-decoration:none;position:absolute;top:auto;left:-999px;overflow:hidden}.skip-to-content:hover,.skip-to-content:focus{background-color:var(--green);color:var(--navy);z-index:99;width:auto;height:auto;box-shadow:none;top:0;left:0;overflow:auto;transform:none}#logo{color:var(--green)}.overline{color:var(--green);font-family:var(--font-mono);font-size:var(--fz-md);font-weight:400}@keyframes fadeup{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadedown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:no-preference){.fadeup-enter{opacity:0;animation:fadeup .5s var(--easing) both}.fadedown-enter{opacity:0;animation:fadedown .5s var(--easing) both}.fade-enter{opacity:0;animation:fadein .5s var(--easing) both}}html.js .reveal{visibility:hidden}@media (prefers-reduced-motion:no-preference){html.js .reveal:not(.revealed){opacity:0;transform:translateY(20px)}html.js .reveal.revealed{visibility:visible;opacity:1;transition:opacity .5s var(--easing), transform .5s var(--easing);transition-delay:var(--reveal-delay,.2s);transform:translateY(0)}}html.js .reveal.revealed,html:not(.js) .reveal{visibility:visible}
