/* =====================================================
   バラバラ漢字パズル v2 CSS
   スコープ: .kp-root 以下すべて
   ===================================================== */

.kp-root {
  --kp-navy:       #1e3a5f !important;
  --kp-navy-dark:  #142844 !important;
  --kp-navy-light: #2a4f7c !important;
  --kp-gold:       #d4af37 !important;
  --kp-white:      #ffffff !important;
  --kp-bg:         #eef2f7 !important;
  --kp-correct:    #2ecc71 !important;
  --kp-wrong:      #e74c3c !important;
  --kp-gray:       #8899aa !important;
  --kp-panel-bg:   #e8eff7 !important;
  --kp-sidebar-w:  220px   !important;
  --kp-easy:       #16a34a !important;
  --kp-normal:     #2563eb !important;
  --kp-hard:       #f59e0b !important;

  all: unset;
  display: block !important;
  box-sizing: border-box !important;
  font-family: 'BIZ UDGothic', sans-serif !important;
  background: var(--kp-bg) !important;
  height: 100vh !important;
  overflow: hidden !important;
  position: relative !important;
}
.kp-root *, .kp-root *::before, .kp-root *::after {
  box-sizing: border-box !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* ---------- ヘッダー ---------- */
.kp-root .kp-header {
  width: 100% !important;
  background: var(--kp-navy) !important;
  padding: 8px 18px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  box-shadow: 0 3px 10px rgba(0,0,0,0.35) !important;
  height: 52px !important;
  flex-shrink: 0 !important;
}
.kp-root .kp-header h1 {
  font-family: 'Dela Gothic One', sans-serif !important;
  font-size: 1.3rem !important;
  color: var(--kp-gold) !important;
  letter-spacing: 3px !important;
  font-weight: 400 !important;
  line-height: 1 !important;
}
.kp-root .kp-hdr-info {
  font-family: 'Dela Gothic One', sans-serif !important;
  font-size: 0.95rem !important;
  color: var(--kp-gold) !important;
}

/* ---------- 3カラム ---------- */
.kp-root .kp-body {
  display: grid !important;
  grid-template-columns: var(--kp-sidebar-w) 1fr var(--kp-sidebar-w) !important;
  height: calc(100vh - 52px) !important;
  overflow: hidden !important;
}

/* ---------- サイドバー ---------- */
.kp-root .kp-sidebar {
  background: var(--kp-white) !important;
  border-right: 1px solid #d0dce8 !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
  padding: 12px 10px !important;
  gap: 10px !important;
}
.kp-root .kp-sidebar.kp-right {
  border-right: none !important;
  border-left: 1px solid #d0dce8 !important;
}
.kp-root .kp-sidebar-title {
  font-size: 0.72rem !important;
  font-weight: 700 !important;
  color: var(--kp-gray) !important;
  letter-spacing: 1px !important;
  flex-shrink: 0 !important;
}

/* ---------- コントロール ---------- */
.kp-root .kp-ctrl-block {
  display: flex !important;
  flex-direction: column !important;
  gap: 6px !important;
  flex-shrink: 0 !important;
}
.kp-root .kp-ctrl-label {
  font-size: 0.75rem !important;
  color: var(--kp-gray) !important;
}

/* 難易度グリッド */
.kp-root .kp-level-grid {
  display: grid !important;
  grid-template-columns: 1fr 1fr 1fr !important;
  gap: 5px !important;
}
.kp-root .kp-level-opt {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 6px 2px !important;
  border: 2px solid #d0dce8 !important;
  border-radius: 10px !important;
  text-align: center !important;
  cursor: pointer !important;
  font-size: 0.68rem !important;
  font-weight: 700 !important;
  color: var(--kp-navy) !important;
  background: var(--kp-panel-bg) !important;
  line-height: 1.4 !important;
  transition: all 0.15s !important;
  user-select: none !important;
}
.kp-root .kp-level-opt input[type="radio"] { display: none !important; }
.kp-root .kp-level-opt:has(input:checked).kp-level-easy   { background: var(--kp-easy)   !important; color: #fff !important; border-color: var(--kp-easy)   !important; }
.kp-root .kp-level-opt:has(input:checked).kp-level-normal { background: var(--kp-normal) !important; color: #fff !important; border-color: var(--kp-normal) !important; }
.kp-root .kp-level-opt:has(input:checked).kp-level-hard   { background: var(--kp-hard)   !important; color: #fff !important; border-color: var(--kp-hard)   !important; }

/* チェックボックス */
.kp-root .kp-check-row {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  cursor: pointer !important;
  font-size: 0.85rem !important;
  font-weight: 700 !important;
  color: var(--kp-navy) !important;
}
.kp-root .kp-check-row input[type="checkbox"] {
  width: 18px !important;
  height: 18px !important;
  accent-color: var(--kp-navy) !important;
  cursor: pointer !important;
  margin: 0 !important;
}

/* ---------- ボタン ---------- */
.kp-root .kp-btn {
  width: 100% !important;
  height: 42px !important;
  border: none !important;
  border-radius: 8px !important;
  font-family: 'BIZ UDGothic', sans-serif !important;
  font-size: 0.9rem !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  transition: background 0.15s, opacity 0.2s !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex-shrink: 0 !important;
}
.kp-root .kp-btn:disabled { opacity: 0.4 !important; cursor: not-allowed !important; }

.kp-root .kp-btn-next      { background: var(--kp-navy) !important;   color: var(--kp-white) !important; }
.kp-root .kp-btn-next:hover:not(:disabled) { background: var(--kp-navy-light) !important; }
.kp-root .kp-btn-reveal    { background: var(--kp-correct) !important; color: var(--kp-white) !important; }
.kp-root .kp-btn-reveal:hover:not(:disabled) { background: #27ae60 !important; }
.kp-root .kp-btn-reshuffle { background: #f0f0f0 !important; color: #555 !important; border: 2px solid #ccc !important; font-size: 0.85rem !important; }
.kp-root .kp-btn-back      { background: #f0f0f0 !important; color: #555 !important; border: 2px solid #ccc !important; font-size: 0.85rem !important; }

/* ---------- 中央ステージ ---------- */
.kp-root .kp-center {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 16px !important;
  overflow: hidden !important;
  background: var(--kp-bg) !important;
}
.kp-root .kp-stage-wrap {
  width: min(calc(100vh - 52px - 32px), calc(100vw - var(--kp-sidebar-w) * 2 - 32px)) !important;
  height: min(calc(100vh - 52px - 32px), calc(100vw - var(--kp-sidebar-w) * 2 - 32px)) !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.kp-root #kp-cv {
  width: 100% !important;
  height: 100% !important;
  border-radius: 16px !important;
  box-shadow: 0 8px 40px rgba(30,58,95,0.25) !important;
  display: block !important;
  background: #fff !important;
}

/* ---------- 履歴 ---------- */
.kp-root #kp-history-list {
  flex: 1 !important;
  overflow-y: auto !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 6px !important;
}
.kp-root .kp-hist-item {
  background: var(--kp-panel-bg) !important;
  border-radius: 8px !important;
  padding: 8px 10px !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}
.kp-root .kp-hi-no    { font-size: 0.72rem !important; color: var(--kp-gray) !important; min-width: 22px !important; }
.kp-root .kp-hi-kanji { font-family: 'BIZ UDMincho', serif !important; font-size: 1.5rem !important; color: var(--kp-navy) !important; line-height: 1 !important; font-weight: 700 !important; }
.kp-root .kp-hi-level { font-size: 0.7rem !important; color: var(--kp-gray) !important; margin-left: auto !important; }
.kp-root .kp-hist-empty { font-size: 0.82rem !important; color: var(--kp-gray) !important; text-align: center !important; padding: 20px 0 !important; }

/* ---------- 設定モーダル ---------- */
.kp-root .kp-setup {
  position: absolute !important;
  inset: 0 !important;
  background: rgba(20,40,68,0.93) !important;
  display: flex !important;
  align-items: flex-start !important;
  justify-content: center !important;
  z-index: 200 !important;
  overflow-y: auto !important;
  padding: 20px 0 40px !important;
}
.kp-root .kp-setup.kp-hidden { display: none !important; }

.kp-root .kp-setup-card {
  background: var(--kp-white) !important;
  border-radius: 18px !important;
  padding: 24px 22px !important;
  width: min(96vw, 540px) !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
  box-shadow: 0 10px 40px rgba(0,0,0,0.5) !important;
}
.kp-root .kp-setup-card h2 {
  font-family: 'Dela Gothic One', sans-serif !important;
  color: var(--kp-navy) !important;
  font-size: 1.5rem !important;
  text-align: center !important;
  letter-spacing: 3px !important;
  font-weight: 400 !important;
}
.kp-root .kp-setup-card h2 span { color: var(--kp-gold) !important; }

/* 学年タブ */
.kp-root .kp-grade-tabs { display: flex !important; gap: 5px !important; }
.kp-root .kp-grade-tab {
  flex: 1 !important;
  padding: 9px 4px !important;
  border: 2px solid var(--kp-navy-light) !important;
  border-radius: 8px !important;
  background: var(--kp-panel-bg) !important;
  color: var(--kp-navy) !important;
  font-family: 'BIZ UDGothic', sans-serif !important;
  font-weight: 700 !important;
  font-size: 0.95rem !important;
  cursor: pointer !important;
  text-align: center !important;
  transition: all 0.15s !important;
}
.kp-root .kp-grade-tab.active {
  background: var(--kp-navy) !important;
  color: var(--kp-white) !important;
  border-color: var(--kp-navy) !important;
}

/* 単元スクロール */
.kp-root .kp-unit-scroll {
  border: 1.5px solid #d0dce8 !important;
  border-radius: 10px !important;
  overflow-y: auto !important;
  height: 300px !important;
  background: #fafcff !important;
  padding: 6px !important;
}
.kp-root .kp-unit-scroll > * + * { margin-top: 4px !important; }
.kp-root .kp-unit-item { border: 1px solid #d8e4f0 !important; border-radius: 8px !important; overflow: hidden !important; }
.kp-root .kp-unit-header {
  display: flex !important;
  align-items: center !important;
  padding: 10px 12px !important;
  background: var(--kp-panel-bg) !important;
  gap: 8px !important;
  cursor: pointer !important;
  user-select: none !important;
}
.kp-root .kp-unit-header:hover { background: #d8eaf8 !important; }
.kp-root .kp-unit-cb-wrap { display: flex !important; align-items: center !important; justify-content: center !important; width: 22px !important; flex-shrink: 0 !important; }
.kp-root .kp-unit-cb { width: 18px !important; height: 18px !important; accent-color: var(--kp-navy) !important; cursor: pointer !important; margin: 0 !important; }
.kp-root .kp-unit-name { flex: 1 !important; font-size: 0.88rem !important; font-weight: 700 !important; color: var(--kp-navy) !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; }
.kp-root .kp-unit-count { font-size: 0.78rem !important; color: var(--kp-gray) !important; white-space: nowrap !important; flex-shrink: 0 !important; }
.kp-root .kp-unit-toggle { font-size: 0.65rem !important; color: var(--kp-gray) !important; transition: transform 0.2s !important; flex-shrink: 0 !important; margin-left: 4px !important; }
.kp-root .kp-unit-toggle.open { transform: rotate(90deg) !important; }

/* 漢字チップ */
.kp-root .kp-kanji-grid { display: none !important; flex-wrap: wrap !important; gap: 8px !important; padding: 12px 12px 14px !important; background: #f5f9ff !important; border-top: 1px solid #d8e4f0 !important; }
.kp-root .kp-kanji-grid.open { display: flex !important; }
.kp-root .kp-kanji-chip { display: flex !important; align-items: center !important; gap: 5px !important; padding: 6px 10px !important; background: var(--kp-white) !important; border: 1.5px solid #c8d8e8 !important; border-radius: 8px !important; cursor: pointer !important; min-width: 52px !important; user-select: none !important; transition: background 0.12s !important; }
.kp-root .kp-kanji-chip:hover   { background: #e8f0fa !important; }
.kp-root .kp-kanji-chip.checked { background: #e0eeff !important; border-color: var(--kp-navy-light) !important; }
.kp-root .kp-kanji-chip input[type="checkbox"] { width: 15px !important; height: 15px !important; accent-color: var(--kp-navy) !important; cursor: pointer !important; margin: 0 !important; }
.kp-root .kp-kanji-chip span { font-family: 'BIZ UDMincho', serif !important; font-size: 1.3rem !important; color: var(--kp-navy) !important; line-height: 1 !important; }

/* 選択数 */
.kp-root #kp-selected-count { font-size: 0.85rem !important; color: var(--kp-navy) !important; text-align: right !important; font-weight: 700 !important; }
.kp-root #kp-selected-count em { color: var(--kp-wrong) !important; font-style: normal !important; }

/* スタートボタン */
.kp-root #kp-start-btn {
  width: 100% !important;
  height: 52px !important;
  background: var(--kp-navy) !important;
  color: var(--kp-white) !important;
  border: none !important;
  border-radius: 10px !important;
  font-family: 'Dela Gothic One', sans-serif !important;
  font-size: 1.2rem !important;
  cursor: pointer !important;
  letter-spacing: 3px !important;
  transition: background 0.15s !important;
}
.kp-root #kp-start-btn:hover:not(:disabled) { background: var(--kp-navy-light) !important; }
.kp-root #kp-start-btn:disabled { opacity: 0.4 !important; cursor: not-allowed !important; }

@media (max-width: 700px) {
  .kp-root { --kp-sidebar-w: 160px !important; }
}

/* =====================================================
   ローディング・エラー（v2.1.0追加）
   ===================================================== */
.kp-root .kp-loading {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 40px 24px !important;
  gap: 16px !important;
}
.kp-root .kp-spinner {
  width: 44px !important; height: 44px !important;
  border: 5px solid #d0dce8 !important;
  border-top-color: var(--kp-navy) !important;
  border-radius: 50% !important;
  animation: kpSpin .8s linear infinite !important;
}
@keyframes kpSpin { to { transform: rotate(360deg); } }

.kp-root .kp-loading-text {
  font-size: .92rem !important;
  color: var(--kp-gray) !important;
  font-weight: 700 !important;
}

.kp-root .kp-load-error {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  padding: 36px 24px !important;
  gap: 12px !important;
  text-align: center !important;
}
.kp-root .kp-load-error-icon { font-size: 2.6rem !important; line-height: 1 !important; }
.kp-root .kp-load-error-text { font-size: .9rem !important; color: var(--kp-wrong) !important; font-weight: 700 !important; }
.kp-root .kp-retry-btn {
  padding: 9px 24px !important;
  background: var(--kp-navy) !important;
  color: #fff !important;
  border: none !important;
  border-radius: 8px !important;
  font-family: 'BIZ UDGothic', sans-serif !important;
  font-weight: 700 !important;
  font-size: .9rem !important;
  cursor: pointer !important;
}
.kp-root .kp-retry-btn:hover { background: var(--kp-navy-light) !important; }

.kp-root .kp-setup-ui {
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
}

/* hidden は必ず最後に定義（display:flex より優先させる） */
.kp-root .kp-hidden { display: none !important; }
