/* ==================================================================
   オンライン図書館 — 見た目
   古い大学図書館：木・革・真鍮・古紙。
   ================================================================== */
@import url("https://fonts.googleapis.com/css2?family=Shippori+Mincho+B1:wght@400;500;700;800&family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&display=swap");

:root {
  --wood-950: #1a100a;
  --wood-900: #26170e;
  --wood-800: #36221a;
  --wood-700: #4a2e1c;
  --wood-600: #5f3c25;
  --wood-500: #7a4c2e;
  --wood-300: #a9744a;
  --green-900: #16211b;
  --green-800: #1f2e26;
  --green-700: #2b4034;
  --gold: #c9a24a;
  --gold-2: #e2c77b;
  --gold-dim: #8f7233;
  --brass: linear-gradient(160deg, #e9d28a 0%, #b9913a 40%, #f0dc9c 55%, #a37c2c 100%);
  --paper: #f3ead8;
  --paper-2: #eadfc6;
  --paper-3: #dccfae;
  --ink: #2b2117;
  --ink-2: #5a4a3a;
  --ink-3: #8a7a68;
  --oxblood: #6b2b25;
  --oxblood-2: #8a3a31;
  --navy: #2f3d5c;
  --navy-2: #41527a;
  --forest: #2f4a3b;
  --forest-2: #3f6350;
  --umber: #5b3d24;
  --umber-2: #7a5333;
  --serif: "Shippori Mincho B1", "Hiragino Mincho ProN", "Yu Mincho", "游明朝", serif;
  --latin: "Cormorant Garamond", "Shippori Mincho B1", serif;
  --shadow-deep: 0 30px 60px -20px rgba(0,0,0,.7), 0 12px 24px -12px rgba(0,0,0,.5);
  --radius: 4px;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; overflow-x: clip;
  min-height: 100vh;
  font-family: var(--serif);
  color: var(--paper);
  background: var(--green-900);
  line-height: 1.8;
  letter-spacing: .02em;
  -webkit-font-smoothing: antialiased;
}
body::before { /* 紙の粒子 */
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; opacity: .35;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .12 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
body::after { /* 天井のランプの光 */
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(ellipse 70% 40% at 50% -10%, rgba(226,199,123,.22), transparent 60%),
              radial-gradient(ellipse 100% 60% at 50% 110%, rgba(0,0,0,.55), transparent 60%);
}
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
input, textarea, select { font-family: inherit; font-size: 16px; }
.hidden, [hidden] { display: none !important; }
.latin { font-family: var(--latin); letter-spacing: .12em; text-transform: uppercase; }
.wrap { position: relative; z-index: 1; max-width: 1080px; margin: 0 auto; padding: 0 20px; }

/* ---------- ヘッダー（真鍮の館名プレート） ---------- */
.hdr {
  position: relative; z-index: 2;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 14px 20px;
  background: linear-gradient(180deg, var(--wood-800), var(--wood-900));
  border-bottom: 3px solid var(--wood-950);
  box-shadow: 0 6px 20px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.06);
}
.hdr .brand { display: flex; align-items: baseline; gap: 12px; }
.hdr .brand .jp { font-size: 22px; font-weight: 700; color: var(--gold-2); letter-spacing: .3em; text-shadow: 0 1px 0 #000; }
.hdr .brand .en { font-family: var(--latin); font-size: 12px; letter-spacing: .28em; text-transform: uppercase; color: var(--gold-dim); }
.hdr nav { display: flex; gap: 4px; flex-wrap: wrap; justify-content: flex-end; }
.hdr nav a, .hdr nav button {
  font-size: 13px; letter-spacing: .12em; color: var(--paper-3); padding: 6px 10px;
  border: 1px solid transparent; border-radius: var(--radius); background: none;
  transition: color .2s, border-color .2s;
}
.hdr nav a:hover, .hdr nav button:hover { color: var(--gold-2); }
.hdr nav a.on { color: var(--gold-2); border-color: var(--gold-dim); }
.hdr nav a.my { color: #e6b3ad; }
.hdr nav a.my.on { border-color: #a35a52; }
@media (max-width: 640px) {
  .hdr { padding: 10px 14px; flex-wrap: wrap; }
  .hdr nav { flex: 1 1 100%; justify-content: flex-start; margin-top: 2px; }
  .shelf-head .note { flex-basis: 100%; order: 3; margin-top: -4px; }
  .hdr .brand .en { display: none; }
  .hdr .brand .jp { font-size: 18px; letter-spacing: .2em; }
  .hdr nav a, .hdr nav button { padding: 6px 7px; font-size: 12px; }
}

/* ---------- 共通の小物 ---------- */
.plaque {
  display: inline-block; padding: 6px 18px; border-radius: 3px;
  background: var(--brass); color: #3a2a0a; font-weight: 700; letter-spacing: .2em;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.6), inset 0 -1px 0 rgba(0,0,0,.35), 0 3px 8px rgba(0,0,0,.5);
  text-shadow: 0 1px 0 rgba(255,255,255,.35);
  font-size: 14px;
}
.plaque small { display: block; font-family: var(--latin); font-size: 10px; letter-spacing: .3em; font-weight: 600; opacity: .8; }
.btn {
  display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px; border-radius: 3px;
  border: 1px solid var(--gold-dim); color: var(--gold-2); background: rgba(0,0,0,.25);
  font-size: 14px; letter-spacing: .12em; transition: background .2s, transform .15s;
}
.btn:hover { background: rgba(201,162,74,.12); }
.btn:active { transform: translateY(1px); }
.btn.brass { background: var(--brass); color: #3a2a0a; border-color: #8f7233; font-weight: 700; text-shadow: 0 1px 0 rgba(255,255,255,.35); box-shadow: 0 3px 8px rgba(0,0,0,.4); }
.btn.brass:hover { filter: brightness(1.06); }
.btn.ghost { border-color: rgba(255,255,255,.18); color: var(--paper-3); }
.btn[disabled] { opacity: .5; cursor: default; }
.muted { color: var(--ink-3); }
.err { color: #e9a79f; font-size: 14px; }
.ok { color: #b9d8b0; font-size: 14px; }
.loading { color: var(--gold-dim); font-family: var(--latin); letter-spacing: .3em; text-transform: uppercase; font-size: 12px; padding: 40px 0; text-align: center; }
.fleuron, hr.fleuron { border: 0; text-align: center; margin: 2em 0; height: 1em; position: relative; }
hr.fleuron::before { content: "❦"; color: var(--gold-dim); font-size: 18px; }
.page-title { margin: 34px 0 6px; font-size: 26px; font-weight: 700; letter-spacing: .12em; color: var(--paper); }
.page-sub { margin: 0 0 22px; color: var(--paper-3); font-size: 14px; }

/* ---------- ログイン（閲覧証） ---------- */
.login-stage { position: relative; z-index: 1; min-height: 100vh; display: grid; place-items: center; padding: 40px 16px; }
.door-wall { position: fixed; inset: 0; z-index: 0;
  background:
    repeating-linear-gradient(90deg, rgba(0,0,0,.18) 0 2px, transparent 2px 120px),
    linear-gradient(180deg, var(--green-800), var(--green-900) 60%, #0e1511);
}
.card {
  width: min(440px, 100%); padding: 34px 34px 28px; position: relative;
  background: linear-gradient(180deg, #f6efdd, var(--paper-2));
  color: var(--ink); border-radius: 6px;
  box-shadow: var(--shadow-deep), inset 0 0 0 1px rgba(0,0,0,.08), inset 0 0 60px rgba(120,80,30,.12);
  animation: card-in .8s cubic-bezier(.2,.8,.2,1) both;
}
.card::before { /* 閲覧証の穴あけ罫 */
  content: ""; position: absolute; left: 14px; right: 14px; top: 14px; bottom: 14px; pointer-events: none;
  border: 1px solid rgba(107,43,37,.35); border-radius: 3px;
}
.card .stamp { font-family: var(--latin); text-align: center; letter-spacing: .35em; text-transform: uppercase; font-size: 11px; color: var(--oxblood); margin-bottom: 4px; }
.card h1 { margin: 0 0 4px; text-align: center; font-size: 26px; letter-spacing: .3em; font-weight: 800; color: var(--wood-800); }
.card .sub { text-align: center; font-size: 12px; color: var(--ink-3); letter-spacing: .2em; margin-bottom: 26px; }
.field { margin-bottom: 16px; }
.field label { display: block; font-size: 12px; letter-spacing: .2em; color: var(--ink-2); margin-bottom: 4px; }
.field input, .field textarea, .field select {
  width: 100%; padding: 10px 12px; border: 0; border-bottom: 1.5px solid rgba(43,33,23,.35);
  background: rgba(255,255,255,.35); color: var(--ink); border-radius: 3px 3px 0 0; outline: none;
  transition: border-color .2s, background .2s;
}
.field input:focus, .field textarea:focus, .field select:focus { border-color: var(--oxblood); background: rgba(255,255,255,.6); }
.card .btn.brass { width: 100%; justify-content: center; margin-top: 8px; padding: 12px; font-size: 15px; letter-spacing: .3em; }
.card .foot { margin-top: 22px; text-align: center; font-size: 11px; color: var(--ink-3); letter-spacing: .15em; }
@keyframes card-in { from { opacity: 0; transform: translateY(24px) rotate(-1deg); } to { opacity: 1; transform: none; } }

/* ---------- 本棚 ---------- */
.shelf-unit { margin: 28px 0 40px; }
.shelf-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; margin-bottom: 10px; flex-wrap: wrap; }
.shelf-head .note { font-size: 13px; color: var(--paper-3); }
.shelf-head .count { font-family: var(--latin); color: var(--gold-dim); letter-spacing: .2em; font-size: 12px; }
.shelf {
  position: relative; display: flex; align-items: flex-end; gap: 6px; padding: 26px 22px 0; min-height: 250px;
  overflow-x: auto; overflow-y: hidden;
  background: linear-gradient(180deg, rgba(0,0,0,.35), rgba(0,0,0,.05) 30%, rgba(0,0,0,0) 60%), var(--wood-800);
  border-left: 14px solid var(--wood-700); border-right: 14px solid var(--wood-700);
  box-shadow: inset 0 20px 30px rgba(0,0,0,.5);
  scrollbar-width: thin; scrollbar-color: var(--wood-500) transparent;
}
.shelf-board {
  height: 18px; border-radius: 0 0 2px 2px;
  background: linear-gradient(180deg, var(--wood-500), var(--wood-600) 40%, var(--wood-700));
  box-shadow: 0 10px 18px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.12);
  border-left: 14px solid var(--wood-600); border-right: 14px solid var(--wood-600);
}
.shelf.empty { align-items: center; justify-content: center; color: var(--paper-3); font-size: 14px; }

/* 背表紙 */
.spine {
  --leather: var(--oxblood); --leather2: var(--oxblood-2);
  flex: 0 0 auto; width: 58px; height: 214px; position: relative;
  display: flex; flex-direction: column; align-items: center; justify-content: space-between;
  padding: 14px 0 12px; border-radius: 3px 3px 2px 2px;
  background:
    linear-gradient(90deg, rgba(0,0,0,.35), rgba(255,255,255,.08) 12%, rgba(255,255,255,0) 30%, rgba(0,0,0,.18) 85%, rgba(0,0,0,.45)),
    linear-gradient(180deg, var(--leather2), var(--leather));
  box-shadow: 2px 0 0 rgba(0,0,0,.35), 0 8px 10px -6px rgba(0,0,0,.7), inset 0 0 0 1px rgba(0,0,0,.25);
  color: var(--gold-2); text-shadow: 0 1px 0 rgba(0,0,0,.6);
  transform-origin: bottom center;
  transition: transform .35s cubic-bezier(.2,.8,.2,1), box-shadow .35s;
  cursor: pointer;
}
.spine::before, .spine::after { /* 金の帯 */
  content: ""; position: absolute; left: 6px; right: 6px; height: 2px; background: var(--gold-dim); opacity: .8;
}
.spine::before { top: 9px; box-shadow: 0 4px 0 var(--gold-dim); }
.spine::after { bottom: 8px; box-shadow: 0 -4px 0 var(--gold-dim); }
.spine .t {
  writing-mode: vertical-rl; text-orientation: mixed; font-size: 13px; font-weight: 700; letter-spacing: .1em;
  max-height: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1;
}
.spine .n { font-family: var(--latin); font-size: 10px; letter-spacing: .1em; opacity: .85; }
.spine:hover { transform: translateY(-14px) rotate(-2deg); box-shadow: 2px 0 0 rgba(0,0,0,.35), 0 26px 22px -12px rgba(0,0,0,.8); }
.spine.tall { height: 234px; }
.spine.short { height: 198px; }
.spine.wide { width: 68px; }
.spine.oxblood { --leather: var(--oxblood); --leather2: var(--oxblood-2); }
.spine.navy { --leather: var(--navy); --leather2: var(--navy-2); }
.spine.forest { --leather: var(--forest); --leather2: var(--forest-2); }
.spine.umber { --leather: var(--umber); --leather2: var(--umber-2); }
.spine.black { --leather: #1d1a18; --leather2: #34302c; }
.spine.plum { --leather: #46284a; --leather2: #5d3963; }
.spine.ghost { opacity: .35; pointer-events: none; }
.shelf-more { flex: 0 0 auto; align-self: center; margin-left: 10px; color: var(--gold-dim); font-family: var(--latin); letter-spacing: .2em; font-size: 12px; }
.shelf-link { display: block; }
.shelf-link:hover .spine { transform: translateY(-6px); }

/* 棚ページ：本を1冊ずつ「寝かせた本」で並べる */
.book-list { display: grid; gap: 12px; grid-template-columns: 1fr; }
@media (min-width: 720px) { .book-list { grid-template-columns: 1fr 1fr; } }
.book-row {
  display: grid; grid-template-columns: 54px 1fr; gap: 16px; align-items: stretch;
  background: linear-gradient(180deg, rgba(255,255,255,.03), rgba(0,0,0,.2)); border: 1px solid rgba(255,255,255,.07);
  padding: 12px 14px; border-radius: 4px; transition: border-color .2s, transform .2s;
}
.book-row:hover { border-color: var(--gold-dim); transform: translateX(3px); }
.book-row .mini {
  --leather: var(--oxblood); --leather2: var(--oxblood-2);
  border-radius: 3px; min-height: 96px; display: grid; place-items: center;
  background: linear-gradient(90deg, rgba(0,0,0,.4), rgba(255,255,255,.08) 15%, rgba(0,0,0,.25)), linear-gradient(180deg, var(--leather2), var(--leather));
  color: var(--gold-2); font-family: var(--latin); font-size: 12px; letter-spacing: .1em; box-shadow: inset 0 0 0 1px rgba(0,0,0,.3), 0 6px 10px -6px #000;
  position: relative;
}
.book-row .mini::before, .book-row .mini::after { content: ""; position: absolute; left: 5px; right: 5px; height: 1.5px; background: var(--gold-dim); }
.book-row .mini::before { top: 8px; } .book-row .mini::after { bottom: 8px; }
.book-row h3 { margin: 0 0 4px; font-size: 17px; font-weight: 700; letter-spacing: .06em; color: var(--paper); }
.book-row p { margin: 0 0 8px; font-size: 13.5px; color: var(--paper-3); }
.book-row .kinds { display: flex; gap: 8px; flex-wrap: wrap; }
.tag { display: inline-block; font-size: 11px; letter-spacing: .12em; padding: 2px 9px; border: 1px solid rgba(201,162,74,.4); color: var(--gold-2); border-radius: 2px; }
.tag.deep { border-color: rgba(230,179,173,.5); color: #e6b3ad; }
.tag.dim { opacity: .45; }

/* ---------- 開いた本（資料ページ） ---------- */
.desk { position: relative; z-index: 1; padding: 26px 0 80px; }
.book-open {
  position: relative; max-width: 860px; margin: 0 auto; perspective: 1600px;
}
.cover {
  position: absolute; inset: 0; z-index: 3; border-radius: 6px 10px 10px 6px; transform-origin: left center;
  --leather: var(--oxblood); --leather2: var(--oxblood-2);
  background: linear-gradient(90deg, rgba(0,0,0,.45), rgba(255,255,255,.08) 6%, rgba(0,0,0,0) 30%, rgba(0,0,0,.25)), linear-gradient(180deg, var(--leather2), var(--leather));
  box-shadow: var(--shadow-deep); display: grid; place-items: center; color: var(--gold-2); text-align: center; padding: 40px;
  animation: cover-open 1.4s cubic-bezier(.6,.05,.3,1) .35s forwards; pointer-events: none;
}
.cover::before { content: ""; position: absolute; inset: 18px; border: 2px solid var(--gold-dim); border-radius: 4px; opacity: .7; }
.cover .ct { font-size: clamp(20px, 3.5vw, 30px); font-weight: 800; letter-spacing: .18em; text-shadow: 0 2px 0 rgba(0,0,0,.6); line-height: 1.5; }
.cover .cs { font-family: var(--latin); letter-spacing: .4em; font-size: 12px; margin-top: 14px; opacity: .85; }
@keyframes cover-open { to { transform: rotateY(-180deg); opacity: 0; visibility: hidden; } }
@media (prefers-reduced-motion: reduce) { .cover { animation-duration: .01s; animation-delay: 0s; } }

.paper {
  position: relative; z-index: 2; color: var(--ink);
  background: linear-gradient(90deg, rgba(0,0,0,.08), transparent 6%, transparent 94%, rgba(0,0,0,.05)), linear-gradient(180deg, #f7f0df, var(--paper));
  border-radius: 6px 10px 10px 6px; padding: clamp(26px, 5vw, 56px) clamp(20px, 6vw, 64px) 40px;
  box-shadow: var(--shadow-deep), inset 0 0 0 1px rgba(0,0,0,.06);
}
.paper::before { /* 綴じ側の影 */
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 26px; border-radius: 6px 0 0 6px;
  background: linear-gradient(90deg, rgba(0,0,0,.14), transparent); pointer-events: none;
}
.ribbon { /* 栞 */
  position: absolute; top: -8px; right: 44px; width: 18px; height: 110px; z-index: 4;
  background: linear-gradient(180deg, var(--oxblood-2), var(--oxblood));
  clip-path: polygon(0 0, 100% 0, 100% 100%, 50% 84%, 0 100%); box-shadow: 0 4px 6px rgba(0,0,0,.35);
}
.paper .crumbs { font-size: 12px; letter-spacing: .15em; color: var(--ink-3); margin-bottom: 18px; display: flex; gap: 8px; flex-wrap: wrap; }
.paper .crumbs a:hover { color: var(--oxblood); }
.paper .kind-tabs { display: flex; gap: 0; margin: 0 0 26px; border-bottom: 1px solid rgba(43,33,23,.2); }
.paper .kind-tabs a { padding: 8px 18px; font-size: 13px; letter-spacing: .2em; color: var(--ink-3); border-bottom: 2px solid transparent; margin-bottom: -1px; }
.paper .kind-tabs a.on { color: var(--oxblood); border-bottom-color: var(--oxblood); font-weight: 700; }
.paper .kind-tabs a.off { opacity: .4; cursor: default; }
.paper h1 { font-size: clamp(24px, 4vw, 34px); line-height: 1.45; margin: 0 0 8px; letter-spacing: .06em; font-weight: 800; color: var(--wood-900); }
.paper .meta { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px; color: var(--ink-3); letter-spacing: .1em; margin-bottom: 30px; padding-bottom: 14px; border-bottom: 1px double rgba(43,33,23,.25); }
.paper .meta .tags span { margin-right: 6px; }
.prose { font-size: 16.5px; line-height: 2; }
.prose > :first-child { margin-top: 0; }
.prose .lead { font-size: 18px; color: var(--ink-2); }
.prose .lead::first-letter { font-size: 2.6em; float: left; line-height: 1; padding: 6px 8px 0 0; color: var(--oxblood); font-weight: 800; }
.prose p { margin: 0 0 1.2em; }
.prose p.blank { margin: 0; height: .6em; }
.prose h2 { font-size: 21px; margin: 2em 0 .8em; letter-spacing: .1em; font-weight: 700; color: var(--wood-900); padding-left: 14px; border-left: 3px solid var(--gold); }
.prose h3 { font-size: 18px; margin: 1.8em 0 .6em; font-weight: 700; color: var(--wood-800); }
.prose h4 { font-size: 16px; margin: 1.5em 0 .5em; font-weight: 700; color: var(--ink-2); }
.prose ul, .prose ol { padding-left: 1.6em; margin: 0 0 1.2em; }
.prose li { margin-bottom: .35em; }
.prose ul { list-style: none; }
.prose ul > li::before { content: "❧"; color: var(--gold-dim); margin-left: -1.5em; margin-right: .6em; }
.prose blockquote { margin: 1.4em 0; padding: 12px 20px; border-left: 3px solid var(--oxblood); background: rgba(107,43,37,.06); font-style: normal; color: var(--ink-2); }
.prose .callout { display: flex; gap: 12px; margin: 1.4em 0; padding: 14px 18px; background: rgba(201,162,74,.12); border: 1px solid rgba(201,162,74,.4); border-radius: 3px; }
.prose .callout-icon { color: var(--gold-dim); }
.prose .callout p:last-child { margin-bottom: 0; }
.prose details { margin: 1em 0; padding: 8px 14px; border: 1px solid rgba(43,33,23,.2); border-radius: 3px; }
.prose summary { cursor: pointer; font-weight: 700; }
.prose code { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: .9em; background: rgba(43,33,23,.08); padding: 1px 5px; border-radius: 2px; }
.prose pre { overflow-x: auto; padding: 14px; background: rgba(43,33,23,.08); border-radius: 3px; }
.prose pre code { background: none; padding: 0; }
.prose figure { margin: 1.6em 0; text-align: center; }
.prose figure img { max-width: 100%; height: auto; border: 6px solid #fff; box-shadow: 0 6px 14px rgba(0,0,0,.2); }
.prose figcaption { font-size: 13px; color: var(--ink-3); margin-top: 8px; }
.prose .table-wrap { overflow-x: auto; margin: 1.4em 0; }
.prose table { border-collapse: collapse; width: 100%; font-size: 15px; }
.prose th, .prose td { border: 1px solid rgba(43,33,23,.25); padding: 8px 12px; vertical-align: top; text-align: left; }
.prose th { background: rgba(201,162,74,.16); font-weight: 700; }
.prose a { color: var(--oxblood); text-decoration: underline; text-underline-offset: 3px; }
.prose .columns { display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.prose .c-red { color: #a33; } .prose .c-blue { color: #35a; } .prose .c-green { color: #385; } .prose .c-gray { color: #777; } .prose .c-orange { color: #c60; } .prose .c-purple { color: #74a; } .prose .c-brown { color: #853; } .prose .c-pink { color: #b47; } .prose .c-yellow { background: rgba(255,230,120,.5); }
.prose .c-red_background { background: rgba(200,60,60,.12); } .prose .c-blue_background { background: rgba(60,90,200,.12); } .prose .c-yellow_background { background: rgba(255,230,120,.4); } .prose .c-green_background { background: rgba(60,160,90,.12); } .prose .c-gray_background { background: rgba(0,0,0,.06); }

.next-card { /* ライト版末尾の誘導 */
  margin: 40px 0 10px; padding: 22px 24px; border: 1px double var(--gold-dim); border-radius: 4px; text-align: center;
  background: linear-gradient(180deg, rgba(201,162,74,.08), rgba(107,43,37,.06));
}
.next-card .q { font-size: 15px; color: var(--ink-2); margin: 0 0 12px; letter-spacing: .05em; }
.next-card .btn { border-color: var(--oxblood); color: var(--oxblood); background: rgba(255,255,255,.4); }
.next-card .btn:hover { background: rgba(107,43,37,.08); }
.paper .actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 30px; padding-top: 18px; border-top: 1px solid rgba(43,33,23,.2); }
.paper .actions .btn { border-color: rgba(43,33,23,.35); color: var(--ink-2); background: rgba(255,255,255,.35); }
.paper .actions .btn:hover { border-color: var(--oxblood); color: var(--oxblood); }
.paper .turn { display: flex; justify-content: space-between; gap: 12px; margin-top: 22px; font-size: 13px; color: var(--ink-3); }
.paper .turn a:hover { color: var(--oxblood); }
.paper .turn span { max-width: 45%; }

/* ---------- 目録（検索） ---------- */
.catalog {
  max-width: 720px; margin: 30px auto 0; padding: 22px 22px 18px; border-radius: 4px;
  background: linear-gradient(180deg, var(--wood-600), var(--wood-700)); box-shadow: var(--shadow-deep), inset 0 1px 0 rgba(255,255,255,.1);
  border: 1px solid var(--wood-950);
}
.catalog form { display: flex; gap: 10px; }
.catalog input { flex: 1; padding: 12px 14px; border: 0; border-radius: 3px; background: var(--paper); color: var(--ink); font-size: 16px; box-shadow: inset 0 2px 6px rgba(0,0,0,.25); }
.catalog .handle { display: block; width: 56px; height: 8px; margin: 12px auto 0; border-radius: 4px; background: var(--brass); box-shadow: 0 2px 4px rgba(0,0,0,.5); }
.hits { max-width: 720px; margin: 24px auto; display: grid; gap: 10px; }
.hit { display: block; padding: 14px 16px; background: var(--paper); color: var(--ink); border-radius: 3px; border-left: 6px solid var(--oxblood); box-shadow: 0 8px 14px -8px #000; transition: transform .2s; }
.hit:hover { transform: translateX(4px); }
.hit h3 { margin: 0 0 2px; font-size: 16px; }
.hit .m { font-size: 12px; color: var(--ink-3); letter-spacing: .1em; }
.hit .s { font-size: 13.5px; color: var(--ink-2); margin-top: 6px; }
.hit mark { background: rgba(201,162,74,.45); color: inherit; padding: 0 2px; }

/* ---------- 司書室（管理） ---------- */
.office { position: relative; z-index: 1; max-width: 1080px; margin: 0 auto; padding: 20px 20px 80px; }
.office .tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 20px 0; }
.office .tabs button { padding: 8px 14px; border: 1px solid var(--gold-dim); background: transparent; color: var(--paper-3); border-radius: 3px; letter-spacing: .12em; font-size: 13px; }
.office .tabs button.on { background: var(--brass); color: #3a2a0a; font-weight: 700; }
.panel { background: var(--paper); color: var(--ink); border-radius: 4px; padding: 22px; box-shadow: var(--shadow-deep); }
.panel h2 { margin: 0 0 14px; font-size: 18px; letter-spacing: .12em; color: var(--wood-900); border-bottom: 1px solid rgba(43,33,23,.2); padding-bottom: 8px; }
.panel .grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.panel .btn { border-color: var(--wood-500); color: var(--wood-800); background: rgba(255,255,255,.4); }
.panel .btn.brass { color: #3a2a0a; }
.panel table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.panel th, .panel td { border-bottom: 1px solid rgba(43,33,23,.15); padding: 8px 6px; text-align: left; vertical-align: top; }
.panel th { font-size: 12px; letter-spacing: .12em; color: var(--ink-3); font-weight: 500; }
.panel .table-wrap { overflow-x: auto; }
.panel .stat { display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); margin-bottom: 16px; }
.panel .stat div { padding: 12px; background: rgba(43,33,23,.05); border-radius: 3px; }
.panel .stat b { display: block; font-size: 24px; font-family: var(--latin); color: var(--wood-800); }
.panel .stat span { font-size: 12px; color: var(--ink-3); letter-spacing: .12em; }
.reveal { margin: 12px 0; padding: 12px 14px; background: rgba(201,162,74,.15); border: 1px dashed var(--gold-dim); border-radius: 3px; font-size: 14px; }
.reveal code { font-size: 17px; user-select: all; background: #fff; padding: 2px 8px; border-radius: 2px; }
.panel textarea { min-height: 220px; line-height: 1.7; }
.pill { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 11px; letter-spacing: .1em; }
.pill.general { background: rgba(47,74,59,.15); color: var(--forest); }
.pill.premium { background: rgba(107,43,37,.15); color: var(--oxblood); }
.pill.admin { background: rgba(201,162,74,.3); color: #6b5314; }
.pill.off { background: rgba(0,0,0,.08); color: var(--ink-3); }

/* ---------- 印刷（PDFとして保存） ---------- */
@media print {
  body { background: #fff; color: #000; }
  body::before, body::after, .hdr, .cover, .ribbon, .actions, .turn, .kind-tabs, .crumbs, .next-card { display: none !important; }
  .desk { padding: 0; }
  .paper { box-shadow: none; background: #fff; padding: 0; border-radius: 0; }
  .paper::before { display: none; }
  .prose { font-size: 12pt; line-height: 1.8; }
  .prose figure img { border: 0; box-shadow: none; }
  a { text-decoration: none; color: inherit; }
}
