/* theme: research-hub-dark */
/* theme: research-hub-dark
   契約 v1 が定めるもの（モジュールはこれだけに依存してよい）:
   変数 --bg --bg-soft --card --card-hover --border --text --text-dim --text-faint
        --accent --accent-soft --good --warn --bad --radius --maxw
   クラス .btn（リンクチップの下地） .tbl-wrap（表の横スクロール枠） */

:root{
  --bg:#0f1419;
  --bg-soft:#161d26;
  --card:#1b232e;
  --card-hover:#212b38;
  --border:#2a3644;
  --text:#e8edf2;
  --text-dim:#9fb0c0;
  --text-faint:#6b7a89;
  --accent:#4fb0ff;
  --accent-soft:rgba(79,176,255,.12);
  --good:#37c99b;
  --warn:#ffcc5c;
  --bad:#ff6b6b;
  --radius:14px;
  --maxw:1080px;
  /* ページ単位の色分け用。front matter の accent: a〜g で切り替える */
  --accent-a:#4f9bff;
  --accent-b:#37c99b;
  --accent-c:#ff9f43;
  --accent-d:#b48cff;
  --accent-e:#26c6da;
  --accent-f:#ffcc5c;
  --accent-g:#ff6b8b;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:"Hiragino Kaku Gothic ProN","Noto Sans JP",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  line-height:1.7;
  font-size:15.5px;
}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%}

/* 追従ヘッダー */
header.site{
  position:sticky;top:0;z-index:50;
  background:rgba(15,20,25,.9);
  backdrop-filter:blur(8px);
  border-bottom:1px solid var(--border);
}
header.site .bar{display:flex;align-items:center;gap:18px;padding:12px 20px;max-width:var(--maxw);margin:0 auto;flex-wrap:wrap}
header.site .brand{font-weight:700;font-size:15px;color:var(--text);white-space:nowrap}
header.site .brand span{color:var(--accent)}
nav.crumbs{display:flex;gap:14px;flex-wrap:wrap;font-size:13.5px}
nav.crumbs a{color:var(--text-dim);padding:4px 0;border-bottom:2px solid transparent}
nav.crumbs a:hover,nav.crumbs a.active{color:var(--text);border-color:var(--accent);text-decoration:none}

/* ヒーロー */
.hero{padding:56px 20px 40px;max-width:var(--maxw);margin:0 auto}
.hero .tag{display:inline-block;font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);background:var(--accent-soft);padding:4px 10px;border-radius:999px;margin-bottom:16px}
.hero h1{font-size:clamp(28px,4.5vw,44px);margin:0 0 14px;line-height:1.3}
.hero p.lead{color:var(--text-dim);font-size:17px;max-width:760px;margin:0 0 6px}
.hero .updated{color:var(--text-faint);font-size:13px;margin-top:18px}

/* 本文 */
main{padding-bottom:80px;max-width:var(--maxw);margin:0 auto;padding-left:20px;padding-right:20px}
main > h2{font-size:24px;margin:38px 0 6px;padding-top:6px;display:flex;align-items:center;gap:10px}
main > h2 .num{color:var(--text-faint);font-weight:400;font-size:16px}
h3{font-size:18px;margin:28px 0 10px}
h4{font-size:15.5px;margin:18px 0 8px;color:var(--text-dim)}
p{margin:0 0 14px}
blockquote{margin:16px 0;padding:2px 16px;border-left:3px solid var(--border);color:var(--text-dim)}
code{background:var(--bg-soft);border-radius:4px;padding:.15em .35em;font-size:.92em}
pre{background:#0b0f14;border:1px solid var(--border);border-radius:10px;padding:16px;overflow:auto}
pre code{background:transparent;padding:0}
hr{border:none;border-top:1px solid var(--border);margin:40px 0}

/* 表（契約 v1: .tbl-wrap） */
table{width:100%;border-collapse:collapse;margin:14px 0;font-size:14px}
th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
th{color:var(--text-dim);font-weight:600;font-size:12.5px;text-transform:uppercase;letter-spacing:.03em}
tr:hover td{background:rgba(255,255,255,.02)}
.tbl-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);margin:16px 0}
.tbl-wrap table{margin:0}
.tbl-wrap th,.tbl-wrap td{white-space:normal}

/* リンクチップの下地（契約 v1: .btn） */
.btn{
  display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:600;
  padding:6px 11px;border-radius:8px;border:1px solid var(--border);color:var(--text);
}
.btn:hover{text-decoration:none;border-color:var(--accent)}

