:root{--size:18px;--foreground:#f5f5f5;--foreground-90:#f5f5f5e6;--foreground-75:#f5f5f5bf;--foreground-50:#f5f5f580;--foreground-25:#f5f5f540;--foreground-10:#f5f5f51a;--foreground-05:#f5f5f50d;--background:#242424;--background-95:#242424f2;--background-90:#242424e6;--background-75:#242424bf;--background-50:#24242480;--background-25:#24242440;--background-10:#2424241a;--background-05:#2424240d;--accent-background:#1263ab;--accent-background-10:#0d497d;--accent-foreground:#67afef;--random-time:1s;--border-radius:.25rem;--border-radius-sm:.125rem;--font-weight:200}@media screen and (width>=320px){:root{--size:calc(18px + 5 * ((100vw - 320px) / 680))}}@media screen and (width>=1000px){:root{--size:22px}}html{scroll-behavior:smooth;font-size:var(--size);text-wrap:pretty;font-weight:var(--font-weight);background-color:#000;-webkit-user-select:none!important;user-select:none!important}*,:before,:after{box-sizing:border-box;font:inherit;margin:0;padding:0}body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;user-select:none;background-color:#000;flex-direction:column;min-width:320px;font-family:base;line-height:1.5;display:flex}@media (prefers-color-scheme:dark){body{--lightningcss-light: ;--lightningcss-dark:initial}}article{flex-direction:column;gap:0;max-width:800px;display:flex}small{font-size:.75rem}button{white-space:nowrap;background:var(--accent-background);border-radius:var(--border-radius);width:fit-content;color:var(--foreground-90);cursor:pointer;letter-spacing:.025em;border:none;outline:.25rem solid #0000000d;flex-flow:row;justify-content:center;align-items:center;padding:.5rem 1rem;font-weight:500;display:flex;position:relative}button:active{background:var(--accent-background-10)}button.busy{opacity:.75;pointer-events:none;background:var(--accent-background-10)}button.busy:before{content:"";border:.125rem solid #fff;border-bottom-color:#0000;border-radius:50%;width:1rem;height:1rem;margin-right:.5rem;animation:1s linear infinite rotation;display:inline-block}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}textarea{z-index:2;resize:none;border-radius:var(--border-radius-sm);text-overflow:ellipsis;background:var(--foreground-10);text-align:left;letter-spacing:.05rem;border:none;outline:.125rem solid #00000040;width:100%;height:fit-content;min-height:10rem;padding:1rem;position:relative}textarea:focus-within{outline-color:var(--accent-background-10)}fieldset{border:none;flex-direction:column;width:100%;display:flex}fieldset ul{list-style:none}fieldset .error-description{color:tomato;display:none}fieldset:disabled{opacity:.7}fieldset>p{margin-top:1rem}fieldset.has-error,.fieldset-has-error,.submitted.has-error fieldset{color:tomato}.submitted fieldset:has(:invalid){color:tomato}fieldset.has-error .error-description,.fieldset-has-error .error-description,.submitted.has-error fieldset .error-description{display:block}.submitted fieldset:has(:invalid) .error-description{display:block}a{color:var(--accent-foreground);text-decoration:underline}a:hover{text-decoration:none}@media screen and (prefers-color-scheme:light){:root{--foreground:#242424;--background:#f5f5f5}}@keyframes spinB{to{transform:rotate(360deg)}0%{transform:rotate(0)}}.invisible,.visible{transition:opacity 1s ease-in-out}.invisible.invisible,.visible.invisible{opacity:.85}.invisible.visible,.visible.visible{opacity:1}h2,h3{line-height:1;transition-duration:1.15s}form{flex-direction:column;justify-content:center;align-items:center;width:100%;max-width:700px;display:flex;position:relative}form>footer{flex-direction:column;justify-content:center;align-items:center;margin-top:1rem;display:flex}form>footer .error{color:tomato;display:none}h2{margin:1em 0 .5em;font-size:2rem}section>h2{margin-top:0}h3{margin:1em 0 .5em;font-size:1.35rem}h4{margin:1em 0 .5em;font-size:1.05rem}.sections{background-color:#242424;flex-direction:column;width:100%;padding:0 3rem 0 1.5rem;display:flex;position:relative}@media screen and (width<=999px){.sections{max-width:100%;padding:0 3.5rem 0 2rem}}.sections>section{flex-direction:column;align-items:center;max-width:1000px;margin:0 auto;padding:3rem 0;display:flex;position:relative;overflow-x:hidden}.sections>section [data-anchor-id]{width:1px;height:1px;position:absolute;top:50%;left:0}.sections>section main{flex-direction:column;justify-content:center;align-items:center;row-gap:1rem;display:flex;position:relative}.sections>section.active{opacity:1}.sections>section:active{outline:white solid 4.25rem inset}.sections nav{--transition-duration:.2s;opacity:0;animation:1s ease-in-out 1s forwards fade-in}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.sections nav{z-index:1000;cursor:pointer;transition:all var(--transition-duration) ease-in-out;padding:1rem;position:fixed;top:10%;right:0}.sections nav ol{pointer-events:all;background-color:var(--background-95);border-radius:var(--border-radius);transition:all var(--transition-duration) ease-in-out;border:1px solid #0000;flex-direction:column;gap:.5rem;list-style:none;display:flex;box-shadow:0 0 .5rem #0000}.sections nav ol li{border:solid 1px var(--foreground-50);transition:all var(--transition-duration) ease-in-out;border-left:none;border-right:none}.sections nav ol li a{text-align:right;width:0;min-width:1rem;height:0;transition:all var(--transition-duration) ease-in-out, background-color .25s ease-in-out;color:#fff;text-decoration:none;display:block;overflow:hidden}.sections nav ol li.active{border-color:#fff;border-top-width:2px;box-shadow:0 0 .25rem #ffffffde}.sections nav{-webkit-tap-highlight-color:transparent}.sections nav.active{margin-right:0}.sections nav.active ol{border-color:var(--foreground-10);gap:0;box-shadow:0 0 .5rem #00000080}.sections nav.active ol li{border-color:var(--foreground-05);box-shadow:none!important}.sections nav.active ol li.active{background-color:var(--foreground-10)}.sections nav.active ol li a{width:6.5rem;height:2rem;padding:0 1rem 0 1.5rem;line-height:2rem;display:block}.sections nav.active ol li a:hover{background-color:var(--foreground-05)}.loading{background-color:var(--background);width:100vw;height:100vh;color:var(--foreground);justify-content:center;align-items:center;display:flex}.loader{width:100px;height:100px;position:relative}.loader .blob{background:linear-gradient(135deg,#1263ab,#67afef);border-radius:50%;width:5rem;height:5rem;animation:2s linear infinite morph;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 20px #0d497d}@keyframes morph{0%,to{border-radius:50%;transform:translate(-50%,-50%)scale(1)}33%{border-radius:30% 70% 70% 30%/30% 29% 71% 70%;transform:translate(-50%,-50%)rotate(90deg)scale(1.2)}66%{border-radius:60% 40% 30% 70%/60% 30% 70% 40%;transform:translate(-50%,-50%)rotate(180deg)scale(.8)}}#welcome{justify-content:center;align-items:center;width:100%;min-height:100vh;padding-top:0;padding-bottom:0;position:relative;overflow-x:visible}#welcome .title{flex-direction:column;width:80%;display:flex}#welcome .title svg{opacity:1;animation:2s 2s hinge,5s 4s glow}#welcome .title svg:first-child{width:35%}#welcome .title svg:nth-child(2){width:100%}@keyframes glow{0%{opacity:0;transform:scale(.7)}20%{opacity:0}to{opacity:1;transform:scale(1.1)}}@keyframes hinge{0%{transform-origin:0 0;animation-timing-function:ease-in-out;transform:rotate(0)}20%,60%{transform-origin:0 0;animation-timing-function:ease-in-out;transform:rotate(80deg)}40%{transform-origin:0 0;animation-timing-function:ease-in-out;transform:rotate(60deg)}80%{opacity:1;transform-origin:0 0;animation-timing-function:ease-in-out;transform:rotate(60deg)translateY(0)}to{opacity:0;transform:translateY(700px)}}#skills article{flex-direction:column;gap:1rem;max-width:800px;display:flex}#skills .progress-bar{background-color:var(--foreground-10);border-radius:var(--border-radius);width:100%;height:1rem}#skills .progress-bar div{background-color:var(--accent-background);border-radius:var(--border-radius-sm);height:100%;transition:width 2s ease-in-out}#skills .progress-bar.visible{opacity:1}#skills .progress-bar:not(.visible) div[style]{transition-duration:.5s;width:0!important}#skills .legend{width:100%;position:relative}#skills .legend .progress-bar{height:1.75rem;position:relative}#skills .legend .progress-bar span{z-index:1;padding:.25rem .5rem;display:block;position:absolute;top:0}#skills .legend .progress-bar span:first-of-type{right:0}#skills .legend .progress-bar span:nth-of-type(2){left:0}#skills .legend .progress-bar span:nth-of-type(2):hover~div{width:15%!important}#skills .legend .progress-bar span:first-of-type:hover~div{width:85%!important}#skills ul{grid-template-columns:1fr;gap:0 2rem;width:100%;display:grid}@media screen and (width>=1000px){#skills ul{grid-template-columns:1fr 1fr 1fr}}@media screen and (width>=600px){#skills ul{grid-template-columns:1fr 1fr}}#skills ul li{margin-bottom:.5rem;list-style:none}#skills ul li h4{flex-flow:wrap;justify-content:space-between;margin:0 0 .25rem;font-size:1rem;display:flex}#skills ul li h4 span.title{white-space:nowrap}#skills ul li h4 span.years{color:var(--foreground-50);text-align:right}#projects .intro{margin-bottom:1rem}#projects svg{width:.75rem}#projects .sources span:first-child{display:none}#contact{text-align:center;justify-content:center;min-height:100vh}#contact button{display:none}#contact form fieldset{outline:none!important}#contact form .error-description span:not(.active),#contact form .found-email{display:none}#contact form .found-email span{color:#3cb371}#contact form.submitted:not(.has-email) .missing-email,#contact form.has-email .found-email,#contact form.has-email button,#contact form.has-error .error{display:block}#contact form .success{display:none}#contact form.success>:not(.success){opacity:0;pointer-events:none}#contact form.success .success{display:block}#recruiters{min-height:100vh;margin-bottom:3rem;position:relative}#recruiters .intro{justify-content:center;align-items:center;gap:1rem}#recruiters img{display:block;margin:1rem auto 0!important}#recruiters input[type=radio]{appearance:none;background-color:var(--background);font:inherit;color:var(--accent-foreground);border:.15em solid;border-radius:50%;place-content:center;width:1.15em;height:1.15em;margin:0;display:grid;transform:translateY(-.075em)}#recruiters input[type=radio]:before{content:"";width:.65em;height:.65em;box-shadow:inset 1em 1em var(--accent-foreground);background-color:canvastext;border-radius:50%;transition:transform .12s ease-in-out;transform:scale(0)}#recruiters input[type=radio]:checked:before{transform:scale(1)}#recruiters .quiz-pass{margin-top:2rem;display:block}#recruiters .quiz-pass h3{color:var(--accent-foreground)}#recruiters .sending{z-index:10;color:var(--accent-foreground);align-items:center;gap:2rem;position:absolute;top:10rem;left:50%;transform:translate(-50%)}#recruiters form{width:100%}#recruiters form fieldset.email label{margin-bottom:1rem}#recruiters form fieldset.email p{text-align:center}#recruiters form fieldset.email [type=email]{width:100%;padding:.5rem}#recruiters form fieldset .options{flex-direction:column;display:flex}#recruiters form fieldset .options p{padding:.5rem 0}#recruiters form fieldset .options .fail-reason{color:tomato;display:none}#recruiters form fieldset .options label{cursor:pointer;border-radius:var(--border-radius);background-color:var(--foreground-10);flex-direction:row;align-items:center;gap:.5rem;padding:.75rem;display:flex}#recruiters form fieldset .options label:has(:checked){outline:solid .125rem var(--accent-background)}#recruiters form fieldset .options label:has(:checked)[for$=fail]{outline:.125rem solid tomato}#recruiters form fieldset .options label:has(:checked)+.fail-reason{display:block}#recruiters form fieldset .options label input[type=radio]{flex-shrink:0}#recruiters form.quiz{gap:1rem}#recruiters .intro,#recruiters form.quiz,#recruiters button.check-results,#recruiters .quiz-fail,#recruiters .quiz-pass,#recruiters .sending,#recruiters .quiz-sent{display:none}#recruiters[data-state=intro] .intro,#recruiters[data-state=quiz] form.quiz,#recruiters[data-state=quiz] button.check-results,#recruiters[data-state=fail] .quiz-fail,#recruiters[data-state=fail] form.quiz,#recruiters[data-state=pass] .quiz-pass,#recruiters[data-state=sending] .sending,#recruiters[data-state=sending] .quiz-pass,#recruiters[data-state=sent] .quiz-sent{display:flex}#recruiters[data-state=sending] .quiz-pass{pointer-events:none}#recruiters[data-state=fail] button.check-results{display:none!important}body>footer{z-index:10;text-align:center;outline:var(--background-75) solid 2px;background:#121212;height:3rem;margin-top:-3rem;padding:1rem;line-height:1.2;position:relative}
