:root{--bg:#030b13;--panel:#061726;--panel2:#071b2b;--line:#21455b;--blue:#39b7f5;--cyan:#8bd8ff;--gold:#e8a13c;--orange:#f07837;--white:#eaf2f7;--muted:#7895a9;--green:#42d99b}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--white);font-family:"Space Grotesk",sans-serif;overflow-x:hidden}.stars{position:fixed;inset:0;z-index:-1;opacity:.72;background-image:radial-gradient(#bdeaff 1px,transparent 1px),radial-gradient(#4e7992 1px,transparent 1px);background-size:331px 331px,197px 197px;background-position:20px 80px,100px 18px}header{height:70px;padding:0 32px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:rgba(3,11,19,.92);backdrop-filter:blur(10px);position:sticky;top:0;z-index:5}.brand{font-size:14px;letter-spacing:.04em;text-decoration:none;color:var(--white)}.brand span{color:var(--blue);font-weight:600;margin-left:7px}nav{display:flex;gap:42px}nav a{font:10px "DM Mono";text-decoration:none;color:#8ba5b7}nav a:hover{color:var(--blue)}.page{padding-left:max(7vw,55px);padding-right:max(7vw,55px)}.hero{min-height:430px;display:grid;grid-template-columns:1fr 1fr;align-items:center;border-bottom:1px solid var(--line);position:relative;overflow:hidden}.eyebrow{font:10px "DM Mono";letter-spacing:.08em;color:var(--cyan);margin:0 0 35px}.hero h1{font-size:clamp(62px,6vw,76px);line-height:.78;letter-spacing:-.07em;margin:0}.hero h1 em,.contact em,.resume em{font-style:normal;color:var(--blue)}.hero h2{font-size:20px;font-weight:400;color:var(--blue);margin:25px 0 17px;letter-spacing:-.03em}.motto{font:10px "DM Mono";letter-spacing:.08em;color:#a9c0d0}.hero-buttons{display:flex;gap:14px;margin-top:33px}.button{display:inline-block;padding:14px 17px;border:1px solid #456b84;color:var(--white);font:10px "DM Mono";text-decoration:none;background:transparent}.button.active{border-color:var(--blue);color:var(--cyan);background:rgba(25,113,157,.1)}.button:hover{border-color:var(--orange);color:var(--orange)}.orbit-zone{height:100%;min-height:430px;position:relative}.orb{position:absolute;border:1px solid #1f5b79;border-radius:50%;transform:rotate(-7deg)}.orb-one{height:290px;width:700px;top:25px;left:-20px}.orb-two{height:190px;width:530px;top:76px;left:70px}.planet{width:90px;height:90px;border-radius:50%;background:#824516;border:1px solid var(--gold);position:absolute;top:31px;left:43%;box-shadow:0 0 35px rgba(232,161,60,.1)}.telemetry{position:absolute;width:265px;top:109px;right:2%;border-left:1px solid #34667e;padding-left:24px}.telemetry>p{color:var(--cyan);font:10px "DM Mono";margin:0 0 15px}.telemetry div{height:50px;border-top:1px solid #28485a;padding-top:13px;color:#7794a6;font:9px "DM Mono"}.telemetry b{float:right;color:var(--white);font:600 10px "Space Grotesk"}.telemetry i{display:inline-block;width:7px;height:7px;background:var(--blue);border-radius:50%;margin-right:5px}.section-title{display:flex;gap:9px;align-items:center}.section-title>span{width:17px;height:2px;background:var(--gold)}.section-title h2{font-size:18px;letter-spacing:.02em;margin:0}.section-title p{font:9px "DM Mono";color:var(--muted);margin:5px 0 0}.missions{padding-top:36px;padding-bottom:31px;background:var(--bg);position:relative}.missions:before{content:"";position:absolute;width:350px;height:350px;border:1px solid #19536e;border-radius:50%;left:-180px;top:15px}.arrow-controls{margin-left:auto;display:flex;gap:17px}.arrow-controls button{color:var(--blue);border:0;background:transparent;font-size:20px;cursor:pointer}.carousel{overflow:hidden;margin-top:27px;position:relative}.track{display:flex;gap:24px;transition:transform .7s cubic-bezier(.2,.8,.2,1)}.card{min-width:calc((100% - 48px)/3);background:var(--panel);border:1px solid #2a526a;padding:18px;min-height:207px}.card-top{display:flex;justify-content:space-between;color:var(--muted);font:9px "DM Mono"}.card-top b{font-weight:400}.complete{color:var(--green)}.active-status{color:var(--blue)}.planned{color:var(--gold)}.placeholder{width:100%;height:72px;margin:15px 0 17px;border:1px solid #376179;background:#05121e;color:#62869d;font:10px "DM Mono";cursor:pointer}.placeholder:hover{border-color:var(--cyan);color:var(--cyan)}.card h3{font-size:14px;letter-spacing:.02em;margin:0 0 9px}.file-link{padding:0;border:0;background:transparent;color:var(--muted);font:9px "DM Mono";cursor:pointer}.file-link:hover{color:var(--cyan)}.carousel-meta{text-align:center;margin-top:27px}.dots{display:flex;justify-content:center;gap:7px}.dots button{width:7px;height:7px;border:0;border-radius:50%;background:#355d73;padding:0;cursor:pointer}.dots button.current{background:var(--blue)}.carousel-meta p{font:8px "DM Mono";color:#56778b}.about,.experience,.skills{border-top:1px solid var(--line);padding-top:75px;padding-bottom:75px}.about-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:12%;margin-top:35px}.about-grid>p{font-size:19px;line-height:1.65;color:#c3d2dc;margin:0}.about dl{margin:0}.about dl div{border-top:1px solid var(--line);padding:13px 0}.about dt{font:9px "DM Mono";color:var(--blue)}.about dd{font:13px "DM Mono";color:#c5d9e7;margin:8px 0 0;line-height:1.5}.timeline{margin:33px auto 0;max-width:940px;border-left:1px solid #356079}.timeline article{display:grid;grid-template-columns:150px 1fr;gap:24px;padding:0 0 30px 28px;position:relative}.timeline article:before{content:"";width:8px;height:8px;border:1px solid var(--blue);border-radius:50%;background:var(--bg);position:absolute;left:-5px;top:3px}.timeline time{color:var(--gold);font:10px "DM Mono"}.timeline h3{margin:0;font-size:17px}.timeline p{color:#97adbc;font-size:14px;line-height:1.5;margin:7px 0 0}.skills{background:var(--panel)}.skill-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:36px}.skill-grid div{border-top:2px solid var(--blue);padding-top:14px}.skill-grid small{font:9px "DM Mono";color:var(--gold)}.skill-grid p{font-size:14px;line-height:1.65}.contact{padding-top:85px;padding-bottom:32px;min-height:420px;display:flex;flex-direction:column}.contact h2{font-size:clamp(45px,6vw,80px);line-height:.9;letter-spacing:-.07em;margin:0 0 30px}.email{font-size:18px;color:var(--cyan);text-decoration:none;border-bottom:1px solid var(--blue);padding-bottom:6px}.contact>div{margin-top:auto;padding-top:24px;border-top:1px solid var(--line);display:flex;gap:30px}.contact>div a{font:10px "DM Mono";color:#a9c9dc;text-decoration:none}footer{height:40px;padding:0 32px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;color:#5c8095;font:9px "DM Mono"}.dev-toggle,.editor{display:none!important}footer i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--blue);margin-right:4px}.mission-file{max-width:920px;width:calc(100% - 32px);background:#071826;color:var(--white);border:1px solid #4a7186;padding:20px;box-shadow:0 20px 70px #000}.mission-file::backdrop{background:rgba(0,3,8,.78)}.close-file{position:absolute;right:14px;top:9px;color:var(--cyan);background:none;border:0;font-size:25px;cursor:pointer}.file-header{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:14px;font:10px "DM Mono"}.close-text{border:0;background:none;color:var(--cyan);font:10px "DM Mono";cursor:pointer}.mission-file h2{font-size:38px;letter-spacing:-.05em;margin:23px 0}.file-layout{display:grid;grid-template-columns:1.1fr 1fr;gap:28px;border-top:1px solid var(--line);padding-top:22px}.file-image{height:245px;width:100%;border:1px solid #467087;background:#06111d;color:#779db4;font:11px "DM Mono"}.media-buttons{display:flex;gap:8px;margin-top:10px}.media-buttons button{padding:7px 10px;border:1px solid #3a6178;background:transparent;color:var(--cyan);font:9px "DM Mono";cursor:pointer}.file-notes h3{color:var(--gold);font:10px "DM Mono";margin:0 0 7px}.file-notes p{color:#b2c7d4;font-size:14px;line-height:1.5;margin:0 0 18px}.file-status{color:var(--green)!important;font:10px "DM Mono"}.resume{min-height:calc(100vh - 110px);padding-top:70px;padding-bottom:75px}.resume h1{font-size:70px;letter-spacing:-.08em;margin:15px 0}.resume-role{color:var(--blue);font:13px "DM Mono"}.resume-grid{display:grid;grid-template-columns:1fr 1.3fr;gap:70px;border-top:1px solid var(--line);margin:45px 0;padding-top:30px}.resume h2{font:11px "DM Mono";color:var(--gold);margin:0 0 18px}.resume article{border-bottom:1px solid var(--line);padding:0 0 18px;margin-bottom:18px}.resume article b{font-size:16px}.resume p{font-size:14px;line-height:1.55;color:#abc0ce}@media(max-width:760px){header{padding:0 17px}.brand{font-size:11px}nav{display:none}.page{padding-left:22px;padding-right:22px}.hero{display:block;padding-top:70px;min-height:620px}.orbit-zone{min-height:290px;margin-top:20px}.telemetry{right:0;top:45px;width:230px}.planet{left:20%;top:8px}.orb-one{width:550px}.card{min-width:100%}.skill-grid{grid-template-columns:1fr 1fr}.about-grid,.file-layout,.resume-grid{grid-template-columns:1fr;gap:30px}.timeline article{grid-template-columns:1fr;gap:7px}.timeline article p{grid-column:auto}.hero-buttons{flex-wrap:wrap}footer{padding:0 17px}.mission-file{padding:18px}.file-image{height:180px}}
.card{cursor:pointer}.card:hover{border-color:var(--cyan);background:#092238;box-shadow:0 0 0 1px rgba(139,216,255,.18),0 14px 30px rgba(0,0,0,.26)}.card:hover .placeholder{border-color:var(--cyan);color:var(--cyan)}.card:hover h3{color:var(--cyan)}.hero:after{content:"";position:absolute;width:14px;height:14px;border-radius:50%;background:var(--gold);right:8%;bottom:12%;box-shadow:0 0 0 17px rgba(232,161,60,.05),0 0 30px rgba(232,161,60,.18);animation:drift 9s ease-in-out infinite}.orbit-zone:after{content:"";position:absolute;width:9px;height:9px;background:var(--blue);border-radius:50%;left:15%;top:18%;box-shadow:95px 222px 0 -2px var(--orange),285px 78px 0 -3px var(--cyan);animation:orbit-drift 13s linear infinite}.about{position:relative;overflow:hidden}.about:after{content:"";position:absolute;width:112px;height:112px;border:1px solid rgba(57,183,245,.22);border-radius:50%;right:10%;bottom:-55px;box-shadow:0 0 0 24px rgba(57,183,245,.035),0 0 0 55px rgba(57,183,245,.02)}@keyframes drift{50%{transform:translate(-12px,-19px)}}@keyframes orbit-drift{to{transform:rotate(360deg)}}.resume-pdf{min-height:calc(100vh - 110px);padding-top:56px;padding-bottom:55px}.resume-title{display:flex;align-items:end;justify-content:space-between;margin-bottom:27px}.resume-title h1{font-size:clamp(44px,5vw,70px);letter-spacing:-.08em;margin:0}.resume-title h1 em{font-style:normal;color:var(--blue)}.resume-title p{margin:8px 0 0;color:var(--blue);font:11px "DM Mono"}.pdf-frame{height:calc(100vh - 295px);min-height:540px;border:1px solid var(--line);background:#fff}.pdf-frame object{width:100%;height:100%}@media(max-width:760px){.resume-title{align-items:start;gap:22px;flex-direction:column}.pdf-frame{height:70vh;min-height:450px}}
.about-grid{display:none}.about{min-height:150px}
.about .section-title p{display:none}
.orbit-zone:after{display:none}.orb-one::after,.orb-two::after{content:"";position:absolute;width:10px;height:10px;border-radius:50%;z-index:2}.orb-one::after{left:50%;top:-5px;background:var(--gold);box-shadow:0 0 17px rgba(232,161,60,.75);animation:ellipse-one 11s linear infinite}.orb-two::after{left:50%;top:-4px;background:var(--blue);box-shadow:0 0 15px rgba(57,183,245,.85);animation:ellipse-two 8s linear infinite}@keyframes ellipse-one{0%,100%{transform:translate(-5px,0)}25%{transform:translate(345px,140px)}50%{transform:translate(-5px,280px)}75%{transform:translate(-355px,140px)}}@keyframes ellipse-two{0%,100%{transform:translate(-5px,0)}25%{transform:translate(260px,90px)}50%{transform:translate(-5px,180px)}75%{transform:translate(-270px,90px)}}.launch{position:fixed;inset:0;z-index:20;background:#030b13;display:grid;place-items:center;transition:opacity .45s ease,visibility .45s}.launch.done{opacity:0;visibility:hidden}.launch-ui{text-align:center;font:11px "DM Mono";letter-spacing:.1em;color:var(--cyan)}.launch-ui p{color:#799aad;margin:0 0 22px}.launch-rocket{width:32px;height:74px;border:1px solid var(--cyan);border-radius:50% 50% 10px 10px;position:relative;margin:0 auto 26px;animation:rocket-launch 1.6s cubic-bezier(.25,.7,.35,1) forwards}.launch-rocket:before{content:"";position:absolute;width:14px;height:14px;border:1px solid var(--blue);border-radius:50%;left:8px;top:15px}.launch-rocket:after{content:"";position:absolute;width:10px;height:35px;background:linear-gradient(var(--orange),transparent);left:10px;top:70px;filter:blur(1px)}.launch-progress{width:190px;height:2px;background:#294357;margin:17px auto 0}.launch-progress i{display:block;width:0;height:100%;background:var(--blue);animation:loading 1.65s linear forwards}@keyframes rocket-launch{45%{transform:translateY(-8px)}100%{transform:translateY(-165px);opacity:0}}@keyframes loading{to{width:100%}}@media(prefers-reduced-motion:reduce){.orb-one::after,.orb-two::after,.launch-rocket,.launch-progress i{animation:none}.launch{display:none}}
body:before{content:"";position:fixed;z-index:-1;inset:0;pointer-events:none;opacity:.16;background-image:linear-gradient(rgba(57,183,245,.12) 1px,transparent 1px),linear-gradient(90deg,rgba(57,183,245,.12) 1px,transparent 1px);background-size:86px 86px}.stars{animation:star-drift 36s ease-in-out infinite alternate}.planet{left:290px;top:126px}.missions:after{content:"";position:absolute;z-index:0;width:420px;height:420px;border-radius:50%;right:-180px;bottom:-230px;opacity:.18;background:conic-gradient(from 40deg,transparent 0 76%,rgba(57,183,245,.34) 76% 79%,transparent 79% 100%);border:1px solid rgba(57,183,245,.28)}.missions>*{position:relative;z-index:1}.card{position:relative;overflow:hidden}.card-overlay{position:absolute;inset:0;z-index:2;border:0;background:rgba(4,18,30,0);color:transparent;cursor:pointer}.card:hover .card-overlay,.card:focus-within .card-overlay{background:rgba(8,36,55,.16);color:var(--cyan);font:10px "DM Mono";letter-spacing:.1em;backdrop-filter:blur(1px)}.mission-metric{display:flex;justify-content:space-between;align-items:center;border-top:1px solid rgba(70,112,135,.65);margin-top:13px;padding-top:9px;color:#83a5b7;font:8px "DM Mono"}.mission-metric b{color:var(--cyan);font-weight:400}.card:hover .mission-metric b{color:var(--gold)}@keyframes star-drift{to{transform:translate(12px,-8px)}}
.telemetry{width:220px;right:0}
@keyframes ellipse-one{0%,100%{transform:translate(-5px,0)}25%{transform:translate(345px,145px)}50%{transform:translate(-5px,290px)}75%{transform:translate(-355px,145px)}}@keyframes ellipse-two{0%,100%{transform:translate(-5px,0)}25%{transform:translate(260px,95px)}50%{transform:translate(-5px,190px)}75%{transform:translate(-270px,95px)}}
.contact h2{font-size:clamp(21px,3.5vw,48px);line-height:1;letter-spacing:-.05em;white-space:nowrap}.orb-one::after,.orb-two::after{display:none}.orbit-body{position:absolute;width:10px;height:10px;border-radius:50%;z-index:3;pointer-events:none}.body-1{background:var(--gold);box-shadow:0 0 18px rgba(232,161,60,.8)}.body-2{background:var(--blue);box-shadow:0 0 15px rgba(57,183,245,.85)}body.file-open:after{content:"";position:fixed;z-index:25;inset:0;background:rgba(0,4,10,.8);backdrop-filter:blur(4px)}.mission-file.open{display:block;position:fixed;z-index:26;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;max-height:90vh;overflow:auto}.mission-file.open .file-header{padding-right:38px}.mission-file.open .file-layout{min-height:280px}.meteor{position:fixed;z-index:-1;width:170px;height:2px;opacity:0;background:linear-gradient(90deg,transparent,rgba(139,216,255,.95),transparent);transform:rotate(150deg);pointer-events:none;animation:meteor var(--meteor-duration) linear forwards}@keyframes meteor{0%{opacity:0;transform:translate(0,0) rotate(150deg)}12%{opacity:.9}100%{opacity:0;transform:translate(-620px,330px) rotate(150deg)}}@media(max-width:760px){.contact h2{font-size:clamp(18px,6vw,28px)}.mission-file.open{width:calc(100% - 22px);max-height:92vh}}
.mission-file .close-file{display:none}
.timeline time{display:inline-block;border:1px solid rgba(57,183,245,.38);padding:6px 8px;background:rgba(7,28,43,.72)}.timeline article{transition:background .22s ease,transform .22s ease}.timeline article:hover{background:linear-gradient(90deg,rgba(57,183,245,.09),transparent 74%);transform:translateX(5px)}.timeline article:hover:before{background:var(--blue);box-shadow:0 0 13px rgba(57,183,245,.85)}
.telemetry{right:-78px}.timeline article{grid-template-columns:132px 1fr;gap:18px}.timeline time{font-size:8px;letter-spacing:-.03em;padding:4px 6px;white-space:nowrap}@media(max-width:760px){.telemetry{right:0}.timeline article{grid-template-columns:1fr;gap:7px}}
.experience-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.experience-tags span{border:1px solid rgba(57,183,245,.35);color:var(--cyan);font:8px "DM Mono";letter-spacing:.04em;padding:4px 6px}.launch-rocket{width:46px;height:103px;border:2px solid var(--cyan);background:linear-gradient(90deg,#0b3855,#153e5b 52%,#08263e);border-radius:50% 50% 12px 12px;box-shadow:0 0 24px rgba(57,183,245,.3);margin-bottom:31px;animation:rocket-launch 2.2s cubic-bezier(.25,.7,.35,1) forwards}.launch-rocket:before{width:18px;height:18px;left:12px;top:22px;background:#082033;border:2px solid var(--blue)}.launch-rocket:after{width:16px;height:48px;left:13px;top:100px;background:linear-gradient(var(--orange),rgba(232,161,60,.7),transparent);filter:blur(.5px)}.launch-rocket i{position:absolute;width:13px;height:31px;border:2px solid var(--cyan);border-top:0;bottom:-7px;left:-12px;transform:skewY(-30deg);box-shadow:43px 0 0 -2px var(--cyan)}@keyframes rocket-launch{0%{transform:translateY(18px);opacity:0}14%{opacity:1}52%{transform:translateY(-6px)}100%{transform:translateY(-210px);opacity:0}}.launch-progress i{animation:loading 2.2s linear forwards}@media(prefers-reduced-motion:reduce){.launch{display:grid!important}.launch-rocket,.launch-progress i{animation-duration:2.2s}}
.launch-rocket{width:32px;height:74px;border:1px solid var(--cyan);background:transparent;border-radius:50% 50% 10px 10px;box-shadow:none;margin:0 auto 26px;animation:rocket-launch 1.6s cubic-bezier(.25,.7,.35,1) forwards}.launch-rocket:before{width:14px;height:14px;left:8px;top:15px;background:transparent;border:1px solid var(--blue)}.launch-rocket:after{width:10px;height:35px;left:10px;top:70px;background:linear-gradient(var(--orange),transparent);filter:blur(1px)}.launch-rocket i{display:none}@keyframes rocket-launch{45%{transform:translateY(-8px)}100%{transform:translateY(-165px);opacity:0}}.launch-progress i{animation:loading 1.65s linear forwards}
.timeline time{align-self:start;font-size:10px;letter-spacing:0;padding:4px 6px}.hero:after{display:none}.planet{box-shadow:0 0 34px rgba(232,161,60,.22),inset -14px -12px 18px rgba(57,20,3,.28)}
.placeholder.has-image,.file-image.has-image{padding:0;overflow:hidden;background:#05121e}.placeholder.has-image img,.file-image.has-image img{display:block;width:100%;height:100%;object-fit:cover}.file-image.has-image{cursor:default}.media-buttons button.current{border-color:var(--gold);color:var(--gold);background:rgba(232,161,60,.08)}

/* Runtime visual controls, populated from content.json by the local Portfolio Editor. */
:root{--planet:#824516;--orbit-line:#1f5b79;--carousel-gap:24px;--carousel-card-width-desktop:calc((100% - 48px)/3);--carousel-card-width-mobile:100%}
.orb{border-color:var(--orbit-line)}.planet{background:var(--planet)}.track{gap:var(--carousel-gap)}.card{min-width:var(--carousel-card-width-desktop)}
body.visual-hide-stars .stars,body.visual-hide-orbits .orb,body.visual-hide-orbits .orbit-body,body.visual-hide-orbit-bodies .orbit-body,body.visual-hide-planet .planet,body.visual-hide-telemetry .telemetry,body.visual-hide-hero-actions .hero-buttons,body.visual-hide-carousel-arrows .arrow-controls,body.visual-hide-carousel-indicators .carousel-meta{display:none}
body.visual-hide-grid:before,body.visual-hide-mission-halo .missions:before,body.visual-hide-mission-halo .missions:after{display:none}
body.visual-pause-stars .stars{animation:none}
@media(max-width:760px){.card{min-width:var(--carousel-card-width-mobile)}}

/* Mission Log project types and user-controlled starfield motion. */
.about-grid:not([hidden]){display:grid}.about-grid[hidden]{display:none}
.stars{animation:none}
body.visual-stars-drift .stars{animation:star-drift 36s ease-in-out infinite alternate}
.mission-filter-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:20px}.project-filter-label{color:var(--muted);font:9px "DM Mono";letter-spacing:.08em}.project-filters{display:flex;gap:6px;flex-wrap:wrap}.project-filters button{border:1px solid rgba(57,183,245,.35);padding:4px 7px;background:rgba(7,28,43,.72);color:var(--cyan);font:8px "DM Mono";letter-spacing:.04em;cursor:pointer}.project-filters button:hover,.project-filters button.current{border-color:var(--gold);background:rgba(232,161,60,.1);color:var(--gold)}.project-types{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}.project-types span{border:1px solid rgba(57,183,245,.35);color:var(--cyan);font:8px "DM Mono";letter-spacing:.04em;padding:4px 6px}.project-filter-empty{width:100%;margin:0;padding:34px 0;color:var(--muted);font:10px "DM Mono";letter-spacing:.08em;text-align:center}@media(max-width:760px){.mission-filter-row{align-items:flex-start;flex-direction:column;gap:8px}}
