:root{--bg: #f6f2ea;--surface: #fffdf8;--surface-2: #f0eadf;--ink: #1f1c18;--muted: #5d574e;--line: #ddd5c7;--accent: #2f5a4e;--accent-ink: #ffffff;--accent-soft: #e2ece7;--warn: #8a4b2a;--warn-soft: #f3e4da;--danger: #8b2e2e;--danger-soft: #f4e0e0;--info-soft: #e6e9f2;--focus: #1d4ed8;--radius: 10px;--font-body: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-head: Georgia, "Iowan Old Style", "Times New Roman", serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--measure: 62rem;font-size:16px}html.large-text{font-size:19px}html.high-contrast{--bg: #ffffff;--surface: #ffffff;--surface-2: #f2f2f2;--ink: #000000;--muted: #2b2b2b;--line: #4d4d4d;--accent: #003d2f;--accent-soft: #d6e6df}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-head);font-weight:600;line-height:1.2;margin:0 0 .5rem}h1{font-size:1.9rem}h2{font-size:1.4rem}h3{font-size:1.12rem}p{margin:0 0 .75rem}a{color:var(--accent)}small,.muted{color:var(--muted)}code,.mono{font-family:var(--font-mono);font-size:.9em}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.skip-link{position:absolute;left:-999px;top:0;background:var(--surface);padding:.5rem 1rem;z-index:100}.skip-link:focus{left:.5rem;top:.5rem}.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app-header{background:var(--surface);border-bottom:1px solid var(--line)}.app-header .inner{max-width:var(--measure);margin:0 auto;padding:.75rem 1rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.brand{font-family:var(--font-head);font-size:1.25rem;text-decoration:none;color:var(--ink)}.brand small{display:block;font-family:var(--font-body);font-size:.75rem;color:var(--muted)}.steps{display:flex;gap:.25rem;margin-left:auto;padding:0;list-style:none;flex-wrap:wrap}.steps a{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .7rem;border-radius:999px;text-decoration:none;color:var(--ink);border:1px solid transparent;font-size:.92rem}.steps a:hover{background:var(--surface-2)}.steps a[aria-current=page]{background:var(--accent);color:var(--accent-ink)}.steps a .n{font-family:var(--font-mono);font-size:.75rem;opacity:.8}.steps a.disabled{color:var(--muted)}main{max-width:var(--measure);margin:0 auto;padding:1.25rem 1rem 6rem}.app-footer{max-width:var(--measure);margin:0 auto;padding:1rem;color:var(--muted);font-size:.85rem;border-top:1px solid var(--line)}.page-head{margin-bottom:1.25rem}.page-head p.lede{font-size:1.05rem;color:var(--muted);max-width:48rem}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.1rem;margin-bottom:1rem}.panel h2,.panel h3{margin-top:0}.stack>*+*{margin-top:.75rem}.row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.75rem 1.25rem}.notice{border-left:4px solid var(--accent);background:var(--accent-soft);padding:.7rem .9rem;border-radius:6px;margin-bottom:1rem}.notice.warn{border-color:var(--warn);background:var(--warn-soft)}.notice.danger{border-color:var(--danger);background:var(--danger-soft)}.notice.info{border-color:#3b4d80;background:var(--info-soft)}.notice p:last-child{margin-bottom:0}.demo-flag{display:inline-block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;padding:.1rem .45rem;border-radius:4px;background:var(--surface-2);color:var(--muted);border:1px solid var(--line)}label,.label{display:block;font-weight:600;font-size:.92rem;margin-bottom:.25rem}.help{font-weight:400;color:var(--muted);font-size:.85rem;display:block}input[type=text],input[type=number],input[type=date],input[type=search],select,textarea{width:100%;font:inherit;color:inherit;padding:.55rem .65rem;border:1px solid var(--line);border-radius:8px;background:var(--surface)}textarea{min-height:7rem;resize:vertical}fieldset{border:1px solid var(--line);border-radius:8px;padding:.6rem .9rem;margin:0 0 .75rem}legend{font-weight:600;padding:0 .3rem}.check{display:flex;align-items:flex-start;gap:.5rem;font-weight:400;margin:.35rem 0}.check input{margin-top:.3rem;width:1.1rem;height:1.1rem}.field{margin-bottom:.9rem}button,.btn{font:inherit;cursor:pointer;border-radius:8px;padding:.55rem .95rem;border:1px solid var(--line);background:var(--surface);color:var(--ink);text-decoration:none;display:inline-flex;align-items:center;gap:.4rem;min-height:2.5rem}button:hover,.btn:hover{background:var(--surface-2)}.btn-primary,button.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.btn-primary:hover{background:#24483e}.btn-danger{color:var(--danger);border-color:var(--danger)}.btn-small{padding:.3rem .65rem;min-height:2rem;font-size:.88rem}button:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:not-allowed}.btn-link{background:none;border:none;padding:0;color:var(--accent);text-decoration:underline;min-height:0}.actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1rem}.chip{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .55rem;border-radius:999px;border:1px solid var(--line);background:var(--surface-2);font-size:.8rem}.chip-set{display:flex;flex-wrap:wrap;gap:.35rem}.badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:6px;font-size:.82rem;font-weight:600;border:1px solid;white-space:nowrap}.badge .icon{font-size:.9em}.badge-essential-now{background:#e2ece7;border-color:#2f5a4e;color:#1f3f36}.badge-useful-later{background:#e6e9f2;border-color:#3b4d80;color:#2a3860}.badge-alternative-perspective{background:#f2e7d5;border-color:#8a5a1f;color:#5c3b12}.badge-optional-reference{background:#eee;border-color:#6b6b6b;color:#3a3a3a}.badge-skip{background:#f4e0e0;border-color:#8b2e2e;color:#5f1e1e}.badge-needs-confirmation{background:#fbf1cf;border-color:#8a6d00;color:#5a4700}.badge-progress{background:var(--surface-2);border-color:var(--line);color:var(--ink);font-weight:500}.book-list{list-style:none;padding:0;margin:0}.book-row{display:grid;grid-template-columns:auto 1fr auto;gap:.75rem;align-items:start;padding:.75rem 0;border-top:1px solid var(--line)}.book-row:first-child{border-top:none}.book-row .order{font-family:var(--font-mono);color:var(--muted);min-width:1.6rem;text-align:right;padding-top:.15rem}.book-title{font-weight:600}.book-title button{font-weight:600;text-align:left}.book-meta{color:var(--muted);font-size:.88rem}.book-row .side{display:flex;flex-direction:column;align-items:flex-end;gap:.35rem}.reason-list{margin:.4rem 0 0;padding-left:1.1rem}.reason-list li{margin-bottom:.25rem}.reason-code{font-family:var(--font-mono);font-size:.72rem;color:var(--muted);margin-left:.3rem}.phase{margin-bottom:1.5rem}.phase-head{display:flex;align-items:baseline;gap:.75rem;border-bottom:2px solid var(--accent);padding-bottom:.3rem;margin-bottom:.5rem}.phase-head h2{margin:0}.tl-item{display:grid;grid-template-columns:6.5rem 1fr;gap:.75rem;padding:.75rem 0;border-top:1px solid var(--line)}.tl-item:first-of-type{border-top:none}.tl-when{font-size:.85rem;color:var(--muted)}.tl-when strong{display:block;color:var(--ink);font-family:var(--font-mono);font-size:.85rem}details.item summary{cursor:pointer;list-style:none}details.item summary::-webkit-details-marker{display:none}details.item summary .expand{color:var(--accent);font-size:.85rem;text-decoration:underline}details.item[open] summary .expand:after{content:" (hide)"}.detail-body{margin-top:.6rem;padding:.75rem;background:var(--surface-2);border-radius:8px}.kv{display:grid;grid-template-columns:max-content 1fr;gap:.25rem .9rem;font-size:.92rem;margin:0}.kv dt{color:var(--muted)}.kv dd{margin:0}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;padding:.35rem .5rem;border-bottom:1px solid var(--line);vertical-align:top}th{font-weight:600}td.num,th.num{text-align:right;font-family:var(--font-mono)}.table-wrap{overflow-x:auto}.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.6rem;margin-bottom:1rem}.summary .stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.6rem .8rem}.summary .stat .v{font-family:var(--font-head);font-size:1.35rem}.summary .stat .k{color:var(--muted);font-size:.82rem}.cmap-tier{margin-bottom:1rem}.cmap-tier h3{margin-bottom:.4rem}.cmap-nodes{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:.6rem}.cnode{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:.6rem .75rem}.cnode.done{border-color:var(--accent)}.cnode.gap{border-color:var(--warn);border-style:dashed}.cnode .depth{font-family:var(--font-mono);font-size:.8rem}.cnode ul{margin:.3rem 0 0;padding-left:1rem;font-size:.85rem}.meter{height:6px;background:var(--surface-2);border-radius:3px;overflow:hidden;margin:.3rem 0}.meter>span{display:block;height:100%;background:var(--accent)}.meter.warn>span{background:var(--warn)}.meter.danger>span{background:var(--danger)}.scan-stage{position:relative;width:100%;aspect-ratio:5 / 2;background:#3b3129;border-radius:var(--radius);overflow:hidden;border:1px solid var(--line)}.scan-stage img,.scan-stage svg.shelf-art{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.spine-box{position:absolute;border:2px solid #fff;background:#ffffff1f;color:#fff;font-size:.75rem;font-weight:700;display:flex;align-items:flex-start;justify-content:center;padding:.15rem 0;cursor:pointer;border-radius:3px;text-shadow:0 1px 2px #000}.spine-box:hover{background:#ffffff47}.spine-box.confirmed{border-style:solid;border-color:#9fe0c3}.spine-box.unconfirmed{border-style:dashed;border-color:#ffd86b}.spine-box.rejected{border-style:dotted;border-color:#bbb;opacity:.5}.spine-box.active{outline:3px solid var(--focus);outline-offset:1px}.spine-box .num{background:#000000a6;border-radius:3px;padding:0 .25rem}.spine-list{list-style:none;padding:0;margin:0}.spine-item{border:1px solid var(--line);border-radius:8px;padding:.75rem;margin-bottom:.6rem;background:var(--surface)}.spine-item.active{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus)}.spine-item .ocr{font-family:var(--font-mono);background:var(--surface-2);padding:.15rem .4rem;border-radius:4px}.conf{font-size:.85rem}.conf-high{color:#1f3f36}.conf-medium{color:#5a4700}.conf-low,.conf-none{color:var(--danger)}.candidate{display:flex;gap:.5rem;align-items:flex-start;margin:.35rem 0;font-weight:400}.candidate input{margin-top:.3rem}.legend{display:flex;flex-wrap:wrap;gap:.5rem 1rem;font-size:.85rem;margin:.5rem 0}dialog{border:1px solid var(--line);border-radius:var(--radius);padding:0;max-width:min(40rem,94vw);width:100%;background:var(--surface);color:var(--ink)}dialog::backdrop{background:#1e191480}.dialog-body{padding:1.1rem 1.25rem 1.25rem;max-height:85vh;overflow:auto}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.dialog-head h2{margin:0}.empty{text-align:center;padding:2rem 1rem;color:var(--muted);border:1px dashed var(--line);border-radius:var(--radius)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.seg button{border:none;border-radius:0;border-right:1px solid var(--line)}.seg button:last-child{border-right:none}.seg button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}@media (max-width: 720px){h1{font-size:1.55rem}.app-header .inner{padding:.6rem .75rem}.steps{position:fixed;left:0;right:0;bottom:0;margin:0;background:var(--surface);border-top:1px solid var(--line);justify-content:space-around;padding:.35rem .25rem;z-index:50;flex-wrap:nowrap}.steps a{flex-direction:column;gap:.1rem;padding:.3rem .4rem;font-size:.72rem;border-radius:8px}.steps a .n{display:none}main{padding:1rem .75rem 6.5rem}.book-row{grid-template-columns:auto 1fr}.book-row .side{grid-column:2;align-items:flex-start;flex-direction:row;flex-wrap:wrap}.tl-item{grid-template-columns:1fr;gap:.25rem}.scan-stage{aspect-ratio:5 / 3}.spine-box{font-size:.65rem}.kv{grid-template-columns:1fr}.kv dt{margin-top:.4rem}}@media (prefers-reduced-motion: reduce),(html.reduce-motion){*{transition:none!important;animation:none!important;scroll-behavior:auto!important}}html.reduce-motion *{transition:none!important;animation:none!important}
