:root{--bg:#0f1115;--bg-elev:#171a21;--bg-elev-2:#1f232c;--border:#2a2f3a;--text:#e7e9ee;--text-dim:#9aa1ad;--accent:#6ea8fe;--accent-strong:#4d8bfd;--danger:#f26d6d;--ok:#5fd08a;--radius:10px}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);margin:0;padding:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}.app-shell{min-height:100vh}.nav{z-index:20;background:var(--bg-elev);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:20px;padding:12px 20px;display:flex;position:sticky;top:0}.nav .brand{letter-spacing:.3px;font-weight:700}.nav a{color:var(--text-dim);font-weight:500}.nav a.active,.nav a:hover{color:var(--text);text-decoration:none}.nav .spacer{flex:1}.container{max-width:1180px;margin:0 auto;padding:24px 20px 60px}.toolbar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:20px;display:flex}input[type=text],input[type=search],input[type=url],input[type=password],input[type=number],select,textarea{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:var(--radius);outline:none;padding:9px 12px}input:focus,select:focus,textarea:focus{border-color:var(--accent)}textarea{resize:vertical;width:100%;font-family:inherit}.btn{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;padding:9px 14px;transition:background .15s,border-color .15s}.btn:hover{background:#262b36}.btn.primary{background:var(--accent-strong);border-color:var(--accent-strong);color:#fff}.btn.primary:hover{background:var(--accent)}.btn.danger{border-color:var(--danger);color:var(--danger)}.btn.small{padding:5px 10px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.book-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:20px;display:grid}.book-card{cursor:pointer;position:relative}.book-card .cover-wrap{aspect-ratio:2/3;border-radius:var(--radius);background:var(--bg-elev-2);border:1px solid var(--border);width:100%;transition:transform .15s,border-color .15s;position:relative;overflow:hidden}.book-card:hover .cover-wrap{border-color:var(--accent);transform:translateY(-3px)}.book-card .cover-wrap img{object-fit:cover;width:100%;height:100%;display:block}.cover-fallback{background:linear-gradient(160deg, var(--c1), var(--c2));flex-direction:column;justify-content:center;gap:8px;width:100%;height:100%;padding:14px;display:flex}.cover-fallback .t{color:#fff;-webkit-line-clamp:5;-webkit-box-orient:vertical;font-size:14px;font-weight:700;line-height:1.25;display:-webkit-box;overflow:hidden}.cover-fallback .a{color:#ffffffbf;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.fmt-badge{letter-spacing:.04em;text-transform:uppercase;color:#fff;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#000000a6;border-radius:5px;padding:2px 7px;font-size:10px;font-weight:700;position:absolute;top:8px;right:8px}.cached-dot{background:var(--ok);border-radius:50%;width:9px;height:9px;position:absolute;top:8px;left:8px;box-shadow:0 0 0 2px #00000080}.progress-strip{background:#0000008c;height:4px;position:absolute;bottom:0;left:0;right:0}.progress-strip>span{background:var(--accent);height:100%;display:block}.progress-strip.done>span{background:var(--ok)}.book-card .title{margin-top:8px;font-size:14px;font-weight:600;line-height:1.3}.book-card .author{color:var(--text-dim);font-size:12.5px}.layout{grid-template-columns:230px 1fr;align-items:start;gap:26px;display:grid}@media (max-width:820px){.layout{grid-template-columns:1fr;gap:16px}.layout>main{order:1}.layout>.facets{order:2}}.facets{max-height:calc(100vh - 90px);position:sticky;top:70px;overflow-y:auto}.facets h3{text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin:18px 0 6px;font-size:11px}.facets h3:first-child{margin-top:0}.facet-btn{width:100%;color:var(--text-dim);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:7px;justify-content:space-between;gap:8px;margin-bottom:2px;padding:5px 9px;font-size:13px;display:flex}.facet-btn span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.facet-btn:hover{background:var(--bg-elev-2);color:var(--text)}.facet-btn.active{color:var(--accent);background:#6ea8fe29;font-weight:600}.facet-btn .n{color:var(--text-dim);font-variant-numeric:tabular-nums}.empty{color:var(--text-dim);text-align:center;padding:60px 0}.card{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.log-view{border:1px solid var(--border);border-radius:var(--radius);white-space:pre-wrap;word-break:break-word;background:#0a0c10;max-height:420px;padding:14px;font-family:ui-monospace,Cascadia Code,monospace;font-size:13px;overflow-y:auto}.badge{border-radius:999px;padding:2px 9px;font-size:12px;font-weight:600;display:inline-block}.badge.queued{color:var(--text-dim);background:#33383f}.badge.running{color:var(--accent);background:#6ea8fe33}.badge.done{color:var(--ok);background:#5fd08a2e}.badge.error{color:var(--danger);background:#f26d6d2e}.row{align-items:center;gap:12px;display:flex}.grow{flex:1}label.field{margin-bottom:12px;display:block}label.field span{color:var(--text-dim);margin-bottom:5px;font-size:13px;display:block}label.field input,label.field select,label.field textarea{width:100%}.hint{color:var(--text-dim);font-size:12.5px}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-dim);cursor:pointer;padding:30px 20px;transition:border-color .15s,background .15s}.dropzone:hover,.dropzone.over{border-color:var(--accent);background:#6ea8fe0f}.meter{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:999px;height:8px;overflow:hidden}.meter>span{background:var(--accent);height:100%;display:block}.meter.warn>span{background:#f2c26d}.overlay{z-index:100;background:#0000009e;justify-content:center;align-items:flex-start;padding:40px 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.sheet{background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;width:100%;max-width:760px;padding:26px;position:relative;box-shadow:0 16px 50px #00000080}.sheet-close{border:1px solid var(--border);background:var(--bg-elev-2);width:32px;height:32px;color:var(--text-dim);cursor:pointer;border-radius:8px;position:absolute;top:12px;right:12px}.sheet-close:hover{color:var(--text);border-color:var(--accent)}.sheet-head{flex-wrap:wrap;align-items:flex-start;gap:22px;display:flex}.sheet-head .cover-wrap{aspect-ratio:2/3;border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elev-2);flex:0 0 150px;width:150px;position:relative;overflow:hidden}.sheet-head .cover-wrap img{object-fit:cover;width:100%;height:100%}.kv{color:var(--text-dim);margin-top:4px;font-size:13px}.tags{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.tag{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:999px;padding:2px 9px;font-size:12px}.tag:hover{border-color:var(--accent);color:var(--accent)}.reader-page{background:var(--bg);flex-direction:column;display:flex;position:fixed;inset:0}.reader-bar{background:var(--bg-elev);border-bottom:1px solid var(--border);z-index:5;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 14px;display:flex}.reader-bar .t{text-overflow:ellipsis;white-space:nowrap;max-width:34vw;font-weight:600;overflow:hidden}.reader-bar .pos{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:13px}.reader-stage{flex:1;position:relative;overflow:hidden}.reader-stage.paper{background:#f6f3ec}.reader-nav{cursor:pointer;z-index:3;color:#0000;background:0 0;border:none;width:13%;position:absolute;top:0;bottom:0}.reader-nav:hover{color:var(--accent);background:#6ea8fe14;font-size:26px}.reader-nav.prev{left:0}.reader-nav.next{right:0}.epub-host{position:absolute;inset:0}.pdf-scroll{text-align:center;padding:16px 0;position:absolute;inset:0;overflow:auto}.pdf-scroll canvas{background:#fff;max-width:100%;height:auto;box-shadow:0 4px 18px #00000073}.reader-loading{color:var(--text-dim);place-items:center;display:grid;position:absolute;inset:0}select.chip{background:var(--bg-elev-2);border:1px solid var(--border);border-radius:8px;max-width:240px;padding:6px 9px;font-size:13px}
