/* 팔란티어 센터 — 하이브리드 다크 (핀트 카드 레이아웃 + 관제센터 무드) */
:root {
  --bg: #0d1117;
  --card: #161b22;
  --border: #21262d;
  --fg: #e6edf3;
  --muted: #8b949e;
  --green: #3fb950;
  --yellow: #d29922;
  --gray: #6e7681;
  --red: #f85149;
}
* { box-sizing: border-box; }
body {
  margin: 0; background: var(--bg); color: var(--fg);
  font-family: -apple-system, "Pretendard", "Noto Sans KR", sans-serif;
}
.topbar {
  padding: 14px 16px; border-bottom: 1px solid var(--border);
  position: sticky; top: 0; background: var(--bg); z-index: 10;
}
.brand { color: var(--fg); text-decoration: none; font-weight: 700; }
.container { max-width: 860px; margin: 0 auto; padding: 16px; }

.summary { padding: 8px 4px 20px; }
.summary-label { color: var(--muted); font-size: 14px; }
.summary-equity {
  font-size: 34px; font-weight: 800; font-variant-numeric: tabular-nums;
}
.summary-pnl { font-size: 15px; font-variant-numeric: tabular-nums; }

.cards { display: grid; grid-template-columns: 1fr; gap: 12px; }
@media (min-width: 768px) { .cards { grid-template-columns: 1fr 1fr; } }

.card {
  display: block; background: var(--card); border: 1px solid var(--border);
  border-radius: 14px; padding: 16px; text-decoration: none; color: var(--fg);
}
.card:active { border-color: var(--muted); }
.card-head { display: flex; align-items: center; gap: 8px; }
.card-title { font-weight: 700; }
.card-equity {
  font-size: 24px; font-weight: 800; margin-top: 10px;
  font-variant-numeric: tabular-nums;
}
.card-ret { font-size: 14px; font-variant-numeric: tabular-nums; }
.card-error { color: var(--red); font-size: 12px; margin-top: 8px; }

.dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.dot-running { background: var(--green); box-shadow: 0 0 6px var(--green); }
.dot-paused  { background: var(--yellow); box-shadow: 0 0 6px var(--yellow); }
.dot-stopped { background: var(--gray); }

.badge {
  font-size: 11px; padding: 2px 8px; border-radius: 999px;
  border: 1px solid var(--border); color: var(--muted); margin-left: auto;
}
.pos { color: var(--green); }
.neg { color: var(--red); }

/* 하트비트: STALE 배지 + 마지막 활동 표시 */
.badge-stale {
  margin-left: 0; color: #ffdcd6; background: rgba(248, 81, 73, .18);
  border-color: var(--red); font-weight: 700;
}
.card-activity, .detail-activity {
  color: var(--muted); font-size: 12px; margin-top: 8px;
  font-variant-numeric: tabular-nums;
}
.detail-activity { margin-top: 4px; }
.card-activity.stale, .detail-activity.stale { color: var(--red); font-weight: 600; }

/* 로그인 */
.login-body { display: grid; place-items: center; min-height: 100vh; margin: 0; }
.login-box { text-align: center; }
.login-box input {
  display: block; width: 240px; margin: 16px auto; padding: 12px;
  background: var(--card); border: 1px solid var(--border);
  border-radius: 10px; color: var(--fg); font-size: 16px;
}
.login-box button {
  padding: 10px 32px; border-radius: 10px; border: none;
  background: var(--green); color: #04260f; font-weight: 700; font-size: 15px;
}

/* 상세 화면 */
.detail-head { padding: 8px 4px 12px; }
.spark { width: 100%; height: 64px; margin-top: 12px; }
.panel {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 14px; padding: 14px 16px; margin-top: 12px;
}
.panel h2 { font-size: 15px; margin: 0 0 10px; }
.panel table { width: 100%; border-collapse: collapse; font-size: 14px; }
.panel th { text-align: left; color: var(--muted); font-weight: 500;
  border-bottom: 1px solid var(--border); padding: 4px 6px; }
.panel td { padding: 6px; border-bottom: 1px solid var(--border); }
.panel tr:last-child td { border-bottom: none; }
.num { text-align: right; font-variant-numeric: tabular-nums; }
.muted { color: var(--muted); font-size: 13px; }
.strategy summary { cursor: pointer; font-weight: 700; }

