:root{--paper:#ddd7c8;--ink:#2b3532;--muted:#425047;--night:#28322e;--light:#ece7d8;--amber:#e8a05a;--line:#a2aa9a;--ease:cubic-bezier(.16,1,.3,1);color-scheme:dark}
body{-webkit-user-select:none;user-select:none}input,textarea,[contenteditable]:not([contenteditable=false]){-webkit-user-select:text;user-select:text}
*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-color:#68776e #28322e}body{margin:0;color:var(--light);background:var(--night);font:20px/1.65 KingHwa,'Songti SC',SimSun,serif;font-synthesis:none}body:not([data-page=home]):before{content:'';position:fixed;inset:0;z-index:-1;background:linear-gradient(#28322ed0,#28322edb),url('assets/plates/laboratory-room.webp?v=unified-reframed-v4') center/cover}a{color:inherit;text-underline-offset:.25em;text-decoration-thickness:1px}button,input,select{font:inherit;color:inherit;caret-color:var(--amber)}a,button,summary{touch-action:manipulation}a:focus-visible,button:focus-visible,summary:focus-visible,iframe:focus-visible,[tabindex="0"]:focus-visible{outline:3px solid var(--amber);outline-offset:5px}::selection{color:#192321;background:#dda86a}button{cursor:pointer}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:400;text-wrap:balance;line-height:1.3}h1{font-size:clamp(42px,5vw,66px)}h2{font-size:32px}h3{font-size:26px}p{max-width:70ch}img{display:block;max-width:100%}[hidden]{display:none!important}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip{position:absolute;left:20px;top:-100px;background:var(--night);padding:8px 16px;z-index:30}.skip:focus{top:12px}
.site-header{position:relative;z-index:12;max-width:none;margin:0;padding:28px 42px;display:flex;align-items:center;justify-content:flex-start;gap:12px}.brand{font:30px/1.4 KingHwa,serif;text-decoration:none;display:flex;align-items:center;gap:26px;white-space:nowrap}.brand span{font-size:16px;color:#c7ccbe}.site-header nav{display:flex;gap:30px;font-size:20px;flex-shrink:0}.site-header nav a{text-decoration:none;padding:8px 0;position:relative}.site-header nav a[aria-current=page]:after{content:'';position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--amber)}.site-header nav a:hover{color:#f2b879}.site-footer{max-width:1244px;margin:58px auto 0;border-top:1px solid #5c6a60;padding:20px 0 30px;display:flex;justify-content:space-between;gap:20px;color:#c7ccbe;font-size:16px}main{max-width:1292px;margin:auto;padding:0 24px}.page-heading{margin:38px 0 12px;display:flex;align-items:baseline;gap:28px}.page-heading p{color:#c7ccbe;font-size:20px}.action{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:8px 26px;background:#344b41;color:#f3eee1;border:0;text-decoration:none;align-self:flex-start;transition:background .2s var(--ease)}.action:hover{background:#233d31}.action.secondary{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}.loading,.error{margin:100px auto;max-width:700px}.error h1{font-size:36px;margin-bottom:20px}.error p{margin-bottom:24px}.error .action{background:#566c5e}

/* The landing page is the room itself; its destinations remain ordinary links. */
body[data-page=home] .site-header{position:absolute;top:0;left:0;right:0;max-width:none;padding:28px 42px;background:linear-gradient(#17221be6,#17221b00);text-shadow:0 2px 6px #111b16}body[data-page=home] main{max-width:none;padding:0}body[data-page=home] .site-footer{display:none}.lab-scene{position:relative;height:100svh;min-height:680px;overflow:hidden;isolation:isolate;background:#303a35}.lab-camera{position:absolute;inset:0;transform-origin:0 0;container-type:size}.lab-world{position:absolute;left:calc(50% - max(50cqw,75cqh));top:calc(50% - max(50cqh,33.333333cqw));width:max(100cqw,150cqh);height:max(100cqh,66.666667cqw)}.lab-environment{position:absolute;inset:0;display:block}.lab-environment img{width:100%;height:100%;object-fit:cover;object-position:center}.lab-scene:after{content:'';position:absolute;inset:0;pointer-events:none;z-index:2;box-shadow:inset 0 -100px 100px -85px #111916}.room-target{position:absolute;display:block;text-decoration:none;z-index:3;outline-offset:-5px!important}.target-caption{position:absolute;left:50%;bottom:7%;transform:translateX(-50%);white-space:nowrap;text-align:center;padding:8px 18px 10px;background:#1c2622e8;color:#f0ebdc;box-shadow:0 7px 18px #07100d45;transition:background .3s,bottom .3s var(--ease)}.target-caption:before{content:'';position:absolute;top:-22px;left:50%;width:1px;height:22px;background:#d1b07e}.target-caption strong{display:block;font-weight:400;font-size:30px;line-height:1.45}.target-caption small{display:block;font-size:15px;color:#d1d6c7}.target-play .target-caption{bottom:-14%}.room-target:focus-visible .target-caption{background:#36493c}.crt-light{position:absolute;left:12%;top:39%;width:8%;height:11%;background:#bdcf9a;opacity:0;filter:blur(18px);mix-blend-mode:screen;pointer-events:none;transition:opacity .6s}.lab-camera:has(.target-play:hover) .crt-light,.lab-camera:has(.target-play:focus-visible) .crt-light,[data-travelling=play] .crt-light{opacity:.24}.lab-invitation{position:absolute;bottom:35px;left:50%;transform:translateX(-50%);z-index:4;padding:10px 20px;color:#eee9da;background:#1d2821df;font-size:18px;white-space:nowrap}.lab-status{position:absolute;bottom:98px;left:50%;transform:translateX(-50%);z-index:6;white-space:nowrap;color:#eee9da;font-size:18px;text-shadow:0 2px 8px #101a15}.journey-cancel{position:absolute;right:32px;bottom:32px;z-index:10;padding:8px 20px;min-height:44px;background:#202c24;color:#eee9da;border:1px solid #a5b39e}[data-travelling] .target-caption,[data-travelling] .lab-invitation{opacity:0;transition:opacity .25s}.journey-veil{position:fixed;inset:0;z-index:11;pointer-events:none;background:#28322e;opacity:0}.veil-play{background:radial-gradient(ellipse at var(--portal-x) var(--portal-y),#b6ccb0 0,#29463a 12%,#091511 64%)}.crt-portal{position:absolute;z-index:4;pointer-events:none;transform:translate(-50%,-50%);overflow:hidden;border:2px solid #d1e3b7;border-radius:12%/16%;background:radial-gradient(ellipse,#172d26 0,#0b1914 68%,#91b18a 100%);box-shadow:0 0 18px #d6e9aa99,inset 0 0 18px #c5dfaab3;opacity:0}.crt-portal:after{content:'';position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0px,transparent 2px,#bcd6b21f 2px,#bcd6b21f 3px);box-shadow:inset 0 0 16px #03100be6}.crt-portal i{position:absolute;inset:12%;border:1px solid #b7d4a5;border-radius:7%/10%;box-shadow:0 0 5px #a8d98d,inset 0 0 5px #a8d98d;opacity:0}@media(hover:hover){.room-target:hover .target-caption{bottom:9%;background:#36493cf2}.target-play:hover .target-caption{bottom:-12%}}

/* A readable paper surface sits inside the laboratory; artwork keeps its identity. */
.library-desk{margin-top:38px}.drag-rail{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;touch-action:pan-x pan-y}.drag-rail.dragging{cursor:grabbing;user-select:none}.book-rail{display:flex;justify-content:center;gap:48px;padding:28px 18px 32px;border-bottom:9px solid #77755c;max-width:1120px;margin:auto}.shelf-book{flex:0 0 232px;min-height:296px;display:flex;flex-direction:column;text-decoration:none;padding:26px 24px 20px;box-shadow:inset 7px 0 5px #31382c1c,8px 12px 24px #10191366;transform:rotate(-2deg);transition:transform .4s var(--ease),box-shadow .4s var(--ease);color:#263830}.shelf-book:nth-child(even){transform:rotate(2deg)}.shelf-book.selected{transform:translateY(-10px) rotate(0);box-shadow:inset 7px 0 5px #31382c1c,8px 20px 24px #10191377}.book-sage{background:#c6d0b9}.book-blue{background:#bccbd2}.book-ochre{background:#d9c7a5}.book-cover-title{font-size:34px;line-height:1.4}.book-cover-note{font-size:16px;line-height:1.7;margin-top:20px}.book-author{margin-top:auto;padding-top:24px;font-size:20px}.rail-controls{display:flex;justify-content:space-between;align-items:center;gap:24px;max-width:1120px;margin:14px auto 0;font-size:16px;color:#c7ccbe}.rail-controls>div{display:flex;gap:24px}.rail-controls button{min-height:44px;padding:6px 8px;background:transparent;border:0;text-decoration:underline;text-underline-offset:5px}.rail-controls button:disabled{opacity:.45;cursor:default}.book-open{display:grid;grid-template-columns:1fr 1.05fr;gap:54px;align-items:start;margin:42px auto 0;max-width:1120px;color:var(--ink);color-scheme:light}.book-visual{position:sticky;top:30px;background:var(--paper);overflow:hidden}.book-visual>img{width:100%;aspect-ratio:3/2;height:auto;max-height:340px;object-fit:cover;object-position:center}.book-introduction{padding:28px 30px 34px}.book-introduction h2{font-size:40px}.book-introduction p{margin:16px 0 24px;font-size:18px}.open-title{height:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px}.open-title>span{font-size:44px}.open-title>small{font-size:23px;margin-top:28px}.art-caption{font-size:16px;padding:12px 24px;border-bottom:1px solid var(--line);color:var(--muted)}.book-directory{background:var(--paper);padding:24px 28px}.shelf-heading{margin-bottom:22px}.shelf-heading p{font-size:17px;color:var(--muted);margin-top:10px}.chapter-list{list-style:none;margin:0;padding:0}.chapter-list a{display:block;padding:17px 0;border-bottom:1px solid var(--line);text-decoration:none;font-size:21px}.chapter-list a:hover,.chapter-list a.previewing{color:#815020}.reader-top{max-width:1040px;margin:28px auto;display:flex;justify-content:space-between;align-items:center;gap:24px;font-size:18px}.reader-top details{position:relative}.reader-top summary{cursor:pointer;min-height:44px;padding:6px 0}.reader-top details>ol{position:absolute;right:0;width:280px;max-height:65vh;overflow:auto;background:var(--paper);color:var(--ink);box-shadow:0 12px 30px #111b1580;padding:20px 20px 20px 44px;z-index:5}.reader-top li{padding:4px}.reading{max-width:850px;margin:44px auto 0;padding:46px 50px 54px;background:#e2dece;color:var(--ink);color-scheme:light}.reading h1{font-size:42px;margin-bottom:16px}.book-name{font-size:19px;margin-bottom:34px;color:var(--muted)}.prose{font-size:22px;line-height:1.95}.prose p{margin-bottom:1.25em;white-space:pre-wrap;overflow-wrap:anywhere}.prose h2{font-size:28px;margin:44px 0 20px}.prose blockquote{margin:26px 0;padding:0 26px;font-size:21px;white-space:pre-wrap}.prose img{margin:32px auto;max-height:640px;object-fit:contain}.prose hr{border:0;border-top:1px solid var(--line);margin:36px 0}.reading-nav{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);margin-top:56px;padding-top:24px;font-size:19px}.reading-nav .end{color:var(--muted)}.reading-progress{position:fixed;bottom:0;left:0;width:100%;height:3px;background:var(--amber);transform-origin:left;transform:scaleX(var(--progress,0));z-index:8}.chapter-art:empty{display:none}.chapter-art img{width:100%;aspect-ratio:3/2;object-fit:cover;margin:0 0 42px}

.letter-desk{max-width:1244px;margin:44px auto 56px}.play-letter{background:#e4ddcd;color:var(--ink);color-scheme:light;box-shadow:0 18px 36px #111b1560;transform:rotate(-.6deg);transition:transform .5s var(--ease)}.play-letter summary{display:block;cursor:pointer;list-style:none}.play-letter summary::-webkit-details-marker{display:none}.envelope-front{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-height:clamp(360px,38vw,540px);padding:40px;overflow:hidden;isolation:isolate}.envelope-art{position:absolute;inset:0;z-index:-3;width:100%;height:100%;object-fit:cover;object-position:center 32%;opacity:.66}.envelope-front:after{content:'';position:absolute;inset:0;z-index:-2;pointer-events:none;background:linear-gradient(0deg,#e4ddcd 0%,#e4ddcddb 22%,#e4ddcd12 72%)}.envelope-front:before{content:'';position:absolute;inset:0 0 44%;background:linear-gradient(160deg,#f7efdd80,#c4b99b24);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;transition:transform .55s var(--ease);z-index:-1;pointer-events:none}.letter-to{font-size:17px;color:#354033;margin-bottom:12px}.envelope-front strong{font-size:clamp(48px,5.2vw,76px);font-weight:400;margin:0 0 18px;line-height:1.3}.letter-seal{display:inline-flex;align-items:center;min-height:44px;padding:8px 24px;background:#3d5144;color:#f3eee0;font-size:18px}.play-letter summary:hover .letter-seal{background:#2e4336}.play-letter[open]{transform:rotate(0)}.play-letter[open] .envelope-front:before{transform:rotateX(170deg)}.play-letter[open] .letter-seal{background:transparent;color:var(--muted)}.letter-inside{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:32px;padding:14px 40px 36px}.letter-inside h2{font-size:30px}.letter-inside p{font-size:18px;margin:14px 0 20px}.letter-inside .note{max-width:46em;font-size:16px;color:var(--muted);margin-bottom:0}.letter-inside .action{align-self:center;white-space:nowrap;min-height:48px;padding:10px 30px}.other-games{max-width:1244px;margin:0 auto}.other-games h2{font-size:26px;font-weight:400}.minor-games{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px;list-style:none;margin:24px 0 0;padding:0}.minor-games li{min-width:0}.minor-games h3{font-size:24px;font-weight:400;line-height:1.5}.minor-games p{font-size:17px;line-height:1.8;color:#c7ccbe;margin-top:12px}.minor-games span{display:block;font-size:14px;color:#c7ccbe;margin-top:20px}body.game-active{background:#151e19;overflow:hidden}.game-active .site-header,.game-active .site-footer{display:none}.game-active main{max-width:none;padding:0}.game-bar{height:60px;background:#26382d;display:flex;align-items:center;justify-content:space-between;padding:0 24px;font-size:18px;gap:20px}.game-bar a{padding:8px 0}.game-frame{display:block;width:100%;height:calc(100dvh - 60px);border:0;background:#111}
@supports(interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}.play-letter::details-content{height:0;overflow:clip;transition:height .55s var(--ease),content-visibility .55s allow-discrete}.play-letter[open]::details-content{height:auto}}@media(hover:hover){.shelf-book:hover{transform:translateY(-14px) rotate(0)}}
@media(max-width:1050px){.brand{display:block;font-size:28px}.brand span{display:block;font-size:15px;margin-top:3px}.site-header{padding:28px 42px}.book-rail{gap:34px}.shelf-book{flex-basis:210px}.book-open{gap:28px}.lab-invitation{left:auto;right:28px;transform:none;bottom:36px}}
@media(max-width:760px){body{font-size:18px}.site-header{display:block;padding:22px 22px 12px}.brand{font-size:26px;line-height:1.4}.brand span{font-size:14px;margin-top:5px}.site-header nav{font-size:18px;gap:30px;margin-top:16px}.site-header nav a{padding:6px 0}main{padding:0 22px}.site-footer{margin:38px 22px 0;padding:20px 0 24px;display:block;font-size:15px}.site-footer span{display:block;margin-top:12px}.page-heading{display:block;margin-top:28px}.page-heading p{font-size:18px;margin-top:14px}body[data-page=home] .site-header{padding:22px 22px 36px}body[data-page=home] .site-header nav{margin-top:10px}.lab-scene{height:100svh;min-height:760px}.lab-camera{inset:80px 0 100px}.lab-world{left:calc(50% - max(50cqw,33.333333cqh));top:calc(50% - max(50cqh,75cqw));width:max(100cqw,66.666667cqh);height:max(100cqh,150cqw)}.lab-environment{mask-image:linear-gradient(transparent,#000 5%,#000 95%,transparent)}.target-caption{padding:5px 12px 7px;bottom:3%}.target-caption strong{font-size:24px}.target-caption small{font-size:13px}.target-library .target-caption{bottom:-10%}.target-play .target-caption{bottom:-8%}.target-workshop .target-caption{bottom:8%}.crt-light{left:9%;top:39%;width:15%;height:12%}.lab-invitation{bottom:35px;left:50%;right:auto;transform:translateX(-50%);font-size:16px;padding:6px 14px}.lab-status{bottom:98px;font-size:16px}.journey-cancel{right:20px;bottom:24px;font-size:15px;padding:8px 14px}.library-desk{margin-top:18px}.book-rail{justify-content:flex-start;gap:24px;padding:26px 8px 28px}.shelf-book{flex-basis:188px;min-height:265px;padding:24px 20px}.book-cover-title{font-size:29px}.book-cover-note{font-size:15px}.book-author{font-size:19px}.rail-controls{font-size:14px;gap:12px;align-items:flex-start}.rail-controls>div{gap:12px}.rail-controls>span{max-width:11em;padding-top:8px}.rail-controls button{font-size:15px}.book-open{display:block;margin-top:28px}.book-visual{position:relative;top:auto}.book-visual>img{height:auto;max-height:none}.book-introduction{padding:26px 24px 30px}.book-introduction h2{font-size:34px}.book-directory{margin-top:34px;padding:22px}.open-title{height:200px}.open-title>span{font-size:38px}.reader-top{font-size:16px;gap:16px;margin:20px auto}.reading{margin:26px -10px 0;padding:28px 22px 36px}.reading h1{font-size:33px}.book-name{font-size:17px;margin-bottom:28px}.prose{font-size:20px;line-height:1.95}.prose h2{font-size:25px}.prose blockquote{font-size:19px;padding:0 14px}.reading-nav{font-size:16px;gap:10px;margin-top:36px}.chapter-art img{margin-bottom:30px}.letter-desk{margin:32px 0 40px}.envelope-front{min-height:330px;padding:24px}.envelope-art{height:auto;aspect-ratio:16/9;object-position:center;opacity:.7;mask-image:linear-gradient(#000 58%,transparent)}.envelope-front:after{background:linear-gradient(0deg,#e4ddcd 0%,#e4ddcde6 32%,#e4ddcd00 75%)}.letter-to{font-size:15px;margin-bottom:10px}.envelope-front strong{font-size:44px;margin-bottom:16px}.letter-seal{font-size:16px;padding:8px 22px}.letter-inside{grid-template-columns:1fr;gap:22px;padding:8px 24px 28px}.letter-inside h2{font-size:26px}.letter-inside p{font-size:17px}.letter-inside .action{justify-self:start}.other-games h2{font-size:23px}.minor-games{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 20px;margin-top:20px}.minor-games h3{font-size:20px}.minor-games p{font-size:16px}.minor-games span{margin-top:14px}.game-bar{padding:0 14px;font-size:15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.drag-rail{scroll-behavior:auto}.target-caption,.crt-light,.play-letter,.envelope-front:before,.shelf-book,.plan-folder{transition:none}.play-letter::details-content{transition:none}}

.volume-group{list-style:none}.volume-group h3{font-size:22px;font-weight:400;color:var(--ink);padding-top:26px;margin-bottom:4px}.volume-group:first-child h3{padding-top:0}.volume-chapters{list-style:none;margin:0;padding:0}.reader-top .chapter-menu{list-style:none;padding:20px;max-width:calc(100vw - 44px)}.chapter-menu .volume-group{padding:0}.chapter-menu .volume-group h3{font-size:18px;padding-top:18px;margin-bottom:6px}.chapter-menu .volume-group:first-child h3{padding-top:0}.chapter-menu a{display:block;padding:8px 0;overflow-wrap:anywhere}.chapter-menu a[aria-current=page]{color:#815020;text-decoration-thickness:2px}

.shelf-book.has-cover{position:relative;isolation:isolate;min-height:348px;color:#f3eee1;background:#263532}.shelf-cover-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}.shelf-book.has-cover:after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(#162522b3,transparent 52%,#162522a6)}.has-cover .book-cover-note{font-size:15px;margin-top:10px}.has-cover .book-author{font-size:18px}@media(max-width:760px){.shelf-book.has-cover{min-height:282px}.has-cover .book-cover-title{font-size:29px}.has-cover .book-cover-note{font-size:14px}}

/* A small wall portrait opens a paper side of the room. */
.profile-paper{position:absolute;left:14.7%;top:10.5%;z-index:4;display:block;width:5.2%;min-width:44px;text-decoration:none}.profile-sketch{position:relative;display:block;padding:5px;background:#cbc1ab;transform:perspective(600px) rotateY(34deg) skewY(8deg) rotate(-2deg);transform-origin:left center;box-shadow:2px 3px 5px #10191455}.profile-sketch:before{content:'';position:absolute;left:24%;top:-4px;width:52%;height:10px;background:#c7bfa68c}.profile-sketch img{width:100%;height:auto;aspect-ratio:2/3;object-fit:cover;mix-blend-mode:multiply;filter:contrast(.7) opacity(.78)}.profile-label{position:absolute;left:50%;bottom:-56px;transform:translateX(-50%);display:block;min-width:74px;min-height:44px;padding:5px 12px 7px;text-align:center;white-space:nowrap;background:#1c2622ed;color:#f0ebdc;box-shadow:0 6px 12px #07100d33}.profile-label strong{display:block;font-size:22px;font-weight:400;line-height:1.4}.profile-label small{display:block;font-size:12px;line-height:1.4;color:#d1d6c7}.profile-paper:hover .profile-label,.profile-paper:focus-visible .profile-label{background:#36493c}.clue-sheet{position:fixed;inset:0;display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:54px;align-items:center;width:min(880px,calc(100vw - 64px));max-height:calc(100dvh - 64px);margin:auto;padding:58px;border:0;overflow:auto;background:#ded6c3;color:#2b3532;color-scheme:light;box-shadow:8px 18px 48px #07100d66;perspective:1200px}.clue-sheet:not([open]){display:none}.clue-sheet::backdrop{background:#17231dcc;backdrop-filter:blur(3px)}.clue-close{position:absolute;right:12px;top:10px;z-index:2;display:grid;place-items:center;width:44px;height:44px;border:0;background:transparent;color:#2b3532;font:36px/1 KingHwa,serif}.clue-close:hover{background:#c6bca6}.clue-portrait{margin:0}.clue-portrait img{display:block;width:100%;height:auto;aspect-ratio:2/3;object-fit:cover;mix-blend-mode:multiply;filter:contrast(.88)}.clue-caption{font-size:14px;margin-top:12px;text-align:center;color:#425047}.clue-copy h2{font-size:30px;line-height:1.5;margin-bottom:32px}.clue-copy p{font-size:19px;line-height:1.9;margin-top:24px;overflow-wrap:anywhere}@media(max-width:760px){.profile-paper{left:12%;top:18%;width:8.7%;min-width:44px}.profile-sketch{padding:3px}.profile-label{bottom:-48px;min-width:64px;padding:3px 9px 5px}.profile-label strong{font-size:18px}.profile-label small{font-size:11px}.clue-sheet{grid-template-columns:1fr;gap:22px;width:calc(100vw - 32px);max-height:calc(100dvh - 32px);padding:48px 26px 30px}.clue-portrait{width:56%;max-width:180px;margin:auto}.clue-caption{font-size:12px;margin-top:8px}.clue-copy h2{font-size:25px;margin-bottom:22px}.clue-copy p{font-size:17px;line-height:1.8;margin-top:18px}.site-header nav{flex-wrap:wrap;gap:8px 28px}}
.prose figure{margin:32px 0}.prose figure img{margin:0 auto}.prose figcaption{max-width:65ch;margin:12px auto 0;font-size:16px;line-height:1.6;text-align:center;color:var(--muted);overflow-wrap:anywhere}.prose .footnote{font-size:.82em;line-height:1.8}.footnote-ref{font-size:.7em;line-height:0;vertical-align:super}.footnote-ref a{padding:3px}.prose [id]{scroll-margin-top:24px}

/* Illustrated project folders are opened by hand. */
.workbench{max-width:1060px;margin:42px auto 0;color:var(--ink);color-scheme:light}.plan-stack{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:34px;padding:24px 18px 34px}.plan-folder{position:relative;display:block;aspect-ratio:2/3;text-decoration:none;background:#d7c7a9;transform:rotate(-2deg);box-shadow:6px 12px 24px #10191366}.plan-folder:nth-child(2){transform:rotate(1deg)}.plan-folder:nth-child(3){transform:rotate(-1deg)}.plan-folder img{width:100%;height:100%;object-fit:cover}.plan-cover-copy{position:absolute;left:22px;right:22px;bottom:20px;display:flex;flex-direction:column;gap:5px;color:#2b3532}.plan-cover-copy strong{font-size:32px;font-weight:400;line-height:1.15;max-width:14ch;overflow-wrap:anywhere}.plan-folder[data-project="zhangyi"] .plan-cover-copy strong{max-width:none;font-size:clamp(14px,1.9vw,24px);white-space:nowrap;overflow-wrap:normal}.plan-cover-copy>span{font-size:17px}.plan-cover-copy small{font-size:15px;margin-top:7px;text-decoration:underline;text-underline-offset:4px}.plan-folder:hover .plan-cover-copy small,.plan-folder:focus-visible .plan-cover-copy small{color:#74451d}.project-dossier{position:fixed;inset:0;width:min(960px,calc(100vw - 64px));max-width:none;max-height:none;padding:0;margin:auto;border:0;overflow:visible;background:var(--paper);color:var(--ink);color-scheme:light;box-shadow:8px 18px 48px #07100d66}.project-dossier::backdrop{background:#17231dcc;backdrop-filter:blur(3px)}.project-document{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);gap:40px;align-items:start;max-height:calc(100dvh - 64px);overflow:auto;padding:52px 44px 44px}.project-cover{width:100%;height:auto;aspect-ratio:2/3;object-fit:cover}.project-close{position:absolute;right:10px;top:8px;z-index:2;display:grid;place-items:center;width:44px;height:44px;border:0;background:var(--paper);color:var(--ink);font:36px/1 KingHwa,serif}.project-close:hover{background:#c6bca6}.plan-title h2{font-size:38px;line-height:1.2;overflow-wrap:anywhere}.plan-title .project-type{font-size:16px;color:var(--muted);margin:10px 0 22px}.plan-title p{font-size:21px}.plan-content{margin-top:28px}.plan-content h3{font-size:25px}.plan-content ul{padding-left:1.2em;margin:18px 0}.plan-content li{font-size:18px;margin:8px 0}.plan-content p{font-size:17px;margin:22px 0}.plan-content .note{color:var(--muted)}.plan-content .action{font-size:18px}.prose p.story-paragraph{text-indent:2em}.prose p.prose-centered{text-align:center;text-indent:0}
@media(max-width:760px){.workbench{margin-top:24px}.plan-stack{display:flex;gap:26px;padding:20px 12px 28px;scroll-snap-type:x proximity}.plan-folder{flex:0 0 254px;scroll-snap-align:center}.plan-cover-copy{left:19px;right:19px;bottom:18px}.plan-cover-copy strong{font-size:28px}.plan-folder[data-project="zhangyi"] .plan-cover-copy strong{font-size:22px}.plan-cover-copy>span{font-size:15px}.plan-cover-copy small{font-size:14px}.project-dossier{width:calc(100vw - 32px)}.project-document{grid-template-columns:1fr;gap:24px;max-height:calc(100dvh - 32px);padding:52px 26px 30px}.project-cover{width:120px}.plan-title h2{font-size:30px}.project-dossier[data-project="zhangyi"] .plan-title h2{font-size:clamp(22px,6.5vw,30px);white-space:nowrap;overflow-wrap:normal}.plan-title p{font-size:19px}.plan-content li{font-size:17px}.plan-content .action{font-size:17px;padding:8px 18px}}

/* The first visit begins inside the room, before its controls appear. */
body[data-page=home] .site-header nav{display:none}
body[data-entry]{overflow:hidden}
body[data-entry] .site-header,body[data-entry] .skip,body[data-entry] .room-target,body[data-entry] .profile-paper,body[data-entry] .lab-invitation{visibility:hidden;pointer-events:none}
.lab-preload{position:fixed;inset:0;display:block;background:#303a35}
.lab-preload img{width:100%;height:100%;object-fit:cover}
.lab-entry{position:fixed;inset:0;z-index:20;display:block;width:100%;height:100%;padding:0;border:0;background:transparent;color:#eee9da;cursor:pointer;font:16px/1.6 KingHwa,'Songti SC',SimSun,serif}
.lab-entry span{position:absolute;left:20px;right:20px;bottom:max(34px,env(safe-area-inset-bottom));text-align:center;text-shadow:0 2px 5px #142019,0 1px 3px #142019}
body[data-entry=entering] .lab-entry span{visibility:hidden}
.shelf-lamplight,.workshop-lamplight{position:absolute;z-index:2;width:42%;height:70%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;background:radial-gradient(ellipse at 50% 20%,#edc47c45,transparent 70%);mix-blend-mode:screen}
.workshop-lamplight{width:26%;height:60%;background:radial-gradient(ellipse at 50% 15%,#f4d69866,transparent 65%)}
.veil-workshop{background:transparent}
.threshold-shadow{position:absolute;inset:-20% -15%;background:linear-gradient(90deg,transparent 15%,#101b16f2 46%,#101b16 60%,transparent 94%)}
@media(max-width:760px){.lab-entry{font-size:15px}.lab-preload{inset:80px 0 100px}.lab-preload img{mask-image:linear-gradient(transparent,#000 5%,#000 95%,transparent)}}

body[data-page=home] .brand span{display:none}


@media(min-width:761px) and (max-aspect-ratio:1/1){.lab-camera{inset:80px 0 100px}.lab-world{left:calc(50% - max(50cqw,33.333333cqh));top:calc(50% - max(50cqh,75cqw));width:max(100cqw,66.666667cqh);height:max(100cqh,150cqw)}.lab-environment{mask-image:linear-gradient(transparent,#000 5%,#000 95%,transparent)}.lab-preload{inset:80px 0 100px}.lab-preload img{mask-image:linear-gradient(transparent,#000 5%,#000 95%,transparent)}.profile-paper{left:max(12%,calc((100% - 100cqw)/2 + 44px));top:max(18%,calc((100% - 100cqh)/2 + 110px));width:8.7%;min-width:44px}.crt-light{left:9%;top:39%;width:15%;height:12%}}

/* Reframed v4 plates keep the Nixie bank inside the post-entry view. */
.target-library{left:34%;top:14%;width:29%;height:55%;--focus-x:48.5;--focus-y:38.4}
.target-play{left:11%;top:32%;width:26%;height:35%;--focus-x:24.5;--focus-y:46.4}
.target-workshop{left:67%;top:15%;width:23%;height:60%;--focus-x:79;--focus-y:43}
.profile-paper{left:20.4%;top:12%}
.crt-light{left:22%;top:41%;width:7%;height:12%}
@media(max-width:760px),(max-aspect-ratio:1/1){.target-library{left:32%;top:18%;width:35%;height:44%;--focus-x:49.5;--focus-y:40}.target-play{left:8%;top:35%;width:28%;height:25%;--focus-x:25.2;--focus-y:44.9}.target-workshop{left:67%;top:24%;width:31%;height:42%;--focus-x:81;--focus-y:47}.profile-paper{left:25.5%;top:max(16.5%,calc((100% - 100cqh)/2 + 84px));max-width:60px}.crt-light{left:21%;top:42%;width:8%;height:8%}.target-play .target-caption{transform:translateX(-50%)}.target-workshop .target-caption{transform:translateX(calc(-50% - 12px))}}

@media(max-width:760px),(max-aspect-ratio:1/1){body:not([data-page=home]):before{background-image:linear-gradient(#28322ed0,#28322edb),url('assets/plates/laboratory-room-mobile.webp?v=unified-reframed-v4')}}
/* Intrinsic image dimensions reserve space while responsive art keeps its ratio. */
.chapter-art img{height:auto}
.chapter-locked-row{position:relative}.chapter-locked{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:17px 0;border:0;border-bottom:1px solid var(--line);background:transparent;color:#777a71;text-align:left;font-size:21px;cursor:not-allowed}.chapter-locked svg{flex:none}.chapter-lock-tip{display:none;position:absolute;inset-inline-start:0;top:calc(100% - 5px);width:min(300px,100%);padding:10px 13px;background:var(--night);color:var(--light);font-size:16px;line-height:1.6;box-shadow:0 8px 18px #10191340;z-index:6}.chapter-locked-row:hover>.chapter-lock-tip,.chapter-locked-row:focus-within>.chapter-lock-tip,.chapter-locked-row.show-lock-tip>.chapter-lock-tip{display:block}.chapter-menu .chapter-locked{font-size:inherit;padding:8px 0;border-bottom:0}.chapter-menu .chapter-lock-tip{position:relative;top:auto;margin-bottom:6px}.reading-storage-note{font-size:16px;color:var(--muted);margin-bottom:24px}

.site-header{display:flex;justify-content:flex-start;gap:12px}
.bgm-toggle{flex:0 0 44px;width:44px;height:44px;display:grid;place-items:center;padding:0;border:0;background:transparent;color:#eee9d6;cursor:pointer;transition:color .2s,transform .2s}
.bgm-toggle:hover{color:var(--amber);transform:scale(1.12)}
.bgm-toggle:active{transform:scale(.94)}
.bgm-toggle svg{filter:drop-shadow(0 2px 3px #111b16)}
.bgm-toggle:focus-visible{outline:2px solid #eee9d6;outline-offset:4px}
.bgm-toggle[hidden],body[data-entry] .bgm-toggle,.bgm-toggle .bgm-slash{display:none}
.bgm-toggle.is-muted .bgm-waves{display:none}
.bgm-toggle.is-muted .bgm-slash{display:block}
.bgm-toggle{position:relative}.bgm-toggle[data-music-state=loading]::after,.bgm-toggle[data-music-state=slow]::after,.bgm-toggle[data-music-state=error]::after{position:absolute;top:calc(100% + 2px);left:50%;transform:translateX(-50%);font-size:12px;line-height:1.4;white-space:nowrap;color:var(--light);background:var(--night);padding:2px 5px;pointer-events:none}.bgm-toggle[data-music-state=loading]::after{content:'音乐载入中'}.bgm-toggle[data-music-state=slow]::after{content:'音乐仍在载入'}.bgm-toggle[data-music-state=error]::after{content:'音乐未播放'}
.book-reading-actions{display:flex;flex-wrap:wrap;gap:12px}
.book-reading-actions .action.secondary:hover{background:#d0ccbc}
.book-reading-actions .action:disabled{background:transparent;color:var(--muted);opacity:.55;cursor:not-allowed}

.reading-archive{max-width:1120px;margin:28px auto 0;padding:20px 24px;border:1px solid #8c9a8166;color:var(--light);font-size:17px;line-height:1.7}.reading-archive p{margin:10px 0;max-width:60ch}.latest-reading{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 18px;text-decoration:none}.latest-reading>span:first-child{color:#bcc8b4;font-size:15px}.latest-reading strong{font-size:23px;font-weight:400}.latest-reading>span:last-child{color:#d6dbc9}.latest-reading:hover strong{text-decoration:underline;text-underline-offset:5px}.reading-archive details{margin-top:12px}.reading-archive summary{cursor:pointer;min-height:44px;padding:7px 0}.reading-archive-actions{display:flex;flex-wrap:wrap;gap:12px}.reading-archive button,.reading-import-label{display:inline-flex;align-items:center;min-height:44px;padding:7px 15px;border:1px solid #9da98f;background:transparent;color:inherit;font:inherit;cursor:pointer}.reading-import-label{position:relative;overflow:hidden}.reading-import-label input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.reading-import-label:focus-within{outline:2px solid var(--amber);outline-offset:4px}.reading-backup-status:empty{display:none}.reading-archive-note{color:#c7ccbe}
.reader-top{flex-wrap:wrap;justify-content:flex-start;gap:8px 24px}.reader-top>a{margin-right:auto}.reading-settings-panel{position:absolute;right:0;z-index:6;width:270px;max-width:calc(100vw - 44px);padding:18px 20px;background:var(--paper);color:var(--ink);box-shadow:0 12px 30px #111b1580}.reading-settings-panel label{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:12px}.reading-settings-panel select{min-height:44px;min-width:130px;padding:6px 10px;border:1px solid #8d917f;background:#f0eddf;color:var(--ink);font:inherit;font-size:18px}.reading-settings-panel p{font-size:15px;color:var(--muted);line-height:1.6}.reading-bookmark{min-height:44px;padding:6px 0;border:0;background:transparent;color:inherit;font:inherit;text-decoration:underline;text-underline-offset:5px;cursor:pointer}.reading-bookmark-status{flex-basis:100%;font-size:15px;color:#c7ccbe}.reading-bookmark-status:empty{display:none}.reading[data-size=small] .prose{font-size:20px}.reading[data-size=standard] .prose{font-size:22px}.reading[data-size=large] .prose{font-size:26px}.reading[data-spacing=compact] .prose{line-height:1.7}.reading[data-spacing=relaxed] .prose{line-height:1.95}.reading[data-spacing=wide] .prose{line-height:2.25}.reading .prose blockquote{font-size:.96em}.reading[data-paper=light]{background:#f4f1e7}.reading[data-paper=night]{--ink:#e1decf;--muted:#b7bfad;--line:#77816c66;background:#202b25;color:var(--ink);color-scheme:dark}.reading-restore-dialog{width:min(540px,calc(100vw - 32px));max-height:calc(100dvh - 32px);margin:auto;padding:32px;border:1px solid #a6ab94;background:var(--paper);color:var(--ink);font-size:18px;line-height:1.8}.reading-restore-dialog::backdrop{background:#17231dcc}.reading-restore-dialog h2{font-size:28px;margin-bottom:18px;font-weight:400}.reading-restore-dialog p{margin:14px 0}.reading-restore-dialog>div{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px}.reading-restore-dialog button{min-height:44px;padding:7px 14px;border:1px solid #747d65;background:transparent;color:inherit;font:inherit;cursor:pointer}.reading-restore-dialog [data-confirm-reading-restore]{background:var(--night);color:var(--light)}
@media(max-width:760px){.reading-archive{padding:16px 18px;font-size:16px}.latest-reading{gap:4px 12px}.latest-reading>span:last-child{flex-basis:100%}.reader-top{gap:6px 20px}.reader-top>a{flex-basis:100%;margin-bottom:4px}.reading[data-size=small] .prose{font-size:18px}.reading[data-size=standard] .prose{font-size:20px}.reading[data-size=large] .prose{font-size:24px}.reading-restore-dialog{padding:24px}.reading-settings-panel{right:auto;left:0}}

.reader-loader{max-width:none;max-height:none;width:100%;height:100%;margin:0;padding:24px;border:0;background:#101a16ed;color:#e8e6ce;overflow:auto}
.reading-bookmark{position:fixed;right:22px;bottom:max(22px,env(safe-area-inset-bottom));z-index:7;padding:8px 15px;border:1px solid #8c9a81;background:var(--night);color:var(--light);font-size:16px;box-shadow:0 4px 14px #10191344}.reading-bookmark-status:not(:empty){position:fixed;right:22px;bottom:78px;z-index:7;max-width:calc(100vw - 44px);padding:7px 12px;background:var(--night);color:var(--light);line-height:1.6;pointer-events:none}
.reader-loader[open]{display:grid;place-items:center}
.reader-loader::backdrop{background:#101a16b3}
.reader-loader-screen{width:min(480px,100%);padding:32px 36px 24px;border:1px solid #6d8064;background:#18271f;box-shadow:0 18px 56px #070e0966}
.reader-loader h2{margin:0;font-size:30px;font-weight:400;line-height:1.6}
.reader-loader-runway{height:107px;position:relative;margin:12px 0 20px;overflow:hidden}
.reader-loader-cat-position{width:calc(100% - 96px);height:110px}
.reader-loader-cat{display:block;width:96px;height:128px;background:url('assets/plates/maomao-run.webp') 0 0/400% 100% no-repeat;animation:maomao-run .48s steps(4) infinite}
.reader-loader-line{position:absolute;inset:90px 0 auto;height:2px;background:#4b604c}
.reader-loader-status{min-height:3.2em;margin:12px 0 16px;color:#c4d2ba;font-size:18px;line-height:1.6}
.reader-loader-actions{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:12px}
.reader-loader-actions[hidden]{display:none}
.reader-loader button{min-height:44px;padding:8px 14px;border:1px solid #8d9e7f;background:transparent;color:#e8e6ce;font:inherit;font-size:18px;cursor:pointer}
.reader-loader button:hover{background:#314736}
.reader-loader button:focus-visible{outline:2px solid #e5bc7c;outline-offset:4px}
.reader-loader .reader-loader-cancel{padding-inline:0;border-color:transparent;color:#c4d2ba;text-decoration:underline;text-underline-offset:5px}
.reader-loader.is-waiting .reader-loader-cat,.reader-loader.is-paused .reader-loader-cat{animation-play-state:paused}
@keyframes maomao-run{to{background-position:133.3333% 0}}
@media(max-width:760px){.reader-loader{padding:22px}.reader-loader-screen{padding:24px}.reader-loader h2{font-size:27px}}
@media(prefers-reduced-motion:reduce){.reader-loader-cat{animation:none}}

.minor-game-open{display:block;min-height:150px;text-decoration:none}.minor-game-open span{text-decoration:underline;text-underline-offset:5px;color:#e8a05a}.minor-game-open:hover h3{color:#f2b879}

/* Small works are framed beneath the featured letter. */
.minor-games .minor-game-frame{position:relative;display:block;aspect-ratio:4/3;margin:0 0 20px;padding:7px;border:8px solid #6d7767;background:#c1c2ae;box-shadow:2px 5px 12px #0e171440;outline:1px solid #a0a58c;outline-offset:-3px;overflow:hidden}.minor-game-frame:before{content:'';position:absolute;inset:6px;border:1px solid #6e776366;pointer-events:none}.minor-game-frame img{width:100%;height:100%;object-fit:cover;object-position:center 38%;background:#232b3b}.minor-games .frame-empty{background:linear-gradient(145deg,#c8c9b6,#aeb6a4)}.frame-empty:after{content:'';position:absolute;inset:14px;background:#b7beab;box-shadow:inset 1px 2px 4px #5b685522}.minor-game-open:hover .minor-game-frame,.minor-game-open:focus-visible .minor-game-frame{outline-color:#e0b18a}.minor-game-open h3{color:#ece7d8}.minor-games p{min-height:3.6em}.minor-games>li>span:last-child,.minor-game-open>span:last-child{margin-top:16px}@media(max-width:760px){.minor-games .minor-game-frame{padding:5px;border-width:6px;margin-bottom:16px}.minor-game-frame:before{inset:4px}.frame-empty:after{inset:10px}.minor-games p{min-height:5.4em}.minor-game-open{min-height:0}}
.reading-settings-panel [data-reading-reset]{min-height:44px;padding:7px 12px;border:1px solid #747d65;background:transparent;color:var(--ink);font:inherit;font-size:16px;cursor:pointer}
