/* ───── 公用 ───── */
.level { min-height: 100vh; }
.center { text-align: center; }
.level-end { text-align: center; padding: 8vh 1.5rem 14vh; display: flex; flex-direction: column; align-items: center; gap: 1.2rem; }
.level-end .got { font-size: 1.3rem; letter-spacing: .3em; padding: .6em 1.6em; border: var(--line-strong); position: relative; }
.level-end .got::after { content: ''; position: absolute; inset: 4px; border: 1px solid rgba(43,38,34,.25); }
.level-end .got b { font-size: 1.6em; }
body.night .level-end .got { border-color: rgba(239,231,214,.6); }
.got { font-size: 1.15rem; letter-spacing: .3em; padding: .5em 1.2em; border: var(--line-strong); display: inline-block; margin: 1rem 0; }
.drag-ghost { box-shadow: 0 10px 30px rgba(0,0,0,.25); }
.dragging { opacity: .35; }
.over { outline: 2px dashed var(--cinnabar); outline-offset: 3px; }
.stage-head .goal { max-width: 70vw; }
.check { display: flex; gap: 1.2rem; align-items: center; margin-top: 1.4rem; flex-wrap: wrap; }
.check .msg { color: var(--cinnabar); }

/* ───── 序章 ───── */
.dark-stage { position: relative; min-height: calc(100vh - 3rem); background: var(--paper-night); overflow: hidden; }
.dark-stage .glow { position: absolute; left: 50%; top: 42%; width: 0; height: 0; border-radius: 50%; background: radial-gradient(circle, rgba(244,194,106,.35), rgba(244,194,106,0) 70%); transform: translate(-50%,-50%); transition: width 1.2s var(--ease), height 1.2s var(--ease); }
.dark-stage.lit .glow { width: 900px; height: 900px; }
.dark-stage .lantern-slot { position: absolute; left: 50%; top: 42%; transform: translate(-50%,-50%); filter: drop-shadow(0 0 0 transparent); transition: filter 1s; }
.dark-stage.lit .lantern-slot { filter: drop-shadow(0 0 30px rgba(244,194,106,.7)); }
.dark-stage .lantern-slot.over { outline: none; }
.dark-stage .lantern-slot.over svg { filter: brightness(1.3); }
.dark-stage .fire { position: absolute; cursor: grab; touch-action: none; filter: drop-shadow(0 0 12px rgba(232,162,74,.8)); }
.dark-stage .fire:active { cursor: grabbing; }
.door-wrap { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1.2rem; background: rgba(29,26,23,.85); padding: 2rem 1rem; text-align: center; }
.door-wrap .door-svg { width: min(260px, 50vw); opacity: .9; }
.door-wrap .inscription { color: var(--paper); font-size: 1.15rem; letter-spacing: .2em; min-height: 1.6em; }
.door-wrap .note-under { color: var(--ink-faint); max-width: 34em; margin: 0; }
.lock { display: flex; gap: .8rem; justify-content: center; }
.lock .wheel { display: flex; flex-direction: column; align-items: center; width: 3.2rem; border: 1px solid rgba(239,231,214,.35); background: #26221e; color: var(--paper); }
.lock .wheel button { color: var(--ink-faint); font-size: .7rem; padding: .25em; width: 100%; }
.lock .wheel button:hover { color: var(--paper); }
.lock .wheel .face { display: flex; flex-direction: column; align-items: center; height: 5.4em; justify-content: center; overflow: hidden; }
.lock .wheel .face span { opacity: .25; font-size: 1.1rem; line-height: 1.6; transition: opacity .2s; }
.lock .wheel .face .cur { opacity: 1; font-size: 1.5rem; color: var(--gilt); }
.lock .wheel.stuck { animation: shake .3s; }
.lock.open .wheel { border-color: var(--cinnabar); }
.lock.open .wheel .face .cur { color: var(--cinnabar); }

/* ───── 卷一 藏书阁 ───── */
.lib-stage { position: relative; min-height: calc(100vh - 3rem); background: var(--paper-night); overflow: hidden; display: grid; grid-template-columns: 240px 1fr 260px; gap: 1rem; padding: 1rem; cursor: none; }
.lib-stage .bg { position: absolute; inset: 0; z-index: 0; opacity: .55; }
.lib-stage .bg img { width: 100%; height: 100%; object-fit: cover; }
.lib-stage > .cabinet, .lib-stage > .shelf-wall, .lib-stage > .clock { position: relative; z-index: 2; }
.lib-stage .fox-carry { position: absolute; z-index: 6; pointer-events: none; transform: translate(-50%,-50%); filter: drop-shadow(0 0 14px rgba(244,194,106,.6)); }
.lib-stage .reader { cursor: auto; }
.lib-stage button, .lib-stage input { cursor: pointer; }
.lib-stage .cabinet { background: rgba(38,34,30,.9); border: 1px solid rgba(239,231,214,.25); padding: 1rem 2.4rem 1rem 1rem; color: var(--paper); display: flex; flex-direction: column; gap: .8rem; align-self: start; }
.lib-stage .cab-title { align-self: flex-end; letter-spacing: .4em; color: var(--ink-faint); font-size: .9rem; position: absolute; right: .6rem; top: .8rem; }
.lib-stage .drawers { display: grid; grid-template-columns: repeat(2, 1fr); gap: .4rem; }
.lib-stage .drawer { height: 30px; background: #3a3129; border: 1px solid rgba(239,231,214,.2); display: flex; align-items: center; justify-content: center; transition: transform .25s var(--ease); }
.lib-stage .drawer span { width: 14px; height: 4px; background: var(--gilt); border-radius: 2px; }
.lib-stage .drawer.open { transform: translateX(10px); background: #4a3f36; }
.lib-stage .search { display: flex; gap: .5rem; }
.lib-stage .search .input { flex: 1; min-width: 0; }
.lib-stage .results { display: flex; flex-direction: column; gap: .5rem; font-size: .9rem; }
.lib-stage .slip { background: var(--paper); color: var(--ink); padding: .5rem .7rem; border-left: 3px solid var(--gilt); position: relative; }
.lib-stage .slip.link { cursor: pointer; }
.lib-stage .slip.link:hover { border-left-color: var(--cinnabar); }
.lib-stage .slip.paper { background: #f5efe0; transform: rotate(-1deg); }
.lib-stage .slip .earring { margin-top: .4rem; }
.lib-stage .shelf-wall { display: flex; flex-direction: column; justify-content: flex-end; min-height: 60vh; }
.lib-stage .shelf { display: flex; align-items: flex-end; gap: 6px; padding: 0 2rem; justify-content: center; }
.lib-stage .shelf-board { height: 14px; background: #3a2f28; border-top: 2px solid #5a4a3e; box-shadow: 0 6px 12px rgba(0,0,0,.5); }
.lib-stage .spine { width: 52px; height: var(--h); min-height: 200px; background: var(--c); border: 1px solid rgba(239,231,214,.25); color: var(--paper); display: flex; flex-direction: column; align-items: center; justify-content: space-between; padding: .8rem 0 .6rem; position: relative; transition: transform .2s var(--ease); }
.lib-stage .spine::before { content: ''; position: absolute; inset: 6px 4px; border: 1px solid rgba(239,231,214,.25); pointer-events: none; }
.lib-stage .spine .vert { font-size: .95rem; letter-spacing: .1em; }
.lib-stage .spine .no { font-size: .8rem; color: var(--gilt); }
.lib-stage .spine:hover { transform: translateY(-10px); }
.lib-stage .clock { background: rgba(38,34,30,.9); border: 1px solid rgba(239,231,214,.25); padding: 1rem; color: var(--paper); display: flex; flex-direction: column; align-items: center; gap: .8rem; align-self: start; }
.lib-stage .dial { user-select: none; }
.lib-stage .hour-label { letter-spacing: .3em; color: var(--ink-faint); }
.lib-stage .hour-label b { color: var(--gilt); font-weight: 500; }
.lib-stage .gates { display: flex; gap: 1.2rem; }
.lib-stage .gate { width: 60px; height: 120px; border: 1px solid rgba(239,231,214,.4); color: var(--paper); background: #2c2420; display: flex; align-items: center; justify-content: center; letter-spacing: .3em; position: relative; }
.lib-stage .gate::before { content: ''; position: absolute; inset: 5px; border: 1px solid rgba(239,231,214,.2); }
.lib-stage .gate:hover { background: #3a2f28; }
.lib-stage .gate-msg { color: var(--ink-faint); font-size: .9rem; text-align: center; min-height: 2.4em; }
.lib-stage .reader { position: absolute; inset: 0; z-index: 7; cursor: auto; background: rgba(29,26,23,.86); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem; padding: 1.5rem; overflow: auto; }
.lib-stage .reader .bookhead { color: var(--ink-faint); }
.lib-stage .reader .bookhead .t { color: var(--paper); }
.lib-stage .reader .nav { color: var(--ink-faint); }
.lib-stage .reader .btn { color: var(--paper); border-color: rgba(239,231,214,.6); }

/* ───── 卷二 因果格 ───── */
.causal-stage { max-width: 1080px; margin: 0 auto; padding: 1rem 1.5rem 8vh; display: flex; flex-direction: column; gap: 1.5rem; }
.causal-stage .granny { display: grid; grid-template-columns: 1fr 1.2fr; gap: 1.5rem; align-items: stretch; }
.causal-stage .granny-art { border: var(--line); aspect-ratio: 16/9; overflow: hidden; background: var(--paper-dark); }
.causal-stage .granny-art img { width: 100%; height: 100%; object-fit: cover; }
.causal-stage .ask { display: flex; flex-direction: column; gap: .6rem; align-items: flex-start; }
.causal-stage .ask-title { letter-spacing: .4em; color: var(--ink-light); font-size: .9rem; }
.causal-stage .ask .btn.asked { opacity: .55; }
.causal-stage .answer { min-height: 4em; padding: .6rem .8rem; border-left: 2px solid var(--cinnabar); color: var(--ink); width: 100%; }
.causal-stage .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
.causal-stage .slot { border: 1px solid rgba(43,38,34,.55); padding: .8rem; position: relative; min-height: 280px; display: flex; flex-direction: column; gap: .6rem; transition: border-color .3s; }
.causal-stage .slot::before { content: ''; position: absolute; inset: 4px; border: 2px solid rgba(43,38,34,.55); pointer-events: none; }
.causal-stage .slot-title { letter-spacing: .3em; text-align: center; font-size: 1.05rem; }
.causal-stage .mortal { font-size: .85rem; color: var(--ink-light); text-decoration: line-through rgba(184,65,47,0); transition: text-decoration-color .6s; }
.causal-stage .slot.good .mortal { text-decoration-color: var(--cinnabar); }
.causal-stage .tray { flex: 1; display: flex; flex-wrap: wrap; gap: .4rem; align-content: flex-start; min-height: 120px; border: 1px dashed rgba(43,38,34,.3); padding: .4rem; }
.causal-stage .tray.over { border-color: var(--cinnabar); outline: none; background: rgba(184,65,47,.05); }
.causal-stage .slot.good { border-color: var(--verdigris); }
.causal-stage .slot.good::before { border-color: var(--verdigris); }
.causal-stage .slot.bad { border-color: var(--cinnabar); }
.causal-stage .truth { color: var(--verdigris); font-size: .95rem; min-height: 1.6em; }
.causal-stage .cards { display: flex; flex-wrap: wrap; gap: .6rem; justify-content: center; padding: .8rem; border-top: var(--line); border-bottom: var(--line); }
.card { padding: .35em .9em; border: 1px solid var(--ink); background: var(--paper); cursor: grab; user-select: none; position: relative; font-size: .95rem; box-shadow: 2px 2px 0 rgba(43,38,34,.15); }
.card.mortal { border-color: var(--ink-light); color: var(--ink-light); border-style: dashed; }
.card.placed { cursor: pointer; }
.card.placed:hover { border-color: var(--cinnabar); }
.card.burn { animation: burn 1.1s forwards; }
@keyframes burn { 0% { filter: none; } 60% { color: var(--cinnabar); border-color: var(--cinnabar); } 100% { opacity: 0; transform: translateY(-10px) scale(.9); filter: blur(2px); } }
.causal-stage .check { justify-content: center; }

/* ───── 卷三 书本密码 ───── */
.cipher-stage { display: grid; grid-template-columns: 380px 1fr; gap: 1.5rem; padding: 1rem 1.5rem 8vh; max-width: 1240px; margin: 0 auto; align-items: start; }
.cipher-stage .letters { display: flex; flex-direction: column; gap: 1.2rem; position: sticky; top: 3.2rem; }
.paper { background: #f5efe0; border: 1px solid rgba(43,38,34,.4); padding: 1.2rem 1.4rem; position: relative; box-shadow: 2px 3px 0 rgba(43,38,34,.1); }
.paper::before { content: ''; position: absolute; inset: 5px; border: 1px solid rgba(43,38,34,.2); pointer-events: none; }
.paper .from { font-size: .8rem; letter-spacing: .2em; color: var(--ink-light); margin-bottom: .6rem; }
.paper p { margin: 0; font-size: 1rem; }
.paper.outgoing { transform: rotate(-.6deg); }
.paper.incoming { transform: rotate(.5deg); }
.cipher-stage .groups { display: flex; flex-wrap: wrap; gap: .5rem .7rem; margin: .4rem 0 .8rem; }
.cipher-stage .grp { display: flex; flex-direction: column; align-items: center; gap: .2rem; padding: .3rem .4rem; border: 1px solid rgba(43,38,34,.3); min-width: 3.4rem; position: relative; transition: border-color .2s; }
.cipher-stage .grp .coord { font-size: .8rem; letter-spacing: .05em; color: var(--ink-light); }
.cipher-stage .grp .slot { width: 1.8rem; height: 1.8rem; border-bottom: 1px solid var(--ink); font-size: 1.2rem; line-height: 1.8rem; }
.cipher-stage .grp.active { border-color: var(--cinnabar); background: rgba(184,65,47,.06); }
.cipher-stage .grp.right .slot { color: var(--ink); border-bottom-color: var(--verdigris); }
.cipher-stage .grp.wrong .slot { color: var(--cinnabar); text-decoration: line-through; }
.cipher-stage .grp.blur .coord { filter: blur(1.6px); }
.cipher-stage .grp.blur .coord::after { content: ''; position: absolute; }
.cipher-stage .type-row { display: flex; align-items: center; gap: .6rem; margin-bottom: .6rem; }
.cipher-stage .input.tiny { min-width: 2.4em; width: 2.4em; text-align: center; }
.cipher-stage .ps { font-size: .95rem; color: var(--ink); border-top: 1px dashed rgba(43,38,34,.3); padding-top: .6rem; }
.cipher-stage .decoded { font-size: 1.5rem; letter-spacing: .3em; color: var(--cinnabar); min-height: 1.8em; margin-top: .6rem; }
.cipher-stage .reader-pane { display: flex; flex-direction: column; gap: 1rem; align-items: center; }
.cipher-stage .bookbar { display: flex; gap: .4rem; flex-wrap: wrap; justify-content: center; }
.cipher-stage .bk { padding: .3em .7em; border: 1px solid rgba(43,38,34,.4); text-align: center; line-height: 1.3; font-size: .9rem; }
.cipher-stage .bk.on { border-color: var(--cinnabar); color: var(--cinnabar); }
.cipher-stage .reader-in { min-height: 520px; }

/* ───── 卷四 拓印 / 甲骨 ───── */
.rub-stage { display: flex; flex-direction: column; align-items: center; gap: 1.2rem; padding: 1rem 1.5rem 8vh; }
.rub-stage .turtle { position: relative; width: min(560px, 92vw); aspect-ratio: 1; touch-action: none; cursor: crosshair; border: var(--line-strong); }
.rub-stage .turtle-img, .rub-stage .shell-svg, .rub-stage .shell-glyphs, .rub-stage canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.rub-stage .turtle-img { object-fit: cover; z-index: 1; filter: brightness(.45) contrast(1.1); }
.rub-stage .shell-svg { z-index: 0; }
.rub-stage .shell-svg svg { width: 100%; height: 100%; }
.rub-stage .shell-glyphs { z-index: 2; display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(4, 1fr); padding: 14%; align-items: center; justify-items: center; }
.rub-stage .sg { filter: drop-shadow(0 0 4px rgba(0,0,0,.8)); }
.rub-stage canvas { z-index: 3; }
.rub-stage .progress { position: absolute; left: 0; right: 0; bottom: -10px; height: 3px; background: rgba(43,38,34,.15); z-index: 4; }
.rub-stage .progress i { display: block; height: 100%; width: 0; background: var(--cinnabar); transition: width .2s; }
.rub-stage .turtle-say { font-size: 1.1rem; max-width: 34em; text-align: center; color: var(--ink); min-height: 1.6em; }

.oracle-stage { max-width: 960px; margin: 0 auto; padding: 1rem 1.5rem 8vh; display: flex; flex-direction: column; gap: 1.2rem; align-items: center; }
.oracle-stage .stele-note { letter-spacing: .2em; padding: .4em 1em; border: var(--line); }
.oracle-stage .stele-note b { color: var(--cinnabar); font-weight: 500; font-size: 1.2em; }
.oracle-stage .cipher-row { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; padding: 1rem; border: var(--line-strong); background: #26221e; }
.oracle-stage .oc { display: flex; flex-direction: column; align-items: center; cursor: pointer; padding: .2rem; border: 1px solid transparent; }
.oracle-stage .oc .g svg path { stroke: #efe7d6; }
.oracle-stage .oc .v { height: 1.8rem; line-height: 1.8rem; font-size: 1.2rem; color: var(--gilt); width: 100%; text-align: center; border-top: 1px solid rgba(239,231,214,.3); }
.oracle-stage .oc.crib .v { color: var(--paper); }
.oracle-stage .oc:hover { border-color: rgba(239,231,214,.4); }
.oracle-stage .legend { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; }
.oracle-stage .lg { display: flex; flex-direction: column; align-items: center; border: 1px solid rgba(43,38,34,.35); padding: .3rem .5rem; cursor: pointer; min-width: 3.2rem; }
.oracle-stage .lg .pick { font-size: 1.1rem; }
.oracle-stage .lg.on { border-color: var(--cinnabar); background: rgba(184,65,47,.06); }
.oracle-stage .lg.crib { border-style: double; opacity: .8; }
.oracle-stage .pool { display: flex; flex-wrap: wrap; gap: .4rem; justify-content: center; border-top: var(--line); border-bottom: var(--line); padding: .8rem; }
.oracle-stage .pc { width: 2.4rem; height: 2.4rem; border: 1px solid var(--ink); font-size: 1.1rem; }
.oracle-stage .pc:hover { background: var(--ink); color: var(--paper); }
.oracle-stage .pc.used { opacity: .3; }
.oracle-stage .segments { font-size: 1.5rem; letter-spacing: .25em; color: var(--ink); }
.oracle-stage .segments i { font-style: normal; color: var(--ink-faint); }
.oracle-stage .reveal { font-size: 1.25rem; color: var(--cinnabar); min-height: 1.8em; text-align: center; }

/* ───── 卷五 告示墙 ───── */
.wall-stage { display: grid; grid-template-columns: 1fr 380px; gap: 1.5rem; padding: 1rem 1.5rem 8vh; max-width: 1280px; margin: 0 auto; align-items: start; }
.notices { position: relative; display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; padding: 1rem; background: #7a6a58; border: 4px solid #4a3d33; min-height: 70vh; }
.notice { background: #f5efe0; color: var(--ink); padding: 1rem 1.1rem; position: relative; box-shadow: 2px 3px 6px rgba(0,0,0,.3); font-size: .95rem; transform: rotate(var(--r, 0)); }
.notice:nth-child(1) { --r: -.8deg; } .notice:nth-child(2) { --r: .6deg; } .notice:nth-child(3) { --r: -.4deg; } .notice:nth-child(4) { --r: 1deg; } .notice:nth-child(5) { --r: -1.2deg; } .notice:nth-child(6) { --r: .9deg; } .notice:nth-child(7) { --r: -.5deg; }
.notice::before { content: ''; position: absolute; top: -6px; left: 50%; width: 10px; height: 10px; border-radius: 50%; background: var(--cinnabar); transform: translateX(-50%); box-shadow: 0 1px 2px rgba(0,0,0,.4); }
.notice .kind { font-size: .8rem; letter-spacing: .2em; color: var(--ink-light); margin-bottom: .4rem; }
.notice .date { color: var(--cinnabar); }
.notice p { margin: 0; }
.notice.rumor { background: #e9e0cc; font-family: var(--font-hand); }
.notice.letter { background: #fbf6ea; font-family: var(--font-hand); border-left: 3px solid var(--cinnabar); }
.notice .nseal { position: absolute; right: .8rem; bottom: .6rem; opacity: .85; }
.notice .nseal.focus { outline: 2px dashed var(--cinnabar); outline-offset: 4px; }
.tamper { position: relative; display: inline-block; }
.tamper .under { position: absolute; left: 0; top: 0; color: var(--cinnabar); opacity: 0; transition: opacity .6s; }
.tamper .top { position: relative; transition: opacity .6s; }
.notices.lit .tamper.armed { cursor: pointer; }
.notices.lit .tamper.armed .top { background: linear-gradient(transparent 20%, rgba(43,38,34,.08) 20%, rgba(43,38,34,.08) 80%, transparent 80%); }
.notices.lit .tamper.armed:hover .under { opacity: .35; }
.tamper.peeled .top { opacity: .15; text-decoration: line-through; }
.tamper.peeled .under { opacity: 1; }
.side { display: flex; flex-direction: column; gap: 1.2rem; position: sticky; top: 3.2rem; }
.ring-wrap { display: flex; flex-direction: column; gap: 1rem; align-items: center; }
.ring { position: relative; width: 320px; height: 320px; border-radius: 50%; border: 1px solid rgba(43,38,34,.5); }
.ring::before { content: ''; position: absolute; inset: 6px; border-radius: 50%; border: 2px solid rgba(43,38,34,.6); }
.ring .ring-center { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); letter-spacing: .3em; }
.ring .term { position: absolute; left: 50%; top: 50%; width: 0; height: 0; transform: rotate(var(--a)); }
.ring .term > span { position: absolute; left: -1.2em; top: -150px; width: 2.4em; text-align: center; font-size: .85rem; transform: rotate(calc(-1 * var(--a))); display: block; letter-spacing: 0; }
.ring .term .peg { position: absolute; left: -44px; top: -128px; width: 88px; min-height: 30px; border: 1px dashed rgba(43,38,34,.3); border-radius: 3px; transform: rotate(calc(-1 * var(--a))); display: flex; align-items: center; justify-content: center; }
.ring .term.good .peg { border-color: var(--verdigris); }
.ring .term.over .peg { border-color: var(--cinnabar); }
.ring .term.over { outline: none; }
.ev { padding: .25em .6em; border: 1px solid var(--ink); background: var(--paper); font-size: .8rem; cursor: grab; user-select: none; box-shadow: 2px 2px 0 rgba(43,38,34,.15); white-space: nowrap; }
.ring .peg .ev { font-size: .72rem; padding: .2em .4em; }
.events { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; min-height: 2.4rem; padding: .5rem; border: 1px dashed rgba(43,38,34,.25); width: 100%; }
.phase2 p, .phase3 p { margin: .4em 0; }
.officials { display: flex; gap: .8rem; justify-content: center; margin-top: .6rem; }
.off { display: flex; flex-direction: column; align-items: center; gap: .3rem; padding: .5rem; border: 1px solid transparent; text-align: center; line-height: 1.4; }
.off:hover { border-color: rgba(43,38,34,.4); }
.off.hit { border-color: var(--cinnabar); }
.msg3 { margin-top: .8rem; color: var(--ink); min-height: 2em; }

/* ───── 终章 ───── */
.rebut-stage { max-width: 980px; margin: 0 auto; padding: 1rem 1.5rem 8vh; color: var(--paper); }
.rebut-stage .cols { position: relative; display: grid; grid-template-columns: 1fr 120px 1fr; gap: 0; align-items: stretch; }
.rebut-stage .wires { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.rebut-stage .claims, .rebut-stage .evid { display: flex; flex-direction: column; gap: 1.2rem; justify-content: center; }
.rebut-stage .claim, .rebut-stage .ev { color: var(--paper); border: 1px solid rgba(239,231,214,.5); padding: .8em 1em; text-align: left; font-size: 1rem; background: transparent; cursor: pointer; white-space: normal; box-shadow: none; }
.rebut-stage .claim { border-style: dashed; }
.rebut-stage .claim.on { border-color: var(--cinnabar); background: rgba(184,65,47,.15); }
.rebut-stage .linked { border-color: var(--cinnabar); }
.rebut-stage .ev.pen { border-color: var(--gilt); }
.rebut-stage .check { justify-content: center; }
.rebut-stage .check .btn { color: var(--paper); border-color: rgba(239,231,214,.6); }

.blank-stage { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2rem; color: var(--paper); padding: 1.5rem; text-align: center; }
.blank-stage .fill { font-size: clamp(1.3rem, 3vw, 1.9rem); letter-spacing: .1em; }
.blank-stage .input { color: var(--cinnabar); font-size: 1.1em; width: 3em; min-width: 3em; text-align: center; border-bottom-color: var(--cinnabar); }
.blank-stage .msg { color: var(--ink-faint); min-height: 1.6em; }

.speech-stage { min-height: 80vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2rem; color: var(--paper); padding: 2rem 1.5rem; text-align: center; }
.speech-stage .speech { max-width: 34em; font-size: 1.2rem; line-height: 2; text-align: justify; }
.speech-stage .ask { font-size: clamp(1.4rem, 3vw, 2rem); color: var(--cinnabar); letter-spacing: .1em; }
.speech-stage .btn { color: var(--paper); border-color: rgba(239,231,214,.6); }

.lock-stage { min-height: 80vh; display: flex; align-items: center; justify-content: center; padding: 1.5rem; }
.lock-stage .door-wrap { position: relative; inset: auto; background: transparent; }
.lock-stage .inscription { color: var(--gilt); font-size: 1.2rem; letter-spacing: .25em; }
.lock-stage .have { color: var(--ink-faint); }
.lock-stage .msg { color: var(--cinnabar); }

.ending-stage { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; max-width: 1080px; margin: 0 auto; padding: 8vh 1.5rem 14vh; align-items: center; }
.ending-stage .newbook { position: relative; aspect-ratio: 3/2; border: var(--line-strong); overflow: hidden; background: var(--paper-dark); }
.ending-stage .newbook img { width: 100%; height: 100%; object-fit: cover; }
.ending-stage .cover-title { position: absolute; right: 8%; top: 8%; font-size: 2rem; letter-spacing: .3em; color: var(--paper); background: var(--cinnabar); padding: .6em .3em; }
.ending-stage .cover-sub { position: absolute; right: 8%; bottom: 10%; font-size: .9rem; letter-spacing: .3em; color: var(--paper); background: rgba(43,38,34,.7); padding: .5em .3em; }
.ending-stage .cover-seal { position: absolute; left: 8%; bottom: 8%; }
.ending-stage .ending-text { display: flex; flex-direction: column; gap: 1.4rem; }
.ending-stage .ending-text p { font-size: 1.15rem; margin: 0; }
.ending-stage .motto-line { font-size: 1.6rem; letter-spacing: .3em; color: var(--cinnabar); }
.ending-stage .credits { line-height: 1.8; }

/* ───── 响应式 ───── */
@media (max-width: 1000px) {
  .lib-stage { grid-template-columns: 1fr; cursor: auto; }
  .lib-stage .shelf-wall { min-height: 40vh; order: -1; }
  .lib-stage .spine { width: 44px; min-height: 160px; }
  .cipher-stage, .wall-stage, .ending-stage { grid-template-columns: 1fr; }
  .cipher-stage .letters, .side { position: static; }
  .causal-stage .granny { grid-template-columns: 1fr; }
  .causal-stage .grid { grid-template-columns: 1fr; }
  .notices { grid-template-columns: 1fr; }
  .rebut-stage .cols { grid-template-columns: 1fr 40px 1fr; }
}

/* ───── 掌心 ───── */
.palm-stage { min-height: calc(100vh - 3rem); display: flex; align-items: center; justify-content: center; background: var(--paper-night); }
.palm-stage .palm { position: relative; width: min(420px, 90vw); aspect-ratio: 1; touch-action: none; cursor: crosshair; }
.palm-stage .palm svg, .palm-stage .palm canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.palm-stage .palm canvas { z-index: 2; }
.palm-stage .btn { position: absolute; bottom: 8vh; left: 50%; transform: translateX(-50%); color: var(--paper); border-color: rgba(239,231,214,.5); }

/* ───── 新书 ───── */
.newbook-overlay { position: fixed; inset: 0; z-index: var(--z-journal); background: rgba(29,26,23,.7); display: flex; align-items: center; justify-content: center; }
.newbook-overlay .nb { width: min(760px, 92vw); height: min(560px, 86vh); background: var(--paper); color: var(--ink); position: relative; padding: 2rem 2.4rem; display: flex; flex-direction: column; gap: 1rem; box-shadow: 0 30px 80px rgba(0,0,0,.5); }
.newbook-overlay .nb::before { content: ''; position: absolute; inset: 6px; border: 2px solid rgba(43,38,34,.6); pointer-events: none; }
.newbook-overlay .nb-head { letter-spacing: .4em; color: var(--ink-light); }
.newbook-overlay .nb-body { flex: 1; writing-mode: vertical-rl; text-orientation: upright; overflow-x: auto; font-size: 1.05rem; line-height: 2.2; letter-spacing: .12em; padding: .5rem 0; }
.newbook-overlay .nb-body p { margin: 0 1.2rem 0 0; max-height: 100%; }
.newbook-overlay .nb-nav { display: flex; justify-content: space-between; color: var(--ink-light); letter-spacing: .2em; }
.newbook-overlay .nb-nav button { color: inherit; }
.newbook-overlay .nb-nav button:hover { color: var(--cinnabar); }
