/* dashboard.css */
:root {
  --dash-sidebar-bg: #1e293b;
  --dash-sidebar-fg: #e2e8f0;
  --dash-sidebar-fg-muted: #94a3b8;
  --dash-bg: #f8fafc;
  --dash-tile-bg: #ffffff;
  --dash-border: #e2e8f0;
  --dash-accent: #d97706;
  --dash-text: #1e293b;
  --dash-muted: #64748b;
  --dash-shadow: 0 1px 2px rgba(0,0,0,.04);
  --dash-shadow-hover: 0 2px 8px rgba(0,0,0,.08);
  /* ===== Data viz tokens (Phase: polish) ===== */
  --dash-data-1: #d97706;          /* アンバー — 試験まで, KPI 1 */
  --dash-data-2: #4f46e5;          /* インディゴ — 学習問題数, KPI 2 */
  --dash-data-3: #ef4444;          /* レッド — 連続, KPI 3 */
  --dash-data-4: #14b8a6;          /* ティール — 本日進捗, KPI 4 */
  --dash-data-success: #10b981;    /* 緑 — 上昇トレンド */
  --dash-subject-aud: #2563eb;
  --dash-subject-corp: #7c3aed;
  --dash-subject-mgmt: #d97706;
  --dash-subject-fa:    #059669;
  --dash-heat-0: #f1f5f9;
  --dash-heat-1: #fde68a;
  --dash-heat-2: #fbbf24;
  --dash-heat-3: #f59e0b;
  --dash-heat-4: #d97706;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:'Hiragino Sans','Meiryo',sans-serif;
  background:var(--dash-bg);
  color:var(--dash-text);
  line-height:1.6;
  display:flex;
  min-height:100vh;
}

/* ===== Sidebar ===== */
.dash-sidebar{
  width:220px;
  flex-shrink:0;
  background:var(--dash-sidebar-bg);
  color:var(--dash-sidebar-fg);
  padding:20px 0;
  position:sticky;
  top:0;
  height:100vh;
  overflow-y:auto;
  display:flex;
  flex-direction:column;
}
.dash-sidebar-title{
  font-size:13px;
  font-weight:700;
  letter-spacing:.1em;
  color:var(--dash-sidebar-fg-muted);
  padding:0 20px 16px;
  border-bottom:1px solid rgba(255,255,255,.05);
  margin-bottom:8px;
}
.dash-sidebar-nav{flex:1;padding:8px 0}
.dash-sidebar-nav a{
  display:flex;
  align-items:center;
  gap:10px;
  padding:8px 20px;
  color:var(--dash-sidebar-fg);
  text-decoration:none;
  font-size:13px;
  transition:background .15s;
}
.dash-sidebar-nav a:hover{background:rgba(255,255,255,.06)}
.dash-sidebar-nav a.active{
  background:rgba(255,255,255,.1);
  border-left:3px solid var(--dash-accent);
  padding-left:17px;
}
.dash-sidebar-section-label{
  font-size:10px;
  color:var(--dash-sidebar-fg-muted);
  padding:12px 20px 4px;
  letter-spacing:.05em;
  text-transform:uppercase;
}
.dash-sidebar-sub{padding-left:20px;font-size:12px;color:var(--dash-sidebar-fg-muted)}
.dash-sidebar-footer{padding:8px 0;border-top:1px solid rgba(255,255,255,.05)}

/* ===== Main ===== */
.dash-main{
  flex:1;
  padding:28px 32px;
  max-width:1200px;
  margin:0 auto;
  width:100%;
}
.dash-page-header{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  margin-bottom:24px;
}
.dash-page-title{font-size:22px;font-weight:700;color:#0f172a}
.dash-page-date{font-size:13px;color:var(--dash-muted)}

/* ===== Zone ===== */
.dash-zone{margin-bottom:32px;scroll-margin-top:20px}
.dash-zone h2{
  font-size:16px;
  font-weight:700;
  color:#0f172a;
  margin-bottom:12px;
  padding-bottom:8px;
  border-bottom:1px solid var(--dash-border);
}
.dash-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
  gap:12px;
}

