:root{color:#241a13;background:#f4efe7;font-family:Inter,Helvetica Neue,Arial,Hiragino Sans,Yu Gothic,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,input{font:inherit}.app-shell{min-height:100vh;padding:32px;background:linear-gradient(180deg,#ffffffb8,#f4efe761),#f4efe7}.add-book-panel{position:relative;max-width:960px;margin:0 auto 28px}h1{margin:0 0 18px;color:#2b2119;font-size:2rem;font-weight:700;letter-spacing:0}.add-book-form{max-width:620px}label{display:block;margin-bottom:8px;color:#4f4338;font-size:.95rem;font-weight:700}.search-controls{display:flex;gap:10px;align-items:stretch}#search-input{width:min(100%,420px);min-height:44px;padding:10px 12px;border:1px solid #9e8c77;border-radius:6px;color:#241a13;background:#fffdf8}#search-input:focus{border-color:#5f7d72;outline:3px solid rgba(95,125,114,.24)}#add-button{min-width:84px;min-height:44px;padding:0 18px;border:1px solid #3f5f52;border-radius:6px;color:#fffdf8;background:#3f5f52;font-weight:700;cursor:pointer}#add-button:disabled{border-color:#8d9289;background:#8d9289;cursor:wait}#error-message{min-height:1.4em;margin:8px 0 0;color:#9b2f24;font-size:.92rem;font-weight:700}.search-results{position:absolute;z-index:10;top:100%;left:0;width:min(100%,620px);margin-top:6px;padding:12px;border:1px solid #9e8c77;border-radius:8px;background:#fffdf8;box-shadow:0 14px 32px #241a1342}.search-results-header{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-bottom:10px}.search-results-heading{color:#4f4338;font-size:.9rem;font-weight:700}#close-search-results{display:flex;width:30px;height:30px;align-items:center;justify-content:center;padding:0;border:1px solid #cbbba4;border-radius:50%;color:#4f4338;background:#fffdf8;font-size:1.1rem;line-height:1;cursor:pointer}#close-search-results:hover{border-color:#9b2f24;color:#9b2f24}#search-message:empty{display:none}#search-message{margin:0 0 10px;color:#4f4338;font-size:.92rem}.search-result-list{display:grid;max-height:min(420px,50vh);gap:8px;margin:0;overflow-y:auto;padding:0;list-style:none}.search-result-item{position:relative;display:flex;width:100%;gap:12px;align-items:flex-start;padding:10px;border:1px solid #cbbba4;border-radius:6px;color:inherit;background:#fffdf8;font-size:.92rem;text-align:left}.search-result-item:hover{border-color:#5f7d72;background:#fbf7ef}.search-result-toggle{position:absolute;z-index:0;top:0;right:0;bottom:0;left:0;width:100%;padding:0;border:0;border-radius:inherit;background:transparent;cursor:pointer}.search-result-cover,.search-result-body,.search-result-state{position:relative;z-index:1;pointer-events:none}.search-result-cover{flex:0 0 auto;width:44px;height:62px;border:1px solid rgba(36,26,19,.2);object-fit:contain;background:#f4efe7}.search-result-body{display:grid;min-width:0;gap:2px}.search-result-title{font-weight:700;line-height:1.35}.search-result-toggle:focus-visible{outline:3px solid rgba(95,125,114,.55);outline-offset:-2px}.search-result-author{display:flex;gap:6px;flex-wrap:wrap;color:#4f4338}.search-result-author-link{padding:0;border:0;border-radius:3px;color:#3f5f52;background:transparent;font-size:inherit;pointer-events:auto;text-align:left;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.search-result-author-link:hover{color:#9b2f24}.search-result-meta{display:flex;gap:8px;flex-wrap:wrap;align-items:center;color:#6d6055;font-size:.85rem}.search-result-format{padding:1px 7px;border:1px solid #9e8c77;border-radius:999px;color:#4f4338;font-size:.78rem}.search-result-state{margin-left:auto;align-self:center;color:#3f5f52;font-size:.85rem;font-weight:700;white-space:nowrap}#load-more-button{min-height:40px;width:100%;margin-top:10px;padding:0 18px;border:1px solid #9e8c77;border-radius:6px;color:#3f5f52;background:#fffdf8;font-weight:700;cursor:pointer}#load-more-button:hover{border-color:#5f7d72;background:#fbf7ef}.bookshelf-area{max-width:1014px;margin:0 auto;padding-top:18px;--wood-board: #4b3020;--wood-frame: #3a2417;--wood-back: #291810;--wood-grain-opacity: .5}.wood-grain-defs{position:absolute}#bookshelf{display:flex;align-items:flex-end;gap:0;overflow-x:auto;padding-bottom:22px}.bookcase{position:relative;flex:0 0 auto;padding:27px;background:var(--wood-frame);box-shadow:0 24px 34px -12px #00000080,inset 0 1px #ffffff29,inset 0 -2px 3px #00000080}.bookcase:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;filter:url(#wood-grain-vertical);opacity:var(--wood-grain-opacity);mix-blend-mode:multiply;pointer-events:none}.bookcase:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(90deg,rgba(255,255,255,.13) 0,transparent 24px),linear-gradient(270deg,rgba(0,0,0,.35) 0,transparent 24px),linear-gradient(180deg,rgba(255,255,255,.1) 0,transparent 27px)}.bookcase__interior{position:relative;display:flex;width:960px;flex-direction:column;background:var(--wood-back);box-shadow:inset 0 14px 22px -6px #000000bf,inset 14px 0 20px -8px #0009,inset -14px 0 20px -8px #0009,inset 0 -6px 10px #0006}.bookcase__interior:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;filter:url(#wood-grain-horizontal);opacity:calc(var(--wood-grain-opacity) * .8);mix-blend-mode:multiply;pointer-events:none}.shelf{position:relative}.shelf__books{position:relative;display:flex;align-items:flex-end;gap:0;padding:0 6px}.shelf__books:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#0000008c,#0000 42%);pointer-events:none}.shelf__shade{position:absolute;top:0;left:0;right:0;z-index:3;height:46%;background:linear-gradient(180deg,#0000006b,#0000);pointer-events:none}.shelf__board{position:relative;height:27px;background-color:var(--wood-board);background-image:linear-gradient(180deg,#ffffff4d 0,#ffffff1a 22%,#00000014 55%,#0000006b);box-shadow:0 3px 6px #0000008c,inset 0 1px #ffffff59}.shelf__board:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;filter:url(#wood-grain-horizontal);opacity:calc(var(--wood-grain-opacity) * .75);mix-blend-mode:multiply;pointer-events:none}.shelf__board:after{content:"";position:absolute;top:0;left:0;right:0;height:9px;background:linear-gradient(180deg,rgba(0,0,0,.75),rgba(0,0,0,.25) 45%,transparent)}.book-spine{position:relative;display:flex;flex:0 0 auto;align-items:center;justify-content:center;width:var(--book-thickness);min-width:12px;max-height:100%;padding:8px 3px;border:1px solid rgba(36,26,19,.3);border-radius:3px 3px 1px 1px;color:#fffaf0;background:linear-gradient(90deg,rgba(255,255,255,.22),transparent 28%,rgba(0,0,0,.13)),#6d4452;background-position:left center;background-repeat:no-repeat;background-size:1000% 100%;box-shadow:inset 2px 0 3px #ffffff1f,inset -2px 0 3px #0000003d,2px 0 4px #00000073,0 3px 4px -1px #000000b3;cursor:grab}.book-spine:active,.book-spine.sortable-chosen,.book-spine.sortable-drag{cursor:grabbing}.book-delete-button{position:absolute;top:2px;right:2px;z-index:2;display:none;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:1px solid rgba(255,255,255,.4);border-radius:50%;color:#fffaf0;background:#241a1399;font-size:.75rem;line-height:1;cursor:pointer}.book-spine:hover .book-delete-button,.book-spine:focus-within .book-delete-button{display:flex}.book-delete-button:hover{background:#9b2f24d9}.book-spine.is-cover-mode{width:var(--book-width);margin:0 8px;background-position:center;background-size:cover}.book-spine.is-cover-mode+.book-spine.is-cover-mode{margin-left:0}.book-spine.is-cover-mode.has-cover-image .book-title{display:none}.book-spine.is-tight-spine{padding-inline:0}.book-title{display:block;max-height:100%;overflow:hidden;color:#fffaf0;font-size:var(--title-font-size, .88rem);font-weight:700;letter-spacing:0;line-height:1.2;text-align:start;text-overflow:ellipsis;text-shadow:1px 1px 0 #1a120b,1px -1px 0 #1a120b,-1px 1px 0 #1a120b,-1px -1px 0 #1a120b,0 1px 0 #1a120b,0 -1px 0 #1a120b,1px 0 0 #1a120b,-1px 0 0 #1a120b;white-space:nowrap;writing-mode:vertical-rl}@supports (paint-order: stroke){.book-title{paint-order:stroke fill;text-shadow:0 1px 2px rgba(0,0,0,.45);-webkit-text-stroke:.2em #1a120b}}@media (max-width: 640px){.app-shell{padding:20px 14px}.search-controls{align-items:stretch}#search-input{flex:1 1 auto;min-width:0}#add-button{flex:0 0 auto}}
