.container:where(.astro-YANMDLQW){display:flex;flex-wrap:wrap;gap:20px}.column:where(.astro-YANMDLQW){flex:1;padding:0 15px}h2:where(.astro-YANMDLQW){font-size:2rem;font-weight:700;margin-bottom:1rem}h3:where(.astro-YANMDLQW){font-size:1.5rem;font-weight:700;margin-top:.5rem;margin-bottom:.75rem}h4:where(.astro-YANMDLQW){font-size:1.25rem;font-weight:semibold;margin-top:.5rem;margin-bottom:.5rem}ul:where(.astro-YANMDLQW){list-style-type:disc;list-style-position:inside;line-height:1.5;margin-bottom:.5rem}.column:where(.astro-YANMDLQW):nth-child(2){border-left:1px solid #e2e8f0;padding-left:20px}@media (max-width: 600px){.container:where(.astro-YANMDLQW){flex-direction:column}.column:where(.astro-YANMDLQW):nth-child(2){border-left:none;padding-left:0}}@media print{.no-print:where(.astro-JLZ3ADQ6){display:none}}.about__grid:where(.astro-JLZ3ADQ6){display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));row-gap:var(--space-2xl)}.about__card:where(.astro-JLZ3ADQ6){z-index:10;background-color:var(--bg-secondary);box-shadow:0 2px 4px #0000001a;border-radius:.5rem;padding:var(--space-m) var(--space-l-xl)}.about__card:where(.astro-JLZ3ADQ6) h2:where(.astro-JLZ3ADQ6){font-size:var(--step-3)}.about__text:where(.astro-JLZ3ADQ6){margin-top:var(--space-m)}.about:where(.astro-JLZ3ADQ6){display:flex;flex-direction:column;align-items:start;position:relative;--line-width: calc(var(--step--2) / 2);--left-margin: var(--space-l-xl);--circle-size: var(--step-0);--distance: var(--space-2xl)}.about:where(.astro-JLZ3ADQ6):after{position:absolute;background-color:var(--theme-highlight);width:var(--line-width);height:calc(100% + (var(--distance)));top:var(--step-0);left:calc(var(--left-margin) - var(--line-width) / 2);content:"";z-index:-10}.bubble__logo:where(.astro-JLZ3ADQ6){color:var(--bg-details);width:var(--space-xl-2xl);height:var(--space-xl-2xl);position:absolute;top:.5rem;right:.5rem}.bubble__logo:where(.astro-JLZ3ADQ6) svg{fill:currentColor;height:var(--space-xl-2xl);opacity:.5}.about__bubble:where(.astro-JLZ3ADQ6){box-shadow:0 2px 4px #0000001a;width:465px;line-height:1.5;margin-bottom:var(--space-xl);background-color:var(--bg-secondary);border-radius:10px;padding:.5rem 1rem;margin-left:calc(var(--left-margin) * 2);position:relative}.bubble__title:where(.astro-JLZ3ADQ6){font-size:var(--step-1);padding-right:calc(var(--space-xl-2xl) + .5rem);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bubble__subtitle:where(.astro-JLZ3ADQ6){font-size:var(--step-2);padding-right:calc(var(--space-xl-2xl) + .5rem);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.about__bubble:where(.astro-JLZ3ADQ6):before{content:"";width:var(--circle-size);height:var(--circle-size);left:calc(var(--left-margin) * -1 - var(--circle-size) / 2);top:calc(var(--step-0) * .75 + .5rem - var(--circle-size) / 4);border-radius:100%;background-color:var(--bg);border:solid 3px var(--theme-highlight);position:absolute}.about__bubble:where(.astro-JLZ3ADQ6):after{content:"";z-index:-5;height:var(--line-width);width:calc(var(--left-margin) * 1.3);top:calc(var(--step-0) * .75 + .5rem + var(--line-width) / 4);position:absolute;left:calc(var(--left-margin) * -1 - var(--circle-size) / 4);background-color:var(--theme-highlight)}.bubble__description:where(.astro-JLZ3ADQ6){height:210px;overflow:hidden;position:relative;margin-bottom:1rem}.bubble__description:where(.astro-JLZ3ADQ6):after{content:"";position:absolute;bottom:0;left:0;right:0;height:20px;background:linear-gradient(transparent,var(--bg-secondary))}.about__bubble:where(.astro-JLZ3ADQ6).expanded .bubble__description:where(.astro-JLZ3ADQ6){height:auto;overflow:visible}.bubble__expand:where(.astro-JLZ3ADQ6){cursor:pointer;color:var(--theme-highlight);font-size:var(--step--1);text-align:right;display:none}.about__bubble:where(.astro-JLZ3ADQ6).expanded .bubble__expand:where(.astro-JLZ3ADQ6){display:block}@media print{.no-print:where(.astro-XMIVUP5A){display:none}}.input-field:where(.astro-XMIVUP5A){margin-bottom:var(--space-m)}.contact:where(.astro-XMIVUP5A){z-index:10;background-color:var(--bg-secondary);box-shadow:0 2px 4px #0000001a;border-radius:.5rem;padding:var(--space-m) var(--space-l-xl)}.contact__grid:where(.astro-XMIVUP5A){display:flex;gap:var(--space-m);flex-wrap:wrap;margin-top:var(--space-m)}p:where(.astro-XMIVUP5A){max-width:calc(clamp(16rem,90vw,90rem) - 2 * var(--space-l-xl));width:100%}h2:where(.astro-XMIVUP5A){font-size:var(--step-3)}ul:where(.astro-XMIVUP5A){padding:0}.contact__text:where(.astro-XMIVUP5A){max-width:90ch;line-height:1.6;margin-top:var(--space-m)}label:where(.astro-XMIVUP5A){display:flex;align-items:center;column-gap:.4rem;max-width:calc(clamp(16rem,90vw,90rem) - 2 * var(--space-l-xl))}input:where(.astro-XMIVUP5A),textarea:where(.astro-XMIVUP5A){flex:1 1 30ch;max-width:calc(clamp(16rem,90vw,90rem) - 2 * var(--space-l-xl));width:100%;border:1px solid var(--bg-secondary);border-radius:4px;background-color:var(--form-background);outline:none;color:var(--form-fg);padding:.2rem .5rem}input:where(.astro-XMIVUP5A):is(:active,:focus),textarea:where(.astro-XMIVUP5A):is(:active,:focus){border:1px solid var(--form-hl);box-shadow:0 0 2px 1px var(--form-hl-shadows)}input:where(.astro-XMIVUP5A).error,textarea:where(.astro-XMIVUP5A).error{background-color:var(--form-background);box-shadow:0 0 2px 1px var(--form-hl-shadows);border:1px solid var(--theme-highlight)}input:where(.astro-XMIVUP5A).error:is(:active,:focus),textarea:where(.astro-XMIVUP5A).error:is(:active,:focus){border:1px solid var(--theme-highlight)}textarea:where(.astro-XMIVUP5A){resize:none}.contact__email:where(.astro-XMIVUP5A){width:100%;max-width:800px;display:block}.contact__email:where(.astro-XMIVUP5A) button:where(.astro-XMIVUP5A){background-color:inherit;text-decoration:none;transition:transform .2s;border:solid 1px var(--theme-highlight);padding:.2rem 1rem;border-radius:.5rem;line-height:1.4;margin-top:var(--space-s);box-shadow:0 2px 4px #0000001a;background-color:var(--bg-primary);color:var(--fg);cursor:pointer}.contact__email:where(.astro-XMIVUP5A) button:where(.astro-XMIVUP5A):hover,.contact__email:where(.astro-XMIVUP5A) button:where(.astro-XMIVUP5A):focus-visible{color:var(--neutral-900);background-color:var(--theme-highlight)}.contact__email:where(.astro-XMIVUP5A) button:where(.astro-XMIVUP5A):active:not(:disabled){transform:translate(2px,2px)}.invalid-feedback:where(.astro-XMIVUP5A),.empty-feedback:where(.astro-XMIVUP5A){display:none}.was-validated:where(.astro-XMIVUP5A) :placeholder-shown:invalid:where(.astro-XMIVUP5A)~.empty-feedback:where(.astro-XMIVUP5A){display:block}.was-validated:where(.astro-XMIVUP5A) :not(:placeholder-shown):invalid:where(.astro-XMIVUP5A)~.invalid-feedback:where(.astro-XMIVUP5A){display:block}.is-invalid:where(.astro-XMIVUP5A),.was-validated:where(.astro-XMIVUP5A) :invalid:where(.astro-XMIVUP5A){border-color:#dc3545}.sr-only:where(.astro-XMIVUP5A){border:0!important;clip:rect(1px,1px,1px,1px)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.sr-only-focusable:where(.astro-XMIVUP5A):focus,.sr-only-focusable:where(.astro-XMIVUP5A):active{clip:auto!important;-webkit-clip-path:none!important;clip-path:none!important;height:auto!important;margin:auto!important;overflow:visible!important;width:auto!important;white-space:normal!important}@media print{.no-print:where(.astro-BBE6DXRZ){display:none}}.hero__flex:where(.astro-BBE6DXRZ){display:flex;flex-direction:row;column-gap:var(--space-l);row-gap:var(--space-l);padding-inline:1rem;justify-content:center;align-items:center}@media (max-width: 960px){.hero__flex:where(.astro-BBE6DXRZ){flex-direction:column}}.hero__image:where(.astro-BBE6DXRZ){max-height:400px;max-width:400px;box-shadow:1px -1px 1px 1px var(--theme-dark);border-radius:100%;aspect-ratio:1/1}@media (max-width: 960px){.hero__image:where(.astro-BBE6DXRZ){max-height:260px;max-width:260px}}.hero__text:where(.astro-BBE6DXRZ){text-align:center;display:grid;align-content:center;line-height:1.2}.hero__name:where(.astro-BBE6DXRZ){font-size:var(--step-4)}.hero__position:where(.astro-BBE6DXRZ){font-size:var(--step-3);margin-top:var(--space-xs);margin-bottom:var(--space-m)}.hero__cta-container:where(.astro-BBE6DXRZ){display:flex;gap:.5rem;justify-content:center}.hero__cta:where(.astro-BBE6DXRZ){display:flex;align-items:center;width:fit-content;margin:0 .25rem;font-size:var(--step-1);background-color:inherit;cursor:pointer;text-decoration:none;transition:transform .2s;border:solid 1px var(--theme-highlight);padding:.2rem 1rem;border-radius:.5rem;color:var(--fg);line-height:1.4}.hero__cta:where(.astro-BBE6DXRZ):hover,.hero__cta:where(.astro-BBE6DXRZ):focus-visible{color:var(--neutral-900);background-color:var(--theme-highlight)}.hero__cta:where(.astro-BBE6DXRZ):active:not(:disabled){transform:translate(2px,2px)}.gray-icon:where(.astro-42Q7MVCJ) svg{color:#666}.gray-icon:where(.astro-42Q7MVCJ) svg path{fill:#666}@media print{.no-print:where(.astro-MSPUYIFQ){display:none}}.project:where(.astro-MSPUYIFQ)+.project:where(.astro-MSPUYIFQ){margin-top:var(--space-xl-2xl)}.project__flex:where(.astro-MSPUYIFQ){display:flex;align-items:center;flex-wrap:wrap;row-gap:var(--space-m);column-gap:var(--space-l)}.project__description:where(.astro-MSPUYIFQ){padding-block:var(--space-s)}.project__title:where(.astro-MSPUYIFQ){font-size:var(--step-2)}.project__icons:where(.astro-MSPUYIFQ){display:flex;column-gap:var(--space-m);font-size:var(--step-3);color:var(--gray);opacity:.6;margin-top:var(--space-m)}.project__link:where(.astro-MSPUYIFQ){display:inline-block;margin-top:.2rem}.project__text:where(.astro-MSPUYIFQ){flex:1 1 400px}.project__screenshot:where(.astro-MSPUYIFQ){height:auto;transition:box-shadow .2s,transform .2s;border-radius:3px;background-color:var(--bg-secondary);box-shadow:0 2px 4px #0000001a}.project__screenshot:where(.astro-MSPUYIFQ):hover{transform:translate(-.5rem,-.5rem)}.project__screenshot-background:where(.astro-MSPUYIFQ){border-radius:4px;background-color:var(--theme-highlight)}[data-show=false]{display:none}[data-show=true]{display:block}@media print{.no-print:where(.astro-D4MTJUVI){display:none}}#showMore:where(.astro-D4MTJUVI){margin-top:var(--space-l);background-color:inherit;cursor:pointer;text-decoration:none;transition:transform .2s;border:solid 1px var(--theme-highlight);padding:.2rem 1rem;border-radius:.5rem;color:var(--fg);line-height:1.4}#showMore:where(.astro-D4MTJUVI):hover,#showMore:where(.astro-D4MTJUVI):focus-visible{color:var(--neutral-900);background-color:var(--theme-highlight)}#showMore:where(.astro-D4MTJUVI):active:not(:disabled){transform:translate(2px,2px)}@media print{.no-print:where(.astro-AMNG4ZVP){display:none}}.projects:where(.astro-AMNG4ZVP){z-index:10;background-color:var(--bg-secondary);box-shadow:0 2px 4px #0000001a;border-radius:.5rem;padding:var(--space-m) var(--space-l-xl);position:relative}h2:where(.astro-AMNG4ZVP){font-size:var(--step-3);margin-bottom:var(--space-m)}.project__button:where(.astro-AMNG4ZVP){display:block;width:fit-content;font-size:var(--step-1);margin-top:var(--space-xl);background-color:inherit;cursor:pointer;text-decoration:none;transition:transform .2s;border:solid 1px var(--theme-highlight);padding:.2rem 1rem;border-radius:.5rem;color:var(--fg);line-height:1.4}.project__button:where(.astro-AMNG4ZVP):hover,.project__button:where(.astro-AMNG4ZVP):focus-visible{color:var(--neutral-900);background-color:var(--theme-highlight)}.project__button:where(.astro-AMNG4ZVP):active:not(:disabled){transform:translate(2px,2px)}@media print{.no-print:where(.astro-AB4IHPZS){display:none}}.skills-container:where(.astro-AB4IHPZS){background-color:var(--bg-secondary);padding:var(--space-l);border-radius:var(--radius-m);box-shadow:var(--shadow-md);margin-top:var(--space-xl)}.skills__title:where(.astro-AB4IHPZS){font-size:var(--step-2);margin-bottom:var(--space-m);color:var(--text-primary);text-align:center}.skills:where(.astro-AB4IHPZS){display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-l);text-align:center}@media (max-width: 768px){.skills:where(.astro-AB4IHPZS){grid-template-columns:1fr;gap:var(--space-m)}}.skills__card:where(.astro-AB4IHPZS){background-color:var(--bg-card-lighter);padding:var(--space-m);border-radius:var(--radius-m);box-shadow:var(--shadow-sm);transition:box-shadow .3s ease}.skills__card:where(.astro-AB4IHPZS):hover{box-shadow:var(--shadow-lg)}.skills__icon:where(.astro-AB4IHPZS){margin-inline:auto;font-size:var(--step-3);color:var(--theme-highlight);margin-bottom:var(--space-s)}h2:where(.astro-AB4IHPZS){margin-bottom:var(--step--1);font-size:var(--step-1);line-height:1.2;color:var(--text-primary)}p:where(.astro-AB4IHPZS){color:var(--text-secondary)}@media print{.no-print:where(.astro-KHYHT7BJ){display:none}}h2:where(.astro-KHYHT7BJ){font-size:var(--step-3)}#citedworks:where(.astro-KHYHT7BJ){scroll-margin-top:4rem}.opensource__card:where(.astro-KHYHT7BJ){flex-grow:1;max-width:60ch}.card__text:where(.astro-KHYHT7BJ){margin-top:var(--space-m)}.opensource__gallery:where(.astro-KHYHT7BJ):hover .gallery__image:where(.astro-KHYHT7BJ):not(:hover){filter:saturate(.1)}.opensource__gallery:where(.astro-KHYHT7BJ){--overlap: var(--space-xl)}.opensource__gallery:where(.astro-KHYHT7BJ) .gallery__image:where(.astro-KHYHT7BJ){display:block;flex-grow:0;isolation:isolate;transition:.2s;border:1px solid rgba(0,0,0,.3764705882);position:relative}.opensource__gallery:where(.astro-KHYHT7BJ) .gallery__image:where(.astro-KHYHT7BJ) a:where(.astro-KHYHT7BJ):after{content:"";background:linear-gradient(to top,rgba(0,0,0,.2509803922) 10%,transparent);bottom:0;width:100%;height:100%;position:absolute;z-index:5}.opensource__gallery:where(.astro-KHYHT7BJ) .gallery__image:where(.astro-KHYHT7BJ)+.gallery__image:where(.astro-KHYHT7BJ){margin-top:calc(var(--overlap) * -1)}.opensource__gallery:where(.astro-KHYHT7BJ) .gallery__image:where(.astro-KHYHT7BJ):hover:not(:last-child){transform:translateY(calc(var(--overlap) * -1 * .6))}@media (max-width: 660px){.opensource__gallery:where(.astro-KHYHT7BJ){--overlap: 0}}.opensource:where(.astro-KHYHT7BJ){z-index:10;background-color:var(--bg-secondary);box-shadow:0 2px 4px #0000001a;border-radius:.5rem;padding:var(--space-m) var(--space-l-xl);display:grid;grid-template-columns:repeat(auto-fit,minmax(min(480px,100%),1fr));justify-items:start;gap:var(--space-xl)}
