@font-face{font-family:SchoolSerif;src:url('/assets/souvenir/fonts/SourceHanSerifCN-Regular.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
:root{color-scheme:dark;--ink:#090c0b;--paper:#f3f3e9;--muted:#a3aaa2;--green:#a5b7a0;--line:#ffffff24;--serif:SchoolSerif,'Songti SC',SimSun,serif;--sans:'Microsoft YaHei','PingFang SC',sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:85px}body{margin:0;background:var(--ink);color:var(--paper);font-family:var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid var(--green);outline-offset:6px}button:disabled{cursor:wait;opacity:.6}[hidden]{display:none!important}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.4}.skip{position:fixed;top:-100px;left:20px;z-index:30;background:var(--paper);color:var(--ink);padding:14px}.skip:focus{top:10px}
.masthead{position:fixed;top:28px;left:36px;right:36px;display:flex;align-items:center;justify-content:space-between;z-index:10;pointer-events:none}.masthead a,.masthead .edition{pointer-events:auto}.wordmark{display:block;width:255px;height:auto;aspect-ratio:5.3021582734}.edition{display:flex;align-items:center;gap:20px;font-size:12px;letter-spacing:.12em}.edition-note{color:var(--muted);border-left:1px solid var(--line);padding-left:20px}.chapter-nav{position:fixed;left:36px;top:46%;z-index:8;display:grid;gap:18px;font-size:11px;letter-spacing:.1em}.chapter-nav a{display:flex;align-items:center;gap:10px;color:#9da49c;min-height:28px}.chapter-nav a:before{content:'';width:5px;height:5px;background:transparent;border:1px solid #7c887b}.chapter-nav a[aria-current]{color:var(--paper)}.chapter-nav a[aria-current]:before{background:var(--paper);border-color:var(--paper)}
.sequence{height:440svh;position:relative}.stage{height:100svh;min-height:600px;position:sticky;top:0;overflow:hidden;isolation:isolate}.stage:after{content:'';pointer-events:none;position:absolute;inset:0;z-index:5;box-shadow:inset 0 -80px 90px var(--ink);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.12' filter='url(%23n)'/%3E%3C/svg%3E");opacity:.34}#spatial-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:2;touch-action:pan-y;cursor:grab}#spatial-canvas:active{cursor:grabbing}.hero{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:100px 24px 80px;z-index:3;pointer-events:none;transform-origin:50% 47%;will-change:transform,opacity}.hero a{pointer-events:auto}.hero-context{font-size:12px;color:var(--muted);letter-spacing:.35em;margin:0 0 25px}.hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(76px,9.4vw,146px);line-height:1.15;letter-spacing:.04em;text-align:center;margin:0}.hero-subtitle{font-size:15px;letter-spacing:.3em;margin:32px 0 0;color:#c2c8bd}.explore{display:flex;align-items:center;gap:18px;font-size:12px;letter-spacing:.1em;margin-top:50px;padding:12px}.explore svg{width:16px;height:24px}.spatial-label{position:absolute;left:16.5%;top:38%;z-index:1;opacity:0;will-change:opacity,transform;pointer-events:none}.spatial-label p{color:var(--muted);font-size:11px;letter-spacing:.2em;margin:0 0 17px}.spatial-label h2{font-family:var(--serif);font-size:clamp(40px,5.2vw,76px);font-weight:400;line-height:1.3;letter-spacing:.06em;margin:0;color:#d9dfd3}.scene-tools{position:absolute;z-index:7;bottom:95px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:22px;white-space:nowrap;background:#090c0bc7;backdrop-filter:blur(10px);padding:4px 8px;border:1px solid var(--line)}.scene-tools button{border:0;background:transparent;color:var(--paper);width:44px;height:44px;display:grid;place-content:center}.scene-tools button:hover{background:#ffffff14}.scene-tools span{font-size:11px;color:#c3cbbf;letter-spacing:.1em}.bottom-rail{position:absolute;bottom:28px;left:36px;right:36px;display:flex;align-items:center;gap:30px;z-index:7;font-size:11px;letter-spacing:.1em;color:#c0c8bc}.bottom-rail a{display:flex;gap:20px;align-items:center;padding:12px 0}.bottom-rail a span{font-size:20px}.progress-track{flex:1;height:1px;background:var(--line)}.progress-track span{display:block;width:0;height:1px;background:#c9d6bc}.scene-fallback{position:absolute;inset:15%;display:flex;justify-content:center;flex-direction:column;text-align:center;background:var(--ink);z-index:4}.scene-fallback p{font-family:var(--serif);font-size:40px}.scene-fallback span{font-size:14px;color:var(--muted)}
.workshop-entry{min-height:100svh;display:grid;grid-template-columns:1.05fr 1fr;align-items:center;gap:8%;padding:150px 12% 120px 17%;position:relative;background:var(--ink);overflow:hidden}.entry-context{font-size:12px;letter-spacing:.2em;color:var(--green);margin:0 0 26px}.entry-copy h2{font-family:var(--serif);font-size:clamp(45px,5.4vw,80px);font-weight:400;line-height:1.3;letter-spacing:.04em;margin:0}.entry-description{font-size:14px;line-height:2.1;color:#b6bfb2;margin:30px 0 32px}.enter-workshop{background:var(--paper);color:var(--ink);border:1px solid var(--paper);padding:18px 22px;display:flex;align-items:center;justify-content:space-between;gap:35px;font-size:13px;min-height:56px;transition:background .2s}.enter-workshop:hover{background:#d3dfc9}.entry-note{max-width:320px;font-size:11px;line-height:1.9;color:#a6aea1;margin-top:26px}.entry-art{height:470px;position:relative;isolation:isolate}.art-circle{position:absolute;left:20%;top:3%;width:70%;aspect-ratio:1;border-radius:50%;background:radial-gradient(ellipse at 23% 20%,#ded1a8,#85987a 44%,#233b30 74%,#101c15);box-shadow:10px 20px 80px #87986c0a;transform:rotate(-30deg) scaleX(.67);border:1px solid #c6cba45c}.art-circle.two{width:65%;top:23%;left:15%;transform:rotate(40deg) scaleX(.48);filter:brightness(.6);z-index:-1}.art-ring{position:absolute;inset:9% 10% 15%;border:1px solid #b9a57c52;border-radius:50%;transform:rotate(-35deg) scaleX(.7)}.art-text{position:absolute;left:35%;top:28%;font-family:var(--serif);font-size:100px;line-height:1.05;color:#e2dfbf;mix-blend-mode:screen}.art-caption{position:absolute;bottom:1%;left:0;right:0;text-align:center;font-size:10px;letter-spacing:.4em;color:#a4b49b}.page-footer{padding:26px 36px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font-size:11px;color:#a6afa0}
#workshop-dialog{position:fixed;inset:0;width:100vw;max-width:none;height:100dvh;max-height:none;border:0;margin:0;padding:0;background:#f4f2ed;color:#17231c}#workshop-dialog::backdrop{background:#090c0b}.dialog-bar{height:66px;border-bottom:1px solid #26312728;display:flex;align-items:center;gap:20px;padding:0 24px;background:#f4f2ed}.dialog-bar h2{font-size:16px;margin:0;white-space:nowrap}.dialog-bar #module-status{font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dialog-bar button{border:1px solid #52624c60;background:transparent;padding:9px 14px;white-space:nowrap;color:#17231c}.dialog-bar button span{margin-left:18px;font-size:20px}#module-container{height:calc(100dvh - 66px);overflow:auto}body.module-open{overflow:hidden}
@media(min-width:1800px){.hero h1{font-size:170px}.spatial-label{left:18%}.workshop-entry{padding-left:20%;padding-right:17%}}
@media(max-width:900px){.chapter-nav{left:20px;font-size:10px}.masthead{left:20px;right:20px;top:20px}.wordmark{width:220px}.edition{gap:12px}.edition-note{padding-left:12px}.hero h1{font-size:110px}.spatial-label{left:19%}.workshop-entry{padding-left:17%;padding-right:6%;gap:3%}.entry-art{height:370px}.bottom-rail{left:20px;right:20px;gap:18px}.art-text{font-size:80px}}
@media(max-width:600px){.masthead{top:17px;left:18px;right:18px;align-items:flex-start}.wordmark{width:192px}.edition{flex-direction:column;align-items:flex-end;gap:7px;font-size:10px;letter-spacing:.05em}.edition-note{border:0;padding:0;font-size:9px}.chapter-nav{left:auto;right:18px;top:91px;display:flex;gap:17px;font-size:10px}.chapter-nav a{gap:5px;min-height:32px}.chapter-nav a:before{width:3px;height:3px}.hero{padding-top:130px;padding-bottom:100px}.hero h1{font-size:clamp(58px,15.8vw,96px);line-height:1.3;letter-spacing:.02em}.hero-context{font-size:11px;letter-spacing:.25em;margin-bottom:22px}.hero-subtitle{font-size:12px;margin-top:25px}.explore{margin-top:37px;font-size:11px;gap:14px}.stage{min-height:560px}.sequence{height:370svh}.spatial-label{top:30%;left:8%}.spatial-label h2{font-size:42px}.spatial-label p{font-size:10px}.scene-tools{bottom:85px;gap:10px}.scene-tools span{font-size:10px}.scene-tools button{width:44px}.bottom-rail{left:18px;right:18px;bottom:20px;gap:12px;font-size:10px}.bottom-rail a{gap:8px}.bottom-rail #chapter-status{min-width:40px}.workshop-entry{padding:120px 28px 70px;grid-template-columns:1fr;gap:45px;min-height:auto}.entry-copy h2{font-size:54px}.entry-description{font-size:13px}.entry-art{height:340px;width:100%;max-width:360px;margin:auto;grid-row:2}.entry-note{max-width:100%;font-size:11px}.enter-workshop{width:100%;font-size:13px}.page-footer{padding:25px 20px;flex-direction:column;font-size:10px}.dialog-bar{padding:0 12px;gap:10px}.dialog-bar h2{font-size:13px}.dialog-bar button{font-size:12px;padding:8px 10px}.dialog-bar button span{margin-left:8px}.dialog-bar #module-status{font-size:10px}.art-text{font-size:85px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.sequence{height:170svh}.hero{will-change:auto}.explore{transition:none}.spatial-label{display:none}.scene-tools{display:none!important}.stage:after{opacity:.15}}
/* The stage and WebGL viewport always share their actual size, including landscape. */
.stage{min-height:0}
@media(max-height:600px){.masthead{top:14px}.wordmark{width:205px}.hero{padding:80px 24px 64px}.hero-context{display:none}.hero h1{font-size:clamp(44px,14svh,78px);line-height:1.15}.hero-subtitle{font-size:11px;margin-top:13px}.explore{margin-top:12px;padding:8px;font-size:10px}.spatial-label{top:32%}.spatial-label h2{font-size:36px}.scene-tools{bottom:65px}.bottom-rail{bottom:10px}.chapter-nav{top:40%}}
@media(max-width:600px){.spatial-label{display:none}}
@media(prefers-reduced-motion:reduce){.sequence{height:100svh}#spatial-canvas{display:none}.chapter-nav a[data-seek="0.5"]{display:none}}
