.Button-module__VMVMAW__primary,.Button-module__VMVMAW__ghost{padding:var(--space-10) var(--space-24);font-family:var(--font-family-body);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);border-radius:var(--radius-sm);cursor:pointer;align-items:center;display:inline-flex}.Button-module__VMVMAW__primary{background:var(--color-bg-accent);color:var(--color-fg-on-accent);border:1px solid var(--color-bg-accent);transition:background var(--duration-fast), border-color var(--duration-fast)}.Button-module__VMVMAW__primary:hover{background:var(--color-bg-accent-hover);border-color:var(--color-bg-accent-hover)}.Button-module__VMVMAW__primary:active{background:var(--color-bg-accent-active);border-color:var(--color-bg-accent-active)}.Button-module__VMVMAW__ghost{color:var(--color-fg-accent-brand);border:1px solid var(--color-border-default);transition:color var(--duration-fast), border-color var(--duration-fast), background var(--duration-fast);background:0 0}.Button-module__VMVMAW__ghost:hover{border-color:var(--color-border-accent)}.Button-module__VMVMAW__ghost:active{background:var(--color-bg-subtle);border-color:var(--color-border-accent)}.Button-module__VMVMAW__primary:disabled,.Button-module__VMVMAW__ghost:disabled{color:var(--color-fg-muted);border-color:var(--color-border-default);cursor:not-allowed}.Button-module__VMVMAW__primary:disabled{background:var(--color-bg-subtle)}.Button-module__VMVMAW__ghost:disabled{background:0 0}.Button-module__VMVMAW__loading{pointer-events:none;position:relative}.Button-module__VMVMAW__loading .Button-module__VMVMAW__label{visibility:hidden}.Button-module__VMVMAW__spinner{border-radius:var(--radius-full);width:1em;height:1em;animation:Button-module__VMVMAW__spin var(--duration-spin) linear infinite;border:2px solid;border-right-color:#0000;margin:auto;position:absolute;inset:0}@keyframes Button-module__VMVMAW__spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.Button-module__VMVMAW__spinner{animation-duration:calc(var(--duration-spin) * 3)}}
.InteractiveGridPattern-module__Ml8TCq__svg{-webkit-mask-composite:source-in;width:100%;height:100%;display:block;position:absolute;inset:0;-webkit-mask-image:linear-gradient(90deg,#0000,#fff 6% 94%,#0000),linear-gradient(#fff 55%,#0000 100%);mask-image:linear-gradient(90deg,#0000,#fff 6% 94%,#0000),linear-gradient(#fff 55%,#0000 100%);-webkit-mask-composite:source-in;mask-composite:intersect}@keyframes InteractiveGridPattern-module__Ml8TCq__igp-fade{0%{opacity:1}to{opacity:0}}.InteractiveGridPattern-module__Ml8TCq__trailCell{animation:1.6s forwards InteractiveGridPattern-module__Ml8TCq__igp-fade}
.Hero-module__KTD73a__hero{min-height:calc(100vh - var(--layout-header-height));padding:var(--space-64) 0;border-top:none;flex-direction:column;justify-content:center;display:flex;position:relative}.Hero-module__KTD73a__gridWrap{pointer-events:none;width:100vw;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.Hero-module__KTD73a__gridWrap>*{pointer-events:auto}.Hero-module__KTD73a__content{z-index:1;position:relative}.Hero-module__KTD73a__role{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-fg-accent);text-transform:uppercase;letter-spacing:var(--font-letter-spacing-widest);margin-bottom:var(--space-16)}.Hero-module__KTD73a__heading{margin-bottom:var(--space-20)}.Hero-module__KTD73a__desc{font-size:var(--font-size-2xl);color:var(--color-fg-muted);margin-bottom:var(--space-40);line-height:var(--font-line-height-relaxed)}.Hero-module__KTD73a__actions{gap:var(--space-10);flex-wrap:wrap;display:flex}@media (max-width:768px){.Hero-module__KTD73a__hero{padding:var(--space-48) 0}.Hero-module__KTD73a__role,.Hero-module__KTD73a__heading{margin-bottom:var(--space-24)}.Hero-module__KTD73a__desc{font-size:var(--font-size-xl);margin-bottom:var(--space-24)}.Hero-module__KTD73a__desc br{display:none}.Hero-module__KTD73a__actions{gap:var(--space-24);flex-direction:column}.Hero-module__KTD73a__actionBtn{justify-content:center;width:100%}}
.SectionLabel-module__RwxaWW__label{font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:var(--font-letter-spacing-widest);color:var(--color-fg-default);margin-bottom:var(--space-40)}
.Dot-module__J3DMfW__dot{width:var(--size-dot);height:var(--size-dot);border-radius:var(--radius-full);background:var(--color-icon-subtle);border:1px solid var(--color-border-strong);cursor:pointer;transition:background var(--duration-fast);padding:0}.Dot-module__J3DMfW__active{background:var(--color-fg-default);border-color:var(--color-fg-default)}
.IconButton-module__qmzD9G__surface,.IconButton-module__qmzD9G__surface-square,.IconButton-module__qmzD9G__overlay{cursor:pointer;border:1px solid;justify-content:center;align-items:center;display:flex}.IconButton-module__qmzD9G__surface{width:var(--size-control-md);height:var(--size-control-md);background:var(--color-bg-default);border-color:var(--color-border-default);border-radius:var(--radius-full);color:var(--color-fg-default);font-size:var(--font-size-xl);transition:border-color var(--duration-fast), background var(--duration-fast)}.IconButton-module__qmzD9G__surface-square{width:var(--size-control-sm);height:var(--size-control-sm);background:var(--color-bg-default);border-color:var(--color-border-default);border-radius:var(--radius-sm);color:var(--color-fg-default);transition:opacity var(--duration-fast), border-color var(--duration-fast), background var(--duration-fast)}.IconButton-module__qmzD9G__surface:hover,.IconButton-module__qmzD9G__surface-square:hover{background:var(--color-bg-subtle-hover);border-color:var(--color-border-strong)}.IconButton-module__qmzD9G__overlay{width:var(--size-control-lg);height:var(--size-control-lg);background:var(--component-lightbox-control-bg);border-color:var(--component-lightbox-border);border-radius:var(--radius-full);color:var(--component-lightbox-fg);font-size:var(--font-size-2xl);transition:background var(--duration-fast)}.IconButton-module__qmzD9G__overlay:hover{background:var(--component-lightbox-control-bg-hover)}
.Tag-module__c-qxNG__tag{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-fg-secondary);background:var(--color-bg-subtle);border:1px solid var(--color-border-default);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-6)}
.ProjectCard-module__mdn61a__card{border:1px solid var(--color-border-default);border-radius:var(--radius-sm);color:inherit;transition:border-color var(--duration-fast) var(--easing-standard), background var(--duration-fast) var(--easing-standard);flex-direction:column;display:flex;overflow:hidden}.ProjectCard-module__mdn61a__card:hover{border-color:var(--color-border-strong)}.ProjectCard-module__mdn61a__thumb{aspect-ratio:16/9;background:var(--color-bg-subtle);position:relative;overflow:hidden}.ProjectCard-module__mdn61a__img{object-fit:cover;transition:transform var(--duration-slow) var(--easing-standard)}.ProjectCard-module__mdn61a__card:hover .ProjectCard-module__mdn61a__img{transform:scale(1.03)}.ProjectCard-module__mdn61a__body{gap:var(--space-6);padding:var(--space-20);flex-direction:column;flex:1;display:flex}.ProjectCard-module__mdn61a__top{align-items:center;gap:var(--space-8);display:flex}.ProjectCard-module__mdn61a__title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-fg-default);transition:color var(--duration-fast)}.ProjectCard-module__mdn61a__arrow{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-fg-muted);transition:color var(--duration-fast);flex-shrink:0}.ProjectCard-module__mdn61a__card:hover .ProjectCard-module__mdn61a__arrow,.ProjectCard-module__mdn61a__card:hover .ProjectCard-module__mdn61a__title{color:var(--color-fg-accent)}.ProjectCard-module__mdn61a__tags{gap:var(--space-8);flex-wrap:wrap;display:flex}.ProjectCard-module__mdn61a__desc{font-size:var(--font-size-sm);color:var(--color-fg-muted);line-height:var(--font-line-height-relaxed);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}
.project-module__3bSTQa__page{padding-top:var(--space-56);padding-bottom:var(--space-72);border-top:none}.project-module__3bSTQa__backLink{align-items:center;gap:var(--space-6);font-size:var(--font-size-md);color:var(--color-fg-muted);margin-bottom:var(--space-12);transition:color var(--duration-fast);cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;display:inline-flex}.project-module__3bSTQa__backLink:hover{color:var(--color-fg-accent)}.project-module__3bSTQa__header{margin-bottom:var(--space-24)}.project-module__3bSTQa__header h1{font-size:clamp(var(--font-size-display-sm), 4vw, var(--font-size-display-lg));margin-bottom:var(--space-12);line-height:var(--font-line-height-tight)}.project-module__3bSTQa__tags{gap:var(--space-8);flex-wrap:wrap;display:flex}.project-module__3bSTQa__content{flex-direction:column;display:flex}.project-module__3bSTQa__section{padding:var(--space-40) 0;border-top:1px solid var(--color-border-default)}.project-module__3bSTQa__section h2{margin-bottom:var(--space-16)}.project-module__3bSTQa__section p{font-size:var(--font-size-lg);line-height:var(--font-line-height-loose);color:var(--color-fg-muted);max-width:var(--layout-measure);margin-bottom:var(--space-12)}.project-module__3bSTQa__section p:last-child{margin-bottom:0}.project-module__3bSTQa__section ul{gap:var(--space-6);max-width:var(--layout-measure);margin-top:var(--space-8);flex-direction:column;list-style:none;display:flex}.project-module__3bSTQa__section li{font-size:var(--font-size-lg);color:var(--color-fg-muted);padding-left:var(--space-16);line-height:var(--font-line-height-relaxed);position:relative}.project-module__3bSTQa__section li:before{content:"—";color:var(--color-icon-subtle);position:absolute;left:0}.project-module__3bSTQa__links{gap:var(--space-10);margin-top:var(--space-16);flex-wrap:wrap;display:flex}.project-module__3bSTQa__links a{font-size:var(--font-size-md);color:var(--color-fg-muted);border:1px solid var(--color-border-default);border-radius:var(--radius-sm);padding:var(--space-4) var(--space-8);transition:color var(--duration-fast), border-color var(--duration-fast)}.project-module__3bSTQa__links a:hover{color:var(--color-fg-accent);border-color:var(--color-border-accent)}
.Projects-module__iNRuFG__grid{gap:var(--space-16);grid-template-columns:1fr 1fr;display:grid}.Projects-module__iNRuFG__footer{margin-top:var(--space-32);justify-content:center;display:flex}@media (max-width:768px){.Projects-module__iNRuFG__grid{grid-template-columns:1fr}.Projects-module__iNRuFG__footer a{justify-content:center;width:100%}}
.Lightbox-module__ob4IGa__lightbox{z-index:var(--z-index-overlay);background:var(--component-lightbox-scrim);opacity:0;pointer-events:none;transition:opacity var(--duration-moderate) var(--easing-standard);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.Lightbox-module__ob4IGa__open{opacity:1;pointer-events:auto}.Lightbox-module__ob4IGa__img{object-fit:contain;border-radius:var(--radius-sm);-webkit-user-select:none;user-select:none;max-width:92vw;max-height:90vh;display:block}.Lightbox-module__ob4IGa__close,.Lightbox-module__ob4IGa__prev,.Lightbox-module__ob4IGa__next{position:fixed}.Lightbox-module__ob4IGa__close{top:var(--space-20);right:var(--space-20)}.Lightbox-module__ob4IGa__prev,.Lightbox-module__ob4IGa__next{top:50%;transform:translateY(-50%)}.Lightbox-module__ob4IGa__prev{left:var(--space-20)}.Lightbox-module__ob4IGa__next{right:var(--space-20)}.Lightbox-module__ob4IGa__counter{bottom:var(--space-20);color:var(--component-lightbox-fg-muted);font-size:var(--font-size-sm);letter-spacing:var(--font-letter-spacing-wide);position:fixed;left:50%;transform:translate(-50%)}@media (max-width:480px){.Lightbox-module__ob4IGa__prev{left:var(--space-8)}.Lightbox-module__ob4IGa__next{right:var(--space-8)}}
.Pill-module__6pvceG__pill{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-fg-muted);padding:var(--space-4) var(--space-8);border:1px solid var(--color-border-default);border-radius:var(--radius-full);transition:border-color var(--duration-fast), color var(--duration-fast)}.Pill-module__6pvceG__pill:hover{color:var(--color-fg-default);border-color:var(--color-border-strong)}
.cv-module__vSHQBG__page{padding-top:var(--space-56);padding-bottom:var(--space-72);border-top:none}.cv-module__vSHQBG__backLink{align-items:center;gap:var(--space-6);font-size:var(--font-size-sm);color:var(--color-fg-muted);margin-bottom:var(--space-32);transition:color var(--duration-fast);display:inline-flex}.cv-module__vSHQBG__backLink:hover{color:var(--color-fg-accent)}.cv-module__vSHQBG__header{justify-content:space-between;align-items:flex-end;gap:var(--space-24);margin-bottom:var(--space-40);flex-wrap:wrap;display:flex}.cv-module__vSHQBG__header h1{font-size:clamp(var(--font-size-display-sm), 4vw, var(--font-size-display-lg));line-height:var(--font-line-height-tight)}.cv-module__vSHQBG__previewWrap{border:1px solid var(--color-border-default);border-radius:var(--radius-md);background:var(--color-bg-subtle);overflow:hidden}.cv-module__vSHQBG__iframe{border:none;width:100%;height:80vh;min-height:600px;display:block}.cv-module__vSHQBG__fallback{padding:var(--space-48) var(--space-32);text-align:center}.cv-module__vSHQBG__fallback p{margin-bottom:var(--space-20);font-size:var(--font-size-md)}
.projects-module__lnHueG__page{padding-top:var(--space-56);padding-bottom:var(--space-72);border-top:none}.projects-module__lnHueG__backLink{align-items:center;gap:var(--space-6);font-size:var(--font-size-md);color:var(--color-fg-muted);margin-bottom:var(--space-12);transition:color var(--duration-fast);display:inline-flex}.projects-module__lnHueG__backLink:hover{color:var(--color-fg-accent)}.projects-module__lnHueG__heading{font-family:var(--font-family-display);font-size:clamp(var(--font-size-display-sm), 4vw, var(--font-size-display-lg));font-weight:var(--font-weight-regular);line-height:var(--font-line-height-tight);letter-spacing:var(--font-letter-spacing-display);color:var(--color-fg-default);margin-bottom:var(--space-40)}.projects-module__lnHueG__grid{gap:var(--space-16);grid-template-columns:1fr 1fr;display:grid}@media (max-width:768px){.projects-module__lnHueG__grid{grid-template-columns:1fr}}
.Carousel-module__SJhMPq__carousel{margin-bottom:var(--space-64);border:1px solid var(--color-border-default);border-radius:var(--radius-md);position:relative;overflow:hidden}.Carousel-module__SJhMPq__track{aspect-ratio:16/9;background:var(--color-bg-subtle);position:relative}.Carousel-module__SJhMPq__slide{opacity:0;transition:opacity var(--duration-slow) var(--easing-standard);pointer-events:none;position:absolute;inset:0}.Carousel-module__SJhMPq__active{opacity:1;pointer-events:auto}.Carousel-module__SJhMPq__slideImg{object-fit:cover}.Carousel-module__SJhMPq__prev,.Carousel-module__SJhMPq__next{z-index:1;position:absolute;top:50%;transform:translateY(-50%)}.Carousel-module__SJhMPq__prev{left:var(--space-16)}.Carousel-module__SJhMPq__next{right:var(--space-16)}.Carousel-module__SJhMPq__dots{bottom:var(--space-16);gap:var(--space-6);display:flex;position:absolute;left:50%;transform:translate(-50%)}.Carousel-module__SJhMPq__expand{top:var(--space-12);right:var(--space-12);opacity:0;z-index:2;position:absolute}.Carousel-module__SJhMPq__carousel:hover .Carousel-module__SJhMPq__expand{opacity:1}@media (max-width:480px){.Carousel-module__SJhMPq__expand{opacity:1}}
