@font-face{font-family:Hand;src:url('assets/presentation-font.92b45133c2b2.woff2') format('woff2');font-display:swap}:root{--paper:#fafaf4;--ink:#334447;--blue:#275e9a;--red:#c94b3e}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:Hand,cursive;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;min-height:44px;padding:8px 14px;font-size:20px}button:disabled{opacity:.25;cursor:default}button:hover:not(:disabled),a:hover{color:var(--blue)}button:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:2px dashed var(--blue);outline-offset:4px}a{color:var(--blue)}header,footer{position:fixed;left:0;right:0;z-index:30;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;pointer-events:none}header{top:0;background:linear-gradient(var(--paper) 60%,transparent)}footer{bottom:0;background:linear-gradient(transparent,var(--paper) 40%);padding-top:32px}header>*,footer>*{pointer-events:auto}.brand{font-size:23px;transform:rotate(-2deg)}header>div{display:flex}.route{display:flex;align-items:center;gap:16px}#next{color:var(--blue)}#progress{min-width:90px;text-align:center;font-size:18px}.hint{font-size:14px;color:#6a7775}#chapter-name{font-size:18px;min-width:140px}.board{position:absolute;left:0;top:0;width:13000px;height:10000px;transform:translate(-50%,-45%);pointer-events:none}.board>svg{width:100%;height:100%;overflow:visible;fill:var(--ink);font-family:Hand,cursive}.pen{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}.blue{color:var(--blue);fill:var(--blue)}.accent{color:var(--red);stroke-width:5}.muted{color:#7c8883;fill:#7c8883}.sketch{color:#87948d}.hero{fill:var(--ink)}.clickable,.media-hotspot{pointer-events:auto;cursor:pointer}.clickable:hover .blue{fill:var(--red)}.scene{transition:opacity .35s}.board[data-focus=overview] .scene{opacity:.18}.board[data-focus=overview] .chapter-label{opacity:1}.board[data-focus]:not([data-focus=overview]) .zone{opacity:.12}.board[data-focus=who] .zone-who,.board[data-focus=why] .zone-why,.board[data-focus=now] .zone-now,.board[data-focus=fit] .zone-fit,.board[data-focus=use] .zone-use,.board[data-focus=end] .zone-end{opacity:1}.board[data-focus]:not([data-focus=overview]) .world-heading,.board[data-focus]:not([data-focus=overview]) .world-links{opacity:.1}.scene.is-current .draw{stroke-dasharray:1;stroke-dashoffset:1;animation:draw-in .9s .3s ease-out forwards}.scene.is-current .scene-title{animation:ink-in .5s ease-out both}.scene.is-current .media-hotspot{pointer-events:auto}@keyframes draw-in{to{stroke-dashoffset:0}}@keyframes ink-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.camera{width:1200px;height:750px;pointer-events:none}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}#chapters,#notes,#resources{position:fixed;z-index:40;background:#fffef6;border:1px solid #b8c1b7;box-shadow:4px 5px 0 #e1e5da;padding:24px;max-height:75vh;overflow:auto}#chapters{left:24px;top:80px;width:280px}#chapters p{font-size:23px;margin:0 0 16px}#chapters button{display:block;text-align:left;width:100%;font-size:21px;border-bottom:1px dashed #d8ded4}#notes{right:24px;top:80px;width:460px;font:17px/1.85 'PingFang SC',sans-serif}#notes .note-label{font-size:12px;color:#7c8883}#notes small{display:block;color:#7c8883;font-size:12px;margin-top:18px}#resources{right:24px;top:80px;width:380px;font:16px/1.8 'PingFang SC',sans-serif}#resources h2{font:27px Hand,cursive}#resources a{display:block;margin:12px 0}#resources button{font:16px 'PingFang SC',sans-serif;text-align:left;border:1px dashed #bbc6bb;width:100%;margin:6px 0}dialog{border:1px solid #aab8ad;padding:20px;background:var(--paper);max-width:94vw;width:1250px;max-height:94vh}dialog::backdrop{background:#283c3ad9}dialog img{display:block;max-width:100%;max-height:76vh;object-fit:contain;margin:auto}#media-close{display:block;margin-left:auto}#media-caption{font:13px 'PingFang SC',sans-serif}#reader{padding:100px 24px 140px;max-width:850px;margin:auto;font:18px/1.9 'PingFang SC',sans-serif}#reader h1,#reader h2{font-family:Hand,cursive;line-height:1.4}#reader h1{font-size:43px}#reader h2{font-size:32px}#reader article{margin:65px 0}body:not(.reading) #reader{display:none}.reading{overflow:auto}.reading #impress{visibility:hidden}.reading #chapter-name,.reading .hint,.reading .route{display:none}.reading footer{justify-content:center}.reading #notes{display:none!important}body.no-motion *,body.no-motion *::after{animation:none!important;transition:none!important}@media(max-width:700px){header{padding:8px 10px;flex-wrap:wrap;justify-content:center}.brand{font-size:21px}header button{font-size:16px;padding:5px 8px}#fullscreen{display:none}footer{padding:20px 10px 10px}.hint{display:none}#chapter-name{font-size:14px;min-width:65px}.route{gap:2px}#progress{font-size:15px;min-width:65px}#notes,#resources{left:12px;right:12px;top:105px;width:auto}#chapters{left:12px;top:105px}#reader{padding-top:130px}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.scene.is-current .draw{stroke-dashoffset:0}}
/* Keep pen paths unfilled and active chapters legible. */
.pen{fill:none!important}.board[data-focus]:not([data-focus=overview]) .zone.is-active{opacity:1}.board[data-detail=true] .chapter-label{opacity:.05}.board[data-detail=true] .scene:not(.is-current){opacity:.08}.board[data-detail=false]:not([data-focus=overview]) .scene{opacity:.9}

/* Projection: regular handwriting, reinforced strokes, stronger contrast. */
.board svg text{paint-order:stroke fill;stroke:currentColor;stroke-width:.65px;stroke-linejoin:round}.board svg .scene-title{stroke-width:1.15px;font-size:68px}.board svg .blue{color:#20588d;fill:#20588d}.board svg .muted{color:#65736b;fill:#65736b}header .brand{font-size:22px}button{font-weight:600}#chapter-name{font-weight:600}
.reading #impress{display:none!important}#reader{overflow-wrap:anywhere}
/* Bounded render tiles: only the current journey is painted. */
.board{width:0;height:0;transform:none}.board>svg{position:absolute;display:none;overflow:hidden;transform:translate(-50%,-50%);width:auto;height:auto}.board>.scene-tile,.board>.cover-tile{width:1300px;height:900px;contain:paint}.board>.chapter-tile{width:3000px;height:700px;contain:paint}.board>.map-node{width:3100px;height:1400px;contain:paint}.board>.map-heading{width:13000px;height:1800px}.board>.map-routes{width:13000px;height:7000px;pointer-events:none}.board>svg.is-shown{display:block}.board .scene{opacity:1!important;transition:none!important}.board svg text{stroke-width:.65px}.board svg .cover-title{stroke-width:.8px}.accent-label{fill:var(--red);color:var(--red)}.board.geometry-audit>.scene-tile{display:block!important;visibility:hidden}.board.geometry-audit>.scene-tile .scene-title{animation:none!important;transform:none!important}
#impress.motion-synced,#impress.motion-synced>.motion-canvas{transition-property:transform!important;transition-delay:0ms!important;transition-duration:var(--travel-ms,0ms)!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}#impress.travelling,#impress.travelling>.motion-canvas{will-change:transform}#impress.travelling .scene-title,#impress.travelling .draw{animation:none!important}.board svg.is-shown .scene.is-current .draw{stroke-dasharray:1;stroke-dashoffset:1;animation:draw-in .8s .15s ease-out forwards}.board svg.is-shown .scene.is-current .scene-title{animation:ink-in .3s ease-out both}body[data-view=cover] #media-open,body[data-view=cover] #chap-toggle,body[data-view=cover] #note-toggle{visibility:hidden}body[data-view=cover] .hint{visibility:hidden}body[data-view=cover] #chapter-name{color:#6a7775}
@media(prefers-reduced-motion:reduce){#impress.motion-synced,#impress.motion-synced>.motion-canvas{transition-duration:0ms!important}.board svg.is-shown .scene.is-current .draw{stroke-dashoffset:0;animation:none!important}}
.board>.map-node{width:2400px;height:900px}.board>.map-heading{width:3000px;height:1000px}
.board>.map-bitmap{position:absolute;left:0;top:0;width:13000px;height:8000px;transform:translate(-50%,-50%);display:none;pointer-events:none}.board>.map-bitmap.is-shown{display:block}.map-bitmap.leaving-map{animation:map-release .34s cubic-bezier(.2,.7,.2,1) forwards}@keyframes map-release{to{opacity:0}}
#impress.travelling .scene-tile.is-shown,#impress.travelling .chapter-tile.is-shown{will-change:transform;backface-visibility:hidden}
.map-node .pen.blue{stroke-width:20}.map-node text.blue{stroke-width:2px}

.site-link{pointer-events:auto;cursor:pointer}.site-link:hover .pen{color:var(--blue)}.site-visit{display:table;margin:18px auto 0;padding:10px 24px;border:2px solid var(--blue);border-radius:7px;text-decoration:none;font:600 22px Hand,cursive}.site-visit:hover{background:#e9eff4}.site-visit[hidden]{display:none}

#note-content{white-space:pre-line}


/* Shared world map: the cover is a distant camera on this very same map. */
.board>.cover-tile{width:28000px;height:12000px}.board>.map-node{width:2000px;height:1600px}.board>.map-heading{width:8000px;height:700px}.board>.map-bitmap{width:9000px;height:5200px}
.map-node text.blue{stroke-width:3px}.map-node .pen.blue{stroke-width:18px}.map-node.is-next-stop .blue{color:var(--red);fill:var(--red)}.map-node.is-next-stop .pen{fill:none!important}.map-node.is-visited .map-pin{opacity:.65}
body[data-view=cover] .map-copy,body[data-view=cover] .map-heading{opacity:0}body[data-view=cover] .map-routes{opacity:.45}
#impress.opening-map .map-heading{animation:ink-in .35s .7s both}#impress.opening-map .map-copy{animation:ink-in .4s calc(.75s + var(--order)*.13s) both}#impress.opening-map .map-routes{opacity:1}#impress.opening-map .route-stroke{stroke-dasharray:1;stroke-dashoffset:1;animation:draw-in .5s calc(.6s + var(--order)*.16s) forwards}#impress.opening-map .cover-copy{animation:map-cover-exit .65s .1s both}#impress.opening-map .folded-map{animation:map-cover-exit .6s .7s both}@keyframes map-cover-exit{to{opacity:0}}
@media(prefers-reduced-motion:reduce){#impress.opening-map .route-stroke{stroke-dashoffset:0}#impress.opening-map .map-copy,#impress.opening-map .map-heading{opacity:1}}
/* Center the destination early while scale keeps increasing. */
#impress.opening-map>.motion-canvas{transition-timing-function:cubic-bezier(.1,.8,.2,1)!important}

/* Draw the return route after arrival, then reveal its explanation. */
.scene.is-current .publish-return .connector-shaft{stroke-dasharray:1;stroke-dashoffset:1;animation:draw-in 1.5s linear forwards}
.scene.is-current .publish-return .connector-head{animation:publish-reveal .12s 1.5s both}
.scene.is-current .publish-caption{animation:publish-reveal .25s 1.5s both}
@keyframes publish-reveal{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.scene.is-current .publish-return .connector-shaft{stroke-dashoffset:0}.scene.is-current .publish-return .connector-head,.scene.is-current .publish-caption{opacity:1}}
body.no-motion .publish-return .connector-shaft{stroke-dashoffset:0}
body.no-motion .publish-return .connector-head,body.no-motion .publish-caption{opacity:1}

/* Inline text links remain legible and usable on the shared SVG canvas. */
.site-link.scene-link,.site-link.consult-button{pointer-events:auto;cursor:pointer}
.scene-link{fill:var(--blue);text-decoration:underline;text-decoration-style:dashed;text-underline-offset:5px}
.consult-button .pen{stroke:var(--blue);fill:var(--paper);stroke-width:3}
.consult-button:hover .pen{fill:#eef3f8}
.scene-link:hover{fill:var(--red)}