/* 전략 조절 */
.strategy-form { margin-top: 12px; }
.param-row { margin: 14px 0; }
.param-label {
  display: flex; justify-content: space-between; align-items: baseline;
  font-size: 14px; margin-bottom: 6px;
}
.param-disp {
  color: var(--green); font-weight: 700; font-variant-numeric: tabular-nums;
}
.param-controls { display: flex; align-items: center; gap: 12px; }
.param-range { flex: 1; accent-color: var(--green); }
.param-num {
  width: 92px; padding: 6px 8px; text-align: right;
  background: var(--bg); border: 1px solid var(--border);
  border-radius: 8px; color: var(--fg); font-variant-numeric: tabular-nums;
}
.btn-save {
  margin-top: 8px; padding: 9px 28px; border: none; border-radius: 10px;
  background: var(--green); color: #04260f; font-weight: 700; font-size: 14px;
  cursor: pointer;
}
.param-help {
  margin: 6px 0 0; font-size: 12px; line-height: 1.5; color: var(--muted);
}
.next-apply { margin: 8px 0 0; }
.strategy-actions {
  display: flex; gap: 10px; margin-top: 14px;
  border-top: 1px solid var(--border); padding-top: 14px;
}
.strategy-actions button {
  padding: 8px 18px; border-radius: 10px; border: 1px solid var(--border);
  background: var(--card); color: var(--fg); font-weight: 600; cursor: pointer;
}
.btn-pause  { color: var(--yellow); }
.btn-resume { color: var(--green); }
.btn-revert { color: var(--muted); }
.btn-save:disabled { opacity: .45; cursor: not-allowed; }

/* 비중 합계 제약 표시 (올웨더) */
.weight-sum {
  margin-top: 12px; font-size: 14px; font-weight: 700;
  font-variant-numeric: tabular-nums; color: var(--green);
}
.weight-sum-warn {
  display: none; margin-left: 8px; font-weight: 500;
  font-size: 12px; color: var(--red);
}
.weight-sum.bad { color: var(--red); }
.weight-sum.bad .weight-sum-warn { display: inline; }

/* 자산 배분 목표 vs 현재 바 차트 (올웨더) */
.alloc-legend {
  display: flex; gap: 16px; margin-bottom: 10px;
  font-size: 12px; color: var(--muted);
}
.alloc-swatch {
  display: inline-block; width: 10px; height: 10px; border-radius: 2px;
  margin-right: 5px; vertical-align: middle;
}
.alloc-swatch-target  { background: var(--gray); }
.alloc-swatch-current { background: var(--green); }
.alloc-row {
  display: grid; grid-template-columns: 64px 1fr 80px;
  align-items: center; gap: 10px; margin: 10px 0;
}
.alloc-name { font-size: 13px; }
.alloc-bars { display: flex; flex-direction: column; gap: 4px; }
.alloc-track {
  background: var(--bg); border: 1px solid var(--border);
  border-radius: 4px; height: 9px; overflow: hidden;
}
.alloc-fill { height: 100%; border-radius: 4px; }
.alloc-fill-target  { background: var(--gray); }
.alloc-fill-current { background: var(--green); }
.alloc-nums {
  display: flex; flex-direction: column; align-items: flex-end;
  font-size: 12px; font-variant-numeric: tabular-nums;
}

/* ── 전체 킬스위치 (제안 3-1) ─────────────────────────── */
.killswitch { margin-top: 14px; }
.btn-killswitch {
  padding: 9px 18px; border-radius: 10px; border: 1px solid var(--red);
  background: rgba(248, 81, 73, .12); color: #ffdcd6; font-weight: 700;
  font-size: 14px; cursor: pointer;
}

/* ── 드로다운 + 유닛 심화 (제안 2-4 / 1-2) ────────────── */
.card-dd { font-size: 12px; margin-top: 6px; font-variant-numeric: tabular-nums; }
.detail-dd { font-size: 13px; margin-top: 6px; font-variant-numeric: tabular-nums; }
.detail-unit { font-size: 12px; margin-top: 6px; }