/* ===== Tile (shared) ===== */
.dash-tile{
  background:var(--dash-tile-bg);
  border:1px solid var(--dash-border);
  border-radius:10px;
  box-shadow:var(--dash-shadow);
  padding:14px 16px;
  display:flex;
  flex-direction:column;
  min-height:130px;
  transition:box-shadow .15s;
}
.dash-tile:hover{box-shadow:var(--dash-shadow-hover)}
.dash-tile-header{
  display:flex;
  align-items:center;
  gap:8px;
  margin-bottom:10px;
  font-size:12px;
  color:var(--dash-muted);
  font-weight:600;
}
.dash-tile-icon{font-size:14px}
.dash-tile-title{flex:1}
.dash-tile-action{
  font-size:11px;
  color:var(--dash-muted);
  text-decoration:none;
  padding:2px 6px;
  border-radius:4px;
}
.dash-tile-action:hover{background:#f1f5f9;color:var(--dash-text)}
.dash-tile-body{flex:1;font-size:14px}

/* Tile size hints */
.dash-tile[data-size="2x1"]{grid-column:span 2}
.dash-tile[data-size="1x2"]{grid-row:span 2}
.dash-tile[data-size="2x2"]{grid-column:span 2;grid-row:span 2}
.dash-tile[data-size="full"]{grid-column:1 / -1}

/* ===== Per-tile styles will be appended below ===== */

/* ===== Countdown tile ===== */
.dash-cd-body{display:flex;flex-direction:column;gap:6px}
.dash-cd-row{
  display:flex;
  align-items:baseline;
  gap:10px;
  padding:6px 0;
  border-bottom:1px dashed var(--dash-border);
  font-size:13px;
}
.dash-cd-row:last-child{border-bottom:none}
.dash-cd-label{font-weight:600;color:var(--dash-text);min-width:60px}
.dash-cd-days{flex:1;color:var(--dash-accent);font-weight:700;font-size:15px}
.dash-cd-row.soon .dash-cd-days{color:#b91c1c}
.dash-cd-row.past .dash-cd-days{color:#94a3b8}
.dash-cd-date{font-size:11px;color:var(--dash-muted);font-variant-numeric:tabular-nums}
.dash-cd-empty{color:var(--dash-muted);font-size:12px}

/* ===== Study stats tile ===== */
.dash-stats-big{font-size:14px;color:var(--dash-muted);margin-bottom:4px}
.dash-stats-big strong{font-size:24px;color:var(--dash-text);font-weight:700;margin:0 4px}
.dash-stats-note{font-size:12px;color:#4f46e5;font-weight:600;margin-left:8px}
.dash-stats-sub{font-size:12px;color:var(--dash-muted);margin-bottom:8px}
.dash-stats-week{font-size:12px;color:var(--dash-muted);border-top:1px dashed var(--dash-border);padding-top:6px}

/* ===== Tasks / Shopping (shared list style) ===== */
.dash-task-list,.dash-shopping-list,.dash-wishlist-list{
  list-style:none;padding:0;margin:0;flex:1;overflow-y:auto;max-height:240px;
}
.dash-task,.dash-shopping-item,.dash-wishlist-item{
  display:flex;align-items:center;gap:6px;padding:4px 0;font-size:13px;
  border-bottom:1px dashed var(--dash-border);
}
.dash-task.done .dash-task-text,
.dash-shopping-item.done .dash-shopping-text{
  text-decoration:line-through;color:var(--dash-muted);
}
.dash-task-text,.dash-shopping-text,.dash-wishlist-text{flex:1;word-break:break-word}
.dash-task-del,.dash-shopping-del,.dash-wishlist-del,.dash-memo-del{
  background:none;border:none;color:#94a3b8;font-size:12px;cursor:pointer;
  padding:2px 6px;border-radius:4px;
}
.dash-task-del:hover,.dash-shopping-del:hover,.dash-wishlist-del:hover,.dash-memo-del:hover{
  color:#b91c1c;background:#fef2f2;
}
.dash-task-add input,.dash-shopping-add input,.dash-wishlist-add input,.dash-memo-add input{
  width:100%;border:1px solid var(--dash-border);border-radius:6px;
  padding:6px 10px;font-size:13px;font-family:inherit;margin-top:6px;
}
.dash-task-add input:focus,.dash-shopping-add input:focus,.dash-wishlist-add input:focus,.dash-memo-add input:focus{
  outline:none;border-color:var(--dash-accent);
}

/* ===== Link tile ===== */
.dash-link-tile{
  text-decoration:none;color:var(--dash-text);
  align-items:center;justify-content:center;text-align:center;padding:24px 12px;
  transition:transform .15s,box-shadow .15s;
}
.dash-link-tile:hover{transform:translateY(-2px);border-color:var(--dash-accent)}
.dash-link-icon{font-size:28px;margin-bottom:8px}
.dash-link-label{font-weight:700;font-size:13px}
.dash-link-sub{font-size:11px;color:var(--dash-muted);margin-top:4px}

.dash-wishlist-note{color:var(--dash-muted);font-size:11px}

/* ===== Meal tile ===== */
.dash-meal{display:flex;flex-direction:column;gap:6px}
.dash-meal-row{display:flex;align-items:center;gap:8px}
.dash-meal-label{
  width:30px;flex-shrink:0;font-weight:700;font-size:12px;color:var(--dash-muted);
}
.dash-meal-row input{
  flex:1;border:1px solid var(--dash-border);border-radius:6px;
  padding:5px 8px;font-size:13px;font-family:inherit;
}
.dash-meal-row input:focus{outline:none;border-color:var(--dash-accent)}

/* ===== Water tile ===== */
.dash-water{display:flex;flex-direction:column;gap:6px;align-items:center;text-align:center}
.dash-water-count{font-size:14px;color:var(--dash-muted)}
.dash-water-count strong{font-size:32px;color:var(--dash-accent);font-weight:700}
.dash-water-bar{
  width:100%;height:8px;background:#e2e8f0;border-radius:4px;overflow:hidden;margin:4px 0;
}
.dash-water-fill{
  height:100%;background:linear-gradient(90deg,#0ea5e9,#06b6d4);transition:width .25s;
}
.dash-water-controls{display:flex;gap:8px;margin-top:6px}
.dash-water-controls button{
  width:36px;height:32px;border:1px solid var(--dash-border);background:#fff;
  border-radius:6px;font-size:18px;font-weight:700;cursor:pointer;color:var(--dash-text);
}
.dash-water-controls button:hover{background:#f0f9ff;border-color:#0ea5e9;color:#0ea5e9}

/* ===== Gym tile ===== */
button.dash-gym{
  width:100%;border:1px solid var(--dash-border);background:var(--dash-tile-bg);
  text-align:left;padding:14px 16px;cursor:pointer;font-family:inherit;
}
button.dash-gym.done{background:#f0fdf4;border-color:#86efac}
.dash-gym-body{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;flex:1}
.dash-gym-emoji{font-size:36px}
.dash-gym-label{font-size:12px;color:var(--dash-muted);font-weight:600}
button.dash-gym.done .dash-gym-label{color:#15803d}

/* ===== Memo tile ===== */
.dash-memo-list{list-style:none;padding:0;margin:8px 0 0}
.dash-memo-item{
  display:flex;align-items:baseline;gap:8px;padding:6px 0;
  border-bottom:1px dashed var(--dash-border);font-size:13px;
}
.dash-memo-text{flex:1;word-break:break-word}
.dash-memo-time{font-size:11px;color:var(--dash-muted);flex-shrink:0}
.dash-memo-more{font-size:11px;color:var(--dash-muted);margin-left:auto;font-weight:400}
.dash-memo-empty{padding:8px 0;color:var(--dash-muted);font-size:12px}

/* ===== Backup bar ===== */
.backup-bar{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--dash-border);border-radius:8px;
  padding:8px 12px;font-size:12px;margin:10px 16px 0;
}
.backup-bar-title{font-weight:700;color:var(--dash-text)}
.backup-status{flex:1;color:var(--dash-muted);font-size:11px}
.backup-status.warn{color:#b45309;font-weight:600}
.backup-status.alert{color:#b91c1c;font-weight:700}
.backup-btn{
  padding:5px 10px;border:1px solid var(--dash-border);border-radius:6px;
  background:#f8fafc;color:var(--dash-text);cursor:pointer;font-size:11px;
  font-family:inherit;font-weight:600;
}
.backup-btn:hover{background:#fff}
.backup-btn.export{border-color:#059669;color:#047857}
.backup-btn.export:hover{background:#ecfdf5}
.backup-btn.import{border-color:#2563eb;color:#1d4ed8}
.backup-btn.import:hover{background:#eff6ff}

/* サイドバーの中で使う場合のサイズ調整 */
.dash-sidebar .backup-bar{
  flex-direction:column;align-items:stretch;
  background:rgba(255,255,255,.04);
  border-color:rgba(255,255,255,.08);
  margin:8px 12px;
}
.dash-sidebar .backup-bar-title,
.dash-sidebar .backup-status{color:var(--dash-sidebar-fg)}
.dash-sidebar .backup-status.warn{color:#fcd34d}
.dash-sidebar .backup-status.alert{color:#fca5a5}
.dash-sidebar .backup-btn{
  background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12);
  color:var(--dash-sidebar-fg);text-align:center;
}
.dash-sidebar .backup-btn:hover{background:rgba(255,255,255,.12)}

/* ===== KPI strip ===== */
.dash-kpi-strip {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 24px;
}
.dash-kpi-card {
  background: var(--dash-tile-bg);
  border: 1px solid var(--dash-border);
  border-radius: 12px;
  padding: 16px 18px;
  box-shadow: var(--dash-shadow);
}
.dash-kpi-label {
  font-size: 11px;
  color: var(--dash-muted);
  letter-spacing: 0.03em;
  margin-bottom: 6px;
  font-weight: 600;
}
.dash-kpi-value {
  display: flex;
  align-items: baseline;
  gap: 4px;
}
.dash-kpi-num {
  font-size: 32px;
  font-weight: 800;
  line-height: 1.1;
}
.dash-kpi-unit {
  font-size: 13px;
  color: var(--dash-muted);
}
.dash-kpi-note {
  font-size: 11px;
  color: #4f46e5;
  font-weight: 600;
  margin-left: 4px;
}
.dash-kpi-sub {
  font-size: 11px;
  color: var(--dash-muted);
  margin-top: 4px;
}
.dash-kpi-sub.up    { color: var(--dash-data-success); }
.dash-kpi-sub.down  { color: var(--dash-data-3); }
.dash-kpi-card.kpi-1 .dash-kpi-num { color: var(--dash-data-1); }
.dash-kpi-card.kpi-2 .dash-kpi-num { color: var(--dash-data-2); }
.dash-kpi-card.kpi-3 .dash-kpi-num { color: var(--dash-data-3); }
.dash-kpi-card.kpi-4 .dash-kpi-num { color: var(--dash-data-4); }

@media (max-width: 899px) {
  .dash-kpi-strip { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 599px) {
  .dash-kpi-strip { grid-template-columns: 1fr; }
}

/* ===== Countdown progress bar (within countdown-tile body) ===== */
.dash-cd-progress {
  height: 6px;
  background: #fef3c7;
  border-radius: 3px;
  overflow: hidden;
  margin-top: 6px;
}
.dash-cd-progress-fill {
  height: 100%;
  border-radius: 3px;
}
.dash-cd-progress-fill.lvl-low  { background: linear-gradient(90deg, #fde68a, #f59e0b); }
.dash-cd-progress-fill.lvl-mid  { background: linear-gradient(90deg, #f59e0b, #d97706); }
.dash-cd-progress-fill.lvl-high { background: linear-gradient(90deg, #f59e0b, #ef4444); }
.dash-cd-progress-label {
  font-size: 10px;
  color: var(--dash-muted);
  margin-top: 3px;
}

/* ===== Sparkline + subject bars (within study-stats body) ===== */
.dash-stats-sparkline {
  margin: 8px 0 12px;
}
.dash-stats-sparkline-label {
  font-size: 10px;
  color: var(--dash-muted);
  margin-bottom: 4px;
}
.dash-stats-sparkline svg {
  width: 100%;
  height: 40px;
  display: block;
}
.dash-subject-bars { margin-top: 8px; }
.dash-subject-bars-label {
  font-size: 10px;
  color: var(--dash-muted);
  margin-bottom: 4px;
}
.dash-subject-bar-row {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  margin-bottom: 2px;
}
.dash-subject-bar-name  { width: 48px; color: var(--dash-text); }
.dash-subject-bar-track {
  flex: 1;
  height: 5px;
  background: #f1f5f9;
  border-radius: 3px;
  overflow: hidden;
}
.dash-subject-bar-fill {
  height: 100%;
  border-radius: 3px;
}
.dash-subject-bar-fill.subj-aud { background: var(--dash-subject-aud); }
.dash-subject-bar-fill.subj-corp { background: var(--dash-subject-corp); }
.dash-subject-bar-fill.subj-mgmt  { background: var(--dash-subject-mgmt); }
.dash-subject-bar-fill.subj-fa    { background: var(--dash-subject-fa); }
.dash-subject-bar-count {
  width: 28px;
  text-align: right;
  color: var(--dash-muted);
  font-variant-numeric: tabular-nums;
}

/* ===== Heatmap tile ===== */
.dash-heatmap { display: flex; flex-direction: column; gap: 8px; }
.dash-heatmap-grid {
  display: flex;
  gap: 8px;
  align-items: flex-start;
}
.dash-heatmap-weekdays {
  display: flex;
  flex-direction: column;
  gap: 3px;
  font-size: 9px;
  color: var(--dash-muted);
  padding-top: 14px;
}
.dash-heatmap-weekdays span { height: 11px; line-height: 11px; }
.dash-heatmap-cols {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.dash-heatmap-months {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 3px;
  font-size: 9px;
  color: var(--dash-muted);
}
.dash-heatmap-cells {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 3px;
}
.dash-heatmap-week {
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.dash-heatmap-cell {
  width: 100%;
  height: 11px;
  border-radius: 2px;
}
.dash-heatmap-cell.lvl-0 { background: var(--dash-heat-0); }
.dash-heatmap-cell.lvl-1 { background: var(--dash-heat-1); }
.dash-heatmap-cell.lvl-2 { background: var(--dash-heat-2); }
.dash-heatmap-cell.lvl-3 { background: var(--dash-heat-3); }
.dash-heatmap-cell.lvl-4 { background: var(--dash-heat-4); }
.dash-heatmap-cell.is-future { background: transparent; }
.dash-heatmap-legend {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 10px;
  color: var(--dash-muted);
}
.dash-heatmap-legend-cell {
  width: 11px;
  height: 11px;
  border-radius: 2px;
}
.dash-heatmap-legend-spacer { margin-left: auto; }
