html,body{margin:0}body{font-family:var(--font-body);-webkit-font-smoothing:antialiased;overflow-x:hidden}
body.bk-board::before{position:fixed}
a{color:var(--bk-amber);text-decoration:none}a:hover{color:var(--bk-amber-hi)}
.wrap{max-width:1240px;margin:0 auto;padding:0 40px;box-sizing:border-box}
button{font-family:inherit}
/* ── navbar (verbatim from Navbar & Footer) ── */
.nav{position:sticky;top:0;z-index:30;display:flex;align-items:center;height:64px;padding:0 40px;background:var(--bk-navy);border-bottom:1px solid var(--border-on-board);transition:height .2s var(--ease-settle),background .2s,box-shadow .2s}
.nav>*{position:relative;z-index:1}
.nav.scrolled{height:56px;background:var(--bk-navy-deep);box-shadow:0 10px 26px -12px rgba(0,0,0,.8)}
.brand{display:flex;align-items:center;gap:10px;color:var(--bk-paper)}.brand:hover{color:var(--bk-paper)}
.brand img{width:30px;height:30px;object-fit:contain}
.wm{position:relative;font:800 22px/1 var(--font-display);letter-spacing:-.02em}
.wm svg{position:absolute;left:2px;bottom:-6px;width:calc(100% - 6px);height:7px;overflow:visible}
.links{display:flex;align-items:center;gap:26px;margin-left:44px;flex:1}
.lk{position:relative;display:inline-block;font:500 14px/1 var(--font-body);color:var(--text-on-board-muted);padding:6px 0;white-space:nowrap;transition:color .2s;background:none;border:0;cursor:pointer}
.lk svg{position:absolute;left:-3px;bottom:-1px;width:calc(100% + 6px);height:6px;opacity:0;transition:opacity .15s}
.lk svg path{stroke-dasharray:130;stroke-dashoffset:130}
.lk:hover{color:var(--bk-cream-hi)}.lk:hover svg{opacity:.5}.lk:hover svg path{animation:draw .34s cubic-bezier(.3,.7,.3,1) both}
.lk.on{color:var(--bk-cream-hi);font-weight:600}.lk.on svg{opacity:1}.lk.on svg path{stroke-dashoffset:0}
@keyframes draw{from{stroke-dashoffset:130}to{stroke-dashoffset:0}}
.brand:hover img{animation:nod .5s var(--ease-pop) both}
@keyframes nod{0%{transform:none}35%{transform:rotate(-8deg) translateY(-1px)}70%{transform:rotate(3deg)}100%{transform:none}}
.wm svg path{stroke-dasharray:130;stroke-dashoffset:0}
.brand:hover .wm svg path{animation:draw .55s cubic-bezier(.3,.7,.3,1) both}
.lk .cv{font-size:11px;opacity:.55;margin-left:3px;vertical-align:1px;display:inline-block;transition:transform .2s}
.dd.open .lk{color:var(--bk-cream-hi)}.dd.open .lk .cv{transform:rotate(180deg)}.dd.open .lk svg{opacity:.35}
.btn{display:inline-block;font:600 13px/1 var(--font-body);color:var(--bk-cream-hi);background:var(--bk-blue);border:0;border-radius:4px;padding:11px 16px;cursor:pointer;box-shadow:0 1px 0 rgba(0,0,0,.4);transition:transform .12s,background .12s,box-shadow .12s}
.btn:hover{color:var(--bk-cream-hi);background:var(--bk-blue-ink);transform:translateY(1px);box-shadow:inset 0 2px 3px rgba(0,0,0,.3)}
.btn:active{transform:translateY(1px) scale(.985)}
.dd{position:relative}
.note{position:absolute;top:calc(100% + 10px);left:-28px;width:246px;padding:22px 18px 12px;background:var(--bk-paper);color:var(--bk-ink);border-radius:var(--radius-paper-a);box-shadow:var(--shadow-paper);transform:rotate(.5deg);transform-origin:50% 0;animation:note-in .38s cubic-bezier(.22,1.1,.36,1) both;z-index:9}
.note::after{content:"";position:absolute;inset:0;background:var(--texture-paper);opacity:.7;pointer-events:none;border-radius:inherit}
.note>*{position:relative;z-index:1}
.note .tape{position:absolute;top:-11px;left:50%;width:76px;height:21px;margin-left:-38px;background:var(--tape-amber);box-shadow:var(--shadow-tape);transform:rotate(-2.5deg);z-index:2}
.ni{display:block;padding:10px 8px;margin:0 -8px;color:var(--bk-ink);border-radius:2px;transition:background .15s}
.ni:hover{color:var(--bk-ink);background:var(--marker-swipe)}
.ni b{display:block;font:600 16px/1.15 var(--font-display);letter-spacing:-.01em;clip-path:inset(-4px 100% -4px -4px);animation:write .42s cubic-bezier(.4,.1,.4,1) both}
.ni:nth-child(3) b{animation-delay:.22s}
@keyframes write{to{clip-path:inset(-4px -4px -4px -4px)}}
.ni span{display:block;margin-top:3px;font:400 13px/1.35 var(--font-body);color:var(--bk-pencil);opacity:0;animation:bk-fade-in .3s ease both}
.ni:nth-child(2) span{animation-delay:.3s}.ni:nth-child(3) span{animation-delay:.6s}
.ni+.ni{position:relative}.ni+.ni::before{content:"";position:absolute;top:0;left:8px;right:8px;height:1px;background:repeating-linear-gradient(90deg,var(--border-on-paper-strong) 0 4px,transparent 4px 7px);clip-path:inset(0 100% 0 0);animation:write .3s ease .5s both}
@keyframes note-in{0%{opacity:0;transform:translateY(-14px) rotate(-1.2deg) scaleY(.9)}60%{opacity:1;transform:translateY(3px) rotate(1deg) scaleY(1.02)}80%{transform:translateY(-1px) rotate(.3deg)}100%{opacity:1;transform:translateY(0) rotate(.5deg) scaleY(1)}}
.hb{display:none;width:44px;height:44px;place-items:center;margin:0 -10px 0 auto;color:var(--bk-cream);background:none;border:0;cursor:pointer}
/* mobile menu sheet */
.scrim{position:fixed;inset:0;background:var(--bk-scrim);z-index:40;animation:bk-fade-in 200ms both}
.msheet{position:fixed;top:0;right:0;bottom:0;width:min(318px,88vw);box-sizing:border-box;background:var(--bk-paper);color:var(--bk-ink);border-radius:var(--radius-paper-c) 0 0 var(--radius-paper-c);box-shadow:var(--shadow-modal);z-index:41;display:flex;flex-direction:column;padding:64px 26px 22px;animation:sheet-in 260ms var(--ease-settle) both;overflow-y:auto}
.msheet::after{content:"";position:absolute;inset:0;background:var(--texture-paper);opacity:.7;pointer-events:none;border-radius:inherit}
.msheet>*{position:relative;z-index:1}
@keyframes sheet-in{from{transform:translateX(100%)}to{transform:none}}
.msheet .tp{position:absolute;top:6px;left:50%;margin-left:-44px;width:88px;height:22px;background:var(--tape-amber);box-shadow:var(--shadow-tape);opacity:.92;transform:rotate(-2deg);z-index:3}
.x{position:absolute;top:14px;right:14px;width:44px;height:44px;display:grid;place-items:center;font:500 20px/1 var(--font-body);color:var(--bk-ink-2);background:none;border:0;cursor:pointer}
.ml{display:block;position:relative;font:600 20px/1.15 var(--font-display);color:var(--bk-ink);padding:13px 0;letter-spacing:-.01em}
.ml+.ml{border-top:1px dashed var(--border-on-paper)}
.ml.on i{position:absolute;left:-3px;bottom:8px;width:110px;height:6px}.ml.on i svg{position:absolute;inset:0;width:100%;height:100%}
.msheet .btn{display:block;text-align:center;margin-top:auto;padding:15px;font-size:15px}
/* ── footer (verbatim) ── */
.ft{position:relative;background:var(--bk-navy-deep);padding:64px 40px 26px;margin-top:96px}
.ft>*{position:relative;z-index:1}
.torn{position:absolute;top:0;left:0;width:100%;height:12px;display:block;z-index:2}.torn path+path{display:none}
.ftg{display:grid;grid-template-columns:400px 1fr 1fr 1fr;gap:40px;max-width:1240px;margin:0 auto}
.scrap{position:relative;width:318px;padding:34px 28px 28px;background:var(--bk-paper);color:var(--bk-ink);border-radius:3px 2px 5px 2px / 2px 4px 2px 5px;box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 1px 2px rgba(0,0,0,.45),0 4px 6px -2px rgba(0,0,0,.35),0 22px 34px -16px rgba(0,0,0,.85);transform:rotate(-1deg);box-sizing:border-box}
.scrap::before{content:"";position:absolute;inset:-1px;background:var(--bk-paper);border-radius:inherit;-webkit-mask:var(--mask-stamp);mask:var(--mask-stamp);opacity:.9;z-index:0}
.scrap::after{content:"";position:absolute;inset:0;background:var(--texture-paper);opacity:.9;pointer-events:none;border-radius:inherit}
.scrap>*{position:relative;z-index:1}
.scrap .brand::before,.scrap .brand::after{content:"";position:absolute;width:78px;height:22px;background:var(--tape-amber);box-shadow:var(--shadow-tape);opacity:.92;z-index:3;pointer-events:none}
.scrap .brand::before{top:-9px;left:-22px;transform:rotate(-38deg)}.scrap .brand::after{top:-8px;right:-24px;transform:rotate(36deg)}
.scrap .brand{position:static;color:var(--bk-ink)}.scrap .brand img{filter:brightness(0);opacity:.86}
.scrap p{margin:14px 0 0;font:400 14px/1.5 var(--font-body);color:var(--bk-ink-2);text-wrap:pretty}
.soc{display:flex;gap:8px;margin:26px 0 0 6px}
.so{position:relative;width:36px;height:36px;display:grid;place-items:center;color:var(--text-on-board-muted);transition:color .2s}
.so:hover{color:var(--bk-cream-hi)}
.so svg{position:absolute;inset:0;width:100%;height:100%}
.fh{position:relative;display:inline-block;font:700 15px/1 var(--font-display);color:var(--bk-cream-hi);margin:0 0 20px;letter-spacing:-.01em}
.fh svg{position:absolute;left:-2px;bottom:-8px;width:62%;height:6px}
.fl{display:block;font:400 14px/1.3 var(--font-body);color:var(--text-on-board-muted);padding:5px 0;transition:color .2s}
.fl:hover{color:var(--bk-cream-hi)}
.fb{display:flex;align-items:center;gap:22px;max-width:1240px;margin:46px auto 0;padding-top:20px;border-top:1px solid var(--border-on-board);font:400 13px/1 var(--font-body);color:var(--text-on-board-faint)}
.fb a{color:var(--text-on-board-faint)}.fb a:hover{color:var(--bk-cream-hi)}
.soul{position:relative;margin-left:auto;display:inline-block}
.fstamp{display:inline-block;padding:7px 10px 6px;border:2px solid var(--bk-stamp-red);border-radius:4px;color:var(--bk-stamp-red);font:800 11px/1 var(--font-display);letter-spacing:.12em;transform:rotate(-2.5deg);-webkit-mask:var(--mask-stamp);mask:var(--mask-stamp);opacity:.92;white-space:nowrap;cursor:pointer;user-select:none;background:none}
.fstamp .h{display:inline-block;font-size:12px;letter-spacing:0;margin:0 2px}
.fstamp:hover .h{animation:beat 1.1s ease-in-out infinite}
@keyframes beat{0%,100%{transform:scale(1)}14%{transform:scale(1.28)}28%{transform:scale(1)}42%{transform:scale(1.18)}60%{transform:scale(1)}}
.pn{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%) rotate(-3deg);font:600 17px/1 var(--font-hand);color:var(--bk-cream);opacity:.85;white-space:nowrap;pointer-events:none;transform-origin:50% 100%;animation:pn-in 220ms var(--ease-pop) both,pn-out 300ms ease 2.3s both}
@keyframes pn-in{from{opacity:0;transform:translateX(-50%) translateY(6px) rotate(-6deg) scaleY(.6)}to{opacity:.85;transform:translateX(-50%) rotate(-3deg)}}
@keyframes pn-out{to{opacity:0}}
.mh{position:absolute;left:50%;bottom:60%;font:700 11px/1 var(--font-display);color:var(--bk-stamp-red);pointer-events:none;animation:mh 1.3s var(--ease-settle) both}
@keyframes mh{from{opacity:.9;transform:translate(var(--x,0),0) scale(.7)}to{opacity:0;transform:translate(var(--x,0),-44px) scale(1.1) rotate(var(--r,0deg))}}
/* ── paper primitives ── */
.paper{position:relative;background:var(--bk-paper);color:var(--bk-ink);border-radius:var(--radius-paper-a);box-shadow:var(--shadow-paper)}
.paper::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:.7;background:var(--texture-paper);z-index:0}
.paper>*{position:relative;z-index:1}
.kraft{background:var(--bk-kraft)}.hi{background:var(--bk-paper-hi)}
.tape{position:absolute;width:82px;height:23px;background:var(--tape-amber);box-shadow:var(--shadow-tape);opacity:.92;z-index:3!important;pointer-events:none}
.tape.teal{background:var(--tape-teal)}
.tape.top{top:-11px;left:50%;margin-left:-41px;transform:rotate(-2deg)}
.tape.tl{top:-9px;left:-20px;transform:rotate(-38deg)}.tape.tr{top:-9px;right:-20px;transform:rotate(36deg)}
.hand{font:var(--type-hand-md);color:var(--bk-pencil)}.hand.on-board{color:var(--bk-cream);opacity:.85}
.stamp{display:inline-block;padding:5px 9px 4px;border:2px solid currentColor;border-radius:4px;font:800 13px/1 var(--font-display);letter-spacing:.06em;white-space:nowrap;-webkit-mask:var(--mask-stamp);mask:var(--mask-stamp);mix-blend-mode:multiply;transform:rotate(var(--rot,-3deg))}
.stamp.lg{padding:8px 12px 7px;border-width:3px;font-size:18px}
.stamp.green{color:var(--bk-stamp-green)}.stamp.amber{color:var(--bk-stamp-amber)}.stamp.red{color:var(--bk-stamp-red);opacity:.9}.stamp.blue{color:var(--bk-blue-ink)}
.sticker{display:inline-block;border:1.5px solid currentColor;border-radius:2px;padding:4px 8px;font:700 10px/1 var(--font-body);letter-spacing:.14em;text-transform:uppercase;mix-blend-mode:multiply;transform:rotate(var(--rot,-2deg));color:var(--bk-ink-2)}
.sticker.green{color:var(--bk-stamp-green)}.sticker.amber{color:var(--bk-fav)}.sticker.teal{color:#4F8A84}.sticker.blue{color:var(--bk-blue-ink)}
.eb{font:var(--type-eyebrow);letter-spacing:var(--tracking-eyebrow);text-transform:uppercase;color:var(--bk-pencil);margin:0}
.rule{display:block;width:100%;max-width:300px;height:6px;margin-top:8px}
.plink{display:inline;background:none;border:0;padding:0;cursor:pointer;font:inherit;color:var(--bk-ink-2);border-bottom:1px dashed var(--bk-pencil)}.plink:hover{color:var(--bk-ink);border-bottom-color:var(--bk-ink)}
.blink{display:inline;background:none;border:0;padding:0;cursor:pointer;font:500 14px/1 var(--font-body);color:var(--bk-amber)}.blink:hover{color:var(--bk-amber-hi);text-decoration:underline}
.ink-btn{display:inline-block;font:600 14px/1 var(--font-body);color:var(--bk-paper);background:var(--bk-ink);border:0;border-radius:4px;padding:12px 16px;cursor:pointer;transition:transform .12s,background .12s}
.ink-btn:hover{color:var(--bk-paper);background:#000;transform:translateY(1px)}
/* ── hero ── */
.hero{display:grid;grid-template-columns:1fr 340px;gap:40px;align-items:end;padding-top:72px}
.eyebrow{font:var(--type-eyebrow);letter-spacing:var(--tracking-eyebrow);color:var(--text-on-board-faint);margin:0 0 14px}
.hero h1{position:relative;display:inline-block;font:800 54px/1 var(--font-display);letter-spacing:-.02em;color:var(--bk-cream-hi);margin:0}
.hero h1 svg{position:absolute;left:-4px;right:-4px;bottom:-10px;height:9px;width:calc(100% + 8px)}
.hero h1 svg path{stroke-dasharray:130;stroke-dashoffset:130;animation:draw .62s var(--ease-draw) .5s both}
.lead{font:400 16px/1.5 var(--font-body);color:var(--text-on-board-muted);max-width:520px;margin:22px 0 0;text-wrap:pretty}
.count{margin:12px 0 0;font:var(--type-meta);color:var(--text-on-board-faint);font-variant-numeric:tabular-nums}
/* librarian card */
.libcard{--rot:1.2deg;transform:rotate(var(--rot));padding:22px 22px 18px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) .15s both}
.libcard .ttl{font:600 21px/1.2 var(--font-hand);color:var(--bk-ink);margin:0}
.libcard p{margin:8px 0 0;font:400 14px/1.45 var(--font-body);color:var(--bk-ink-2);text-wrap:pretty}
.libcard .sig{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:10px;border-top:1px dashed var(--border-on-paper)}
.libcard .sig .hand{color:var(--bk-ink-2)}
/* controls row */
.ctl{display:flex;align-items:flex-end;gap:26px;margin-top:46px;flex-wrap:wrap}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tab{position:relative;font:var(--type-tab);color:var(--text-on-board-muted);background:none;border:1px solid var(--border-on-board);border-radius:4px;padding:10px 14px;cursor:pointer;transition:color .2s,border-color .2s,transform .2s}
.tab:hover{color:var(--bk-cream-hi);border-color:var(--border-on-board-strong)}
.tab.on{color:var(--bk-ink);background:var(--bk-paper);border-color:var(--bk-paper);box-shadow:var(--shadow-tab-active);transform:rotate(-.6deg)}
.tab.on::after{content:"";position:absolute;top:-7px;left:50%;width:34px;height:11px;margin-left:-17px;background:var(--tape-amber);box-shadow:var(--shadow-tape);transform:rotate(-3deg);opacity:.92}
.tab small{font:600 11px/1 var(--font-body);opacity:.55;margin-left:5px}
.search{position:relative;flex:1;min-width:220px;max-width:340px}
.search input{width:100%;height:44px;box-sizing:border-box;background:var(--surface-input);border:1px solid var(--border-on-board);border-radius:4px;color:var(--bk-cream-hi);font:400 14px/1 var(--font-body);padding:0 36px 0 14px;outline:0;transition:border-color .2s,box-shadow .2s}
.search input::placeholder{color:var(--text-on-board-faint)}
.search input:focus{border-color:var(--bk-blue);box-shadow:0 0 0 3px rgba(76,125,240,.2)}
.search .k{position:absolute;right:12px;top:50%;transform:translateY(-50%);font:600 11px/1 var(--font-body);color:var(--text-on-board-faint);border:1px solid var(--border-on-board);border-radius:3px;padding:3px 5px;pointer-events:none}
.seg{display:inline-flex;border:1px solid var(--border-on-board);border-radius:4px;overflow:hidden;margin-left:auto}
.seg button{font:var(--type-ui);color:var(--text-on-board-muted);background:none;border:0;padding:0 14px;height:42px;cursor:pointer;transition:background .2s,color .2s}
.seg button+button{border-left:1px solid var(--border-on-board)}
.seg button.on{background:var(--bk-cream);color:var(--bk-ink)}
/* ── shelf ── */
.shelves{margin-top:40px}
.shelf{position:relative;padding:0 26px 0;min-height:340px;display:flex;align-items:flex-end;gap:7px}
.shelf .plank{position:absolute;left:-14px;right:-14px;bottom:0;height:16px;background:var(--bk-kraft);border-radius:2px 3px 2px 3px;box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 3px 0 #B9AD8E,0 26px 34px -14px rgba(0,0,0,.95);z-index:0}
.shelf .plank::after{content:"";position:absolute;inset:0;background:var(--texture-paper);opacity:.9;border-radius:inherit}
.shelf .plank i{position:absolute;bottom:-3px;left:-2px;right:-2px;height:14px;background:linear-gradient(to bottom,rgba(0,0,0,.35),transparent);border-radius:0 0 3px 3px}
.shelf-lbl{position:absolute;left:0;top:-8px;padding:5px 9px 4px;background:var(--bk-paper-hi);color:var(--bk-ink);font:700 11px/1 var(--font-body);letter-spacing:.14em;text-transform:uppercase;border-radius:2px;box-shadow:0 1px 2px rgba(0,0,0,.35);transform:rotate(-1.5deg);z-index:2}
.shelf-lbl::before{content:"";position:absolute;left:50%;top:-6px;width:5px;height:5px;margin-left:-2px;border-radius:50%;background:#D0483A;box-shadow:0 1px 1px rgba(0,0,0,.4)}
.book{position:relative;z-index:1;width:64px;height:var(--h,270px);margin-bottom:16px;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:14px 0 12px;box-sizing:border-box;background:var(--bk-paper);color:var(--bk-ink);border:0;border-radius:2px 2px 1px 1px;cursor:pointer;text-align:center;box-shadow:inset 3px 0 0 rgba(255,255,255,.45),inset -4px 0 6px -3px rgba(0,0,0,.28),2px 0 0 rgba(0,0,0,.18),0 2px 3px rgba(0,0,0,.35);transform:translateY(0) rotate(var(--lean,0deg));transform-origin:50% 100%;transition:transform .32s var(--ease-settle),box-shadow .32s;opacity:0;animation:book-in .5s var(--ease-settle) both;animation-delay:calc(var(--i,0)*60ms + .1s)}
@keyframes book-in{from{opacity:0;transform:translateY(-26px) rotate(var(--lean,0deg))}to{opacity:1;transform:translateY(0) rotate(var(--lean,0deg))}}
.book.kraft{background:var(--bk-kraft)}.book.hi{background:var(--bk-paper-hi)}
.book::before{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--texture-paper);opacity:.8;pointer-events:none}
.book:hover,.book:focus-visible{transform:translateY(-14px) rotate(0deg);box-shadow:inset 3px 0 0 rgba(255,255,255,.45),inset -4px 0 6px -3px rgba(0,0,0,.28),2px 0 0 rgba(0,0,0,.18),0 14px 22px -8px rgba(0,0,0,.75);z-index:3;outline:0}
.book:active{transform:translateY(-10px) scale(.99)}
.book .band{position:absolute;top:34px;left:0;right:0;height:8px;background:var(--tape-amber);opacity:.85}
.book.z .band{background:var(--tape-teal)}
.book .sp{writing-mode:vertical-rl;font:700 15px/1.05 var(--font-display);letter-spacing:-.01em;max-height:calc(100% - 92px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:34px;position:relative;z-index:1}
.book .no{position:relative;z-index:1;font:700 9px/1 var(--font-body);letter-spacing:.12em;color:var(--bk-ink-2);background:var(--bk-paper-hi);border:1px solid var(--border-on-paper-strong);padding:4px 3px 3px;border-radius:1px;writing-mode:horizontal-tb}
.book .no b{display:block;font-size:10px;margin-top:2px;letter-spacing:.02em}
.book .peek{position:absolute;left:50%;bottom:calc(100% + 12px);transform:translateX(-50%) rotate(-2deg);width:180px;padding:9px 11px;background:var(--bk-paper-hi);color:var(--bk-ink);font:400 12px/1.35 var(--font-body);border-radius:var(--radius-paper-b);box-shadow:var(--shadow-paper-lift);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;text-align:left;z-index:5}
.book .peek b{display:block;font:600 13px/1.2 var(--font-display);margin-bottom:3px}
.book .peek i{display:block;margin-top:4px;font:600 14px/1 var(--font-hand);color:var(--bk-pencil)}
.book:hover .peek{opacity:1;transform:translateX(-50%) translateY(-4px) rotate(-2deg)}
.book.read::after{content:"✓";position:absolute;top:8px;right:6px;width:14px;height:14px;font:700 10px/14px var(--font-body);color:var(--bk-stamp-green);z-index:2}
.book.locked{cursor:default;background:transparent;border:1.5px dashed var(--border-on-board-strong);box-shadow:none;color:var(--text-on-board-faint);animation:none;opacity:1}
.book.locked::before{display:none}.book.locked .sp{color:var(--text-on-board-faint);font-weight:600}.book.locked .no{background:transparent;border-color:var(--border-on-board);color:var(--text-on-board-faint)}
.book.locked:hover{transform:none;box-shadow:none}
.lean{--lean:-7deg;margin-left:14px}
.bookend{position:relative;z-index:1;width:28px;height:118px;margin-bottom:16px;margin-left:8px;background:var(--bk-navy-2);border:1px solid var(--border-on-board-strong);border-radius:2px;box-shadow:0 2px 3px rgba(0,0,0,.35)}
.bookend::after{content:"";position:absolute;left:-1px;right:-1px;bottom:-1px;height:18px;background:var(--bk-navy-2);border:1px solid var(--border-on-board-strong);border-top:0}
.gap{flex:1}
.locknote{position:relative;z-index:2;align-self:flex-end;margin:0 0 42px 22px;width:262px;padding:22px 20px 18px;--rot:1.6deg;transform:rotate(var(--rot));animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) .5s both;box-sizing:border-box}
.locknote h3{font:700 22px/1.15 var(--font-display);letter-spacing:-.01em;margin:0}
.locknote p{margin:8px 0 14px;font:400 14px/1.45 var(--font-body);color:var(--bk-ink-2)}
.locknote .hand{display:block;margin-top:10px}
.shelf-note{position:absolute;right:30px;top:-6px;transform:rotate(-3deg);z-index:2}
.empty{width:100%;text-align:center;margin-bottom:60px;padding:40px;border:1.5px dashed var(--border-on-board-strong);border-radius:3px;color:var(--text-on-board-muted);font:400 14px/1.4 var(--font-body)}
.empty .hand{display:block;margin-top:6px;font-size:21px}
/* ── catalog view ── */
.catalog{margin-top:40px;display:grid;grid-template-columns:1fr 300px;gap:40px;align-items:start}
.catsheet{--rot:-.3deg;transform:rotate(var(--rot));padding:26px 26px 18px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) both}
.catsheet h2{font:var(--type-display-sm);margin:6px 0 0}
.row{display:flex;align-items:baseline;gap:10px;width:100%;padding:13px 8px 11px;margin:0 -8px;box-sizing:content-box;background:none;border:0;border-top:1px dashed var(--border-on-paper);cursor:pointer;text-align:left;color:var(--bk-ink);border-radius:2px;transition:background .2s;font:inherit}
.row:first-of-type{border-top:0}
.row:hover{background:rgba(34,30,23,.05)}.row:active{background:rgba(34,30,23,.08)}
.row .rno{font:700 10px/1 var(--font-body);letter-spacing:.12em;color:var(--bk-pencil);min-width:56px}
.row .rt{font:var(--type-item-lg);letter-spacing:-.01em}
.row .rt small{display:block;font:400 13px/1.35 var(--font-body);color:var(--bk-pencil);margin-top:3px}
.row .ld{flex:1 1 auto;min-width:12px;border-bottom:var(--leader);transform:translateY(-4px)}
.row .rm{font:var(--type-meta);color:var(--bk-ink-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.row .arr{font:500 14px/1 var(--font-body);color:var(--bk-pencil);transition:transform .2s}
.row:hover .arr{transform:translateX(3px);color:var(--bk-ink)}
.row.locked{cursor:default;color:var(--bk-pencil)}.row.locked:hover{background:none}.row.locked .rt{color:var(--bk-pencil)}
.catcard{--rot:1.4deg;transform:rotate(var(--rot));padding:20px 22px 16px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) .12s both}
.catcard .ttl{font:700 17px/1.1 var(--font-display);margin:6px 0 10px;letter-spacing:.02em}
.catcard .ln{display:flex;justify-content:space-between;gap:10px;padding:9px 0 6px;border-bottom:1px solid var(--border-on-paper-strong);font:500 13px/1.2 var(--font-body);color:var(--bk-ink-2)}
.catcard .ln b{font:600 14px/1 var(--font-hand);color:var(--bk-ink)}
.catcard .ln.h{color:var(--bk-pencil);font-size:10px;letter-spacing:.12em;text-transform:uppercase;border-bottom-color:var(--bk-ink-2)}
.catcard .ln.rest{color:transparent}.catcard .ln.rest b{color:transparent}
/* ── reader ── */
.reader{padding-top:40px}
.rtop{display:flex;align-items:center;gap:18px;margin-bottom:34px;flex-wrap:wrap}
.rtop .crumb{font:var(--type-meta);color:var(--text-on-board-faint)}
.rtop .crumb b{color:var(--text-on-board-muted);font-weight:500}
.rgrid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:40px;align-items:start}
.article{--rot:-.3deg;transform:rotate(var(--rot));padding:44px 56px 48px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) both;overflow:visible}
.article .ribbon{position:absolute;top:-6px;right:44px;width:20px;height:0;max-height:100%;background:var(--bk-today);box-shadow:0 2px 3px rgba(0,0,0,.35);z-index:4;transition:height .15s linear;border-radius:0 0 1px 1px}
.article .ribbon::after{content:"";position:absolute;left:0;right:0;bottom:-8px;border-left:10px solid var(--bk-today);border-right:10px solid var(--bk-today);border-bottom:8px solid transparent}
.article .meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font:var(--type-meta);color:var(--bk-pencil);font-variant-numeric:tabular-nums;margin-top:12px}
.article h1{font:800 38px/1.08 var(--font-display);letter-spacing:-.015em;margin:12px 0 0;text-wrap:pretty}
.article .sub{font:400 18px/1.4 var(--font-body);color:var(--bk-ink-2);margin:10px 0 0;text-wrap:pretty}
.article .body{margin-top:26px;font:400 16px/1.65 var(--font-body);color:var(--bk-ink);max-width:640px}
.body p{margin:0 0 18px;text-wrap:pretty}
.body h3{font:700 22px/1.2 var(--font-display);letter-spacing:-.01em;margin:34px 0 12px;padding-top:18px;border-top:1px dashed var(--border-on-paper)}
.body code{font:500 14px/1.4 ui-monospace,"SF Mono",Menlo,Consolas,monospace;background:rgba(34,30,23,.07);padding:1px 5px;border-radius:2px}
.body b{font-weight:600}
.body ul,.body ol{margin:0 0 18px;padding-left:22px}.body li{margin:6px 0;text-wrap:pretty}
.body dl{margin:0 0 18px}.body dl div{display:flex;gap:10px;align-items:baseline;padding:9px 0;border-bottom:1px dashed var(--border-on-paper)}
.body dt{font:600 15px/1.3 ui-monospace,Menlo,Consolas,monospace;min-width:72px;white-space:nowrap}.body dd{margin:0;color:var(--bk-ink-2);font-size:15px}
.cb{position:relative;margin:0 0 20px;background:var(--bk-kraft);border-radius:var(--radius-paper-b);box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 1px 2px rgba(0,0,0,.2);transform:rotate(-.25deg)}
.cb:nth-of-type(even){transform:rotate(.2deg)}
.cb::before{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--texture-paper);opacity:.8;pointer-events:none}
.cb .ch{position:relative;display:flex;align-items:center;justify-content:space-between;padding:8px 12px 0 14px}
.cb .lang{font:700 10px/1 var(--font-body);letter-spacing:.14em;text-transform:uppercase;color:var(--bk-pencil)}
.cb pre{position:relative;margin:0;padding:8px 14px 14px;font:500 13.5px/1.6 ui-monospace,"SF Mono",Menlo,Consolas,monospace;color:var(--bk-ink);overflow-x:auto;white-space:pre;tab-size:4}
.cb pre .c{color:var(--bk-pencil);font-style:italic}.cb pre .k{color:var(--bk-blue-ink);font-weight:600}
.copy{font:600 12px/1 var(--font-body);color:var(--bk-ink-2);background:none;border:0;border-bottom:1px dashed var(--bk-pencil);padding:2px 0;cursor:pointer;transition:color .2s}
.copy:hover{color:var(--bk-ink);border-bottom-color:var(--bk-ink)}
.copy.ok{color:var(--bk-stamp-green);border-bottom-color:transparent}
.hn{position:relative;margin:4px 0 22px 0;padding:6px 0 6px 18px;font:600 19px/1.25 var(--font-hand);color:var(--bk-ink-2);transform:rotate(-1.2deg);border-left:2px solid var(--bk-amber);max-width:520px}
.hn::before{content:"";position:absolute;left:-3px;top:-6px;width:24px;height:12px;background:var(--tape-amber);opacity:.85;transform:rotate(-20deg);box-shadow:var(--shadow-tape)}
.done{display:flex;align-items:center;gap:22px;margin-top:40px;padding-top:24px;border-top:1px dashed var(--border-on-paper);flex-wrap:wrap}
.done .stamp{opacity:0;transform:scale(1.4) rotate(-8deg)}
.done.in .stamp{animation:bk-stamp-in var(--dur-stamp) var(--ease-press) both;--rot:-8deg}
.done .hand{color:var(--bk-pencil)}
.pn2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:22px}
.pn2 button{text-align:left;background:none;border:1.5px dashed var(--border-on-paper-strong);border-radius:3px;padding:12px 14px;cursor:pointer;color:var(--bk-ink);transition:background .2s,border-color .2s;font:inherit}
.pn2 button:hover{background:rgba(34,30,23,.05);border-color:var(--bk-ink)}
.pn2 button:disabled{opacity:.35;cursor:default}.pn2 button:disabled:hover{background:none;border-color:var(--border-on-paper-strong)}
.pn2 small{display:block;font:var(--type-eyebrow);letter-spacing:var(--tracking-eyebrow);color:var(--bk-pencil);margin-bottom:5px}
.pn2 b{font:600 16px/1.2 var(--font-display);letter-spacing:-.01em}
.pn2 .nx{text-align:right}
.side{position:sticky;top:88px;display:flex;flex-direction:column;gap:34px}
.toc{--rot:1.1deg;transform:rotate(var(--rot));padding:20px 22px 16px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) .1s both}
.toc .ttl{font:700 17px/1.1 var(--font-display);margin:6px 0 8px;letter-spacing:.02em}
.toc a{display:block;padding:7px 0;font:500 14px/1.3 var(--font-body);color:var(--bk-ink-2);border-bottom:1px dashed var(--border-on-paper);border-radius:0;transition:color .15s,padding-left .2s}
.toc a:last-child{border-bottom:0}
.toc a:hover{color:var(--bk-ink)}.toc a.on{color:var(--bk-ink);font-weight:600;padding-left:10px;background:var(--marker-swipe)}
.checkout{--rot:-1.6deg;transform:rotate(var(--rot));padding:18px 20px 14px;animation:bk-sheet-in var(--dur-sheet) var(--ease-settle) .2s both}
.checkout .ttl{font:700 12px/1 var(--font-body);letter-spacing:.14em;text-transform:uppercase;text-align:center;color:var(--bk-ink-2);padding-bottom:8px;border-bottom:2px solid var(--bk-ink-2)}
.checkout .ln{display:flex;justify-content:space-between;padding:8px 0 5px;border-bottom:1px solid var(--border-on-paper-strong);font:600 15px/1 var(--font-hand);color:var(--bk-ink-2)}
.checkout .ln.you{color:var(--bk-blue-ink)}
.checkout .ln.rest{height:12px}
.checkout .act{display:flex;justify-content:space-between;align-items:center;margin-top:12px}
.checkout .stamp.sm{font-size:11px;padding:4px 7px 3px;border-width:2px;--rot:4deg}
.mark{font:600 13px/1 var(--font-body);color:var(--bk-ink-2);background:none;border:0;border-bottom:1px dashed var(--bk-pencil);padding:2px 0;cursor:pointer}.mark:hover{color:var(--bk-ink);border-bottom-color:var(--bk-ink)}
.mark.on{color:var(--bk-fav);border-bottom-color:transparent}
/* views */
.view{animation:bk-view-in var(--dur-view) var(--ease-settle) both}
[hidden]{display:none!important}
/* ── responsive ── */
@media (max-width:1100px){.hero{grid-template-columns:1fr}.libcard{max-width:340px}.rgrid,.catalog{grid-template-columns:1fr}.side{position:static}.ftg{grid-template-columns:1fr 1fr}}
@media (max-width:1180px){.links,.nav .btn{display:none}.hb{display:grid}}
@media (max-width:820px){.wrap{padding:0 16px}.nav{padding:0 16px}.hero{padding-top:44px}.hero h1{font-size:40px}.seg{margin-left:0}.shelf{flex-wrap:wrap;min-height:0;padding:0 10px;gap:6px}.shelf .plank{display:none}.book{width:52px;--h:220px!important;margin-bottom:10px}.book .sp{font-size:13px}.lean{--lean:0deg;margin-left:0}.bookend,.gap{display:none}.locknote{width:100%;margin:26px 0 0;align-self:stretch}.article{padding:30px 22px 34px}.article h1{font-size:28px}.article .ribbon{right:14px}.ft{padding:52px 16px 22px}.ftg{display:block}.scrap{width:auto;margin:0 6px;transform:rotate(-.6deg)}.ft .col{margin-top:34px}.fb{flex-wrap:wrap;gap:14px 20px}.soul{margin:6px 0 0}.pn2{grid-template-columns:1fr}.pn2 .nx{text-align:left}}
@media (prefers-reduced-motion:reduce){.book,.libcard,.catsheet,.catcard,.toc,.checkout,.article,.locknote,.view,.note,.msheet,.scrim{animation:bk-fade-in .2s both!important}.hero h1 svg path{stroke-dashoffset:0;animation:none}.lk svg path,.lk:hover svg path{animation:none;stroke-dashoffset:0}.ni b{clip-path:none;animation:none}.ni span{opacity:1;animation:none}.ni+.ni::before{clip-path:none;animation:none}}
