/* ============================================================
   THE ROOMS — 名家の書斎の色(暗い胡桃材・金・藍)
   ============================================================ */

:root {
  --bg:#15100c;
  --surface:#221912;
  --surface2:#2d2117;
  --border:#4a3826;
  --border-light:#6a5235;
  --gold:#d4af5a;
  --gold2:#f0d78a;
  --navy:#1f2b4a;
  --text:#efe3c8;
  --text-muted:#b8a68a;
  --text-dim:#8a7a62;
  --rose:#c9566e;
  --red:#e0524f;
  --green:#6fae7a;
  --font-ja:'Noto Serif JP', 'Hiragino Mincho ProN', 'Yu Mincho', serif;
  --font-en:'Cormorant Garamond', 'Noto Serif JP', serif;
  --font-mono:'DM Mono', 'SFMono-Regular', Consolas, monospace;
  --gutter:12px;
  --n:5;
  color-scheme:dark;
}

*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
html, body { height:100%; }
body {
  font-family:var(--font-ja);
  background:var(--bg) url(../assets/study.png) center / cover no-repeat fixed;
  color:var(--text);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
  overflow:hidden;
  touch-action:manipulation;
  user-select:none; -webkit-user-select:none;
}
/* 背景の書斎を暗く沈める */
body::before {
  content:''; position:fixed; inset:0; z-index:0;
  background:linear-gradient(180deg, rgba(21,16,12,0.86) 0%, rgba(21,16,12,0.72) 45%, rgba(21,16,12,0.9) 100%);
}
#fx { position:fixed; inset:0; width:100%; height:100%; pointer-events:none; z-index:50; }

/* ---------- 画面の骨格 ---------- */
.app {
  position:relative; z-index:1;
  display:flex; flex-direction:column; height:100%; max-width:560px; margin:0 auto;
  padding:calc(env(safe-area-inset-top, 0px) + 10px) var(--gutter) calc(env(safe-area-inset-bottom, 0px) + 10px);
}
.hud { display:flex; justify-content:space-between; align-items:flex-start; padding-bottom:8px; border-bottom:1px solid var(--border); }
.hud .label { font-family:var(--font-mono); font-size:11px; letter-spacing:3px; color:var(--gold); }
.hud .sub { font-family:var(--font-mono); font-size:10px; letter-spacing:1px; color:var(--text-dim); }
.hud-center { text-align:center; }
.hud-right { text-align:right; }
.score { font-family:var(--font-en); font-variant-numeric:lining-nums; font-size:28px; font-weight:600; letter-spacing:1px; color:var(--text); line-height:1.1; }
.lives { font-size:14px; letter-spacing:2px; }
.heart { color:var(--rose); text-shadow:0 0 6px rgba(201,86,110,0.5); }
.heart.off { color:var(--border); text-shadow:none; }
.chain { font-family:var(--font-mono); font-size:14px; color:var(--text-muted); }
.chain.hot { color:var(--gold2); text-shadow:0 0 8px rgba(240,215,138,0.6); }
.time.late { color:var(--rose); }

