/* common.css — 全体レイアウト・共通パーツ */
:root{
  --ink:#1b1a24;
  --paper:#f6efdf;
  --paper2:#efe4cd;
  --navy:#1d2340;
  --navy2:#2b3358;
  --gold:#e0b552;
  --gold-dim:#a98836;
  --red:#c0413a;
  --green:#4f8f4a;
  --white:#fffdf7;
  --shadow:0 10px 30px rgba(0,0,0,.35);
  --radius:14px;
  --font: "Hiragino Kaku Gothic ProN","Hiragino Sans","Yu Gothic UI","Meiryo",system-ui,sans-serif;
  --fs:16px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{height:100%}
/* スマホはアドレスバーの分だけ 100vh が画面より高くなり、下が見切れる。
   dvh が使えるブラウザではそちらを優先する */
body{margin:0;padding:0;height:100%;height:100dvh}
body{
  font-family:var(--font);
  font-size:var(--fs);
  color:var(--ink);
  background:#0d101f;
  overflow:hidden;
  overscroll-behavior:none;
  -webkit-text-size-adjust:100%;
}
body[data-font="small"]{--fs:14px}
body[data-font="normal"]{--fs:16px}
body[data-font="large"]{--fs:19px}

#app{
  position:relative;
  width:100%;
  height:100%;
  max-width:900px;
  margin:0 auto;
  background:
    radial-gradient(120% 80% at 50% 0%, #2a2f52 0%, #171a2e 60%, #0e1120 100%);
  overflow:hidden;
}

.screen{
  position:absolute; inset:0;
  display:none;
  flex-direction:column;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
.screen.is-active{display:flex}

/* ---------- ボタン ---------- */
.btn{
  appearance:none;
  border:2px solid var(--gold-dim);
  background:linear-gradient(#3a4166,#262c4a);
  color:var(--paper);
  font-family:inherit;
  font-size:1rem;
  font-weight:700;
  letter-spacing:.04em;
  padding:.75em 1.2em;
  border-radius:999px;
  cursor:pointer;
  transition:transform .08s ease, filter .15s ease;
  box-shadow:0 3px 0 rgba(0,0,0,.35);
}
.btn:hover{filter:brightness(1.15)}
.btn:active{transform:translateY(2px);box-shadow:0 1px 0 rgba(0,0,0,.35)}
.btn:disabled{opacity:.4;cursor:not-allowed;filter:grayscale(.6)}
.btn-primary{
  background:linear-gradient(#e6c163,#c39a35);
  color:#2a2110;
  border-color:#8b6d22;
}
.btn-ghost{background:transparent;border-color:#5a628a;color:#b9c0dd;font-weight:600}
.btn-danger{background:linear-gradient(#b4443c,#8c2f29);border-color:#6d221d}
.btn-small{padding:.45em .9em;font-size:.85rem}

/* ---------- タイトル ---------- */
/* 背景の絵が出ないときは #app のグラデーションがそのまま見える */
/* 縦持ちで cover にすると、月も天守も画面の外に出てしまう。
   絵は横幅いっぱいで全体を見せ、下へ夜空の色でとかす。月・桜・天守がぜんぶ入る。 */
#screen-title{background:#0d1020}
/* 絵と同じ高さの層をつくって、その中で下端をフェードさせる。
   画面の高さを基準にすると絵の切れ目とずれて、境目がスパッと出てしまう */
#screen-title::before{
  content:"";
  position:absolute;left:0;top:0;width:100%;
  aspect-ratio:1672 / 941;          /* title_bg.jpg の比率 */
  background:url(../assets/bg/title_bg.jpg?v=20260805) center top / 100% 100% no-repeat;
  -webkit-mask-image:linear-gradient(to bottom,
    #000 0%, #000 46%, rgba(0,0,0,.75) 68%, rgba(0,0,0,.3) 86%, transparent 100%);
  mask-image:linear-gradient(to bottom,
    #000 0%, #000 46%, rgba(0,0,0,.75) 68%, rgba(0,0,0,.3) 86%, transparent 100%);
  pointer-events:none;
}
.title-wrap{
  position:relative;z-index:1;
  margin:auto;
  text-align:center;
  padding:24px;
  width:100%;
  max-width:460px;
}
.title-sub{
  color:var(--gold);
  font-size:1.05rem;
  letter-spacing:.35em;
  margin:0 0 .3em;
  text-indent:.35em;
}
.title-main{
  color:var(--paper);
  font-size:clamp(2rem,9vw,3.1rem);
  line-height:1.25;
  margin:0;
  text-shadow:0 3px 0 #0c0f1c, 0 0 26px rgba(224,181,82,.35);
}
.title-main span{color:var(--gold);display:inline-block}
/* メニューの下に置く、何のファンゲームかの但し書き */
.title-note{
  margin:18px 0 0;
  font-size:.74rem;
  line-height:1.8;
  color:#98a0c6;
  letter-spacing:.05em;
}
.title-note b{color:var(--gold-dim);font-weight:700}
.title-menu{
  display:flex;flex-direction:column;gap:10px;
  margin:2.8em auto 0;      /* タイトルとのあいだを広くとる */
  width:100%;max-width:330px;   /* 画面いっぱいに広げず、左右に余白を残す */
}

/* ---------- パネル（設定など） ---------- */
.panel{
  margin:auto;
  width:100%;
  max-width:520px;
  max-height:100%;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  background:var(--paper);
  border:3px solid var(--gold-dim);
  border-radius:var(--radius);
  padding:22px 20px 26px;
  box-shadow:var(--shadow);
}
.panel-wide{max-width:640px}
.panel h2{
  margin:0 0 .7em;
  font-size:1.35rem;
  color:var(--navy);
  border-bottom:2px solid var(--gold-dim);
  padding-bottom:.35em;
}
.panel h3{margin:1.4em 0 .5em;font-size:1rem;color:var(--red)}
.panel .btn{margin-top:18px;width:100%}
.doc-list{margin:0;padding-left:1.2em;line-height:1.85;font-size:.92rem}
.doc-list li{margin-bottom:.25em}
.doc-lead{font-size:.9rem;line-height:1.7;margin:0 0 1em}
.credit-lead{
  font-size:.92rem;line-height:1.8;margin:0 0 .6em;
  background:#fff8e7;border-left:4px solid var(--red);padding:.8em .9em;
}
.credit-note{font-size:.8rem;line-height:1.7;color:#5b5647;margin-top:1.2em}
.credit-link{
  color:var(--navy);font-weight:700;text-decoration:underline;
  text-underline-offset:.2em;word-break:break-all;
}

/* ---------- 設定行 ---------- */
.setting-row{
  display:flex;align-items:center;gap:10px;
  padding:.6em 0;border-bottom:1px dashed #cdbf9d;
  flex-wrap:wrap;
}
.setting-row label{min-width:6.5em;font-weight:700;font-size:.9rem}
.setting-row input[type=range]{flex:1;min-width:120px;accent-color:var(--red)}
.setting-row select{
  font-family:inherit;font-size:.9rem;padding:.35em .6em;
  border:2px solid var(--gold-dim);border-radius:8px;background:#fff
}
.setting-row input[type=checkbox]{width:22px;height:22px;accent-color:var(--red)}
.setting-val{min-width:3em;text-align:right;font-variant-numeric:tabular-nums;font-size:.9rem}
.setting-note{flex-basis:100%;font-size:.76rem;color:#6b6455}
.setting-row .btn{margin-top:0;width:auto}

/* ---------- 城内マップ ---------- */
.map-lead{
  font-size:.92rem;line-height:1.7;margin:0 0 1em;
  padding:.7em .9em;background:#fff8e7;border-left:4px solid var(--navy);
}
.trial-track{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.trial-track li{
  display:flex;align-items:center;gap:10px;
  padding:.5em .7em;border-radius:10px;background:#fff8e7;border:2px solid #ddcfae;
  font-size:.9rem;
}
.trial-track li.done{background:#e9f3e5;border-color:#8fb98a}
.trial-track li.current{background:#fff2cf;border-color:var(--gold-dim);box-shadow:0 0 0 3px rgba(224,181,82,.25)}
.trial-track li.locked{opacity:.5}
.trial-no{
  flex:0 0 auto;width:1.9em;height:1.9em;border-radius:50%;
  display:grid;place-items:center;background:var(--navy);color:var(--paper);
  font-size:.78rem;font-weight:700;
}
.trial-track li.done .trial-no{background:var(--green)}
.trial-name{flex:1;font-weight:700}
.trial-mark{font-size:1.1rem}

/* ---------- 結果 ---------- */
.result-panel{text-align:center;max-width:440px}
.result-panel h2{border:none;font-size:1.6rem;color:var(--red)}
.result-panel h2.win{color:var(--green)}
.result-score{
  font-size:.95rem;margin:.6em 0;font-variant-numeric:tabular-nums;
  color:var(--navy);
}
.result-hint{
  font-size:.86rem;line-height:1.7;background:#fff8e7;
  border:2px dashed var(--gold-dim);border-radius:10px;padding:.7em .8em;margin-top:.8em;
  text-align:left;
}
.result-hint:empty{display:none}
.result-btns{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.result-btns .btn{margin-top:0;width:100%}

/* ---------- 遊戯帳 ---------- */
.yugicho-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}
.trial-card{
  appearance:none;font-family:inherit;cursor:pointer;
  background:#fff8e7;border:2px solid #ddcfae;border-radius:10px;
  padding:.7em .5em .6em;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:.2em;
  transition:transform .08s ease, box-shadow .15s ease, border-color .15s ease;
}
.trial-card img{width:100%;height:88px;object-fit:contain;display:block}
.trial-card b{font-size:.98rem;color:var(--navy)}
.trial-card .tc-score{font-size:.76rem;color:#7b7259;font-variant-numeric:tabular-nums}
.trial-card .tc-score i{font-style:normal;font-weight:800;color:var(--red);font-size:1.05rem}
.trial-card:hover:not(:disabled){border-color:var(--gold-dim);box-shadow:0 4px 14px rgba(0,0,0,.18)}
.trial-card:active:not(:disabled){transform:translateY(2px)}
.trial-card.locked{opacity:.4;cursor:not-allowed;filter:grayscale(.7)}

/* ---------- ハッピーエンド ---------- */
.happyend{
  margin:auto;text-align:center;padding:20px;width:100%;max-width:520px;
  max-height:100%;overflow-y:auto;
}
.happyend h2{
  color:var(--gold);font-size:1.8rem;margin:0 0 .5em;
  text-shadow:0 3px 0 #0c0f1c;
}
.happyend-photo{
  background:var(--paper);border:6px solid #fff;border-radius:8px;
  box-shadow:var(--shadow);padding:12px 12px 18px;margin-bottom:1em;
  display:flex;justify-content:center;align-items:flex-end;gap:2px;min-height:150px;
}
.happyend-photo img{height:140px;object-fit:contain}
.happyend-line{color:var(--paper);font-size:1.15rem;font-weight:700;margin:.4em 0 1em}
.happyend-stats{
  color:#c7cee9;font-size:.85rem;line-height:1.8;margin-bottom:1.2em;
  background:rgba(255,255,255,.06);border-radius:10px;padding:.8em;
}
.happyend-btns{display:flex;flex-direction:column;gap:10px}

/* ---------- 隅ボタン・モーダル・トースト ---------- */
.corner-btn{
  position:absolute;top:8px;right:8px;z-index:30;
  width:38px;height:38px;border-radius:10px;
  border:2px solid rgba(255,255,255,.35);
  background:rgba(20,24,44,.6);color:#fff;font-size:1.1rem;
  cursor:pointer;line-height:1;
}
.modal{
  position:absolute;inset:0;z-index:60;display:none;
  background:rgba(8,10,20,.78);
  align-items:center;justify-content:center;padding:20px;
}
.modal.is-open{display:flex}
.modal-box{
  background:var(--paper);border:3px solid var(--gold-dim);border-radius:var(--radius);
  padding:20px;width:100%;max-width:320px;text-align:center;
}
.modal-box h3{margin:0 0 .9em;color:var(--navy)}
.modal-box .btn{width:100%;margin-bottom:9px}
.toast{
  position:absolute;left:50%;bottom:22px;transform:translateX(-50%) translateY(20px);
  z-index:80;background:rgba(20,24,44,.94);color:#fff;
  padding:.7em 1.2em;border-radius:999px;font-size:.85rem;
  opacity:0;pointer-events:none;transition:opacity .25s, transform .25s;
  border:1px solid rgba(255,255,255,.2);max-width:90%;text-align:center;
}
.toast.is-show{opacity:1;transform:translateX(-50%) translateY(0)}