/* ── 스파크라인 범례/벤치 (제안 2-3 / 3-2) ────────────── */
.spark-legend { display: flex; gap: 14px; margin-top: 4px; font-size: 11px; }
.legend-line {
  display: inline-block; width: 16px; height: 0; vertical-align: middle;
  margin-right: 4px; border-top: 2px solid var(--green);
}
.legend-bench { border-top: 1.5px dashed var(--muted); }
.legend-marker { border-top: 1px dashed var(--yellow); }

/* ── 손익 캘린더 히트맵 (제안 2-2) ────────────────────── */
.cal { table-layout: fixed; }
.cal-total { font-size: 13px; font-weight: 600; margin-left: 6px; }
.cal th { text-align: center; font-size: 11px; padding: 2px; }
.cal-cell {
  text-align: center; height: 34px; border: 1px solid var(--border);
  padding: 0; vertical-align: middle;
}
.cal-day { font-size: 11px; color: var(--fg); font-variant-numeric: tabular-nums; }
.cal-pad { background: transparent; border-color: transparent; }
.pnl-zero { background: var(--card); }
.pnl-pos1 { background: rgba(63, 185, 80, .22); }
.pnl-pos2 { background: rgba(63, 185, 80, .48); }
.pnl-neg1 { background: rgba(248, 81, 73, .22); }
.pnl-neg2 { background: rgba(248, 81, 73, .48); }

/* ── 청산 성과 도넛 (제안 2-5) ────────────────────────── */
.exit-wrap { display: flex; align-items: center; gap: 20px; margin-bottom: 12px; }
.donut { width: 96px; height: 96px; }
.exit-winrate-num {
  font-size: 30px; font-weight: 800; font-variant-numeric: tabular-nums;
}
.donut-key {
  display: inline-block; width: 9px; height: 9px; border-radius: 2px;
  margin-right: 6px; vertical-align: middle;
}

/* ── 시장 판단 (제안 2-6) ─────────────────────────────── */
.regime-on {
  margin-left: 0; color: #d3f9d8; background: rgba(63, 185, 80, .18);
  border-color: var(--green); font-weight: 700;
}
.regime-off {
  margin-left: 0; color: #ffdcd6; background: rgba(248, 81, 73, .18);
  border-color: var(--red); font-weight: 700;
}
.regime-neutral { margin-left: 0; color: var(--muted); font-weight: 700; }
.mi-grid {
  display: flex; gap: 22px; margin: 10px 0; font-size: 14px;
  font-variant-numeric: tabular-nums;
}
.mi-rs { font-size: 14px; margin-top: 8px; }

/* ── 에러 피드 접이 패널 (제안 1-3) ───────────────────── */
.errfeed summary { cursor: pointer; font-weight: 700; }
.errfeed table { margin-top: 10px; }

/* ── 프리셋 (제안 3-3) ────────────────────────────────── */
.presets { margin-top: 16px; border-top: 1px solid var(--border); padding-top: 14px; }
.preset-title { font-size: 14px; margin: 0 0 10px; }
.preset-list { list-style: none; margin: 0 0 12px; padding: 0; }
.preset-list li {
  display: flex; align-items: center; gap: 10px; margin: 6px 0;
}
.preset-name { flex: 1; font-size: 14px; }
.preset-list button, .preset-save button {
  padding: 6px 12px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--card); color: var(--fg); font-size: 13px; cursor: pointer;
}
.btn-preset-apply { color: var(--green); }
.btn-preset-del { color: var(--muted); }
.preset-save { display: flex; gap: 8px; }
.preset-save input {
  flex: 1; padding: 6px 8px; background: var(--bg);
  border: 1px solid var(--border); border-radius: 8px; color: var(--fg);
}
.btn-run-now { color: var(--green); }

/* 파라미터 변경 이력 표 (제안 3-2) */
.history-panel td { font-size: 13px; }

/* 홈 카드: 보유 종목·오늘 손익 한 줄 */
.card-holdings { margin-top: 6px; font-variant-numeric: tabular-nums; }

/* 보유 종목 표: 현재가·평가금액 확충(폭이 넓어 모바일은 살짝 축소) */
.price-asof { margin-top: 8px; }
@media (max-width: 520px) {
  .panel table { font-size: 12.5px; }
  .panel td, .panel th { padding: 5px 4px; }
}

