.portfolio-page{width:100vw;height:100vh;position:fixed;top:0;left:0;background:#050510;overflow:hidden;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.site-main{position:fixed;inset:0}.portfolio-page canvas{touch-action:none}.scene-fallback{position:fixed;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;background:#050510;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.scene-fallback-name{font-size:1.8rem;font-weight:700;letter-spacing:-.02em;color:#ffffffeb;margin:0}.scene-fallback-sub{font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:#00d4ffb3;margin:8px 0 20px}.scene-fallback-links{display:flex;gap:20px;font-size:.9rem}.scene-fallback-links a{color:#00d4ff;text-decoration:none}.scene-fallback-links a:hover{text-decoration:underline}.gyro-button{position:fixed;bottom:max(30px,env(safe-area-inset-bottom,30px));left:50%;transform:translate(-50%);z-index:100;min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:12px 24px;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.85rem;font-weight:600;color:#fff;background:rgba(0,212,255,.2);border:1px solid rgba(0,212,255,.4);border-radius:8px;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);letter-spacing:.08em;transition:background .3s ease}.gyro-button:hover{background:rgba(0,212,255,.35)}.name-overlay{position:fixed;bottom:48px;left:50%;transform:translate(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;pointer-events:none;opacity:0;animation:nameReveal 1.2s ease forwards;animation-delay:.3s}.name-main{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:2.4rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#ffffffeb;text-shadow:0 0 28px rgba(0,212,255,.45);margin:0;line-height:1;white-space:nowrap}.name-sub{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.72rem;font-weight:400;letter-spacing:.22em;text-transform:uppercase;color:#00d4ff99;margin-top:8px;white-space:nowrap}@keyframes nameReveal{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.nav-buttons{position:fixed;top:20px;right:20px;z-index:100;display:flex;gap:2px;background:rgba(5,5,16,.45);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.06);border-radius:8px;padding:4px}.nav-buttons button{position:relative;background:transparent;border:none;color:#fff9;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.7rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;padding:8px 16px;border-radius:5px;cursor:pointer;transition:color .3s ease}.nav-buttons button:after{content:"";position:absolute;bottom:2px;left:50%;width:0;height:1.5px;background:rgba(255,255,255,.6);transform:translate(-50%);transition:width .3s ease;border-radius:1px}.nav-buttons button:hover{color:#ffffffd9}.nav-buttons button:hover:after{width:14px}.nav-buttons button.active{color:#fffffff2}.nav-buttons button.active:after{width:18px;background:rgba(255,255,255,.85)}.controls-overlay{position:fixed;bottom:20px;right:20px;z-index:10;background:rgba(5,5,16,.5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.06);border-radius:8px;padding:10px 14px;opacity:.9;transition:opacity .6s ease,transform .6s ease;pointer-events:auto}.controls-overlay.is-faded{opacity:.42;transform:translateY(2px)}.controls-overlay.is-faded:hover{opacity:1;transform:none}.controls-overlay:hover{opacity:1}.controls-title{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:9px;font-weight:700;letter-spacing:.3em;text-transform:uppercase;color:#00d4ffb3;margin-bottom:6px;padding-bottom:4px;border-bottom:1px solid rgba(0,212,255,.12)}.controls-row{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:10px;color:#ffffff9e;line-height:1.8;white-space:nowrap}.controls-key{display:inline-block;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:3px;padding:1px 5px;margin-right:3px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:9px;color:#ffffffb3;min-width:18px;text-align:center}.content-overlay{position:fixed;inset:0;z-index:200;background:rgba(5,5,16,.82);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);display:flex;justify-content:center;align-items:flex-start;overflow-y:auto;-webkit-overflow-scrolling:touch;touch-action:auto;overscroll-behavior:contain;animation:overlayFadeIn .3s ease}@keyframes overlayFadeIn{0%{opacity:0}to{opacity:1}}.overlay-close{position:fixed;top:20px;right:20px;z-index:210;background:rgba(5,5,16,.6);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:10px;cursor:pointer;color:#fff9;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}.overlay-close:hover{color:#ffffffe6;border-color:#ffffff40;background:rgba(255,255,255,.06)}.overlay-inner{width:100%;max-width:800px;padding:60px 30px 40px;animation:overlaySlideIn .4s ease}@keyframes overlaySlideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.overlay-heading{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:1.5rem;font-weight:600;letter-spacing:-.02em;color:#fffffff2;margin:0 0 6px}.overlay-subheading{font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.65rem;font-weight:400;letter-spacing:.06em;color:#ffffff8c;margin:0 0 20px;padding-bottom:20px;border-bottom:1px solid rgba(255,255,255,.06)}.overlay-restricted{text-align:center;padding:80px 20px 40px;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;animation:entryReveal .5s ease both}.overlay-restricted-label{font-size:.88rem;font-weight:600;color:#fffc;margin:0 0 8px;letter-spacing:-.01em}.overlay-restricted-desc{font-size:.76rem;color:#ffffff59;margin:0 0 32px;line-height:1.5}.overlay-pw-form{display:flex;gap:8px;max-width:280px;margin:0 auto}.overlay-pw-input{flex:1;padding:10px 14px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.78rem;color:#ffffffd9;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:6px;outline:none;transition:border-color .25s ease,background .25s ease}.overlay-pw-input::placeholder{color:#fff3;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.overlay-pw-input:focus{border-color:#ffffff47}.overlay-pw-input.overlay-pw-error{border-color:#ff505066}.overlay-pw-submit{padding:10px 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.72rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:#fffc;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:6px;cursor:pointer;transition:all .25s ease;white-space:nowrap}.overlay-pw-submit:hover{background:rgba(255,255,255,.1);border-color:#ffffff2e;color:#fff}.overlay-pw-msg{font-size:.7rem;color:#ff505099;margin:14px 0 0;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.overlay-text p{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.88rem;line-height:1.75;color:#ffffff8c;margin-bottom:28px}.overlay-block{margin-bottom:36px}.overlay-block h3{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.7rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:#ffffff8c;margin:0 0 14px;padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.04)}@keyframes entryReveal{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.overlay-entry{margin-bottom:10px;padding:16px 18px;background:rgba(255,255,255,.015);border:1px solid rgba(255,255,255,.04);border-radius:8px;transition:border-color .25s ease,background .25s ease;animation:entryReveal .4s ease both}.overlay-entry:nth-child(1){animation-delay:.05s}.overlay-entry:nth-child(2){animation-delay:.1s}.overlay-entry:nth-child(3){animation-delay:.15s}.overlay-entry:nth-child(4){animation-delay:.2s}.overlay-entry:nth-child(5){animation-delay:.25s}.overlay-entry:nth-child(6){animation-delay:.3s}.overlay-entry:hover{border-color:#ffffff17;background:rgba(255,255,255,.025)}.overlay-entry:last-child{margin-bottom:0}.overlay-entry-header{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}.overlay-entry-title{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.88rem;font-weight:600;color:#ffffffe0}.overlay-entry-date{font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.65rem;font-weight:400;color:#ffffff8c;white-space:nowrap}.overlay-entry-meta{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.78rem;font-weight:400;color:#ffffff8c;margin:3px 0 6px}.overlay-entry-desc{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.78rem;line-height:1.65;color:#ffffff80;margin:6px 0 0}ul.overlay-entry-desc{padding-left:0;list-style-type:none}ul.overlay-entry-desc li{margin-bottom:5px;position:relative;padding-left:0;padding-top:5px;border-top:1px solid rgba(255,255,255,.03)}ul.overlay-entry-desc li:first-child{border-top:none;padding-top:0}.overlay-skills-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.overlay-skill-category{padding:14px 16px;background:rgba(255,255,255,.015);border:1px solid rgba(255,255,255,.04);border-radius:8px;animation:entryReveal .4s ease both}.overlay-skill-category:nth-child(1){animation-delay:.05s}.overlay-skill-category:nth-child(2){animation-delay:.1s}.overlay-skill-category:nth-child(3){animation-delay:.15s}.overlay-skill-category h4{font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.62rem;font-weight:400;color:#ffffff8c;margin:0 0 8px;letter-spacing:.04em;text-transform:uppercase}.overlay-skill-category p{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.78rem;line-height:1.55;color:#ffffff8c;margin:0}.overlay-projects-grid{display:grid;grid-template-columns:1fr;gap:16px;max-width:600px}.overlay-project-card{padding:22px 22px 20px;background:linear-gradient(180deg,rgba(255,255,255,.045) 0%,rgba(255,255,255,.012) 100%);border:1px solid rgba(255,255,255,.07);border-radius:14px;box-shadow:inset 0 1px #ffffff0a;transition:border-color .2s ease,background .2s ease,box-shadow .25s ease,transform .25s cubic-bezier(.2,.8,.2,1);animation:entryReveal .4s ease both}.overlay-project-card:nth-child(1){animation-delay:.05s}.overlay-project-card:nth-child(2){animation-delay:.1s}.overlay-project-card:nth-child(3){animation-delay:.15s}.overlay-project-card:nth-child(4){animation-delay:.2s}.overlay-project-card:nth-child(5){animation-delay:.25s}.overlay-project-card:hover{border-color:#ffffff29;background:linear-gradient(180deg,rgba(255,255,255,.06) 0%,rgba(255,255,255,.018) 100%);transform:translateY(-3px);box-shadow:0 12px 32px -14px #000000a6,inset 0 1px #ffffff14}.overlay-project-card .overlay-project-img{display:block;position:relative;width:100%;aspect-ratio:16 / 9;height:auto;object-fit:cover;border-radius:8px;margin:-4px 0 16px;opacity:.92;box-shadow:inset 0 0 0 1px #ffffff0a,inset 0 -40px 60px -30px #050510e6;transition:opacity .35s ease,transform .5s cubic-bezier(.2,.8,.2,1),filter .35s ease;background:#0a0a14;filter:saturate(1.05) contrast(1.02);will-change:transform}.overlay-project-card:hover .overlay-project-img{opacity:1;transform:scale(1.015);filter:saturate(1.15) contrast(1.05)}.overlay-project-img--contain{object-fit:contain!important;background:#07070d}.overlay-project-viewer{position:relative;width:100%;aspect-ratio:16 / 9;border-radius:8px;margin:-4px 0 16px;overflow:hidden;background:radial-gradient(ellipse at 50% 30%,rgba(70,90,140,.18) 0%,transparent 60%),linear-gradient(180deg,#0a0a14 0%,#07070d 100%);box-shadow:inset 0 0 0 1px #ffffff0a,inset 0 -40px 60px -30px #050510e6;cursor:grab}.overlay-project-viewer:before{content:"ISS payload model";position:absolute;inset:0;z-index:0;display:flex;align-items:center;justify-content:center;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:#ffffff52;pointer-events:none}.overlay-project-viewer:active{cursor:grabbing}.overlay-project-viewer canvas{position:relative;z-index:1;display:block;width:100%!important;height:100%!important}.overlay-project-viewer-hint{position:absolute;bottom:8px;right:10px;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;color:#fff9;pointer-events:none;user-select:none;z-index:3}.overlay-project-viewer-skeleton{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:radial-gradient(ellipse at 50% 35%,rgba(95,130,200,.13) 0%,transparent 62%),linear-gradient(180deg,rgba(255,255,255,.018),transparent 70%);background-size:100% 100%;transition:opacity .5s ease;pointer-events:none;z-index:1}.overlay-project-viewer-skeleton.is-loaded{opacity:0}.overlay-project-viewer-kicker{font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:#ffffff47}.overlay-project-viewer-loading{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.78rem;letter-spacing:.04em;text-transform:uppercase;color:#ffffff75}@media (prefers-reduced-motion: reduce){.overlay-project-viewer-skeleton{animation:none}}.overlay-project-card h4{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.96rem;font-weight:600;letter-spacing:-.01em;color:#fffffff5;margin:0 0 10px}.overlay-project-card p{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.78rem;line-height:1.65;color:#ffffff80;margin:0 0 10px}.overlay-project-card .overlay-project-lead{font-size:.84rem;line-height:1.55;color:#ffffffbf;margin:0 0 8px}.overlay-project-card .overlay-project-bullets{list-style:none;padding:0;margin:0 0 14px}.overlay-project-card .overlay-project-bullets li{position:relative;padding-left:17px;margin-bottom:7px;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.77rem;line-height:1.62;color:#ffffff8f}.overlay-project-card .overlay-project-bullets li:before{content:"";position:absolute;left:1px;top:8px;width:4px;height:4px;border-radius:50%;background:rgba(255,255,255,.28)}.overlay-tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:16px;padding-top:15px;border-top:1px solid rgba(255,255,255,.06)}.overlay-tags span{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);color:#ffffffad;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.68rem;font-weight:400;padding:5px 11px;border-radius:7px;letter-spacing:.02em}.overlay-contact-grid{display:grid;grid-template-columns:1fr;gap:12px;max-width:440px}.overlay-contact-item{display:flex;align-items:center;gap:16px;padding:16px 18px;background:rgba(255,255,255,.015);border:1px solid rgba(255,255,255,.08);border-radius:10px;text-decoration:none;transition:border-color .25s ease,background .25s ease,transform .2s ease;color:#ffffff8c;animation:entryReveal .4s ease both}.overlay-contact-item:nth-child(1){animation-delay:.05s}.overlay-contact-item:nth-child(2){animation-delay:.1s}.overlay-contact-item:nth-child(3){animation-delay:.15s}.overlay-contact-item:nth-child(4){animation-delay:.2s}.overlay-contact-item:hover{border-color:#00d4ff59;background:rgba(0,212,255,.04);transform:translate(2px)}.overlay-contact-item:hover svg{color:#00d4ffd9}.overlay-contact-item svg{flex-shrink:0;color:#ffffff4d}.overlay-contact-item h4{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.82rem;font-weight:600;color:#fffc;margin:0 0 2px}.overlay-contact-item p{font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.7rem;color:#fff9;margin:0}.overlay-download-btn{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;background:transparent;border:1px solid rgba(255,255,255,.08);border-radius:5px;color:#ffffff8c;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.68rem;font-weight:400;letter-spacing:.02em;text-decoration:none;transition:all .25s ease;margin-bottom:28px}.overlay-download-btn:hover{background:rgba(255,255,255,.03);border-color:#ffffff26;color:#ffffffb3}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.name-overlay,.overlay-entry,.overlay-skill-category,.overlay-project-card,.overlay-contact-item{opacity:1!important;transform:none!important}}.nav-buttons button:focus-visible,.overlay-close:focus-visible,.overlay-download-btn:focus-visible,.overlay-contact-item:focus-visible,.overlay-pw-input:focus-visible,.overlay-pw-submit:focus-visible,.gyro-button:focus-visible{outline:2px solid #00d4ff;outline-offset:2px}.overlay-pw-submit:focus-visible{outline-color:#ffffffe6}@media (max-width: 768px){.nav-buttons{top:max(10px,env(safe-area-inset-top,10px));left:50%;right:auto;transform:translate(-50%);gap:2px;padding:4px}.nav-buttons button{font-size:.62rem;padding:11px 12px;letter-spacing:.1em;min-height:44px}.overlay-inner{padding:60px 16px 30px;padding-bottom:max(30px,env(safe-area-inset-bottom,30px))}.overlay-heading{font-size:1.45rem;letter-spacing:-.02em}.overlay-skills-grid,.overlay-projects-grid{grid-template-columns:1fr}.overlay-entry-header{flex-direction:column;gap:2px}.name-overlay{bottom:130px}.name-main{font-size:clamp(1.35rem,7vw,1.7rem);letter-spacing:.14em}.name-sub{font-size:clamp(.48rem,2.2vw,.6rem);letter-spacing:.12em}.overlay-close{top:max(20px,env(safe-area-inset-top,20px));right:max(20px,env(safe-area-inset-right,20px))}.controls-overlay{bottom:12px;right:12px;left:12px;text-align:center;padding-bottom:max(10px,env(safe-area-inset-bottom,10px))}}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;padding:0;background-color:#050510;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;color:#fff}.content-overlay,.content-overlay *{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}#root{overflow:auto}body{position:fixed;overflow:hidden;overscroll-behavior-y:none;font-family:helvetica neue,helvetica,arial,sans-serif;-webkit-font-smoothing:antialiased}img{max-width:100%;height:auto;margin-top:20px}
