/* Local reading experiment; loaded only by reader-preview.html. */
@font-face{font-family:'OFG Reader Latin';src:url('assets/fonts/tox-typewriter.ttf') format('truetype');font-style:normal;font-weight:400;font-display:block;unicode-range:U+0000-024F,U+1E00-1EFF}
/* Stable project materials: p01-p07 use these in order; p08-p33 repeat the same sequence. */
[data-texture="linen"]{--texture-image:repeating-linear-gradient(90deg,rgba(30,25,18,.12) 0 1px,transparent 1px 4px),repeating-linear-gradient(0deg,rgba(255,255,255,.13) 0 1px,transparent 1px 5px);--texture-blend:multiply;--texture-opacity:.24}
[data-texture="vertical-ribbed"]{--texture-image:repeating-linear-gradient(90deg,rgba(20,18,14,.13) 0 1px,rgba(255,255,255,.12) 1px 2px,transparent 2px 5px);--texture-blend:soft-light;--texture-opacity:.38}
[data-texture="cotton-pulp"]{--texture-image:radial-gradient(ellipse at 18% 23%,rgba(45,35,25,.18) 0 .5px,transparent .8px),radial-gradient(ellipse at 73% 61%,rgba(255,255,255,.22) 0 .6px,transparent 1px);--texture-size:7px 9px,11px 8px;--texture-blend:multiply;--texture-opacity:.24}
[data-texture="coated"]{--texture-image:linear-gradient(112deg,rgba(255,255,255,.24),transparent 24%,rgba(255,255,255,.08) 62%,transparent);--texture-blend:soft-light;--texture-opacity:.32}
[data-texture="book-cloth"]{--texture-image:repeating-linear-gradient(90deg,rgba(15,15,12,.13) 0 1px,transparent 1px 3px),repeating-linear-gradient(0deg,rgba(255,255,255,.1) 0 1px,transparent 1px 3px);--texture-blend:multiply;--texture-opacity:.28}
[data-texture="lychee-leather"]{--texture-image:radial-gradient(circle at 25% 30%,transparent 0 1px,rgba(25,20,15,.16) 1.3px 2px,transparent 2.4px),radial-gradient(circle at 75% 70%,rgba(255,255,255,.14) 0 1px,transparent 1.8px);--texture-size:8px 7px,9px 8px;--texture-blend:soft-light;--texture-opacity:.34}
[data-texture="debossed-board"]{--texture-image:repeating-linear-gradient(135deg,transparent 0 7px,rgba(20,18,14,.12) 7px 8px,rgba(255,255,255,.1) 8px 9px,transparent 9px 16px);--texture-blend:multiply;--texture-opacity:.22}
body .book[data-texture]>.book-front::after,body .book[data-texture]>.book-spine::after,body .book[data-texture]>.book-back::after,.reading-room[data-texture] .prism-face::after,.reading-room[data-texture] .reading-cover-front::after{content:""!important;position:absolute!important;inset:0!important;display:block!important;pointer-events:none!important;background-image:var(--texture-image)!important;background-size:var(--texture-size,auto)!important;background-repeat:repeat!important;mix-blend-mode:var(--texture-blend,soft-light)!important;opacity:var(--texture-opacity,.25)!important;z-index:5!important}
.reading-room{position:fixed;inset:0;z-index:100;background:rgba(225,223,213,.97);color:#282923;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:24px;perspective:2200px;animation:room-in .5s ease}@keyframes room-in{from{opacity:0}to{opacity:1}}
.reading-top{position:absolute;left:5vw;right:5vw;top:25px;display:flex;align-items:center;justify-content:space-between;font:11px/1.6 monospace;letter-spacing:.12em;z-index:30}.reading-top small{display:block;opacity:.55;font-size:9px;letter-spacing:.18em}.reading-room button{font:inherit;color:inherit;cursor:pointer}.reading-close{border:1px solid #b8b9ad;border-radius:50%;background:transparent;width:42px;height:42px;font-size:24px!important}
.reading-inspect{--book-w:var(--page-w);--book-h:var(--page-h);width:var(--spread-w);height:var(--page-h);flex:none;display:grid;place-items:center;perspective:1500px;touch-action:none;cursor:grab;outline:none;position:relative}.reading-inspect[hidden]{display:none}.reading-inspect::after{content:'';position:absolute;left:50%;bottom:-20px;width:min(400px,70vw);height:42px;translate:-50% 0;background:#28292330;filter:blur(18px);border-radius:50%;z-index:-1;pointer-events:none}.reading-inspect:active{cursor:grabbing}.reading-inspect:focus-visible{outline:1px solid #7d806f;outline-offset:8px}.reading-prism{position:relative;width:var(--book-w);height:var(--book-h);transform-style:preserve-3d;will-change:transform}.reading-prism.is-aligning{transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.prism-face{position:absolute;left:50%;top:50%;box-sizing:border-box;backface-visibility:hidden;background-color:var(--cover-colour);background-repeat:no-repeat}.prism-front,.prism-back{width:var(--book-w);height:var(--book-h);margin:calc(var(--book-h)/-2) 0 0 calc(var(--book-w)/-2);background-size:100% 100%}.prism-front{background-image:var(--cover-image);transform:translateZ(calc(var(--book-d)/2))}.prism-back{background-image:var(--back-image);transform:rotateY(180deg) translateZ(calc(var(--book-d)/2))}.prism-spine,.prism-edge{width:var(--book-d);height:var(--book-h);margin:calc(var(--book-h)/-2) 0 0 calc(var(--book-d)/-2)}.prism-spine{background-image:var(--spine-image);background-size:100% 100%;transform:rotateY(-90deg) translateZ(calc(var(--book-w)/2))}.prism-edge{background:repeating-linear-gradient(90deg,#d4cebd 0 1px,#f7f2e6 1px 3px);transform:rotateY(90deg) translateZ(calc(var(--book-w)/2))}.prism-top,.prism-bottom{width:var(--book-w);height:var(--book-d);margin:calc(var(--book-d)/-2) 0 0 calc(var(--book-w)/-2);background:repeating-linear-gradient(#eee9dc 0 1px,#cfc8b8 1px 2px)}.prism-top{transform:rotateX(90deg) translateZ(calc(var(--book-h)/2))}.prism-bottom{transform:rotateX(-90deg) translateZ(calc(var(--book-h)/2))}
.reading-inspect-actions{position:relative;z-index:20;display:flex;align-items:center;gap:24px;font:10px/1.6 monospace;letter-spacing:.08em;color:#696d5d;margin-top:-22px}.reading-inspect-actions p{margin:0}.reading-inspect-actions button{position:relative;z-index:1;pointer-events:auto;border:1px solid #aeb1a3;background:transparent;border-radius:30px;padding:10px 18px}.reading-room:not([data-state="inspect"]) .reading-inspect-actions{display:none}
.reading-volume{--paper:#fbf8ef;width:var(--spread-w);height:var(--page-h);flex:none;position:relative;transform-style:preserve-3d;transform:translateX(-25%);transition:transform 1.4s cubic-bezier(.22,.75,.2,1);margin-top:35px}.reading-volume[hidden]{display:none}.reading-volume.is-preparing{position:absolute;visibility:hidden;pointer-events:none}.reading-volume.is-open{transform:translateX(0)}.reading-volume::after{content:'';position:absolute;inset:18px -3px -7px 50%;background:repeating-linear-gradient(#eee9db 0 1px,#d3cebf 1px 2px);transform:translateZ(-3px);box-shadow:10px 25px 45px #35372935;pointer-events:none}.reading-volume.is-open::after{left:-3px}
.reading-page{position:absolute;top:0;width:50%;height:100%;box-sizing:border-box;padding:34px 34px 40px;background:var(--paper);overflow:hidden;backface-visibility:hidden;color:#303329;font-family:'OFG Reader Latin','OFG Source Han Serif',serif}.reading-left{left:0;background:linear-gradient(90deg,#fbf8ef 90%,#ebe5d6 100%);box-shadow:-12px 18px 40px #35372920}.reading-right{left:50%;background:linear-gradient(90deg,#e8e2d3,#fbf8ef 8%)}.reading-page-inner{height:100%;overflow:hidden}.reading-page .reading-folio{position:absolute;bottom:16px;left:34px;right:34px;font:10px 'OFG Reader Latin','OFG Source Han Serif',monospace;color:#939181;display:flex;justify-content:space-between}.reading-page h2{font:400 clamp(22px,2.8vw,38px)/1.45 'OFG Reader Latin','OFG Source Han Serif',serif;margin:30px 0 24px}.reading-page .reading-kicker{font:10px/1.7 'OFG Reader Latin','OFG Source Han Serif',monospace;letter-spacing:.1em;color:#7c7d69;margin:0 0 20px}.reading-page .reading-text{font-size:14px;line-height:1.95;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.reading-page figure{margin:0;width:100%;height:100%;display:flex;flex-direction:column;gap:12px;justify-content:center}.reading-page figure img{width:100%;min-height:0;flex:1;object-fit:contain}.reading-page figcaption{font:10px 'OFG Reader Latin','OFG Source Han Serif',monospace;color:#888777;text-align:center}
.reading-cover{position:absolute;left:50%;top:0;width:50%;height:100%;transform-origin:left center;transform:rotateY(0);transform-style:preserve-3d;transition:transform 1.4s cubic-bezier(.22,.75,.2,1);z-index:8}.reading-cover-front,.reading-cover-inside{position:absolute;inset:0;backface-visibility:hidden;background:var(--cover-colour)}.reading-cover-front{background-image:var(--cover-image);background-size:100% 100%;box-shadow:inset 4px 0 6px #0002}.reading-cover-front::before{content:'';position:absolute;right:100%;top:0;width:var(--book-d);height:100%;background:var(--spine-image) center/100% 100%;transform-origin:right;transform:rotateY(-90deg)}.reading-cover-inside{transform:rotateY(180deg);background:#eee9da}.is-open .reading-cover{transform:rotateY(-180deg);pointer-events:none}
.reading-cover-inside.reading-page{left:0;width:100%;height:100%;transform:rotateY(180deg);background:linear-gradient(90deg,#fbf8ef 90%,#ebe5d6 100%);box-shadow:-12px 18px 40px #35372920}
.reading-controls{position:absolute;left:50%;bottom:58px;translate:-50% 0;display:flex;align-items:center;gap:22px;font:12px/1.5 monospace;z-index:10}.reading-room:not([data-state="reading"]) .reading-controls,.reading-room:not([data-state="reading"]) .reading-hint{display:none}.reading-controls button{border:1px solid #b7b9ac;background:transparent;border-radius:30px;padding:10px 20px;min-width:80px}.reading-controls button:disabled{opacity:.3}.reading-status{min-width:100px;text-align:center}.reading-hint{position:absolute;bottom:18px;font:10px/1.6 monospace;color:#797d6b}.reading-leaf{position:absolute;left:50%;top:0;width:50%;height:100%;transform-origin:left center;transform-style:preserve-3d;z-index:12;transition:transform .75s}.reading-leaf .reading-page{width:100%;left:0}.reading-leaf-back{transform:rotateY(180deg)}.reading-measure{visibility:hidden;pointer-events:none;z-index:-1}
@media(max-width:600px){.reading-inspect-actions{flex-direction:column;gap:8px;margin-top:-12px}.reading-volume{transform:none}.reading-page,.reading-cover,.reading-leaf{left:0;width:100%}.reading-left{display:none}.reading-volume::after{left:0}.reading-page{padding:27px 25px 38px}.reading-page .reading-text{font-size:13px}.reading-top{top:15px}.reading-top small{display:none}}
@media(prefers-reduced-motion:reduce){.reading-room,.reading-prism,.reading-volume,.reading-cover,.reading-left,.reading-leaf{animation:none!important;transition:none!important}}