/* 최근 거래: 이유 칸은 작은 글씨 + 줄바꿈 허용(모바일 폭 고려) */
.trades .trade-reason {
  font-size: 12px; white-space: normal; word-break: keep-all;
  line-height: 1.35; max-width: 22ch;
}

/* 봇별 편집 잠금 패널(뷰어) */
.lock-panel { text-align: center; }
.lock-panel h2 { font-size: 15px; }
.unlock-form { display: flex; gap: 8px; justify-content: center;
  margin-top: 10px; flex-wrap: wrap; }
.unlock-form input {
  padding: 9px 12px; background: var(--bg); border: 1px solid var(--border);
  border-radius: 8px; color: var(--fg); font-size: 15px; min-width: 180px;
}
.btn-unlock {
  padding: 9px 20px; border: none; border-radius: 10px;
  background: var(--green); color: #04260f; font-weight: 700; cursor: pointer;
}
.badge-unlock {
  margin-left: 6px; color: #04260f; background: var(--green);
  border-color: var(--green); font-weight: 700;
}
.lock-again { margin-top: 10px; }
.btn-lock-again {
  padding: 6px 14px; border: 1px solid var(--border); border-radius: 8px;
  background: transparent; color: var(--muted); cursor: pointer; font-size: 13px;
}

/* ── 영상이봇 개선(지표설명·모멘텀분해·어제한일·대기현금) ────────── */
.metric-help { margin-top: 8px; }
.metric-help summary {
  cursor: pointer; font-size: 12px; color: var(--muted);
  list-style: none; text-decoration: underline dotted;
}
.metric-help summary::-webkit-details-marker { display: none; }
.metric-defs { margin: 8px 0 0; padding-left: 18px; font-size: 13px; line-height: 1.6; }
.metric-defs li { margin: 3px 0; }
.metric-bench { margin: 8px 0 0; font-size: 12px; }

.plan-cash { margin: 4px 0; }

/* 종목별 판단 안의 개별 종목 펼침(모멘텀 분해·코어 설명) */
.sym-detail > summary {
  cursor: pointer; list-style: none;
}
.sym-detail > summary::-webkit-details-marker { display: none; }
.sym-detail[open] > summary { font-weight: 600; }
.sym-mom, .sym-core {
  margin: 4px 0 6px 12px; font-size: 12.5px; line-height: 1.5;
  color: var(--muted);
}
.sym-bars {
  margin-left: 6px; font-size: 11px; padding: 1px 6px; border-radius: 6px;
  border: 1px solid var(--border);
}
.sym-bars.warn { color: var(--yellow); border-color: var(--yellow); }

.lastcard-list { list-style: none; margin: 6px 0 0; padding: 0; }
.lastcard-list li {
  margin: 6px 0; font-size: 14px; line-height: 1.45;
  font-variant-numeric: tabular-nums; word-break: keep-all;
}

/* ── B6 통합 자산 / B7 봇 리그 (홈) ───────────────────────── */
/* 실전 배지: 모의(회색 테두리)와 시각적으로 구분되게 초록 톤 강조 */
.badge-live {
  color: #7ee787; background: rgba(63, 185, 80, .15);
  border-color: var(--green); font-weight: 700;
}
/* 가로 스택바: 봇별 비중을 CSS width% 로만 표현(JS 없음) */
.port-stack {
  display: flex; height: 18px; border-radius: 6px; overflow: hidden;
  border: 1px solid var(--border); background: var(--bg);
}
.port-seg { height: 100%; }
.port-seg + .port-seg { border-left: 1px solid var(--bg); }
/* 실전=초록(진짜 돈), 모의=회색(가짜 돈) — 카드 뱃지 톤과 일관 */
.port-live  { background: var(--green); }
.port-paper { background: var(--gray); }
.port-legend { list-style: none; margin: 12px 0 0; padding: 0; }
.port-legend li {
  display: flex; align-items: center; gap: 8px; margin: 8px 0;
  font-size: 13px; flex-wrap: wrap;
}
.port-swatch {
  display: inline-block; width: 10px; height: 10px; border-radius: 2px;
  flex: none;
}
.port-name { font-weight: 600; }
.port-pct { margin-left: auto; font-weight: 700; }
.port-eq { flex: none; }
.port-overlap {
  margin-top: 12px; padding: 8px 10px; font-size: 13px;
  border-radius: 8px; color: #ffe4b3;
  background: rgba(210, 153, 34, .12); border: 1px solid var(--yellow);
}
.port-overlap + .port-overlap { margin-top: 6px; }
/* 리그 표: .panel 표 스타일 재사용 + 셀 잘림 방지 */
.league-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.league-table th {
  text-align: left; color: var(--muted); font-weight: 500;
  border-bottom: 1px solid var(--border); padding: 6px 4px;
}
.league-table td {
  padding: 8px 4px; border-bottom: 1px solid var(--border);
  font-variant-numeric: tabular-nums;
}
.league-table tr:last-child td { border-bottom: none; }
.league-table .badge { margin-left: 6px; }

