/* The person unfolds into the atlas. Scroll reveals it; only clicks open rooms. */
.graph-site main.journey{height:220svh;margin:0;max-width:none}.graph-site .graph-stage{position:fixed;inset:0;height:100dvh;min-height:0;display:block;overflow:hidden;isolation:isolate}.graph-stage .map{position:absolute;inset:0;mask-image:none;height:100%;background:none;overflow:hidden}.graph-stage .map:before{background:none}.map-scene{position:absolute;left:0;top:0;width:1200px;height:800px;transform-origin:0 0;contain:layout style;pointer-events:none}#graph-world{pointer-events:auto;transition:none}#graph-lines{position:absolute;inset:0;width:1200px;height:800px;overflow:visible}.map-edge{transition:stroke .15s,opacity .15s;stroke-linecap:round}.map-edge.hover-connected{opacity:1!important;stroke-width:2!important}.map-edge.hover-dim{opacity:.2!important}.map-scene #graph-world .graph-node{position:absolute;visibility:visible;transition:none;pointer-events:auto;transform:translate(-50%,-50%);padding:20px;gap:10px}.map-scene .node-title{font:500 16px 'DM Sans',Arial,sans-serif;letter-spacing:-.2px}.map-scene .node-subtitle{font:9px var(--mono);letter-spacing:.05em}.map-scene .graph-node.root .node-title{font:italic 32px Georgia,serif}.map-scene .graph-node .node-point{width:34px;height:34px;font-size:19px;box-shadow:0 0 0 6px #f3f0e9c0}.map-scene .graph-node.root .node-point{width:56px;height:56px;font-size:38px;animation:none;border-radius:50%;background:#b95f43;box-shadow:0 0 0 8px #b95f4310}.map-scene .graph-node:hover .node-point{transform:translateY(-3px);background:var(--node-color);color:var(--bg)}.map-scene .graph-node .node-subtitle{display:block}.intro-screen{position:absolute;inset:0;z-index:5;pointer-events:none;will-change:opacity,transform}.intro-copy{position:absolute;left:8%;top:50%;transform:translateY(-50%);width:47%;max-width:650px;pointer-events:auto}.intro-eyebrow{font:10px/1.8 var(--mono);letter-spacing:.1em;color:#7c736c;margin:0 0 35px}.intro-copy h1{font:500 clamp(58px,7vw,108px)/1.06 'DM Sans',Arial,sans-serif;letter-spacing:-.065em;margin:0 0 32px;color:#292b35}.intro-copy h1>span{color:#b95f43}.intro-lead{font:400 25px/1.55 'DM Sans',Arial,sans-serif;color:#4f5058;letter-spacing:-.5px;margin:0 0 25px}.intro-description{font:400 17px/1.8 'DM Sans',Arial,sans-serif;color:#77717a;max-width:420px;margin:0}.intro-scroll{display:inline-flex;align-items:center;gap:40px;border-bottom:1px solid #cbbfb2;padding:15px 0;margin-top:28px;font:500 13px 'DM Sans',Arial,sans-serif}.intro-scroll>span{color:#b95f43;font-size:23px}.intro-scroll:hover{border-color:#b95f43}.stickman-label{position:absolute;right:12%;top:30%;font:italic 23px Georgia,serif;transform:rotate(-9deg);color:#a5765b}.stickman-label>span{display:block;text-align:right;font:40px Georgia,serif;transform:rotate(-15deg)}.intro-index{position:absolute;left:8%;bottom:35px;font:8px var(--mono);letter-spacing:.1em;color:#8a827b}.graph-site header{z-index:20;background:transparent;backdrop-filter:none}.graph-stage:not(.is-room) .chapter-pane{display:none!important}.graph-stage .chapter-dots,.graph-stage .journey-progress,.graph-stage .location-marker,.graph-stage .atlas-note{display:none!important}.graph-stage .map-label,.graph-stage .map-caption,.graph-stage .overview{opacity:0;pointer-events:none;transition:opacity .25s}.graph-stage.map-ready .map-label,.graph-stage.map-ready .map-caption,.graph-stage.map-ready .overview{opacity:1;pointer-events:auto}.graph-stage .map-label{top:115px;left:5%;font-size:10px;background:none}.graph-stage .map-caption{bottom:40px;right:5%;display:flex;opacity:0}.graph-stage .map-caption>.mono{font-size:9px}.graph-stage .map-hint{font-size:17px}.graph-stage .overview{position:absolute;left:5%;bottom:35px;font:12px 'DM Sans',Arial,sans-serif;padding:12px 18px;border-radius:25px;right:auto;width:auto;max-width:none}.graph-stage .intro-scroll-track{pointer-events:none}.graph-stage.is-room .chapter-pane{display:block}.graph-stage.is-room .intro-screen{display:none}.graph-stage.is-room .map{opacity:0;pointer-events:none;transition:none}.graph-stage.is-room.room-transition .map{opacity:1}.graph-stage.is-room .chapter-pane{opacity:1;filter:none!important;transform:none;transition:none!important;backdrop-filter:none!important;will-change:auto}.graph-stage.room-transition .map-scene{will-change:transform}.graph-stage.room-transition .chapter-pane{will-change:opacity,transform}.graph-stage.is-room .chapter{animation:none!important}.graph-stage.is-room .map .map-label,.graph-stage.is-room .map .map-caption,.graph-stage.is-room .map .overview{opacity:0;pointer-events:none}.intro-scroll-track{height:220svh}.intro-screen[aria-hidden="true"]{pointer-events:none}.intro-screen[aria-hidden="true"] .intro-copy{pointer-events:none}#face-details{fill:#32333b;color:#32333b;transition:none}
@media(max-width:700px){.graph-site header{height:68px;margin:0 5%}.intro-copy{left:7%;top:16%;transform:none;width:86%;max-width:none}.intro-eyebrow{font-size:7px;letter-spacing:.06em;margin-bottom:24px;max-width:300px}.intro-copy h1{font-size:58px;margin-bottom:20px;letter-spacing:-.065em}.intro-lead{font-size:19px;line-height:1.5;letter-spacing:-.3px;margin-bottom:15px}.intro-description{font-size:14px;line-height:1.7;max-width:300px}.intro-scroll{position:fixed;left:7%;bottom:7%;margin:0;font-size:11px;padding:12px 0;gap:30px}.intro-scroll>span{font-size:21px}.intro-index{display:none}.stickman-label{top:57%;right:8%;font-size:17px}.stickman-label>span{font-size:26px}.graph-stage .map-label{left:6%;top:95px;font-size:7px}.graph-stage .map-label>span{display:none}.graph-stage .map-caption{right:6%;bottom:90px;max-width:75%;text-align:right}.graph-stage .map-caption>.mono{font-size:7px}.graph-stage .map-hint{font-size:14px}.graph-stage .overview{bottom:25px;left:6%;font-size:11px;padding:11px 15px}.map-scene .node-title{font-size:19px}.map-scene .node-subtitle{font-size:11px}.map-scene .graph-node .node-subtitle{display:none}.map-scene .graph-node{gap:12px}.map-scene .graph-node .node-point{width:45px;height:45px;font-size:25px}.map-scene .graph-node.root .node-point{width:60px;height:60px;font-size:42px}.map-scene .graph-node.root .node-title{font-size:34px}}
@media(max-width:700px) and (max-height:750px){.intro-copy{top:14%}.intro-copy h1{font-size:49px;margin-bottom:17px}.intro-lead{font-size:17px}.intro-description{font-size:13px;max-width:280px}.stickman-label{top:60%;font-size:15px}.intro-scroll{bottom:5%}.intro-eyebrow{margin-bottom:19px}}
@media(prefers-reduced-motion:reduce){.intro-screen{will-change:auto}.map-scene{will-change:auto!important}.graph-node *{transition:none!important}}
.map-scene #graph-world .graph-node{transform:translate(-50%,-50%) scale(var(--node-inverse,1))}.map-scene .node-title{max-width:140px;text-align:center;white-space:normal;line-height:1.25}.map-scene .node-subtitle{max-width:160px;text-align:center;white-space:normal}@media(max-width:700px){.map-scene .node-title{max-width:112px;font-size:16px}.map-scene .graph-node.root .node-title{font-size:29px}.map-scene .graph-node .node-point{width:34px;height:34px;font-size:20px}.map-scene .graph-node.root .node-point{width:48px;height:48px;font-size:33px}}
/* Node apertures: stationary map, one reversible reveal, no camera scaling. */
.graph-stage.is-room .chapter-pane{clip-path:none;transform:none!important;filter:none!important;transition:none!important}.graph-stage.room-transition .chapter-pane{will-change:clip-path}.graph-stage.room-transition .map-scene{will-change:auto}.graph-stage.is-room.room-transition .map{opacity:1;transition:none}.graph-stage .map-edge{transition:opacity .18s,stroke-width .18s;stroke-linejoin:round}.graph-stage #stickman{pointer-events:none}.graph-stage #stickman path{stroke-linejoin:round}#face-details circle{animation:gentle-blink 5s ease-in-out infinite;transform-box:fill-box;transform-origin:center}@keyframes gentle-blink{0%,43%,47%,100%{transform:scaleY(1)}45%{transform:scaleY(.12)}}
/* A small ink character, rather than a static diagram. */
#face-details circle{animation:none!important}#stickman path{vector-effect:none}#character-rig{pointer-events:none}#stickman{will-change:auto}.stickman-label{font-size:24px}.intro-screen .intro-index{letter-spacing:.12em}@media(max-width:700px){.stickman-label{font-size:17px}}
/* Larger illustrated destinations, with quiet pulses along the atlas. */
.map-scene #graph-world .graph-node{gap:14px;padding:20px 13px;border-radius:28px}
.map-scene #graph-world .graph-node .node-point{position:relative;display:grid;place-items:center;width:66px;height:66px;border:1px solid color-mix(in srgb,var(--node-color),transparent 45%);border-radius:22px;background:color-mix(in srgb,var(--node-color) 7%,#f3f0e9);color:var(--node-color);box-shadow:0 0 24px color-mix(in srgb,var(--node-color),transparent 85%),inset 0 1px 0 #ffffffb0;transition:transform .35s,box-shadow .35s,background .35s}
.node-point svg{width:43px;height:43px;overflow:visible}
.map-scene #graph-world .graph-node.root .node-point{width:86px;height:86px;border-radius:50%;background:#b95f43;color:#fff3df;box-shadow:0 0 40px #b95f4325}
.graph-node.root .node-point svg{width:58px;height:58px}
.map-scene #graph-world .node-title{font-size:18px;font-weight:500;max-width:165px}
.map-scene #graph-world .node-subtitle{font-size:9px;letter-spacing:.08em}
.map-scene #graph-world .graph-node.root .node-title{font-size:34px}
.map-ready .node-point:after{content:'';position:absolute;inset:-6px;border:1px solid currentColor;border-radius:inherit;opacity:0;animation:atlas-pulse 5s ease-out infinite;animation-delay:var(--orbit-delay)}
.map-ready .node-point svg{animation:atlas-breathe 5s ease-in-out infinite;animation-delay:var(--orbit-delay)}
.map-scene #graph-world .graph-node:hover .node-point,.map-scene #graph-world .graph-node:focus-visible .node-point{transform:translateY(-5px) rotate(-3deg);background:color-mix(in srgb,var(--node-color) 17%,#f3f0e9);box-shadow:0 0 38px color-mix(in srgb,var(--node-color),transparent 65%)}
.map-scene #graph-world .graph-node.root:hover .node-point{background:#b95f43}
.graph-node:hover .icon-signal{stroke-dasharray:4 3;animation:atlas-signal 1.5s linear infinite}
@keyframes atlas-pulse{0%,40%,100%{opacity:0;transform:scale(.97)}55%{opacity:.22}85%{opacity:0;transform:scale(1.27)}}
@keyframes atlas-breathe{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes atlas-signal{to{stroke-dashoffset:-14}}
.calm .node-point:after,.calm .node-point svg,.calm .icon-signal{animation:none!important}
.is-room .node-point:after,.is-room .node-point svg{animation-play-state:paused}
@media(max-width:700px){.map-scene #graph-world .graph-node{gap:10px;padding:12px 6px}.map-scene #graph-world .graph-node .node-point{width:49px;height:49px;border-radius:16px}.node-point svg{width:33px;height:33px}.map-scene #graph-world .graph-node.root .node-point{width:64px;height:64px}.graph-node.root .node-point svg{width:43px;height:43px}.map-scene #graph-world .node-title{font-size:16px;max-width:112px}.map-scene #graph-world .graph-node.root .node-title{font-size:29px}}
@media(prefers-reduced-motion:reduce){.node-point:after,.node-point svg,.icon-signal{animation:none!important}}
/* Spread the graph independently across both axes; keep icon art undistorted. */
.map-scene #graph-world .graph-node{transform:translate(-50%,-50%) scale(var(--node-inverse,1),var(--node-inverse-y,1))}
/* A familiar face at the heart of the atlas. */
.map-ready [data-node=start] .portrait-eyes{transform-box:fill-box;transform-origin:center;animation:portrait-blink 5.4s infinite}
@keyframes portrait-blink{0%,43%,48%,100%{transform:scaleY(1)}45%{transform:scaleY(.08)}}
.map-ready [data-node=work] .icon-signal{stroke-dasharray:3 2;animation:atlas-signal 2s linear infinite}
.map-ready [data-node=writing] .icon-signal{stroke-dasharray:18;animation:pen-stroke 4s ease-in-out infinite}
.map-ready [data-node=film] .node-point svg{animation:projector 4s steps(1) infinite}
.map-ready [data-node=notes] .icon-signal{stroke-dasharray:22;animation:pen-stroke 5s ease-in-out infinite}
.map-ready [data-node=connect] .icon-signal{animation:conversation 3s ease-in-out infinite}
@keyframes pen-stroke{0%,15%{stroke-dashoffset:22;opacity:.3}50%,85%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:-22;opacity:.3}}
@keyframes projector{0%,88%,94%,100%{opacity:1}90%,96%{opacity:.4}}
@keyframes conversation{0%,100%{opacity:.35;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}
.node-preview{position:fixed;z-index:30;box-sizing:border-box;padding:20px;background:#faf7f0f5;backdrop-filter:blur(12px);border:1px solid color-mix(in srgb,var(--preview-color),transparent 65%);border-radius:16px;box-shadow:0 12px 40px #3d30241c;pointer-events:auto;text-align:left;color:#34343b;animation:preview-arrive .2s ease-out}
.node-preview[hidden]{display:none}.preview-eyebrow{display:block;font:9px var(--mono);text-transform:uppercase;letter-spacing:.12em;color:var(--preview-color)}
.node-preview h3{font:italic 25px/1.15 Georgia,serif;letter-spacing:-.5px;margin:12px 0 10px}.node-preview p{font:14px/1.65 'DM Sans',Arial,sans-serif;margin:0;color:#6c6664}.node-preview button{display:block;background:none;border:0;border-top:1px solid #ded7cd;width:100%;padding:13px 0 0;margin-top:14px;text-align:left;font:500 12px 'DM Sans',Arial,sans-serif;color:var(--preview-color);cursor:pointer}
@keyframes preview-arrive{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
.calm .portrait-eyes,.calm .icon-signal,.calm .node-preview{animation:none!important}
@media(prefers-reduced-motion:reduce){.portrait-eyes,.icon-signal,.node-preview{animation:none!important}}
.map-scene #graph-world .graph-node:focus-visible{outline:1px dashed var(--node-color);outline-offset:0}
/* Objects with their own silhouettes, gathered around a familiar face. */
.map-scene #graph-world .graph-node[data-node=start] .node-point{width:94px;height:94px;background:#faf3e3;color:#753c2d;border:2px solid #b95f43;box-shadow:0 0 0 7px #b95f430c,0 8px 24px #704b2614}
.map-scene #graph-world .graph-node[data-node=start] .node-point svg{width:72px;height:72px}
.map-scene #graph-world .graph-node[data-node=start]:hover .node-point{background:#fff6e6}
.map-scene #graph-world .graph-node[data-node=work] .node-point{border-radius:10px;background:#e9e8ef;border:2px solid #8a7da6;box-shadow:5px 5px 0 #7c6dba16,inset 0 0 0 5px #f7f5f3}
.map-scene #graph-world .graph-node[data-node=work] .node-point:before{content:'';position:absolute;inset:12px -7px;background:repeating-linear-gradient(to bottom,#8a7da6 0 2px,transparent 2px 9px);z-index:-1}
.map-scene #graph-world .graph-node[data-node=writing] .node-point{border-radius:2px 2px 16px 2px;background:#faf4e8;border-color:#bc9ba6;transform:rotate(-7deg);box-shadow:5px 5px 0 #a0608211}
.map-scene #graph-world .graph-node[data-node=writing] .node-point:before{content:'';position:absolute;inset:10px;background:repeating-linear-gradient(transparent 0 10px,#a0608212 10px 11px);pointer-events:none}
.map-scene #graph-world .graph-node[data-node=film] .node-point{width:84px;height:60px;border-radius:7px;background:#302b2a;color:#f5cc8b;border:4px solid #55453b;box-shadow:0 6px 0 #55453b19,0 10px 25px #45301d14}
.map-scene #graph-world .graph-node[data-node=film] .node-point svg{width:40px;height:40px}
.map-scene #graph-world .graph-node[data-node=notes] .node-point{width:77px;height:62px;border-radius:5px 12px 12px 5px;background:linear-gradient(90deg,#587f74 0 7px,#edf1e7 7px 50%,#d4dfd2 50% 52%,#f6f6e9 52%);border-color:#78978b;box-shadow:3px 5px 0 #568e8317}
.map-scene #graph-world .graph-node[data-node=background] .node-point{height:76px;width:59px;border-radius:3px;background:#f4f5ef;border-color:#8ba0ae;box-shadow:4px 4px 0 #617f9e20}
.map-scene #graph-world .graph-node[data-node=connect] .node-point{border-radius:24px 24px 24px 6px;background:#f4e6de;border-color:#c69686}
.map-scene #graph-world .node-title{color:#34323a;font-weight:600;letter-spacing:-.4px}
.map-scene #graph-world .node-subtitle{color:#827972;font-size:10px;letter-spacing:.045em}
.node-preview{padding:18px;border-radius:12px;background:#faf7f0;border-color:#d6cbbd;overflow:hidden}
.preview-artwork{position:relative;height:105px;margin:-18px -18px 17px;padding:14px 18px;box-sizing:border-box;display:flex;align-items:center;gap:22px;overflow:hidden;background:#f0e7d6;color:#89533d;border-bottom:1px solid #0000000c}
.preview-artwork svg{flex:none;width:66px;height:66px;z-index:1}
.preview-artwork span{font:9px/1.8 var(--mono);letter-spacing:.1em;max-width:125px;z-index:1}
[data-theme=work] .preview-artwork{background-color:#242d32;color:#a6d6bd;background-image:linear-gradient(#9bd2b410 1px,transparent 1px),linear-gradient(90deg,#9bd2b410 1px,transparent 1px);background-size:16px 16px}
[data-theme=writing] .preview-artwork{background:#f1e4cd;color:#7b4d5b;transform:none}
[data-theme=writing] .preview-artwork span{font:italic 20px/1.1 Georgia,serif;letter-spacing:-.5px;text-transform:lowercase}
[data-theme=film] .preview-artwork{background:radial-gradient(ellipse at 40% 100%,#77513b,#191c21 75%);color:#edc99c;box-shadow:inset 0 10px #131417,inset 0 -10px #131417}
[data-theme=film] .preview-artwork span{font-size:8px}
[data-theme=notes] .preview-artwork{background:repeating-linear-gradient(#edf0e4 0 20px,#cdd8c9 20px 21px);color:#3e6d5e}
[data-theme=background] .preview-artwork{background:#e8edf0;color:#47677e}
[data-theme=connect] .preview-artwork{background:#f0dfd2;color:#a25743}
@media(max-width:700px){.map-scene #graph-world .graph-node[data-node=start] .node-point{width:70px;height:70px}.map-scene #graph-world .graph-node[data-node=start] .node-point svg{width:54px;height:54px}.map-scene #graph-world .graph-node[data-node=film] .node-point{width:62px;height:46px}.map-scene #graph-world .graph-node[data-node=notes] .node-point{width:58px;height:48px}.map-scene #graph-world .graph-node[data-node=background] .node-point{width:44px;height:58px}.preview-artwork{height:85px}.preview-artwork svg{width:52px;height:52px}}
.map-scene #graph-world .graph-node[data-node=work] .node-point:before{mask-image:linear-gradient(90deg,#000 0 7px,transparent 7px calc(100% - 7px),#000 calc(100% - 7px))}
/* The opening scene: a person, a few thoughts, and a thread to follow. */
.intro-copy{top:46%;max-width:610px}
.intro-eyebrow{margin-bottom:25px}
.intro-copy h1{margin-bottom:25px;font-size:clamp(58px,6.5vw,100px)}
.intro-lead{font-size:clamp(20px,2vw,26px);line-height:1.45;margin-bottom:22px}
.intro-description{color:#68616a;line-height:1.7;max-width:410px}
.stickman-label{top:35%;right:9%;font-size:21px}
.intro-scroll{margin-top:24px;gap:30px}
.character-thought{pointer-events:none}.intro-ink-trail{pointer-events:none}
@media(min-width:701px){.intro-copy{left:8%;width:45%}}
@media(max-width:700px){.intro-copy{top:16%;width:86%;max-width:none}.intro-copy h1{font-size:56px;margin-bottom:22px}.intro-eyebrow{margin-bottom:23px}.intro-lead{font-size:20px;line-height:1.4;margin-bottom:18px}.intro-description{font-size:14px;max-width:330px}.stickman-label{top:65%;right:7%;font-size:16px}.intro-ink-trail{display:none}.character-thought{font-size:18px}}
@media(max-width:700px) and (max-height:750px){.intro-copy{top:13%}.intro-copy h1{font-size:48px;margin-bottom:15px}.intro-eyebrow{margin-bottom:17px}.intro-lead{font-size:17px}.intro-description{font-size:13px}.stickman-label{top:67%}}
@media(max-width:700px){.character-thought text:last-child{display:none}}
.intro-cv{display:inline-flex;align-items:center;gap:15px;margin-left:25px;padding:15px 0;font:500 13px 'DM Sans',Arial,sans-serif;color:#72665e;border-bottom:1px solid transparent}.intro-cv:hover{color:#b95f43;border-color:#b95f43}
.character-interact,.thought-interact{position:absolute;z-index:8;pointer-events:auto;background:transparent;border:1px solid transparent;border-radius:50%;padding:0;cursor:pointer;transition:background .2s,border-color .2s}
.thought-interact{border-radius:12px}.character-interact:hover,.character-interact:focus-visible{background:#b95f4308;border-color:#b95f4340;outline:2px dotted #b95f4380;outline-offset:5px}.thought-interact:hover,.thought-interact:focus-visible{background:#b95f430c;border-color:#b95f4380;outline:2px dotted #b95f4380;outline-offset:3px}
.character-interact:disabled,.thought-interact:disabled{pointer-events:none;visibility:hidden}
@media(max-width:700px){.intro-cv{position:fixed;bottom:7%;right:7%;font-size:11px;margin:0;padding:12px 0}.intro-scroll{gap:18px}}
