body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fff;color:#1a1a1a;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;height:100vh;height:100dvh;margin:0;overflow:hidden;width:100vw}@media (max-width:768px){body{-webkit-text-size-adjust:100%;height:auto;min-height:100vh;min-height:100dvh;overflow-x:hidden;overflow-y:auto}}.app-container{height:100vh;height:100dvh;width:100vw}.app-container,.intro-content{align-items:center;display:flex;justify-content:center;position:relative}.intro-content{flex-direction:column;padding:2rem;z-index:10}.name-title{animation:typing 1s steps(30) forwards,blink-caret .75s step-end infinite;animation:typing 1s steps(20) forwards,blink-caret .75s step-end infinite,caretFadeOut .1s ease-out 1.3s forwards;border-right:.15em solid orange;color:#111;font-size:5rem;font-weight:200;letter-spacing:1.2rem;margin:0 auto 0 1.2rem;opacity:1;overflow:hidden;white-space:nowrap;width:0}.separator-line{animation:expandLine .6s ease-out 1.05s forwards;background-color:#ccc;height:1px;margin:2rem 0;opacity:0;transform:scaleX(0);width:100px}.role-subtitle{animation:fadeIn .6s ease-out 1.45s forwards;color:#555;font-size:.9rem;font-weight:600;letter-spacing:.4rem;margin-bottom:4rem;margin-left:.4rem;margin-top:0;opacity:0;text-transform:uppercase}.loading-container{align-items:center;animation:fadeIn .6s ease-out 1.6s forwards;display:flex;flex-direction:column;opacity:0;width:300px}.loading-bar-bg{background-color:#e0e0e0;height:2px;overflow:hidden;position:relative;width:100%}.loading-bar-progress{animation:loadProgress 1.6s cubic-bezier(.22,1,.36,1) 1.7s forwards;background:linear-gradient(90deg,#111,#555);height:100%;left:0;position:absolute;top:0;width:0}.loading-text{color:#888;font-size:.7rem;letter-spacing:.15rem;margin-top:1rem;opacity:1}@keyframes typing{0%{width:0}to{width:100%}}@keyframes blink-caret{0%,to{border-color:#0000}50%{border-color:#111}}@keyframes caretFadeOut{to{border-color:#0000}}@keyframes expandLine{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes loadProgress{to{width:100%}}@media (max-width:768px){.name-title{animation:typingMobile 1s steps(20) forwards,blink-caret .75s step-end infinite,caretFadeOut .1s ease-out 1.3s forwards;font-size:min(2.5rem,10.5vw);letter-spacing:min(.5rem,2vw);margin-left:min(.5rem,2vw);margin-right:0;max-width:0;width:-webkit-max-content;width:max-content}@keyframes typingMobile{to{max-width:100%}}.role-subtitle{font-size:.75rem;letter-spacing:.2rem;margin-bottom:2rem;margin-left:.2rem}.separator-line{margin:1.5rem 0;width:60px}.loading-container{width:200px}.app-container{display:block;height:auto}.app-container,.intro-content{min-height:100vh;min-height:100dvh}.intro-content{padding:2rem 1rem}}.main-page-container{animation:fadeInMain 1.5s ease-out forwards;display:flex;flex-direction:column;height:100vh;height:100dvh;left:0;opacity:0;pointer-events:none;position:absolute;top:0;width:100vw;z-index:20}.footer-panel,.main-header,.main-viewport,.project-title-container{pointer-events:auto}@keyframes fadeInMain{to{opacity:1}}.glass-panel{backdrop-filter:blur(12px);background:#ffffffb3;border:1px solid #ffffff80;box-shadow:0 4px 6px #0000000d}.glass-panel,.main-header{-webkit-backdrop-filter:blur(12px)}.main-header{align-items:center;backdrop-filter:blur(12px);background:#ffffffd9;border-bottom:1px solid #0000000d;display:flex;justify-content:space-between;margin:0;padding:1.2rem 3rem}.header-name{color:#111;font-size:1.5rem;font-weight:300;letter-spacing:-.02em}.header-nav{display:flex;gap:2.5rem}.header-nav a,.header-nav button{color:#444;font-size:.95rem;font-weight:500;text-decoration:none;transition:color .2s ease}.header-nav button{background:none;border:none;cursor:pointer;font-family:inherit;line-height:inherit;margin:0;padding:0}@media (hover:hover){.header-nav a:hover,.header-nav button:hover{color:#000}}.project-title-container{margin-bottom:.2rem;margin-top:.5rem;text-align:center}.project-title{background:linear-gradient(90deg,#333,#666);-webkit-background-clip:text;background-clip:text;color:#0000;font-size:1rem;font-weight:600;letter-spacing:.1em;margin:0;text-transform:uppercase}.main-viewport{align-items:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffff80;border:1px solid #fff9;border-radius:16px;box-shadow:0 10px 30px #00000014;display:flex;flex:1 1;justify-content:center;margin:.5rem 4rem 1rem;overflow:hidden;position:relative}.project-viewer,.viewer-frame{height:100%;width:100%}.project-iframe,.project-image{border:none;display:block;height:100%;width:100%}.viewer-activate,.viewer-release{display:none}.placeholder-content{align-items:center;color:#666;display:flex;flex-direction:column;height:100%;justify-content:center}.viewer-mobile-preview{object-fit:cover;object-position:top center}.footer-panel{align-items:center;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffd9;border:1px solid #ffffff80;border-radius:12px;box-shadow:0 4px 15px #0000000d;display:flex;justify-content:space-between;margin:0 4rem 1.5rem;padding:1.2rem 3rem}.description-btn{background:#fff;background-clip:padding-box,border-box;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,#7f00ff,#00bfff,#0ff);background-image:linear-gradient(#fff,#fff),var(--project-gradient,linear-gradient(90deg,#7f00ff,#00bfff,#0ff));background-origin:padding-box,border-box;border:2px solid #0000;border-radius:50px;box-shadow:0 2px 5px #0000000d;color:#333;cursor:pointer;font-family:Inter,sans-serif;font-size:.9rem;font-weight:600;padding:.6rem 2rem;position:relative;transition:transform .2s ease,box-shadow .2s ease;z-index:1}@media (hover:hover){.description-btn:hover{background-image:linear-gradient(90deg,#7f00ff,#00bfff,#0ff);background-image:var(--project-gradient,linear-gradient(90deg,#7f00ff,#00bfff,#0ff));border-color:#0000;box-shadow:0 4px 10px #0000001a;color:#fff;transform:translateY(-1px)}}.footer-center{align-items:center;display:flex;gap:1.5rem}.nav-arrow{background:none;border:none;color:#888;cursor:pointer;font-size:1.5rem;transition:color .2s,transform .2s}@media (hover:hover){.nav-arrow:hover{color:#111;transform:scale(1.1)}}.dots-container{display:flex;gap:.8rem}.nav-dot{background-color:#e0e0e0;border-radius:50%;cursor:pointer;height:8px;transition:all .3s ease;width:8px}.nav-dot.active{background-color:#333;transform:scale(1.2)}.footer-right{font-size:.95rem;font-weight:500}.gradient-link{background:linear-gradient(90deg,#7f00ff,#00bfff,#0ff);background:var(--project-gradient,linear-gradient(90deg,#7f00ff,#00bfff,#0ff));-webkit-background-clip:text;background-clip:text;color:#0000;font-weight:700;text-decoration:none;transition:opacity .2s}@media (hover:hover){.gradient-link:hover{opacity:.8}}.separator{color:#ccc;margin:0 .5rem}.modal-overlay{align-items:center;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);background:#fff6;display:flex;height:100vh;height:100dvh;justify-content:center;left:0;pointer-events:auto;position:fixed;top:0;width:100vw;z-index:100}.modal-content{backdrop-filter:blur(25px);-webkit-backdrop-filter:blur(25px);background:#ffffff73!important;border:1px solid #fffc;border-radius:20px;box-shadow:0 25px 50px #00000026;max-height:88vh;max-height:88dvh;max-width:600px;overflow-y:auto;overscroll-behavior:contain;padding:2.5rem;position:relative;width:90%}@supports not selector(::-webkit-scrollbar){.modal-content{scrollbar-color:#5b8cc88c #0000;scrollbar-width:thin}}.modal-content::-webkit-scrollbar{width:10px}.modal-content::-webkit-scrollbar-track{background:#0000;margin:18px 0}.modal-content::-webkit-scrollbar-thumb{background-clip:padding-box;background-image:linear-gradient(#3f7fd8,#8ec5ec);background-image:var(--project-gradient,linear-gradient(#3f7fd8,#8ec5ec));border:3px solid #0000;border-radius:10px}.about-modal::-webkit-scrollbar-thumb,.contact-modal::-webkit-scrollbar-thumb{background-image:linear-gradient(#3f7fd8,#8ec5ec)}@media (hover:hover){.modal-content::-webkit-scrollbar-thumb:hover{border-width:2px}}.modal-close-btn{align-items:center;background:#ffffffb3;border:none;border-radius:50%;color:#888;cursor:pointer;display:flex;font-size:2rem;height:2.4rem;justify-content:center;line-height:1;margin:-1.3rem 0 -1.1rem -1rem;padding:0;position:-webkit-sticky;position:sticky;top:.6rem;transition:color .2s;width:2.4rem;z-index:2}@media (hover:hover){.modal-close-btn:hover{color:#111}}.modal-title{color:#111;font-size:2rem;font-weight:300;letter-spacing:-.02em;margin-bottom:.5rem;margin-top:1rem;text-align:center}.modal-dates{color:#555;font-size:.9rem;font-weight:500;text-align:center}.modal-dates,.modal-section{margin-bottom:2rem}.modal-section h3{color:#444;font-size:1.1rem;font-weight:600;letter-spacing:.05em;margin-bottom:.8rem;text-transform:uppercase}.modal-section p{color:#555;line-height:1.6}.stack-list{list-style:none;padding:0}.stack-list li{border-left:2px solid #00bfff;color:#555;line-height:1.5;margin-bottom:.8rem;padding-left:1rem}.stack-category{color:#333;font-weight:700;margin-right:.5rem}.about-modal{max-width:800px;padding:1.5rem 2rem;text-align:left;width:90%}.about-header{margin-bottom:1.2rem;text-align:center}.about-title{background:linear-gradient(90deg,#333,#555);-webkit-background-clip:text;background-clip:text;color:#0000;font-size:1.8rem;font-weight:700;letter-spacing:-.02em;margin:0}.about-divider{background:linear-gradient(90deg,#3f7fd8,#8ec5ec);border-radius:2px;height:3px;margin:.8rem auto 0;width:40px}.about-body p{color:#444;font-size:.95rem;line-height:1.6;margin-bottom:1rem}.about-subtitle{border-left:3px solid #3f7fd8;color:#222;font-size:1.1rem;font-weight:600;margin-bottom:.8rem;margin-top:1.5rem;padding-left:8px}.about-list{list-style:none;margin-bottom:1.5rem;padding:0}.about-list li{color:#555;font-size:.9rem;margin-bottom:.4rem;padding-left:1rem;position:relative}.about-list li:before{color:#8ec5ec;content:"•";font-weight:700;left:0;position:absolute}.about-footer{border-top:1px solid #0000001a;margin-top:2rem;padding-top:1.2rem;text-align:center}.thank-you{color:#333;font-size:.9rem;font-style:italic;font-weight:600}.contact-modal{max-width:600px;padding:1.5rem 2.5rem;width:90%}.contact-intro{color:#444;font-size:1rem;margin-bottom:2rem;text-align:center}.contact-list{list-style:none;margin:0 auto;max-width:450px;padding:0}.contact-list li{align-items:center;background:#fff6;border-radius:8px;display:flex;font-size:1rem;margin-bottom:1.2rem;padding:.8rem 1rem;transition:transform .2s,background .2s}@media (hover:hover){.contact-list li:hover{background:#fff9;transform:translateX(5px)}}.contact-label{color:#333;font-weight:700;width:100px}.contact-link,.contact-text{color:#555;flex:1 1;font-weight:500;text-decoration:none}@media (hover:hover){.contact-link:hover{color:#00bfff;text-decoration:underline}}@media (max-width:768px){.main-page-container{height:auto;min-height:100vh;min-height:100dvh;position:relative;width:100%}.main-viewport{flex:1 1 auto;min-height:240px}.project-viewer{bottom:0;height:auto;left:0;position:absolute;right:0;top:0;width:auto}.project-iframe{pointer-events:none}.project-viewer.is-active .project-iframe{pointer-events:auto}.viewer-activate{-webkit-tap-highlight-color:transparent;align-items:flex-end;background:none;border:none;bottom:0;cursor:pointer;display:flex;justify-content:center;left:0;padding:0 1rem 1.35rem;position:absolute;right:0;top:0;z-index:5}.viewer-activate-label{background-clip:padding-box,border-box;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,#7f00ff,#00bfff,#0ff);background-image:linear-gradient(#fff,#fff),var(--project-gradient,linear-gradient(90deg,#7f00ff,#00bfff,#0ff));background-origin:padding-box,border-box;border:2px solid #0000;border-radius:50px;box-shadow:0 8px 22px #0000002e;color:#333;display:block;font-family:Inter,sans-serif;font-size:.95rem;font-weight:700;letter-spacing:.01em;max-width:100%;padding:.85rem 2rem}a.viewer-activate{pointer-events:none;text-decoration:none}a.viewer-activate .viewer-activate-label{pointer-events:auto}.viewer-release{-webkit-tap-highlight-color:transparent;background-clip:padding-box,border-box;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,#7f00ff,#00bfff,#0ff);background-image:linear-gradient(#fff,#fff),var(--project-gradient,linear-gradient(90deg,#7f00ff,#00bfff,#0ff));background-origin:padding-box,border-box;border:2px solid #0000;border-radius:50px;bottom:.6rem;box-shadow:0 6px 18px #0000002e;color:#333;cursor:pointer;display:block;font-family:Inter,sans-serif;font-size:.8rem;font-weight:700;letter-spacing:.01em;padding:.5rem 1.35rem;position:absolute;right:.6rem;z-index:6}.main-header{background:#ffffffe6;gap:.75rem;padding:.75rem 1rem}.header-name{font-size:1.05rem;white-space:nowrap}.header-nav{gap:1rem}.header-nav a,.header-nav button{font-size:.8rem;white-space:nowrap}.project-title-container{margin-bottom:.15rem;margin-top:.4rem;padding:0 .75rem}.project-title{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;font-size:.7rem;letter-spacing:.06em;line-height:1.35;overflow:hidden}.main-viewport{border-radius:12px;margin:.4rem .75rem}.footer-panel{grid-row-gap:.65rem;grid-column-gap:.75rem;align-items:center;column-gap:.75rem;display:grid;grid-template-areas:"pager pager" "details links";grid-template-columns:auto 1fr;margin:0 .75rem calc(.75rem + env(safe-area-inset-bottom, 0px));padding:.7rem 1rem;row-gap:.65rem}.footer-left{grid-area:details}.footer-center{gap:.75rem;grid-area:pager;justify-content:center;width:100%}.footer-right{font-size:.8rem;grid-area:links;text-align:right}.separator{margin:0 .25rem}.description-btn{font-size:.8rem;padding:.45rem 1.25rem;text-align:center;white-space:nowrap}.nav-arrow{font-size:1.35rem;padding:.1rem .6rem}.dots-container{gap:.55rem}.nav-dot{position:relative}.nav-dot:after{bottom:-9px;content:"";left:-9px;position:absolute;right:-9px;top:-9px}.footer-panel,.main-header{-webkit-tap-highlight-color:transparent}.description-btn,.gradient-link,.header-nav a,.header-nav button,.nav-arrow,.nav-dot{-webkit-user-select:none;user-select:none}.modal-content{-webkit-overflow-scrolling:touch;max-height:85vh;max-height:85dvh;padding:1.5rem;width:95%}.modal-title{font-size:1.5rem;margin-top:1.5rem}.modal-close-btn{background:#fffc;font-size:1.8rem;height:2rem;margin:-.5rem -.5rem -1.5rem auto;top:.5rem;width:2rem}.stack-list li{font-size:.9rem}.about-modal{padding:1.5rem}.about-title{font-size:1.5rem}.contact-modal{padding:1.5rem}.contact-list li{align-items:flex-start;flex-direction:column;gap:.25rem}.contact-label{color:#777;font-size:.85rem;width:auto}}.resume-page-container{--resume-blue:#3f7fd8;--resume-blue-soft:#8ec5ec;--resume-blue-wash:#eef6fd;--resume-ink:#1d2733;--resume-muted:#5b6878;animation:fadeInMain .8s ease-out forwards;color:var(--resume-ink);display:flex;flex-direction:column;height:100vh;height:100dvh;left:0;opacity:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:100vw;z-index:20}.resume-header{align-items:center;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffd9;border-bottom:1px solid #0000000d;display:flex;justify-content:space-between;padding:1.2rem 3rem;position:-webkit-sticky;position:sticky;top:0;z-index:50}.resume-btn{background:#fff;background-clip:padding-box,border-box;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,var(--resume-blue),var(--resume-blue-soft));background-origin:padding-box,border-box;border:2px solid #0000;border-radius:50px;box-shadow:0 2px 5px #0000000d;color:#333;cursor:pointer;display:inline-block;font-family:Inter,sans-serif;font-size:.9rem;font-weight:600;padding:.6rem 2rem;text-decoration:none;transition:transform .2s ease,box-shadow .2s ease}@media (hover:hover){.resume-btn:hover{background-image:linear-gradient(90deg,var(--resume-blue),var(--resume-blue-soft));border-color:#0000;box-shadow:0 4px 10px #3f7fd833;color:#fff;transform:translateY(-1px)}}.resume-document{background:#fff;background-clip:padding-box,border-box;background-image:linear-gradient(#fff,#fff),linear-gradient(90deg,var(--resume-blue),var(--resume-blue-soft));background-origin:border-box;border-radius:10px;border-top:4px solid #0000;box-shadow:0 1px 2px #1d27330f,0 18px 50px #1d27331f;box-sizing:border-box;color:var(--resume-ink);font-family:"Source Serif 4",Cambria,Times New Roman,serif;font-size:.9rem;line-height:1.45;margin:2rem auto 4rem;max-width:920px;padding:3.5rem 4rem 3rem;width:90%}.resume-document a{color:inherit;text-decoration:underline;-webkit-text-decoration-color:var(--resume-blue-soft);text-decoration-color:var(--resume-blue-soft);text-decoration-thickness:1.5px;text-underline-offset:3px;transition:color .15s ease,-webkit-text-decoration-color .15s ease;transition:color .15s ease,text-decoration-color .15s ease;transition:color .15s ease,text-decoration-color .15s ease,-webkit-text-decoration-color .15s ease}@media (hover:hover){.resume-document a:hover{color:var(--resume-blue);-webkit-text-decoration-color:var(--resume-blue);text-decoration-color:var(--resume-blue)}}.resume-top-section{margin-bottom:1.6rem;text-align:center}.resume-name{font-feature-settings:"smcp";color:var(--resume-ink);font-size:2.6rem;font-variant:small-caps;font-weight:700;letter-spacing:.06em;line-height:1.1;margin:0 0 .6rem}.resume-contact-info{color:var(--resume-muted);display:flex;font-size:.85rem;justify-content:center;white-space:nowrap}.contact-group{display:flex}.contact-group+.contact-group:before,.contact-group>*+:before{color:var(--resume-blue-soft);content:"|";display:inline-block;margin:0 .55rem;text-decoration:none}@media (max-width:1000px){.resume-contact-info{align-items:center;flex-direction:column;row-gap:.2rem}.contact-group+.contact-group:before{content:none}}.resume-section{margin-bottom:1.5rem}.resume-section-title{font-feature-settings:"smcp";border-bottom:1.5px solid #0000;border-image:linear-gradient(90deg,var(--resume-blue),var(--resume-blue-soft) 60%,#8ec5ec26) 1;color:var(--resume-ink);font-size:1.3rem;font-variant:small-caps;font-weight:600;letter-spacing:.05em;margin:0 0 .6rem;padding-bottom:.2rem}.resume-summary,.skills-list{margin:0;padding-left:.75rem}.skills-row{margin-bottom:.15rem}.skills-row dt{display:inline;font-weight:700;margin-right:.3rem}.skills-row dd{display:inline;margin:0}.resume-entry{margin-bottom:1rem;padding-left:.75rem}.resume-entry:last-child{margin-bottom:0}.entry-row{align-items:baseline;display:flex;gap:1rem;justify-content:space-between}.entry-title{font-size:1.08rem;font-weight:700}.entry-sep,.entry-stack{font-weight:400}.entry-sep{color:var(--resume-blue-soft);margin:0 .45rem}.entry-date{font-feature-settings:"tnum";flex-shrink:0;font-size:1rem;font-variant-numeric:tabular-nums}.entry-date,.entry-sub{color:var(--resume-muted)}.entry-sub{font-size:.95rem}.entry-sub em:last-child:not(:first-child){flex-shrink:0}.entry-blurb{font-size:.95rem;margin:.1rem 0 0}.resume-list{list-style:none;margin:.25rem 0 0;padding-left:1.6rem}.resume-list li{font-size:.97rem;margin-bottom:.2rem;position:relative}.resume-list li:before{background:var(--resume-blue-soft);border-radius:50%;content:"";height:5px;left:-.95rem;position:absolute;top:.6em;width:5px}@media (max-width:768px){.resume-page-container{height:auto;min-height:100vh;min-height:100dvh;overflow:visible;position:relative;width:100%}.resume-header{gap:.75rem;padding:.75rem 1rem}.resume-btn{-webkit-tap-highlight-color:transparent;font-size:.8rem;padding:.5rem 1.1rem;-webkit-user-select:none;user-select:none;white-space:nowrap}.resume-document{font-size:.92rem;margin:1rem auto 2.5rem;max-width:100%;overflow-wrap:break-word;padding:1.75rem 1.25rem 1.5rem;width:calc(100% - 1.5rem)}.resume-name{font-size:1.9rem}.resume-contact-info{font-size:.85rem;white-space:normal}.contact-group{align-items:center;flex-direction:column;row-gap:.2rem}.contact-group>*+:before{content:none}.resume-section-title{font-size:1.15rem}.resume-entry,.resume-summary,.skills-list{padding-left:0}.entry-row{flex-direction:column;gap:0}.entry-title{font-size:1rem}.entry-blurb,.entry-date,.entry-sub,.resume-list li{font-size:.9rem}.resume-list{padding-left:1.1rem}}
/*# sourceMappingURL=main.c4fba891.css.map*/