:root {
  --bg-deep: #0a0a10;
  --bg-base: #14141c;
  --bg-soft: #1d1d2a;
  --bg-card: #20202e;
  --line-soft: #2c2c3e;
  --text-main: #e8e6df;
  --text-sub: #b3b0a4;
  --text-mute: #7a7770;
  --accent-warm: #d9b67a;
  --accent-deep: #a8722e;
  --accent-blue: #6a8caf;
  --accent-self: #c2a88a;
  --accent-kind: #e6c992;
  --accent-error: #b65b58;
  --accent-good: #7da27a;
  --shadow-card: 0 8px 24px rgba(0,0,0,0.45);
  --serif: "Noto Serif JP", "Hiragino Mincho ProN", "Yu Mincho", serif;
  --sans: "Noto Sans JP", "Hiragino Kaku Gothic ProN", "Yu Gothic", sans-serif;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; background: var(--bg-deep); color: var(--text-main); font-family: var(--serif); font-size: 16px; line-height: 1.85; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow: hidden; }
body { display: flex; flex-direction: column; align-items: center; background: radial-gradient(ellipse at top, #1c1a26 0%, #0a0a10 60%); }
#app { width: 100%; height: 100%; max-width: 980px; display: flex; flex-direction: column; position: relative; }

/* Topbar */
#topbar { flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; padding: 14px 20px; background: rgba(10,10,16,0.85); border-bottom: 1px solid var(--line-soft); backdrop-filter: blur(8px); font-family: var(--sans); font-size: 12px; letter-spacing: 0.1em; color: var(--text-sub); }
#topbar .chapter-label { display: flex; align-items: center; gap: 10px; min-width: 0; }
#topbar .chapter-label .ornament { display: inline-block; width: 6px; height: 6px; background: var(--accent-warm); border-radius: 50%; flex: 0 0 auto; }
#topbar .chapter-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#topbar .menu-btn { background: transparent; border: 1px solid var(--line-soft); color: var(--text-sub); padding: 4px 10px; border-radius: 4px; cursor: pointer; font-size: 11px; font-family: var(--sans); transition: border-color 0.2s, color 0.2s; }
#topbar .menu-btn:hover { border-color: var(--accent-warm); color: var(--accent-warm); }

/* Dice status */
.dice-status { display: flex; gap: 6px; align-items: center; font-family: var(--sans); flex: 0 1 auto; padding: 0 8px; }
.dice-status .dice-chip { display: inline-flex; align-items: center; gap: 4px; padding: 4px 9px; background: var(--bg-card); border: 1px solid var(--line-soft); border-radius: 14px; font-size: 11px; color: var(--text-mute); transition: all 0.4s ease; cursor: help; white-space: nowrap; }
.dice-status .dice-chip .icon { font-size: 13px; line-height: 1; }
.dice-status .dice-chip .lbl { font-size: 10px; letter-spacing: 0.05em; }
.dice-status .dice-chip .val { font-weight: 700; font-size: 11px; font-variant-numeric: tabular-nums; min-width: 18px; text-align: right; }
.dice-status .dice-chip.has-buff { border-color: var(--accent-warm); color: var(--accent-warm); background: rgba(217,182,122,0.12); box-shadow: 0 0 10px rgba(217,182,122,0.25); }
.dice-status .dice-chip.just-gained { animation: chipPulse 0.8s ease 2; }
.dice-status .dice-chip.is-active { border: 2px solid var(--accent-good); color: var(--accent-good); background: rgba(125,162,122,0.40); font-weight: 700; transform-origin: center; animation: diceActivePulse 0.9s ease-in-out infinite; }
@keyframes diceActivePulse {
  0%, 100% { box-shadow: 0 0 10px rgba(125,162,122,0.7), 0 0 20px rgba(125,162,122,0.45), inset 0 0 6px rgba(255,255,255,0.15); transform: scale(1); }
  50%      { box-shadow: 0 0 22px rgba(125,162,122,1), 0 0 38px rgba(125,162,122,0.7), inset 0 0 10px rgba(255,255,255,0.30); transform: scale(1.08); }
}

/* Progress bar */
#progress-track { flex: 0 0 auto; height: 2px; background: var(--line-soft); position: relative; }
#progress-fill { height: 100%; width: 0%; background: linear-gradient(90deg, var(--accent-deep), var(--accent-warm)); transition: width 0.6s ease; }

/* Stage */
#stage { flex: 1 1 auto; overflow-y: auto; overflow-x: hidden; padding: 24px 18px 100px; scroll-behavior: smooth; scrollbar-width: thin; scrollbar-color: var(--line-soft) transparent; }
#stage::-webkit-scrollbar { width: 6px; }
#stage::-webkit-scrollbar-thumb { background: var(--line-soft); border-radius: 3px; }
#stage-inner { max-width: 720px; margin: 0 auto; }

/* Bubble */
.bubble { margin: 14px 0; display: flex; gap: 10px; animation: fadeIn 0.7s ease both; }
.bubble.left { justify-content: flex-start; }
.bubble.right { justify-content: flex-end; }
.bubble.center { justify-content: center; }
.bubble .speaker-icon { flex: 0 0 auto; width: 38px; height: 38px; border-radius: 50%; background: var(--bg-card); border: 1px solid var(--line-soft); display: flex; align-items: center; justify-content: center; font-size: 18px; user-select: none; }
.bubble .body { max-width: 78%; padding: 12px 16px; border-radius: 14px; background: var(--bg-card); border: 1px solid var(--line-soft); position: relative; font-size: 15px; line-height: 1.85; }
.bubble .body .speaker-name { display: block; font-size: 11px; font-family: var(--sans); color: var(--text-mute); margin-bottom: 4px; letter-spacing: 0.05em; }
.bubble.self-thought .body { background: rgba(194,168,138,0.08); border: 1px dashed var(--accent-self); color: var(--accent-self); border-radius: 18px; font-style: italic; }
.bubble.self-thought .body::before { content: "💭"; position: absolute; top: -14px; right: 14px; font-size: 14px; background: var(--bg-deep); padding: 0 4px; }
.bubble.self-speech .body { background: rgba(194,168,138,0.14); border-color: var(--accent-self); color: #f0e5d4; border-bottom-right-radius: 4px; }
.bubble.other-speech .body { background: rgba(106,140,175,0.10); border-color: var(--accent-blue); color: #d8e2ec; border-bottom-left-radius: 4px; }
.bubble.other-speech .speaker-icon { background: rgba(106,140,175,0.15); color: var(--accent-blue); border-color: var(--accent-blue); }
.bubble.narration .body { background: transparent; border: none; color: var(--text-sub); font-size: 14px; line-height: 2; text-align: center; max-width: 100%; padding: 8px 16px; }
.bubble.notification .body { background: linear-gradient(135deg, #1a3a2a 0%, #1d2c1a 100%); border: 1px solid #3d6a4a; color: #d3e9d5; font-family: var(--sans); font-size: 14px; border-radius: 6px; }
.bubble.notification .body::before { content: "📨"; margin-right: 6px; }
.bubble.kindboss-prelude { margin: 30px 0 20px; }
.bubble.kindboss-prelude .body { background: rgba(230,201,146,0.06); border: none; border-top: 1px solid var(--accent-kind); border-bottom: 1px solid var(--accent-kind); color: var(--accent-kind); font-family: var(--sans); font-size: 13px; font-style: italic; text-align: center; letter-spacing: 0.08em; max-width: 90%; padding: 14px 18px; border-radius: 0; }
.bubble.kindboss-prelude .body::before { content: "🎙 "; font-style: normal; }
.bubble .body em.mark { background: linear-gradient(transparent 60%, rgba(217,182,122,0.35) 60%); font-style: normal; font-weight: 500; padding: 0 2px; }

/* Chapter card */
.chapter-card { margin: 60px auto 40px; text-align: center; padding: 40px 20px; border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft); animation: fadeInScale 1.2s ease both; }
.chapter-card .chapter-num { font-family: var(--sans); font-size: 11px; letter-spacing: 0.4em; color: var(--accent-warm); margin-bottom: 12px; }
.chapter-card .chapter-name { font-family: var(--serif); font-size: 22px; letter-spacing: 0.15em; color: var(--text-main); font-weight: 500; }
.chapter-card .chapter-sub { font-family: var(--sans); font-size: 12px; color: var(--text-mute); margin-top: 12px; letter-spacing: 0.1em; }

/* Click gate */
#click-gate { position: absolute; bottom: 16px; left: 50%; transform: translateX(-50%); font-family: var(--sans); font-size: 12px; color: var(--text-mute); letter-spacing: 0.15em; pointer-events: none; opacity: 0; transition: opacity 0.4s; z-index: 10; }
#click-gate.visible { opacity: 1; }
#click-gate .arrow { display: inline-block; margin-left: 6px; animation: bounce 1.4s ease-in-out infinite; }

/* Choice */
.choice-block { margin: 30px auto; display: flex; flex-direction: column; gap: 12px; max-width: 560px; animation: fadeIn 0.8s ease both; }
.choice-btn { background: var(--bg-card); border: 1px solid var(--accent-warm); color: var(--text-main); padding: 16px 20px; border-radius: 8px; font-family: var(--serif); font-size: 15px; line-height: 1.7; text-align: left; cursor: pointer; transition: all 0.25s; position: relative; }
.choice-btn::before { content: "▸"; margin-right: 10px; color: var(--accent-warm); transition: transform 0.2s; display: inline-block; }
.choice-btn:hover { background: rgba(217,182,122,0.10); transform: translateX(2px); }
.choice-btn:hover::before { transform: translateX(4px); }

/* Next button */
.next-btn { display: block; margin: 24px auto; padding: 12px 32px; background: linear-gradient(135deg, var(--accent-deep), var(--accent-warm)); color: #1a1408; border: none; border-radius: 6px; font-family: var(--sans); font-size: 14px; font-weight: 700; letter-spacing: 0.1em; cursor: pointer; box-shadow: 0 4px 12px rgba(217,182,122,0.25); transition: transform 0.2s, box-shadow 0.2s; animation: fadeInScale 0.6s ease both; }
.next-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(217,182,122,0.4); }
.next-btn::after { content: " →"; }

/* KindBoss block */
.kindboss-block { margin: 30px 0; padding: 22px 24px 26px; background: linear-gradient(135deg, rgba(230,201,146,0.08), rgba(168,114,46,0.06)); border-left: 3px solid var(--accent-kind); border-radius: 4px; animation: fadeIn 0.8s ease both; }
.kindboss-block .kb-label { font-family: var(--sans); font-size: 11px; letter-spacing: 0.2em; color: var(--accent-kind); margin-bottom: 12px; }
.kindboss-block .kb-text { font-family: var(--serif); font-size: 15px; line-height: 1.95; color: #f0e2c8; }
.kindboss-block .kb-origin { margin-top: 12px; font-family: var(--sans); font-size: 11px; color: var(--text-mute); letter-spacing: 0.05em; }

/* Dice */
.dice-block { margin: 30px auto; text-align: center; padding: 26px 20px; background: rgba(125,162,122,0.08); border: 1px solid rgba(125,162,122,0.3); border-radius: 8px; animation: fadeIn 0.6s ease both; max-width: 560px; }
.dice-block .dice-label { font-family: var(--sans); font-size: 12px; letter-spacing: 0.2em; color: var(--accent-good); margin-bottom: 14px; }
.dice-block .dice-visual { display: inline-flex; align-items: center; justify-content: center; width: 80px; height: 80px; background: var(--bg-deep); border: 2px solid var(--accent-good); border-radius: 16px; font-family: var(--sans); font-size: 38px; font-weight: 700; color: var(--accent-good); margin: 8px auto; transition: transform 0.1s; }
.dice-block.rolling .dice-visual { animation: shake 0.06s linear infinite; }
.dice-block.success .dice-visual { background: rgba(125,162,122,0.20); box-shadow: 0 0 20px rgba(125,162,122,0.5); }
.dice-block.failure .dice-visual { background: rgba(182,91,88,0.10); border-color: var(--accent-error); color: var(--accent-error); box-shadow: 0 0 20px rgba(182,91,88,0.4); }
.dice-block .dice-info { font-family: var(--sans); font-size: 12px; color: var(--text-sub); margin-top: 8px; }
.dice-block .dice-buff-summary { font-family: var(--sans); font-size: 11px; color: var(--text-mute); margin-top: 8px; padding: 6px 10px; background: rgba(0,0,0,0.18); border-radius: 4px; display: inline-flex; flex-wrap: wrap; gap: 4px 6px; align-items: center; justify-content: center; max-width: 100%; line-height: 1.6; }
.dice-block .dice-buff-summary .buff-item { white-space: nowrap; opacity: 0.7; }
.dice-block .dice-buff-summary .buff-item .buff-val { font-weight: 700; font-variant-numeric: tabular-nums; }
.dice-block .dice-buff-summary .buff-item.is-target { opacity: 1; color: var(--accent-good); font-weight: 700; }
.dice-block .dice-buff-summary .buff-item.is-target .buff-val { color: var(--accent-good); }
.dice-block .dice-buff-summary .buff-sep { opacity: 0.4; }
.dice-block .dice-result-msg { font-family: var(--sans); font-size: 13px; margin-top: 12px; font-weight: 700; letter-spacing: 0.1em; }
.dice-block.success .dice-result-msg { color: var(--accent-good); }
.dice-block.failure .dice-result-msg { color: var(--accent-error); }
.dice-roll-btn { display: inline-block; margin-top: 12px; padding: 10px 28px; background: var(--accent-good); color: #0a1908; border: none; border-radius: 4px; font-family: var(--sans); font-size: 13px; font-weight: 700; letter-spacing: 0.1em; cursor: pointer; transition: transform 0.2s; }
.dice-roll-btn:hover { transform: translateY(-1px); }
.dice-roll-btn:disabled { opacity: 0.4; cursor: not-allowed; }

/* Title screen */
#title-screen { position: absolute; inset: 0; background: linear-gradient(180deg, #2a1f1a 0%, #14141c 70%); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; z-index: 100; padding: 24px 30px 30px; text-align: center; overflow: hidden; }
#title-screen .title-art-link { display: inline-block; position: relative; width: 100%; max-width: 500px; margin-bottom: 24px; cursor: pointer; transition: all 0.25s; }
#title-screen .title-art-link:hover { transform: translateY(-2px); }
#title-screen .title-art-link:hover .title-art { box-shadow: 0 6px 32px rgba(217,182,122,0.35); }
#title-screen .title-art-link:hover .title-art-caption { color: #f0d68a; border-color: #f0d68a; background: rgba(20,14,8,0.85); }
#title-screen .title-art { width: 100%; display: block; border-radius: 6px; box-shadow: 0 4px 24px rgba(0,0,0,0.6); transition: box-shadow 0.25s; }
#title-screen .title-art-caption {
  position: absolute;
  bottom: 10px;
  left: 10px;
  background: rgba(20,14,8,0.7);
  color: var(--accent-warm);
  padding: 5px 12px;
  border-radius: 4px;
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: 0.08em;
  border: 1px solid rgba(217,182,122,0.35);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  pointer-events: none;
  transition: all 0.25s;
}
#title-screen h1 { font-family: var(--serif); font-size: clamp(28px, 5vw, 42px); font-weight: 500; letter-spacing: 0.2em; color: var(--text-main); margin-bottom: 12px; text-shadow: 0 2px 16px rgba(217,182,122,0.3); }
#title-screen .subtitle { font-family: var(--sans); font-size: clamp(13px, 2.5vw, 16px); letter-spacing: 0.15em; color: var(--accent-warm); margin-bottom: 8px; }
#title-screen .author { font-family: var(--sans); font-size: 11px; color: var(--text-mute); letter-spacing: 0.1em; margin-bottom: 40px; }
#title-screen .start-buttons { display: flex; flex-direction: column; gap: 12px; width: 100%; max-width: 280px; }
.title-btn { padding: 14px 24px; background: transparent; border: 1px solid var(--accent-warm); color: var(--accent-warm); border-radius: 4px; font-family: var(--sans); font-size: 14px; letter-spacing: 0.1em; cursor: pointer; transition: all 0.25s; }
.title-btn.primary { background: var(--accent-warm); color: #1a1408; font-weight: 700; }
.title-btn:hover { background: var(--accent-warm); color: #1a1408; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(217,182,122,0.3); }
.title-btn.disabled { opacity: 0.3; cursor: not-allowed; pointer-events: none; }
#title-screen .credit { position: absolute; bottom: 18px; font-family: var(--sans); font-size: 10px; color: var(--text-mute); letter-spacing: 0.15em; text-align: center; padding: 0 20px; }

/* Modals */
.modal { position: absolute; inset: 0; background: rgba(10,10,16,0.85); backdrop-filter: blur(8px); display: none; align-items: center; justify-content: center; z-index: 200; padding: 20px; }
.modal.visible { display: flex; animation: fadeIn 0.3s ease; }
.modal .panel { background: var(--bg-base); border: 1px solid var(--line-soft); border-radius: 12px; padding: 26px 24px; max-width: 460px; width: 100%; box-shadow: var(--shadow-card); }
.modal h2, .modal h3 { font-family: var(--serif); font-weight: 500; letter-spacing: 0.1em; color: var(--text-main); }
.modal h2 { font-size: 20px; margin-bottom: 8px; }
.modal h3 { font-size: 16px; margin-bottom: 20px; }
.modal .desc { font-family: var(--sans); font-size: 12px; color: var(--text-sub); margin-bottom: 24px; line-height: 1.7; }
.modal .field { margin-bottom: 16px; }
.modal label { display: block; font-family: var(--sans); font-size: 11px; letter-spacing: 0.15em; color: var(--text-sub); margin-bottom: 6px; }
.modal input, .modal select { width: 100%; padding: 10px 14px; background: var(--bg-deep); border: 1px solid var(--line-soft); color: var(--text-main); border-radius: 4px; font-family: var(--serif); font-size: 15px; outline: none; }
.modal input:focus, .modal select:focus { border-color: var(--accent-warm); }
.modal .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.modal .submit-btn { width: 100%; margin-top: 14px; padding: 14px; background: linear-gradient(135deg, var(--accent-deep), var(--accent-warm)); color: #1a1408; border: none; border-radius: 6px; font-family: var(--sans); font-size: 14px; font-weight: 700; letter-spacing: 0.1em; cursor: pointer; }
.modal .menu-list { display: flex; flex-direction: column; gap: 10px; }
.modal .menu-list button { padding: 12px 16px; background: transparent; border: 1px solid var(--line-soft); color: var(--text-main); border-radius: 4px; font-family: var(--sans); font-size: 13px; cursor: pointer; text-align: left; letter-spacing: 0.05em; }
.modal .menu-list button:hover { border-color: var(--accent-warm); color: var(--accent-warm); }
.modal .menu-list .danger:hover { border-color: var(--accent-error); color: var(--accent-error); }
.modal .menu-list .menu-sub { display: block; font-size: 10px; color: var(--text-mute); margin-top: 4px; letter-spacing: 0.05em; font-weight: 400; }

/* Slot block */
.slot-block { margin: 30px auto; text-align: center; padding: 30px 24px; background: linear-gradient(135deg, rgba(217,182,122,0.10), rgba(168,114,46,0.06)); border: 1px solid var(--accent-warm); border-radius: 12px; animation: fadeIn 0.8s ease both; max-width: 560px; }
.slot-block .slot-intro { font-family: var(--serif); font-size: 15px; line-height: 1.9; margin-bottom: 20px; color: #f0e2c8; }
.slot-machine { display: inline-flex; gap: 6px; margin: 20px 0; padding: 14px; background: var(--bg-deep); border-radius: 12px; border: 2px solid var(--accent-warm); box-shadow: 0 0 24px rgba(217,182,122,0.25); }
.slot-reel { width: 60px; height: 80px; background: var(--bg-card); border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 32px; border: 1px solid var(--line-soft); overflow: hidden; }
.slot-reel.spinning .reel-inner { animation: reelSpin 0.08s linear infinite; }
.slot-result { font-family: var(--sans); font-size: 13px; font-weight: 700; margin-top: 16px; color: var(--accent-warm); letter-spacing: 0.1em; min-height: 20px; }
.slot-award-text { font-family: var(--serif); font-size: 14px; line-height: 1.9; margin-top: 14px; color: #f0e2c8; padding: 14px 20px; background: rgba(0,0,0,0.25); border-radius: 6px; }
.slot-buttons { display: flex; gap: 10px; justify-content: center; margin-top: 18px; }
.slot-buttons button { padding: 10px 20px; background: var(--bg-card); border: 1px solid var(--accent-warm); color: var(--accent-warm); border-radius: 4px; font-family: var(--sans); font-size: 12px; letter-spacing: 0.1em; cursor: pointer; }
.slot-buttons button:hover { background: var(--accent-warm); color: #1a1408; }
.slot-buttons button:disabled { opacity: 0.4; cursor: not-allowed; }
.slot-already-claimed { text-align: center; margin: 20px 0; }
.slot-already-claimed .claimed-mark { display: inline-block; padding: 14px 28px; border: 2px solid var(--accent-warm); border-radius: 8px; font-family: var(--sans); font-size: 16px; font-weight: 700; letter-spacing: 0.3em; color: var(--accent-warm); background: rgba(217,182,122,0.06); transform: rotate(-3deg); margin-bottom: 14px; }
.slot-already-claimed .claimed-sub { font-family: var(--sans); font-size: 12px; color: var(--text-mute); letter-spacing: 0.1em; margin-bottom: 18px; }
.slot-already-claimed .claimed-summary { font-family: var(--serif); font-size: 14px; line-height: 1.95; color: var(--text-sub); padding: 16px 20px; background: rgba(0,0,0,0.25); border-radius: 6px; margin-top: 14px; text-align: left; }
.slot-already-claimed .claimed-summary em { font-style: normal; color: var(--accent-warm); font-weight: 500; }

/* Tutorial card */
.tutorial-card { margin: 30px auto 20px; padding: 36px 28px; max-width: 620px; background: linear-gradient(180deg, rgba(217,182,122,0.06), rgba(20,20,28,0.4)); border: 1px solid var(--accent-warm); border-radius: 12px; animation: fadeIn 1s ease both; text-align: center; }
.tutorial-card .tut-label { font-family: var(--sans); font-size: 11px; letter-spacing: 0.3em; color: var(--accent-warm); margin-bottom: 16px; }
.tutorial-card .tut-title { font-family: var(--serif); font-size: 22px; letter-spacing: 0.1em; color: var(--text-main); margin-bottom: 28px; font-weight: 500; }
.tutorial-card .tut-dice-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 28px; max-width: 540px; margin-left: auto; margin-right: auto; }
.tutorial-card .tut-dice { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 14px 10px; background: var(--bg-card); border: 1px solid var(--accent-warm); border-radius: 10px; width: 100%; min-width: 0; }
.tutorial-card .tut-icon { font-size: 28px; line-height: 1; margin-bottom: 6px; }
.tutorial-card .tut-name { font-family: var(--serif); font-size: 15px; color: var(--accent-warm); font-weight: 500; letter-spacing: 0.1em; }
.tutorial-card .tut-desc { font-family: var(--sans); font-size: 11px; color: var(--text-mute); letter-spacing: 0.05em; }
.tutorial-card .tut-text { font-family: var(--serif); font-size: 14px; line-height: 2; color: var(--text-sub); text-align: left; max-width: 480px; margin: 0 auto; }
.tutorial-card .tut-text em { font-style: normal; color: var(--accent-warm); font-weight: 700; }
.tutorial-card .tut-quote { font-style: italic; color: var(--accent-kind); font-size: 13px; display: inline-block; margin-top: 6px; }

/* Review card */
.review-card { margin: 30px auto 24px; padding: 30px 24px; max-width: 620px; background: linear-gradient(180deg, rgba(20,20,28,0.6), rgba(10,10,16,0.4)); border: 1px solid var(--line-soft); border-radius: 12px; animation: fadeIn 1s ease both; }
.review-card .review-title { font-family: var(--sans); font-size: 11px; letter-spacing: 0.3em; color: var(--accent-warm); margin-bottom: 18px; text-align: center; }
.review-card .review-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 18px; }
.review-card .review-item { display: flex; align-items: center; gap: 12px; padding: 10px 14px; background: var(--bg-card); border: 1px solid var(--line-soft); border-radius: 6px; font-family: var(--sans); font-size: 13px; animation: fadeIn 0.6s ease both; }
.review-card .review-item .scn-num { font-size: 10px; letter-spacing: 0.2em; color: var(--text-mute); min-width: 60px; }
.review-card .review-item .scn-name { flex: 1 1 auto; color: var(--text-main); font-size: 13px; }
.review-card .review-item .scn-mark { font-size: 11px; font-weight: 700; letter-spacing: 0.1em; padding: 4px 10px; border-radius: 12px; flex: 0 0 auto; }
.review-card .review-item.plus .scn-mark { background: rgba(125,162,122,0.20); color: var(--accent-good); border: 1px solid var(--accent-good); }
.review-card .review-item.minus .scn-mark { background: rgba(182,91,88,0.15); color: var(--accent-error); border: 1px solid var(--accent-error); }
.review-card .review-item.plus { border-left: 3px solid var(--accent-good); }
.review-card .review-item.minus { border-left: 3px solid var(--accent-error); }
.review-card .review-score { text-align: center; margin-top: 6px; padding-top: 18px; border-top: 1px dashed var(--line-soft); }
.review-card .review-score .score-num { font-family: var(--serif); font-size: 32px; font-weight: 700; color: var(--accent-warm); }
.review-card .review-score .score-num em { font-style: normal; color: var(--text-mute); font-size: 22px; font-weight: 400; margin-left: 2px; }
.review-card .review-score .score-label { font-family: var(--sans); font-size: 11px; letter-spacing: 0.2em; color: var(--accent-warm); margin-top: 6px; }

/* Inner Scape */
.innerscape-card { margin: 60px auto 30px; padding: 40px 30px; text-align: center; background: radial-gradient(ellipse at center, rgba(217,182,122,0.10), transparent 70%); animation: fadeInScale 1.4s ease both; }
.innerscape-card .label { font-family: var(--sans); font-size: 11px; letter-spacing: 0.4em; color: var(--accent-warm); margin-bottom: 18px; }
.innerscape-card .text { font-family: var(--serif); font-size: clamp(15px, 3vw, 18px); line-height: 2.1; color: var(--text-main); }
.innerscape-card .score-vis { display: inline-flex; gap: 6px; margin-top: 24px; }
.innerscape-card .score-dot { width: 12px; height: 12px; border-radius: 50%; background: var(--line-soft); }
.innerscape-card .score-dot.filled { background: var(--accent-warm); box-shadow: 0 0 8px rgba(217,182,122,0.6); }

/* True ending */
.true-ending { margin: 40px auto; padding: 30px 24px; background: rgba(217,182,122,0.04); border-top: 1px solid var(--accent-warm); border-bottom: 1px solid var(--accent-warm); animation: fadeIn 1.2s ease both; }
.true-ending .label { font-family: var(--sans); font-size: 11px; letter-spacing: 0.4em; color: var(--accent-warm); text-align: center; margin-bottom: 20px; }
.true-ending .body { font-family: var(--serif); font-size: 15px; line-height: 2.05; color: var(--text-main); white-space: pre-wrap; }

/* End credits */
.end-credits { margin: 50px auto 30px; text-align: center; font-family: var(--sans); font-size: 12px; color: var(--text-mute); letter-spacing: 0.15em; line-height: 2.2; }
.end-credits .completion-mark { display: inline-block; margin: 16px auto; padding: 8px 24px; border: 1px solid var(--accent-warm); color: var(--accent-warm); border-radius: 4px; font-size: 13px; letter-spacing: 0.3em; }
.end-credits .restart-btn { display: inline-block; margin-top: 24px; padding: 12px 28px; background: transparent; border: 1px solid var(--text-sub); color: var(--text-sub); border-radius: 4px; font-family: var(--sans); font-size: 12px; letter-spacing: 0.1em; cursor: pointer; }
.end-credits .restart-btn:hover { border-color: var(--accent-warm); color: var(--accent-warm); }

/* Animations */
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeInScale { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: scale(1); } }
@keyframes bounce { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-3px);} }
@keyframes shake { 0%{transform:translate(-1px,1px) rotate(-2deg);} 50%{transform:translate(1px,-1px) rotate(2deg);} 100%{transform:translate(-1px,1px) rotate(-2deg);} }
@keyframes reelSpin { 0%{transform:translateY(0);} 100%{transform:translateY(-80px);} }
@keyframes chipPulse { 0%{transform:scale(1);} 50%{transform:scale(1.18); box-shadow: 0 0 18px rgba(217,182,122,0.6);} 100%{transform:scale(1);} }

/* Responsive */
@media (min-width: 768px) {
  body { padding: 0; }
  #app { height: 100vh; height: 100dvh; box-shadow: 0 0 60px rgba(0,0,0,0.6); }
  #stage { padding: 30px 40px 100px; }
  .bubble .body { max-width: 70%; }
  .chapter-card .chapter-name { font-size: 28px; }
}
@media (max-width: 540px) {
  #topbar { padding: 10px 12px; gap: 6px; }
  .dice-status { gap: 4px; padding: 0 4px; }
  .dice-status .dice-chip { padding: 3px 7px; }
  .dice-status .dice-chip .lbl { display: none; }
  #topbar .chapter-label { max-width: 100px; }
  #topbar .chapter-title { font-size: 11px; }
  #topbar .menu-btn { padding: 3px 8px; font-size: 11px; }
}
@media (max-width: 480px) {
  .bubble { gap: 6px; margin: 10px 0; }
  .bubble .speaker-icon { width: 32px; height: 32px; font-size: 16px; }
  .bubble .body { font-size: 14px; padding: 10px 14px; max-width: 80%; }
  .chapter-card { margin: 40px auto 30px; padding: 30px 16px; }
  .chapter-card .chapter-name { font-size: 18px; letter-spacing: 0.1em; }
  .choice-btn { font-size: 14px; padding: 14px 16px; }
  #stage { padding: 20px 14px 100px; }
  .tutorial-card { padding: 26px 14px; }
  .tutorial-card .tut-title { font-size: 17px; }
  .tutorial-card .tut-dice-row { gap: 6px; }
  .tutorial-card .tut-dice { padding: 10px 4px; }
  .tutorial-card .tut-icon { font-size: 22px; }
  .tutorial-card .tut-name { font-size: 12px; }
  .tutorial-card .tut-desc { font-size: 10px; }
  .tutorial-card .tut-text { font-size: 13px; }
  .review-card { padding: 22px 14px; }
  .review-card .review-item .scn-num { min-width: 48px; font-size: 9px; }
  .review-card .review-item .scn-name { font-size: 12px; }
  .review-card .review-item .scn-mark { font-size: 10px; padding: 3px 8px; }
  .review-card .review-score .score-num { font-size: 26px; }
}

.hide { display: none !important; }

/* ============================================================
   index.html — タイトル画面ボタンの左右配置（既存 #title-screen .start-buttons を上書き）
   ============================================================ */
#title-screen .start-buttons {
  display: flex;
  flex-direction: row;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
  width: auto;
  max-width: none;
}
#title-screen .start-buttons .title-btn {
  flex: 0 1 auto;
  min-width: 140px;
}

/* ============================================================
   全画面共通の「← 訓練所」固定ナビ（index.html のタイトル/シナリオ選択画面）
   ============================================================ */
.training-back-nav {
  position: fixed;
  top: 14px; left: 14px;
  z-index: 100;
  font-family: var(--sans);
  font-size: 11px;
  color: var(--text-mute);
  text-decoration: none;
  padding: 6px 12px;
  border: 1px solid rgba(217,182,122,0.25);
  border-radius: 4px;
  background: rgba(20,14,8,0.7);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  letter-spacing: 0.08em;
  transition: all 0.2s;
}
.training-back-nav:hover {
  color: var(--accent-warm);
  border-color: var(--accent-warm);
  background: rgba(217,182,122,0.1);
}

/* ============================================================
   index.html — シナリオ選択画面
   ============================================================ */
#scenario-select {
  position: absolute; inset: 0;
  height: 100vh; overflow-y: auto; overflow-x: hidden;
  padding: 48px 20px 80px;
  display: flex; flex-direction: column; align-items: center;
  background: var(--bg-deep);
  /* スクロールバー（プレイ画面と同じ細身デザイン） */
  scrollbar-width: thin;
  scrollbar-color: var(--line-soft) transparent;
}
#scenario-select::-webkit-scrollbar { width: 6px; }
#scenario-select::-webkit-scrollbar-thumb { background: var(--line-soft); border-radius: 3px; }
#scenario-select.hide { display: none; }
.select-header { text-align: center; max-width: 640px; margin-bottom: 36px; }
.select-header h2 {
  font-family: var(--serif);
  font-size: 22px; letter-spacing: 0.12em;
  color: var(--accent-warm); margin: 0 0 10px;
}
.select-header .select-sub {
  font-family: var(--sans);
  font-size: 12px; color: var(--text-mute);
  letter-spacing: 0.06em; margin: 0;
}
.select-header .select-greeting {
  font-family: var(--sans);
  font-size: 11px; color: var(--text-main);
  letter-spacing: 0.08em; margin: 14px 0 0; opacity: 0.8;
}
#scenario-cards {
  width: 100%; max-width: 720px;
  display: flex; flex-direction: column; gap: 14px;
}
.scenario-card {
  padding: 20px 22px; border: 1px solid var(--line-soft);
  background: rgba(217,182,122,0.04); border-radius: 8px;
  cursor: pointer; transition: all 0.2s;
  position: relative;
}
.scenario-card.published:hover {
  border-color: var(--accent-warm);
  background: rgba(217,182,122,0.08);
  transform: translateY(-1px);
}
.scenario-card.draft { opacity: 0.45; cursor: not-allowed; }
.scenario-card .card-curriculum-row {
  display: flex; align-items: center; gap: 8px; margin-bottom: 12px;
}
.scenario-card .card-curriculum {
  display: inline-block; font-family: var(--sans);
  font-size: 10px; letter-spacing: 0.18em; padding: 3px 10px;
  border: 1px solid var(--accent-warm);
  color: var(--accent-warm);
  border-radius: 3px;
}
.scenario-card .card-status {
  font-family: var(--sans);
  font-size: 9px; letter-spacing: 0.15em; padding: 3px 9px;
  border-radius: 3px;
}
.scenario-card .card-status.status-clear {
  background: rgba(78,205,196,0.12); color: #4ecdc4;
  border: 1px solid rgba(78,205,196,0.35);
}
.scenario-card .card-status.status-notclear {
  background: rgba(140,140,160,0.06); color: var(--text-mute);
  border: 1px solid rgba(140,140,160,0.2);
}
.scenario-card .card-title {
  font-family: var(--serif);
  font-size: 18px; color: var(--text-main);
  letter-spacing: 0.06em; margin: 0 0 6px;
}
.scenario-card .card-subtitle {
  font-family: var(--sans);
  font-size: 12px; color: var(--text-mute);
  letter-spacing: 0.05em; margin: 0 0 12px; line-height: 1.6;
}
.scenario-card .card-learning {
  font-family: var(--sans);
  font-size: 12px; color: var(--accent-warm);
  letter-spacing: 0.04em; line-height: 1.6;
  margin: 0 0 14px; padding: 8px 12px;
  background: rgba(217,182,122,0.06);
  border-left: 2px solid var(--accent-warm);
  border-radius: 2px;
}
.scenario-card .card-learning .card-learning-icon { margin-right: 6px; opacity: 0.85; }
.scenario-card .card-meta {
  display: flex; gap: 12px; align-items: center;
  font-family: var(--sans);
  font-size: 10px; letter-spacing: 0.08em;
  color: var(--text-mute);
}
.scenario-card .card-tags { display: flex; gap: 6px; flex-wrap: wrap; }
.scenario-card .card-tag {
  font-size: 9px; padding: 2px 7px;
  background: rgba(217,182,122,0.06);
  border: 1px solid rgba(217,182,122,0.12);
  border-radius: 2px; color: var(--text-mute);
}
.scenario-card .card-badge {
  position: absolute; top: 16px; right: 16px;
  font-size: 9px; padding: 3px 8px; border-radius: 2px;
  letter-spacing: 0.12em;
}
.scenario-card .card-badge.draft {
  background: rgba(140,140,160,0.12); color: var(--text-mute);
  border: 1px solid rgba(140,140,160,0.2);
}
.scenario-card .card-badge.cleared {
  background: rgba(217,182,122,0.15); color: var(--accent-warm);
  border: 1px solid rgba(217,182,122,0.3);
}
#btn-back-to-title {
  margin-top: 28px; padding: 8px 20px; background: transparent;
  border: 1px solid var(--text-mute); color: var(--text-mute);
  font-family: var(--sans);
  font-size: 11px; letter-spacing: 0.1em; cursor: pointer;
  border-radius: 4px; transition: all 0.2s;
}
#btn-back-to-title:hover {
  border-color: var(--text-main); color: var(--text-main);
}
.back-to-hub-link {
  display: inline-block; margin-top: 14px;
  font-family: 'DotGothic16', monospace; font-size: 11px;
  color: var(--text-mute); text-decoration: none;
  padding: 6px 12px; border: 1px solid rgba(217,182,122,0.2); border-radius: 4px;
  transition: all 0.2s;
}
.back-to-hub-link:hover {
  color: var(--accent-warm); border-color: var(--accent-warm);
}
.map-link {
  display: inline-block; margin-top: 14px;
  font-family: var(--sans); font-size: 11px;
  color: var(--accent-warm); text-decoration: none;
  padding: 6px 14px; border: 1px solid rgba(217,182,122,0.35); border-radius: 4px;
  background: rgba(217,182,122,0.05);
  letter-spacing: 0.1em;
  transition: all 0.25s;
}
.map-link:hover {
  color: #f0d68a; border-color: #f0d68a;
  background: rgba(217,182,122,0.12);
  transform: translateY(-1px);
  box-shadow: 0 2px 12px rgba(217,182,122,0.2);
}
#scenarios-loading, #scenarios-error {
  width: 100%; max-width: 720px; padding: 40px 20px; text-align: center;
  color: var(--text-mute);
  font-family: var(--sans);
  font-size: 12px; letter-spacing: 0.08em;
}
#scenarios-error { color: var(--accent-error); }