/* ---------- Board ---------- */
.board-wrap { flex:1; display:flex; align-items:center; justify-content:center; min-height:0; padding:10px 0; }
.board {
  display:grid; grid-template-columns:repeat(var(--n), 1fr);
  width:min(100%, 50vh, 520px); aspect-ratio:1;
  background:#0d0a07; padding:4px; border:1px solid var(--border-light);
  box-shadow:0 0 0 4px rgba(13,10,7,0.8), 0 0 0 5px var(--border), 0 18px 40px rgba(0,0,0,0.6), inset 0 0 30px rgba(0,0,0,0.6);
}
.cell {
  position:relative; appearance:none; border:1px solid rgba(0,0,0,0.45); cursor:pointer;
  display:flex; align-items:center; justify-content:center; padding:0; min-width:0;
  transition:filter 0.12s;
}
.cell:active { filter:brightness(1.25); }
/* 部屋の色。同じ系統で明度を揃える */
.room-0 { background:#3a2f5c; } .room-1 { background:#6b3a3a; } .room-2 { background:#2f5a4a; } .room-3 { background:#7a5a23; } .room-4 { background:#2f4a6b; }
.room-5 { background:#6b4a7a; } .room-6 { background:#4a5a2f; } .room-7 { background:#7a3f5a; } .room-8 { background:#3f6b6b; } .room-9 { background:#6b5a3f; }
/* 部屋の境界 */
.cell.bt { border-top:3px solid var(--gold); } .cell.bb { border-bottom:3px solid var(--gold); }
.cell.bl { border-left:3px solid var(--gold); } .cell.br { border-right:3px solid var(--gold); }
.cell .x { font-family:var(--font-mono); font-size:calc(min(100vw, 50vh, 520px) / var(--n) * 0.42); color:rgba(239,227,200,0.0); line-height:1; transition:color 0.12s; }
.cell.mark .x { color:rgba(239,227,200,0.75); }
.cell .piece {
  position:absolute; inset:7%; display:none;
  background:url(../assets/piece96.png) 0 0 / 500% 100% no-repeat;
  image-rendering:pixelated; image-rendering:crisp-edges;
  filter:drop-shadow(0 2px 2px rgba(0,0,0,0.6));
}
.cell.piece .piece { display:block; }
.cell.piece .x { display:none; }
.cell.piece { box-shadow:inset 0 0 0 2px rgba(240,215,138,0.35), inset 0 0 14px rgba(240,215,138,0.25); }
.cell.hint { animation:hint 0.7s ease-in-out infinite alternate; }
@keyframes hint { 0%{box-shadow:inset 0 0 0 2px var(--gold2)} 100%{box-shadow:inset 0 0 0 4px var(--gold2), 0 0 16px var(--gold2)} }
.cell.wrong { animation:wrong 0.4s; }
@keyframes wrong { 0%,100%{transform:translateX(0); background-color:var(--red)} 25%{transform:translateX(-5px)} 50%{transform:translateX(5px)} 75%{transform:translateX(-3px)} }
.cell.pop .piece { animation:pop 0.32s cubic-bezier(.2,1.6,.4,1); }
@keyframes pop { 0%{transform:scale(0.4)} 60%{transform:scale(1.15)} 100%{transform:scale(1)} }
body.clear .cell.piece { animation:glow 0.8s ease-in-out infinite alternate; }
@keyframes glow { to { box-shadow:inset 0 0 0 3px var(--gold2), 0 0 18px var(--gold2); } }

/* ---------- ステロペ ---------- */
.companion { display:flex; align-items:flex-end; gap:10px; height:200px; margin-top:2px; }
.portrait-wrap { flex:none; width:166px; height:196px; overflow:hidden; }
#portrait { width:166px; height:196px; display:block; filter:drop-shadow(0 6px 10px rgba(0,0,0,0.6)); }
.bubble {
  position:relative; flex:1; margin-bottom:60px; padding:8px 12px; font-size:13px; line-height:1.5;
  color:var(--text); background:rgba(34,25,18,0.92); border:1px solid var(--gold); border-radius:4px;
  opacity:0; transform:translateY(4px); transition:opacity 0.25s, transform 0.25s;
}
.bubble.show { opacity:1; transform:translateY(0); }
.bubble::before { content:''; position:absolute; left:-7px; bottom:16px; border:6px solid transparent; border-right-color:var(--gold); border-left:0; }
.bubble[hidden] { display:block; }

/* ---------- ボタン ---------- */
.controls { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-top:8px; }
.ctl {
  appearance:none; background:rgba(34,25,18,0.9); border:1px solid var(--border-light);
  color:var(--text-muted); padding:9px 6px; cursor:pointer; min-height:52px;
  display:flex; flex-direction:column; align-items:center; gap:2px; transition:all 0.15s;
}
.ctl:active { transform:translateY(1px); }
.ctl:disabled { opacity:0.4; cursor:not-allowed; }
.ctl-label { font-family:var(--font-mono); font-size:12px; letter-spacing:2px; color:var(--gold); }
.ctl-sub { font-family:var(--font-mono); font-size:9px; letter-spacing:1px; color:var(--text-dim); }

/* ---------- Overlay / Card ---------- */
.overlay { position:fixed; inset:0; z-index:60; display:flex; align-items:center; justify-content:center; padding:16px; background:rgba(10,7,5,0.72); backdrop-filter:blur(2px); }
.overlay[hidden] { display:none; }
.card {
  width:100%; max-width:420px; max-height:88vh; overflow:auto; padding:22px 20px;
  background:linear-gradient(180deg, #2a1f16, #1c1510); border:1px solid var(--gold);
  box-shadow:0 0 0 4px rgba(13,10,7,0.9), 0 0 0 5px var(--border), 0 24px 60px rgba(0,0,0,0.7);
}
.card-title { font-family:var(--font-en); font-variant-numeric:lining-nums; font-size:26px; font-weight:600; letter-spacing:4px; color:var(--gold2); text-align:center; margin-bottom:10px; }
.card-sub { font-size:12px; color:var(--text-muted); text-align:center; margin-bottom:12px; }
.logo { text-align:center; margin:6px 0 14px; }
.logo-main { display:block; font-family:var(--font-en); font-size:44px; font-weight:600; letter-spacing:8px; color:var(--gold2); text-shadow:0 0 18px rgba(240,215,138,0.35); line-height:1.1; }
.logo-sub { display:block; font-size:12px; letter-spacing:4px; color:var(--text-muted); margin-top:6px; }
.title-stats { display:flex; justify-content:center; gap:16px; font-family:var(--font-mono); font-size:11px; letter-spacing:1px; color:var(--text-dim); margin-bottom:16px; }
.stars { text-align:center; font-size:28px; letter-spacing:6px; color:var(--gold2); margin:4px 0 10px; }
.rows { margin:8px 0 14px; }
.row { display:flex; justify-content:space-between; align-items:baseline; gap:10px; padding:6px 0; border-bottom:1px solid var(--border); font-size:13px; font-family:var(--font-mono); }
.row span:first-child { color:var(--text-muted); font-family:var(--font-ja); }
.row small { color:var(--text-dim); font-size:10px; }
.row b { color:var(--gold2); font-weight:500; }
.row .new { font-style:normal; color:var(--rose); font-size:10px; letter-spacing:2px; }
.rows.rec { max-height:38vh; overflow:auto; }
.card-buttons { display:flex; gap:8px; justify-content:center; flex-wrap:wrap; }
.card-buttons.col { flex-direction:column; }
.btn {
  appearance:none; flex:1; min-width:120px; padding:12px 14px; cursor:pointer;
  background:rgba(34,25,18,0.9); border:1px solid var(--border-light); color:var(--text);
  font-family:var(--font-mono); font-size:12px; letter-spacing:2px; text-align:center;
}
.btn small { display:block; font-size:9px; letter-spacing:1px; color:var(--text-dim); margin-top:2px; }
.btn.primary { background:linear-gradient(180deg, var(--gold2), var(--gold)); border-color:var(--gold2); color:#1c1510; font-weight:500; box-shadow:0 0 16px rgba(212,175,90,0.35); }
.btn.danger { border-color:var(--rose); color:var(--rose); }
.btn.dim { color:var(--text-dim); border-color:var(--border); }
.btn:active { transform:translateY(1px); }
.sel-grid { display:grid; grid-template-columns:repeat(5, 1fr); gap:6px; margin:10px 0 14px; max-height:46vh; overflow:auto; }
.sel { appearance:none; background:rgba(34,25,18,0.9); border:1px solid var(--border-light); color:var(--text); padding:6px 2px; cursor:pointer; display:flex; flex-direction:column; align-items:center; }
.sel b { font-family:var(--font-en); font-variant-numeric:lining-nums; font-size:18px; font-weight:600; color:var(--gold2); }
.sel small { font-family:var(--font-mono); font-size:9px; color:var(--text-dim); }
.sel i { font-style:normal; font-size:9px; color:var(--gold); min-height:12px; }
.sel.cur { border-color:var(--gold); }
.how p { font-size:12.5px; line-height:1.7; color:var(--text-muted); margin-bottom:8px; }
.how b { color:var(--text); font-weight:500; }

/* ---------- Toast ---------- */
.toast {
  position:fixed; left:50%; top:18%; transform:translateX(-50%); z-index:70;
  padding:8px 16px; background:rgba(34,25,18,0.95); border:1px solid var(--gold); color:var(--text);
  font-family:var(--font-mono); font-size:12px; letter-spacing:1px; pointer-events:none;
  opacity:0; transition:opacity 0.2s;
}
.toast.show { opacity:1; }
.toast[hidden] { display:none; }

@media (max-height:700px) { .companion { height:150px; } .portrait-wrap, #portrait { width:127px; height:150px; } .bubble { margin-bottom:40px; } .score { font-size:22px; } }
