:root{--ink: #232323;--parchment: #EFEAE0;--surface: #FFFFFF;--border: #DDD5C4;--spine-green: #2F5D50;--spine-green-dark: #234840;--foil-gold: #C98A2C;--danger: #B3432B;--font-display: "Fraunces", Georgia, serif;--font-body: "Inter", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--parchment);color:var(--ink);font-family:var(--font-body);-webkit-tap-highlight-color:transparent}button,input{font-family:inherit}:focus-visible{outline:3px solid var(--foil-gold);outline-offset:2px}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}.app-shell{display:flex;flex-direction:column;height:100%;max-width:640px;margin:0 auto}.app-header{display:flex;align-items:baseline;justify-content:space-between;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--border)}.app-title{font-family:var(--font-display);font-weight:600;font-size:1.3rem;color:var(--spine-green-dark)}.link-button{background:none;border:none;color:var(--ink);opacity:.6;font-size:.85rem;cursor:pointer;padding:.25rem}.link-button:hover{opacity:1}.app-main{flex:1;overflow-y:auto;padding:1rem 1.25rem 1.5rem}.tab-bar{display:flex;border-top:1px solid var(--border);background:var(--surface)}.tab{flex:1;text-align:center;padding:.85rem 0;text-decoration:none;color:var(--ink);opacity:.55;font-size:.95rem}.tab.active{opacity:1;color:var(--spine-green-dark);font-weight:600;border-top:2px solid var(--spine-green);margin-top:-1px}.login-page{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem;gap:.5rem}.login-page h1{font-family:var(--font-display);color:var(--spine-green-dark);margin-bottom:0}.login-page p{max-width:32ch;opacity:.75;margin-top:0;margin-bottom:1.5rem}.primary,.secondary{border-radius:8px;padding:.7rem 1.2rem;font-size:.95rem;font-weight:600;border:1px solid transparent;cursor:pointer}.primary{background:var(--spine-green);color:#fff}.primary:disabled{background:#9db3ac;cursor:default}.secondary{background:transparent;border-color:var(--border);color:var(--ink)}.scan-page{display:flex;flex-direction:column;gap:.85rem;min-height:calc(100% - 1px)}.scanner-viewport{width:100%;border-radius:12px;overflow:hidden;border:1px solid var(--border);background:#000;min-height:260px}.scanner-error{color:var(--danger)}.scan-hint{text-align:center;opacity:.65;font-size:.9rem}.scan-hint.centered{margin-top:3rem}.scan-status{text-align:center;font-size:.9rem;opacity:.7;margin:0}.scan-status-error{color:var(--danger);opacity:1}.debug-panel{margin-top:auto;border-top:1px solid var(--border);padding-top:.5rem}.debug-panel-toggle{width:100%;text-align:left;background:none;border:none;color:var(--ink);opacity:.55;font-size:.8rem;padding:.35rem 0;cursor:pointer}.debug-panel-toggle:hover{opacity:.85}.debug-panel-body{max-height:40vh;overflow-y:auto;font-size:.75rem}.debug-empty{opacity:.5}.debug-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.debug-entry{border:1px solid var(--border);border-radius:6px;padding:.4rem .55rem;background:var(--surface)}.debug-entry-head{display:flex;gap:.5rem;align-items:baseline;font-family:monospace}.debug-isbn{font-weight:600}.debug-time{margin-left:auto;opacity:.5}.debug-outcome{text-transform:lowercase;padding:.05rem .4rem;border-radius:999px;font-size:.68rem}.debug-outcome-hit{background:#e4eee9;color:var(--spine-green-dark)}.debug-outcome-miss{background:#f3e7d0;color:var(--foil-gold)}.debug-outcome-duplicate{background:#ededed;color:var(--ink);opacity:.75}.debug-outcome-error{background:#f6dcd4;color:var(--danger)}.debug-detail{margin:.35rem 0 0;white-space:pre-wrap;word-break:break-word;font-size:.72rem;opacity:.8}.toast{position:fixed;bottom:4.5rem;left:50%;transform:translate(-50%);background:var(--spine-green-dark);color:#fff;padding:.6rem 1.1rem;border-radius:999px;font-size:.85rem;z-index:10;max-width:85vw;text-align:center}.correction-form{display:flex;flex-direction:column;gap:.35rem}.correction-form label{font-size:.8rem;opacity:.7;margin-top:.5rem}.correction-form input{padding:.6rem .7rem;border-radius:8px;border:1px solid var(--border);background:var(--surface);font-size:1rem}.correction-form input:disabled{opacity:.6}.correction-cover{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.correction-cover img{width:88px;height:128px;object-fit:cover;border-radius:6px;border:1px solid var(--border)}.photo-button{border:1px dashed var(--border);border-radius:8px;padding:.6rem .9rem;font-size:.85rem;cursor:pointer;color:var(--spine-green-dark)}.form-error{color:var(--danger);font-size:.85rem}.form-actions{display:flex;gap:.75rem;margin-top:1rem}.form-actions .primary,.form-actions .secondary{flex:1}.empty-state{text-align:center;opacity:.6;margin-top:3rem}.library-group{margin-bottom:1.5rem}.library-group-heading{font-family:var(--font-display);font-size:1.1rem;color:var(--spine-green-dark);border-bottom:1px solid var(--border);padding-bottom:.35rem;margin-bottom:.6rem}.book-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.9rem}.book-card{display:flex;flex-direction:column;gap:.4rem}.book-cover{aspect-ratio:2 / 3;border-radius:6px;overflow:hidden;border:1px solid var(--border);background:var(--surface)}.book-cover img{width:100%;height:100%;object-fit:cover;display:block}.book-cover-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:1.8rem;color:var(--foil-gold);background:var(--spine-green-dark)}.book-cover-placeholder.large{width:88px;height:128px;border-radius:6px;font-size:1.6rem}.book-title{font-size:.88rem;font-weight:600;margin:0;line-height:1.3}.book-volume{font-weight:400;opacity:.7}.book-author{font-size:.78rem;opacity:.65;margin:0}