/* 위험 변경 2단계 확인 화면 — 폰 친화(큰 버튼) */
.confirm-warn { font-weight: 700; font-size: 15px; margin: 4px 0 14px; }
.confirm-table { margin-bottom: 18px; }
.confirm-actions {
  display: flex; flex-direction: column; gap: 12px; margin-top: 8px;
}
.btn-confirm-go {
  width: 100%; padding: 16px; font-size: 17px; border-radius: 12px;
  text-align: center;
}
.confirm-go { width: 100%; }
.btn-cancel {
  display: block; width: 100%; box-sizing: border-box; text-align: center;
  padding: 14px; border-radius: 12px; border: 1px solid var(--border);
  background: var(--card); color: var(--muted); font-weight: 600;
  font-size: 15px; text-decoration: none;
}

/* ══ 영상이 적립봇(sector) 전용 — 배지·온도지도·버킷·배정 폼 (append-only) ══ */
.sector-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.sector-regime.regime-on { background: #1f3d2b; color: #3fb950; border-color: #2ea043; }
.sector-regime.regime-off { background: #1c2d45; color: #58a6ff; border-color: #1f6feb; }
.sector-reserve { background: #2d2410; color: #d29922; border-color: #9e6a03; }
.sector-leaders { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 6px 0; }
.badge-leader { background: #3d1d1d; color: #f85149; border: 1px solid #da3633; }
.sector-ledger, .sector-shadow { margin: 6px 0; font-size: 14px; }
.sector-note { font-size: 12px; margin-top: 8px; }
.kill-release-form { margin: 10px 0 4px; display: flex; align-items: center; gap: 10px; }
.btn-kill-release {
  padding: 10px 16px; border-radius: 10px; border: 1px solid #2ea043;
  background: #1f3d2b; color: #3fb950; font-weight: 700; cursor: pointer;
}
.sector-heat {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
  gap: 8px; margin-top: 8px;
}
.heat-tile {
  border: 1px solid var(--border); border-radius: 10px; padding: 10px 8px;
  display: flex; flex-direction: column; gap: 2px; background: var(--card);
}
.heat-tile .heat-name { font-size: 13px; font-weight: 600; }
.heat-tile .heat-rs { font-size: 12px; }
.heat-tile.heat-lead { border-color: #da3633; box-shadow: inset 0 0 0 1px #da3633; }
.heat-tile.heat-def { border-color: #1f6feb; box-shadow: inset 0 0 0 1px #1f6feb; }
.sector-bucket-panel table td, .sector-bucket-panel table th { white-space: nowrap; }
.assign-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 8px 0; }
.assign-form .assign-amount {
  width: 140px; padding: 10px; border-radius: 10px;
  border: 1px solid var(--border); background: var(--bg); color: var(--fg);
  font-size: 15px;
}
.assign-form .assign-currency {
  padding: 10px; border-radius: 10px; border: 1px solid var(--border);
  background: var(--bg); color: var(--fg); font-size: 14px;
}
.assign-form .btn-assign {
  padding: 10px 18px; border-radius: 10px; border: 1px solid #2ea043;
  background: #238636; color: #fff; font-weight: 700; cursor: pointer;
}
.assign-form .assign-hint { font-size: 13px; min-height: 1em; }
