:root{--wine:#722b3e;--deep:#4b1929;--tan:#d6bea0;--paper:#faf6ee;--ink:#302423;--muted:#776963;--line:#e4d9ca;--white:#fffdf9;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--paper);font-size:16px}*{box-sizing:border-box}body{margin:0}header{max-width:980px;margin:auto;padding:26px 22px 20px;display:flex;gap:14px;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}a{color:var(--wine);text-decoration:none}button,a,input,select,textarea{ -webkit-tap-highlight-color:transparent}button,.button{font:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:10px 18px;border-radius:10px;border:1px solid transparent;background:var(--wine);color:white;font-weight:600}button:hover,.button:hover{filter:brightness(.94)}button:disabled{opacity:.5;cursor:wait}.secondary{background:transparent;color:var(--wine);border-color:var(--tan)}.plain{background:none;color:var(--wine);padding:8px}.danger{color:#9b2233}.brand{font-family:Georgia,serif;font-size:21px;font-weight:700;max-width:260px;line-height:1.2}.language{background:none;color:var(--wine);border:1px solid var(--tan);min-width:72px;padding:8px 12px}main{max-width:940px;margin:auto;padding:28px 22px 115px;min-height:70vh}h1{font-family:Georgia,serif;font-size:32px;line-height:1.15;margin:0 0 24px;color:var(--deep)}h2{font-size:20px;margin:0 0 14px}h3{font-size:17px;margin:0 0 7px}p{line-height:1.55;margin:10px 0}small,.muted{color:var(--muted);font-size:14px}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.stack{display:grid;gap:16px}.panel{background:var(--white);padding:22px;border:1px solid var(--line);border-radius:15px;margin-bottom:18px}.narrow{max-width:440px;margin:12px auto}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(245px,1fr));gap:16px}.book{display:flex;flex-direction:column;gap:14px;border:1px solid var(--line);background:var(--white);border-radius:14px;padding:20px;min-height:185px}.book h2{line-height:1.35;font-family:Georgia,serif}.book .foot{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:8px}.badge{font-size:12px;display:inline-block;color:var(--wine);background:#f1e5da;padding:5px 9px;border-radius:20px}.badge.off{color:var(--muted);background:#ede9e3}.search{margin-bottom:24px;display:flex;gap:8px}.search input{flex:1;min-width:0}label{display:grid;gap:7px;font-weight:500}input,select,textarea{font:inherit;border:1px solid #c9b8a5;background:white;border-radius:9px;padding:12px;color:var(--ink);width:100%;min-height:46px}input[type=checkbox]{width:22px;min-height:22px;height:22px;flex-shrink:0;accent-color:var(--wine)}.check{display:flex;align-items:flex-start;gap:10px;line-height:1.5;font-size:14px;font-weight:400}.check input{margin-top:2px}textarea{min-height:100px;resize:vertical}.fields{display:grid;grid-template-columns:1fr 1fr;gap:15px}.wide{grid-column:1/-1}.tabs{margin-bottom:22px;gap:5px}.tabs button{background:transparent;color:var(--wine)}.tabs button.active{background:var(--wine);color:white}nav{position:fixed;bottom:0;inset-inline:0;background:var(--white);border-top:1px solid var(--line);display:flex;justify-content:center;gap:12px;padding:9px 12px max(10px,env(safe-area-inset-bottom));z-index:5}nav a{min-width:90px;min-height:48px;padding:12px;border-radius:10px;text-align:center;font-size:14px;font-weight:600}nav a.active{background:#f1e5da}dialog{border:1px solid var(--tan);border-radius:18px;width:min(94vw,580px);max-height:90dvh;padding:24px;background:var(--paper);color:var(--ink)}dialog::backdrop{background:#2c142870}dialog .close{float:inline-end;min-height:36px;padding:5px 10px}#toast{position:fixed;bottom:95px;left:50%;transform:translateX(-50%);max-width:90vw;background:var(--deep);color:white;padding:13px 20px;border-radius:12px;z-index:20;display:none;text-align:center}#toast.show{display:block}.empty{padding:42px 0;text-align:center;color:var(--muted)}.rule{border:0;border-top:1px solid var(--line);margin:22px 0}.notice{padding:14px 18px;border-radius:10px;background:#f1e5da;margin-bottom:20px;font-size:14px;line-height:1.5}#reader{width:100%;overflow:hidden;border-radius:10px;margin-block:16px}#reader video{width:100%}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:start;padding:12px 6px;border-bottom:1px solid var(--line);vertical-align:top}.scroll{overflow:auto}.subtle{display:block;margin-top:7px}.error{color:#9b2233}.qr-label{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;width:190px;min-height:240px;padding:15px;border:1px solid var(--line);text-align:center;break-inside:avoid;margin:8px}.qr-label img{width:130px;height:130px}.qr-label small{max-width:160px}.toolbar{margin-bottom:20px}[dir=rtl] h1,[dir=rtl] .brand,[dir=rtl] .book h2{font-family:system-ui,sans-serif}[hidden]{display:none!important}:focus-visible{outline:3px solid #b48653;outline-offset:3px}@media(max-width:550px){header{padding:20px 18px}.brand{font-size:19px;max-width:225px}main{padding:23px 18px 110px}h1{font-size:28px}.fields{grid-template-columns:1fr}.grid{grid-template-columns:1fr}.panel{padding:18px}nav{gap:2px}nav a{min-width:80px}.book{min-height:155px}dialog{padding:20px}}@media print{header,nav,#toast,.no-print{display:none!important}main{padding:0}body{background:white}.qr-label{border:1px dashed #bbb}h1{font-size:22px}}
/* The primary action opens a viewport-sized camera dialog, without page scrolling. */
nav{align-items:center;gap:20px}nav .scan-primary{position:relative;margin-top:-24px;min-width:88px;min-height:72px;border:5px solid var(--paper);border-radius:23px;background:var(--wine);box-shadow:0 5px 16px #4b19292b;display:flex;flex-direction:column;gap:4px;padding:10px 15px;color:white;font-size:13px}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}body.modal-open{overflow:hidden}dialog{overscroll-behavior:contain;max-height:calc(100dvh - 28px);max-width:calc(100vw - 24px)}dialog.scan-modal{width:min(96vw,620px);padding:18px;overflow:auto}dialog .close{position:sticky;top:0;z-index:2;background:var(--paper);min-width:40px;min-height:40px;margin-top:-6px;margin-inline-end:-6px}.scan-modal h2{margin-bottom:10px}.scan-hint{font-size:13px;line-height:1.4;margin-bottom:14px}#reader{width:min(100%,calc((100dvh - 220px)*var(--camera-ratio,.75)));margin:8px auto 14px;min-height:0;background:#20191b;overflow:hidden;border-radius:12px}#reader video{display:block;width:100%!important;height:auto!important;max-height:none;object-fit:contain}#manual-isbn{font-size:14px}#manual-isbn summary{cursor:pointer;color:var(--wine);padding:10px 0}#manual-isbn .search{align-items:flex-end;margin:6px 0 0}#manual-isbn label{flex:1;min-width:0}#manual-isbn button{flex-shrink:0}.calendar-icon{background:transparent;color:var(--wine);border:1px solid var(--line);border-radius:50%;width:36px;min-height:36px;padding:7px;flex-shrink:0}.calendar-icon svg{width:19px;height:19px}.scan-success{text-align:center;padding:8px 0}.scan-success h2{font-size:23px;margin-top:18px}.success-mark{display:inline-flex;width:54px;height:54px;align-items:center;justify-content:center;font-size:29px;color:var(--wine);background:#f1e5da;border-radius:50%}.due-confirmation{justify-content:center;margin:20px 0 25px}.due-date{font-weight:600}.copy-choice{text-align:start;justify-content:flex-start}.copy-choice small{display:block;margin-top:5px}@media(max-width:550px){nav{gap:10px}nav .scan-primary{min-width:84px}dialog.scan-modal{margin:auto;padding:16px}}@media(max-height:500px){dialog.scan-modal{padding:12px}.scan-hint{margin:3px 0;font-size:12px}#reader{width:min(100%,calc((100dvh - 220px)*var(--camera-ratio,1.333333)));margin:4px auto}}

.scan-modal .scan-hint{clear:both}.scan-modal .close{float:inline-end}

/* A real viewport overlay receives iPhone touches outside the inner panel. */
dialog,dialog.scan-modal{position:fixed;inset:0;width:100%;max-width:none;height:100dvh;max-height:none;margin:0;padding:14px 12px;border:0;border-radius:0;background:transparent;overflow:hidden}
dialog[open]{display:flex;align-items:center;justify-content:center}
#modal-content{box-sizing:border-box;flex:0 1 580px;width:100%;max-width:580px;max-height:calc(100dvh - 28px);overflow:auto;overscroll-behavior:contain;border:1px solid var(--tan);border-radius:18px;background:var(--paper);padding:24px}
dialog.scan-modal #modal-content{flex-basis:620px;max-width:620px;padding:18px}
@media(max-width:550px){#modal-content{padding:20px}dialog.scan-modal #modal-content{padding:16px}}
@media(max-height:500px){dialog.scan-modal #modal-content{padding:12px}}