/* ページ単位のアクセント（front matter の accent） */
body.accent-a main > h2{color:var(--accent-a)}
body.accent-b main > h2{color:var(--accent-b)}
body.accent-c main > h2{color:var(--accent-c)}
body.accent-d main > h2{color:var(--accent-d)}
body.accent-e main > h2{color:var(--accent-e)}
body.accent-f main > h2{color:var(--accent-f)}
body.accent-g main > h2{color:var(--accent-g)}

footer{border-top:1px solid var(--border);padding:30px 20px;color:var(--text-faint);font-size:12.5px;text-align:center}
footer a{color:var(--text-faint)}

@media (max-width:640px){
  nav.crumbs{gap:10px}
  .hero{padding:36px 20px 28px}
}

/* module: place-card */
/* module: place-card（テーマ契約 v1 の .btn と変数のみに依存） */
.poi{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  padding:18px 20px;margin:14px 0;
}
.poi .head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.poi .head h4{margin:0;color:var(--text);font-size:16px}
.poi .price{color:var(--good);font-weight:700;font-size:15px;white-space:nowrap}
.poi .meta{color:var(--text-faint);font-size:12.5px;margin:4px 0 10px}
.poi ul.facts{list-style:none;margin:8px 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px 14px;font-size:13.5px}
.poi ul.facts li{color:var(--text-dim)}
.poi ul.facts li b{color:var(--text);font-weight:600}
.poi .note{font-size:13px;color:var(--text-dim);margin-top:8px;border-top:1px dashed var(--border);padding-top:8px}
.poi .links{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}
.btn.src{background:rgba(255,255,255,.03);color:var(--text-dim)}
@media (max-width:640px){ .poi ul.facts{grid-template-columns:1fr 1fr} }

/* module: map-location */
/* module: map-location（テーマ契約 v1 の .btn と変数のみに依存） */
.btn.map{background:rgba(79,176,255,.1);color:#7cc4ff;border-color:rgba(79,176,255,.3)}
.btn.map:hover{background:rgba(79,176,255,.18)}
.maplinks{margin:10px 0}
.mapembed{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin:16px 0}
.mapembed iframe{display:block;width:100%;border:0}
.mapembed .mapcap{padding:8px 14px;font-size:13px;color:var(--text-dim);border-bottom:1px solid var(--border);background:var(--bg-soft)}
.mapembed .mapfoot{padding:8px 14px;font-size:12px;color:var(--text-faint);border-top:1px solid var(--border);background:var(--bg-soft)}
.mapembed .mapfoot a{color:var(--text-dim)}

/* module: note-badge */
/* module: note-badge（テーマ契約 v1 の変数のみに依存） */
.callout{border-left:3px solid var(--accent);background:var(--bg-soft);padding:14px 18px;border-radius:0 10px 10px 0;margin:18px 0;font-size:14px;color:var(--text-dim)}
.callout.warn{border-color:var(--warn)}
.callout.bad{border-color:var(--bad)}
.callout.good{border-color:var(--good)}
.callout p{margin:0 0 8px}
.callout p:last-child{margin:0}
.callout b{color:var(--text)}
.badge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;font-weight:600;margin-right:6px}
.badge.good{background:rgba(55,201,155,.15);color:var(--good)}
.badge.warn{background:rgba(255,204,92,.15);color:var(--warn)}
.badge.bad{background:rgba(255,107,107,.15);color:var(--bad)}
.badge.info{background:rgba(79,176,255,.15);color:var(--accent)}
.stars{color:var(--warn);letter-spacing:1px}

/* module: hub-cards */
/* module: hub-cards（テーマ契約 v1 の変数のみに依存） */
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:20px 0}
.card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  padding:20px;transition:transform .15s,border-color .15s,background .15s;display:block;color:inherit;
}
a.card:hover{transform:translateY(-2px);border-color:var(--accent);background:var(--card-hover);text-decoration:none}
.card .icon{font-size:26px;margin-bottom:10px;display:block}
.card h3{margin:0 0 6px;font-size:17px;color:var(--text)}
.card p{margin:0;color:var(--text-dim);font-size:13.5px}
.card .chip{display:inline-block;margin-top:10px;font-size:11.5px;color:var(--text-faint);border:1px solid var(--border);padding:2px 8px;border-radius:999px}

