:root{--bg: #f7f4ee;--bg-top: #faf8f3;--surface: #ffffff;--surface-alt: #f1ece2;--ink: #2a2620;--ink-soft: #6b6358;--ink-faint: #9a9081;--line: #e4ddd0;--brand: #2c6e63;--brand-deep: #1f534a;--brand-soft: #e3efec;--brand-soft2: #d7e8e4;--gold: #e0a92e;--danger: #c0392b;--danger-soft: #fbeae7;--read: #2f8f5b;--read-soft: #e0f1e7;--unread: #97700f;--unread-soft: #fdf0d9;--header-bg: rgba(247, 244, 238, .9);--radius: 12px;--shadow: 0 1px 3px rgba(40, 35, 28, .08), 0 4px 16px rgba(40, 35, 28, .06);--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}body{margin:0;font-family:var(--sans);color:var(--ink);background-color:var(--app-bg-color, var(--bg));background-image:var(--app-bg-image, linear-gradient(180deg, var(--bg-top), var(--bg)));background-size:var(--app-bg-size, cover);background-repeat:var(--app-bg-repeat, no-repeat);background-attachment:fixed;min-height:100vh;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:15px}.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;padding:9px 14px;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:7px;transition:background .12s,border-color .12s,transform .05s}.btn:hover{background:var(--surface-alt)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-deep)}.btn-danger{color:var(--danger);border-color:#e9c4be;background:var(--danger-soft)}.btn-danger:hover{background:#f6d8d2}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover{background:var(--surface-alt)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:6px 10px;font-size:13px}.app-header{position:sticky;top:0;z-index:10;background:var(--header-bg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.app-header-inner{max-width:1180px;margin:0 auto;padding:14px 20px;display:flex;align-items:center;gap:14px}.logo{font-size:20px;font-weight:800;color:var(--brand-deep);display:flex;align-items:center;gap:9px}.logo span{font-size:24px}.spacer{flex:1}.user-chip{color:var(--ink-soft);font-size:13px}.container{max-width:1180px;margin:0 auto;padding:20px}.filterbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:18px}.field{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:9px 12px;font-size:14px;color:var(--ink)}.field:focus{outline:2px solid var(--brand-soft);border-color:var(--brand)}.search{flex:1;min-width:200px}.count{color:var(--ink-faint);font-size:13px;margin-left:auto}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:18px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);cursor:pointer;transition:transform .1s,box-shadow .1s;display:flex;flex-direction:column}.card:hover{transform:translateY(-3px);box-shadow:0 6px 20px #28231c1f}.cover-wrap{position:relative}.cover{aspect-ratio:2 / 3;width:100%;object-fit:cover;background:var(--surface-alt);display:block}.cover-badge{position:absolute;top:7px;right:7px;font-size:14px;line-height:1;padding:5px 6px;border-radius:9px;background:var(--header-bg);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);box-shadow:0 1px 4px #0000002e}.cover-fallback{aspect-ratio:2 / 3;display:flex;align-items:center;justify-content:center;text-align:center;padding:12px;font-size:13px;font-weight:600;color:var(--brand-deep);background:linear-gradient(160deg,var(--brand-soft),var(--brand-soft2))}.card-body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:4px}.card-title{font-weight:700;font-size:14px;line-height:1.25}.card-author{color:var(--ink-soft);font-size:13px}.card-series{font-size:12px;font-weight:600;color:var(--brand-deep);margin-top:2px}.card-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:4px}.chip{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--surface-alt);color:var(--ink-soft)}.chip-read{background:var(--read-soft);color:var(--read)}.chip-unread{background:var(--unread-soft);color:var(--unread)}.chip-loaned{background:var(--danger-soft);color:var(--danger)}.stars{color:var(--gold);font-size:13px;letter-spacing:1px}.stars .off{color:var(--line)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1e1a1473;display:flex;align-items:flex-start;justify-content:center;padding:30px 16px;overflow-y:auto;z-index:50}.modal{background:var(--surface);border-radius:16px;width:100%;max-width:560px;box-shadow:0 20px 60px #0000004d;overflow:hidden}.modal-head{display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line)}.modal-head h2{margin:0;font-size:17px}.modal-body{padding:20px;display:flex;flex-direction:column;gap:14px}.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center}.form-row{display:flex;flex-direction:column;gap:5px}.form-row label{font-size:13px;font-weight:600;color:var(--ink-soft)}.form-row input,.form-row select,.form-row textarea{border:1px solid var(--line);border-radius:9px;padding:9px 11px;width:100%}.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:2px solid var(--brand-soft);border-color:var(--brand)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}textarea{resize:vertical;min-height:64px}.rating-edit{display:flex;gap:4px;font-size:24px;color:var(--line)}.rating-edit .on{color:var(--gold)}.rating-edit span{cursor:pointer;line-height:1}.toggle-read{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-alt)}.detail-cover{width:120px;border-radius:8px;box-shadow:var(--shadow)}.detail-top{display:flex;gap:16px}.scanner-wrap{display:flex;flex-direction:column;gap:10px;align-items:center}.scanner-stage{position:relative;width:100%;max-width:420px}.scanner-video{width:100%;border-radius:12px;background:#000;aspect-ratio:4 / 3;object-fit:cover;display:block}.scanner-frame{position:absolute;left:8%;right:8%;top:50%;transform:translateY(-50%);height:32%;border:2px solid rgba(255,255,255,.9);border-radius:10px;box-shadow:0 0 0 100vmax #00000047;pointer-events:none}.scanner-hint{color:var(--ink-soft);font-size:13px;text-align:center;max-width:420px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:32px;width:100%;max-width:380px;box-shadow:var(--shadow)}.login-card h1{margin:0 0 6px;color:var(--brand-deep);display:flex;gap:9px;align-items:center}.login-card p{margin:0 0 20px;color:var(--ink-soft);font-size:14px}.empty{text-align:center;padding:60px 20px;color:var(--ink-faint)}.loan-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}.loan-row:last-child{border-bottom:none}.toaster{position:fixed;bottom:20px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;z-index:100}.toast{padding:11px 18px;border-radius:10px;color:#fff;font-size:14px;font-weight:600;box-shadow:var(--shadow)}.toast-info{background:var(--brand)}.toast-success{background:var(--read)}.toast-error{background:var(--danger)}@media(max-width:600px){.app-header-inner{padding:12px 14px;gap:8px}.btn-label,.user-chip{display:none}.filterbar{gap:8px}}@media(max-width:380px){.logo-text{display:none}}@media(max-width:520px){.form-grid{grid-template-columns:1fr}.grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px}}
