/* The bookshelf entry screen. Cut-paper: torn card edges, felt-ish wallpaper, a wobbly plank (art/shelf_shelf.webp).
   Motion only in transforms and opacity; all of it stops for reduced motion (body.rm) and Reduce effects (body.lowfx). */
.shelfscreen{justify-content:flex-start;gap:10px;padding:14px 12px 18px;color:var(--paper);max-width:980px;margin:0 auto}
.sh-head{text-align:center}
.sh-head h1{font:800 clamp(40px,9vw,58px)/1 var(--serif);margin:4px 0 2px;letter-spacing:-1px;text-shadow:0 3px 0 #1a0f0a;transform:rotate(-1.5deg)}
.sh-head h1 span{color:var(--mustard)}
.sh-tag{margin:0;font:italic 400 15px var(--serif);opacity:.9}
/* the wall: a torn sheet of striped wallpaper pinned behind the shelf */
.sh-room{position:relative;width:min(760px,100%);padding:12px 10px 0;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"mort quip" "shelf shelf";align-items:center;column-gap:10px;
  background:repeating-linear-gradient(90deg,#4b3326 0 22px,#523a2b 22px 44px);border-radius:6px;box-shadow:0 18px 40px rgba(0,0,0,.45),inset 0 0 50px rgba(0,0,0,.45);
  clip-path:polygon(0 2%,6% 0,15% 1.5%,28% .3%,41% 1.8%,55% .2%,68% 1.6%,80% .4%,92% 1.7%,100% .6%,99.4% 30%,100% 62%,99.2% 100%,85% 98.6%,70% 100%,52% 98.8%,35% 99.8%,18% 98.5%,4% 100%,.6% 96%,0 60%,.8% 28%)}
.sh-mort{grid-area:mort;background:none;border:0;padding:0;cursor:pointer;width:64px;align-self:end;border-radius:12px}
.sh-mort img{width:64px;height:auto;display:block;filter:drop-shadow(0 4px 3px rgba(0,0,0,.4));transform-origin:50% 100%;animation:shMort 4.5s ease-in-out infinite}
@keyframes shMort{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(2deg) translateY(-2px)}}
.sh-quip{grid-area:quip;position:relative;margin:0;background:var(--paper);color:var(--ink);font:400 15px/1.35 var(--serif);padding:10px 14px;border-radius:14px 14px 14px 4px;box-shadow:0 3px 0 #cbb79a;min-height:3.1em;align-self:center}
.sh-quip::before{content:'';position:absolute;left:-9px;bottom:10px;border:9px solid transparent;border-right-color:var(--paper);border-left:0}
.sh-wrap{grid-area:shelf;position:relative;margin-top:8px;padding:0 2%;transform-origin:50% 100%;animation:shSway 6s ease-in-out infinite}
@keyframes shSway{0%,100%{transform:rotate(-.35deg)}50%{transform:rotate(.35deg)}}
.sh-beam{position:absolute;left:-10%;top:-40%;width:60%;height:150%;background:linear-gradient(115deg,rgba(255,236,180,.13),rgba(255,236,180,0) 60%);pointer-events:none;transform:skewX(-12deg)}
.sh-books{position:relative;z-index:2;display:flex;align-items:flex-end;justify-content:center;gap:clamp(4px,1.6vw,18px);padding:0 4%;margin-bottom:-3.2%;min-height:60px}
.sh-plank{position:relative;z-index:1;display:block;width:100%;height:auto;pointer-events:none;filter:drop-shadow(0 10px 8px rgba(0,0,0,.45))}
/* books */
.sh-book{--bw:clamp(74px,min(19vw,19vh),128px);position:relative;background:none;border:0;padding:0;margin:0;cursor:pointer;color:var(--paper);display:flex;flex-direction:column;align-items:center;
  transition:transform .35s cubic-bezier(.3,1.6,.5,1);transform-origin:50% 100%;border-radius:10px}
.sh-book .book3d-mount{--bw:inherit;margin-bottom:calc(var(--bw)*-.12)}
.sh-book .sh-label{position:absolute;left:50%;bottom:-2px;transform:translate(-50%,100%);font:700 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;opacity:0;transition:opacity .2s;pointer-events:none;
  background:#2a1a14;color:var(--mustard);padding:3px 8px;border-radius:4px;z-index:3}
.sh-book:hover{transform:translateY(-6px) rotate(-2deg)}
.sh-book[aria-pressed=true]{transform:translateY(-12px) scale(1.06)}
.sh-book[aria-pressed=true] .sh-label,.sh-book:hover .sh-label,.sh-book:focus-visible .sh-label{opacity:1}
.sh-book:not([aria-pressed=true]) .b3d-front{animation:none!important}
.sh-book:not([aria-pressed=true]) .b3d{animation-duration:11s}
.sh-book.saved::after{content:'';position:absolute;top:2%;right:24%;width:9px;height:26%;background:var(--berry);clip-path:polygon(0 0,100% 0,100% 100%,50% 82%,0 100%);z-index:4;pointer-events:none}
.sh-book:focus-visible,.sh-mort:focus-visible,.sh-worm:focus-visible,.sh-soon:focus-visible{outline:3px solid var(--lime);outline-offset:4px}
/* coming soon: a plain code-drawn spine with a paper tag, and a little stack lying flat */
.sh-soon{position:relative;background:none;border:0;padding:0;cursor:pointer;display:flex;align-items:flex-end;height:calc(var(--bwS,clamp(74px,min(19vw,19vh),128px))*1.42);transform-origin:50% 100%;transition:transform .3s}
.sh-soon:hover{transform:rotate(-4deg)}
.sh-spine{display:flex;align-items:flex-start;justify-content:center;width:clamp(18px,4vw,28px);height:92%;border-radius:2px 2px 1px 1px;
  background:linear-gradient(90deg,rgba(0,0,0,.35),rgba(255,255,255,.08) 40%,rgba(0,0,0,.3)),#5f6b3f;box-shadow:inset 0 10% 0 #3f4a28;
  background-image:linear-gradient(90deg,rgba(0,0,0,.35),rgba(255,255,255,.08) 40%,rgba(0,0,0,.3)),linear-gradient(#5f6b3f 0 12%,var(--mustard) 12% 15%,#5f6b3f 15% 82%,var(--mustard) 82% 85%,#5f6b3f 85%);transform:rotate(4deg);transform-origin:0 100%}
.sh-spine b{margin-top:30%;font:700 11px var(--serif);color:#e8d9a8;writing-mode:vertical-rl}
.sh-tagcard{position:absolute;left:60%;top:28%;background:var(--paper);color:var(--ink);font:700 10px/1.1 var(--sans);text-transform:uppercase;letter-spacing:.04em;padding:4px 6px;border-radius:2px;transform:rotate(9deg);box-shadow:0 2px 3px rgba(0,0,0,.35);white-space:nowrap;
  transform-origin:0 0;animation:shTag 5s ease-in-out infinite}
@keyframes shTag{0%,100%{transform:rotate(9deg)}50%{transform:rotate(3deg)}}
.sh-stack{display:flex;flex-direction:column;justify-content:flex-end;gap:1px;align-self:flex-end;margin-left:6px}
.sh-stack i{display:block;width:clamp(38px,8vw,60px);height:clamp(7px,1.3vw,10px);border-radius:2px;background:linear-gradient(#8e3b26,#6d2a1b);box-shadow:inset 3px 0 0 #e6d6b1}
.sh-stack i+i{width:clamp(32px,7vw,52px);margin-left:4px;background:linear-gradient(#4f5f7a,#38445a)}
/* Gerald */
.sh-worm{position:relative;background:none;border:0;padding:0;cursor:pointer;width:clamp(58px,13vw,96px);align-self:flex-end;margin-bottom:2px;border-radius:10px}
.sh-worm img{display:block;width:100%;height:auto;filter:drop-shadow(0 4px 3px rgba(0,0,0,.4));transform-origin:50% 100%;animation:shBreathe 3.6s ease-in-out infinite}
@keyframes shBreathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.02,1.04)}}
.sh-worm.poked img{animation:shPoke .7s cubic-bezier(.3,1.7,.5,1)}
@keyframes shPoke{0%{transform:none}30%{transform:translateY(-14px) rotate(-8deg)}60%{transform:translateY(0) rotate(4deg)}100%{transform:none}}
.sh-z{position:absolute;right:8%;top:6%;font:700 14px var(--serif);color:#f0e2b0;opacity:0;animation:shZ 4.2s linear infinite}
.sh-z:nth-of-type(2){animation-delay:1.4s;font-size:12px}.sh-z:nth-of-type(3){animation-delay:2.8s;font-size:17px}
@keyframes shZ{0%{opacity:0;transform:translate(0,0)}15%{opacity:.9}100%{opacity:0;transform:translate(14px,-34px) rotate(14deg)}}
/* dust motes drifting in the light */
.sh-motes{position:absolute;inset:-30% 0 20% 0;pointer-events:none;z-index:3}
.sh-motes i{position:absolute;width:3px;height:3px;border-radius:50%;background:#f6e7b8;opacity:0;animation:shMote 9s linear infinite}
.sh-motes i:nth-child(1){left:12%;top:60%}.sh-motes i:nth-child(2){left:22%;top:30%;animation-delay:1.5s}.sh-motes i:nth-child(3){left:34%;top:70%;animation-delay:3s}
.sh-motes i:nth-child(4){left:46%;top:20%;animation-delay:4.5s}.sh-motes i:nth-child(5){left:8%;top:40%;animation-delay:6s}.sh-motes i:nth-child(6){left:28%;top:85%;animation-delay:7.5s}
@keyframes shMote{0%{opacity:0;transform:translate(0,0)}20%{opacity:.7}80%{opacity:.5}100%{opacity:0;transform:translate(30px,-60px)}}
/* bookplate */
.sh-panel{width:min(560px,100%);background:var(--paper);color:var(--ink);border-radius:6px;padding:14px 18px 16px;text-align:center;box-shadow:0 10px 26px rgba(0,0,0,.4),inset 0 0 0 2px #d8c7a2,inset 0 0 0 6px var(--paper),inset 0 0 0 7px #b99f6f;transform:rotate(-.6deg)}
.sh-series{margin:0;font:700 12px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--berry)}
.sh-title{margin:4px 0 6px;font:800 clamp(21px,4.6vw,28px)/1.1 var(--serif)}
.sh-title small{display:block;font:italic 400 .62em var(--serif);margin-top:2px}
.sh-blurb{margin:0 auto 10px;max-width:46ch;font:400 15px/1.4 var(--serif)}
.sh-acts{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.sh-acts .today{margin:0}
.sh-foot{display:flex;flex-direction:column;align-items:center;gap:8px;width:min(560px,100%)}
.sh-foot .dstreak{margin:0;font:400 13px var(--sans)}
.sh-foot .beta{margin:4px 0 0;text-align:center}
.shelfscreen .cover-opts{color:var(--paper)}
/* wide screens: shelf left, bookplate and options right */
@media (min-width:1000px) and (min-height:640px){
 .shelfscreen{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,1fr);grid-template-areas:"head head" "room panel" "room foot";column-gap:28px;row-gap:14px;align-content:center;max-width:1180px;padding-top:24px}
 .sh-head{grid-area:head}.sh-room{grid-area:room;width:100%;align-self:start}.sh-panel{grid-area:panel;align-self:end}.sh-foot{grid-area:foot;align-self:start}
 .sh-book{--bw:clamp(100px,11vw,138px)}}
/* phone landscape: everything in two short columns, no page scroll */
@media (orientation:landscape) and (max-height:500px){
 .shelfscreen{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);grid-template-areas:"room panel" "room foot";column-gap:14px;row-gap:6px;padding:6px 10px;min-height:100dvh;align-content:center}
 .sh-head{display:none}.sh-room{grid-area:room;padding:6px 6px 0;align-self:center}.sh-panel{grid-area:panel;padding:8px 12px;align-self:end}.sh-foot{grid-area:foot;align-self:start;gap:4px}
 .sh-mort,.sh-mort img{width:44px}.sh-quip{font-size:13px;padding:6px 10px}
 .sh-book{--bw:clamp(60px,20vh,84px)}.sh-soon{--bwS:clamp(60px,20vh,84px)}
 .sh-title{font-size:19px;margin:2px 0}.sh-blurb{font-size:13px;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .sh-panel .btn.big{min-height:42px;padding:8px 18px;font-size:16px}
 .sh-foot .today{min-height:40px;padding:8px 16px}.shelfscreen .cover-opts{flex-direction:row;flex-wrap:wrap;gap:0 12px;font-size:12px}.shelfscreen .cover-opts label{min-height:28px}
 .sh-foot .beta{display:none}}
/* calm: no sway, motes, z's, wobble or idle bobbing */
@media (prefers-reduced-motion:reduce){.sh-wrap,.sh-mort img,.sh-worm img,.sh-tagcard{animation:none!important}.sh-motes,.sh-z{display:none}.sh-book{transition:none}}
body.rm .sh-wrap,body.rm .sh-mort img,body.rm .sh-worm img,body.rm .sh-tagcard,body.lowfx .sh-wrap,body.lowfx .sh-mort img,body.lowfx .sh-worm img,body.lowfx .sh-tagcard{animation:none!important}
body.rm .sh-motes,body.rm .sh-z,body.lowfx .sh-motes,body.lowfx .sh-z,body.lowfx .sh-beam{display:none}
body.rm .sh-book,body.lowfx .sh-book{transition:none}
body.lowfx .sh-plank,body.lowfx .sh-mort img,body.lowfx .sh-worm img{filter:none}
body.lowfx .sh-book:not([aria-pressed=true]) .b3d{animation:none!important}
@media (min-width:700px) and (min-height:501px){.sh-mort,.sh-mort img{width:84px}.sh-quip{font-size:17px}}
/* bookplate extras: what you keep, and Start Fresh (fresh.js) */
.sh-kept{margin:0 auto 8px;font:700 13px var(--sans);color:#4b5a2a}
.sh-fresh{display:block;margin:10px auto 0;background:none;border:0;padding:8px 10px;min-height:40px;font:700 14px var(--sans);color:var(--berry);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.sh-fresh:focus-visible{outline:3px solid var(--mustard);outline-offset:2px;border-radius:6px}
@media (max-height:500px){.sh-kept{font-size:12px;margin-bottom:4px}.sh-fresh{margin-top:4px;min-height:32px;padding:4px 8px;font-size:13px}}
.sh-fresh[hidden],.sh-kept[hidden]{display:none}
