:root{--ease:cubic-bezier(0.2,0.7,0.2,1)}.book--hero,.book--lifted,.book.is-dragging,.floor,.shelf{--in:clamp(16px,2.4vw,24px);--board:calc(var(--in)*0.45);--shelf-h:calc(var(--in)*12.2 + var(--board));--wood:color-mix(in srgb,var(--c--theme-fg) 14%,var(--c--theme-bg));--paper:#efe8d8}.floor,.shelf{align-content:flex-start;display:flex;flex-wrap:wrap;perspective:calc(var(--in)*700);perspective-origin:50% 0}.book,.book *,.corner *,.floor *,.shelf *,.stage *{margin-top:0}.shelf{background:repeating-linear-gradient(to bottom,transparent 0,transparent calc(var(--shelf-h) - var(--board)),var(--wood) calc(var(--shelf-h) - var(--board)),var(--wood) var(--shelf-h));margin-top:var(--l--space-l);position:relative}.shelf:after{background:repeating-linear-gradient(to bottom,rgba(0,0,0,.07) 0,transparent calc(var(--in)*.7),transparent var(--shelf-h));inset:var(--shelf-h) calc(var(--in)*-.3) 0;-webkit-mask-image:linear-gradient(to right,transparent 0,#000 calc(var(--in)*.8),#000 calc(100% - var(--in)*.8),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 calc(var(--in)*.8),#000 calc(100% - var(--in)*.8),transparent 100%)}.book:after,.shelf:after{content:"";pointer-events:none;position:absolute;z-index:-1}.book:after{box-shadow:0 calc(var(--in)*-.08) calc(var(--in)*.45) rgba(0,0,0,.08);clip-path:inset(-100% -100% 0 -100%);height:calc(var(--h)*var(--in));inset:auto 0 var(--board)}.book--lifted:after,.book.is-dragging:after,.floor .book:not(.book--ghost):after{content:none}@supports (animation-timeline:view()){.floor,.shelf{animation:shelf-eye linear both;animation-timeline:view()}}@keyframes shelf-eye{0%{perspective-origin:50% -50vh}to{perspective-origin:50% calc(100% + 50vh)}}.book,.bookend{align-items:flex-end;display:flex;height:var(--shelf-h);padding-bottom:var(--board);text-decoration:none;touch-action:pan-y pinch-zoom;transform-style:preserve-3d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.book{cursor:grab;position:relative;width:calc(var(--d)*var(--in));z-index:1}.is-dragging-book,.is-dragging-book *{cursor:grabbing}.book.is-dragging,.book.is-raised,.book:focus-visible{z-index:2}.book__box{display:block;height:calc(var(--h)*var(--in));position:relative;transform-origin:50% 100%;transform-style:preserve-3d;transition:transform .2s cubic-bezier(.2,.7,.2,1);transition:transform .2s var(--ease);width:100%}.book__cover,.book__spine,.book__top{backface-visibility:hidden;display:block;position:absolute}.book__spine{align-items:center;background-image:linear-gradient(90deg,hsla(0,0%,100%,.18) 0,hsla(0,0%,100%,.18) 1px,transparent 0,transparent calc(100% - 1px),hsla(0,0%,100%,.1) calc(100% - 1px)),linear-gradient(90deg,rgba(0,0,0,.22),rgba(0,0,0,.07) 7%,hsla(0,0%,100%,.05) 22%,hsla(0,0%,100%,.13) 38%,hsla(0,0%,100%,.03) 58%,rgba(0,0,0,.06) 80%,rgba(0,0,0,.26)),linear-gradient(#8f8a80,#6d685f);border-radius:1px;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.22),inset 0 -1px 2px rgba(0,0,0,.25);display:flex;flex-direction:column;inset:0;overflow:hidden;padding:calc(var(--in)*.3) 0}@supports (color:rgb(0 0 0/0)){.book__spine{background-image:linear-gradient(to right,hsla(0,0%,100%,.18) 0,hsla(0,0%,100%,.18) 1px,transparent 1px,transparent calc(100% - 1px),hsla(0,0%,100%,.1) calc(100% - 1px)),linear-gradient(to right,rgba(0,0,0,.22),rgba(0,0,0,.07) 7%,hsla(0,0%,100%,.05) 22%,hsla(0,0%,100%,.13) 38%,hsla(0,0%,100%,.03) 58%,rgba(0,0,0,.06) 80%,rgba(0,0,0,.26)),var(--spine,linear-gradient(#8f8a80,#6d685f))}}.book__author,.book__title{--glyph:0.58;--fit:calc((var(--h) - 0.7)*var(--in));--len:var(--tl);color:var(--ink);font-size:clamp(5px,min(calc(var(--d)*var(--in)*var(--k)),calc(var(--fit)/(var(--len)*0.58))),var(--max));font-size:clamp(5px,min(calc(var(--d)*var(--in)*var(--k)),calc(var(--fit)/(var(--len)*var(--glyph)))),var(--max));line-height:1;white-space:nowrap;writing-mode:vertical-rl}.book__title{--k:0.55;--max:14px;font-family:var(--t--family-serif);opacity:clamp(0,calc((var(--d) - .35)*4),1)}.book__author{display:none}.book--sans :is(.book__title,.book__author){--glyph:0.62;font-family:var(--t--family-sans);letter-spacing:.02em}.book--sans .book__title{--k:0.48;--max:12px;font-weight:var(--t--weight-medium)}.book--thick .book__title{--k:0.38;--max:17px;--fit:calc((var(--h) - 0.7)*var(--in)*0.62)}:is(.book--thick,.book--wide) .book__author{--k:0.26;--max:11px;--len:var(--al);--fit:calc((var(--h) - 0.7)*var(--in)*0.26);display:block;margin-top:auto;opacity:.8}.book--wide :is(.book__title,.book__author){--fit:calc(var(--d)*var(--in)*0.9);line-height:1.15;padding:0 calc(var(--in)*.1);text-align:center;white-space:normal;writing-mode:horizontal-tb}.book--wide .book__title{--k:0.24;--max:15px;--len:var(--tw)}.book--wide .book__author{--k:0.18;--len:var(--aw)}.book--fav.book--thick .book__author,.book--fav.book--wide .book__author{margin-bottom:calc(var(--in)*.45)}.book--fav .book__spine:after{color:var(--ink);content:"★";font-size:clamp(6px,calc(var(--d)*var(--in)*.45),10px);inset:auto 0 calc(var(--in)*.15);line-height:1;position:absolute;text-align:center}.book__cover{background:#999 50%/cover no-repeat;background:var(--spine,#999) center /cover no-repeat;box-shadow:inset 2px 0 4px rgba(0,0,0,.3);height:100%;left:100%;top:0;transform:rotateY(90deg);transform-origin:left center;visibility:hidden;width:calc(var(--w)*var(--in))}.book--hero .book__cover,.book--lifted .book__cover{visibility:visible}.book__top{background:repeating-linear-gradient(to bottom,var(--paper) 0 2px,#d9d1bf 2px 3px);border:calc(var(--in)*.06) solid var(--tone);border-top:0;bottom:100%;height:calc(var(--w)*var(--in));left:0;transform:rotateX(90deg);transform-origin:bottom center;width:100%}.book:is(.is-raised,:focus-visible):not(.book--lifted,.is-dragging) .book__box{transform:scale(1.05)}.book__spine:before{content:"";height:calc(var(--in)*99);height:calc(var(--hover-h, 99)*var(--in));inset:auto 0 0;-webkit-mask-image:linear-gradient(to bottom,transparent,#000 calc(var(--in)*.5));mask-image:linear-gradient(to bottom,transparent,#000 calc(var(--in)*.5));opacity:0;pointer-events:none;position:absolute;transition:opacity .3s}body:not(.is-dragging-book,.is-open-book) .is-shaded-left .book__spine:before{background:linear-gradient(to right,rgba(0,0,0,.28),rgba(0,0,0,.08) calc(var(--in)*.25),transparent calc(var(--in)*.5));opacity:1}body:not(.is-dragging-book,.is-open-book) .is-shaded-right .book__spine:before{background:linear-gradient(to left,rgba(0,0,0,.14),transparent calc(var(--in)*.3));opacity:1}.book:focus-visible{outline:none}.book:focus-visible .book__spine{outline:2px solid var(--c--theme-primary);outline-offset:2px}.bookend{margin-right:calc(var(--in)*.25);width:calc(var(--in)*.55)}.bookend span{align-items:center;background-color:var(--c--gray-150);background-image:linear-gradient(180deg,hsla(0,0%,100%,.18),transparent 40%,rgba(0,0,0,.05)),url(/images/brushed-metal.png);background-size:100% 100%,100% auto;border-radius:1px;color:var(--c--gray-600);display:flex;font-family:var(--t--family-sans);font-size:clamp(8px,calc(var(--in)*.5),12px);font-weight:var(--t--weight-medium);height:calc(var(--in)*6);justify-content:center;letter-spacing:.06em;width:100%;writing-mode:vertical-rl}.is-dragging-book .book.is-raised:not(.is-dragging) .book__box,.is-open-book .book.is-raised:not(.book--lifted) .book__box{transform:none}.book:is(.is-dragging,.book--lifted){height:auto;padding:0;pointer-events:none;position:fixed;z-index:var(--l--z-highest)}.book.is-dragging{left:0;perspective:calc(var(--in)*40);top:0}.book.is-dragging .book__box{transform:rotate(0deg) scale(1.05);transform:rotate(var(--drag-tilt,0deg)) scale(1.05);transform-origin:0 100%;transition:transform .3s cubic-bezier(.2,.7,.2,1);transition:transform .3s var(--ease)}.book--ghost-quiet:after{display:none}.book--ghost:after,.floor .book.book--ghost{height:calc(var(--h)*var(--in))}.book--ghost:after{background:color-mix(in srgb,var(--c--theme-primary) 18%,transparent);border-radius:3px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c--theme-primary) 35%,transparent);content:"";inset:auto 1px var(--board);position:absolute}.floor{align-items:flex-end;border-radius:var(--l--border-radius-m);gap:calc(var(--in)*.6) 0;min-height:calc(var(--in)*6);outline:1px dashed color-mix(in srgb,var(--c--theme-fg) 25%,transparent);outline-offset:-1px;padding:calc(var(--in)*1.5) var(--in) calc(var(--in)*.5)}body:not(.is-dragging-book) .floor:empty{display:none}.floor .book{height:auto;margin-left:0;margin-left:var(--gap,0);padding-bottom:0;transform:rotate(0deg);transform:rotate(var(--tilt,0deg));transform-origin:0 100%;transition:transform .4s cubic-bezier(.2,.7,.2,1),margin-left .4s cubic-bezier(.2,.7,.2,1);transition:transform .4s var(--ease),margin-left .4s var(--ease)}.book.book--lifted{perspective:calc(var(--in)*120);transform-origin:0 100%}.book--lifted .book__box{transition:none}.book--open .book__cover{box-shadow:0 calc(var(--in)*.4) calc(var(--in)*1.2) rgba(0,0,0,.35)}html{scrollbar-gutter:stable}body.is-open-book{overflow:hidden}.stage{backdrop-filter:blur(8px);background:color-mix(in srgb,var(--c--theme-bg) 94%,transparent);cursor:pointer;inset:0;margin:0;opacity:0;position:fixed;transition:opacity .3s;z-index:calc(var(--l--z-higher) + 1)}.stage.is-visible{opacity:1}.stage__caption{left:1rem;margin:0;position:absolute;right:1rem;text-align:center}.stage__title{font-family:var(--t--family-serif);font-size:var(--t--size-l);line-height:var(--t--leading-tight)}.stage__date,.stage__meta,.stage__subtitle{color:var(--c--theme-text-secondary);font-size:var(--t--size-s)}.stage__date{font-size:var(--t--size-xs);letter-spacing:.02em;margin-top:.35rem}.stage__notes{font-size:var(--t--size-s);margin-top:.6rem}.stage:focus{outline:none}.book--hero{--in:clamp(28px,5vw,44px);cursor:default;display:block;height:auto;margin:var(--l--space-l) auto 0;padding:0;perspective:calc(clamp(28px, 5vw, 44px)*60);perspective:calc(var(--in)*60);width:calc(var(--d)*clamp(28px, 5vw, 44px));width:calc(var(--d)*var(--in))}.book--hero .book__box{transform:rotateY(-62deg)}.book--hero:hover .book__box{transform:rotateY(-40deg)}.book-page__header{text-align:center}.book-page__header,.book-page__notes{margin-top:var(--l--space-m)}.librarian,.toast{--hud-bg:#232528;--hud-fg:#ededed;--hud-muted:#9ca6ae;background:#232528;background:var(--hud-bg);border:1px solid hsla(0,0%,100%,.1);border-radius:.625rem;box-shadow:0 6px 20px rgba(0,0,0,.25);color:#ededed;color:var(--hud-fg);font-family:var(--t--family-sans);font-size:.8rem;line-height:1.3;max-width:calc(100vw - 2rem);padding:.5rem .75rem}.corner{align-items:center;bottom:1rem;display:flex;flex-direction:column;gap:.5rem;grid-column:narrow;margin-top:var(--l--space-m);pointer-events:none;position:sticky;z-index:var(--l--z-higher)}.librarian{pointer-events:auto}.librarian__row{align-items:center;display:flex;gap:.75rem}.librarian__badges{border-left:1px solid hsla(0,0%,100%,.12);color:var(--hud-muted);display:flex;gap:.4rem;padding-left:.75rem}.librarian__badges:empty{display:none}.librarian__badges span{display:flex;padding:0 2px}.librarian__hint,.toasts{align-items:center;display:flex;flex-direction:column;gap:.5rem}.toasts:empty{display:none}.toast{align-items:center;display:flex;gap:.6rem;opacity:0;transform:translateY(.75rem) scale(.97);transition:opacity .3s,transform .35s cubic-bezier(.2,.7,.2,1);transition:opacity .3s,transform .35s var(--ease)}.toast.is-in{opacity:1;transform:none}.toast--tip{transform:none;transition:opacity .2s}.toast__icon{color:var(--hud-muted);display:flex;flex:none}.toast__title{font-weight:var(--t--weight-medium)}.toast__title:after{content:" · "}.toast__desc,.toast__title:after{color:var(--hud-muted)}@media (prefers-reduced-motion:reduce){.book__box,.floor .book,.librarian__spirit,.stage,.toast{transition:none}}