body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--accent:#61dafb}#projects{padding-top:2.5rem;scroll-margin-top:80px}.page-projects{--frame:min(1100px,94vw);color:#fff;position:relative;z-index:1}@media (min-width:1280px){.page-projects{--frame:min(1280px,94vw)}}@media (min-width:1536px){.page-projects{--frame:min(1400px,94vw)}}.page-projects .projects-frame{display:block;min-height:60vh}.page-projects .projects-inner{box-sizing:border-box;margin-inline:auto;max-width:var(--frame)!important;width:var(--frame)}.page-projects .projects-header{margin:0 auto 1rem;text-align:center;width:100%}.page-projects .section-title{font-size:clamp(2rem,3.6vw,2.8rem);font-weight:700;letter-spacing:.2px;margin-bottom:5rem;margin-top:1rem}.page-projects .filter-bar{grid-gap:12px;align-items:center;display:grid;gap:12px;grid-template-areas:"tool cat" "clear clear";grid-template-columns:repeat(2,minmax(260px,1fr));justify-items:stretch;margin:0 auto 1.5rem;width:90%}.page-projects .filter-item.tool{grid-area:tool}.page-projects .filter-item.cat{grid-area:cat}.page-projects .react-select-container{min-width:0;width:100%;z-index:10}.page-projects .clear-filters{background:none;border:1px solid #61dafb;border:1px solid var(--accent);border-radius:8px;color:#61dafb;color:var(--accent);cursor:pointer;grid-area:clear;justify-self:center;padding:.45rem .9rem;transition:all .2s ease}.page-projects .clear-filters:hover{background:#61dafb;background:var(--accent);color:#000}@media (max-width:680px){.page-projects .filter-bar{grid-template-areas:"tool" "cat" "clear";grid-template-columns:1fr}}.page-projects .rs__control{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);background:#00000080!important;border:1px solid #ffffff1f!important;box-shadow:none!important;color:#fff!important;min-height:40px}.page-projects .rs__control--is-focused{border-color:#61dafb!important;border-color:var(--accent)!important;box-shadow:0 0 0 1px #61dafb!important;box-shadow:0 0 0 1px var(--accent)!important}.page-projects .rs__menu{background:#141414!important;border:1px solid #ffffff14;color:#fff!important}.page-projects .rs__option--is-focused{background:#ffffff14!important}.page-projects .rs__multi-value{background:#ffffff1f!important}.page-projects .rs__multi-value__label{color:#fff!important}.page-projects .projects-grid{grid-gap:clamp(18px,2.2vw,28px);align-items:start;display:grid;gap:clamp(18px,2.2vw,28px);grid-template-columns:repeat(2,minmax(0,1fr));justify-items:center;width:100%}@media (max-width:900px){.page-projects .projects-grid{gap:20px;grid-template-columns:1fr}}.page-projects .no-results{opacity:.85;padding:2rem 0}.page-projects .project-card{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);background:#00000080;border:1px solid #ffffff0f;border-radius:14px;box-shadow:0 10px 30px #00000047;color:#fff;flex-direction:column;margin-inline:flex;max-width:560px;padding:1.1rem;text-align:center;transition:transform .18s ease,box-shadow .18s ease,filter .18s ease;width:80%}.page-projects .project-card:hover{box-shadow:0 14px 36px #00000059;filter:brightness(1.02);transform:translateY(-2px)}.page-projects .project-thumb{aspect-ratio:16/9;border-radius:12px;margin-bottom:.65rem;overflow:hidden;width:100%}.page-projects .project-thumb img{display:block;height:100%;object-fit:cover;object-position:center;width:100%}.page-projects .project-card h1{font-size:1.15rem;font-weight:600;margin:0 0 .45rem}.page-projects .project-card p{color:#e5e7eb;margin:0 0 .9rem}.page-projects .project-card__tags{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;margin-bottom:.9rem}.page-projects .tag{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);background:#ffffff14;border:1px solid #ffffff2e;border-radius:9999px;color:#eaf6ff;font-size:.82rem;font-weight:500;letter-spacing:.1px;line-height:1;padding:.38rem .72rem;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .06s ease}.page-projects .tag:focus-visible,.page-projects .tag:hover{background:#61dafb33;border-color:#61dafb73;color:#fff;outline:none;transform:translateY(-1px)}.page-projects .tag:nth-child(3n+1){background:#ffffff1a}.page-projects .tag:nth-child(3n+2){background:#ffffff14}.page-projects .tag:nth-child(3n+3){background:#ffffff1f}.page-projects .project-card__link{align-items:center;background:linear-gradient(180deg,#10a0d0,#0e8cb6);border:1px solid #ffffff24;border-radius:12px;box-shadow:0 6px 18px #10a0d047,inset 0 0 0 1px #d5cbcb14;color:#fff;display:inline-flex;font-weight:600;gap:.45rem;letter-spacing:.15px;padding:.6rem 1.05rem;text-decoration:none;transition:transform .06s ease,filter .18s ease,box-shadow .18s ease}.project-modal .project-card__link:after{content:"↗";font-size:.95em;line-height:1;opacity:.9}.page-projects .project-card__link:active{transform:translateY(1px)}.project-modal .project-card__link:hover{box-shadow:0 10px 26px #10a0d057,inset 0 0 0 1px #dbcfcf1f;filter:brightness(1.06)}.page-projects .project-card__link:focus-visible{outline:2px solid #61dafb;outline:2px solid var(--accent);outline-offset:3px}.project-modal .project-card__link:focus-visible{outline:2px solid #61dafb;outline:2px solid var(--accent);outline-offset:3px}.page-projects .load-controls{align-items:center;display:flex;gap:12px;justify-content:center;margin-top:1.25rem}.page-projects .load-count{font-size:.95rem;margin-top:3rem;opacity:.85}.page-projects .load-btn{background:#10a0d0;border:1px solid #ffffff1f;border-radius:10px;color:#fff;cursor:pointer;margin-top:3rem;padding:.6rem 1.1rem;transition:filter .2s,transform .06s}.page-projects .load-btn:hover{filter:brightness(1.08)}.page-projects .load-btn:active{transform:translateY(1px)}.page-projects .load-btn.ghost{background:#0000;border-color:#61dafb;border-color:var(--accent);color:#61dafb;color:var(--accent)}.page-projects .load-btn.ghost:hover{background:#61dafb;background:var(--accent);color:#000}.project-modal-overlay{background:#000000d9;inset:0;position:fixed;z-index:10000}.project-modal{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#0009;border:1px solid #ffffff1a;border-radius:16px;box-shadow:0 10px 30px #00000059;color:#fff;left:50%;max-height:min(90vh,1000px);overflow:auto;padding:clamp(1rem,2.4vw,1.6rem);position:fixed;text-align:center;top:50%;transform:translate(-50%,-50%);width:min(900px,96vw);z-index:10001}.project-modal .close-btn{background:#0000;border:none;color:#fff;cursor:pointer;font-size:1.8rem;line-height:1;position:absolute;right:.8rem;top:.6rem}.project-modal .project-desc{color:#ccc;margin:.5rem auto 1rem;max-width:60ch;text-align:center}.embla{margin-top:.5rem;position:relative}.embla__viewport{border-radius:12px;overflow:hidden;width:100%}.embla__container{display:flex;touch-action:pan-y pinch-zoom}.embla__slide{min-width:100%;padding:.25rem;position:relative}.embla__slide__img{aspect-ratio:16/9;border-radius:12px;box-shadow:0 8px 24px #00000059;display:block;object-fit:cover;width:100%}.embla__button{background:#0000008c;border:1px solid #fff3;border-radius:999px;color:#fff;cursor:pointer;display:grid;height:40px;place-items:center;position:absolute;top:50%;transform:translateY(-50%);width:40px;z-index:2}.embla__button:hover{background:#000000bf}.embla__button--prev{left:6px}.embla__button--next{right:6px}.embla__dots{display:flex;gap:8px;justify-content:center;margin-top:10px}.embla__dot{background:#ffffff59;border:none;border-radius:999px;cursor:pointer;height:10px;width:10px}.embla__dot.is-selected{background:#10a0d0}.project-card-wrapper{display:flex;justify-content:center}.project-thumbnail{aspect-ratio:16/9;border-radius:12px;display:block;object-fit:cover;width:100%}.project-card .project-thumbnail{margin-bottom:.55rem}.tags{display:flex;flex-wrap:wrap;gap:.45rem .5rem;justify-content:center;margin-bottom:.9rem}.tag-chip{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);background:#ffffff14;border:1px solid #ffffff2e;border-radius:9999px;color:#eaf6ff;font-size:.82rem;font-weight:500;letter-spacing:.1px;line-height:1;padding:.38rem .72rem;transition:background .15s,border-color .15s,color .15s,transform .06s}.tag-chip:focus-visible,.tag-chip:hover{background:#61dafb33;border-color:#61dafb73;color:#071218;transform:translateY(-1px)}.project-card{cursor:pointer;will-change:transform}.project-modal .github-link{align-items:center;background:linear-gradient(180deg,#10a0d0,#0e8cb6);border:1px solid #ffffff24;border-radius:12px;box-shadow:0 6px 18px #10a0d047,inset 0 0 0 1px #ffffff14;color:#fff;display:inline-flex;font-weight:600;gap:.45rem;justify-content:center;letter-spacing:.15px;margin-top:14px;padding:.6rem 1.05rem;text-decoration:none;transition:transform .06s ease,filter .18s ease,box-shadow .18s ease}.project-modal .github-link:after{content:"↗";font-size:.95em;line-height:1;opacity:.9}.project-modal .github-link:hover{box-shadow:0 10px 26px #10a0d057,inset 0 0 0 1px #ffffff1f;filter:brightness(1.06)}.project-modal .github-link:active{transform:translateY(1px)}.project-modal .github-link:focus-visible{outline:2px solid #61dafb;outline:2px solid var(--accent);outline-offset:3px}.project-modal .project-card__tags{display:flex;flex-wrap:wrap;gap:.45rem;justify-content:center;margin-bottom:.5rem}.project-modal .tag{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);background:#ffffff14;border:1px solid #ffffff2e;border-radius:999px;color:#eaf6ff;font-size:.8rem;font-weight:500;letter-spacing:.1px;padding:.35rem .65rem;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .06s ease}.project-modal .tag:focus-visible,.project-modal .tag:hover{background:#61dafb33;border-color:#61dafb73;color:#fff;outline:none;transform:translateY(-1px)}.resume-container{--frame:min(1100px,94vw);align-items:flex-start;background:#0000;color:#fff;display:flex;justify-content:center;min-height:100vh;padding:clamp(1.25rem,3vw,3rem) clamp(1rem,3vw,2rem);position:relative;text-align:center;z-index:1}@media (min-width:1280px){.resume-container{--frame:min(1280px,94vw)}}@media (min-width:1536px){.resume-container{--frame:min(1400px,94vw)}}.page-resume .resume-inner,.resume-container>.max-w-4xl{box-sizing:border-box;margin:0;max-width:var(--frame)!important;width:var(--frame)}.resume-container .section-title{font-size:clamp(2rem,3.6vw,2.8rem);font-weight:700;letter-spacing:.2px;margin-bottom:5rem;margin-top:1rem}.pdf-preview{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);background:#00000080;border:1px solid #ffffff14;border-radius:14px;box-shadow:0 10px 30px #00000047;margin:0 auto;padding:clamp(.75rem,1.2vw,1.25rem);width:90%}.resume-iframe{background:#1e1e1e;border:0;border-radius:12px;display:block;height:clamp(540px,78vh,1100px);width:100%}.request-button{background:#62a5c9;border:1px solid #ffffff1f;border-radius:10px;color:#fff;cursor:pointer;margin-top:clamp(.75rem,1.8vw,1rem);padding:.65rem 1.2rem;transition:filter .15s ease,transform .06s ease}.request-button:hover{filter:brightness(1.08)}.request-button:active{transform:translateY(1px)}.request-button:focus-visible{outline:2px solid #62a5c9;outline-offset:3px}.resume-modal-overlay{background:#000000d9;inset:0;position:fixed;z-index:10000}.resume-modal{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#0009;border:1px solid #ffffff1a;border-radius:16px;box-shadow:0 10px 30px #00000059;left:50%;max-height:min(90vh,1000px);overflow:auto;padding:clamp(1rem,2.4vw,1.6rem);position:fixed;top:50%;transform:translate(-50%,-50%);width:min(900px,96vw);z-index:10001}.close-button{background:#0000;border:none;color:#fff;cursor:pointer;font-size:1.8rem;line-height:1;position:absolute;right:.8rem;top:.6rem}.close-button:focus-visible{border-radius:8px;outline:2px solid #62a5c9;outline-offset:3px}body.modal-open{overflow:hidden}.resume-form-container{text-align:left}.resume-form-title{color:#d1d5db;font-size:1.75rem;font-weight:600;margin:1 0 .25rem;text-align:center}.resume-form-sub{color:#d1d5db;margin:0 0 .75rem;text-align:center}.resume-form{max-width:none;padding:0;width:100%}.field{display:flex;flex-direction:column}.label{color:#cbd5e1;font-size:.9rem;margin:0 0 .25rem}.resume-form input,.resume-form textarea{background:#00000059;border:1px solid #ffffff24;border-radius:10px;color:#fff;display:block;margin:0;outline:none;padding:.7rem .85rem;width:100%}.resume-form textarea{min-height:120px;resize:vertical}.resume-form input::placeholder,.resume-form textarea::placeholder{color:#cbd5e1}.resume-form input:focus,.resume-form textarea:focus{border-color:#62a5c9;box-shadow:0 0 0 2px #61dafb40}.field-error{color:#ffb3b3;font-size:.9rem;margin-top:.35rem}.field-error.center{text-align:center}.char-counter{font-size:.85rem;margin-top:.35rem;opacity:.9}.char-counter.need{color:#ffd48a}.char-counter.ok{color:#9ae6b4}.recaptcha-box{display:flex;justify-content:center;min-height:78px;padding-top:.6rem;z-index:1}@media (max-width:360px){.recaptcha-box{transform:scale(.9);transform-origin:center}}.resume-actions{display:flex;gap:.75rem;justify-content:flex-end;margin-top:.9rem}.resume-cancel{background:#0000;border:1px solid #ffffff40;border-radius:10px;color:#fff;cursor:pointer;padding:.55rem .9rem}.resume-submit{background:#10a0d0;border:1px solid #ffffff1f;border-radius:10px;color:#fff;cursor:pointer;padding:.65rem 1.1rem}.resume-cancel:hover{background:#ffffff0f}.resume-submit:hover{filter:brightness(1.08)}.resume-submit:disabled{cursor:not-allowed;opacity:.6}@media (prefers-reduced-motion:reduce){.request-button,.resume-cancel,.resume-submit{transition:none}}.resume-modal{overflow-x:hidden}.resume-fields-grid{grid-gap:.75rem;display:grid;gap:.75rem;grid-template-columns:1fr}@media (min-width:720px){.resume-fields-grid{grid-template-columns:1fr 1fr}.resume-fields-grid .full{grid-column:1/-1}}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:100vh}.App-link{color:#61dafb}.home-vanta-bg{min-height:100vh;overflow:hidden;position:relative;width:100%}.home-vanta-bg canvas{inset:0;pointer-events:none!important;position:absolute!important;z-index:0}.global-vanta-bg,.vanta-fixed{inset:0;pointer-events:none;position:fixed;z-index:-1}.global-vanta-bg canvas,.vanta-fixed canvas{display:block;height:100%!important;inset:0;max-height:100vh;max-width:100vw;pointer-events:none!important;position:absolute!important;width:100%!important}.about-vanta-bg,.projects-vanta-bg{min-height:100vh;overflow:hidden;position:relative}.about-vanta-bg canvas,.projects-vanta-bg canvas{inset:0;pointer-events:none!important;position:absolute!important;z-index:0}.page-container{isolation:isolate;max-width:100vw;min-height:100vh;overflow-x:clip;position:relative;z-index:1}body,html{margin:0;overflow-x:clip;padding:0;width:100%}.global-bg canvas,.home-vanta-bg canvas,.vanta-canvas{max-width:100%;pointer-events:none!important}.page-contact .contact-container{background:#0000;color:#fff;min-height:100vh;padding:0 -1rem;position:relative;text-align:center;z-index:1}.page-contact .contact-inner{box-sizing:border-box;margin-inline:auto;width:min(1100px,92vw)}.page-contact .section-title{font-size:clamp(2rem,3.6vw,2.8rem);font-weight:700;letter-spacing:.2px;margin-bottom:1rem;margin-top:1rem}.lead{font-size:1rem}.lead,.page-contact .text-lg{margin-bottom:3rem}.page-contact .mt-10{margin-bottom:1rem;margin-top:3rem}.page-contact .contact-info-grid{grid-gap:5rem;grid-row-gap:2.5rem;display:grid;gap:5rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));justify-items:center;margin:0 auto;max-width:700px;row-gap:2.5rem}.page-contact .contact-card{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);background:#00000080;border:1px solid #ffffff14;border-radius:14px;box-shadow:0 10px 30px #00000047;padding:1.5rem 2rem;transition:transform .3s ease,box-shadow .25s ease,filter .25s ease;width:280px}.page-contact .contact-card:hover{box-shadow:0 14px 36px #00000059;filter:brightness(1.02);transform:translateY(-5px)}.page-contact .contact-card h3{color:#ececec;font-size:1.2rem;margin-bottom:.5rem}.page-contact .contact-card a{border-bottom:1px dashed #ffffff40;color:#ddd;text-decoration:none;transition:color .15s ease,background .15s ease,border-color .15s ease}.page-contact .contact-card a:focus-visible,.page-contact .contact-card a:hover{background:#62a5c9;border-bottom-color:#0000;border-radius:6px;color:#000;outline:none;padding-inline:4px}.page-contact .contact-icon{color:#62a5c9;margin-bottom:.5rem}.page-contact .calendly-card{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);background:#00000080;border:1px solid #ffffff14;border-radius:14px;box-shadow:0 10px 30px #00000047;margin-left:auto;margin-right:auto;margin-top:3rem;max-width:680px;padding:2rem;text-align:center}.page-contact .calendly-card .contact-title{color:#fff;font-size:1.25rem;font-weight:600;margin-bottom:.5rem}.page-contact .calendly-card .contact-text{color:#ccc;font-size:.95rem;margin-bottom:2rem;margin-top:1.5rem}.page-contact .calendly-iframe{background:#1e1e1e;border:0;border-radius:12px;display:block;height:clamp(500px,62vh,760px);width:100%}.footer{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background-color:#0f0f0f66;border-top:1px solid #ffffff1a;color:#aaa;margin-top:5rem;padding:2rem;text-align:center}.footnote{margin-top:3rem;text-align:center}.footer-content{margin:auto;max-width:800px}.footer-links{display:flex;font-size:.9rem;gap:1.5rem;justify-content:center;margin-top:.8rem}.footer-links a{color:#fcfcfc;text-decoration:none}.footer-links a:hover{text-decoration:underline}
/*# sourceMappingURL=main.828a2032.css.map*/