:root{
  --paper:#fbfaf7;
  --ink:#141414;
  --muted:#6b6862;
  --line:#e2ddd2;
  --accent:#c8102e;
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
  --sans: "Helvetica Neue", Helvetica, Arial, system-ui, sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}

/* ---------- masthead ---------- */
.masthead{
  display:flex;align-items:center;gap:24px;
  padding:18px 32px;border-bottom:2px solid var(--ink);
  position:sticky;top:0;background:var(--paper);z-index:40;
}
.mast-left{display:flex;align-items:baseline;gap:10px}
.wordmark{font-family:var(--serif);font-weight:700;font-size:30px;letter-spacing:.02em}
.wordmark-sub{font-size:11px;letter-spacing:.32em;color:var(--muted);text-transform:uppercase}
.searchbar{flex:1}
.searchbar input{
  width:100%;border:none;border-bottom:1px solid var(--line);background:transparent;
  font-family:var(--serif);font-size:20px;padding:8px 2px;color:var(--ink);
}
.searchbar input:focus{outline:none;border-bottom-color:var(--accent)}
.mast-right .logout{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.mast-right .logout:hover{color:var(--accent)}

/* ---------- progress ---------- */
.progress-banner{padding:14px 32px;border-bottom:1px solid var(--line);background:#fff}
.prog-row{display:flex;justify-content:space-between;align-items:baseline}
.prog-label{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--accent)}
.prog-stat{font-size:12px;color:var(--muted)}
.prog-bars{display:flex;gap:10px;margin-top:8px}
.prog-track{flex:1;height:3px;background:var(--line);overflow:hidden}
.prog-fill{height:100%;width:0;background:var(--ink);transition:width .6s ease}
.prog-fill.alt{background:var(--accent)}
.prog-last{font-size:11px;color:var(--muted);margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- layout ---------- */
.layout{display:grid;grid-template-columns:240px 1fr;gap:0}
.facets{border-right:1px solid var(--line);padding:26px 24px;position:sticky;top:77px;align-self:start;max-height:calc(100vh - 77px);overflow:auto}
.facet-group{margin-bottom:26px}
.facet-group h3{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}
.facet-item{display:flex;justify-content:space-between;font-size:13px;padding:3px 0;color:var(--ink);cursor:pointer}
.facet-item:hover{color:var(--accent)}
.facet-item.active{color:var(--accent);font-weight:600}
.facet-item .c{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}

.results{padding:26px 32px 80px}
.results-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.result-meta{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.sortbox label{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-right:8px}
.sortbox select{border:none;border-bottom:1px solid var(--line);background:transparent;font-family:var(--serif);font-size:15px;padding:4px}
.sortbox select:focus{outline:none}

.active-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;
  border:1px solid var(--ink);padding:4px 10px;border-radius:20px}
.chip b{cursor:pointer}

/* ---------- grid ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:34px 28px}
.card{cursor:pointer;display:flex;flex-direction:column}
.card-cover{position:relative;aspect-ratio:3/4;background:#efeae0;overflow:hidden;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center}
.card-cover img{width:100%;height:100%;object-fit:cover;display:block}
.card-cover.placeholder{background:linear-gradient(135deg,#efeae0,#e4ddcf)}
.cover-glyph{font-family:var(--serif);font-size:13px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);
  text-align:center;padding:12px;line-height:1.5}
.medium-badge{position:absolute;top:8px;left:8px;background:var(--ink);color:#fff;font-size:9px;letter-spacing:.14em;
  text-transform:uppercase;padding:3px 7px}
.fav-btn{position:absolute;top:6px;right:6px;background:rgba(20,18,16,.45);color:#fff;border:none;
  width:30px;height:30px;border-radius:50%;font-size:15px;line-height:1;opacity:0;transition:.15s}
.card-cover:hover .fav-btn{opacity:1}
.fav-btn:hover{background:rgba(20,18,16,.75)}
.fav-btn.on{opacity:1;color:var(--accent);background:rgba(255,255,255,.92)}
.mast-fav{background:transparent;border:1px solid var(--line);color:var(--muted);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;padding:7px 12px;border-radius:18px}
.mast-fav:hover{border-color:var(--accent);color:var(--accent)}
.mast-fav.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.fav-toggle.on{border-color:var(--accent);color:var(--accent)}
.coll-badge{position:absolute;bottom:8px;right:8px;background:var(--accent);color:#fff;font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;padding:3px 7px}
.card-body{padding-top:12px}
.card-title{font-family:var(--serif);font-size:17px;line-height:1.25;margin:0 0 5px}
.card-meta{font-size:12px;color:var(--muted);line-height:1.5}
.card-theme{display:block;font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-top:7px}
.card-desc{font-size:12.5px;color:#444;line-height:1.45;margin-top:8px;font-style:italic}

.pager{display:flex;justify-content:center;gap:14px;margin-top:50px;align-items:center}
.pager button{border:1px solid var(--ink);background:transparent;padding:8px 18px;font-size:12px;letter-spacing:.1em;text-transform:uppercase}
.pager button[disabled]{opacity:.3;cursor:default}
.pager .pinfo{font-size:12px;color:var(--muted)}

.empty{font-family:var(--serif);font-size:20px;color:var(--muted);padding:60px 0;text-align:center}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:28px}
.modal[hidden]{display:none}
.progress-banner[hidden]{display:none}
.modal-backdrop{position:absolute;inset:0;background:rgba(16,14,12,.66);backdrop-filter:blur(4px);animation:fade .2s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.modal-panel{position:relative;background:var(--paper);width:100%;max-width:1200px;height:min(90vh,940px);
  display:flex;flex-direction:column;box-shadow:0 40px 90px rgba(0,0,0,.5);overflow:hidden;border:1px solid var(--ink);
  animation:rise .26s cubic-bezier(.2,.7,.2,1)}
.modal-close{position:absolute;top:16px;right:16px;z-index:20;background:rgba(251,250,247,.92);color:var(--ink);
  border:1px solid var(--line);width:38px;height:38px;border-radius:50%;font-size:14px;line-height:1;
  display:flex;align-items:center;justify-content:center;transition:.18s;box-shadow:0 2px 10px rgba(0,0,0,.18)}
.modal-close:hover{background:var(--accent);color:#fff;border-color:var(--accent);transform:rotate(90deg)}
.modal-inner{display:grid;grid-template-columns:1fr 380px;flex:1;min-height:0}

.viewer{background:#201e1a;display:flex;align-items:center;justify-content:center;min-height:0;position:relative;overflow:auto;padding:26px}
.viewer iframe{width:100%;height:100%;border:none;background:#fff;border-radius:2px;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.viewer:has(.pdfjs){padding:0}
.viewer iframe.pdfjs{border-radius:0;box-shadow:none}
.viewer img{max-width:100%;max-height:100%;object-fit:contain;box-shadow:0 12px 40px rgba(0,0,0,.55);border-radius:2px}
.viewer video{max-width:100%;max-height:100%;border-radius:2px;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.viewer audio{width:min(90%,520px)}
.viewer .textview{background:#fff;color:#1a1a1a;width:100%;height:100%;overflow:auto;padding:54px 62px;
  font-family:var(--serif);font-size:17px;line-height:1.78;white-space:pre-wrap;border-radius:2px;
  box-shadow:0 10px 40px rgba(0,0,0,.4);max-width:820px}
.viewer .noview{color:#d8cfc4;font-family:var(--serif);font-size:18px;text-align:center;padding:48px;line-height:1.6}
.audio-card{text-align:center;width:100%}
.audio-card .ac-glyph{font-size:54px;color:#6e6a62;margin-bottom:18px}
.audio-card .ac-title{color:#efe9df;font-family:var(--serif);font-size:24px;line-height:1.3;margin-bottom:28px;padding:0 24px}
.media-col{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;gap:0}
.media-col video{max-height:55%;width:100%;object-fit:contain;background:#000;flex-shrink:0}
.media-col .audio-card{padding:40px 0 24px;flex-shrink:0}
.transcript-box{flex:1 1 auto;min-height:90px;max-height:46vh;overflow-y:auto;background:#fbfaf7;color:#1a1a1a;margin:18px;border-radius:3px;padding:22px 26px}
.transcript-box .tb-head{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-bottom:14px;border-bottom:1px solid var(--line);padding-bottom:10px}
.transcript-box .tb-prov{color:var(--accent)}
.transcript-box .tb-text{font-family:var(--serif);font-size:14.5px;line-height:1.7}
.transcript-box .tb-text.seg{font-family:var(--sans);font-size:13.5px;line-height:1.6}
.tb-line{display:flex;gap:12px;padding:3px 0;align-items:baseline}
.tb-ts{flex-shrink:0;color:var(--accent);font-variant-numeric:tabular-nums;font-size:12px;cursor:pointer;
  font-family:var(--sans);width:46px;text-align:right;user-select:none}
.tb-ts:hover{text-decoration:underline}
.tb-line span{flex:1}
.ocr-box{margin:18px 0 4px;font-size:13px}
.ocr-box .ocr-prog{display:flex;align-items:center;gap:10px;color:var(--muted);font-style:italic}
.ocr-box .ocr-done{color:#3a7a3a;font-size:12px;letter-spacing:.02em}
.ocr-box .ocr-err{color:var(--accent);font-size:12.5px}
.ocr-box .dl-link{font-size:12px}
.extra-dl{display:flex;flex-wrap:wrap;gap:16px;margin-top:14px}
.dl-link{font-size:12px;color:var(--muted);border-bottom:1px solid var(--line)}
.dl-link:hover{color:var(--accent);border-bottom-color:var(--accent)}
.transcript-box .tb-status{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:14px;font-style:italic;padding:14px 0}
.spinner{display:inline-block;width:15px;height:15px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0}
@keyframes spin{to{transform:rotate(360deg)}}

.meta-panel{padding:42px 36px;border-left:1px solid var(--line);display:flex;flex-direction:column;overflow:auto;background:var(--paper)}
.meta-kicker{font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);margin-bottom:16px}
.meta-title{font-family:var(--serif);font-size:30px;line-height:1.16;margin:0 0 10px;letter-spacing:-.01em}
.meta-by{font-size:14.5px;color:var(--muted);margin-bottom:24px;font-style:italic}
.meta-desc{font-size:15px;line-height:1.62;margin:0 0 8px;color:#2a2a2a}
.meta-desc.pending{color:var(--muted);font-style:italic}
.tags{display:flex;flex-wrap:wrap;gap:7px;margin:20px 0 6px}
.tag{font-size:11px;letter-spacing:.03em;background:#efeae0;color:#5a564e;padding:4px 11px;border-radius:20px;cursor:pointer;transition:.14s}
.tag:hover{background:var(--accent);color:#fff}
.meta-dl{border-top:1px solid var(--line);padding-top:18px;margin-top:28px}
.meta-row{display:flex;font-size:13px;padding:7px 0;border-bottom:1px solid var(--line)}
.meta-row:last-of-type{border-bottom:none}
.meta-row .k{width:84px;color:var(--muted);text-transform:uppercase;font-size:10px;letter-spacing:.12em;padding-top:3px;flex-shrink:0}
.meta-row .v{flex:1;line-height:1.4}
.actions{display:flex;gap:10px;margin-top:24px;flex-wrap:wrap}
.btn-primary{background:var(--ink);color:#fff;border:1px solid var(--ink);padding:12px 22px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;transition:.16s;border-radius:2px}
.btn-primary:hover{background:var(--accent);border-color:var(--accent)}
.btn-ghost{background:transparent;color:var(--ink);border:1px solid var(--ink);padding:12px 22px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;transition:.16s;border-radius:2px}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.share-out{margin-top:16px;font-size:12px;color:var(--muted);word-break:break-all;line-height:1.6}
.share-out a{color:var(--accent)}
.quality-sel{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:26px}
.qs-label{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-right:2px}
.qs-opt{display:inline-flex;align-items:center;gap:6px;font-size:12px;border:1px solid var(--line);
  padding:6px 11px;border-radius:20px;cursor:pointer;transition:.14s;color:#4a463f}
.qs-opt.on{border-color:var(--ink);background:var(--ink);color:#fff}
.qs-opt input{accent-color:var(--accent);margin:0}

/* collection browser */
.coll-list{width:100%;height:100%;overflow:auto;background:#fff;color:#111;padding:30px 36px;border-radius:2px;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.coll-crumb{font-size:12px;color:var(--muted);margin-bottom:16px}
.coll-crumb a{color:var(--accent);cursor:pointer}
.coll-entry{display:flex;justify-content:space-between;padding:9px 4px;border-bottom:1px solid var(--line);cursor:pointer;font-size:14px}
.coll-entry:hover{background:#faf7f0}
.coll-entry .ce-ext{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.1em}

/* ---------- login ---------- */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh}
.login-card{text-align:center;max-width:360px;padding:40px}
.login-mark{font-family:var(--serif);font-size:54px;font-weight:700;letter-spacing:.02em}
.login-sub{font-size:11px;letter-spacing:.4em;color:var(--muted);margin-top:4px}
.login-msg{font-family:var(--serif);font-size:18px;margin:34px 0 22px;color:var(--ink)}
.login-err{color:var(--accent);font-size:13px;min-height:18px;margin-top:16px}
.login-foot{font-size:11px;color:var(--muted);margin-top:40px;letter-spacing:.06em}
.login-input{width:100%;border:none;border-bottom:1px solid var(--ink);background:transparent;
  font-family:var(--serif);font-size:18px;padding:10px 2px;text-align:center;margin-bottom:22px}
.login-input:focus{outline:none;border-bottom-color:var(--accent)}
.login-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}

/* ---------- admin ---------- */
.admin-wrap{max-width:1000px;margin:0 auto;padding:40px 32px 80px;display:grid;grid-template-columns:1fr 1fr;gap:48px}
.admin-col{min-width:0}
.admin-h{font-family:var(--serif);font-size:24px;margin:0 0 8px;border-bottom:2px solid var(--ink);padding-bottom:10px}
.admin-note{font-size:13px;color:var(--muted);line-height:1.5;margin:0 0 20px}
.invite-form{display:flex;flex-direction:column;gap:10px;margin-bottom:8px}
.invite-form input{border:none;border-bottom:1px solid var(--line);background:transparent;font-size:15px;padding:8px 2px;font-family:var(--serif)}
.invite-form input:focus{outline:none;border-bottom-color:var(--accent)}
.invite-form .btn-primary{align-self:flex-start;margin-top:6px}
.admin-list{margin-top:14px}
.admin-row{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}
.ar-main{font-size:15px;font-family:var(--serif)}
.ar-sub{font-size:11px;color:var(--muted);margin-top:3px;letter-spacing:.02em}
.admin-empty{font-size:13px;color:var(--muted);font-style:italic;padding:14px 0}
.badge-admin{font-size:9px;letter-spacing:.14em;background:var(--accent);color:#fff;padding:2px 7px;margin-left:6px;vertical-align:middle}
.btn-ghost.sm,.btn-primary.sm{padding:6px 12px;font-size:11px}
@media(max-width:780px){.admin-wrap{grid-template-columns:1fr;gap:36px}}

/* ---------- exegesis ---------- */
.exe-body{overflow:hidden}
.exe-intro{flex:1;font-size:13px;color:var(--muted);font-style:italic;padding:0 8px;line-height:1.4}
.exe-intro em{color:var(--ink);font-style:italic}
.exe-layout{display:grid;grid-template-columns:1fr 360px;height:calc(100vh - 77px)}
.exe-map{position:relative;background:#121009;overflow:hidden}
.exe-map canvas{width:100%;height:100%;display:block;cursor:grab}
.exe-map canvas:active{cursor:grabbing}
.exe-hint{position:absolute;bottom:14px;left:16px;font-size:11px;color:#7a7468;letter-spacing:.08em;text-transform:uppercase;pointer-events:none}
.exe-mapstatus{position:absolute;top:16px;left:16px;font-size:12px;color:#cfc7b8;background:rgba(0,0,0,.35);padding:6px 12px;border-radius:14px;transition:opacity 1s}
.exe-side{border-left:1px solid var(--line);overflow-y:auto;padding:24px 22px 60px;background:var(--paper)}
.exe-block{margin-bottom:30px}
.exe-block h3{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:0 0 14px;border-bottom:1px solid var(--line);padding-bottom:8px}
.exe-dim{color:var(--muted);font-size:12px}
.exe-bigtok{text-align:center;padding:12px 0 18px;border-bottom:1px solid var(--line);margin-bottom:16px}
.exe-bigtok-n{font-family:var(--serif);font-size:48px;line-height:1;color:var(--accent);letter-spacing:-.02em}
.exe-bigtok-l{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);margin-top:8px}
.exe-corpgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px 12px;margin-bottom:14px}
.exe-sub{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:18px 0 8px}
.exe-overview{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.exe-stat{display:flex;flex-direction:column}
.exe-stat b{font-family:var(--serif);font-size:24px;line-height:1}
.exe-stat span{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:3px}
.exe-legend{display:flex;flex-direction:column;gap:2px}
.exe-legrow{display:flex;align-items:center;gap:9px;padding:5px 6px;border-radius:4px;cursor:pointer;font-size:12.5px}
.exe-legrow:hover{background:#f0ece2}
.exe-legrow.on{background:var(--ink);color:#fff}
.exe-swatch{width:11px;height:11px;border-radius:50%;flex-shrink:0}
.exe-legterms{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.exe-legsize{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.exe-legrow.on .exe-legsize{color:#bbb}
.exe-bars{display:flex;flex-direction:column;gap:6px}
.exe-bar{display:flex;align-items:center;gap:8px;font-size:12px}
.exe-barlabel{width:108px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}
.exe-bartrack{flex:1;height:6px;background:var(--line);border-radius:3px;overflow:hidden}
.exe-barfill{display:block;height:100%;background:var(--accent)}
.exe-barval{width:46px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}
.exe-card{position:fixed;right:380px;bottom:30px;width:330px;background:var(--paper);border:1px solid var(--ink);
  box-shadow:0 20px 50px rgba(0,0,0,.35);padding:24px;z-index:50;border-radius:3px}
.exe-card[hidden]{display:none}
.exe-card-x{position:absolute;top:10px;right:12px;background:none;border:none;font-size:14px;color:var(--muted)}
.exe-card-kicker{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-bottom:8px}
.exe-card-title{font-family:var(--serif);font-size:20px;line-height:1.2;margin-bottom:6px}
.exe-card-by{font-size:13px;color:var(--muted);font-style:italic;margin-bottom:10px}
.exe-card-desc{font-size:13px;line-height:1.5;margin-bottom:12px}
.exe-card-meta{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:16px}
.exe-card .btn-primary{display:inline-block}
@media(max-width:980px){.exe-layout{grid-template-columns:1fr}.exe-side{display:none}.exe-card{right:20px}}

@media(max-width:880px){
  .layout{grid-template-columns:1fr}
  .facets{display:none}
  .modal-inner{grid-template-columns:1fr}
  .meta-panel{border-left:none;border-top:1px solid var(--line)}
  .masthead{flex-wrap:wrap;gap:12px}
}
