/* Full-screen content destinations. The atlas is the entrance, each node a space. */
.space-toolbar{display:none}html.in-room,html.in-room body{overflow:hidden}body[data-space="work"]{--room-bg:#0d1520;--room-ink:#e8f1f5;--room-muted:#a5b4c3;--room-accent:#82e0d2;--room-line:#2a3b49;--room-surface:#152330}body[data-space="writing"]{--room-bg:#f7f1e5;--room-ink:#302b29;--room-muted:#6f625d;--room-accent:#944a55;--room-line:#d9cdbd;--room-surface:#eee3d2}body[data-space="film"]{--room-bg:#101010;--room-ink:#f0e8d9;--room-muted:#c2b8a7;--room-accent:#d4aa74;--room-line:#3a352e;--room-surface:#201d19}body[data-space="notes"]{--room-bg:#eaf0e8;--room-ink:#26392f;--room-muted:#5c7266;--room-accent:#2f7658;--room-line:#bdcfc2;--room-surface:#dde7dc}body[data-space="background"]{--room-bg:#f6f8fb;--room-ink:#25374c;--room-muted:#647387;--room-accent:#37679b;--room-line:#d1dce7;--room-surface:#e7edf5}body[data-space="connect"]{--room-bg:#efe0d4;--room-ink:#3c2c27;--room-muted:#775d51;--room-accent:#934d32;--room-line:#cdb8a7;--room-surface:#e5cbb7}
body[data-space]:not([data-space="map"]) header{visibility:hidden}.graph-stage.is-room{position:fixed;inset:0;height:100dvh;min-height:0;z-index:40;overflow:hidden}.graph-stage.is-room .map{height:100%;opacity:1;transition:opacity .45s}.graph-stage.is-room:not(.flying) .map{opacity:0;pointer-events:none}.graph-stage.is-room .location-marker,.graph-stage.is-room .journey-progress,.graph-stage.is-room .chapter-dots{display:none}.graph-stage.is-room .chapter-pane{position:absolute;inset:0;transform:none;width:100%;height:100%;max-height:none;min-height:0;max-width:none;padding:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-color:var(--room-line) var(--room-bg);border:0;border-radius:0;box-shadow:none;backdrop-filter:none;background:var(--room-bg);color:var(--room-ink);font-family:'DM Sans',Arial,sans-serif;transition:opacity .45s ease,filter .45s ease;isolation:isolate}.graph-stage.is-room .chapter-pane:before{display:none}.graph-stage.is-room .space-toolbar{display:flex;position:sticky;top:0;align-items:center;justify-content:space-between;gap:25px;min-height:88px;padding:20px 5%;border-bottom:1px solid var(--room-line);background:var(--room-bg);z-index:5;color:var(--room-ink)}.space-toolbar button{display:flex;gap:12px;align-items:center;background:transparent;border:1px solid var(--room-line);border-radius:30px;padding:12px 20px;color:var(--room-ink);font:500 15px 'DM Sans',Arial,sans-serif;transition:background .25s,border-color .25s}.space-toolbar button:hover{border-color:var(--room-accent);background:var(--room-surface)}.space-toolbar #space-name{font:500 12px var(--mono);letter-spacing:.1em;color:var(--room-accent)}.space-toolbar .space-hint{font:10px var(--mono);letter-spacing:.06em;color:var(--room-muted)}.graph-stage.is-room .chapter{max-width:1200px;margin:0 auto;padding:68px 55px 90px;animation:room-arrival .6s ease}.graph-stage.is-room .chapter .eyebrow{font:500 12px var(--mono);letter-spacing:.1em;color:var(--room-accent);margin-bottom:30px;gap:16px}.graph-stage.is-room .chapter .eyebrow:before{width:28px;background:var(--room-accent)}.graph-stage.is-room .chapter h1,.graph-stage.is-room .chapter h2{font:500 clamp(48px,5.3vw,80px)/1.1 'DM Sans',Arial,sans-serif;letter-spacing:-.045em;color:var(--room-ink);margin:0 0 30px}.graph-stage.is-room .chapter .serif{font:inherit;font-style:normal;color:var(--room-accent);letter-spacing:inherit}.graph-stage.is-room .chapter-copy{font:400 19px/1.8 'DM Sans',Arial,sans-serif;color:var(--room-muted);max-width:740px;margin:0 0 25px}.graph-stage.is-room .chapter-intro{font:400 25px/1.7 'DM Sans',Arial,sans-serif;color:var(--room-ink);max-width:800px}.graph-stage.is-room .chapter .text-link{font:500 17px/1.5 'DM Sans',Arial,sans-serif;padding:14px 0;margin-top:16px;border-color:var(--room-line);color:var(--room-ink);gap:45px}.graph-stage.is-room .text-link span{color:var(--room-accent)}.graph-stage.is-room .text-link:hover{border-color:var(--room-accent)}.graph-stage.is-room .companion-link{font:400 14px/1.6 'DM Sans',Arial,sans-serif;color:var(--room-muted);margin-top:20px}.graph-stage.is-room .chapter-next{font:500 12px/1.8 var(--mono);letter-spacing:.04em;color:var(--room-accent);margin-top:55px;border-top:1px solid var(--room-line);padding-top:24px;width:100%}.graph-stage.is-room .chapter a:focus-visible,.graph-stage.is-room button:focus-visible,.graph-stage.is-room summary:focus-visible{outline:2px solid var(--room-accent);outline-offset:5px}.room-section-title{display:none}.graph-stage.is-room .room-section-title{display:flex;justify-content:space-between;align-items:center;gap:25px;border-top:1px solid var(--room-line);padding-top:30px;margin-top:55px}.room-section-title h3{font:500 24px 'DM Sans',Arial,sans-serif;letter-spacing:-.5px;margin:0}.room-section-title>span{font:10px/1.6 var(--mono);letter-spacing:.05em;color:var(--room-muted)}.project-state{display:inline-block;font:11px/1.5 var(--mono);padding:7px 10px;border:1px solid var(--room-line);color:var(--room-accent);margin-top:24px}.graph-stage.is-room .graph-projects{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:28px}.graph-stage.is-room .graph-projects a{display:flex;flex-direction:column;align-items:start;position:relative;padding:28px!important;background:var(--room-surface);border:1px solid var(--room-line);border-radius:5px;min-height:290px;transition:transform .3s,border-color .3s}.graph-stage.is-room .graph-projects a:hover{transform:translateY(-5px);border-color:var(--room-accent)}.graph-stage.is-room .graph-projects a:before{display:grid;width:46px;height:46px;transform:none;font-size:27px;color:var(--room-accent);background:#82e0d20c;border:1px solid var(--room-line);border-radius:8px;margin-bottom:18px}.graph-stage.is-room .graph-projects h3{font:500 25px/1.25 'DM Sans',Arial,sans-serif;letter-spacing:-.7px;margin:0 0 14px;color:var(--room-ink)}.graph-stage.is-room .graph-projects p{font:400 16px/1.7 'DM Sans',Arial,sans-serif;color:var(--room-muted);margin:0}.graph-stage.is-room .graph-projects a>span:last-child{position:absolute;right:25px;top:30px;font-size:24px;color:var(--room-accent)}.graph-stage.is-room .collection-link{font:400 15px 'DM Sans',Arial,sans-serif;margin-top:25px;color:var(--room-muted);gap:20px}.graph-stage.is-room .collection-link span{color:var(--room-accent)}
/* Computer science: a spacious systems workspace. */
body[data-space="work"] .chapter-pane:after{content:'';position:fixed;inset:88px 0 0;z-index:-1;pointer-events:none;background:linear-gradient(90deg,#82e0d205 1px,transparent 1px),linear-gradient(#82e0d205 1px,transparent 1px),radial-gradient(ellipse at 90% 0%,#234b5355,transparent 55%);background-size:52px 52px,52px 52px,100% 100%}body[data-space="work"] .space-toolbar{background:#0d1520f5}body[data-space="work"] .chapter .eyebrow:before{content:'>';background:none;color:var(--room-accent);font-size:22px;height:auto;width:15px}
/* Writing: readable editorial rhythm, with a generous measure. */
.editorial-divider,.writing-shelf{display:none}body[data-space="writing"] .chapter{max-width:1040px}body[data-space="writing"] .chapter h2{font-family:Georgia,'Times New Roman',serif;font-weight:400;letter-spacing:-.045em;font-size:clamp(49px,6.3vw,88px)}body[data-space="writing"] .chapter .serif{font-style:italic}body[data-space="writing"] .chapter-copy{font:20px/1.85 Georgia,'Times New Roman',serif;max-width:720px;color:#655850}body[data-space="writing"] .editorial-divider{display:flex;gap:24px;align-items:center;flex-wrap:wrap;border-top:1px solid var(--room-line);border-bottom:1px solid var(--room-line);padding:22px 0;margin:45px 0 32px;font:15px Georgia,serif;color:var(--room-muted)}.editorial-divider i{font-style:normal;font-size:14px;color:var(--room-accent)}body[data-space="writing"] .writing-shelf{display:block;border-left:3px solid var(--room-accent);padding:24px 30px;margin:40px 0 20px;background:var(--room-surface)}.writing-shelf .shelf-label{font:11px var(--mono);letter-spacing:.12em;color:var(--room-accent)}.writing-shelf h3{font:400 31px Georgia,serif;letter-spacing:-.7px;margin:22px 0 15px}.writing-shelf p:not(.shelf-label){font:17px/1.8 Georgia,serif;color:var(--room-muted);max-width:630px}.writing-shelf>span{font:12px 'DM Sans',Arial,sans-serif;color:var(--room-accent)}
/* Film: a dark screening room and a wide cinematic canvas. */
.cinema-frame{display:none}body[data-space="film"] .chapter{max-width:1360px}body[data-space="film"] .chapter h2{font:500 clamp(45px,5.6vw,80px)/1.1 'DM Sans',Arial,sans-serif;letter-spacing:-.055em}body[data-space="film"] .chapter .serif{color:#d4aa74}body[data-space="film"] .cinema-frame{display:block;position:relative;isolation:isolate;width:100%;aspect-ratio:2.35/1;min-height:250px;max-height:440px;overflow:hidden;margin:42px 0 35px;background:#17181a;border:1px solid #514332;box-shadow:0 18px 70px #0005}.cinema-glow{position:absolute;inset:-50%;background:radial-gradient(ellipse at 55% 70%,#d3954a88,transparent 25%),radial-gradient(ellipse at 40% 45%,#53688955,transparent 30%),linear-gradient(120deg,#07080b,#20232a 50%,#433426);filter:blur(25px);animation:cinema-light 20s ease-in-out infinite alternate}.cinema-orbit{position:absolute;width:43%;aspect-ratio:1;right:9%;top:1%;border-radius:50%;background:linear-gradient(110deg,#11151b 40%,#c18f4b);box-shadow:0 0 85px #c9954833;transform:rotate(-20deg)}.cinema-frame:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#08090bdd,transparent 80%);z-index:0}.cinema-title{position:absolute;left:6%;top:17%;z-index:1}.cinema-title>span{display:block;font:11px var(--mono);letter-spacing:.2em;color:#e2c7a1;margin-bottom:24px}.cinema-title strong{font:400 clamp(30px,4.5vw,65px)/1.04 'DM Sans',Arial,sans-serif;letter-spacing:-.05em;color:#f9f0e2}.cinema-title em{font-family:Georgia,serif;font-weight:400}.cinema-caption{position:absolute;left:6%;right:6%;bottom:9%;display:flex;justify-content:space-between;gap:20px;z-index:1;font:9px var(--mono);letter-spacing:.1em;color:#d8c8ae}body[data-space="film"] .chapter-copy{max-width:800px}body[data-space="film"] .space-toolbar{background:#101010f5}
/* Notes, qualifications, and contact each have their own material. */
body[data-space="notes"] .chapter-pane{background-color:var(--room-bg);background-image:radial-gradient(#718c6a25 .8px,transparent .8px);background-size:22px 22px}body[data-space="notes"] .note-paper{max-width:850px;background:repeating-linear-gradient(0deg,#f6f8ee,#f6f8ee 37px,#cbd8c7 38px);transform:none;border-left:3px solid var(--room-accent);box-shadow:7px 7px 0 #bdcfb844;padding:30px 40px;margin:35px 0}.graph-stage.is-room .note-paper>.mono{font-size:12px;color:var(--room-muted)}.graph-stage.is-room .note-paper p{font:16px/2.4 var(--mono);color:var(--room-ink);margin-top:30px}.graph-stage.is-room .qualifications{max-width:900px;margin-top:25px}.graph-stage.is-room .qualifications details{border-color:var(--room-line);padding:23px 0}.graph-stage.is-room .qualifications summary{font:500 20px 'DM Sans',Arial,sans-serif;color:var(--room-ink);gap:30px}.graph-stage.is-room .qualifications summary>span{font-size:12px;color:var(--room-muted)}.graph-stage.is-room .qualifications summary b{color:var(--room-accent);font-size:22px}.graph-stage.is-room .qualification-content{padding:10px 0 0 48px}.graph-stage.is-room .qualification-content h4{font:500 19px 'DM Sans',Arial,sans-serif;margin:24px 0 9px;color:var(--room-ink)}.graph-stage.is-room .qualification-content p{font:16px/1.8 'DM Sans',Arial,sans-serif;color:var(--room-muted)}.graph-stage.is-room .cv-file{max-width:900px;margin-top:25px;padding:23px;background:var(--room-surface);border:1px solid var(--room-line);gap:25px}.graph-stage.is-room .cv-file strong{font-size:18px}.graph-stage.is-room .cv-file div>span{font-size:14px;color:var(--room-muted);margin-top:9px}.graph-stage.is-room .cv-file>.mono{font-size:12px;color:var(--room-muted)}.graph-stage.is-room .file-icon{color:var(--room-accent);font-size:32px}body[data-space="connect"] .chapter{padding-top:90px;max-width:1100px}body[data-space="connect"] .chapter h2{font-size:clamp(55px,7vw,100px)}.graph-stage.is-room .social-links{font:16px 'DM Sans',Arial,sans-serif;gap:35px;margin-top:30px;color:var(--room-muted)}.graph-stage.is-room .social-links a:hover{color:var(--room-accent)}.graph-stage.is-room .chapter-foot{font:12px var(--mono);color:var(--room-muted);margin-top:55px}.graph-stage.is-room.flying .chapter-pane{opacity:0;filter:blur(4px);pointer-events:none}@keyframes cinema-light{from{transform:translate(-2%,0) scale(1)}to{transform:translate(4%,3%) scale(1.08)}}@keyframes room-arrival{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:900px){.space-toolbar .space-hint{display:none}.graph-stage.is-room .graph-projects{grid-template-columns:1fr}.graph-stage.is-room .graph-projects a{min-height:0;display:grid;grid-template-columns:50px 1fr;gap:22px;padding:26px!important}.graph-stage.is-room .graph-projects a:before{margin:0;align-self:start}.graph-stage.is-room .graph-projects a>span:last-child{right:22px;top:22px}.graph-stage.is-room .graph-projects h3{padding-right:25px}.graph-stage.is-room .project-state{margin-top:15px}}
@media(max-width:600px){.graph-stage.is-room .space-toolbar{padding:15px 6%;min-height:74px;gap:12px}.space-toolbar button{font-size:14px;padding:10px 14px;gap:9px}.space-toolbar #space-name{font-size:10px;letter-spacing:.04em;max-width:40%;text-align:right}.graph-stage.is-room .chapter{padding:42px 7% 65px}.graph-stage.is-room .chapter .eyebrow{font-size:10px;line-height:1.6;margin-bottom:25px;gap:11px}.graph-stage.is-room .chapter .eyebrow:before{width:18px}.graph-stage.is-room .chapter h2{font-size:43px;line-height:1.1;margin-bottom:25px;letter-spacing:-.045em}.graph-stage.is-room .chapter-copy{font-size:17px;line-height:1.8}.graph-stage.is-room .chapter-intro{font-size:20px;line-height:1.7}.graph-stage.is-room .room-section-title{align-items:start;flex-direction:column;gap:12px;margin-top:38px;padding-top:25px}.room-section-title h3{font-size:22px}.room-section-title>span{font-size:9px}.graph-stage.is-room .graph-projects{gap:14px;margin-top:22px}.graph-stage.is-room .graph-projects a{padding:22px 18px!important;grid-template-columns:32px 1fr;gap:15px}.graph-stage.is-room .graph-projects a:before{width:32px;height:35px;font-size:20px}.graph-stage.is-room .graph-projects h3{font-size:22px;margin-bottom:12px}.graph-stage.is-room .graph-projects p{font-size:15px;line-height:1.7}.graph-stage.is-room .project-state{font-size:10px;padding:6px 8px}.graph-stage.is-room .chapter .text-link{font-size:16px;gap:22px}.graph-stage.is-room .collection-link{font-size:14px;line-height:1.7}.graph-stage.is-room .companion-link{font-size:14px}.graph-stage.is-room .chapter-next{font-size:11px;margin-top:38px;line-height:1.8}.graph-stage.is-room .chapter-foot{font-size:10px;line-height:1.8}body[data-space="writing"] .chapter h2{font-size:47px;line-height:1.1}body[data-space="writing"] .chapter-copy{font-size:19px;line-height:1.85}.editorial-divider{gap:15px!important;font-size:13px!important;padding:18px 0!important;margin:30px 0!important}body[data-space="writing"] .writing-shelf{padding:20px 22px;margin:32px 0 15px}.writing-shelf h3{font-size:27px;line-height:1.25}.writing-shelf p:not(.shelf-label){font-size:17px}.writing-shelf>span{font-size:12px}body[data-space="film"] .cinema-frame{margin:30px -8.15% 30px;width:116.3%;min-height:285px;border-left:0;border-right:0;aspect-ratio:auto}.cinema-title{left:7%;top:18%}.cinema-title>span{font-size:9px;margin-bottom:25px}.cinema-title strong{font-size:42px}.cinema-orbit{width:65%;right:-10%;top:13%}.cinema-caption{left:7%;right:7%;font-size:7px;line-height:1.5;bottom:8%}.graph-stage.is-room .note-paper{padding:22px 20px;margin:28px 0}.graph-stage.is-room .note-paper>.mono{font-size:9px;overflow-wrap:anywhere}.graph-stage.is-room .note-paper p{font-size:12px;line-height:2.8}.graph-stage.is-room .qualifications summary{font-size:18px;gap:20px}.graph-stage.is-room .qualifications summary>span{font-size:11px}.graph-stage.is-room .qualification-content{padding-left:33px}.graph-stage.is-room .qualification-content h4{font-size:18px;line-height:1.5}.graph-stage.is-room .qualification-content p{font-size:16px}.graph-stage.is-room .cv-file{padding:20px;gap:18px}.graph-stage.is-room .cv-file strong{font-size:17px}.graph-stage.is-room .cv-file div>span{font-size:13px}.graph-stage.is-room .cv-file>.mono{font-size:10px}body[data-space="connect"] .chapter{padding-top:55px}body[data-space="connect"] .chapter h2{font-size:54px}.graph-stage.is-room .social-links{font-size:16px;gap:30px}}
@media(prefers-reduced-motion:reduce){.chapter,.cinema-glow{animation:none!important}}
.graph-stage.is-room .chapter[data-node="writing"] h2{font:400 clamp(49px,6.3vw,88px)/1.12 Georgia,'Times New Roman',serif;letter-spacing:-.045em}.graph-stage.is-room .chapter[data-node="writing"] .serif{font-family:inherit;font-style:italic}.graph-stage.is-room .chapter[data-node="writing"] .chapter-copy{font:400 20px/1.85 Georgia,'Times New Roman',serif;max-width:720px;color:var(--room-muted)}@media(max-width:600px){.graph-stage.is-room .chapter[data-node="writing"] h2{font-size:45px;line-height:1.13}.graph-stage.is-room .chapter[data-node="writing"] .chapter-copy{font-size:19px;line-height:1.85}}
