:root{
    /* ══════════════════════════════════════════════════════════
       v7.0 — KBO v0.9 디자인 시스템 (Theia_GRF_Pitching_Report .kbo-scope 이식)
       Navy 1색 통일 + 어스톤 status (sage/amber/rust)
       기존 v5.41 강한 5색(red/blue/violet/green/orange)을 어스톤 톤으로 무채도 낮춤.
       ══════════════════════════════════════════════════════════ */

    /* 회색 9단계 — 유지 */
    --gray-50: #fafafa;
    --gray-100:#f5f5f5;
    --gray-200:#e5e5e5;
    --gray-300:#d4d4d4;
    --gray-400:#a3a3a3;
    --gray-500:#737373;
    --gray-600:#525252;
    --gray-700:#404040;
    --gray-800:#262626;
    --gray-900:#171717;

    /* ── KBO v0.9 원본 토큰 ── */
    --kbo-navy:        #0F2A4A;
    --kbo-navy-deep:   #0A1F38;
    --kbo-navy-soft:   #3B5A82;
    --kbo-navy-tint:   #EAF0F7;
    --kbo-bg:          #FFFFFF;
    --kbo-bg-card:     #FFFFFF;
    --kbo-bg-elev:     #F6F7F9;
    --kbo-bg-tinted:   #F2F5FA;
    --kbo-border:      #E1E5EB;
    --kbo-border-soft: #EEF1F5;
    --kbo-text:        #0F1419;
    --kbo-text-2:      #3F4651;
    --kbo-text-muted:  #6B7280;
    --kbo-good:        #3F7D5C;   /* sage green */
    --kbo-caution:     #A87333;   /* burnt amber */
    --kbo-leak:        #A8443A;   /* rust red */
    --kbo-gold:        #E8C77A;   /* navy 위 핵심 수치 강조 */

    /* ── 기존 변수명 → KBO 매핑 (JS·기존 룰 호환) ── */
    --bg:         var(--kbo-bg);
    --panel:      var(--kbo-bg-card);
    --panel2:     var(--kbo-bg-elev);
    --line:       var(--kbo-border);
    --line-soft:  var(--kbo-border-soft);

    --text:       var(--kbo-text);
    --text-soft:  var(--kbo-text-2);
    --muted:      var(--kbo-text-muted);
    --neutral:    var(--gray-500);

    --accent:     var(--kbo-navy);        /* red → navy 1색 */
    --accent-soft:var(--kbo-navy-soft);
    --accent-bg:  var(--kbo-navy-tint);
    --accent2:    var(--kbo-navy-deep);

    --header-bg:  var(--kbo-navy);
    --header-bg-2:var(--kbo-navy-deep);
    --header-text:#ffffff;

    /* 등급 — 어스톤 톤 */
    --grade-elite: var(--kbo-good);       /* green → sage */
    --grade-above: var(--kbo-navy-soft);
    --grade-avg:   var(--kbo-text-muted);
    --grade-below: var(--kbo-caution);    /* yellow → amber */
    --grade-poor:  var(--kbo-leak);       /* red → rust */

    /* 상태 */
    --good:    var(--grade-elite); --good-bg:rgba(63,125,92,0.08);
    --warn:    var(--grade-below); --warn-bg:rgba(168,115,51,0.08);
    --bad:     var(--grade-poor);  --bad-bg:rgba(168,68,58,0.08);

    /* 프로토콜 — Navy 톤 통일 */
    --theia:  var(--kbo-navy);
    --uplift: var(--kbo-navy-soft);

    /* v7.0 — Theia 의미별 5색을 어스톤 톤으로 무채도 낮춤 (rainbow 방지).
       output·mechanics=navy / transfer·fitness=navy-soft / leak=rust / control=sage / injury=amber */
    --output:    var(--kbo-navy);          /* 출력 — navy (was red #A8443A) */
    --output-bg: var(--kbo-navy-tint);
    --transfer:  var(--kbo-navy-soft);     /* 전달 — soft navy (was blue) */
    --transfer-bg: rgba(59,90,130,0.08);
    --leak:      var(--kbo-leak);          /* 누수 — rust (was violet) */
    --leak-bg:   rgba(168,68,58,0.08);
    --control:   var(--kbo-good);          /* 제구 — sage (was green) */
    --control-bg:rgba(63,125,92,0.08);
    --injury:    var(--kbo-caution);       /* 부상 — amber (was orange) */
    --injury-bg: rgba(168,115,51,0.08);

    --shadow:    none;
    --shadow-lg: 0 2px 6px rgba(15,42,74,0.04);
    --radius:    8px;
  }

  /* v5.41 — utility: 수치 강조용 mono font (Theia 스타일) */
  .mono, .num-mono { font-family: 'JetBrains Mono', 'SF Mono', 'Menlo', monospace; font-variant-numeric: tabular-nums; }

  /* v6.x — Dark theme: data-theme="dark" 적용 시 활성화 */
  [data-theme="dark"]{
    --bg:         #0a1628;          /* deep navy */
    --panel:      #14213d;          /* dark navy panel */
    --panel2:     #1a2a47;          /* slightly lighter */
    --line:       #2c3e5c;
    --line-soft:  #1e2a44;
    --text:       #e5e7eb;
    --text-soft:  #cbd5e1;
    --muted:      #94a3b8;

    --accent:     #ff6b6b;          /* slightly brighter red */
    --accent-soft:#ffa3a3;
    --accent-bg:  rgba(230,57,70,0.18);

    --header-bg:  #14213d;
    --header-bg-2:#1a2a47;
    --header-text:#ffffff;

    --grade-elite: #4ade80;
    --grade-above: #93c5fd;
    --grade-avg:   #94a3b8;
    --grade-below: #fbbf24;
    --grade-poor:  #f87171;

    --good:    var(--grade-elite); --good-bg:rgba(74,222,128,0.10);
    --warn:    var(--grade-below); --warn-bg:rgba(251,191,36,0.10);
    --bad:     var(--grade-poor);  --bad-bg:rgba(248,113,113,0.10);
  }
  /* Dark mode 미세 조정 */
  [data-theme="dark"] .composite-donut .ring{
    background:conic-gradient(
      var(--accent) 0deg var(--ring-deg, 263deg),
      #1a2a47 var(--ring-deg, 263deg) 360deg
    );
  }
  [data-theme="dark"] .bar-row .bar-track{ background:#1a2a47; }
  [data-theme="dark"] .ete-row .lag-track{ background:#1a2a47; }
  [data-theme="dark"] header{ border-bottom:1px solid #2c3e5c; }

  /* Theme toggle 버튼 (헤더 우측) */
  .theme-toggle{
    background:transparent;
    border:1px solid rgba(255,255,255,0.25);
    color:var(--header-text);
    padding:5px 10px;
    border-radius:6px;
    cursor:pointer;
    font-size:14px;
    font-family:inherit;
    line-height:1;
    transition:background 0.15s;
  }
  .theme-toggle:hover{ background:rgba(255,255,255,0.12); }
  .theme-toggle .ico-light{ display:none; }
  .theme-toggle .ico-dark{ display:inline; }
  [data-theme="dark"] .theme-toggle .ico-light{ display:inline; }
  [data-theme="dark"] .theme-toggle .ico-dark{ display:none; }

  *{box-sizing:border-box}
  html,body{margin:0;background:var(--bg);color:var(--text);transition:background 0.2s, color 0.2s}
  body{
    /* v7.4 — Theia 라이브와 동일: Inter 우선, KR fallback. 본문 base 15px. */
    font-family:'Inter','Noto Sans KR','Pretendard','Malgun Gothic',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
    font-size:15px;
    line-height:1.55;
    color:var(--text);
    background:var(--bg);
    font-feature-settings:"ss01","cv11";
    -webkit-font-smoothing:antialiased;
  }

  /* ────────────────── HEADER (Pro 다크 네이비) ────────────────── */
  header{
    background:var(--header-bg);
    color:var(--header-text);
    padding:24px 32px;
    position:relative;
    overflow:hidden;
  }
  header::before{
    /* 좌측 빨강 accent bar */
    content:'';
    position:absolute;
    top:0; left:0; bottom:0;
    width:4px;
    background:var(--accent);
    z-index:1;
  }
  header::after{
    /* 우측 미세 그라데이션 — 시각 깊이 */
    content:'';
    position:absolute;
    top:0; right:0; bottom:0; width:40%;
    background:linear-gradient(90deg, transparent, var(--header-bg-2));
    pointer-events:none;
  }
  header .top{
    position:relative; z-index:1;
    display:flex;justify-content:space-between;align-items:flex-end;gap:18px;flex-wrap:wrap;
  }
  header h1{
    margin:0 0 6px;
    font-size:24px;letter-spacing:-0.02em;font-weight:700;
    color:var(--header-text);
  }
  header .ver{color:rgba(255,255,255,0.65);font-size:13px;font-weight:500;margin-left:8px}
  header .sub{color:rgba(255,255,255,0.75);font-size:13px;font-weight:500}
  header .sub b{color:var(--header-text);font-weight:600}
  header .meta{font-size:12px;color:rgba(255,255,255,0.75);text-align:right;line-height:1.7}
  header .meta b{color:var(--header-text);font-weight:600}

  nav.tabs{
    display:flex;gap:0;
    border-bottom:1px solid var(--line);
    background:var(--panel);
    padding:0 32px;
    position:sticky;top:0;z-index:10;
  }
  nav.tabs button{
    background:transparent;border:none;color:var(--muted);
    padding:14px 20px;font-size:13.5px;cursor:pointer;
    border-bottom:2px solid transparent;font-weight:600;font-family:inherit;
    display:flex;gap:6px;align-items:center;
    letter-spacing:-0.01em;
  }
  nav.tabs button:hover{color:var(--text)}
  nav.tabs button.active{
    color:var(--accent);border-bottom-color:var(--accent);font-weight:700;
  }
  nav.tabs button .num{
    background:var(--accent-bg);color:var(--accent);
    font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600;
  }
  main{padding:28px 32px;max-width:1500px;margin:0 auto}

  .panel{
    background:var(--panel);border:1px solid var(--line);border-radius:8px;
    padding:28px 32px;margin-bottom:24px;box-shadow:var(--shadow);
    position:relative;
  }
  /* v5.41 — Theia 스타일 5색 토큰 좌측 strip (의미별 panel 구분) */
  .panel[data-accent]{ border-left-width:4px; }
  .panel[data-accent="output"]  { border-left-color:var(--output); }
  .panel[data-accent="transfer"]{ border-left-color:var(--transfer); }
  .panel[data-accent="leak"]    { border-left-color:var(--leak); }
  .panel[data-accent="control"] { border-left-color:var(--control); }
  .panel[data-accent="injury"]  { border-left-color:var(--injury); }
  /* h2 앞에 작은 컬러 도트 (panel 색상과 일치) */
  .panel[data-accent] h2::before{
    content:''; display:inline-block; width:5px; height:18px; border-radius:2px;
    background:var(--line);
  }
  .panel[data-accent="output"] h2::before  { background:var(--output); }
  .panel[data-accent="transfer"] h2::before{ background:var(--transfer); }
  .panel[data-accent="leak"] h2::before    { background:var(--leak); }
  .panel[data-accent="control"] h2::before { background:var(--control); }
  .panel[data-accent="injury"] h2::before  { background:var(--injury); }
  .panel h2{
    margin:0 0 18px;font-size:18px;font-weight:700;letter-spacing:-0.01em;
    display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  }
  .panel h2 .badge{
    font-size:10.5px;background:var(--panel2);color:var(--muted);
    padding:3px 8px;border-radius:4px;font-weight:500;
    border:1px solid var(--line);text-transform:uppercase;letter-spacing:0.5px;
  }
  .panel h3{margin:0 0 10px;font-size:13.5px;font-weight:600;color:var(--text-soft)}
  .grid{display:grid;gap:16px}
  .grid-4{grid-template-columns:repeat(4,1fr)}
  .grid-3{grid-template-columns:repeat(3,1fr)}
  .grid-2{grid-template-columns:repeat(2,1fr)}

  /* KPI — Pro 스타일 (border 없는 텍스트 블록 + 큰 숫자 + uppercase 라벨)
     v5.41: padding-top 14px 추가 — inline border-top accent 가 보이도록 */
  .kpi{
    background:transparent;border:none;border-radius:0;
    padding:14px 0 0;
  }
  .kpi .label{
    color:var(--muted);font-size:11px;text-transform:uppercase;
    letter-spacing:0.8px;margin-bottom:8px;font-weight:600;
  }
  .kpi .value{
    font-size:32px;font-weight:700;color:var(--text);
    letter-spacing:-0.02em;
    font-feature-settings:"tnum";line-height:1.1;
  }
  .kpi .value .unit{
    font-size:14px;color:var(--muted);font-weight:500;margin-left:4px;
  }
  .kpi .delta{
    font-size:12px;color:var(--muted);margin-top:6px;font-weight:500;
  }
  .kpi .delta.up   { color:var(--grade-elite); }
  .kpi .delta.down { color:var(--accent); }
  /* KPI grid 안에서 세로 separator (Pro 스타일) */
  .grid-4 .kpi + .kpi,
  .grid-3 .kpi + .kpi,
  .grid-2 .kpi + .kpi{
    border-left:1px solid var(--line);
    padding-left:24px;
  }

  /* ────────────────── v6.x Phase 2: Pro 컴포넌트 클래스 ────────────────── */
  /* Section head (밑줄 있는 섹션 제목) */
  .section-head{
    margin:24px 0 16px;
    padding-bottom:12px;
    border-bottom:1px solid var(--line);
  }
  .section-head h2{
    margin:0;
    font-size:18px;font-weight:700;
    letter-spacing:-0.01em;
    color:var(--text);
    display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  }
  .section-head .desc{
    margin-top:6px;
    font-size:13px;color:var(--muted);
  }

  /* KPI row (Pro 스타일 — 카드 X, 텍스트 블록만) */
  .kpi-row{
    display:grid;
    grid-template-columns:repeat(4, 1fr);
    gap:24px;
    margin:8px 0 20px;
  }
  .kpi-row .kpi + .kpi{
    border-left:1px solid var(--line);
    padding-left:24px;
  }
  .kpi-row.cols-3{ grid-template-columns:repeat(3, 1fr); }
  .kpi-row.cols-2{ grid-template-columns:repeat(2, 1fr); }

  /* Composite (도넛 + 5축 progress bar) */
  .composite{
    display:grid;
    grid-template-columns:240px 1fr;
    gap:48px;
    align-items:center;
  }
  .composite-donut{
    position:relative;
    width:200px; height:200px;
    display:grid; place-items:center;
    margin:0 auto;
  }
  .composite-donut .ring{
    width:200px; height:200px;
    border-radius:50%;
    background:conic-gradient(
      var(--accent) 0deg var(--ring-deg, 263deg),
      var(--gray-100) var(--ring-deg, 263deg) 360deg
    );
    display:grid; place-items:center;
  }
  .composite-donut .inner{
    width:164px; height:164px;
    border-radius:50%;
    background:var(--panel);
    display:grid; place-items:center;
    text-align:center;
  }
  .composite-donut .score-num{
    font-size:54px;font-weight:800;color:var(--text);
    font-feature-settings:"tnum";line-height:1;letter-spacing:-0.04em;
  }
  .composite-donut .score-label{
    margin-top:6px;
    font-size:11px;color:var(--muted);
    text-transform:uppercase;letter-spacing:1.2px;font-weight:600;
  }
  .composite-bars{ display:grid; gap:14px; }
  .bar-row{
    display:grid;
    grid-template-columns:90px 1fr 90px;
    gap:16px;align-items:center;font-size:13px;
  }
  .bar-row .bar-label{ font-weight:600;color:var(--text); }
  .bar-row .bar-track{
    height:10px;background:var(--gray-100);
    border-radius:5px;overflow:hidden;position:relative;
  }
  .bar-row .bar-fill{
    height:100%;
    background:linear-gradient(90deg, var(--accent) 0%, var(--accent-soft) 100%);
    border-radius:5px;transition:width 400ms ease-out;
  }
  .bar-row .bar-value{ text-align:right;font-feature-settings:"tnum";font-size:13px;color:var(--text); }
  .bar-row .bar-value .num{ font-weight:700;font-size:15px; }
  .bar-row .bar-value .grade{ font-size:11px;margin-left:4px;font-weight:600; }
  .bar-row .bar-value .grade.elite { color:var(--grade-elite); }
  .bar-row .bar-value .grade.above { color:var(--grade-above); }
  .bar-row .bar-value .grade.avg   { color:var(--grade-avg); }
  .bar-row .bar-value .grade.below { color:var(--grade-below); }
  .bar-row .bar-value .grade.poor  { color:var(--grade-poor); }

  /* ETE (4 transition lag bar + segment timeline) */
  .ete-grid{
    display:grid;
    grid-template-columns:1fr 280px;
    gap:32px;align-items:start;
  }
  .ete-bars{ display:grid; gap:14px; }
  .ete-row{
    display:grid;
    grid-template-columns:140px 1fr 110px;
    gap:16px;align-items:center;font-size:13px;
  }
  .ete-row .label{ font-weight:600;color:var(--text); }
  .ete-row .label .num{ display:inline-block;width:18px;color:var(--muted);font-weight:500;font-size:12px; }
  .ete-row .lag-track{
    position:relative;height:24px;
    background:var(--gray-100);border-radius:4px;overflow:hidden;
  }
  .ete-row .lag-fill{
    height:100%;
    background:linear-gradient(90deg, var(--accent) 0%, var(--accent-soft) 100%);
    border-radius:4px;
    display:flex;align-items:center;justify-content:flex-end;
    padding:0 10px;color:#fff;font-size:11px;font-weight:700;
    font-feature-settings:"tnum";min-width:48px;
  }
  .ete-row .lag-fill.below{ background:linear-gradient(90deg, var(--grade-below) 0%, #fbbf24 100%); }
  .ete-row .lag-fill.poor{ background:linear-gradient(90deg, var(--grade-poor) 0%, var(--accent-soft) 100%); }
  .ete-row .ete-value{ text-align:right;font-feature-settings:"tnum"; }
  .ete-row .ete-value .score{ font-weight:700;font-size:15px;color:var(--text); }
  .ete-row .ete-value .grade{ font-size:11px;margin-left:4px;font-weight:600; }
  .ete-row .ete-value .grade.elite{ color:var(--grade-elite); }
  .ete-row .ete-value .grade.above{ color:var(--grade-above); }
  .ete-row .ete-value .grade.below{ color:var(--grade-below); }
  .ete-row .ete-value .grade.poor{ color:var(--grade-poor); }
  .sequence-diagram{
    background:var(--panel2);border-radius:6px;padding:20px 16px;
  }
  .sequence-diagram .title{
    font-size:11px;color:var(--muted);
    text-transform:uppercase;letter-spacing:0.8px;
    font-weight:600;margin-bottom:14px;
  }
  .seq-svg{ width:100%;height:auto;display:block; }

  /* GRF panel (좌측 마네킹/차트 + 우측 카드) */
  .grf-grid{
    display:grid;
    grid-template-columns:1fr 380px;
    gap:32px;align-items:stretch;
  }
  .grf-panel{ display:grid;gap:14px;align-content:start; }
  .grf-card{
    background:var(--panel2);
    border-radius:6px;padding:18px 22px;
    border-left:3px solid var(--accent);
  }
  .grf-card.drive{ border-left-color:var(--text); }
  .grf-card .label{
    font-size:11px;color:var(--muted);
    text-transform:uppercase;letter-spacing:0.8px;
    font-weight:700;margin-bottom:10px;
  }
  .grf-card .row{
    display:grid;grid-template-columns:1fr auto;gap:8px;padding:6px 0;font-size:13px;
  }
  .grf-card .row + .row{ border-top:1px solid var(--line); }
  .grf-card .row .name{ color:var(--text-soft); }
  .grf-card .row .val{ font-weight:700;color:var(--text);font-feature-settings:"tnum"; }
  .grf-card .row .val .unit{ color:var(--muted);font-weight:500;font-size:12px;margin-left:2px; }

  /* 약점 Top 3 */
  .weakness-list{ display:grid;gap:0; }
  .weakness-item{
    display:grid;
    grid-template-columns:48px 1fr 140px;
    gap:20px;padding:18px 0;
    border-bottom:1px solid var(--line);
    align-items:start;
  }
  .weakness-item:first-child{ padding-top:0; }
  .weakness-item:last-child{ border-bottom:none;padding-bottom:0; }
  .weakness-rank{
    font-size:32px;font-weight:800;color:var(--accent);
    font-feature-settings:"tnum";letter-spacing:-0.02em;line-height:1;
  }
  .weakness-body .category{
    font-size:12px;color:var(--muted);
    text-transform:uppercase;letter-spacing:0.8px;font-weight:600;margin-bottom:4px;
  }
  .weakness-body .name{
    font-size:16px;font-weight:700;color:var(--text);margin-bottom:6px;
  }
  .weakness-body .prescription{
    font-size:13px;color:var(--text-soft);line-height:1.55;
  }
  .weakness-body .current-vs-target{
    margin-top:8px;font-size:12px;color:var(--muted);font-feature-settings:"tnum";
  }
  .weakness-body .current-vs-target b{ color:var(--text);font-weight:700; }
  .weakness-impact{ text-align:right; }
  .weakness-impact .gain{
    font-size:24px;font-weight:800;color:var(--grade-elite);
    font-feature-settings:"tnum";letter-spacing:-0.02em;line-height:1;
  }
  .weakness-impact .gain-unit{
    font-size:13px;color:var(--muted);font-weight:500;margin-top:2px;
  }
  .weakness-impact .gain-label{
    font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:0.8px;
  }

  /* ────────────────── v6.x Phase 2 끝 ────────────────── */

  .protocol-tag{display:inline-block;font-size:10.5px;padding:2px 7px;border-radius:3px;
                font-weight:600;letter-spacing:.2px;border:1px solid}
  .protocol-tag.theia{background:var(--accent-bg);color:var(--theia);border-color:#f5d0d0}
  .protocol-tag.uplift{background:#fbefff;color:var(--uplift);border-color:#d8b9f0}
  .protocol-tag.empty{background:var(--panel2);color:var(--gray-400);border-color:var(--line-soft)}
  .protocol-tag.fitness{background:#fff3e7;color:#bc4c00;border-color:#fbc996}

  /* 진행 현황 그리드 — 선수 수에 따라 --pc 가 JS로 설정됨 */
  .progress-grid{display:grid;grid-template-columns:160px repeat(var(--pc,20),minmax(28px,1fr));
                 gap:3px;font-size:11px}
  .progress-grid .row-h{font-weight:600;color:var(--muted);padding:6px 4px;
                        text-align:left;font-size:12px}
  .progress-grid .col-h{font-weight:600;color:var(--text);padding:6px 0;
                        text-align:center;font-size:11px;background:var(--panel2);
                        border-radius:3px}
  .progress-grid .cell{padding:6px 0;text-align:center;border-radius:3px;cursor:pointer;
                       border:1px solid transparent}
  .progress-grid .cell.done{background:var(--good-bg);color:var(--good);font-weight:600}
  .progress-grid .cell.partial{background:var(--warn-bg);color:var(--warn);font-weight:600}
  .progress-grid .cell.empty{background:#f6f8fa;color:#bbb;border:1px dashed var(--line-soft)}
  .progress-grid .cell:hover{outline:2px solid var(--accent)}

  /* Heatmap 테이블 */
  table.heatmap{border-collapse:separate;border-spacing:3px;width:100%;font-size:12px}
  table.heatmap th{background:var(--panel2);color:var(--text-soft);font-weight:600;
                   padding:8px 6px;text-align:center;border-radius:4px}
  table.heatmap td{padding:7px 4px;text-align:center;border-radius:4px;
                   font-variant-numeric:tabular-nums;font-weight:500}
  table.heatmap td.name{background:var(--panel2);text-align:left;
                        padding-left:10px;font-weight:500;cursor:pointer;color:var(--text)}
  table.heatmap td.name:hover{background:var(--accent-bg);color:var(--accent)}
  table.heatmap td.empty{background:#f6f8fa;color:#bbb;font-size:11px;border:1px dashed var(--line-soft)}

  .cell-score{color:#fff;font-weight:600}
  /* v5.42 — Score 5단계 (옵션 Y: 채도 낮춘 traffic-light) */
  /* v5.41: 6단계 등급 (gradeOf 임계와 통일). s5+ ≥110 · s5 ≥90 · s4 ≥70 · s3 ≥50 · s2 ≥30 · s1 그 외 */
  .s5p{background:#14532d;color:#fff}      /* Elite+ (≥110) — 가장 진한 녹 */
  .s5{background:#166534;color:#fff}       /* Elite (≥90) */
  .s4{background:#4d7c0f;color:#fff}       /* Above (≥70) */
  .s3{background:#A87333;color:#fff}       /* Avg (≥50) */
  .s2{background:#c2410c;color:#fff}       /* 개선 여지 (≥30) */
  .s1{background:#991b1b;color:#fff}       /* 보강 우선 */

  table.data{width:100%;border-collapse:collapse;font-size:12.5px}
  table.data thead th{background:var(--panel2);padding:9px 10px;text-align:left;
                              vertical-align:middle;
                              /* v8.23: 사용자 요청 — 숫자 컬럼 헤더는 가운데 정렬 (시각적 맞춤) */
                            }
  table.data thead th.right { text-align: center !important; }
  table.data thead tr.group-header th.right { text-align: center !important; }
  table.data thead tr.group-header th[colspan] { text-align: center !important; }
  /* 데이터 셀은 right-align 유지 (소수점 정렬) */
  table.data tbody td.right { text-align: right; }
  /* dummy rule terminator */
  table.data thead th[data-key]{background:var(--panel2);padding:9px 10px;text-align:left;
                      border-bottom:1px solid var(--line);font-weight:600;color:var(--text-soft);
                      cursor:pointer;user-select:none;font-size:11.5px;
                      text-transform:uppercase;letter-spacing:.3px}
  table.data thead th:hover{color:var(--accent)}
  table.data thead th.sort-asc::after{content:" ▲";color:var(--accent);font-size:10px}
  table.data thead th.sort-desc::after{content:" ▼";color:var(--accent);font-size:10px}
  table.data tbody td{padding:9px 10px;border-bottom:1px solid var(--line-soft);
                      font-variant-numeric:tabular-nums}
  table.data tbody tr{cursor:pointer}
  table.data tbody tr:hover{background:var(--panel2)}
  table.data .num,.right{text-align:right}

  /* 컨트롤 */
  .controls{display:flex;gap:12px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
  select, input[type=text], input[type=number]{
    background:#fff;border:1px solid var(--line);color:var(--text);
    padding:7px 11px;border-radius:6px;font-size:13px;font-family:inherit}
  select:focus,input:focus{outline:none;border-color:var(--accent);
                            box-shadow:0 0 0 3px rgba(9,105,218,.15)}
  button.btn{background:#fff;border:1px solid var(--line);color:var(--text);
             padding:7px 14px;border-radius:6px;cursor:pointer;font-family:inherit;
             font-size:13px;font-weight:500}
  button.btn:hover{background:var(--panel2);border-color:var(--accent)}
  button.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
  button.btn.primary:hover{background:#0860c4}
  button.btn.ghost{background:transparent;border-color:transparent;color:var(--accent)}

  .legend{font-size:11.5px;color:var(--muted);display:flex;gap:14px;align-items:center;
          flex-wrap:wrap}
  .legend .swatch{display:inline-block;width:12px;height:12px;border-radius:3px;
                  vertical-align:middle;margin-right:5px;border:1px solid rgba(0,0,0,.05)}

  /* 선수 리포트 섹션 */
  .player-meta{display:flex;gap:16px;color:var(--muted);font-size:12.5px;
               margin:8px 0 16px;flex-wrap:wrap}
  .player-meta b{color:var(--text);font-weight:600}

  .scard{background:var(--panel2);border:1px solid var(--line-soft);border-radius:6px;
         padding:14px}
  .scard h3{margin:0 0 8px;font-size:13px;display:flex;justify-content:space-between;
            align-items:center;color:var(--text)}
  .scard .row{display:flex;justify-content:space-between;font-size:12.5px;
              padding:5px 0;border-bottom:1px dashed var(--line-soft)}
  .scard .row:last-child{border-bottom:none}
  .scard .row .v{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
  .scard .row .v.empty{color:#aaa;font-weight:400}
  .scard .grp-title{font-size:11px;color:var(--muted);margin:10px 0 4px;
                    text-transform:uppercase;letter-spacing:.4px;font-weight:600}

  /* 체력 4테스트 카드 */
  .fit-card{background:#fff;border:1px solid var(--line);border-radius:6px;padding:14px}
  .fit-card .test-name{font-size:13px;font-weight:700;color:var(--text);
                       margin-bottom:2px;display:flex;justify-content:space-between;
                       align-items:center}
  .fit-card .test-sub{font-size:11px;color:var(--muted);margin-bottom:10px;
                      padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
  .fit-card .var-row{display:flex;justify-content:space-between;font-size:12px;
                     padding:4px 0}
  .fit-card .var-row .lbl{color:var(--text-soft)}
  .fit-card .var-row .val{font-weight:600;font-variant-numeric:tabular-nums}
  .fit-card .star{color:#A87333;font-size:10px;margin-left:4px}
  .fit-card .pct-bar{height:4px;background:var(--line-soft);border-radius:2px;
                     margin-top:3px;overflow:hidden}
  .fit-card .pct-bar > div{height:100%;background:var(--accent);border-radius:2px}

  .chart-wrap{position:relative;height:280px}
  .chart-wrap.sm{height:220px}
  .chart-wrap.lg{height:340px}
  .chart-wrap.xl{height:400px}

  /* 데이터 관리 탭 */
  .upload-zone{border:2px dashed var(--line);background:var(--panel2);
               border-radius:8px;padding:24px;text-align:center;color:var(--muted);
               cursor:pointer;transition:all .2s}
  .upload-zone:hover{border-color:var(--accent);background:var(--accent-bg);color:var(--accent)}
  .upload-zone .ico{font-size:24px;margin-bottom:8px;opacity:.6}
  .upload-zone .hint{font-size:11.5px;margin-top:6px;color:var(--muted)}

  .step-list{counter-reset:step;padding-left:0;list-style:none}
  .step-list li{counter-increment:step;padding:10px 0 10px 36px;position:relative;
                border-bottom:1px solid var(--line-soft)}
  .step-list li:last-child{border-bottom:none}
  .step-list li::before{content:counter(step);position:absolute;left:0;top:9px;
                         width:24px;height:24px;background:var(--accent);
                         color:#fff;border-radius:50%;text-align:center;
                         font-weight:600;font-size:12px;line-height:24px}
  .step-list li b{color:var(--text)}

  .footnote{font-size:11.5px;color:var(--muted);margin-top:14px;padding:12px 14px;
            background:#f6f8fa;border-radius:6px;border-left:3px solid var(--accent)}
  .footnote b{color:var(--text)}
  .hidden{display:none !important}

  /* 향후 활성화 안내 */
  .placeholder-box{padding:40px 20px;text-align:center;color:var(--muted);
                   background:var(--panel2);border-radius:8px;border:1px dashed var(--line)}
  .placeholder-box .big{font-size:28px;color:var(--neutral);margin-bottom:8px}
  .placeholder-box .ttl{font-size:14px;font-weight:600;color:var(--text-soft);margin-bottom:4px}

  details{margin-top:8px}
  details summary{cursor:pointer;color:var(--accent);font-size:12.5px;padding:6px 0;font-weight:500}
  details summary:hover{text-decoration:underline}
  pre.code{background:#f6f8fa;border:1px solid var(--line);border-radius:6px;
           padding:10px;font-size:11.5px;overflow-x:auto;font-family:"SF Mono",Consolas,monospace}

  .pill{display:inline-block;font-size:10.5px;padding:1px 6px;border-radius:10px;
        font-weight:600}
  .pill.good{background:var(--good-bg);color:var(--good)}
  .pill.warn{background:var(--warn-bg);color:var(--warn)}
  .pill.bad{background:var(--bad-bg);color:var(--bad)}

  /* 실측 데이터 마커 — 셀 우상단에 작은 점 */
  .real-marker{position:relative}
  .real-marker::after{
    content:''; position:absolute; top:3px; right:3px;
    width:6px; height:6px; border-radius:50%;
    background:var(--accent); box-shadow:0 0 0 1.5px #fff;
    pointer-events:none;
  }
  /* 진행 그리드의 done 셀에서는 다른 색(이미 초록 배경) */
  .progress-grid .real-marker::after{background:var(--accent)}
  /* 히트맵 cell-score(짙은 배경)에서는 흰 점 + 진한 테두리 */
  table.heatmap .cell-score.real-marker::after{background:#fff;box-shadow:0 0 0 1.5px rgba(0,0,0,.4)}

  .real-legend{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}
  .real-legend .dot{display:inline-block;width:6px;height:6px;border-radius:50%;
                    background:var(--accent);box-shadow:0 0 0 1.5px #fff;border:1px solid var(--line-soft)}

  /* 평소: 인쇄 전용 영역 숨김 */
  .batch-print-only, .coach-print-only{display:none}

  /* 콤팩트 선수 카드 (인쇄용 1페이지 1선수) */
  .pcard{padding:14px 16px;font-size:11.5px;page-break-after:always;break-after:page}
  .pcard:last-child{page-break-after:auto}
  .pcard .ph{display:flex;justify-content:space-between;align-items:flex-end;
             padding-bottom:8px;border-bottom:2px solid #1f2328;margin-bottom:10px}
  .pcard .ph .nm{font-size:18px;font-weight:700}
  .pcard .ph .meta{font-size:11px;color:#444;text-align:right}
  .pcard .kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}
  .pcard .kpi-row > div{background:#f6f8fa;border:1px solid #d0d7de;
                         border-radius:5px;padding:7px 9px}
  .pcard .kpi-row .lbl{font-size:9.5px;color:#656d76;text-transform:uppercase;letter-spacing:.4px}
  .pcard .kpi-row .val{font-size:16px;font-weight:700;margin-top:2px}
  .pcard .sec-title{font-size:11.5px;font-weight:700;background:var(--accent);color:#fff;
                    padding:4px 8px;border-radius:3px;margin:10px 0 6px;display:inline-block}
  .pcard .sec-title.tr{background:#3F7D5C}
  .pcard .sec-title.lk{background:#A8443A}
  .pcard .sec-title.gr{background:#bc4c00}
  .pcard .row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:8px}
  .pcard .mini-card{background:#f6f8fa;border:1px solid #d0d7de;border-radius:5px;padding:7px 9px}
  .pcard .mini-card .ttl{font-weight:700;font-size:11px;margin-bottom:4px}
  .pcard .mini-card .kv{display:flex;justify-content:space-between;font-size:10.5px;padding:2px 0}
  .pcard .mini-card .kv b{font-variant-numeric:tabular-nums}
  .pcard .zonebar{display:flex;align-items:center;gap:5px;font-size:10px;margin:3px 0}
  .pcard .zonebar .zlbl{flex:0 0 75px;color:#444}
  .pcard .zonebar .zbar{flex:1;height:6px;background:#e1e4e8;border-radius:3px;overflow:hidden}
  .pcard .zonebar .zbar > div{height:100%}
  .pcard .zonebar .zval{flex:0 0 22px;text-align:right;font-weight:700;font-variant-numeric:tabular-nums}
  .pcard .causal{display:flex;gap:6px;align-items:center;padding:4px 6px;
                 background:#fff;border:1px solid #d0d7de;border-radius:4px;
                 font-size:10.5px;margin:3px 0}
  .pcard .causal .num{flex:0 0 18px;height:18px;border-radius:50%;color:#fff;
                       text-align:center;line-height:18px;font-weight:700;font-size:10px}
  .pcard .footer-line{font-size:10px;color:#666;margin-top:8px;padding-top:6px;
                       border-top:1px dashed #d0d7de;display:flex;justify-content:space-between}
  /* 미니 라디아 SVG 컨테이너 */
  .pcard .mini-radar{width:100%;height:140px}

  /* 코치 리포트 인쇄 카드 */
  .coach-rep{padding:18px 20px;font-size:12px;line-height:1.55}
  .coach-rep h1{margin:0 0 4px;font-size:20px;font-weight:700}
  .coach-rep .doc-meta{color:#444;font-size:11px;margin-bottom:12px;
                       padding-bottom:8px;border-bottom:2px solid #1f2328}
  .coach-rep h2{font-size:13px;font-weight:700;background:var(--accent);color:#fff;
                padding:5px 10px;border-radius:3px;margin:14px 0 8px;display:inline-block}
  .coach-rep h2.warn{background:#A8443A}
  .coach-rep h2.ok{background:#3F7D5C}
  .coach-rep .grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
  .coach-rep .gr-kpi{background:#f6f8fa;border:1px solid #d0d7de;padding:8px 10px;border-radius:5px}
  .coach-rep .gr-kpi .lbl{font-size:10px;color:#656d76;text-transform:uppercase;letter-spacing:.3px}
  .coach-rep .gr-kpi .val{font-size:18px;font-weight:700;margin-top:2px}
  .coach-rep .gr-kpi .sub{font-size:10px;color:#666;margin-top:2px}
  .coach-rep .group-row{display:flex;align-items:center;gap:8px;padding:6px 10px;
                         background:#f6f8fa;border-left:4px solid #ccc;border-radius:4px;
                         margin:4px 0;font-size:11.5px}
  .coach-rep .group-row .name{font-weight:700;flex:0 0 100px}
  .coach-rep .group-row .count{flex:0 0 50px;font-weight:700}
  .coach-rep .group-row .members{flex:1;font-size:11px;color:#444}
  .coach-rep table{width:100%;border-collapse:collapse;font-size:10.5px;margin-top:4px}
  .coach-rep table th{background:#1f2328;color:#fff;padding:5px 7px;text-align:left}
  .coach-rep table td{padding:5px 7px;border-bottom:1px solid #d0d7de;font-variant-numeric:tabular-nums}
  .coach-rep .pattern{padding:8px 10px;background:#fff8f0;border:1px solid #ffd1b3;
                       border-radius:5px;margin:5px 0;font-size:11.5px}
  .coach-rep .pattern b{color:#bc4c00}
  .coach-rep .action{padding:8px 10px;background:#fff;border:1px solid #d0d7de;
                      border-radius:5px;margin:5px 0;font-size:11.5px}
  .coach-rep .action.warn{background:#ffebe9;border-color:#ffaaa3}
  .coach-rep .action.ok{background:#dafbe1;border-color:#74dba1}

  /* ─── 인쇄 / PDF (v1.7) ─────────────────────────────────────
     기본 동작:
     - "선수 리포트" 탭에서 인쇄 → 해당 선수 1장만 출력
     - 다른 탭에서 인쇄 → 해당 탭 보이는 내용 출력
     - 모든 탭의 숨김 영역은 인쇄에서도 숨김 (탭 전환 안 보임)
     ────────────────────────────────────────────────────────── */
  @media print{
    @page{ size: A4 portrait; margin: 12mm; }
    /* 색상·배경 보존 (Chrome/Edge/Safari) */
    *, *::before, *::after{
      -webkit-print-color-adjust: exact !important;
      print-color-adjust: exact !important;
      color-adjust: exact !important;
    }
    body{background:#fff;font-size:11px}
    main{padding:0;max-width:none}
    header{padding:8px 0;border-bottom:1px solid #999}
    header .top{align-items:flex-start}
    header h1{font-size:14px}
    header .ver, header .sub, header .meta{font-size:10px}
    /* 네비/컨트롤 숨김 */
    nav.tabs, .controls, .upload-zone, button.btn,
    #theia-json-result, .footnote details, details > summary{display:none !important}
    /* details 펼친 내용은 인쇄에 노출 */
    details[open] > *{display:block !important}
    details[open] > summary{display:none !important}
    /* 패널 기본 */
    .panel{box-shadow:none;border:1px solid #bbb;padding:10px 12px;margin-bottom:10px;
           page-break-inside:avoid;break-inside:avoid}
    .panel h2{font-size:12px;margin-bottom:8px}
    .panel h3{font-size:11px}
    .kpi{padding:8px 10px}
    .kpi .value{font-size:18px}
    .kpi .label, .kpi .delta{font-size:10px}
    /* 차트는 작게 고정 */
    .chart-wrap{height:200px !important}
    .chart-wrap.lg, .chart-wrap.xl{height:240px !important}
    /* 테이블 */
    table.data, table.heatmap{font-size:10px}
    table.data thead th{padding:5px 6px;font-size:10px}
    table.data tbody td{padding:5px 6px}
    /* 진행 그리드는 인쇄에서 너무 좁아지므로 컬럼 크기 조정 */
    .progress-grid{font-size:9px}
    .progress-grid .col-h{padding:3px 0;font-size:9px}
    .progress-grid .cell{padding:3px 0}
    /* 새 페이지 시작 — 큰 섹션 사이 */
    .panel.print-break{page-break-before:always;break-before:page}
    /* 카드 4개 그리드는 인쇄에서도 4개 유지하되 좁게 */
    .grid-4{gap:6px}
    .grid-3, .grid-2{gap:8px}
    /* 체력 카드 4개는 한 줄 유지 */
    .fit-card{padding:8px 10px;page-break-inside:avoid}
    .fit-card .test-name{font-size:11px}
    .fit-card .test-sub{font-size:9px;margin-bottom:6px}
    .fit-card .var-row{font-size:10px;padding:2px 0}
    /* 선수 리포트의 회차 카드 */
    .scard{padding:8px 10px;page-break-inside:avoid}
    .scard h3{font-size:10.5px}
    .scard .row{font-size:10px;padding:2px 0}
    /* hidden 탭은 인쇄에서도 숨김 */
    .hidden{display:none !important}

    /* ─── 일괄 인쇄 모드 (선수 PDF 일괄 출력) ─── */
    body.printing-batch header,
    body.printing-batch nav.tabs,
    body.printing-batch main{ display:none !important; }
    body.printing-batch .batch-print-only{
      display:block !important; padding:0; margin:0;
      background:#fff; color:#000;
    }
    /* ─── 코치 리포트 인쇄 모드 ─── */
    body.printing-coach header,
    body.printing-coach nav.tabs,
    body.printing-coach main{ display:none !important; }
    body.printing-coach .coach-print-only{
      display:block !important; padding:0; margin:0;
      background:#fff; color:#000;
    }
  }


/* ════════════════════════════════════════════════════════
   v7.1 KBO v0.9 컴포넌트 CSS — Theia_GRF_Pitching_Report v0.81 원본과 1:1 일치.
   .kbo-scope 래퍼 안에서만 적용.
   ════════════════════════════════════════════════════════ */

.kbo-scope {
  font-family: 'Inter', 'Noto Sans KR', 'Malgun Gothic', 'Pretendard', -apple-system, system-ui, sans-serif;
  font-size: 15px; line-height: 1.55;
  color: var(--kbo-text); background: var(--kbo-bg);
  box-sizing: border-box;
}
.kbo-scope * { box-sizing: border-box; }
.kbo-scope svg { max-width: 100% !important; height: auto !important; }

.kbo-scope .card-elev,
.kbo-scope .cat-card { background: #FFFFFF !important; border-color: #E1E5EB !important; box-shadow: none !important; }
.kbo-scope details { background: #F6F7F9 !important; }

/* 타이포 */
.kbo-scope .kbo-display { font-family: 'Space Grotesk', 'Noto Sans KR', system-ui, sans-serif; font-weight: 700; letter-spacing: -0.01em; }
.kbo-scope .kbo-mono    { font-family: 'JetBrains Mono', 'SF Mono', monospace; font-variant-numeric: tabular-nums; }
.kbo-scope .kbo-eyebrow {
  font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 600;
  letter-spacing: 0.14em; color: var(--kbo-text-muted); text-transform: uppercase;
}

/* 패딩 */
.kbo-scope .kbo-pad { padding: 24px 20px 40px; }

/* 페이지 헤더 — navy bottom border + 아웃라인 P# + navy 제목 */
.kbo-scope .kbo-page-head {
  display: flex; align-items: baseline; gap: 8px;
  padding-bottom: 14px; margin-bottom: 20px;
  border-bottom: 2px solid var(--kbo-navy);
  flex-wrap: wrap;
}
.kbo-scope .kbo-page-num {
  font-family: 'Space Grotesk', system-ui, sans-serif; font-weight: 700; font-size: 11px;
  letter-spacing: 0.16em; color: var(--kbo-navy);
  padding: 4px 9px; border: 1.5px solid var(--kbo-navy); border-radius: 4px;
}
.kbo-scope .kbo-page-title-en {
  font-family: 'Space Grotesk', system-ui, sans-serif; font-weight: 700; font-size: 20px;
  color: var(--kbo-navy); letter-spacing: -0.01em;
}
.kbo-scope .kbo-page-title-kr { font-size: 13px; color: var(--kbo-text-muted); margin-left: 2px; }
.kbo-scope .kbo-page-q { flex-basis: 100%; font-size: 12px; color: var(--kbo-text-muted); margin-top: 4px; }

/* Headline */
.kbo-scope .kbo-headline {
  font-family: 'Space Grotesk', system-ui, sans-serif; font-weight: 700;
  font-size: 22px; line-height: 1.32; letter-spacing: -0.012em;
  color: var(--kbo-text);
}
.kbo-scope .kbo-headline em { font-style: normal; color: var(--kbo-navy); }

/* 카드 */
.kbo-scope .kbo-card {
  background: var(--kbo-bg-card); border: 1px solid var(--kbo-border);
  border-radius: 10px; box-shadow: var(--kbo-shadow, none);
}

/* Confidence */
.kbo-scope .kbo-conf {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: 'JetBrains Mono', monospace; font-size: 11px; font-weight: 600;
  padding: 3px 10px; border-radius: 999px; letter-spacing: 0.04em; text-transform: uppercase;
}
.kbo-scope .kbo-conf-h { color: var(--kbo-good);    background: rgba(63,125,92,0.08);  border: 1px solid var(--kbo-good); }
.kbo-scope .kbo-conf-m { color: var(--kbo-caution); background: rgba(168,115,51,0.08); border: 1px solid var(--kbo-caution); }
.kbo-scope .kbo-conf-l { color: var(--kbo-leak);    background: rgba(168,68,58,0.08);  border: 1px solid var(--kbo-leak); }

/* Pill (status) */
.kbo-scope .kbo-pill {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: 'JetBrains Mono', monospace; font-size: 11px; font-weight: 700;
  padding: 4px 10px; border-radius: 4px; letter-spacing: 0.06em; text-transform: uppercase;
}
.kbo-scope .kbo-pill::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.kbo-scope .kbo-pill-good    { color: var(--kbo-good);    background: rgba(63,125,92,0.08); }
.kbo-scope .kbo-pill-caution { color: var(--kbo-caution); background: rgba(168,115,51,0.10); }
.kbo-scope .kbo-pill-leak    { color: var(--kbo-leak);    background: rgba(168,68,58,0.08); }
.kbo-scope .kbo-pill-risk    { color: var(--kbo-leak);    background: rgba(168,68,58,0.08); }

/* 큰 수치 (metric) */
.kbo-scope .kbo-metric-num {
  font-family: 'Space Grotesk', system-ui, sans-serif; font-weight: 700; line-height: 0.95;
  letter-spacing: -0.02em;
}
.kbo-scope .kbo-metric-unit {
  font-family: 'Inter', sans-serif; font-weight: 400; color: var(--kbo-text-muted);
  font-size: 0.4em; margin-left: 4px;
}

/* plain-language 박스 (KBO navy tint + tag + text) */
.kbo-scope .kbo-plain {
  background: var(--kbo-navy-tint); border-radius: 10px;
  padding: 12px 14px; margin-top: 14px;
  display: flex; gap: 10px; align-items: flex-start;
}
.kbo-scope .kbo-plain-tag {
  flex: 0 0 auto; font-family: 'JetBrains Mono', monospace;
  font-size: 10px; font-weight: 700; color: var(--kbo-navy);
  letter-spacing: 0.08em; text-transform: uppercase;
  background: #fff; border: 1px solid var(--kbo-navy);
  padding: 3px 7px; border-radius: 4px; line-height: 1; margin-top: 1px;
}
.kbo-scope .kbo-plain-text { font-size: 13.5px; color: var(--kbo-text); line-height: 1.55; }
.kbo-scope .kbo-plain-text b { font-weight: 700; color: var(--kbo-navy); }

/* details */
.kbo-scope details summary { cursor:pointer; font-size:12px; color:var(--kbo-navy-soft); font-weight:600; }
.kbo-scope details summary:hover { color: var(--kbo-navy); }
.kbo-scope details[open] summary { margin-bottom: 8px; }

/* 5 카테고리 좌측 보더 카드 */
.kbo-scope .cat-card.OUTPUT   { border-left: 4px solid var(--kbo-navy); }
.kbo-scope .cat-card.TRANSFER { border-left: 4px solid var(--kbo-navy-soft); }
.kbo-scope .cat-card.LEAK     { border-left: 4px solid var(--kbo-leak); }
.kbo-scope .cat-card.CONTROL  { border-left: 4px solid var(--kbo-good); }
.kbo-scope .cat-card.INJURY   { border-left: 4px solid var(--kbo-caution); }

/* 모바일 — 반응형 (Theia v0.81 원본) */
@media (max-width: 600px) {
  .kbo-scope .kbo-pad { padding: 18px 14px 32px; }
  .kbo-scope .kbo-headline { font-size: 19px; line-height: 1.32; }
  .kbo-scope .kbo-page-title-en { font-size: 18px; }
  .kbo-scope .kbo-metric-num  { font-size: clamp(24px, 8vw, 44px) !important; }
  .kbo-scope .kbo-metric-unit { font-size: clamp(11px, 3.2vw, 18px) !important; }
  .kbo-scope div[style*="grid-template-columns: repeat"] > * { min-width: 0 !important; }
  .kbo-scope div[style*="grid-template-columns: repeat(3"],
  .kbo-scope div[style*="grid-template-columns: repeat(4"],
  .kbo-scope div[style*="grid-template-columns: repeat(5"] {
    grid-template-columns: 1fr 1fr !important; gap: 10px !important;
  }
  .kbo-scope div[style*="grid-template-columns: 1.15fr 1fr"],
  .kbo-scope div[style*="grid-template-columns: 1fr 1fr"][style*="gap: 18px"] {
    grid-template-columns: 1fr !important;
  }
  .kbo-scope span[style*="font-size: 56px"] { font-size: 36px !important; }
  .kbo-scope span[style*="font-size: 64px"] { font-size: 40px !important; }
  .kbo-scope span[style*="font-size: 88px"] { font-size: 52px !important; }
  .kbo-scope span[style*="font-size: 44px"] { font-size: 32px !important; }
}
@media (max-width: 420px) {
  .kbo-scope .kbo-pad { padding: 14px 12px 28px; }
  .kbo-scope .kbo-headline { font-size: 17px; }
  .kbo-scope .kbo-page-q { font-size: 11px; }
  .kbo-scope div[style*="grid-template-columns: repeat"] { grid-template-columns: 1fr !important; }
}

/* ============================================================
   v8.0y — dashboard.html inline <style> 의 인쇄용 미디어 쿼리 추가
   ============================================================ */
   v7.20: 인쇄/PDF 리포트 디자인 — 웹 수준 품질 유지
   ════════════════════════════════════════════════════════════════════
   목표: window.print() 또는 "PDF로 저장" 시 P1~P6 모든 카드의
        디자인(navy 배경, 색상, 그라데이션, 그림자→보더)을 웹 화면과
        동등하게 출력. 페이지 break는 P 섹션 사이로 자연스럽게.
   ──────────────────────────────────────────────────────────────────── */
@media print {

  /* ───── 1) 전역 색상·배경 보존 ───── */
  *, *::before, *::after {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
    color-adjust: exact !important;
  }
  html, body {
    background: #ffffff !important;
    margin: 0 !important;
    padding: 0 !important;
  }

  /* ───── 2) 화면 전용 UI 모두 숨김 ───── */
  header.coach-h, nav.tabs, footer,
  .player-select-wrap, button.btn, .btn,
  #data-iframe, .upload-zone, .controls,
  .group-pill, .priority-hint, .empty-state,
  .section.tab-pane:not(.active),
  #player-tabs > *:not(#tab-player),
  details.kbo-advanced-folder summary,    /* 산출식 details summary 화살표 숨김 */
  #theia-rap-section,                      /* Rapsodo 분석 부가 — 인쇄에선 생략 */
  /* v8.23: 연구원용 설명 카드는 인쇄시 완전 숨김 */
  .research-explain,
  /* 화면 전용 caveat / footnote 류도 숨김 (결과만 깔끔하게) */
  .screen-only,
  /* 리포트 저장/공유 버튼 영역 */
  #report-save-share
  { display: none !important; }

  /* details는 항상 펼친 상태 (산출식·근거 노출) — 단 .research-explain 제외 */
  details:not(.research-explain details) { display: block !important; }
  details > *:not(summary) { display: block !important; }
  /* v8.23: P2 (체력) 의 분석가용 details (cohort 표·17변인 표) 도 인쇄시 숨김 — 결과만 */
  #player-p2-fitness details { display: none !important; }
  #player-p2-fitness details > summary { display: none !important; }

  /* ───── 3) 페이지 설정 ───── */
  @page {
    size: A4 portrait;
    margin: 10mm 10mm 12mm 10mm;
  }
  body {
    font-size: 10.5pt;
    line-height: 1.45;
    color: #0F1419;
  }
  main { max-width: none; padding: 0; margin: 0; }

  /* ───── 4) P 섹션 페이지 break 관리 ───── */
  /* 각 P 섹션은 가능한 한 한 페이지에. 너무 크면 자동 분할. */
  section[id^="player-p"], #player-p1-velocity,
  #player-opp-map, #player-p3-transmission,
  #player-p4-rootcause, #player-p6-action,
  #player-p7-athlete {
    page-break-inside: auto;
    break-inside: auto;
    margin-bottom: 6mm !important;
  }
  /* P2(체력)·P5·P6·P7은 새 페이지에서 시작 (큰 차트/카드 인쇄용) */
  #player-p2-fitness,
  #player-p4-rootcause,
  #player-p6-action,
  #player-p7-athlete {
    page-break-before: always;
    break-before: page;
  }
  /* 마네킹·시퀀스 차트·에너지 카드는 분할 금지 */
  .kbo-card,
  svg[viewBox],
  [class*="kbo-page-head"] {
    page-break-inside: avoid;
    break-inside: avoid;
  }

  /* ───── 5) P 페이지 헤더 (P1·P2·P3 ...) ───── */
  .kbo-page-head {
    background: #0F2A4A !important;
    color: #fff !important;
    padding: 5mm 6mm !important;
    border-radius: 4px !important;
    margin-bottom: 4mm !important;
    border: 0 !important;
  }
  .kbo-page-head .kbo-page-num {
    background: #FFD166 !important;
    color: #0F2A4A !important;
  }
  .kbo-page-head .kbo-page-title-en,
  .kbo-page-head .kbo-page-q {
    color: #fff !important;
  }

  /* ───── 6) 카드 일반 — 그림자→보더 ───── */
  .kbo-card {
    box-shadow: none !important;
    border: 0.6pt solid #d1d5db !important;
    border-radius: 4px !important;
  }
  /* navy 카드 (P5·P6) — 배경·텍스트 색 강제 유지 */
  [style*="background:#0F2A4A"],
  [style*="background:#1e3a5f"] {
    box-shadow: none !important;
  }

  /* ───── 7) P1 4-카드 grid ───── */
  .vs-cards {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr) !important;
    gap: 3mm !important;
    margin-bottom: 5mm !important;
  }
  .vs-card {
    padding: 4mm 5mm !important;
    background: #fff !important;
    border: 0.6pt solid #d1d5db !important;
    border-radius: 4px !important;
  }
  .vs-card-value { font-size: 18pt !important; }
  .vs-card-unit  { font-size: 9pt !important; }
  .vs-card-gain  { font-size: 9pt !important; }
  .vs-card-note  { font-size: 8.5pt !important; }

  /* ───── 8) P2 4분면 차트 — 외부 범례 + SVG ───── */
  .p2-grid {
    grid-template-columns: 1.1fr 1fr !important;
    gap: 4mm !important;
  }
  /* P2 우측 카드 column 인쇄 폭 조정 */
  .kbo-display { font-size: 13pt !important; }
  .kbo-metric-num { font-size: 24pt !important; }
  .kbo-eyebrow { font-size: 7.5pt !important; }
  .kbo-headline { font-size: 11pt !important; line-height: 1.4 !important; }

  /* ───── 9) P3 마네킹 — SVG 크기·애니메이션 제거 ───── */
  /* 인쇄에서는 SMIL 애니메이션 정지 (마지막 frame 또는 base state 출력) */
  svg animate, svg animateMotion, svg animateTransform { display: none !important; }
  /* 마네킹 SVG max 크기 */
  #theia-p3-content svg { max-height: 100mm !important; width: 100% !important; }
  /* 점선 점멸 정적화 */
  svg path[stroke-dasharray] { opacity: 0.85 !important; }

  /* ───── 10) P3 에너지 흐름 카드 + 시퀀스 차트 ───── */
  /* 시퀀스 chart: y축 squash 보정 라벨 박스도 표시 */
  details[open] > div, details > div { display: block !important; }

  /* ───── 11) P4 강점/약점 grid ───── */
  /* 2-column 유지, 인쇄에서도 깨끗하게 */
  #theia-p4-content > div[style*="grid-template-columns:1fr 1fr"] {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 4mm !important;
  }

  /* ───── 12) P5 / P6 navy 카드 ───── */
  /* 인라인 style의 navy 배경 강제 유지 (Webkit print 색상 보존) */
  div[style*="#0F2A4A"], div[style*="#1e3a5f"] {
    background-color: #0F2A4A !important;
    color: #fff !important;
  }
  /* navy 카드 안 흰 글씨, 노랑/초록/빨강 강조도 유지 */
  div[style*="#0F2A4A"] *, div[style*="#1e3a5f"] * {
    /* inline color는 그대로 — 강제 변경 안 함 (각 부분 색깔 보존) */
  }
  /* navy 안 텍스트 가독성 위해 옅은 회색 텍스트는 인쇄에서도 보이게 강화 */
  div[style*="#0F2A4A"] [style*="rgba(255,255,255,0.5"],
  div[style*="#0F2A4A"] [style*="rgba(255,255,255,0.55"],
  div[style*="#0F2A4A"] [style*="rgba(255,255,255,0.6"] {
    color: rgba(255, 255, 255, 0.78) !important;
  }

  /* ───── 13) 보조 정보 / 헤더 ───── */
  .vs-aux {
    font-size: 8.5pt !important;
    padding: 2mm 0 !important;
    border-top: 0.4pt solid #d1d5db;
    border-bottom: 0.4pt solid #d1d5db;
  }

  /* ───── 14) 인쇄용 헤더 (선수 메타·날짜) ───── */
  #print-header { display: block !important; }
  body::before {
    content: "";
    display: block;
  }
  /* 첫 P 섹션 위에 인쇄 시각 표시 */
  #player-p1-velocity::before {
    content: "투수 분석 리포트 · " attr(data-print-date);
    display: block;
    font-size: 8pt;
    color: #6b7280;
    margin-bottom: 3mm;
    padding-bottom: 2mm;
    border-bottom: 0.4pt solid #d1d5db;
  }

  /* ───── 15) details (산출식·근거) ───── */
  /* 인쇄에선 산출식 폴더 자동 펼침 — 학술 검증 보존 */
  details summary {
    list-style: none !important;
    color: #6b7280 !important;
    font-size: 8.5pt !important;
    margin-bottom: 2mm !important;
    cursor: default !important;
  }
  details summary::-webkit-details-marker { display: none !important; }
  details > div {
    font-size: 9pt !important;
    line-height: 1.5 !important;
  }
  /* 산출식 monospace 박스 */
  details code, details pre,
  details div[style*="ui-monospace"], details div[style*="SF Mono"] {
    font-size: 8.5pt !important;
    line-height: 1.45 !important;
  }

  /* ───── 16) 표(table) — 학술 중요도 테이블 등 ───── */
  table { font-size: 8.5pt !important; }
  th, td { padding: 1.5mm 2mm !important; }

  /* ───── 17) 자잘한 마무리 ───── */
  /* 인쇄 시 a 링크 url 표시 (참고용) */
  a[href]::after { content: "" !important; }
  /* select 등 form 요소 숨김 */
  select, input[type="button"], input[type="submit"] { display: none !important; }
  /* 인쇄 시 KBO scope 패딩 줄임 */
  .kbo-pad { padding: 0 !important; }
  .kbo-scope { padding: 0 !important; }
}

/* ────────────────────────────────────────────────────────────
   v7.20 보조 — 인쇄 버튼 클릭 시 임시 클래스 추가용 (선택)
   .force-print 클래스가 body에 붙으면 위 @media print 와 동일 효과
   ──────────────────────────────────────────────────────────── */
