:root{color:#f6f4ee;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#070a17;font-family:Space Grotesk,Arial,sans-serif}html{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#070a17;width:100%;min-width:320px;min-height:100%;overflow:hidden}body{width:100%;min-width:320px;min-height:100dvh;margin:0;overflow:hidden}#root{width:100%;min-height:100dvh;overflow:hidden}:root{--ink:#e9efff;--muted:#96a4be;--faint:#5b6680;--surface:#0d1226b3;--line:#b5c9fa29;--blue:#a9c7ff;--cream:#f6e7b7;--rail-left:clamp(1.25rem, 3.1vw, 3.1rem)}*{box-sizing:border-box}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}.portfolio-shell{height:100dvh;min-height:100svh;color:var(--ink);isolation:isolate;background:radial-gradient(circle at 50% 47%,#21315e4d,#0000 31rem),radial-gradient(circle at 83% 7%,#4b2c7029,#0000 29rem),#070a17;overflow:hidden}.portfolio-shell:before{z-index:-1;content:"";pointer-events:none;opacity:.22;background-image:linear-gradient(#ffffff09 1px,#0000 1px),linear-gradient(90deg,#ffffff09 1px,#0000 1px);background-size:64px 64px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(circle,#000,#0000 75%);mask-image:radial-gradient(circle,#000,#0000 75%)}.topbar{z-index:20;pointer-events:none;grid-template-columns:1fr auto 1fr;align-items:start;width:100%;padding:1.6rem clamp(1.1rem,3.1vw,3.7rem);display:grid;position:fixed;top:0;left:0}.wordmark,.topbar__contact{pointer-events:auto}.wordmark{width:fit-content;color:var(--ink);letter-spacing:-.075em;cursor:pointer;background:0 0;border:0;padding:0;font-family:Space Grotesk,sans-serif;font-size:1.02rem;font-weight:700}.wordmark span{color:var(--blue);vertical-align:top;margin-left:.11rem;font-size:.48em}.topbar__descriptor{color:#b7c4dd;letter-spacing:.065em;text-align:center;text-transform:uppercase;margin:.05rem 0 0;font-size:.65rem;font-weight:600;line-height:1.32}.topbar__contact{color:var(--ink);justify-self:end;font-size:.73rem;font-weight:600;text-decoration:none;transition:opacity .2s}.portfolio-shell.has-detail .topbar__contact{opacity:0;pointer-events:none}.topbar__contact span,.panel-action span{color:var(--blue);margin-left:.3rem;font-size:1.05em}.spatial-layout{height:100dvh;min-height:100svh;position:relative}.intro-block{z-index:5;top:13.5%;left:var(--rail-left);pointer-events:none;width:min(21rem,28vw);position:absolute}.eyebrow,.detail-panel__kind{color:#9bb2e7;letter-spacing:.17em;text-transform:uppercase;margin:0;font-size:.63rem;font-weight:600;line-height:1.2}.intro-block h1{letter-spacing:-.085em;max-width:100%;margin:.75rem 0 .88rem;font-family:Space Grotesk,sans-serif;font-size:clamp(2.85rem,5.2vw,5.35rem);font-weight:500;line-height:.85}.intro-block h1 em{color:var(--cream);letter-spacing:-.1em;font-family:Georgia,Times New Roman,serif;font-weight:400}.intro-block__copy{color:#a5b1c9;max-width:19rem;margin:0;font-size:.84rem;line-height:1.58}.explore-cues{align-items:center;gap:.9rem;margin-top:1rem;display:flex}.explore-cues span{color:#74819d;letter-spacing:.035em;align-items:center;gap:.38rem;font-size:.59rem;font-weight:600;display:inline-flex}.explore-cues svg{color:#9ab9f3;stroke-width:1.7px;width:.78rem;height:.78rem}.filter-bar{z-index:9;top:46%;bottom:auto;left:var(--rail-left);pointer-events:auto;background:linear-gradient(145deg,#0f152cd1,#080c1cb8);border:1px solid #a9c7ff21;border-radius:.7rem;gap:.28rem;width:clamp(15.5rem,18vw,17.25rem);padding:.62rem;display:grid;position:absolute;box-shadow:0 1.25rem 4rem #0003,inset 0 1px #ffffff06}.filter-bar:after{content:"";background:linear-gradient(180deg, var(--blue), transparent);opacity:.55;border-radius:99px;width:.18rem;height:2.2rem;position:absolute;top:.9rem;right:-.18rem}.filter-bar__heading{border-bottom:1px solid #a9c7ff1c;justify-content:space-between;align-items:baseline;gap:.75rem;margin:0 .18rem .22rem;padding:.1rem .08rem .58rem;display:flex}.filter-bar__heading span{color:#cbd7ef;letter-spacing:.11em;text-transform:uppercase;font-size:.57rem;font-weight:700}.filter-bar__heading small{color:#65738f;letter-spacing:.025em;font-size:.52rem}.filter-bar button{--filter-accent:#a9c7ff;color:#8592ac;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:.42rem;grid-template-columns:2rem minmax(0,1fr) auto;align-items:center;gap:.62rem;width:100%;min-height:2.75rem;padding:.38rem .55rem .38rem .45rem;transition:color .25s,border-color .25s,background-color .25s,transform .25s;display:grid;position:relative;overflow:hidden}.filter-bar button:before{content:"";background:var(--filter-accent);opacity:0;border-radius:99px;width:2px;transition:opacity .25s,transform .25s;position:absolute;top:.6rem;bottom:.6rem;left:0;transform:scaleY(.35)}.filter-bar button:hover{color:var(--ink);background:#a9c7ff0b;border-color:#a9c7ff17;transform:translate(.12rem)}.filter-bar button.is-active{color:var(--ink);background:linear-gradient(90deg,#7aa1ea21,#7aa1ea09);border-color:#a9c7ff2b}.filter-bar button[data-filter=project]{--filter-accent:#8bb7ff}.filter-bar button[data-filter=experience]{--filter-accent:#7ee4bd}.filter-bar button[data-filter=education]{--filter-accent:#e3b878}.filter-bar button[data-filter=skill]{--filter-accent:#ffad72}.filter-bar button[data-filter=certification]{--filter-accent:#f2ce7d}.filter-bar button.is-active:before{opacity:1;transform:scaleY(1)}.filter-bar button:focus-visible{outline-offset:2px;outline:1px solid #a9c7ffb8}.filter-bar__icon{width:2rem;height:2rem;color:var(--filter-accent);background:#7799da0e;border:1px solid #97b8f424;border-radius:.38rem;place-items:center;transition:color .25s,border-color .25s,background-color .25s,box-shadow .25s;display:grid}.filter-bar__icon svg{stroke-width:1.65px;width:.92rem;height:.92rem}.filter-bar button.is-active .filter-bar__icon{color:var(--filter-accent);background:#f6e7b714;border-color:#f6e7b747;box-shadow:0 0 1.2rem #a9c7ff1a}.filter-bar__copy{gap:.11rem;min-width:0;display:grid}.filter-bar__copy strong{color:currentColor;letter-spacing:.012em;text-overflow:ellipsis;white-space:nowrap;font-size:.74rem;font-weight:650;overflow:hidden}.filter-bar__copy small{color:#71809c;letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;font-size:.57rem;font-weight:500;overflow:hidden}.filter-bar button.is-active .filter-bar__copy small{color:#8f9eb9}.filter-bar__count{color:#829ccd;font-variant-numeric:tabular-nums;text-align:center;border:1px solid #8dace61f;border-radius:99px;min-width:1.45rem;padding:.22rem .28rem;font-size:.5rem;line-height:1}.filter-label-short{display:none}.scene-stage{cursor:grab;touch-action:none;position:absolute;inset:0;overflow:hidden}.scene-stage:active{cursor:grabbing}.scene-stage canvas{cursor:grab;outline:none;width:100%;height:100%;position:absolute;inset:0}.scene-stage canvas.is-hovering{cursor:pointer}.scene-stage canvas:active{cursor:grabbing}.scene-stage canvas:focus-visible{outline-offset:-7px;outline:1px solid #a9c7ffb3}.celestial-readout{z-index:6;color:#8794ae;opacity:0;pointer-events:none;transform-origin:50% 100%;will-change:transform, opacity;background:#080c1cf5;border:1px solid #a9c7ff38;flex-direction:column;align-items:center;min-width:10.5rem;padding:.48rem .72rem .52rem;transition:opacity .2s,border-color .2s,transform .2s;display:flex;position:absolute;top:0;left:0;transform:translate(-50%,calc(-100% - 1.05rem))scale(.96);box-shadow:0 .65rem 2rem #0000003d}.celestial-readout:after{content:"";background:linear-gradient(#f6e7b79e,#0000);width:1px;height:1.05rem;position:absolute;top:100%;left:50%}.celestial-readout.is-active{color:#e7edfb;opacity:1;border-color:#f6e7b780;transform:translate(-50%,calc(-100% - 1.05rem))scale(1)}.celestial-readout.has-selection{opacity:0}.celestial-readout.is-below{transform-origin:50% 0;transform:translate(-50%,1.05rem)scale(.96)}.celestial-readout.is-below.is-active{transform:translate(-50%,1.05rem)scale(1)}.celestial-readout.is-below:after{background:linear-gradient(#0000,#f6e7b79e);top:auto;bottom:100%}.celestial-readout span{color:#8ea5d4;letter-spacing:.17em;text-transform:uppercase;font-size:.52rem;font-weight:600}.celestial-readout strong{letter-spacing:-.015em;margin-top:.1rem;font-family:Space Grotesk,sans-serif;font-size:.72rem;font-weight:600}.celestial-readout small{color:#63708b;letter-spacing:.03em;margin-top:.12rem;font-size:.53rem}.detail-panel{z-index:30;top:var(--selected-y,50%);left:var(--selected-x,62%);border:1px solid var(--line);opacity:0;pointer-events:none;transform-origin:0;contain:layout style;will-change:transform, opacity;background:linear-gradient(145deg,#151d39fa,#080c1cf5);border-radius:.2rem;width:min(23rem,29vw);padding:1.35rem 1.45rem 1.42rem;transition:opacity .42s,transform .42s cubic-bezier(.2,.8,.2,1);position:absolute;overflow:visible;transform:translate(2.25rem,-50%)scale(.97);box-shadow:0 1rem 4rem #0003,inset 0 1px #ffffff09}.detail-panel:before{content:"";background:var(--cream);width:4.5rem;height:1px;position:absolute;top:0;left:0}.detail-panel:after{content:"";background:linear-gradient(90deg,#0000,#f6e7b7b3);width:1.35rem;height:1px;position:absolute;top:50%;right:100%}.detail-panel__scroll{position:relative}.detail-panel.is-open{opacity:1;pointer-events:auto;transform:translate(1.35rem,-50%)scale(1)}.spatial-layout.detail-anchor-left .detail-panel{transform-origin:100%;transform:translate(calc(-100% - 2.25rem),-50%)scale(.97)}.spatial-layout.detail-anchor-left .detail-panel.is-open{transform:translate(calc(-100% - 1.35rem),-50%)scale(1)}.spatial-layout.detail-anchor-left .detail-panel:after{background:linear-gradient(90deg,#f6e7b7b3,#0000);left:100%;right:auto}.detail-panel__close{color:#8f9ab0;cursor:pointer;background:0 0;border:0;place-items:center;width:2.75rem;height:2.75rem;padding:0;font-size:.62rem;display:grid;position:absolute;top:.3rem;right:.3rem}.detail-panel__close:hover{color:#fff}.detail-panel__kind{color:#9eb7e7;margin-bottom:.65rem}.detail-panel h2{color:#f6f8ff;letter-spacing:-.07em;max-width:90%;margin:0;font-family:Space Grotesk,sans-serif;font-size:clamp(1.55rem,2.2vw,2.2rem);font-weight:500;line-height:.96}.detail-panel__summary{color:#f0e7cd;margin:1.05rem 0 .5rem;font-family:Georgia,Times New Roman,serif;font-size:1.05rem;line-height:1.2}.detail-panel__body{color:#a5b0c8;margin:0;font-size:.73rem;line-height:1.6}.detail-panel dl{border-top:1px solid var(--line);border-bottom:1px solid var(--line);gap:.4rem;margin:1.05rem 0 .95rem;padding:.85rem 0;display:grid}.detail-panel dl div{grid-template-columns:4.4rem 1fr;gap:.55rem;display:grid}.detail-panel dt{color:#70809e;letter-spacing:.055em;text-transform:uppercase;font-size:.6rem}.detail-panel dd{color:#d7e0f4;margin:0;font-size:.67rem}.tag-row{flex-wrap:wrap;gap:.3rem;display:flex}.tag-row span{color:#9bb9f3;border:1px solid #82a0dd30;border-radius:99px;padding:.25rem .43rem;font-size:.58rem}.panel-action{color:#f5e5b8;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #f6e7b785;margin-top:1.05rem;padding:0;font-size:.7rem;font-weight:600;text-decoration:none;display:inline-block}.panel-action:hover{color:#fff;border-bottom-color:#fff}.footer{z-index:10;color:#53607a;letter-spacing:.025em;pointer-events:none;gap:1.1rem;font-size:.58rem;display:flex;position:fixed;bottom:1.4rem;right:clamp(1.1rem,3.1vw,3.7rem)}.footer p{margin:0}@media (width<=900px){.intro-block{width:19rem;top:13%}.detail-panel{width:min(20.5rem,35vw)}.footer p:last-child{display:none}.filter-bar{width:15.5rem;top:46%;bottom:auto}}@media (width>=721px) and (height<=700px){.intro-block{top:13%}.intro-block h1{margin:.58rem 0 .68rem;font-size:clamp(2.7rem,4.8vw,4.35rem)}.intro-block__copy{max-width:17rem;font-size:.72rem}.explore-cues{margin-top:.7rem}.filter-bar{gap:.18rem;padding:.48rem;top:46%;bottom:auto}.filter-bar__heading{display:none}.filter-bar button{min-height:2.45rem;padding:.28rem .48rem .28rem .38rem}.filter-bar__icon{width:1.75rem;height:1.75rem}.filter-bar__copy small{display:none}}@media (width<=720px){.portfolio-shell:before{opacity:.16;background-size:48px 48px}.topbar{padding:max(1rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) 0 max(1rem, env(safe-area-inset-left));grid-template-columns:1fr auto}.topbar__descriptor{display:none}.wordmark{font-size:.94rem}.topbar__contact{font-size:.62rem}.intro-block{top:calc(max(1rem, env(safe-area-inset-top)) + 4.7rem);left:max(1rem, env(safe-area-inset-left));width:min(19rem,100vw - 2rem)}.intro-block:before{z-index:-1;top:-1.8rem;left:calc(-1 * max(1rem, env(safe-area-inset-left)));content:"";pointer-events:none;background:linear-gradient(#070a17 0%,#070a17f5 68%,#070a1700 100%);width:100vw;height:calc(100% + 4.2rem);position:absolute}.eyebrow{letter-spacing:.16em;font-size:.56rem}.intro-block h1{max-width:none;margin:.58rem 0 .66rem;font-size:clamp(2.7rem,13.8vw,3.85rem);line-height:.84}.intro-block__copy{color:#aab5ca;max-width:18rem;font-size:.74rem;line-height:1.5}.explore-cues{display:none}.scene-stage:after{z-index:3;content:"";pointer-events:none;background:linear-gradient(#070a1799,#070a1700);width:100%;height:39%;position:absolute;top:0;left:0}.filter-bar{top:auto;right:max(.7rem, env(safe-area-inset-right));bottom:max(.7rem, calc(env(safe-area-inset-bottom) + .5rem));left:max(.7rem, env(safe-area-inset-left));background:linear-gradient(145deg,#0e142af5,#080c1cf0);border-radius:.78rem;grid-template-columns:repeat(6,minmax(0,1fr));gap:.16rem;width:auto;max-width:none;padding:.38rem;display:grid;box-shadow:0 1rem 2.8rem #0000005c,inset 0 1px #ffffff09}.filter-bar:after,.filter-bar__heading{display:none}.filter-bar button{text-align:center;border-radius:.5rem;flex-direction:column;justify-content:center;gap:.3rem;min-width:0;min-height:3.8rem;padding:.4rem .08rem .3rem;display:flex}.filter-bar button:hover{transform:none}.filter-bar button:before{width:1.25rem;height:2px;inset:0 auto auto 50%;transform:translate(-50%)scaleX(.35)}.filter-bar button.is-active:before{transform:translate(-50%)scaleX(1)}.filter-bar__icon{flex:none;width:1.85rem;height:1.85rem}.filter-bar__icon svg{width:1rem;height:1rem}.filter-bar__copy{width:100%;display:block}.filter-bar__copy strong{letter-spacing:0;font-size:.6rem;display:block}.filter-label-full{display:none}.filter-label-short{display:inline}.filter-bar__copy small{display:none}.filter-bar__count{min-width:1.05rem;padding:.15rem .2rem;font-size:.43rem;position:absolute;top:.28rem;right:.28rem}.celestial-readout{min-width:8.5rem;max-width:calc(100vw - 1.5rem);padding:.4rem .56rem .44rem;bottom:auto;right:auto}.detail-panel{top:var(--selected-y,50%);right:max(.65rem, env(safe-area-inset-right));bottom:auto;left:max(.65rem, env(safe-area-inset-left));transform-origin:50% 100%;width:auto;max-height:none;padding:.95rem 1rem 1rem;overflow:visible;transform:translateY(calc(-100% - 2rem))}.detail-panel__scroll{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#a9c7ff57 transparent;max-height:calc(36dvh - 1.95rem);overflow-y:auto}.detail-panel__scroll::-webkit-scrollbar{width:3px}.detail-panel__scroll::-webkit-scrollbar-thumb{background:#a9c7ff57;border-radius:99px}.detail-panel.is-open{transform:translateY(calc(-100% - 1.2rem))}.spatial-layout.detail-anchor-left .detail-panel,.spatial-layout.detail-anchor-left .detail-panel.is-open{transform-origin:50% 100%}.spatial-layout.detail-anchor-below .detail-panel{transform-origin:50% 0;transform:translateY(2rem)}.spatial-layout.detail-anchor-below .detail-panel.is-open{transform:translateY(1.2rem)}.detail-panel:after{top:100%;right:auto;left:clamp(1rem, calc(var(--selected-x,50%) - .7rem), calc(100% - 1rem));background:linear-gradient(#f6e7b7b3,#0000);width:1px;height:1.2rem}.spatial-layout.detail-anchor-below .detail-panel:after{top:auto;bottom:100%;right:auto;left:clamp(1rem, calc(var(--selected-x,50%) - .7rem), calc(100% - 1rem));background:linear-gradient(#0000,#f6e7b7b3)}.detail-panel{transition-duration:.28s;box-shadow:0 .8rem 2rem #0000003d,inset 0 1px #ffffff09}.detail-panel__body{font-size:.75rem;line-height:1.55}.detail-panel dt{font-size:.64rem}.detail-panel dd{font-size:.72rem;line-height:1.4}.detail-panel dl{margin:.72rem 0;padding:.62rem 0}.detail-panel h2{font-size:1.5rem}.detail-panel__summary{margin:.68rem 0 .36rem;font-size:.91rem}.tag-row span{font-size:.54rem}.panel-action{margin-top:.82rem}.footer{display:none}}@media (width<=360px){.topbar__contact{font-size:.58rem}.intro-block{top:calc(max(.9rem, env(safe-area-inset-top)) + 4.25rem)}.intro-block h1{font-size:2.65rem}.intro-block__copy{max-width:16.5rem;font-size:.68rem}.filter-bar{right:max(.5rem, env(safe-area-inset-right));left:max(.5rem, env(safe-area-inset-left));gap:.1rem;padding:.3rem}.filter-bar button{min-height:3.55rem;padding-left:.04rem;padding-right:.04rem}.filter-bar__icon{width:1.68rem;height:1.68rem}.filter-bar__copy strong{font-size:.54rem}.filter-bar__count{top:.22rem;right:.18rem}}@media (height<=560px) and (orientation:landscape){.topbar{padding:max(.65rem, env(safe-area-inset-top)) max(.9rem, env(safe-area-inset-right)) 0 max(.9rem, env(safe-area-inset-left));grid-template-columns:1fr auto}.topbar__descriptor{display:none}.wordmark{font-size:.9rem}.topbar__contact{font-size:.6rem}.intro-block{top:3.7rem;left:max(1rem, env(safe-area-inset-left));width:min(17rem,36vw)}.intro-block:before{z-index:-1;content:"";background:linear-gradient(90deg,#070a17 0%,#070a17eb 72%,#0000 100%);width:calc(100% + 4rem);height:calc(100% + 2.5rem);position:absolute;top:-1.2rem;left:-1rem}.intro-block h1{margin:.45rem 0 .55rem;font-size:clamp(2.35rem,6.2vw,3.3rem)}.intro-block__copy{max-width:14rem;font-size:.66rem;line-height:1.42}.explore-cues{display:none}.scene-stage:after{z-index:3;content:"";pointer-events:none;background:linear-gradient(90deg,#070a179e,#0000);width:38%;height:auto;position:absolute;inset:0 auto 0 0}.filter-bar{top:auto;right:auto;bottom:max(.55rem, env(safe-area-inset-bottom));left:max(.8rem, env(safe-area-inset-left));border-radius:.68rem;grid-template-columns:repeat(6,minmax(0,1fr));gap:.12rem;width:min(24rem,50vw);max-width:none;padding:.32rem;display:grid}.filter-bar:after,.filter-bar__heading{display:none}.filter-bar button{text-align:center;border-radius:.42rem;flex-direction:column;justify-content:center;gap:.24rem;min-width:0;min-height:3.15rem;padding:.28rem .04rem .2rem;display:flex}.filter-bar button:hover{transform:none}.filter-bar button:before{width:1.1rem;height:2px;inset:0 auto auto 50%;transform:translate(-50%)scaleX(.35)}.filter-bar button.is-active:before{transform:translate(-50%)scaleX(1)}.filter-bar__icon{flex:none;width:1.55rem;height:1.55rem}.filter-bar__icon svg{width:.84rem;height:.84rem}.filter-bar__copy{width:100%;display:block}.filter-bar__copy strong{letter-spacing:0;font-size:.55rem;display:block}.filter-bar__copy small{display:none}.filter-bar__count{min-width:.95rem;padding:.12rem .16rem;font-size:.4rem;position:absolute;top:.18rem;right:.18rem}.detail-panel{top:var(--selected-y,50%);bottom:auto;right:auto;left:var(--selected-x,62%);transform-origin:0;width:min(20rem,42vw);padding:.8rem .9rem .85rem;transform:translate(2.25rem,-50%)}.detail-panel.is-open{transform:translate(1.35rem,-50%)}.spatial-layout.detail-anchor-left .detail-panel{transform-origin:100%;transform:translate(calc(-100% - 2.25rem),-50%)}.spatial-layout.detail-anchor-left .detail-panel.is-open{transform:translate(calc(-100% - 1.35rem),-50%)}.detail-panel:after{background:linear-gradient(90deg,#0000,#f6e7b7b3);width:1.35rem;height:1px;inset:50% 100% auto auto}.spatial-layout.detail-anchor-left .detail-panel:after{background:linear-gradient(90deg,#f6e7b7b3,#0000);left:100%;right:auto}.detail-panel__scroll{overscroll-behavior:contain;max-height:calc(100dvh - 3.4rem);overflow-y:auto}.detail-panel h2{font-size:1.42rem}.detail-panel__summary{margin:.55rem 0 .32rem;font-size:.86rem}.detail-panel__body{font-size:.62rem}.detail-panel dl{margin:.55rem 0;padding:.5rem 0}.footer{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