/* ============================================================
   play.html — ロード中・エラー表示・topbar 戻り導線
   ============================================================ */
#play-loading, #play-error {
  position: fixed; inset: 0; display: flex; align-items: center; justify-content: center;
  background: var(--bg-deep); color: var(--text-main);
  font-family: var(--serif); padding: 24px; text-align: center;
}
#play-loading.hide, #play-error.hide { display: none; }
#play-loading .spinner {
  width: 48px; height: 48px; border: 3px solid rgba(217,182,122,0.2);
  border-top-color: var(--accent-warm); border-radius: 50%;
  animation: spin 1s linear infinite; margin: 0 auto 16px;
}
@keyframes spin { to { transform: rotate(360deg); } }
#play-error .error-box {
  max-width: 520px; padding: 28px 24px; border: 1px solid var(--line-soft);
  border-radius: 8px; background: rgba(217,182,122,0.04);
}
#play-error h2 { font-size: 18px; margin: 0 0 12px; color: var(--accent-warm); letter-spacing: 0.08em; }
#play-error .detail { font-size: 13px; line-height: 1.8; color: var(--text-mute); margin: 0 0 20px; word-break: break-word; }
#play-error a {
  display: inline-block; padding: 10px 24px; border: 1px solid var(--accent-warm);
  color: var(--accent-warm); text-decoration: none; font-size: 12px; letter-spacing: 0.1em;
  border-radius: 4px; transition: all 0.2s;
}
#play-error a:hover { background: var(--accent-warm); color: var(--bg-deep); }
.back-to-hub {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 6px 10px; margin-right: 12px;
  font-family: 'DotGothic16', monospace; font-size: 11px;
  color: var(--text-mute); text-decoration: none;
  border: 1px solid rgba(217,182,122,0.18); border-radius: 4px;
  transition: all 0.2s;
}
.back-to-hub:hover { color: var(--accent-warm); border-color: var(--accent-warm); }
.map-link-top {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 6px 10px; margin-right: 12px;
  color: var(--accent-warm);
  text-decoration: none; font-size: 11px;
  border: 1px solid rgba(217,182,122,0.35); border-radius: 4px;
  background: rgba(217,182,122,0.05);
  letter-spacing: 0.05em;
  transition: all 0.2s;
}
.map-link-top:hover { color: #f0d68a; border-color: #f0d68a; background: rgba(217,182,122,0.12); }

/* ============================================================
   framework.html — 体系マップページ専用（body.framework-page でスコープ分離）
   - html, body の overflow:hidden / height:100% を解放（縦スクロール許可）
   - body の display:flex / align-items:center を解除（フル幅レイアウト）
   ============================================================ */
html.framework-page,
body.framework-page {
  overflow: auto !important;
  height: auto !important;
}
body.framework-page {
  margin: 0; padding: 0;
  background: #0a0a10;
  color: var(--text-main);
  font-family: var(--sans);
  min-height: 100vh;
  display: block !important;
  align-items: initial !important;
}
body.framework-page .framework-header,
body.framework-page .map-container,
body.framework-page .progress-section,
body.framework-page .legend-section {
  width: 100%;
  box-sizing: border-box;
}
.framework-header {
  padding: 12px 24px 10px;
  background: linear-gradient(180deg, #1a1408 0%, #0f0a04 100%);
  border-bottom: 1px solid rgba(217,182,122,0.2);
  text-align: center;
  position: relative;
}
.framework-header h1 {
  margin: 0 0 2px;
  font-family: var(--serif);
  font-size: 18px;
  color: var(--accent-warm);
  letter-spacing: 0.18em;
  font-weight: 500;
}
.framework-header .subtitle {
  margin: 0;
  font-size: 11px;
  color: var(--text-mute);
  letter-spacing: 0.1em;
}
.header-nav {
  position: absolute;
  top: 18px; left: 18px;
  display: flex; gap: 8px;
}
.header-nav a {
  color: var(--text-mute);
  text-decoration: none;
  font-size: 11px;
  padding: 4px 10px;
  border: 1px solid rgba(217,182,122,0.2);
  border-radius: 3px;
  transition: all 0.2s;
}
.header-nav a:hover {
  color: var(--accent-warm);
  border-color: var(--accent-warm);
}
.map-container {
  width: 100%;
  max-width: 1408px;
  margin: 12px auto 0;
  padding: 0 16px;
  box-sizing: border-box;
  display: flex;
  justify-content: center;
}
.map-svg {
  width: 100%;
  max-width: calc((100vh - 110px) * (1408 / 768));
  height: auto;
  aspect-ratio: 1408 / 768;
  display: block;
  border: 1px solid rgba(217,182,122,0.15);
  border-radius: 6px;
  box-shadow: 0 4px 24px rgba(0,0,0,0.6);
  background: #1a1408;
}
.badge-glow, .badge-card { cursor: help; transition: all 0.3s; }
.badge-glow.acquired circle.glow-outer {
  filter: drop-shadow(0 0 8px currentColor);
  animation: pulse 3s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 0.5; }
  50% { opacity: 0.85; }
}
.badge-card.acquired rect {
  filter: drop-shadow(0 0 6px rgba(217,182,122,0.4));
}
.progress-section {
  max-width: 1408px;
  margin: 24px auto 0;
  padding: 16px 24px;
  background: linear-gradient(180deg, rgba(45,30,18,0.5), rgba(20,14,8,0.6));
  border: 1px solid rgba(217,182,122,0.15);
  border-radius: 6px;
}
.progress-text {
  font-size: 13px;
  color: var(--text-main);
  margin-bottom: 8px;
  letter-spacing: 0.05em;
}
.progress-text .count {
  color: var(--accent-warm);
  font-weight: 700;
  font-size: 16px;
}
.progress-bar {
  width: 100%;
  height: 8px;
  background: rgba(217,182,122,0.08);
  border-radius: 4px;
  overflow: hidden;
}
.progress-fill {
  height: 100%;
  background: linear-gradient(90deg, #4ecdc4, #d9b67a, #f0d68a);
  border-radius: 4px;
  transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  box-shadow: 0 0 8px rgba(240,214,138,0.4);
}
.legend-section {
  max-width: 1408px;
  margin: 16px auto 32px;
  padding: 16px 24px;
  background: rgba(20,14,8,0.4);
  border: 1px solid rgba(217,182,122,0.12);
  border-radius: 6px;
}
.legend-section h3 {
  margin: 0 0 12px;
  font-size: 12px;
  color: var(--accent-warm);
  letter-spacing: 0.15em;
  font-family: var(--sans);
  font-weight: 600;
}
.legend-section ul {
  margin: 0;
  padding: 0 0 0 18px;
  font-size: 11px;
  color: var(--text-mute);
  line-height: 1.8;
  letter-spacing: 0.05em;
}
.legend-section li { margin-bottom: 4px; }
body.framework-page .loading {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-mute);
  font-size: 12px;
  letter-spacing: 0.15em;
}
body.framework-page .error {
  text-align: center;
  padding: 40px 20px;
  color: #e74c3c;
  font-size: 12px;
}
@media (max-width: 600px) {
  .framework-header { padding: 50px 16px 12px; }
  .framework-header h1 { font-size: 16px; letter-spacing: 0.1em; }
  .framework-header .subtitle { font-size: 10px; }
  .header-nav { top: 12px; left: 12px; flex-direction: column; gap: 6px; }
  .header-nav a { font-size: 10px; padding: 3px 8px; }
  .map-container { padding: 0 8px; margin-top: 16px; }
  .progress-section, .legend-section { margin-left: 8px; margin-right: 8px; padding: 12px 16px; }
}
