*,*:before,*:after{box-sizing:border-box}:root{font-family:Hiragino Kaku Gothic ProN,Noto Sans JP,system-ui,sans-serif;line-height:1.5;font-weight:400;color:#213547;background-color:#fff;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;min-height:100vh}#root{width:100%;height:100vh}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.app-header{display:flex;align-items:center;gap:16px;padding:8px 16px;background:#2c3e50;color:#ecf0f1;flex-shrink:0}.app-title{font-size:1.1rem;margin:0;white-space:nowrap}.search-bar{display:flex;align-items:center;gap:8px;flex:1;max-width:400px}.search-bar input{width:100%;padding:6px 12px;border:none;border-radius:4px;font-size:.9rem;background:#3d566e;color:#ecf0f1}.search-bar input::placeholder{color:#95a5a6}.search-bar input:focus{outline:2px solid #3498db;background:#4a6580}.search-spinner{width:16px;height:16px;border:2px solid #3498db;border-top-color:transparent;border-radius:50%;animation:spin .6s linear infinite}.app-body{display:flex;flex:1;overflow:hidden}.main-canvas{position:relative;display:flex;background:#e0ddd5;min-width:0;flex-basis:0%;transition:flex-grow .3s ease;overflow:hidden}.main-canvas.active{flex-grow:4}.main-canvas.inactive{flex-grow:0;flex-basis:0}.search-overlay{position:absolute;top:8px;left:8px;width:360px;max-height:calc(100% - 16px);background:#fffffff2;border-radius:8px;box-shadow:0 2px 12px #0003;overflow-y:auto;padding:12px;z-index:10}.search-no-results{color:#7f8c8d;font-size:.85rem;margin:0}.search-count{font-size:.8rem;color:#7f8c8d;margin:0 0 8px}.search-results ul{list-style:none;padding:0;margin:0}.search-result-item{display:flex;flex-direction:column;gap:2px;padding:6px 8px;border-bottom:1px solid #eee;font-size:.85rem}.search-result-item:hover{background:#f0f6ff}.result-title{font-weight:600;color:#2c3e50}.result-volume{font-size:.8rem;color:#8e44ad}.result-author{font-size:.8rem;color:#555}.result-unplaced{font-size:.75rem;color:#e74c3c;font-weight:500}.pane-divider{width:24px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#2c3e50;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .2s}.pane-divider:hover{background:#34495e}.pane-divider-btn{background:none;border:none;color:#ecf0f1;font-size:1rem;cursor:pointer;padding:8px 0;line-height:1}.pane-divider-btn:hover{color:#3498db}.bookshelf-pane{background:#2a2a2a;border-left:1px solid #555;min-width:0;flex-basis:0%;overflow:hidden;transition:flex-grow .3s ease}.bookshelf-pane.active{flex-grow:4;overflow-y:auto;padding:12px}.bookshelf-pane.inactive{flex-grow:0;flex-basis:0;padding:0}.empty-hint{color:#95a5a6;font-size:.85rem;text-align:center;padding:24px 0;margin:0}.bookshelf-view{display:flex;flex-direction:column;height:100%}.bookshelf-view h4{margin:0 0 8px;font-size:.9rem;color:#ecf0f1;flex-shrink:0}.bookshelf-zoom-wrapper{position:relative;flex:3;overflow:hidden;border-bottom:2px solid #555}.bookshelf-zoom-wrapper canvas{display:block;border-radius:4px 4px 0 0}.bookshelf-overview-wrapper{position:relative;flex:2;overflow:hidden}.bookshelf-overview-wrapper canvas{display:block;border-radius:0 0 4px 4px}.overview-controls{position:absolute;bottom:4px;right:4px;display:flex;gap:2px;z-index:5}.overview-controls button{width:24px;height:24px;border:none;border-radius:3px;background:#2c3e50b3;color:#ecf0f1;font-size:.7rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;line-height:1}.overview-controls button:hover{background:#34495ee6}.bookshelf-tooltip{position:absolute;background:#2c3e50eb;color:#fff;padding:4px 8px;border-radius:4px;font-size:.75rem;pointer-events:none;white-space:nowrap;z-index:10;max-width:250px}.tooltip-title{font-weight:600;overflow:hidden;text-overflow:ellipsis}.tooltip-author{font-size:.7rem;color:#bdc3c7;overflow:hidden;text-overflow:ellipsis}.loading-screen,.error-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:16px}.loading-spinner{width:40px;height:40px;border:4px solid #ddd;border-top-color:#3498db;border-radius:50%;animation:spin .8s linear infinite}.error-screen h2{color:#e74c3c}@keyframes spin{to{transform:rotate(360deg)}}
