:root,[data-theme=light]{--color-bg:#fafaf9;--color-surface:#fff;--color-text:#1c1917;--color-muted:#78716c;--color-accent:#2563eb;--color-accent-hover:#1d4ed8;--color-border:#e7e5e4;--color-error:#dc2626;--font-sans:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, "Cascadia Code", "Source Code Pro", monospace;--radius-sm:4px;--radius-md:8px;--space-xs:.25rem;--space-sm:.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem}[data-theme=dark]{--color-bg:#1c1917;--color-surface:#292524;--color-text:#fafaf9;--color-muted:#a8a29e;--color-accent:#3b82f6;--color-accent-hover:#60a5fa;--color-border:#44403c;--color-error:#f87171}
*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{height:100%;font-size:16px}body{background:var(--color-bg);min-height:100%;color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;display:flex}a{color:inherit;text-decoration:none}.login-page{padding:var(--space-xl);flex:1;justify-content:center;align-items:center;display:flex}.login-form{gap:var(--space-md);flex-direction:column;width:100%;max-width:360px;display:flex}.login-form-inner{display:contents}.login-form h1{color:var(--color-text);margin-bottom:var(--space-sm);font-size:1.25rem;font-weight:600}.login-form label{color:var(--color-muted);font-size:.875rem;font-weight:500}.login-form input[type=password]{width:100%;padding:var(--space-sm) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);outline:none;font-size:1rem;transition:border-color .15s}.login-form input[type=password]:focus{border-color:var(--color-accent)}.login-form button[type=submit]{padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);background:var(--color-accent);color:#fff;font-family:var(--font-sans);cursor:pointer;border:none;font-size:1rem;font-weight:500;transition:background .15s}.login-form button[type=submit]:hover{background:var(--color-accent-hover)}.login-error{color:var(--color-error);font-size:.875rem}.library-shell{padding:var(--space-xl);flex-direction:column;flex:1;width:100%;max-width:960px;margin:0 auto;display:flex}.library-header{padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-xl);justify-content:space-between;align-items:center;display:flex}.library-header h1{font-size:1.5rem;font-weight:600}.header-actions{align-items:center;gap:var(--space-sm);display:flex}.theme-toggle{border:1px solid var(--color-border);border-radius:var(--radius-sm);width:34px;height:34px;color:var(--color-muted);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;font-size:1rem;transition:border-color .15s,color .15s;display:flex}.theme-toggle:hover{border-color:var(--color-text);color:var(--color-text)}.logout-btn{padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.875rem;transition:border-color .15s,color .15s}.logout-btn:hover{border-color:var(--color-error);color:var(--color-error)}.library-empty{color:var(--color-muted);font-size:.9375rem}.upload-section{gap:var(--space-md);flex-direction:column;display:flex}.upload-section h2{font-size:1rem;font-weight:600}.upload-form{gap:var(--space-sm);flex-wrap:wrap;align-items:center;display:flex}.upload-form input[type=text]{padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);outline:none;min-width:200px;font-size:.9375rem}.upload-form input[type=text]:focus{border-color:var(--color-accent)}.upload-form button{padding:var(--space-xs) var(--space-md);border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-family:var(--font-sans);cursor:pointer;border:none;font-size:.9375rem;font-weight:500;transition:background .15s}.upload-form button:hover:not(:disabled){background:var(--color-accent-hover)}.upload-form button:disabled{opacity:.6;cursor:not-allowed}.upload-error{color:var(--color-error);font-size:.875rem}.upload-success{color:var(--color-text);font-size:.9375rem}.upload-success a{color:var(--color-accent);text-decoration:underline}.book-grid-section{gap:var(--space-md);margin-top:var(--space-xl);flex-direction:column;display:flex}.delete-error{color:var(--color-error);font-size:.875rem}.book-grid{gap:var(--space-md);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));list-style:none;display:grid}.book-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-md);gap:var(--space-xs);flex-direction:column;display:flex}.book-card-meta{gap:var(--space-xs);margin-bottom:var(--space-xs);align-items:center;display:flex}.book-type-badge{letter-spacing:.05em;border-radius:var(--radius-sm);background:var(--color-border);color:var(--color-muted);padding:1px 6px;font-size:.6875rem;font-weight:700}.book-category{color:var(--color-muted);font-size:.75rem}.book-title{color:var(--color-text);font-size:.9375rem;font-weight:600;line-height:1.3}.book-author{color:var(--color-muted);font-size:.8125rem}.book-size{color:var(--color-muted);padding-top:var(--space-xs);margin-top:auto;font-size:.75rem}.book-card-actions{gap:var(--space-sm);margin-top:var(--space-sm);display:flex}.btn-download{text-align:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;flex:1;font-size:.8125rem;font-weight:500;transition:background .15s}.btn-download:hover{background:var(--color-accent-hover)}.btn-delete{padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.8125rem;transition:border-color .15s,color .15s}.btn-delete:hover:not(:disabled){border-color:var(--color-error);color:var(--color-error)}.btn-delete:disabled{opacity:.5;cursor:not-allowed}.library-controls{gap:var(--space-sm);padding:var(--space-md) 0;border-top:1px solid var(--color-border);margin-top:var(--space-xl);flex-direction:column;display:flex}.search-form{gap:var(--space-sm);align-items:center;display:flex}.search-input{max-width:360px;padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);outline:none;flex:1;font-size:.9375rem}.search-input:focus{border-color:var(--color-accent)}.search-btn{padding:var(--space-xs) var(--space-md);border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-family:var(--font-sans);cursor:pointer;border:none;font-size:.875rem;font-weight:500;transition:background .15s}.search-btn:hover{background:var(--color-accent-hover)}.clear-btn{padding:var(--space-xs) var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.875rem}.clear-btn:hover{color:var(--color-text);border-color:var(--color-text)}.controls-row{align-items:center;gap:var(--space-md);flex-wrap:wrap;display:flex}.controls-label{color:var(--color-muted);font-size:.8125rem;font-weight:500}.sort-group{align-items:center;gap:var(--space-xs);display:flex}.sort-btn{padding:3px var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.8125rem;transition:border-color .15s,color .15s,background .15s}.sort-btn:hover{color:var(--color-text);border-color:var(--color-text)}.sort-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.sort-dir{font-size:.75rem}.total-count{color:var(--color-muted);margin-left:auto;font-size:.8125rem}.category-filters{align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}.category-chip{padding:2px var(--space-sm);border:1px solid var(--color-border);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;border-radius:999px;font-size:.8125rem;transition:border-color .15s,color .15s,background .15s}.category-chip:hover{color:var(--color-text);border-color:var(--color-text)}.category-chip.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pagination{align-items:center;gap:var(--space-md);display:flex}.page-btn{padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.875rem;transition:border-color .15s}.page-btn:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}.page-btn:disabled{opacity:.4;cursor:not-allowed}.page-indicator{color:var(--color-muted);font-size:.875rem}.bulk-upload-section{gap:var(--space-md);margin-top:var(--space-xl);padding-top:var(--space-xl);border-top:1px solid var(--color-border);flex-direction:column;display:flex}.bulk-upload-section h2{font-size:1rem;font-weight:600}.bulk-toolbar{align-items:center;gap:var(--space-sm);flex-wrap:wrap;display:flex}.btn-add-files{padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);font-family:var(--font-sans);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;font-size:.9375rem;font-weight:500;transition:border-color .15s,color .15s;display:inline-block}.btn-add-files:hover{border-color:var(--color-accent);color:var(--color-accent)}.btn-upload-all{padding:var(--space-xs) var(--space-md);border-radius:var(--radius-sm);background:var(--color-accent);color:#fff;font-family:var(--font-sans);cursor:pointer;border:none;font-size:.9375rem;font-weight:500;transition:background .15s}.btn-upload-all:hover{background:var(--color-accent-hover)}.btn-secondary{padding:var(--space-xs) var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-muted);font-family:var(--font-sans);cursor:pointer;background:0 0;font-size:.9375rem;font-weight:500;transition:border-color .15s,color .15s}.btn-secondary:hover{border-color:var(--color-text);color:var(--color-text)}.bulk-running-hint{color:var(--color-muted);font-size:.875rem}.bulk-entry-list{border:1px solid var(--color-border);border-radius:var(--radius-md);flex-direction:column;list-style:none;display:flex;overflow-x:auto}.bulk-entry{gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--color-border);background:var(--color-surface);grid-template-columns:1fr 160px 140px 120px 28px;align-items:center;display:grid}.bulk-entry:last-child{border-bottom:none}.bulk-entry-header{background:var(--color-bg);color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:600}.bulk-entry-name{text-overflow:ellipsis;white-space:nowrap;color:var(--color-text);font-size:.875rem;overflow:hidden}.bulk-entry-input{width:100%;padding:3px var(--space-xs);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);outline:none;font-size:.8125rem}.bulk-entry-input:focus{border-color:var(--color-accent)}.bulk-entry-input:disabled{opacity:.5;cursor:not-allowed}.bulk-entry-badge{white-space:nowrap;text-overflow:ellipsis;font-size:.8125rem;overflow:hidden}.status-pending .bulk-entry-badge{color:var(--color-muted)}.status-uploading .bulk-entry-badge{color:var(--color-accent)}.status-done .bulk-entry-badge{color:#22c55e}.status-error .bulk-entry-badge{color:var(--color-error)}.bulk-entry-remove-col{justify-content:center;display:flex}.bulk-entry-remove{color:var(--color-muted);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:1rem;line-height:1;transition:color .15s}.bulk-entry-remove:hover{color:var(--color-error)}.bulk-summary{color:var(--color-muted);font-size:.9375rem}.demo-banner{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-muted);margin-bottom:var(--space-xl);flex-wrap:wrap;font-size:.875rem;display:flex}.demo-sign-in-link{color:var(--color-accent);white-space:nowrap;font-size:.875rem;font-weight:500}.demo-sign-in-link:hover{text-decoration:underline}.btn-demo-disabled{text-align:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);background:var(--color-border);color:var(--color-muted);cursor:not-allowed;-webkit-user-select:none;user-select:none;flex:1;font-size:.8125rem;font-weight:500}.login-demo-link{text-align:center;color:var(--color-muted);padding-top:var(--space-xs);font-size:.875rem;transition:color .15s;display:block}.login-demo-link:hover{color:var(--color-text)}@media (max-width:640px){.library-shell{padding:var(--space-md)}.library-header h1{font-size:1.125rem}.book-grid{grid-template-columns:1fr}.upload-form{flex-direction:column;align-items:stretch}.upload-form input[type=text],.upload-form button{width:100%}.controls-row{align-items:flex-start;gap:var(--space-sm);flex-direction:column}.total-count{margin-left:0}.bulk-entry{min-width:560px}}
