/* まんが秘密基地 — デザインCSS(mock/index.html v2 からの移植 + アプリ用追加) */

:root {
  --bg0: #0a0d13;
  --bg1: #0e1219;
  --line: #232a3a;
  --ink: #ece7db;
  --dim: #8d92a3;
  --faint: #5a5f70;
  --amber: #ffb454;
  --amber-line: rgba(255, 180, 84, .45);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  /* body が描かれるまでの下地。これが無いとブラウザ既定の白が一瞬見えて画面が光る */
  background: var(--bg0);
  /* スクロールバーやフォームの既定色も暗色にし、再描画時のちらつきを防ぐ */
  color-scheme: dark;
}
body {
  font-family: "Zen Kaku Gothic New", "Hiragino Kaku Gothic ProN", "Yu Gothic", sans-serif;
  color: var(--ink);
  background:
    radial-gradient(900px 480px at 12% -8%, rgba(255, 176, 84, .07), transparent 60%),
    radial-gradient(1100px 600px at 105% -20%, rgba(88, 132, 255, .06), transparent 55%),
    linear-gradient(180deg, var(--bg0), var(--bg1) 40%, #0b0e15);
  min-height: 100vh;
  letter-spacing: .01em;
}
main { max-width: 1600px; margin: 0 auto; padding: 0 28px 60px; }

/* ── header ─────────────────────────────── */
header.top {
  max-width: 1600px; margin: 0 auto; padding: 26px 28px 6px;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
}
.logo {
  font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 500;
  font-size: 20px; color: var(--dim); display: flex; align-items: baseline; gap: 2px;
  user-select: none; white-space: nowrap; text-decoration: none;
}
.logo::before {
  content: ""; width: 9px; height: 9px; border-radius: 50%;
  background: var(--amber); align-self: center; margin-right: 9px;
  box-shadow: 0 0 14px 3px rgba(255, 180, 84, .55);
}
.logo b {
  font-weight: 800; font-size: 24px; color: var(--ink); letter-spacing: .03em;
  background: linear-gradient(120deg, #ffe9c4, var(--amber));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
/* 狭い画面ではボタンが収まらず横スクロールが出るので折り返す */
.actions { display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.btn {
  font-family: inherit; font-size: 13px; font-weight: 700; letter-spacing: .04em;
  padding: 9px 16px; border-radius: 99px; cursor: pointer; border: 1px solid var(--line);
  background: transparent; color: var(--dim); transition: .18s; white-space: nowrap;
  text-decoration: none; display: inline-block;
}
.btn:hover { color: var(--ink); border-color: var(--faint); }
/* アイコンだけのボタン。テキストボタンと同じ横長パディングだと間延びし、
   指のタップ目標としても狙いづらい */
.btn.icon {
  padding: 0; min-width: 42px; min-height: 42px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 15px; line-height: 1;
}
.btn.primary {
  background: linear-gradient(120deg, #ffcf8b, var(--amber));
  border-color: transparent; color: #2a1c06;
  box-shadow: 0 4px 18px -6px rgba(255, 180, 84, .5);
}
.btn.primary:hover { filter: brightness(1.06); color: #2a1c06; }
.btn.big { font-size: 15px; padding: 13px 30px; }
/* 無効化されたボタンは「処理中」ではない(追加済み等、完了して押せない状態が大半)。
   通信中を示したいときは aria-busy を付ける。 */
.btn:disabled { opacity: .6; cursor: default; }
.btn[aria-busy="true"], .alink[aria-busy="true"] { cursor: progress; }

/* ── greeting ───────────────────────────── */
.greet { padding: 26px 2px 10px; font-size: 15px; color: var(--dim); }
.greet b { color: var(--amber); font-weight: 700; }
.greet .n { font-size: 19px; font-family: "M PLUS Rounded 1c"; font-weight: 800; margin: 0 1px; }
.greet .sep { margin: 0 10px; color: var(--faint); }

/* ── shelf ──────────────────────────────── */
.shelf-label {
  font-size: 11px; font-weight: 700; letter-spacing: .22em; color: var(--faint);
  text-transform: uppercase; margin: 34px 2px 6px; display: flex; align-items: center; gap: 10px;
}
.shelf-label::after { content: ""; height: 1px; flex: 1; background: linear-gradient(90deg, var(--line), transparent); }
.shelf-label .jp { letter-spacing: .1em; color: var(--dim); }

/* ── series row (棚一区画 = 一作品、幅に応じて横に並ぶ) ─────────── */
.shelf {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(440px, 100%), 1fr));
  column-gap: 32px; align-items: stretch;
}
.srow { padding-top: 18px; display: flex; flex-direction: column; }
.srow-main { display: flex; gap: 20px; align-items: flex-start; padding: 0 6px; margin-bottom: 16px; }
.board {
  height: 11px; margin-top: auto; border-radius: 3px;
  background: linear-gradient(180deg, #2c2318, #191410 70%, #120e0b);
  box-shadow: 0 18px 26px -14px rgba(0, 0, 0, .75), inset 0 1px 0 rgba(255, 232, 200, .08);
}
.scover-wrap { position: relative; flex: 0 0 116px; }
.scover {
  display: block; position: relative; width: 116px; height: 116px;
  border-radius: 12px; overflow: hidden; background: #1a2030;
  box-shadow: 0 10px 22px -8px rgba(0, 0, 0, .65);
  transition: transform .18s ease, box-shadow .18s ease;
}
.scover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.scover-wrap:hover .scover { transform: translateY(-4px); box-shadow: 0 16px 28px -10px rgba(0, 0, 0, .8); }
.srow.unread .scover {
  outline: 1.5px solid var(--amber-line); outline-offset: 2px;
  box-shadow: 0 10px 22px -8px rgba(0, 0, 0, .65), 0 0 26px -4px rgba(255, 180, 84, .28);
}
.srow.read .scover img { filter: brightness(.7) saturate(.75); transition: filter .25s; }
.srow.read:hover .scover img { filter: brightness(.92) saturate(.95); }
.srow.read .scover .spine { filter: brightness(.7) saturate(.75); transition: filter .25s; }
.srow.read:hover .scover .spine { filter: brightness(.92) saturate(.95); }

/* プラットフォームバッジ(出所明示) */
.chip {
  position: absolute; left: 7px; bottom: 7px; z-index: 1;
  font-size: 9.5px; font-weight: 700; letter-spacing: .05em;
  padding: 3px 7px; border-radius: 99px;
  background: rgba(10, 13, 19, .78); backdrop-filter: blur(4px);
}
.chip.p-jump-plus   { color: #ffb1ab; box-shadow: inset 0 0 0 1px rgba(255, 84, 73, .5); }
.chip.p-comic-days  { color: #a8cfff; box-shadow: inset 0 0 0 1px rgba(88, 166, 255, .5); }
.chip.p-tonarinoyj  { color: #b9ecc4; box-shadow: inset 0 0 0 1px rgba(84, 214, 123, .5); }
.chip.p-kuragebunch { color: #d9c6ff; box-shadow: inset 0 0 0 1px rgba(168, 120, 255, .5); }
.chip.p-magapoke    { color: #ffd9a8; box-shadow: inset 0 0 0 1px rgba(255, 170, 60, .5); }
.chip.inline { position: static; margin-left: 8px; vertical-align: 1px; }

.pill {
  position: absolute; top: -7px; right: -7px; z-index: 2; min-width: 24px; height: 24px;
  display: grid; place-items: center; padding: 0 7px;
  font-family: "M PLUS Rounded 1c"; font-size: 12.5px; font-weight: 800; color: #2a1c06;
  background: linear-gradient(120deg, #ffd18c, var(--amber)); border-radius: 99px;
  box-shadow: 0 3px 12px -2px rgba(255, 180, 84, .6);
}

.sbody { flex: 1; min-width: 0; }
.shead { display: flex; align-items: baseline; gap: 6px 12px; margin: 2px 0 12px; flex-wrap: wrap; }
.st { font-size: 15.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ssub { font-size: 11.5px; color: var(--faint); white-space: nowrap; }
.ssub.fresh { color: var(--amber); font-weight: 500; }
.shead .acts { margin-left: auto; display: flex; gap: 14px; align-items: baseline; }
.alink {
  font-size: 11.5px; font-weight: 700; color: var(--faint); cursor: pointer;
  background: none; border: none; font-family: inherit; white-space: nowrap;
  /* テキストだけのボタンは16px高しかなく指では狙えない。
     見た目を変えずにタップ領域だけ広げるため、paddingを足して同量のmarginで打ち消す。 */
  padding: 8px 4px; margin: -8px -4px;
}
.alink:hover { color: var(--ink); }
.alink.amber:hover { color: var(--amber); }
.alink:disabled { opacity: .5; cursor: default; }

/* ── episode minis(右端フェード付き横スクロール列) ── */
.eps {
  display: flex; gap: 12px; overflow-x: auto; padding: 2px 2px 6px; scrollbar-width: thin;
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
}
.ep { flex: 0 0 76px; width: 76px; overflow: hidden; color: inherit; }
.ep-link { display: block; text-decoration: none; color: inherit; }
.eth {
  position: relative; width: 76px; height: 76px; border-radius: 9px; overflow: hidden;
  background: #1a2030; box-shadow: 0 6px 14px -7px rgba(0, 0, 0, .6);
}
.eth img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .2s; }
.ep:hover .eth img { transform: scale(1.06); }
.ep.unread .eth { outline: 1.5px solid var(--amber-line); outline-offset: 1.5px; }
.ep.read .eth img { filter: brightness(.62) saturate(.7); }
.ep.read .eth .spine { filter: brightness(.62) saturate(.7); }
.ep .en {
  font-size: 11px; font-weight: 700; margin: 7px 1px 1px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ep.read .en { color: var(--dim); }
.ep .ed { font-size: 10px; color: var(--faint); white-space: nowrap; }
.ep.unread .ed { color: var(--amber); }
.ed .new {
  display: inline-block; margin-right: 4px; padding: 1px 5px; border-radius: 99px;
  background: var(--amber); color: #2a1c06; font-weight: 800; font-size: 8.5px; letter-spacing: .06em;
}
.ep.tail {
  flex: 0 0 96px; display: flex; flex-direction: column; justify-content: center; gap: 5px;
  border: 1.5px dashed var(--line); border-radius: 9px; padding: 8px 10px;
  font-size: 9.5px; color: var(--faint); line-height: 1.55; height: 76px;
}
.ep.tail b { color: var(--amber); font-size: 10.5px; }
.ep.tail:hover b { text-decoration: underline; }

/* ── 生成背表紙(サムネ欠落時のフォールバック) ── */
.spine {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  padding: 8px; text-align: center;
}
.spine-t {
  font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 800;
  font-size: 13px; line-height: 1.45; color: rgba(255, 250, 240, .92);
  text-shadow: 0 1px 3px rgba(0, 0, 0, .45);
  display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical;
  overflow: hidden; word-break: break-word;
}
.spine.small { padding: 5px; }
.spine.small .spine-t { font-size: 9.5px; -webkit-line-clamp: 3; }

/* ── 空の棚 ── */
.empty {
  margin-top: 30px; padding: 52px 24px; text-align: center;
  border: 1.5px dashed var(--line); border-radius: 16px;
  color: var(--dim); font-size: 13px; line-height: 2.1;
}
.empty .empty-t {
  font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 800;
  font-size: 17px; color: var(--ink); margin-bottom: 4px;
}
.empty .btn { margin-top: 14px; }

/* ── LP ── */
.lp { display: flex; align-items: center; justify-content: center; min-height: calc(100vh - 260px); }
.lp-hero { text-align: center; padding: 60px 0 40px; max-width: 640px; }
.lp-title {
  font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 500;
  font-size: 34px; color: var(--dim); letter-spacing: .02em;
}
.lp-title b {
  font-weight: 800; font-size: 44px; letter-spacing: .03em;
  background: linear-gradient(120deg, #ffe9c4, var(--amber));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.lp-lead { margin: 22px 0 30px; font-size: 14.5px; color: var(--dim); line-height: 2.1; }
.lp-cta { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.lp-note { margin-top: 18px; font-size: 11.5px; color: var(--faint); }

/* ── 共有ページ ── */
.share-note {
  margin-top: 36px; padding: 14px 18px;
  border: 1px solid var(--amber-line); border-radius: 14px;
  display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap;
  font-size: 12.5px; color: var(--dim);
  background: rgba(255, 180, 84, .04);
}

/* ── ページ見出し(/today /policy) ── */
.page-title {
  font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 800;
  font-size: 24px; margin-top: 34px; letter-spacing: .02em;
}
.page-lead { color: var(--dim); font-size: 13px; margin-top: 8px; }

/* ── /today ── */
.today-list { margin-top: 22px; border-top: 1px solid var(--line); }
.trow {
  display: flex; gap: 16px; align-items: center;
  padding: 13px 4px; border-bottom: 1px solid var(--line);
  text-decoration: none; color: inherit; transition: background .15s;
}
.trow:hover { background: rgba(255, 180, 84, .04); }
.tth {
  flex: 0 0 60px; width: 60px; height: 60px; border-radius: 9px; overflow: hidden;
  background: #1a2030; box-shadow: 0 6px 14px -7px rgba(0, 0, 0, .6);
}
.tth img { width: 100%; height: 100%; object-fit: cover; display: block; }
.trow .tbody { flex: 1; min-width: 0; }
.tseries { font-size: 13.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tep { font-size: 12px; color: var(--dim); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ttime { font-size: 11px; color: var(--faint); white-space: nowrap; }

/* ── /policy ── */
.prose { max-width: 760px; }
.prose h2 {
  font-size: 15px; font-weight: 700; margin: 36px 0 10px;
  padding-left: 12px; border-left: 3px solid var(--amber-line);
}
.prose p, .prose li { font-size: 13px; color: var(--dim); line-height: 2.1; }
.prose p { margin: 10px 0; }
.prose ul { margin: 10px 0 10px 22px; }
.prose b { color: var(--ink); }
.prose code {
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  font-size: 12px; color: var(--amber);
  background: rgba(255, 180, 84, .07); border: 1px solid var(--line);
  border-radius: 6px; padding: 3px 8px;
}
.prose .placeholder { color: var(--faint); font-style: italic; }

/* ── dialog(夜×アンバー) ── */
dialog.dlg {
  margin: auto; width: min(560px, calc(100vw - 32px));
  max-height: min(85vh, 780px); overflow-y: auto;
  background: #10151f; color: var(--ink);
  border: 1px solid var(--line); border-radius: 16px;
  padding: 22px 24px 26px;
  box-shadow: 0 30px 80px -20px rgba(0, 0, 0, .85);
}
dialog.dlg::backdrop { background: rgba(4, 6, 10, .66); backdrop-filter: blur(3px); }
.dlg-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.dlg-head h2 { font-family: "M PLUS Rounded 1c", sans-serif; font-weight: 800; font-size: 17px; }
.dlg-close {
  background: none; border: none; color: var(--faint); cursor: pointer;
  font-size: 22px; line-height: 1; padding: 2px 6px;
}
.dlg-close:hover { color: var(--ink); }
.dlg-sec h3 { font-size: 13.5px; font-weight: 700; margin-bottom: 6px; }
.hint { font-size: 11.5px; color: var(--faint); line-height: 1.9; margin-bottom: 8px; }
.dlg-sep {
  display: flex; align-items: center; gap: 12px; margin: 20px 0;
  font-size: 11px; color: var(--faint); letter-spacing: .1em;
}
.dlg-sep::before, .dlg-sep::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.row { display: flex; gap: 8px; margin-top: 8px; align-items: center; }
.row input { flex: 1; min-width: 0; }
/* type="search" を入れ忘れると、その欄だけブラウザ既定の細い見た目になり
   入力欄だと気づかれない(実際に検索欄がそうなっていた)。
   検索欄は既定の装飾(角丸・クリアボタン)も付くので appearance も揃える。 */
.dlg input[type="url"], .dlg input[type="text"], .dlg input[type="search"], .dlg textarea {
  font: inherit; font-size: 14px; color: var(--ink);
  background: #0b0f17; border: 1px solid var(--line); border-radius: 10px;
  padding: 12px 13px; width: 100%; min-height: 46px;
  -webkit-appearance: none; appearance: none;
}
.dlg input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.dlg textarea { resize: vertical; line-height: 1.8; }
.dlg input:focus, .dlg textarea:focus { outline: none; border-color: var(--amber-line); }
.dlg input::placeholder, .dlg textarea::placeholder { color: var(--faint); }
.toggle-row {
  display: flex; align-items: center; gap: 10px; cursor: pointer;
  font-size: 13.5px; font-weight: 700; margin: 14px 0 10px;
}
.toggle-row input { accent-color: var(--amber); width: 18px; height: 18px; cursor: pointer; }
.msg { font-size: 12px; margin-top: 10px; color: var(--dim); line-height: 1.8; }
.msg.ok { color: #8be28f; }
.msg.err { color: #ff9c94; }

/* インポートの候補・進捗・結果 */
.warnings { list-style: none; margin: 8px 0; }
.warnings li { font-size: 11.5px; color: #ffcf8b; padding: 2px 0; }
.cands {
  list-style: none; margin: 10px 0; max-height: 180px; overflow-y: auto;
  border: 1px solid var(--line); border-radius: 10px;
}
.cands li {
  font-size: 12px; color: var(--dim); padding: 7px 10px;
  border-bottom: 1px solid var(--line);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cands li:last-child { border-bottom: none; }
.bar { height: 8px; border-radius: 99px; background: #1a2030; overflow: hidden; margin-top: 14px; }
.bar-fill {
  height: 100%; width: 0%;
  background: linear-gradient(90deg, #ffcf8b, var(--amber));
  transition: width .3s ease;
}
.results {
  list-style: none; margin: 10px 0; max-height: 220px; overflow-y: auto;
  border: 1px solid var(--line); border-radius: 10px;
}
.results li {
  display: flex; align-items: center; gap: 8px;
  font-size: 12px; padding: 7px 10px; border-bottom: 1px solid var(--line);
}
.results li:last-child { border-bottom: none; }
.results .rname { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.results .rmsg { font-size: 10.5px; color: var(--faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 40%; }
.status {
  flex: 0 0 auto; font-size: 10px; font-weight: 700; letter-spacing: .04em;
  padding: 2px 8px; border-radius: 99px;
}
.status.subscribed  { color: #8be28f; box-shadow: inset 0 0 0 1px rgba(90, 220, 120, .45); }
.status.already     { color: var(--dim); box-shadow: inset 0 0 0 1px var(--line); }
.status.not_found   { color: #ffcf8b; box-shadow: inset 0 0 0 1px rgba(255, 180, 84, .4); }
.status.unsupported { color: #ffcf8b; box-shadow: inset 0 0 0 1px rgba(255, 180, 84, .4); }
.status.error       { color: #ff9c94; box-shadow: inset 0 0 0 1px rgba(255, 84, 73, .45); }

/* ── footer ─────────────────────────────── */
footer {
  max-width: 1600px; margin: 40px auto 0; padding: 22px 28px 34px;
  border-top: 1px solid var(--line);
  font-size: 11.5px; color: var(--faint); line-height: 2;
  display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap;
}
footer b { color: var(--dim); }
footer .links a { color: var(--dim); text-decoration: none; margin-left: 18px; }
footer .links a:hover { color: var(--ink); }

/* ── responsive ─────────────────────────── */
@media (max-width: 640px) {
  header.top, main, footer { padding-left: 16px; padding-right: 16px; }
  header.top { padding-top: 18px; gap: 8px; }
  .logo { font-size: 16px; }
  .logo b { font-size: 19px; }
  .logo::before { width: 7px; height: 7px; margin-right: 6px; }
  .btn { padding: 7px 10px; font-size: 11.5px; }
  .actions { gap: 6px; }
  .greet { font-size: 13.5px; }
  .srow-main { gap: 14px; padding: 0 2px; }
  .scover-wrap { flex-basis: 88px; }
  .scover { width: 88px; height: 88px; }
  .shead { flex-wrap: wrap; gap: 6px 10px; margin-bottom: 10px; }
  .st { font-size: 14px; }
  .eps { gap: 10px; }
  .ep { flex-basis: 64px; width: 64px; }
  .eth { width: 64px; height: 64px; }
  .ep .en { font-size: 10px; }
  .spine-t { font-size: 11px; }
  .lp-title { font-size: 26px; }
  .lp-title b { font-size: 34px; }
  dialog.dlg { padding: 18px 16px 22px; }
}

/* ── Discover(未登録作品の陳列) ─────────────────────────── */
/* ボタンが5つあり、狭い画面では一列に収まらないので折り返す */
.sortbar { display: inline-flex; gap: 6px; margin-left: 14px; flex-wrap: wrap; }
.sort {
  font-size: 11px; font-weight: 700; letter-spacing: .08em; text-decoration: none;
  white-space: nowrap;
  /* 指で押せる高さを確保する(4pxだと26px高で狙いづらい) */
  padding: 8px 13px; border-radius: 99px; color: var(--dim);
  border: 1px solid var(--line); transition: .15s;
}
.sort:hover { color: var(--ink); border-color: var(--faint); }
.sort.on { color: #2a1c06; background: linear-gradient(120deg, #ffd18c, var(--amber)); border-color: transparent; }
.dhint { font-size: 12px; color: var(--faint); margin: 2px 2px 14px; }
.dgrid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
  gap: 22px 16px; padding: 4px 2px 10px;
}
.dcard { display: flex; flex-direction: column; }
.dcover {
  position: relative; display: block; aspect-ratio: 1; border-radius: 11px; overflow: hidden;
  background: #1a2030; box-shadow: 0 8px 18px -8px rgba(0, 0, 0, .6);
  outline: 1.5px dashed var(--line); outline-offset: 2px;
  transition: transform .18s ease, outline-color .18s ease;
}
.dcover img { width: 100%; height: 100%; object-fit: cover; display: block; filter: saturate(.85); }
.dcard:hover .dcover { transform: translateY(-4px); outline-color: var(--faint); }
.dtag {
  position: absolute; top: 7px; right: 7px; font-size: 9px; font-weight: 700; letter-spacing: .08em;
  padding: 3px 7px; border-radius: 99px; color: var(--dim);
  background: rgba(10, 13, 19, .8); box-shadow: inset 0 0 0 1px var(--line);
}
.dt {
  font-size: 12.5px; font-weight: 700; margin: 9px 1px 2px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dsub { font-size: 10.5px; color: var(--faint); margin: 0 1px 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dadd {
  font-family: inherit; font-size: 11.5px; font-weight: 700; letter-spacing: .04em;
  padding: 7px 10px; border-radius: 9px; cursor: pointer;
  color: var(--amber); background: rgba(255, 180, 84, .08);
  border: 1px solid rgba(255, 180, 84, .35); transition: .15s;
}
.dadd:hover { background: rgba(255, 180, 84, .16); border-color: var(--amber-line); }
.dadd:disabled { opacity: .6; cursor: default; }

/* ── 検索して追加 ──────────────────────────────────────── */
.sres { list-style: none; margin: 10px 0 0; padding: 0; max-height: 320px; overflow-y: auto; }
.sres li {
  display: flex; align-items: center; gap: 12px;
  padding: 8px 6px; border-bottom: 1px solid var(--line);
}
.sres li:last-child { border-bottom: none; }
.sres-th { flex: 0 0 44px; height: 44px; border-radius: 8px; overflow: hidden; background: #1a2030; }
.sres-th img { width: 44px; height: 44px; object-fit: cover; display: block; }
.sres-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.sres-t { font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sres-sub { font-size: 11px; color: var(--faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sres-add { white-space: nowrap; font-size: 12px; padding: 7px 12px; }

/* ── WCA一括移行ガイド ─────────────────────────────────── */
.guide { margin: 8px 0 10px 2px; padding-left: 20px; font-size: 12.5px; color: var(--dim); line-height: 1.9; }
.guide b { color: var(--ink); }

@media (max-width: 640px) {
  .dgrid { grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: 16px 12px; }
  .sortbar { margin-left: 8px; }
}

/* ── 読み切り棚(横スクロール・新着順) ─────────────────── */
.osrow {
  display: flex; gap: 11px; overflow-x: auto; padding: 4px 2px 14px; scrollbar-width: thin;
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
}
/* min-width:0 が無いと、flexアイテム既定の min-width:auto により
   長いタイトルがカードを押し広げ、省略(ellipsis)も効かなくなる */
.oscard { flex: 0 0 148px; min-width: 0; text-decoration: none; color: inherit; }
.osth {
  position: relative; width: 148px; height: 148px; border-radius: 11px; overflow: hidden;
  background: #1a2030; box-shadow: 0 8px 18px -8px rgba(0, 0, 0, .6);
  transition: transform .18s ease;
}
.osth img { width: 100%; height: 100%; object-fit: cover; display: block; }
.oscard:hover .osth { transform: translateY(-4px); }
/* 賞レース名などタイトルが長いものが多いので2行まで見せ、
   高さを固定してカードの下端(公開日・リンク)を揃える */
.ost {
  font-size: 12.5px; font-weight: 700; line-height: 1.42; margin: 8px 1px 3px;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  overflow: hidden; height: calc(1.42em * 2); word-break: break-word;
}
.osgo { font-size: 10.5px; color: var(--faint); }
.oscard:hover .osgo { color: var(--amber); }
@media (max-width: 640px) {
  .osrow { gap: 9px; }
  .oscard { flex-basis: 116px; }
  .osth { width: 116px; height: 116px; }
  .ost { font-size: 11.5px; }
}

/* 追加プラットフォームのチップ配色 */
.chip.p-comic-gardo     { color: #ffc9e3; box-shadow: inset 0 0 0 1px rgba(255, 110, 180, .5); }
.chip.p-comic-zenon     { color: #c9d9ff; box-shadow: inset 0 0 0 1px rgba(120, 150, 255, .5); }
.chip.p-comic-action    { color: #ffe1a8; box-shadow: inset 0 0 0 1px rgba(255, 200, 80, .5); }
.chip.p-magcomi         { color: #c6f3f0; box-shadow: inset 0 0 0 1px rgba(90, 210, 200, .5); }
.chip.p-comic-trail     { color: #e2ffc9; box-shadow: inset 0 0 0 1px rgba(150, 220, 90, .5); }
.chip.p-comic-earthstar { color: #ffd0c2; box-shadow: inset 0 0 0 1px rgba(255, 140, 100, .5); }

/* ── LP コンパクトヒーロー(カタログ主役化) ─────────────── */
.lp-hero.compact { padding: 26px 2px 6px; text-align: left; min-height: 0; }
.lp-hero.compact .lp-title { font-size: 30px; margin-bottom: 8px; }
.lp-hero.compact .lp-lead { font-size: 13.5px; max-width: 720px; margin: 0; }

/* ── 漏洩警告バナー / 合鍵 / タイムマシン ─────────────── */
.leak-banner {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin: 18px 0 4px; padding: 12px 16px; border-radius: 12px;
  background: rgba(255, 100, 80, .1); border: 1px solid rgba(255, 100, 80, .45);
  font-size: 12.5px; color: var(--ink);
}
.leak-banner > span { color: var(--dim); }
.leak-actions { margin-left: auto; display: flex; gap: 12px; align-items: center; }
.btn.danger {
  color: #ffb1ab; border-color: rgba(255, 84, 73, .5); background: rgba(255, 84, 73, .08);
}
.btn.danger:hover { color: #fff; border-color: rgba(255, 84, 73, .8); background: rgba(255, 84, 73, .16); }
.btn.sm { padding: 6px 12px; font-size: 12px; }
.subtle-links { margin: 34px 2px 0; text-align: center; }
.subtle-links .alink { font-size: 11px; color: var(--faint); }
.subtle-links .alink:hover { color: var(--dim); }
#history-list { max-height: 340px; overflow-y: auto; }
#history-list .btn.sm { margin-left: auto; white-space: nowrap; }
#history-list li { display: flex; align-items: center; gap: 10px; }

/* ── 各話の状態バッジ(表示専用)とトグルボタン(操作) ──── */
.eptag {
  position: absolute; top: 6px; left: 6px; z-index: 2;
  font-size: 9.5px; font-weight: 800; letter-spacing: .05em;
  padding: 3px 8px; border-radius: 99px; pointer-events: none;
  background: var(--amber); color: #2a1c06;
  box-shadow: 0 2px 8px -2px rgba(0, 0, 0, .6);
}
.eptag.read {
  background: rgba(10, 13, 19, .78); color: var(--dim);
  box-shadow: inset 0 0 0 1px var(--line);
}
.eptoggle {
  display: block; width: 100%; margin-top: 7px; min-height: 36px;
  font-family: inherit; font-size: 10px; font-weight: 700; letter-spacing: .04em;
  padding: 6px 4px; border-radius: 9px; cursor: pointer;
  background: rgba(139, 146, 163, .07); color: var(--dim); border: 1px solid var(--line);
  transition: .15s;
}
.eptoggle:hover { color: var(--amber); border-color: var(--amber-line); }
.eptoggle:disabled { opacity: .6; cursor: default; }

/* ── アクセス解析ダッシュボード(/stats) ─────────────────── */
.stats { max-width: 1120px; }
.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; margin: 18px 0 22px; }
.tile {
  background: linear-gradient(180deg, rgba(24, 30, 44, .85), rgba(17, 21, 32, .9));
  border: 1px solid var(--line); border-radius: 14px; padding: 16px 18px;
}
.tile-v { font-family: "M PLUS Rounded 1c"; font-size: 30px; font-weight: 800; color: var(--ink); line-height: 1.1; }
.tile-l { font-size: 11.5px; color: var(--dim); margin: 4px 0 6px; }
.delta { font-size: 11px; color: var(--faint); }
.delta.up { color: #7fc98a; }
.delta.down { color: #d98a8a; }
.delta-note { color: var(--faint); font-weight: 400; }
.panel-s {
  background: linear-gradient(180deg, rgba(24, 30, 44, .6), rgba(17, 21, 32, .7));
  border: 1px solid var(--line); border-radius: 14px; padding: 16px 18px; margin-bottom: 16px;
}
.panel-h { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 12px; }
.panel-h h2 { font-size: 14px; font-weight: 700; }
.legend { font-size: 11px; color: var(--dim); display: inline-flex; align-items: center; }
.legend .dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; margin-right: 5px; }
.stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr)); gap: 16px; }
.trend { width: 100%; height: auto; display: block; }
.trend .grid { stroke: rgba(139, 146, 163, .18); stroke-width: 1; }
.trend .tick { fill: var(--faint); font-size: 10px; }
.trend .hover-col { fill: transparent; }
.trend .hover-col:hover { fill: rgba(255, 255, 255, .04); }
.hlist { display: flex; flex-direction: column; gap: 8px; }
.hrow { display: flex; align-items: center; gap: 10px; font-size: 12px; }
.hlabel { flex: 0 0 38%; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.htrack { flex: 1; height: 10px; background: rgba(139, 146, 163, .12); border-radius: 3px; overflow: hidden; }
.hbar { display: block; height: 100%; background: #c98426; border-radius: 0 4px 4px 0; }
.hval { flex: 0 0 44px; text-align: right; color: var(--dim); font-variant-numeric: tabular-nums; }
.stat-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.stat-table th, .stat-table td { padding: 6px 8px; border-bottom: 1px solid rgba(139, 146, 163, .12); text-align: left; }
.stat-table .num { text-align: right; font-variant-numeric: tabular-nums; }
.stat-table .dim { color: var(--faint); }
.tbl-details { margin-top: 10px; font-size: 12px; color: var(--dim); }
.tbl-details summary { cursor: pointer; }
.dev-split { height: 12px; border-radius: 4px; background: #4a90e2; overflow: hidden; margin: 8px 0 6px; }
.dev-m { display: block; height: 100%; background: #c98426; border-right: 2px solid var(--bg1); }

/* ── トースト / 棚への導線バー / 追加ずみカード ───────────── */
.toast {
  position: fixed; left: 50%; bottom: 22px; transform: translate(-50%, 16px);
  max-width: min(92vw, 560px); padding: 12px 18px; border-radius: 12px;
  background: rgba(20, 25, 38, .96); color: var(--ink); border: 1px solid var(--line);
  font-size: 13px; line-height: 1.6; box-shadow: 0 12px 32px -10px rgba(0, 0, 0, .8);
  opacity: 0; pointer-events: none; transition: opacity .2s ease, transform .2s ease; z-index: 60;
}
.toast.show { opacity: 1; transform: translate(-50%, 0); }
.toast.err { border-color: rgba(255, 100, 80, .5); }
.gobar {
  position: fixed; left: 50%; bottom: 20px; transform: translate(-50%, 20px);
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap; justify-content: center;
  padding: 10px 12px 10px 18px; border-radius: 99px; z-index: 55;
  background: rgba(20, 25, 38, .96); border: 1px solid var(--amber-line);
  box-shadow: 0 12px 32px -10px rgba(0, 0, 0, .8);
  opacity: 0; transition: opacity .22s ease, transform .22s ease; max-width: 94vw;
}
.gobar.show { opacity: 1; transform: translate(-50%, 0); }
.gobar-t { font-size: 12.5px; color: var(--ink); }
.dadd.done { color: var(--faint); border-color: var(--line); background: transparent; cursor: default; }
.dcard.added .dcover { outline-style: solid; outline-color: var(--amber-line); }
.dcard.added .dcover img { filter: saturate(.6) brightness(.75); }

/* ── 合鍵オンボーディング(初回だけ出るバナー) ─────────────── */
.key-intro {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin: 18px 0 4px; padding: 12px 16px; border-radius: 12px;
  background: rgba(255, 180, 84, .07); border: 1px solid var(--amber-line);
  font-size: 12.5px; color: var(--ink);
}
.key-intro > span { color: var(--dim); }
.btn.primary.sm { padding: 6px 14px; font-size: 12px; }

/* ── 棚の並び替え / ツールバー ───────────────────────────── */
.shelf-toolbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 8px 2px 0; }
.tool-label { font-size: 11px; font-weight: 700; letter-spacing: .12em; color: var(--faint); }
.shelf-label .count {
  font-size: 10.5px; font-weight: 700; letter-spacing: .06em; color: var(--faint);
  border: 1px solid var(--line); border-radius: 99px; padding: 2px 8px; margin-left: 8px;
}
.sort:disabled { opacity: .5; cursor: default; }
details.arch > summary { cursor: pointer; list-style: none; }
details.arch > summary::-webkit-details-marker { display: none; }
details.arch > summary::before {
  content: "▸"; margin-right: 8px; color: var(--faint); transition: transform .15s;
  display: inline-block;
}
details.arch[open] > summary::before { transform: rotate(90deg); }
/* 並べ替えの↑↓ボタン。指で確実に押せる大きさを確保する。
   既定では畳んでおき、「並びを編集」がオンのときだけ開く
   (幅を0にして畳むので、切り替えが滑らかに見える) */
.movebtns {
  flex: 0 0 auto; align-self: center;
  display: flex; flex-direction: column; gap: 5px;
  width: 0; margin-right: 0; opacity: 0; overflow: hidden; pointer-events: none;
  transition: width .18s ease, opacity .18s ease, margin-right .18s ease;
}
body.reorder-on .movebtns {
  width: 40px; margin-right: -4px; opacity: 1; pointer-events: auto;
}
/* 「並びを編集」トグルと説明を横に並べる */
.reorder-bar {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 2px 2px 10px;
}
.reorder-bar .pswitch { margin-left: 0; }
.reorder-bar .dhint { margin: 0; }
.movebtn {
  min-width: 40px; min-height: 40px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 15px; line-height: 1; color: var(--faint);
  background: rgba(139, 146, 163, .08);
  border: 1px solid var(--line); border-radius: 9px; cursor: pointer;
  transition: color .15s, border-color .15s, background .15s;
  -webkit-tap-highlight-color: transparent;
}
.movebtn:hover:not(:disabled) {
  color: var(--ink); border-color: var(--faint); background: rgba(139, 146, 163, .18);
}
.movebtn:active:not(:disabled) { background: rgba(255, 176, 84, .16); border-color: rgba(255, 176, 84, .5); }
.movebtn:disabled { opacity: .25; cursor: default; }
/* 入れ替え中の行を前面に出す(影が隣の行に潜り込まないように) */
.srow.moving { position: relative; z-index: 5; }
.more-row { text-align: center; margin: 18px 0 0; }
.share-intro { margin: 2px 2px 10px; font-size: 13px; color: var(--dim); line-height: 1.9; }
.share-intro b { color: var(--ink); }
.osdate { color: var(--faint); margin-right: 6px; }

/* ── お問い合わせフォーム ─────────────────────────────── */
.cform { margin-top: 18px; max-width: 720px; }
.flabel { display: block; font-size: 12.5px; font-weight: 700; color: var(--ink); margin: 18px 0 6px; }
.req { font-size: 10px; color: var(--amber); margin-left: 8px; }
.finput {
  width: 100%; font-family: inherit; font-size: 13.5px; color: var(--ink);
  background: rgba(10, 13, 19, .6); border: 1px solid var(--line); border-radius: 10px;
  padding: 10px 12px; line-height: 1.7;
}
.finput:focus { outline: none; border-color: var(--amber-line); }
.finput:disabled { opacity: .6; }
textarea.finput { resize: vertical; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.cform .row { margin-top: 20px; }

/* ── /stats の問い合わせ受信箱 ───────────────────────────── */
.inbox { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.inbox-item { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
.inbox-item.new { border-color: var(--amber-line); background: rgba(255, 180, 84, .05); }
.inbox-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 11px; color: var(--faint); }
.inbox-ref { font-family: "M PLUS Rounded 1c"; font-weight: 800; color: var(--dim); }
.inbox-reply { color: var(--amber); }
.inbox-body { margin-top: 8px; font-size: 12.5px; line-height: 1.8; white-space: pre-wrap; color: var(--ink); }

.chip.p-sunday-webry { color: #bcd7ff; box-shadow: inset 0 0 0 1px rgba(96, 140, 255, .5); }
.chip.p-comicborder  { color: #ffc7b0; box-shadow: inset 0 0 0 1px rgba(255, 130, 80, .5); }
.chip.p-ganganonline { color: #c9ffd8; box-shadow: inset 0 0 0 1px rgba(80, 220, 130, .5); }

.chip.p-heros-web     { color: #ffd0e6; box-shadow: inset 0 0 0 1px rgba(255, 110, 170, .5); }
.chip.p-championcross { color: #ffe9b0; box-shadow: inset 0 0 0 1px rgba(230, 180, 60, .5); }

/* 有料話: サムネ上のバッジ(既読/未読バッジとは排他。有料話は既読管理の対象外) */
.eptag.paid {
  background: rgba(10, 13, 19, .85); color: #d3bcff;
  box-shadow: inset 0 0 0 1px rgba(150, 120, 255, .55);
}
.ep.paid .eth img { opacity: .68; transition: opacity .15s; }
.ep.paid:hover .eth img { opacity: .9; }
.ep.paid .en { color: var(--dim); }

/* 「有料話も表示」トグルスイッチ。ラベルは固定で、入/切はスイッチの見た目で示す */
.pswitch {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: inherit; font-size: 11px; font-weight: 700; letter-spacing: .08em;
  padding: 7px 13px 7px 5px; margin-left: 16px; border-radius: 99px; cursor: pointer;
  color: var(--dim); background: none; border: 1px solid var(--line);
  transition: color .15s, border-color .15s;
}
.pswitch-track {
  position: relative; flex: none; width: 30px; height: 17px; border-radius: 99px;
  background: rgba(139, 146, 163, .18);
  box-shadow: inset 0 0 0 1px var(--line);
  transition: background .18s, box-shadow .18s;
}
.pswitch-knob {
  position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%;
  background: var(--faint);
  transition: transform .18s, background .18s;
}
.pswitch-label { white-space: nowrap; }
.pswitch:hover { color: var(--ink); border-color: var(--faint); }
.pswitch:hover .pswitch-knob { background: var(--dim); }
.pswitch.on { color: #d3bcff; border-color: rgba(150, 120, 255, .5); }
.pswitch.on .pswitch-track {
  background: rgba(150, 120, 255, .5);
  box-shadow: inset 0 0 0 1px rgba(150, 120, 255, .65);
}
.pswitch.on .pswitch-knob { transform: translateX(13px); background: #efe6ff; }
.pswitch:focus-visible { outline: 2px solid rgba(150, 120, 255, .7); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  .pswitch, .pswitch-track, .pswitch-knob { transition: none; }
}

/* 「無料話のみ」表示。有料話はHTMLには在るがCSSで隠す(切り替えでの再読み込みを避けるため) */
body.hide-paid .ep.paid { display: none; }

/* 合鍵の保存まわり: QR + 端末別の導線 */
.keysave { display: flex; gap: 16px; align-items: flex-start; margin-top: 12px; flex-wrap: wrap; }
.keyqr { margin: 0; flex: none; width: 148px; }
.keyqr #key-qr {
  width: 148px; height: 148px; background: #fff; border-radius: 10px; padding: 8px;
  box-shadow: 0 6px 20px -8px rgba(0, 0, 0, .7);
}
.keyqr #key-qr svg { display: block; width: 100%; height: 100%; }
.keyqr figcaption {
  margin-top: 7px; font-size: 10.5px; line-height: 1.5; color: var(--faint);
}
.keyways { flex: 1 1 260px; min-width: 240px; display: flex; flex-direction: column; gap: 9px; }
.keyways .hint { margin: 0; }
/* ドラッグしてブックマークバーに落とすためのリンク。掴めることが見て分かる形にする */
.keylink {
  display: inline-flex; align-items: center; align-self: flex-start; gap: 6px;
  max-width: 100%; padding: 7px 14px; border-radius: 9px;
  font-size: 12px; font-weight: 700; text-decoration: none; cursor: grab;
  color: var(--ink); background: rgba(255, 176, 84, .1);
  border: 1px dashed rgba(255, 176, 84, .5);
}
.keylink:hover { background: rgba(255, 176, 84, .17); border-style: solid; }
.keylink:active { cursor: grabbing; }
@media (max-width: 520px) {
  .keysave { gap: 12px; }
  .keyqr, .keyqr #key-qr { width: 124px; }
  .keyqr #key-qr { height: 124px; }
}

.chip.p-takecomic { color: #bff0d8; box-shadow: inset 0 0 0 1px rgba(70, 200, 140, .5); }

.chip.p-comic-ogyaaa { color: #ffc9c9; box-shadow: inset 0 0 0 1px rgba(255, 90, 90, .5); }

.chip.p-ichicomi         { color: #d8c9ff; box-shadow: inset 0 0 0 1px rgba(160, 130, 255, .5); }
.chip.p-feelweb          { color: #ffd0dd; box-shadow: inset 0 0 0 1px rgba(255, 120, 160, .5); }
.chip.p-comic-y-ours     { color: #c9e8ff; box-shadow: inset 0 0 0 1px rgba(90, 170, 255, .5); }
.chip.p-mangatime-square { color: #ffe6b8; box-shadow: inset 0 0 0 1px rgba(240, 190, 90, .5); }

.chip.p-yanmaga      { color: #ffdca8; box-shadow: inset 0 0 0 1px rgba(255, 170, 60, .5); }
.chip.p-comic-walker { color: #b8e6d0; box-shadow: inset 0 0 0 1px rgba(60, 190, 140, .5); }

/* 作者名(棚・Discover)。作品名より控えめに、でも押せると分かる見た目にする */
.sauthor, .dauthor {
  font-size: 11.5px; color: var(--faint); line-height: 1.6;
  display: flex; flex-wrap: wrap; align-items: center; gap: 0 2px;
}
.sauthor { margin: 0 0 4px; }
.dauthor { margin: 3px 0 0; font-size: 11px; }
.alink-author {
  color: var(--dim); text-decoration: none; font-weight: 700;
  border-bottom: 1px dotted var(--line);
  padding: 3px 1px; margin: -3px 0;
}
.alink-author:hover { color: var(--amber); border-bottom-color: var(--amber); }
.asep { color: var(--line); margin: 0 3px; }

/* 作者ページ */
.author-head { margin: 4px 2px 20px; }
.author-kicker {
  font-size: 10px; font-weight: 800; letter-spacing: .22em; color: var(--faint); margin: 0 0 6px;
}
.author-name { font-size: 26px; font-weight: 800; margin: 0 0 6px; letter-spacing: .02em; }
.author-sub { font-size: 12.5px; color: var(--dim); margin: 0 0 14px; }
@media (max-width: 640px) {
  .author-name { font-size: 21px; }
}

/* 作者ページ。作品数が少ないとき、カードが左端に寄って右が大きく空くのを避けるため
   列幅を固定して中央に寄せる(Discoverは常に多数並ぶので従来どおり 1fr のまま) */
/* auto-fill は空の列も作るため、作品が少ないと左に詰まって右が大きく空く。
   auto-fit なら余った列が潰れ、justify-content: center が実際に効く */
.author-page .dgrid {
  grid-template-columns: repeat(auto-fit, 152px);
  justify-content: center;
}
.author-page .author-head { text-align: center; margin: 10px auto 26px; max-width: 720px; }
.author-page .shelf-label { justify-content: center; }
.author-page .dhint { text-align: center; }

/* 単行本(アフィリエイト)の並び */
.bookrow {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
  gap: 10px; padding: 6px 2px 10px; max-width: 1000px; margin: 0 auto;
}
.bookcard {
  display: flex; flex-direction: column; gap: 4px;
  padding: 13px 15px; border-radius: 11px; text-decoration: none;
  background: rgba(255, 176, 84, .06); border: 1px solid rgba(255, 176, 84, .22);
  transition: background .15s, border-color .15s, transform .15s;
}
.bookcard:hover {
  background: rgba(255, 176, 84, .13); border-color: rgba(255, 176, 84, .5);
  transform: translateY(-2px);
}
.bkt { font-size: 13px; font-weight: 700; color: var(--ink); line-height: 1.5; }
.bkgo { font-size: 11px; font-weight: 700; color: var(--amber); letter-spacing: .04em; }
@media (max-width: 640px) {
  .author-page .dgrid { grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); }
  .bookrow { grid-template-columns: 1fr; }
}

/* 更新タイミング(毎週◯曜など)。作品名の並びに小さく添える */
.sched {
  font-size: 10.5px; font-weight: 700; letter-spacing: .04em; white-space: nowrap;
  color: #bcd7ff; background: rgba(96, 140, 255, .12);
  border: 1px solid rgba(96, 140, 255, .3); border-radius: 99px; padding: 3px 9px;
}

.chip.p-youngchampion { color: #ffd6c2; box-shadow: inset 0 0 0 1px rgba(255, 140, 90, .5); }

.chip.p-younganimal { color: #ffe0a8; box-shadow: inset 0 0 0 1px rgba(255, 190, 70, .5); }

.chip.p-comic-ryu { color: #d9f2c9; box-shadow: inset 0 0 0 1px rgba(140, 210, 90, .5); }

.chip.p-yawaspi { color: #c9f0f0; box-shadow: inset 0 0 0 1px rgba(90, 200, 200, .5); }

.chip.p-comic-boost { color: #ffc9d6; box-shadow: inset 0 0 0 1px rgba(255, 110, 150, .5); }

.chip.p-corona-ex { color: #ffd7a8; box-shadow: inset 0 0 0 1px rgba(255, 160, 60, .5); }

.chip.p-ciao { color: #ffc2e6; box-shadow: inset 0 0 0 1px rgba(255, 120, 200, .5); }

.chip.p-bigcomics { color: #b8dcff; box-shadow: inset 0 0 0 1px rgba(90, 160, 255, .5); }
.chip.p-comic-growl { color: #ffd0b0; box-shadow: inset 0 0 0 1px rgba(255, 140, 60, .5); }
.chip.p-comicride { color: #c8f0d0; box-shadow: inset 0 0 0 1px rgba(80, 210, 130, .5); }

.chip.p-alphapolis { color: #b0e8e0; box-shadow: inset 0 0 0 1px rgba(60, 200, 190, .5); }

.chip.p-g-comi { color: #d0e8b0; box-shadow: inset 0 0 0 1px rgba(150, 210, 80, .5); }
.chip.p-kimicomi { color: #ffd9e8; box-shadow: inset 0 0 0 1px rgba(255, 140, 190, .5); }
.chip.p-comic-ruelle { color: #e0c8ff; box-shadow: inset 0 0 0 1px rgba(180, 130, 255, .5); }
.chip.p-magkan { color: #b0e0ff; box-shadow: inset 0 0 0 1px rgba(70, 180, 255, .5); }
.chip.p-mangaspa { color: #ffe8b0; box-shadow: inset 0 0 0 1px rgba(255, 200, 70, .5); }
.chip.p-manga-zegra { color: #c0ffe8; box-shadow: inset 0 0 0 1px rgba(60, 220, 180, .5); }

.chip.p-gaugau { color: #ffd0d8; box-shadow: inset 0 0 0 1px rgba(255, 110, 130, .5); }
.chip.p-souffle { color: #ffe6c0; box-shadow: inset 0 0 0 1px rgba(255, 180, 90, .5); }
.chip.p-mangabox { color: #c8d8ff; box-shadow: inset 0 0 0 1px rgba(110, 150, 255, .5); }
