@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:ital,wght@1,800;1,900&family=DM+Sans:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap');
:root{--bg:#151719;--ink:#dfe6ed;--muted:#adb4bc;--accent:#cb8d6f;--line:#3c434a;--header:78px;--footer:104px}
*{box-sizing:border-box}html{scrollbar-color:#555f6a #151719;overscroll-behavior:none}body{margin:0;background:var(--bg);color:var(--ink);font:16px 'DM Sans',Arial,sans-serif;overflow-x:hidden}body:has(dialog[open]){overflow:hidden}button,a{touch-action:manipulation}button{font:inherit;color:inherit;cursor:pointer;background:none;border:0}a{color:inherit;text-underline-offset:5px}button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button:hover{color:var(--accent)}[hidden]{display:none!important}
header{height:var(--header);padding:0 4%;position:fixed;inset:0 0 auto;display:flex;align-items:center;border-bottom:1px solid #31363b;gap:20px;background:#141619f2;z-index:10}.header-label{font:12px 'Space Mono',monospace;letter-spacing:.7px;line-height:1.8}.header-label small{font-size:11px;color:var(--muted)}nav{margin-left:auto;display:flex;gap:26px;align-items:center}nav button{font-size:14px}.cv-button{border:1px solid #65707c;border-radius:2px;padding:10px 17px}
#viewport{position:fixed;inset:var(--header) 0 var(--footer);overflow:hidden;isolation:isolate}.ambient{position:absolute;inset:0;background:#22272c;pointer-events:none}#world{position:absolute;width:100%;height:100%;will-change:transform}.world-room{position:absolute;width:100%;height:100%;overflow:hidden;background:radial-gradient(ellipse at 70% 95%,#64738555,transparent 63%),linear-gradient(135deg,#1b1e21,#2d343b 65%,#3e4a58);--accent:var(--room-accent);border-right:1px solid #141619;border-bottom:1px solid #08090b}.world-room:nth-child(2n){background:radial-gradient(ellipse at 25% 90%,#6f8daf33,transparent 65%),linear-gradient(150deg,#1f2429,#323d49)}.world-room:nth-child(3n){background:radial-gradient(ellipse at 80% 85%,#848e9a44,transparent 60%),linear-gradient(140deg,#1c1f22,#363c43)}.room-light{position:absolute;inset:-20%;pointer-events:none;background:linear-gradient(135deg,transparent 35%,#a5b8ce0a 40%,transparent 47%,#a5b8ce08 52%,transparent 58%);transform:translateX(-2%);opacity:.7}.content-window{position:absolute;inset:0 0 180px;overflow:hidden;z-index:2}.room-copy{padding:40px 7% 28px;will-change:transform}.eyebrow,.mono{font:12px 'Space Mono',monospace;letter-spacing:1px}.eyebrow{display:flex;gap:16px;align-items:center;margin:0 0 22px;color:var(--accent)}h1,h2,h3,p{margin-top:0}h1,h2{font-family:'Barlow Condensed','Arial Narrow',Impact,sans-serif;font-weight:900;font-style:italic;text-transform:uppercase;letter-spacing:-.025em;line-height:.94}h1{font-size:clamp(76px,10vw,150px);margin-bottom:24px}h1 span{color:var(--accent);display:block}h2{font-size:clamp(58px,7.2vw,105px);margin-bottom:22px}h3{font-size:24px;letter-spacing:-.5px}.hero{max-width:1100px;position:relative}.hero-role{display:flex;align-items:center;gap:17px;font-size:20px}.hero-description{max-width:390px;line-height:1.7;color:var(--muted);margin:20px 0;font-size:16px}.hero-bottom{display:flex;align-items:center;gap:24px;margin-top:25px}.pill{display:inline-flex;align-items:center;gap:24px;border:1px solid #c19a80;border-radius:2px;padding:13px 24px;font-size:14px;background:#a76452;color:#fff3e8!important}.pill:hover{background:#bb7963}.text-link{font-size:14px}
.room-map{position:absolute;right:4%;bottom:155px;z-index:6}.room-map>.mono,.map-caption{font-size:10px;color:#a9b5c2;letter-spacing:1px}.room-map #map{display:grid;grid-template-columns:repeat(3,22px);grid-template-rows:repeat(3,17px);gap:6px;margin:12px 0}.map-node{width:22px;height:17px;border:1px solid #8a96a3;padding:0;font-size:0}.map-node.active{background:var(--accent);border-color:var(--accent)}.map-node:nth-child(1){grid-area:1/1}.map-node:nth-child(2){grid-area:1/2}.map-node:nth-child(3){grid-area:2/2}.map-node:nth-child(4){grid-area:2/1}.map-node:nth-child(5){grid-area:3/1}.map-node:nth-child(6){grid-area:3/2}.map-node:nth-child(7){grid-area:3/3}
.room-stage{position:absolute;left:0;right:0;bottom:0;height:160px;pointer-events:none}.floor{position:absolute;left:0;right:0;bottom:0;height:48px;background:#030405}.horizon{position:absolute;left:0;right:0;bottom:47px;height:1px;background:#bdcbda;box-shadow:0 0 4px 1px #bfccdb66,0 0 32px 8px #a9bbcf33}.pillar{position:absolute;bottom:48px;background:#030406;width:30px;height:72px;opacity:.9;transform-origin:bottom}.pillar:after{content:'';position:absolute;width:180px;height:100%;background:linear-gradient(90deg,#07090b55,transparent);left:100%;bottom:0;transform:skewY(-30deg);transform-origin:left bottom}.pillar-one{left:3%;height:122px;width:38px}.pillar-two{right:3%;height:88px;width:24px}.world-room:nth-child(2n) .pillar-one{height:78px}.world-room:nth-child(3n) .pillar-two{height:135px}.exit-marker{position:absolute;right:13%;bottom:18px;font:10px 'Space Mono';letter-spacing:1px;color:#8c98a6}
#traveller{position:absolute;left:0;top:0;z-index:5;will-change:transform;pointer-events:none;width:60px;height:0}#avatar{position:absolute;width:60px;height:160px;bottom:-26px;left:-30px;background-image:url('character-walk.png');background-size:400% 100%;background-repeat:no-repeat;background-position:0 100%;transform-origin:50% 80%;will-change:background-position;filter:drop-shadow(-18px 12px 6px #0006)}#traveller:before{content:'';position:absolute;top:1px;left:-15px;width:100px;height:11px;background:linear-gradient(90deg,#03040599,transparent);transform:skewX(-40deg);filter:blur(2px)}.transferring:before{opacity:0}
footer{position:fixed;bottom:0;left:0;right:0;height:var(--footer);padding:12px 4% 0;background:#131518;z-index:10;border-top:1px solid #2d333a}.footer-controls{display:flex;align-items:center;gap:20px;height:38px}.room-counter{display:flex;gap:9px;align-items:center;font:12px 'Space Mono',monospace}.room-counter>span:first-child{color:var(--accent)}.room-counter>span:nth-child(2){color:#7d8894}.room-counter strong{margin-left:20px;font-size:11px;letter-spacing:1px;font-weight:400}.instructions{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12px;color:#a4afbc}.instructions>span:first-child{font:11px 'Space Mono';letter-spacing:.6px;color:#bdc9d6}kbd{font:12px 'Space Mono';border:1px solid #586370;border-radius:2px;padding:3px 8px;color:#ccd6e2}.travel{display:flex;gap:6px;margin-left:18px}.travel button{border:1px solid #545e6a;width:34px;height:32px;border-radius:2px;font-size:20px}.travel button:disabled{opacity:.3;cursor:default}.inspiration-note{font-size:12px;line-height:1.5;color:#8e99a5;margin:11px 0 0}.inspiration-note cite{font-style:normal;color:#b8c3d0}.journey-progress{position:absolute;bottom:0;left:0;right:0;height:2px;background:#2a3138}.journey-progress i{display:block;background:#a95150;height:100%;width:0}
.project-layout{display:grid;grid-template-columns:1fr 1.1fr;gap:5%;align-items:center;max-width:1200px;padding-right:45px}.intro-copy{line-height:1.7;color:#b7bfc8;max-width:410px;font-size:16px}.tags{display:flex;flex-wrap:wrap;gap:7px;margin:20px 0}.tag{font:11px 'Space Mono',monospace;border:1px solid #5a6470;border-radius:2px;padding:7px 9px;text-transform:uppercase;letter-spacing:.3px}.media{position:relative;margin:20px 0;padding:8px;background:#16191d;border:1px solid #5d6a78;box-shadow:18px 20px 0 #03040644}.media img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;background:#24292e;filter:saturate(.72)}.media figcaption{font:10px 'Space Mono';letter-spacing:.5px;line-height:1.6;padding:10px 2px 4px;color:#a9b6c4}.image-fallback{display:none;padding:50px 20px;min-height:180px;font:bold italic 40px Arial;color:var(--accent)}.media.failed img{display:none}.media.failed .image-fallback{display:block}.double-cards{display:grid;grid-template-columns:1fr 1fr;gap:20px;max-width:1100px;padding-right:50px}.work-card{border-top:1px solid var(--accent);padding:22px 24px;background:#151a20c7;position:relative}.work-card .mono{font-size:11px;color:var(--accent)}.work-card h3{font-size:30px;margin:16px 0 8px}.work-card p{font-size:16px;line-height:1.65;color:#b5bec8;max-width:370px}.work-card a,.work-card button{font-size:14px}.work-card .card-number{position:absolute;right:20px;top:15px;font:italic 45px 'Barlow Condensed';color:#778390}.tech-line{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font:11px 'Space Mono';margin:22px 0;color:#adb9c6}.tech-line span{padding:10px;border:1px solid #576371}.section-heading{font-size:clamp(55px,7vw,96px)}.timeline{max-width:1100px;padding-right:50px}.timeline button{width:100%;text-align:left;display:grid;grid-template-columns:35px 1fr 1fr 25px;gap:15px;align-items:center;padding:17px 0;border-top:1px solid #535e6a}.timeline button:hover{background:#ffffff05}.timeline .mono{font-size:11px;color:#97a4b3}.timeline b{font-weight:500;font-size:19px}.timeline span{font-size:14px;color:#aebac8}.about-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:70px;max-width:1060px;padding-right:50px}.about-grid p{line-height:1.7;color:#b9c2cc;max-width:500px}.about-grid .large-text{font-size:22px;color:#e3e9f0;line-height:1.45}.contact-links{display:flex;gap:18px;margin:24px 0}.contact-links a,.contact-links button{font-size:14px}.skills{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.skills span{font:14px 'Space Mono';padding:9px 0;margin-right:15px;color:#aebbca}
dialog{background:#1c2126;color:var(--ink);border:1px solid #5c6a7b;width:min(850px,92vw);max-height:86dvh;padding:50px;border-radius:2px;overscroll-behavior:contain}dialog::backdrop{background:#06080bdb;backdrop-filter:blur(10px)}.close{position:absolute;right:15px;top:10px;font-size:32px}.detail-title{font-size:65px;margin:20px 0}.detail-description{line-height:1.8;color:#bbc4ce}.detail-list{padding-left:20px;line-height:1.8;color:#bbc4ce}.detail-list li{margin-bottom:8px}.detail-footer{border-top:1px solid #546170;margin-top:25px;padding-top:20px;font-size:12px;color:#98a6b6}.detail-footer a{display:inline-block;margin-top:10px;color:#caa88d}.cv-rows{display:grid;gap:15px}.cv-rows p{font-size:14px;line-height:1.6;border-bottom:1px solid #414c58;padding-bottom:15px}.skip{position:fixed;top:-100px;left:20px;z-index:20;background:#fff;color:#000;padding:10px}.skip:focus{top:10px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@media(max-width:760px){:root{--header:70px;--footer:122px}header{padding:0 5%;gap:12px}.header-label{font-size:10px}.header-label small{font-size:9px}nav{gap:10px}nav button{display:none}nav .cv-button{display:block;font-size:12px;padding:9px 12px}.room-copy{padding:26px 6% 24px}.content-window{bottom:145px}.eyebrow{font-size:11px;margin-bottom:18px}h1{font-size:clamp(66px,15vw,105px);line-height:.96;margin-bottom:22px}.hero-role{font-size:16px;gap:10px}.hero-description{font-size:16px;max-width:95%;margin-top:18px}.hero-bottom{gap:16px;flex-wrap:wrap}.pill{font-size:14px;padding:11px 17px}.text-link{font-size:14px}.room-map{right:5%;bottom:80px}.room-map>.mono,.map-caption{display:none}.room-map #map{grid-template-columns:repeat(3,16px);grid-template-rows:repeat(3,12px);gap:5px}.map-node{width:16px;height:12px}.project-layout{display:flex;flex-direction:column;gap:8px;padding-right:0;align-items:stretch}h2{font-size:62px}.media{max-width:95%;margin:20px 0}.double-cards{grid-template-columns:1fr;padding:0}.work-card{padding:20px}.section-heading{font-size:58px}.timeline{padding:0}.timeline button{grid-template-columns:25px 1fr 20px;padding:15px 0}.timeline button span{grid-column:2}.timeline button>b:last-child{grid-column:3}.timeline b{font-size:18px}.about-grid{display:flex;flex-direction:column;gap:22px;padding:0}.about-grid .large-text{font-size:20px}.room-counter strong{display:none}.instructions{font-size:11px;gap:5px}.instructions>span:first-child{font-size:10px}.travel{margin-left:auto}.footer-controls{gap:10px}footer{padding:10px 5% 0}.inspiration-note{font-size:11px;margin-top:12px;max-width:420px}.pillar-one{width:18px;left:0}.pillar-two{right:0;width:13px}.exit-marker{font-size:9px}#avatar{width:50px;height:134px;left:-25px;bottom:-22px}dialog{padding:35px 23px}.detail-title{font-size:48px}}
@media(max-height:620px){.content-window{bottom:120px}.room-copy{padding-top:22px}h1{font-size:74px}h2{font-size:60px}.hero-description{margin:10px 0}.hero-bottom{margin-top:12px}#avatar{width:42px;height:112px;left:-21px;bottom:-18px}.room-map{bottom:55px}.room-map>.mono,.map-caption{display:none}}
.project-page{min-height:100vh;background:radial-gradient(ellipse at 80% 100%,#47556655,transparent 65%),#20252b}
.project-page header a{text-decoration:none}
.project-page nav a{font-size:14px}
.standalone-project{padding:calc(var(--header) + 50px) 7% 50px;max-width:1450px;margin:auto}
.standalone-project .project-layout{padding-right:0}
.standalone-project video{display:block;width:100%;aspect-ratio:16/9;object-fit:contain;background:#040507}
@media(max-width:760px){.standalone-project{padding-top:calc(var(--header) + 30px)}.standalone-project h1{font-size:clamp(58px,13vw,96px)}}
.map-node:nth-child(8){grid-area:2/3}
.map-node:nth-child(9){grid-area:1/3}
.code-note{max-width:950px;margin-top:26px;padding-right:50px}
.code-note h3{font-size:18px;margin-bottom:10px}
.code-note p{font-size:16px;color:var(--muted);line-height:1.65}
@media(min-width:761px) and (max-width:1000px){nav{gap:12px}nav button{font-size:12px}}
.world-room,.world-room:nth-child(2n),.world-room:nth-child(3n){background:radial-gradient(ellipse at 65% 70%,#525a7c44,transparent 68%),linear-gradient(160deg,#242a44,#343e63 65%,#252d4b)}
.ambient{background:#2d3556}
.room-light{inset:0;transform:none;opacity:1;background:linear-gradient(165deg,#9ca4c515 0 19%,transparent 19% 62%,#a7afca10 62% 77%,transparent 77%),linear-gradient(90deg,transparent 38%,#a2abc30a 38% 66%,transparent 66% 82%,#10183116 82%)}
.room-light:before{content:'';position:absolute;left:43%;top:9%;width:31%;height:47%;border:35px solid #a5abc609;background:#171e3912;box-shadow:160px 95px 0 -15px #151d3410,-310px 150px 0 -30px #6e7b9e08}
.room-light:after{content:'';position:absolute;right:7%;top:4%;width:17%;height:22%;background:repeating-linear-gradient(135deg,#131c3217 0 7px,transparent 7px 14px);opacity:.6}
.floor,.pillar{background:#020305}
.project-page{background:radial-gradient(ellipse at 75% 80%,#525a7c33,transparent 65%),linear-gradient(160deg,#242a44,#343e63)}
#teleport-veil{background:radial-gradient(ellipse at 50% 100%,#9caaca18,transparent 60%),#252d49}
#world-aperture{position:absolute;inset:0;overflow:hidden}
#teleport-veil{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 50% 100%,#a6b4c422,transparent 60%),#16191d}
#avatar{filter:drop-shadow(-18px 12px 6px #0006)}
.portal{position:absolute;left:0;bottom:0;width:0;height:0;opacity:var(--portal,0);color:#cfd9e5}
.portal-slit{position:absolute;left:-1px;bottom:0;width:2px;height:150px;transform-origin:50% 100%;transform:scaleY(calc(.2 + var(--portal,0)*.8));background:linear-gradient(0deg,#e0e7ee,#cfd9e5 75%,transparent);box-shadow:0 0 7px 2px #d6dfe9bb,0 0 25px 8px #a7bacf55,0 0 55px 15px #839dbb33}
.portal-frame{position:absolute;left:-36px;bottom:0;width:72px;height:140px;border:1px solid #c4d0de88;clip-path:polygon(0 10%,25% 0,75% 0,100% 10%,100% 90%,75% 100%,25% 100%,0 90%);background:linear-gradient(90deg,#bfccdb2b,transparent 25%,transparent 75%,#bfccdb2b);transform:scaleX(calc(.03 + var(--aperture,1)*.97));transform-origin:50% 100%;filter:drop-shadow(0 0 8px #b7c6d766)}
.portal-ripple{position:absolute;left:-90px;bottom:-9px;width:180px;height:18px;border-radius:50%;border:1px solid #c4d0de99;box-shadow:0 0 14px #c4d0de44,inset 0 0 8px #c4d0de22;transform:scaleX(calc(.15 + var(--ripple,0)*1.4));opacity:calc(1 - var(--ripple,0)*.7)}
@media(max-width:760px){.portal{scale:.84}}
@media(max-height:620px){.portal{scale:.7}}
.post-processing{position:fixed;inset:0;z-index:12;pointer-events:none;background:radial-gradient(ellipse at 50% 48%,transparent 38%,#04050730 100%);box-shadow:inset 0 0 100px #08090b18}
.post-processing:before{content:'';position:absolute;inset:0;opacity:.028;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23fff' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}
.horizon{height:2px;background:linear-gradient(90deg,#becad899,#e2e8efdd 18%,#ccd7e3cc 45%,#e3e9f0dd 72%,#c0cedd99);box-shadow:0 0 3px 1px #dce3ebb3,0 0 10px 3px #c1cedd70,0 -5px 30px 10px #97adc650,0 -20px 65px 22px #809bb924}
.horizon:before{content:'';position:absolute;left:0;right:0;bottom:0;height:105px;background:linear-gradient(0deg,#b5c4d62e, #849db90f 35%,transparent 100%);pointer-events:none}
.horizon:after{content:'';position:absolute;left:0;right:0;top:-3px;height:7px;background:linear-gradient(90deg,transparent,#e9eef344 15%,transparent 34%,#ebeff455 68%,transparent);filter:blur(2px)}
.floor{z-index:2;background:#030405}
.pillar{z-index:3;opacity:1;background:#030405}
.exit-marker{z-index:4}
.room-stage:before{content:'';position:absolute;inset:0 0 48px;background:linear-gradient(145deg,transparent 12%,#9bb0c80b 12%,#9bb0c80b 22%,transparent 22%,transparent 64%,#adbed20a 64%,transparent 83%)}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}#teleport-veil,.portal{display:none}}
@media print{body{overflow:visible;background:white;color:black}header,main,footer,#scroll-space,.post-processing{display:none}dialog[open]{position:static;max-height:none;width:100%;border:0;background:white;color:black}dialog button{display:none}dialog p,dialog li{color:#333!important}}

.hero-details{margin-top:20px}.hero-details .contact-links{flex-wrap:wrap;margin:0 0 18px}.hero-details h3{font-size:16px;margin-bottom:6px}.hero-details .skills{margin-top:0;gap:4px 12px}.hero-details .skills span{font-size:14px;padding:4px 0}.about-grid{grid-template-columns:1fr}.about-grid p{max-width:700px}

.hero .hero-description{max-width:660px}

.media img[src="book-of-distance.jpg"]{aspect-ratio:16/9;object-fit:contain;filter:none}
