@import"https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,700;1,400;1,700&display=swap";:root{color-scheme:light dark;--text-light: color(display-p3 .05 .08 .07);--background-light: color(display-p3 .99 .99 .98);--primary-light: color(display-p3 .55 .75 .7);--primary-foreground-light: color(display-p3 .85 .95 .92);--secondary-light: color(display-p3 .85 .7 .85);--secondary-foreground-light: color(display-p3 .95 .88 .95);--accent-light: color(display-p3 .85 .8 .6);--accent-foreground-light: color(display-p3 .92 .88 .75);--text-dark: color-mix( in display-p3, color(display-p3 .95 .98 .97), white 5% );--background-dark: color-mix( in display-p3, color(display-p3 .08 .1 .09), black 20% );--primary-dark: color-mix( in display-p3, color(display-p3 .55 .75 .7), black 5% );--primary-foreground-dark: color-mix( in display-p3, color(display-p3 .65 .8 .75), black 50% );--secondary-dark: color-mix( in display-p3, color(display-p3 .85 .7 .85), black 15% );--secondary-foreground-dark: color-mix( in display-p3, color(display-p3 .75 .65 .75), black 40% );--accent-dark: color-mix( in display-p3, color(display-p3 .85 .8 .6), black 15% );--accent-foreground-dark: color-mix( in display-p3, color(display-p3 .8 .75 .6), black 40% );--font-primary: "Lora";--page-padding-height: 2%;--page-padding-width: 10%}@media screen and (min-width:430px){:root{--page-padding-height: 4%;--page-padding-width: 15%}}@media screen and (min-width:1024px){:root{--page-padding-height: 5%;--page-padding-width: 20%}}@media screen and (min-width:1920px){:root{--page-padding-height: 6%;--page-padding-width: 25%}}@view-transition{navigation:auto}.transition-line{position:fixed;width:33.333%;height:100vh;pointer-events:none;z-index:10000}.transition-line-1{left:0;top:100%;background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark));view-transition-name:bar-left}.transition-line-2{left:33.333%;top:-110%;background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark));view-transition-name:bar-middle}.transition-line-3{left:66.666%;top:100%;width:33.334%;background-color:light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark));view-transition-name:bar-right}::view-transition-old(root){animation:hideAtMidpoint .5s cubic-bezier(.4,0,.2,1)}::view-transition-new(root){animation:showAtMidpoint .5s cubic-bezier(.4,0,.2,1)}::view-transition-group(bar-left){z-index:10001;animation-duration:.5s}::view-transition-old(bar-left),::view-transition-new(bar-left){animation:slideUpFull .5s cubic-bezier(.4,0,.2,1);mix-blend-mode:normal}::view-transition-group(bar-middle){z-index:10001;animation-duration:.5s}::view-transition-old(bar-middle),::view-transition-new(bar-middle){animation:slideDownFull .5s cubic-bezier(.4,0,.2,1);mix-blend-mode:normal}::view-transition-group(bar-right){z-index:10001;animation-duration:.5s}::view-transition-old(bar-right),::view-transition-new(bar-right){animation:slideUpFull .5s cubic-bezier(.4,0,.2,1);mix-blend-mode:normal}@keyframes slideUpFull{0%{transform:translateY(0)}50%{transform:translateY(-100%)}to{transform:translateY(-200%)}}@keyframes slideDownFull{0%{transform:translateY(0)}50%{transform:translateY(100%)}to{transform:translateY(220%)}}@keyframes hideAtMidpoint{0%,49.99%{opacity:1}50%,to{opacity:0}}@keyframes showAtMidpoint{0%,49.99%{opacity:0}50%,to{opacity:1}}cat-gallery{display:flex;flex-direction:column;gap:clamp(1rem,2vw,1.5rem);width:100vw;max-width:100vw;overflow:hidden;padding:clamp(2rem,4vw,4rem) 0}cat-row{display:flex;gap:clamp(1rem,2vw,1.5rem);animation-duration:40s;animation-timing-function:linear;animation-iteration-count:infinite;will-change:transform;flex-wrap:nowrap}cat-row:nth-child(odd){animation-name:slideRight}cat-row:nth-child(2n){animation-name:slideLeft}@keyframes slideRight{0%{transform:translate(0)}to{transform:translate(calc(-50% - clamp(.5rem,1vw,.75rem)))}}@keyframes slideLeft{0%{transform:translate(calc(-50% - clamp(.5rem,1vw,.75rem)))}to{transform:translate(0)}}*{padding:0;margin:0;box-sizing:border-box}html{background-color:light-dark(var(--background-light),var(--background-dark));color:light-dark(var(--text-light),var(--text-dark));font-family:var(--font-primary, sans-serif);font-size:16px;line-height:1.5;min-height:100dvh;overflow-x:hidden}#menu-toggle{display:none}.hamburger-label{display:none;cursor:pointer;width:2rem;height:2rem;position:relative;z-index:1000}.hamburger-icon,.close-icon{width:100%;height:100%;transition:opacity .3s ease;position:absolute;top:0;left:0}.hamburger-icon-light,.close-icon-light,.hamburger-icon-dark,.close-icon-dark{opacity:0}@media(prefers-color-scheme:light){.hamburger-icon-light{opacity:1}.hamburger-icon-dark,.close-icon-light,.close-icon-dark{opacity:0}}@media(prefers-color-scheme:dark){.hamburger-icon-light{opacity:0}.hamburger-icon-dark{opacity:1}.close-icon-light,.close-icon-dark{opacity:0}}#menu-toggle:checked~.hamburger-label .hamburger-icon{opacity:0!important}#menu-toggle:checked~.hamburger-label .close-icon-light{opacity:1!important}#menu-toggle:checked~.hamburger-label .close-icon-dark{opacity:1!important}@media(prefers-color-scheme:light){#menu-toggle:checked~.hamburger-label .close-icon-light{opacity:1!important}#menu-toggle:checked~.hamburger-label .close-icon-dark{opacity:0!important}}@media(prefers-color-scheme:dark){#menu-toggle:checked~.hamburger-label .close-icon-light{opacity:0!important}#menu-toggle:checked~.hamburger-label .close-icon-dark{opacity:1!important}}.theme-toggle-btn{position:fixed;bottom:1.5rem;right:1.5rem;z-index:1000;display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;padding:.5rem;background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark));border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:50%;cursor:pointer;transition:transform .2s ease,background-color .2s ease,box-shadow .2s ease;box-shadow:0 .25rem .5rem #00000026}.theme-toggle-btn:hover{transform:scale(1.1);background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark))}.theme-toggle-btn:focus{outline:.125rem solid light-dark(var(--secondary-light),var(--secondary-dark));outline-offset:.125rem}.theme-toggle-btn img{width:1.5rem;height:1.5rem}.theme-icon-light,.theme-icon-dark{display:none}nav ul{display:flex;justify-content:space-between;flex-direction:row;list-style:none;position:relative}nav ul:before{content:"";position:absolute;z-index:-3;top:-35%;left:-5%;height:2rem;width:110%;background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark))}nav ul:after{content:"";position:absolute;z-index:-2;top:50%;left:5%;height:1.5rem;width:110%;background-color:light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark))}nav ul a{position:relative;color:light-dark(var(--primary-light),var(--primary-dark));text-decoration:none;transition:color .2s ease}nav ul a:active{color:light-dark(var(--secondary-light),var(--secondary-dark))}nav ul a:hover{color:light-dark(var(--text-light),var(--text-dark));z-index:1}nav ul a:before{content:"";position:absolute;z-index:-1;top:40%;left:8%;height:75%;width:0%;background-color:light-dark(var(--accent-light),var(--accent-foreground-dark));transition:width .3s ease}nav ul a:hover:before{width:100%}@media screen and (max-width:430px){.hamburger-label{display:block}nav ul{position:fixed;top:0;right:-100%;width:70%;height:100dvh;background-color:light-dark(var(--background-light),var(--background-dark));flex-direction:column;justify-content:flex-start;align-items:stretch;padding:4rem 2rem 2rem;gap:1.5rem;transition:right .3s ease;box-shadow:-.25rem 0 1rem light-dark(rgba(0,0,0,.2),rgba(255,255,255,.1));z-index:999}nav ul:before,nav ul:after{display:none}nav ul li{width:100%}nav ul a{display:block;padding:.75rem 1rem;font-size:1.125rem}#menu-toggle:checked~ul{right:0}}.site-frame{display:grid;grid-template-rows:auto 1fr auto;min-height:100dvh;padding:0 var(--page-padding-width, 10%)}.site-frame-header{grid-row:1;background-color:transparent;color:light-dark(var(--text-light),var(--text-dark));margin-top:var(--page-padding-height);margin-bottom:clamp(1.5rem,3vw,3rem);font-size:clamp(.875rem,2dvw,1.125rem)}.site-frame-body{grid-row:2;overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth;line-height:1.6;max-width:1400px;width:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:center}.site-frame-body h1{font-size:clamp(2rem,4vw,3rem);line-height:1.2;margin-bottom:clamp(1rem,2vw,1.5rem);font-weight:700}.site-frame-body h2{position:relative;display:inline-block;font-size:clamp(1.5rem,3vw,2.25rem);line-height:1.3;margin-top:clamp(2rem,4vw,3rem);margin-bottom:clamp(.75rem,1.5vw,1.25rem);font-weight:700}.site-frame-body h2:before{content:"";position:absolute;z-index:-1;bottom:.1em;left:-.15em;width:calc(100% + .3em);height:.4em;background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark));opacity:.7}.site-frame-body h3{font-size:clamp(1.25rem,2.5vw,1.75rem);line-height:1.4;margin-top:clamp(1.5rem,3vw,2rem);margin-bottom:clamp(.5rem,1vw,1rem);font-weight:600}.site-frame-body p{font-size:clamp(1rem,1.5vw,1.125rem);line-height:1.7;margin-bottom:clamp(1rem,2vw,1.5rem);max-width:75ch}.site-frame-body ul,.site-frame-body ol{margin-bottom:clamp(1rem,2vw,1.5rem);padding-left:clamp(1.5rem,3vw,2rem)}.site-frame-body ul li,.site-frame-body ol li{margin-bottom:clamp(.5rem,1vw,.75rem);line-height:1.6}.site-frame-body section{margin-bottom:clamp(1rem,3vw,3rem)}.site-frame-body iframe{width:100%;max-width:100%;border:.125rem solid light-dark(var(--text-light),var(--text-dark));border-radius:.5rem;display:block}.site-frame-body a{color:light-dark(var(--primary-light),var(--primary-dark));text-decoration:underline;transition:color .2s ease}.site-frame-body a:hover{color:light-dark(var(--secondary-light),var(--secondary-dark))}.hero-section{display:flex;justify-content:space-between;align-items:flex-start;gap:clamp(2rem,4vw,4rem);margin-bottom:clamp(2rem,4vw,4rem)}.headshot-container{flex-shrink:0}.headshot-image{width:clamp(150px,20vw,250px);height:clamp(150px,20vw,250px);border-radius:50%;object-fit:cover;border:.25rem solid light-dark(var(--primary-light),var(--primary-dark))}.about-me-text{flex:1;min-width:0}.about-me-text h2{margin-top:0}.social-links{display:flex;justify-content:center;align-items:center;gap:clamp(1.5rem,3vw,2.5rem);margin-bottom:clamp(2rem,4vw,4rem)}.social-links a{display:block;transition:transform .2s ease,opacity .2s ease;text-decoration:none}.social-links a:hover{transform:scale(1.1);opacity:.8}.social-links a img{width:clamp(2.5rem,5vw,4rem);height:clamp(2.5rem,5vw,4rem);display:block}@media screen and (max-width:430px){.hero header{align-self:center}.hero-section{flex-direction:column;align-items:center;text-align:center}.about-me-text p{margin-left:auto;margin-right:auto}}.site-frame-footer{grid-row:3;background-color:light-dark(var(--background-light),var(--background-dark));color:light-dark(var(--text-light),var(--text-dark));padding-bottom:clamp(1.5rem,3vw,2rem);margin-top:clamp(2rem,4vw,3rem);text-align:center;font-size:clamp(.875rem,1.5vw,1rem);line-height:1.5}cat-image{display:block;position:relative;min-width:clamp(250px,20vw,350px);width:clamp(250px,20vw,350px);flex-shrink:0;aspect-ratio:1 / 1;overflow:hidden;transition:transform .3s ease}cat-image img{width:100%;height:100%;object-fit:cover;object-position:center}cat-image:hover{transform:scale(1.05);z-index:10}cat-image[category=pastel-pink]{border:.25rem solid light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark))}cat-image[category=pastel-blue]{border:.25rem solid light-dark(var(--primary-foreground-light),var(--primary-foreground-dark))}cat-image[category=pastel-yellow]{border:.25rem solid light-dark(var(--accent-foreground-light),var(--accent-foreground-dark))}cat-image[category=pastel-green]{border:.25rem solid light-dark(var(--primary-light),var(--primary-dark))}cat-image[category=pastel-purple]{border:.25rem solid light-dark(var(--secondary-light),var(--secondary-dark))}skill-badge{display:inline-block;padding:.25rem .75rem;margin:.25rem;border:.125rem solid light-dark(var(--text-light),var(--text-dark));background-color:light-dark(var(--background-light),var(--background-dark));font-size:.875rem;font-weight:700;text-align:center;transition:transform .2s ease}skill-badge:hover{transform:scale(1.05)}skill-badge[category=language]{background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark))}skill-badge[category=technology]{background-color:light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark))}skill-badge[category=framework]{background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark))}.contact-details{font-style:normal;display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:clamp(1rem,2vw,1.5rem);margin-top:clamp(1rem,2vw,1.5rem)}.contact-item{position:relative;padding:clamp(1rem,2vw,1.5rem);background-color:light-dark(var(--background-light),var(--background-dark));border-left:.25rem solid light-dark(var(--primary-light),var(--primary-dark))}.contact-item:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(135deg,light-dark(var(--primary-foreground-light),var(--primary-foreground-dark)) 0%,transparent 50%);opacity:.3;z-index:-1;pointer-events:none}.contact-item h3{margin-top:0;color:light-dark(var(--primary-light),var(--primary-dark))}.contact-item p{margin-bottom:0}.contact-form{max-width:600px}.contact-form fieldset{border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:.5rem;padding:clamp(1.5rem,3vw,2rem);background:linear-gradient(180deg,light-dark(var(--primary-foreground-light),var(--primary-foreground-dark)) 0%,transparent 100%);background-size:100% .5rem;background-repeat:no-repeat}.contact-form legend{padding:0 .75rem;font-weight:700;color:light-dark(var(--primary-light),var(--primary-dark))}.form-field{display:flex;flex-direction:column;gap:.5rem;margin-bottom:clamp(1rem,2vw,1.25rem)}.form-field label{font-weight:600;color:light-dark(var(--text-light),var(--text-dark))}.form-field input,.form-field textarea{padding:.75rem 1rem;border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:.25rem;background-color:light-dark(var(--background-light),var(--background-dark));color:light-dark(var(--text-light),var(--text-dark));font-family:inherit;font-size:1rem;transition:border-color .2s ease,box-shadow .2s ease}.form-field input::placeholder,.form-field textarea::placeholder{color:light-dark(color-mix(in srgb,var(--text-light) 50%,transparent),color-mix(in srgb,var(--text-dark) 50%,transparent))}.form-field input:focus,.form-field textarea:focus{outline:none;border-color:light-dark(var(--secondary-light),var(--secondary-dark));box-shadow:0 0 0 .25rem light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark))}.form-field textarea{resize:vertical;min-height:120px}.form-actions{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:0}.form-actions button{padding:.75rem 1.5rem;border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:.25rem;font-family:inherit;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s ease}.form-actions button[type=submit]{background-color:light-dark(var(--primary-light),var(--primary-dark));color:light-dark(var(--background-light),var(--background-dark))}.form-actions button[type=submit]:hover{background-color:light-dark(var(--secondary-light),var(--secondary-dark));border-color:light-dark(var(--secondary-light),var(--secondary-dark))}.form-actions button[type=reset]{background-color:transparent;color:light-dark(var(--text-light),var(--text-dark))}.form-actions button[type=reset]:hover{background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark))}.field-error{border-color:#dc3545!important;box-shadow:0 0 0 .125rem #dc354540!important}.error-message{display:block;margin-top:.25rem;font-size:.875rem;color:#dc3545;font-weight:500}.form-success{padding:clamp(1rem,2vw,1.5rem);margin-bottom:clamp(1rem,2vw,1.5rem);background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark));border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:.5rem;text-align:center}.form-success h3{margin-top:0;margin-bottom:.5rem;color:light-dark(var(--primary-light),var(--primary-dark))}.form-success p{margin-bottom:0}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:clamp(1.5rem,3vw,2rem);margin-top:clamp(1.5rem,3vw,2rem)}.project-card{padding:clamp(1.25rem,2.5vw,1.75rem);background-color:light-dark(var(--background-light),var(--background-dark));border:.125rem solid light-dark(var(--primary-light),var(--primary-dark));border-radius:.5rem}.project-card header{margin-bottom:clamp(.75rem,1.5vw,1rem);padding-bottom:clamp(.5rem,1vw,.75rem);border-bottom:.125rem solid light-dark(var(--primary-foreground-light),var(--primary-foreground-dark))}.project-card header h3{margin-top:0;margin-bottom:.25rem;color:light-dark(var(--primary-light),var(--primary-dark))}.project-card h4{font-size:1rem;margin-top:clamp(.75rem,1.5vw,1rem);margin-bottom:.5rem;color:light-dark(var(--secondary-light),var(--secondary-dark))}.project-card section{margin-bottom:0}.project-card ul{margin-bottom:0}.project-date{font-style:italic;font-size:.875rem;margin-bottom:0;color:light-dark(color-mix(in srgb,var(--text-light) 70%,transparent),color-mix(in srgb,var(--text-dark) 70%,transparent))}.project-links{display:flex;gap:1rem;flex-wrap:wrap;margin-top:clamp(1rem,2vw,1.25rem);padding-top:clamp(.75rem,1.5vw,1rem);border-top:.125rem solid light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark))}.project-links a{display:inline-block;padding:.5rem 1rem;background-color:light-dark(var(--primary-foreground-light),var(--primary-foreground-dark));border-radius:.25rem;text-decoration:none;font-size:.875rem;font-weight:600;transition:background-color .2s ease,transform .2s ease}.project-links a:hover{background-color:light-dark(var(--accent-foreground-light),var(--accent-foreground-dark));transform:translateY(-.125rem)}.experience-section,.education-section{margin-bottom:clamp(2rem,4vw,3rem)}.experience-entry,.education-entry{position:relative;padding:clamp(1rem,2vw,1.5rem);padding-left:clamp(1.5rem,3vw,2rem);margin-bottom:clamp(1.5rem,3vw,2rem);border-left:.25rem solid light-dark(var(--secondary-light),var(--secondary-dark));background:linear-gradient(90deg,light-dark(var(--secondary-foreground-light),var(--secondary-foreground-dark)) 0%,transparent 30%);background-size:100% 100%;background-repeat:no-repeat;opacity:.95}.experience-entry:before,.education-entry:before{content:"";position:absolute;left:-.5rem;top:clamp(1.25rem,2.5vw,1.75rem);width:.75rem;height:.75rem;background-color:light-dark(var(--secondary-light),var(--secondary-dark));border-radius:50%;border:.125rem solid light-dark(var(--background-light),var(--background-dark))}.experience-entry header,.education-entry header{margin-bottom:clamp(.5rem,1vw,.75rem)}.experience-entry header h3,.education-entry header h3{margin-top:0;margin-bottom:.25rem;color:light-dark(var(--primary-light),var(--primary-dark))}.experience-entry header p,.education-entry header p{margin-bottom:0;font-size:.9375rem}.experience-entry header p time,.education-entry header p time{font-style:italic}.experience-entry ul,.education-entry ul{margin-bottom:0}.education-entry{border-left-color:light-dark(var(--primary-light),var(--primary-dark));background:linear-gradient(90deg,light-dark(var(--primary-foreground-light),var(--primary-foreground-dark)) 0%,transparent 30%)}.education-entry:before{background-color:light-dark(var(--primary-light),var(--primary-dark))}.skills-section{margin-bottom:clamp(2rem,4vw,3rem)}.skill-group{margin-bottom:clamp(1rem,2vw,1.5rem);padding:clamp(.75rem,1.5vw,1rem);background:linear-gradient(135deg,light-dark(var(--accent-foreground-light),var(--accent-foreground-dark)) 0%,transparent 50%);border-radius:.5rem}.skill-group h3{margin-top:0}.skill-list{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:0}
