@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/ffc7b595a48b6846-s.2k_u76ydap2io.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/276a8f4fe816cb6b-s.31_i6ngnt52xa.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/82b67ad56d243b47-s.2p5l8hwveaaiz.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/33ee198db9637ef4-s.1_g-53zz09yvy.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/fbb7028efdf70529-s.2gp_y-cmv6-ey.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Manrope;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/82450a180bcad83c-s.p.2ywnh8m32q6p0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Manrope Fallback;src:local(Arial);ascent-override:103.31%;descent-override:29.07%;line-gap-override:0.0%;size-adjust:103.19%}._0eKFlW_className{font-family:Manrope,Manrope Fallback;font-style:normal}._0eKFlW_variable{--font-sans:"Manrope", "Manrope Fallback"}
:root{--bg:#fff;--surface:#f7f5f2;--border:#e6e1da;--border-input:#8a8178;--text:#1d1720;--text-muted:#625a64;--accent:#7a2848;--accent-hover:#5f1d37;--accent-soft:#f6e9ee;--on-accent:#fff;--danger:#b42318;--success:#1f7a4d;--sidebar:#241a26;--on-sidebar:#f3eef4;--sidebar-muted:#c9bccb;--reader-bg:#2b2430;--paper:#fff;--font:var(--font-sans), system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--fs-xs:12px;--lh-xs:16px;--fs-sm:14px;--lh-sm:20px;--fs-base:16px;--lh-base:24px;--fs-lg:18px;--lh-lg:24px;--fs-xl:28px;--lh-xl:34px;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:64px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-pill:999px;--shadow-card:0 1px 2px #241a260f, 0 2px 6px #241a2614;--shadow-pop:0 12px 32px #241a262e;--scrim:#241a2673;--t-fast:.12s;--t-base:.2s;--ease:cubic-bezier(.2, .8, .2, 1);--sidebar-w:88px;--content-max:1360px;--card-min:200px;--ctl-h:40px;--ctl-sm:32px}
*,:before,:after{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--surface);color:var(--text);font:400 var(--fs-base)/var(--lh-base) var(--font);-webkit-font-smoothing:antialiased}h1,h2,h3,p{margin:0}img{max-width:100%;display:block}a{color:inherit}button,input,select{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}[hidden]{display:none!important}.muted{color:var(--text-muted)}.small{font-size:var(--fs-sm);line-height:var(--lh-sm)}.btn{justify-content:center;align-items:center;gap:var(--s2);height:var(--ctl-h);padding:0 var(--s4);border-radius:var(--r-md);font-size:var(--fs-sm);cursor:pointer;transition:background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);white-space:nowrap;background:0 0;border:1px solid #0000;font-weight:700;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-secondary{background:var(--bg);border-color:var(--border-input)}.btn-secondary:hover:not(:disabled){background:var(--surface)}.btn-danger{background:var(--danger);color:var(--on-accent)}.btn-block{width:100%}.btn-icon{width:var(--ctl-h);color:var(--text-muted);padding:0}.btn-icon:hover:not(:disabled),.btn-icon[aria-pressed=true]{background:var(--accent-soft);color:var(--accent)}.btn-icon-dark,.btn-ghost-dark{color:var(--on-sidebar)}.btn-icon-dark{width:var(--ctl-h);padding:0}.btn-icon-dark:hover:not(:disabled),.btn-ghost-dark:hover{background:#ffffff1a}.input{width:100%;height:var(--ctl-h);padding:0 var(--s3);border:1px solid var(--border-input);border-radius:var(--r-md);background:var(--bg)}label{font-size:var(--fs-sm);margin-bottom:var(--s1);font-weight:700;display:block}.field-error{color:var(--danger);font-size:var(--fs-sm);margin-top:var(--s2)}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;flex:none;width:16px;height:16px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg, var(--surface), var(--border), var(--surface));background-size:200% 100%;width:100%;height:100%;animation:1.2s infinite shimmer;display:block}@keyframes shimmer{to{background-position:-200% 0}}.page-loading{gap:var(--s2);min-height:100vh;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.shell{min-height:100vh;display:flex}.sidebar{height:100vh;width:var(--sidebar-w);align-items:stretch;gap:var(--s2);padding:var(--s3) var(--s2);background:var(--sidebar);color:var(--on-sidebar);flex-direction:column;flex:none;display:flex;position:sticky;top:0}.sidebar-logo{padding:var(--s2) 0 var(--s4);justify-content:center;display:flex}.side-item{align-items:center;gap:var(--s1);padding:var(--s3) var(--s1);border-radius:var(--r-md);color:var(--sidebar-muted);font-size:var(--fs-xs);cursor:pointer;background:0 0;border:0;flex-direction:column;font-weight:700;text-decoration:none;display:flex}.side-item:hover:not(:disabled),.side-item.is-active{color:var(--on-sidebar);background:#ffffff14}.side-item:disabled{opacity:.5;cursor:not-allowed}.side-badge{padding:0 var(--s2);border-radius:var(--r-pill);background:var(--accent);color:var(--on-accent);font-size:var(--fs-xs)}.side-bottom{margin-top:auto}.main{min-width:0;padding:var(--s6) var(--s6) var(--s7);max-width:var(--content-max);flex:1;margin:0 auto}.page-head{justify-content:space-between;align-items:center;gap:var(--s4);margin-bottom:var(--s5);flex-wrap:wrap;display:flex}.page-head h1{font-size:var(--fs-xl);line-height:var(--lh-xl);font-weight:800}.page-head .count{color:var(--text-muted);font-weight:700}.page-title{margin-right:auto}.page-head .count{margin-top:var(--s1);font-size:var(--fs-sm);line-height:var(--lh-sm)}.upload-pill{align-items:center;gap:var(--s2);height:var(--ctl-h);padding:0 var(--s4);border:1px solid var(--accent);border-radius:var(--r-pill);background:var(--accent-soft);color:var(--accent);font-size:var(--fs-sm);cursor:pointer;font-weight:700;display:inline-flex}.upload-pill-link{text-decoration:underline}.toolbar{align-items:center;gap:var(--s3);margin-bottom:var(--s5);flex-wrap:wrap;display:flex}.search{align-items:center;gap:var(--s2);max-width:420px;height:var(--ctl-h);padding:0 var(--s3);border:1px solid var(--border-input);border-radius:var(--r-pill);background:var(--bg);color:var(--text-muted);flex:260px;display:flex}.search:focus-within{outline:2px solid var(--accent);outline-offset:1px}.search input{min-width:0;color:var(--text);background:0 0;border:0;outline:0;flex:1}.sort{align-items:center;gap:var(--s2);color:var(--text-muted);margin:0;font-weight:400;display:flex}.sort select{height:var(--ctl-h);padding:0 var(--s3);border:1px solid var(--border-input);border-radius:var(--r-md);background:var(--bg);color:var(--text);font-weight:700}.view-toggle{gap:var(--s1);padding:var(--s1);border-radius:var(--r-md);background:var(--bg);border:1px solid var(--border);margin-left:auto;display:flex}.view-toggle .btn-icon{width:var(--ctl-sm);height:var(--ctl-sm)}.notice{padding:var(--s3) var(--s4);margin-bottom:var(--s4);border-radius:var(--r-md);background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:var(--fs-sm)}.books{margin:0;padding:0;list-style:none}.books-grid{grid-template-columns:repeat(auto-fill, minmax(var(--card-min), 1fr));gap:var(--s5);display:grid}.books-list{gap:var(--s2);flex-direction:column;display:flex}.book{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-card);transition:box-shadow var(--t-base) var(--ease), transform var(--t-base) var(--ease)}.book:hover{box-shadow:var(--shadow-pop)}.book-grid{padding:var(--s5) var(--s4) var(--s3);flex-direction:column;display:flex}.book-grid:hover{transform:translateY(-2px)}.book-cover{color:var(--text-muted);justify-content:center;align-items:center;display:flex;overflow:hidden}.book-grid .book-cover{aspect-ratio:3/4;width:72%;margin:0 auto var(--s4);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-card)}.book-cover img{object-fit:contain;background:var(--paper);width:100%;height:100%}.book-text{min-width:0}.book-grid .book-text{text-align:center}.book-title{font-size:var(--fs-lg);line-height:var(--lh-lg);-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-weight:800;display:-webkit-box;overflow:hidden}.book-meta{margin-top:var(--s1);font-size:var(--fs-xs);line-height:var(--lh-xs);color:var(--text-muted)}.book-actions{justify-content:center;gap:var(--s2);padding-top:var(--s3);margin-top:auto;display:flex}.book-list{align-items:center;gap:var(--s4);padding:var(--s2) var(--s3);display:flex}.book-list .book-cover{border-radius:var(--r-sm);background:var(--surface);flex:none;width:44px;height:58px}.book-list .book-text{flex:1}.book-list .book-title{font-size:var(--fs-base);-webkit-line-clamp:1}.book-list .book-actions{margin:0;padding:0}.book.is-selecting{cursor:pointer;padding:0}.book.is-selecting:hover{transform:none}.book.is-selected{outline:3px solid var(--accent);outline-offset:-1px;background:var(--accent-soft)}.book-select{flex-direction:inherit;align-items:inherit;gap:inherit;width:100%;height:100%;padding:var(--s5) var(--s4) var(--s4);cursor:pointer;margin:0;font-weight:400;display:flex;position:relative}.book-list .book-select{align-items:center;gap:var(--s4);padding:var(--s2) var(--s3) var(--s2) var(--s7);flex-direction:row}.book-grid .book-select{flex-direction:column}.book-select input{top:var(--s3);left:var(--s3);width:22px;height:22px;accent-color:var(--accent);cursor:pointer;position:absolute}.book-list .book-select input{top:50%;left:var(--s4);transform:translateY(-50%)}.book-select .book-title,.book-select .book-meta{display:block}.select-bar{bottom:var(--s4);z-index:15;align-items:center;gap:var(--s2) var(--s3);margin-top:var(--s5);padding:var(--s3) var(--s4);border-radius:var(--r-lg);background:var(--sidebar);color:var(--on-sidebar);box-shadow:var(--shadow-pop);flex-wrap:wrap;display:flex;position:sticky}.select-count{margin-right:auto}.btn-ghost-light{color:var(--on-sidebar);border-color:#ffffff4d}.btn-ghost-light:hover{background:#ffffff1a}.toast.above-bar{bottom:96px}.menu-wrap{position:relative}.menu{right:0;bottom:calc(100% + var(--s1));z-index:10;min-width:180px;padding:var(--s1);border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg);box-shadow:var(--shadow-pop);position:absolute}.book-list .menu{bottom:auto;top:calc(100% + var(--s1))}.menu button{align-items:center;gap:var(--s2);width:100%;padding:var(--s2) var(--s3);border-radius:var(--r-sm);font-size:var(--fs-sm);text-align:left;cursor:pointer;background:0 0;border:0;display:flex}.menu button:hover,.menu button:focus-visible{background:var(--surface)}.menu .danger{color:var(--danger)}.empty{align-items:center;gap:var(--s3);padding:var(--s8) var(--s4);text-align:center;color:var(--text-muted);border:2px dashed var(--border);border-radius:var(--r-lg);background:var(--bg);flex-direction:column;display:flex}.empty h2{color:var(--text);font-size:var(--fs-lg)}.modal{width:min(440px, calc(100vw - var(--s6)));border-radius:var(--r-lg);background:var(--bg);color:var(--text);box-shadow:var(--shadow-pop);border:0;padding:0}.modal-wide{width:min(600px, calc(100vw - var(--s6)))}.modal::backdrop{background:var(--scrim)}.modal{max-height:calc(100dvh - var(--s6))}.modal-body{max-height:calc(100dvh - var(--s6));padding:var(--s5);flex-direction:column;display:flex}.modal-head{margin-bottom:var(--s4);justify-content:space-between;align-items:center;display:flex}.modal-head h2{font-size:var(--fs-lg);font-weight:800}.modal-actions{justify-content:flex-end;gap:var(--s2);margin-top:var(--s5);display:flex}.dropzone{align-items:center;gap:var(--s3);padding:var(--s6) var(--s4);border:2px dashed var(--border-input);border-radius:var(--r-lg);text-align:center;color:var(--text-muted);transition:background var(--t-fast);flex-direction:column;display:flex}.dropzone.is-over{border-color:var(--accent);background:var(--accent-soft)}.dropzone.is-compact{justify-content:center;gap:var(--s2) var(--s3);padding:var(--s3) var(--s4);flex-flow:wrap}.dropzone-buttons{justify-content:center;gap:var(--s2);flex-wrap:wrap;display:flex}.upload-skipped{margin-top:var(--s3)}.upload-body{flex-direction:column;flex:1;min-height:0;display:flex}.upload-summary{margin-top:var(--s4);font-size:var(--fs-sm)}.upload-current{margin-top:var(--s1);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bad-text{color:var(--danger);font-weight:700}.progress{height:8px;margin-top:var(--s2);border-radius:var(--r-pill);background:var(--surface);overflow:hidden}.progress span{background:var(--accent);height:100%;transition:width var(--t-base) var(--ease);display:block}.upload-filters{gap:var(--s2);margin-top:var(--s3);flex-wrap:wrap;display:flex}.chip{align-items:center;gap:var(--s2);height:var(--ctl-sm);padding:0 var(--s3);border:1px solid var(--border);border-radius:var(--r-pill);background:var(--bg);font-size:var(--fs-sm);cursor:pointer;font-weight:700;display:inline-flex}.chip[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.chip-count{min-width:20px;padding:0 var(--s1);border-radius:var(--r-pill);background:var(--surface);font-size:var(--fs-xs);text-align:center}.upload-list{min-height:120px;margin:var(--s3) 0 0;padding:0 var(--s2) 0 0;border-top:1px solid var(--border);flex:auto;list-style:none;overflow:auto}.upload-empty{padding:var(--s4) 0;text-align:center}.upload-row{align-items:center;gap:var(--s3);padding:var(--s2) 0;border-bottom:1px solid var(--border);font-size:var(--fs-sm);display:flex}.upload-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:700;overflow:hidden}.upload-msg{color:var(--text-muted);text-align:right}.upload-row.is-error .upload-msg{color:var(--danger)}.ok{color:var(--success);flex:none}.bad{color:var(--danger);flex:none}.toast{left:50%;bottom:var(--s5);padding:var(--s3) var(--s5);border-radius:var(--r-pill);background:var(--sidebar);color:var(--on-sidebar);box-shadow:var(--shadow-pop);z-index:50;font-weight:700;position:fixed;transform:translate(-50%)}.login{min-height:100vh;padding:var(--s4);place-items:center;display:grid}.login-card{gap:var(--s4);width:min(400px,100%);padding:var(--s6);background:var(--bg);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-card);flex-direction:column;display:flex}.login-card h1{font-size:var(--fs-xl);line-height:var(--lh-xl);text-align:center;font-weight:800}.login-logo{width:200px;height:auto;margin:0 auto var(--s2)}.login-card form{gap:var(--s3);flex-direction:column;display:flex}.reader{background:var(--reader-bg);color:var(--on-sidebar);flex-direction:column;display:flex;position:fixed;inset:0}.reader-bar{align-items:center;gap:var(--s3);height:56px;padding:0 var(--s3);background:var(--sidebar);flex:none;display:flex}.reader-title{min-width:0;font-size:var(--fs-base);text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:700;overflow:hidden}.reader-tools{align-items:center;gap:var(--s1);display:flex}.reader-count{text-align:center;min-width:84px;font-size:var(--fs-sm);font-variant-numeric:tabular-nums;font-weight:700}.reader-zoom{text-align:center;min-width:44px;font-size:var(--fs-xs);color:var(--sidebar-muted);font-variant-numeric:tabular-nums}.reader-stage{flex:1;place-items:center;min-height:0;display:grid;position:relative;overflow:hidden}.flip-host{place-items:center;display:grid}.flip-page{background:var(--paper);overflow:hidden}.flip-page img{object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;width:100%;height:100%}.flip-book .--portrait .flip-page:after{display:none}.flip-page:after{content:"";pointer-events:none;width:6%;position:absolute;top:0;bottom:0}.flip-page.--left:after{background:linear-gradient(270deg,#00000024,#0000);right:0}.flip-page.--right:after{background:linear-gradient(90deg,#00000024,#0000);left:0}.reader-msg{gap:var(--s4);text-align:center;padding:var(--s5);z-index:2;flex-direction:row;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.reader-msg[role=alert]{flex-direction:column}.reader-arrow{z-index:3;border-radius:var(--r-md);width:48px;height:72px;color:var(--on-sidebar);cursor:pointer;background:#00000040;border:0;place-items:center;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.reader-arrow:hover:not(:disabled){background:#00000073}.reader-arrow:disabled{opacity:0;pointer-events:none}.reader-arrow.left{left:var(--s2)}.reader-arrow.right{right:var(--s2)}.zoom-pane{position:absolute;inset:0;overflow:auto}.zoom-pages{width:max-content;min-width:100%;min-height:100%;padding:var(--s5);justify-content:center;align-items:center;display:flex}.zoom-pages img{background:var(--paper);max-width:none;box-shadow:var(--shadow-pop)}@media (max-width:767px){.shell{flex-direction:column}.sidebar{z-index:20;width:100%;height:auto;padding:var(--s2) var(--s3);flex-direction:row;align-items:center;position:sticky;top:0}.sidebar-logo{padding:0 var(--s2) 0 0}.side-item{padding:var(--s2) var(--s3);flex-direction:row}.side-bottom{margin-top:0;margin-left:auto}.main{padding:var(--s5) var(--s4) var(--s7)}.page-head h1{font-size:var(--fs-lg)}.books-grid{gap:var(--s3);grid-template-columns:repeat(2,minmax(0,1fr))}.book-grid{padding:var(--s3) var(--s2) var(--s2)}.book-title{font-size:var(--fs-sm);line-height:var(--lh-sm)}.book-actions{gap:0}.view-toggle{margin-left:0}.hide-sm{display:none}.reader-arrow{width:36px;height:56px}.reader-zoom{display:none}.reader-count{min-width:64px}}
