:root{--ink:#1E2A32;--paper:#EFE7D8;--paper-raised:#F7F2E6;--rust:#B3542B;--muted:#5C6670;--line:#C9BFA8;--ledger-green:#4B6B4F;--font-display:Georgia,'Times New Roman',serif;--font-body:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif}*{box-sizing:border-box}body,html{height:100%;margin:0;overflow:hidden}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:16px;line-height:1.5;-webkit-tap-highlight-color:transparent}.boot-loading{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.85rem;padding:2rem;text-align:center;background:var(--paper);color:var(--ink)}.boot-loading.is-ready{display:none}.boot-loading-error{display:none;flex-direction:column;align-items:center;gap:.75rem;max-width:30ch}.boot-loading.is-error .boot-loading-spinner,.boot-loading.is-error .boot-loading-text{display:none}.boot-loading.is-error .boot-loading-error{display:flex}.boot-loading-error h2{font-family:var(--font-display);font-weight:400;font-size:1.15rem;margin:0}.boot-loading-spinner{width:2rem;height:2rem;border:3px solid var(--line);border-top-color:var(--rust);border-radius:50%;animation:boot-spin .8s linear infinite}@media (prefers-reduced-motion:reduce){.boot-loading-spinner{animation:none}}@keyframes boot-spin{to{transform:rotate(360deg)}}.app-shell{position:fixed;inset:0;display:flex;flex-direction:column;max-width:480px;margin:0 auto}.app-header{background:var(--ink);color:var(--paper);padding:1.1rem 1.25rem 1rem;display:flex;align-items:baseline;justify-content:space-between;flex-shrink:0}.app-header h1{font-family:var(--font-display);font-weight:400;font-size:1.4rem;letter-spacing:.02em;margin:0}.app-header .tagline{font-size:.75rem;color:var(--line);margin-top:.15rem}.update-banner{background:var(--rust);color:var(--paper);padding:.75rem 1.25rem;display:none;align-items:center;justify-content:space-between;gap:.75rem;flex-shrink:0}.update-banner.is-visible{display:flex}.update-banner p{margin:0;font-size:.9rem}.update-banner .actions{display:flex;gap:.5rem;flex-shrink:0}.btn-ghost-on-rust{background:0 0;border:1px solid var(--paper);color:var(--paper);padding:.35rem .7rem;font-size:.8rem;cursor:pointer}.btn-ghost-on-rust.primary{background:var(--paper);color:var(--rust)}.app-content{flex:1;overflow-y:auto;padding:1.5rem 1.25rem 1rem}.screen{display:none}.screen.is-active{display:block}.screen h2{font-family:var(--font-display);font-weight:400;font-size:1.2rem;border-top:2px solid var(--ink);padding-top:.6rem;margin:0 0 .9rem}.screen-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;border-top:2px solid var(--ink);padding-top:.6rem;margin:0 0 .9rem}.screen-header h2{border-top:none;padding-top:0;margin:0}.screen p{color:var(--muted);margin:0 0 1rem;max-width:34ch}.status-line{font-size:.85rem;color:var(--muted);min-height:1.2em}.home-rule{border:none;border-top:1px solid var(--line);margin:1.75rem 0 1.25rem}.empty-state{border:1px solid var(--line);padding:1.25rem;text-align:left;color:var(--muted)}.empty-state strong{display:block;color:var(--ink);font-family:var(--font-display);font-size:1.05rem;margin-bottom:.35rem}.btn-primary{background:var(--ink);color:var(--paper);border:none;padding:.6rem 1rem;font-size:.9rem;cursor:pointer}.btn-primary:active{background:var(--rust)}.app-nav{display:flex;border-top:1px solid var(--line);background:var(--paper-raised);flex-shrink:0}.app-nav button{flex:1;background:0 0;border:none;border-top:2px solid transparent;padding:.7rem .25rem .6rem;font-family:var(--font-body);font-size:.78rem;color:var(--muted);cursor:pointer}.app-nav button.is-active{color:var(--ink);border-top-color:var(--rust)}@media (prefers-reduced-motion:no-preference){.update-banner.is-visible{animation:slide-down 180ms ease-out}}@keyframes slide-down{from{transform:translateY(-100%)}to{transform:translateY(0)}}:focus-visible{outline:2px solid var(--rust);outline-offset:2px}.is-hidden{display:none}dialog.scan-stage{position:fixed;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:none;background:#000;overflow:hidden}dialog.scan-stage::backdrop{background:#000}.scan-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.scan-stage-window{position:absolute;top:50%;left:50%;width:min(80vw,340px);height:min(46vw,190px);transform:translate(-50%,-50%);border:2px solid rgba(255,255,255,.9);border-radius:8px;box-shadow:0 0 0 100vmax rgba(0,0,0,.6)}.scan-stage-hint{position:absolute;top:0;left:0;right:0;margin:0;padding:calc(env(safe-area-inset-top,0px) + 1rem) 1.25rem 1rem;background:rgba(0,0,0,.55);color:#fff;font-family:var(--font-body);font-size:1rem;text-align:center}.scan-zoom{position:absolute;top:50%;right:calc(env(safe-area-inset-right,0px) + .75rem);transform:translateY(-50%);z-index:1}.scan-zoom-range{writing-mode:vertical-lr;direction:rtl;width:2rem;height:160px;accent-color:var(--rust)}.scan-stop-btn{position:absolute;left:50%;bottom:calc(env(safe-area-inset-bottom,0px) + 1.5rem);transform:translateX(-50%);background:var(--rust);color:var(--paper);border:none;padding:.85rem 2.5rem;font-size:1rem;border-radius:999px;cursor:pointer}.scan-stop-btn:active{background:var(--ink)}body.is-scanning{overflow:hidden}#scan-bulk-done,#scan-check-done,.scan-bulk-bar,.scan-bulk-log,.scan-check-bar{display:none}body.is-scanning-bulk .scan-bulk-bar{display:flex}body.is-scanning-bulk .scan-bulk-log{display:flex}body.is-scanning-bulk #scan-bulk-done{display:block}body.is-scanning-bulk #scan-stop{display:none}body.is-scanning-check .scan-check-bar{display:flex}body.is-scanning-check .scan-bulk-log{display:flex}body.is-scanning-check #scan-check-done{display:block}body.is-scanning-check #scan-stop{display:none}.scan-check-bar{position:absolute;top:0;left:0;right:0;z-index:1;align-items:center;justify-content:space-between;gap:.75rem;margin:0;padding:calc(env(safe-area-inset-top,0px) + .85rem) 1rem .85rem;background:rgba(0,0,0,.55);color:#fff;font-family:var(--font-body)}.scan-check-container-label{flex:1;min-width:0;font-size:.95rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scan-check-progress{font-size:.9rem;white-space:nowrap}.scan-bulk-bar{position:absolute;top:0;left:0;right:0;z-index:1;align-items:center;justify-content:space-between;gap:.75rem;margin:0;padding:calc(env(safe-area-inset-top,0px) + .85rem) 1rem .85rem;background:rgba(0,0,0,.55);color:#fff;font-family:var(--font-body)}.scan-bulk-container-label{flex:1;min-width:0;font-size:.95rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scan-bulk-container-select{max-width:40%;font-size:.9rem;border-radius:6px;border:none;padding:.35rem .5rem}.scan-bulk-log{position:absolute;left:1rem;right:1rem;bottom:calc(env(safe-area-inset-bottom,0px) + 5.5rem);z-index:1;margin:0;padding:0;list-style:none;flex-direction:column;gap:.35rem;text-align:center}.scan-bulk-log-item{padding:.4rem .75rem;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;font-family:var(--font-body);font-size:.9rem}.scan-bulk-log-item.is-fail{background:rgba(160,40,30,.75)}.scan-bulk-log-item.is-switch{background:rgba(255,255,255,.25)}.scan-bulk-log-item.is-pending{background:rgba(180,130,20,.7)}.container-list{display:block;list-style:none;margin:1.25rem 0 0;padding:0}.container-row{display:flex;align-items:center;gap:.75rem;padding:.85rem 0;border-bottom:1px solid var(--line)}.container-row:first-child{border-top:1px solid var(--line)}.container-row-main{flex:1;min-width:0;display:block;text-align:left;background:0 0;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer}.container-select-target{-webkit-touch-callout:none;user-select:none;touch-action:manipulation}.select-badge{display:inline-flex;align-items:center;justify-content:center;width:1.4em;height:1.4em;margin-right:.4rem;border-radius:50%;background:var(--rust);color:var(--paper);font-size:.75rem;font-family:var(--font-body)}.container-row.is-selected{background:rgba(179,84,43,.1)}.container-name{display:block;font-family:var(--font-display);font-size:1.02rem;color:var(--ink)}.container-meta{display:block;font-size:.8rem;color:var(--muted);margin-top:.1rem}.container-location{display:block;font-size:.8rem;color:var(--muted);margin-top:.1rem}.container-row-actions{display:flex;gap:.4rem;flex-shrink:0}.row-action{display:inline-flex;align-items:center;gap:.3rem;background:0 0;border:none;color:var(--muted);font-family:var(--font-body);font-size:1rem;line-height:1;padding:.5rem;cursor:pointer}.row-action:active{color:var(--rust)}.row-action-count{font-size:.75rem}.container-empty{list-style:none;border:1px solid var(--line);padding:1.25rem;color:var(--muted)}.container-empty strong{display:block;color:var(--ink);font-family:var(--font-display);font-size:1.05rem;margin-bottom:.35rem}.group-row{border-top:2px solid var(--ink)}.group-row .container-name{font-weight:700}.group-toggle-title{display:flex;align-items:center;gap:.4rem}.group-caret{color:var(--muted);font-size:.8em}.container-row.is-grouped{padding-left:1.5rem}.container-divider{list-style:none;padding:.5rem 0 .3rem;color:var(--muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}.selection-bar{display:flex;align-items:center;justify-content:space-between;margin-top:.75rem;padding:.5rem .75rem;border:1px solid var(--line);font-size:.85rem;color:var(--muted)}.selection-bar[hidden]{display:none}.shelf-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.group-controls{display:flex;gap:.25rem;margin-left:auto}.group-controls[hidden]{display:none}.overflow-menu{position:relative}.overflow-menu>summary{list-style:none;cursor:pointer;user-select:none}.overflow-menu>summary::-webkit-details-marker{display:none}.overflow-menu-list{position:absolute;top:calc(100% + .25rem);left:0;z-index:5;min-width:11rem;max-width:calc(100vw - 2rem);display:flex;flex-direction:column;background:var(--paper-raised);border:1px solid var(--ink)}.overflow-menu-list button{padding:.65rem .8rem;font:inherit;text-align:left;color:var(--ink);background:0 0;border:0;border-bottom:1px solid var(--line);cursor:pointer}.overflow-menu-list button:last-child{border-bottom:0}.overflow-menu-list button:focus-visible,.overflow-menu-list button:hover{background:var(--paper)}dialog.sheet{border:1px solid var(--ink);background:var(--paper-raised);color:var(--ink);padding:1.25rem;width:min(92vw,360px)}dialog.sheet::backdrop{background:rgba(30,42,50,.45)}dialog.sheet h2{font-family:var(--font-display);font-weight:400;font-size:1.15rem;border-top:2px solid var(--ink);padding-top:.5rem;margin:0 0 1rem}dialog.sheet label{display:block;font-size:.8rem;color:var(--muted);margin-bottom:.9rem}dialog.sheet input,dialog.sheet select,dialog.sheet textarea{display:block;width:100%;margin-top:.3rem;padding:.55rem;font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--line)}dialog.sheet input[hidden]{display:none}dialog.sheet label[hidden]{display:none}.field-with-icon{position:relative;display:block;margin-top:.3rem}.field-with-icon input{margin-top:0;padding-right:2.4rem}.field-icon-btn{position:absolute;top:50%;right:.1rem;transform:translateY(-50%);background:0 0;border:none;color:var(--muted);font-size:1rem;line-height:1;padding:.5rem;cursor:pointer}.field-icon-btn:active{color:var(--rust)}.checkbox-label{display:flex!important;align-items:flex-start;gap:.5rem}.checkbox-label input[type=checkbox]{display:inline-block!important;width:auto!important;margin-top:.2rem}.checkbox-label:has(input:disabled){opacity:.55}.sheet-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.5rem}.btn-ghost{background:0 0;border:1px solid var(--line);color:var(--muted);font:inherit;font-size:.85rem;padding:.55rem .9rem;cursor:pointer}.label-qr{text-align:center;margin:.25rem 0 .5rem}.label-qr svg{border:1px solid var(--line);background:#fff}.label-caption{text-align:center;font-family:var(--font-display);color:var(--ink);margin:0 0 1rem;max-width:none}.label-size-picker{display:flex;justify-content:center;gap:1rem;border:none;padding:0;margin:0 0 1rem;font-size:.85rem;color:var(--muted)}.label-size-picker legend{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.label-size-picker label{display:flex;align-items:center;gap:.3rem}dialog.sheet .opt{color:var(--muted);font-size:.9em}.sheet-blurb{font-size:.8rem;color:var(--muted);margin:0 0 1rem}.sheet-wide{width:100%;margin-bottom:.75rem}.location-settings-list{list-style:none;margin:0 0 .75rem;padding:0;max-height:40vh;overflow-y:auto}.location-settings-row{display:flex;align-items:center;gap:.5rem;padding:.5rem 0;border-bottom:1px solid var(--line)}.location-settings-row:first-child{border-top:1px solid var(--line)}.location-settings-name{flex:1;min-width:0;font-family:var(--font-display);font-size:1rem;color:var(--ink)}.location-settings-empty{color:var(--muted);font-size:.85rem;padding:.5rem 0}.add-location-form{display:flex;gap:.5rem;margin-bottom:.5rem}.add-location-form input{flex:1;width:auto!important;margin-top:0!important}dialog.sheet textarea{resize:vertical}.field-label{font-size:.85rem;color:var(--muted);margin-bottom:.35rem}.template-rows{list-style:none;margin:0 0 .5rem;padding:0}.template-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;padding:.4rem 0;border-bottom:1px solid var(--line)}.template-row input,.template-row select{flex:1 1 7rem;width:auto!important;min-width:0;margin-top:0!important}.template-row .container-row-actions{flex:0 0 auto}.template-suffixes{display:block;font-family:var(--font-body);font-size:.8rem;color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere}.template-preview{list-style:none;margin:-.4rem 0 .9rem;padding:.4rem .6rem;font-size:.85rem;color:var(--ink);background:var(--paper);border:1px dashed var(--line);max-height:30vh;overflow-y:auto}.template-preview li+li{margin-top:.15rem}.template-preview em{color:var(--muted);font-style:normal}.check-report-section h3{font-family:var(--font-display);font-weight:400;font-size:.9rem;color:var(--muted);margin:0 0 .4rem}.check-report-list{list-style:none;margin:0 0 1rem;padding:0;max-height:30vh;overflow-y:auto;font-size:.85rem}.check-report-list li{padding:.4rem 0;border-bottom:1px solid var(--line)}.check-report-list li:first-child{border-top:1px solid var(--line)}.bulk-confirm-isbn{color:var(--rust);font-weight:600}.bulk-confirm-target{color:var(--muted);font-size:.85em;margin-left:.4em}.book-row{display:flex;align-items:stretch;gap:.75rem;border-bottom:1px solid var(--line)}.book-row:first-child{border-top:1px solid var(--line)}.book-row-main{flex:1;min-width:0;display:block;text-align:left;background:0 0;border:none;padding:.85rem 0;font:inherit;color:inherit;cursor:pointer}.book-title{display:block;font-family:var(--font-display);font-size:1.02rem;color:var(--ink)}.book-title-unknown{color:var(--rust);font-weight:700}.book-authors{display:block;font-size:.8rem;color:var(--muted);margin-top:.1rem}.book-loc{display:block;font-size:.78rem;color:var(--ledger-green);margin-top:.25rem}.book-loc.is-unshelved{color:var(--rust)}.book-checkout{display:block;font-size:.78rem;color:var(--rust);margin-top:.1rem}.row-action.is-checked-out{color:var(--rust)}.book-row .row-action{align-self:center}.book-filters{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.book-search{width:100%;padding:.55rem .7rem;font:inherit;color:var(--ink);background:var(--paper-raised);border:1px solid var(--line)}.book-filter-row{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.book-filter-row select{flex:1;min-width:8rem;padding:.5rem;font:inherit;color:var(--ink);background:var(--paper-raised);border:1px solid var(--line)}.add-target{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;margin-top:.6rem;font-size:.9rem;color:var(--muted)}.add-target-text{flex:1 1 10rem;min-width:0;overflow-wrap:anywhere}.add-target-text strong{color:var(--ink);font-weight:600}