.page-module__33s4yW__main{box-sizing:border-box;flex-direction:column;max-width:1000px;min-height:100vh;margin:0 auto;padding:0 2rem 12rem;display:flex}.page-module__33s4yW__header{margin-bottom:2rem;padding-top:6rem}.page-module__33s4yW__title{letter-spacing:-.02em;color:var(--text-color);transform-origin:0 0;margin:0;font-size:4rem;font-weight:300;animation:linear both page-module__33s4yW__shrinkAndFade;animation-timeline:scroll(root);animation-range:0 100px}.page-module__33s4yW__content{flex-direction:column;gap:2rem;display:flex}.page-module__33s4yW__placeholderText{color:var(--text-color);opacity:.8;font-size:1.25rem}@keyframes page-module__33s4yW__shrinkAndFade{to{opacity:0;transform:scale(.9)}}.page-module__33s4yW__techStackGroup{flex-direction:column;margin-top:2rem;display:flex}.page-module__33s4yW__techStackGroup>div:last-child{margin-top:-1px}@media (max-width:768px),(hover:none) and (pointer:coarse){.page-module__33s4yW__main{padding:0 1.5rem 8rem}.page-module__33s4yW__title{word-break:break-word;font-size:2.25rem}}
.ProjectHeader-module__z2PhAG__header{margin-bottom:2rem;padding-top:6rem}.ProjectHeader-module__z2PhAG__title{letter-spacing:-.02em;color:var(--text-color);transform-origin:0 0;margin:0;font-size:4rem;font-weight:300;animation:linear both ProjectHeader-module__z2PhAG__shrinkAndFade;animation-timeline:scroll(root);animation-range:0 100px}.ProjectHeader-module__z2PhAG__descriptionWrapper{justify-content:space-between;align-items:center;width:100%;margin-top:3.5rem;display:flex}.ProjectHeader-module__z2PhAG__description{color:var(--text-color);opacity:.8;flex:1;max-width:800px;margin:0;font-size:1.25rem;line-height:1.6}.ProjectHeader-module__z2PhAG__githubLink{color:var(--text-color);opacity:.5;justify-content:center;align-items:center;margin-left:2rem;margin-right:1.5rem;transition:all .2s;display:flex}@media (hover:hover){.ProjectHeader-module__z2PhAG__githubLink:hover{opacity:1;transform:scale(1.1)}}.ProjectHeader-module__z2PhAG__githubIcon{width:48px;height:48px}@keyframes ProjectHeader-module__z2PhAG__shrinkAndFade{to{opacity:0;transform:scale(.9)}}@media (max-width:768px),(hover:none) and (pointer:coarse){.ProjectHeader-module__z2PhAG__title{font-size:3rem}.ProjectHeader-module__z2PhAG__description{font-size:1.1rem}}
.ProjectImage-module__FSJyXq__container{flex-direction:column;align-items:center;gap:.75rem;width:100%;display:flex}.ProjectImage-module__FSJyXq__caption{color:var(--text-color);opacity:.5;text-align:center;margin:0;font-size:.85rem;font-weight:500}.ProjectImage-module__FSJyXq__imageWrapper{box-sizing:border-box;aspect-ratio:16/9;background-color:var(--border-color,#0000000d);border-radius:16px;width:100%;padding:4px;text-decoration:none;transition:transform .2s;display:block;position:relative;overflow:hidden;transform:translateZ(0)}.ProjectImage-module__FSJyXq__imageWrapper:active{transform:scale(.98)translateZ(0)}.ProjectImage-module__FSJyXq__staticWrapper{cursor:default;transition:none}.ProjectImage-module__FSJyXq__staticWrapper:active{transform:none}.ProjectImage-module__FSJyXq__gradientBg{opacity:0;z-index:0;background:conic-gradient(red,#ff8000,#ff0,#0f0,#00f,#8000ff,red);width:400%;height:400%;transition:opacity .3s;animation:4s linear infinite ProjectImage-module__FSJyXq__rotate;position:absolute;top:-150%;left:-150%}@media (hover:hover) and (pointer:fine){.ProjectImage-module__FSJyXq__imageWrapper:hover .ProjectImage-module__FSJyXq__gradientBg{opacity:1}}@media (max-width:768px),(hover:none) and (pointer:coarse){.ProjectImage-module__FSJyXq__gradientBg{opacity:1}}.ProjectImage-module__FSJyXq__imageContent{z-index:1;background-color:var(--card-bg,#1a1a1a);border-radius:12px;position:absolute;inset:4px;overflow:hidden}.ProjectImage-module__FSJyXq__image{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .4s;display:block}.ProjectImage-module__FSJyXq__imageLoaded{opacity:1}@keyframes ProjectImage-module__FSJyXq__rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
.ExpandableBar-module__UkMLJq__stackContainer{border-top:1px solid var(--border-color,#0000001a);border-bottom:1px solid var(--border-color,#0000001a);cursor:default;align-items:center;width:100%;margin-top:1rem;padding:1.75rem 0;display:flex}.ExpandableBar-module__UkMLJq__stackLabel{white-space:nowrap;color:var(--text-color);-webkit-user-select:none;user-select:none;margin-right:.5rem;font-size:1.1rem;font-weight:500}.ExpandableBar-module__UkMLJq__slashes{color:var(--text-color);opacity:.5;white-space:nowrap;font-size:1.1rem;font-weight:500}.ExpandableBar-module__UkMLJq__spacer{opacity:0;will-change:max-width;flex-grow:1;align-items:center;min-width:0;max-width:0;margin:-40px 0;padding:40px 0;transition:max-width .5s cubic-bezier(.4,0,.2,1),opacity .4s;display:flex;overflow:hidden}@media (hover:hover) and (pointer:fine){.ExpandableBar-module__UkMLJq__stackContainer:hover .ExpandableBar-module__UkMLJq__spacer{opacity:1;max-width:1000px;transition-delay:0s,.1s}.ExpandableBar-module__UkMLJq__stackContainer:hover .ExpandableBar-module__UkMLJq__iconsWrapper{transform:translate(0)}.ExpandableBar-module__UkMLJq__iconWrapper:hover:after{opacity:1;transform:translate(-50%)translateY(-8px)}.ExpandableBar-module__UkMLJq__iconWrapper:hover{opacity:1;transform:translateY(-2px)}}.ExpandableBar-module__UkMLJq__marqueeTrack{align-items:center;display:flex}.ExpandableBar-module__UkMLJq__iconsWrapper{align-items:center;gap:1.5rem;padding:8px 1rem;transition:transform .5s cubic-bezier(.4,0,.2,1);display:flex;transform:translate(-10px)}.ExpandableBar-module__UkMLJq__duplicateTrack{display:none}.ExpandableBar-module__UkMLJq__iconWrapper{color:var(--text-color);opacity:.7;cursor:help;flex-shrink:0;justify-content:center;align-items:center;transition:opacity .2s,transform .2s;display:flex;position:relative}.ExpandableBar-module__UkMLJq__iconWrapper:after{content:attr(data-tooltip);color:#fff;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;background-color:#1a1a1a;border-radius:6px;padding:4px 8px;font-size:.75rem;font-weight:600;transition:opacity .2s,transform .2s cubic-bezier(.19,1,.22,1);position:absolute;bottom:100%;left:50%;transform:translate(-50%)translateY(0);box-shadow:0 4px 12px #0000001a}.ExpandableBar-module__UkMLJq__chip{color:var(--text-color);opacity:.8;white-space:nowrap;flex-shrink:0;font-size:1rem;font-weight:500}@media (max-width:768px),(hover:none) and (pointer:coarse){.ExpandableBar-module__UkMLJq__stackContainer{box-sizing:border-box;width:100%;max-width:100%;overflow:hidden}.ExpandableBar-module__UkMLJq__spacer{opacity:1;flex:1;width:0;min-width:0;max-width:100%;margin:0 .5rem;padding:0;display:flex;overflow:hidden}.ExpandableBar-module__UkMLJq__marqueeTrack{align-items:center;gap:1.5rem;display:flex}.ExpandableBar-module__UkMLJq__marqueeTrackAnimated{will-change:transform;width:max-content;animation:14s linear infinite ExpandableBar-module__UkMLJq__conveyorBelt}.ExpandableBar-module__UkMLJq__duplicateTrack{display:flex}.ExpandableBar-module__UkMLJq__iconsWrapper{flex-shrink:0;align-items:center;gap:1.5rem;padding:8px 0;display:flex;transform:none}.ExpandableBar-module__UkMLJq__iconWrapper,.ExpandableBar-module__UkMLJq__chip{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;pointer-events:none}}@keyframes ExpandableBar-module__UkMLJq__conveyorBelt{0%{transform:translate(0)}to{transform:translate(calc(-50% - .75rem))}}
.ProjectReport-module__Wjw4Ra__reportContainer{color:var(--text-color);flex-direction:column;gap:1.5rem;margin-top:4rem;font-size:1.15rem;line-height:1.7;display:flex}.ProjectReport-module__Wjw4Ra__reportContainer h2,.ProjectReport-module__Wjw4Ra__reportContainer h3,.ProjectReport-module__Wjw4Ra__reportContainer h4{letter-spacing:-.01em;margin-top:2rem;margin-bottom:.5rem;font-weight:500}.ProjectReport-module__Wjw4Ra__reportContainer h2{font-size:2rem}.ProjectReport-module__Wjw4Ra__reportContainer h3{font-size:1.5rem}.ProjectReport-module__Wjw4Ra__reportContainer p{opacity:.85}.ProjectReport-module__Wjw4Ra__reportContainer img{border-radius:12px;max-width:100%;height:auto;margin:1.5rem 0;display:block}.ProjectReport-module__Wjw4Ra__reportContainer ul,.ProjectReport-module__Wjw4Ra__reportContainer ol{opacity:.85;flex-direction:column;gap:.5rem;padding-left:1.5rem;display:flex}.ProjectReport-module__Wjw4Ra__reportContainer a{color:var(--text-color);border-bottom:1px solid color-mix(in srgb, var(--text-color) 30%, transparent);text-decoration:none;transition:border-color .2s}.ProjectReport-module__Wjw4Ra__reportContainer a:hover{border-bottom:1px solid var(--text-color)}
