  /* ===== 베뉴 바 2×2 글라스 레이아웃 ===== */
  /* 좌(베뉴/코스) 넓게, 우(날짜/전후반) 고정폭 */
  /* 베뉴 · 전반 / 후반 — 한 줄 중앙정렬 (구분점 · /). 우측에 게임설정 톱니(absolute). */
  .sc-venue-bar { position: relative; }
  /* 입력칸을 내용 크기로(고정폭 제거) + 줄바꿈 금지 → "베뉴 · 코스 / 날짜"가 깔끔한 한 줄. 모든 입력바 공통. */
  .sc-venue-bar .sc-vb-left { flex-wrap: nowrap; }
  .sc-vb-venue input.sc-chip-course, .sc-vb-course1 input.sc-chip-section {
    field-sizing: content; width: auto; min-width: 2ch;
  }
  /* field-sizing 미지원(구형) — 콘텐츠 자동폭 대신 적당한 고정폭(줄바꿈만 방지). */
  @supports not (field-sizing: content) {
    .sc-vb-venue input.sc-chip-course { width: 6.5em; }
    .sc-vb-course1 input.sc-chip-section { width: 4.2em; }
  }
  /* 저장 라운드 조회(세로 게임모드) — 입력박스 헤더(scVenueBar) 숨기고 가로와 동일한 sp-meta 헤더 노출. */
  body.saved-round-view #scVenueBar { display: none !important; }
  /* sc-toggle-row 는 flex 라 클론이 콘텐츠 폭으로 줄어듦 → 전체 폭 강제(베뉴 중앙정렬 + 토글 우측 정확히). */
  body.saved-round-view #scSavedHeader { display: block !important; width: 100%; flex: 1 1 100%; }
  #scSavedHeader .sp-venue, #scSavedHeader .sp-progress-row { width: 100%; }
  #scSavedHeader .sp-progress-row { margin-top: 3px; }
  /* 저장 라운드 [스코어|게임] 중앙 토글 (두 뷰 공통) */
  .saved-mode-toggle { display:inline-flex; background:var(--gray-100,#f3f4f6); border-radius:999px; padding:3px; gap:2px; }
  .saved-mode-toggle .smt-btn { border:none; background:transparent; font-family:inherit; font-size:13px; font-weight:800; color:var(--gray-500,#6b7280); padding:6px 18px; border-radius:999px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .saved-mode-toggle .smt-btn.active { background:#fff; color:var(--green-800,#166534); box-shadow:0 1px 3px rgba(0,0,0,.1); }
  .saved-mode-toggle .smt-static { cursor:default; }   /* 단일 모드 정적 라벨(클릭 불가) — 토글 위치 항시 배치 */
  /* 저장 라운드 하단 액션 제어 — 읽기전용: 저장/사진 숨김(공유 유지), 편집중: 수정완료만. */
  /* ===== 날씨 상세 페이지 ===== */
  .weather-detail { margin-top:6px; }
  /* 열: [날짜 span3][시각][위치×3]. 행: 날짜3 × 시각3 = 9. */
  .wx-grid { display:grid; grid-template-columns:28px 46px repeat(3,minmax(0,1fr)); gap:5px; align-items:stretch; }
  /* 좌상단 "날짜 / 시간" 코너 */
  .wx-corner { display:flex; align-items:center; justify-content:center; text-align:center; font-size:10px; font-weight:800; color:var(--gray-500,#6b7280); line-height:1.25; }
  /* 위치 헤더 2행 — [제목] 내 위치/관심지역/자주가는 골프장(muted, 테두리 없음) / [값] GPS 시·군·설정값·설정하기(카드). */
  .wx-coltitle { display:flex; align-items:center; justify-content:center; text-align:center; padding:6px 4px 2px; font-size:11.5px; font-weight:800; color:var(--gray-500,#6b7280); word-break:keep-all; line-height:1.2; }
  /* 값 셀 — 잘리지 않게: 한 줄 넘치면 줄바꿈(말줄임 없음). */
  .wx-colval { display:flex; align-items:center; justify-content:center; text-align:center; padding:7px 4px; border:1px solid var(--app-surface-border,#e5e7eb); border-radius:12px; background:var(--app-surface,#fff); font-size:11.5px; font-weight:800; color:var(--gray-900,#111827); word-break:keep-all; line-height:1.15; min-height:36px; }
  .wx-colval.settable { cursor:pointer; }
  .wx-colval .wx-setmuted { color:var(--gray-400,#9ca3af); font-weight:700; }
  /* 날짜 머리(3행 span) — 숫자 크게 / (요일) 작게, 딥그린. 배경 강조 없음. */
  .wx-datehead { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; padding:2px; }
  .wx-datehead .wx-dnum { font-size:20px; font-weight:900; color:var(--green-900,#14532d); line-height:1; }
  .wx-datehead .wx-dwd { font-size:11px; font-weight:800; color:var(--green-700,#15803d); line-height:1; }
  /* 시각 머리 — 오전 9시 등. 날짜보다 우선순위 낮게(muted). */
  .wx-timehead { display:flex; align-items:center; justify-content:center; text-align:center; font-size:13px; font-weight:600; color:var(--gray-500,#6b7280); line-height:1.2; padding:2px; white-space:nowrap; }
  /* 날짜 그룹 divider */
  .wx-divider { height:1px; background:var(--gray-200,#e5e7eb); margin:7px 0; }
  /* 셀 — 아이콘 왼쪽, 오른쪽 2행(위=온도 / 아래=강수량). */
  .wx-cell { display:flex; flex-direction:row; align-items:center; justify-content:center; gap:5px; padding:7px 4px; border:1px solid var(--app-surface-border,#e5e7eb); border-radius:12px; background:var(--app-surface,#fff); min-height:56px; color:var(--gray-400,#9ca3af); font-size:13px; }
  .wx-cell .wxc-ic { font-size:20px; line-height:1; flex:0 0 auto; }
  .wx-cell .wxc-r { display:flex; flex-direction:column; align-items:flex-start; min-width:0; }
  .wx-cell .wxc-t { font-size:15px; font-weight:900; color:var(--gray-900,#111827); line-height:1.1; }
  .wx-cell .wxc-p { font-size:10px; font-weight:700; color:var(--green-700,#15803d); white-space:nowrap; }
  .wx-cell.loading { color:var(--gray-300,#d1d5db); }
  .weather-note { margin:14px 2px 0; font-size:10.5px; color:var(--gray-400,#9ca3af); line-height:1.5; text-align:center; }
  .wloc-results { margin-top:8px; max-height:46vh; overflow:auto; display:flex; flex-direction:column; gap:4px; }
  .wloc-item { width:100%; display:flex; flex-direction:column; gap:2px; text-align:left; padding:10px 12px; border:1px solid var(--gray-200,#e5e7eb); border-radius:10px; background:#fff; font-family:inherit; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .wloc-item:active { background:var(--gray-50,#f9fafb); }
  .wloc-item .wloc-name { font-size:13.5px; font-weight:800; color:var(--gray-900,#111827); }
  .wloc-item .wloc-tag { display:inline-block; margin-left:6px; padding:1px 6px; border-radius:999px; background:var(--green-50,#f0fdf4); color:var(--green-700,#15803d); font-size:10px; font-weight:800; vertical-align:middle; }
  .wloc-item .wloc-sub { font-size:11px; font-weight:600; color:var(--gray-500,#6b7280); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .wloc-empty { padding:14px 4px; text-align:center; color:var(--gray-400,#9ca3af); font-size:12.5px; }
  /* 공유 범위 — 사진추가와 라운드저장 사이. 기본 '모두', '나만'은 클릭 시. */
  .share-scope-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:2px 2px; }
  .share-scope-row .share-scope-label { font-size:13px; font-weight:800; color:var(--gray-600,#4b5563); }
  .share-scope-row .scope-seg { display:inline-flex; background:var(--gray-100,#f3f4f6); border-radius:999px; padding:3px; gap:2px; }
  .share-scope-row .scope-btn { border:none; background:transparent; font-family:inherit; font-size:13px; font-weight:800; color:var(--gray-500,#6b7280); padding:6px 18px; border-radius:999px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .share-scope-row .scope-btn.active { background:#fff; color:var(--green-800,#166534); box-shadow:0 1px 3px rgba(0,0,0,.1); }
  .share-scope-row .scope-btn[data-scope="me"].active { color:var(--gray-800,#1f2937); }
  /* 저장 라운드 조회(읽기전용)·편집 중엔 공유범위 숨김(저장 버튼과 함께). */
  body.saved-round-view .share-scope-row { display:none !important; }
  /* 편집바 — [취소 1/4 | 수정 완료 3/4], 편집 중에만 노출. 스코어·게임 공통 톤. */
  .saved-edit-bar { display:none; gap:8px; margin-top:0; }
  body.saved-round-editing #savedEditBar { display:flex; }
  .saved-edit-bar .sed-cancel { flex:2 1 0; padding:13px 0; border-radius:14px; border:1.5px solid var(--gray-300,#d1d5db); background:var(--gray-100,#f3f4f6); color:var(--gray-700,#374151); font-family:inherit; font-size:15px; font-weight:800; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .saved-edit-bar .sed-info { flex:2 1 0; padding:13px 0; border-radius:14px; border:1.5px solid var(--green-600,#16a34a); background:#fff; color:var(--green-700,#15803d); font-family:inherit; font-size:14px; font-weight:800; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .saved-edit-bar .sed-done { flex:3 1 0; padding:13px 0; border-radius:14px; border:none; background:var(--green-700,#15803d); color:#fff; font-family:inherit; font-size:16px; font-weight:800; cursor:pointer; box-shadow:0 3px 10px rgba(20,83,45,.28); -webkit-tap-highlight-color:transparent; }
  #savedInfoModal .si-field { margin-bottom:12px; }
  #savedInfoModal .si-field label { display:block; font-size:12px; font-weight:700; color:var(--gray-500); margin-bottom:5px; }
  #savedInfoModal .si-field input { width:100%; box-sizing:border-box; padding:11px 12px; border:1px solid var(--gray-300,#d1d5db); border-radius:12px; font-family:inherit; font-size:15px; background:#fff; }
  #savedInfoModal .si-row { display:flex; gap:10px; }
  #savedInfoModal .si-row .si-field { flex:1; min-width:0; }
  #savedInfoModal .si-save { width:100%; margin-top:6px; padding:13px; border:none; border-radius:14px; background:var(--green-700,#15803d); color:#fff; font-family:inherit; font-size:16px; font-weight:800; cursor:pointer; }
  #savedInfoModal .si-venue-field { position:relative; }
  #savedInfoModal .si-suggest { position:absolute; left:0; right:0; top:100%; z-index:5; margin-top:4px; background:#fff; border:1px solid var(--gray-200,#e5e7eb); border-radius:10px; max-height:210px; overflow-y:auto; box-shadow:0 8px 24px rgba(0,0,0,.14); }
  #savedInfoModal .si-suggest .si-sug-item { display:block; width:100%; text-align:left; padding:11px 12px; border:none; border-bottom:1px solid var(--gray-100,#f3f4f6); background:none; font-family:inherit; font-size:14px; font-weight:600; color:var(--gray-800,#1f2937); cursor:pointer; }
  #savedInfoModal .si-suggest .si-sug-item:last-child { border-bottom:none; }
  #savedInfoModal .si-suggest .si-sug-item:active { background:var(--green-50,#eef7f0); }
  #savedInfoModal .si-input-wrap { position:relative; }
  #savedInfoModal .si-input-wrap input { padding-right:36px; }
  #savedInfoModal .si-clear-x { position:absolute; right:8px; top:50%; transform:translateY(-50%); width:22px; height:22px; border-radius:50%; border:none; background:var(--gray-200,#e5e7eb); color:var(--gray-600,#4b5563); font-size:15px; line-height:1; display:none; align-items:center; justify-content:center; cursor:pointer; padding:0; -webkit-tap-highlight-color:transparent; }
  #savedInfoModal .si-clear-x:active { background:var(--gray-300,#d1d5db); }
  #savedInfoModal .si-players { display:flex; flex-direction:column; gap:8px; }
  #savedInfoModal .si-players .si-prow { margin:0; }
  /* 사후 태그 — 동반자 행에 '태그' 버튼(정보 수정 모달) */
  #savedInfoModal .si-prow-flex { display:flex; align-items:center; gap:8px; }
  #savedInfoModal .si-prow-flex .si-input-wrap { flex:1; min-width:0; }
  #savedInfoModal .si-tag-btn { flex:0 0 auto; height:40px; padding:0 14px; border:1px solid var(--green-700,#15803d); background:var(--green-50,#f0fdf4); color:var(--green-800,#166534); border-radius:10px; font-family:inherit; font-size:13px; font-weight:800; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  #savedInfoModal .si-tag-btn:active { background:var(--green-100,#dcfce7); }
  /* 상단 status bar 이름 칩 — 클릭(태그/프로필)은 유지하되 이름 밑줄은 표시하지 않음(요청). */
  .gsb-rk-tag .gsb-nm, .gsb-rk-tagged .gsb-nm { text-decoration:none; }
  /* 태그 피커 — 섹션 라벨 + 비그리너 초대 링크(우측 원클릭 복사) */
  #tagPickerList .tag-match-label { font-size:11.5px; font-weight:800; color:var(--gray-500,#6b7280); padding:10px 4px 6px; }
  #tagPickerList .tag-search-wrap { margin:2px 0 4px; }
  #tagPickerList #tagSearchResult:not(:empty) { margin-top:6px; }
  #tagPickerList .tag-search-empty { color:var(--gray-500,#6b7280); font-size:12.5px; padding:8px 2px; }
  .tag-invite-top { margin:6px 0; padding:12px; background:var(--green-50,#f0fdf4); border:1px solid rgba(20,83,45,.12); border-radius:12px; }
  .tag-invite-top .tit-msg { font-size:12.5px; font-weight:700; color:var(--green-800,#166534); margin-bottom:8px; }
  .tag-invite-top .tit-linkrow { display:flex; align-items:center; gap:8px; background:#fff; border:1px solid var(--gray-200,#e5e7eb); border-radius:10px; padding:0 0 0 10px; overflow:hidden; }
  .tag-invite-top .tit-link { flex:1; min-width:0; font-size:12px; font-weight:600; color:var(--gray-600,#4b5563); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; padding:9px 0; }
  .tag-invite-top .tit-copy { flex:0 0 auto; align-self:stretch; padding:0 15px; border:none; border-left:1px solid var(--gray-200,#e5e7eb); background:var(--green-700,#15803d); color:#fff; font-family:inherit; font-size:12.5px; font-weight:800; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .tag-invite-top .tit-copy:active { background:var(--green-800,#166534); }
  .tag-invite-top .tit-copy:disabled { opacity:.5; }
  #savedInfoModal .si-section-chips { display:none; flex-wrap:wrap; gap:6px; margin:-4px 0 12px; }
  #savedInfoModal .si-sec-chip { padding:7px 12px; border-radius:999px; border:1px solid var(--green-200,#bbf7d0); background:var(--green-50,#eef7f0); color:var(--green-800,#166534); font-family:inherit; font-size:13px; font-weight:700; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  #savedInfoModal .si-sec-chip:active { transform:scale(0.95); }
  /* 편집 모드 — 읽기 표기(대비파 도형) 그대로 두고 셀만 탭 가능(초록 컨테이너 없음, 게임모드와 동일 키패드 사용). */
  td.ssc-cell { cursor:pointer; -webkit-tap-highlight-color:transparent; }
  td.ssc-cell:active { background:rgba(0,0,0,.05); border-radius:6px; }
  body.saved-round-view #saveRoundBtn, body.saved-round-view .share-actions .round-photo-sec { display:none !important; }
  body.saved-round-editing #shareBtn { display:none !important; }   /* 편집 중엔 하단 공유 숨김(수정완료만). 읽기전용 게임뷰에선 하단 #shareBtn 노출(후반 아래). */
  /* 읽기전용 — 니어/이글 뱃지는 보이되 클릭만 막음(애매한 클릭 방지) */
  body.saved-round-view:not(.saved-round-editing) .near-btn,
  body.saved-round-view:not(.saved-round-editing) .eagle-type-btn { pointer-events:none !important; }
  /* 저장 라운드 — 실시간정산 요약은 status bar 에 있으므로 하단 '실시간 정산' 줄 제거. (최소송금은 유지, 나중에 재배치) */
  body.saved-round-view #settleHeaderRow,
  body.saved-round-view #playerResults,
  body.saved-round-view #settlement,
  body.saved-round-view #captureSettleTitle { display:none !important; }
  /* status bar(순위+금액) 노출 시 하단 '실시간 정산' 요약(헤더+플레이어 카드)은 중복 → 숨김. 최소송금(#settlement 내부)은 유지.
     record/teamupdown 은 정산 카드가 없고 자체 처리하므로 제외. */
  body.has-gsb:not(.mode-record):not(.mode-teamupdown) #settleHeaderRow,
  body.has-gsb:not(.mode-record):not(.mode-teamupdown) #playerResults,
  body.has-gsb:not(.mode-record):not(.mode-teamupdown) #settlement,
  body.has-gsb:not(.mode-record):not(.mode-teamupdown) #captureSettleTitle { display:none !important; }
  /* 편집 중엔 최소송금도 숨김(스코어카드만 수정). 수정 완료 후 다시 노출. */
  body.saved-round-editing .min-transfer-wrap,
  body.saved-round-editing .min-transfer-toggle { display:none !important; }
  /* 토글 아래 카카오 공유 버튼 (두 뷰 공통) */
  .saved-share-row { display:block; margin:14px 2px 4px; }
  /* 일반 모드 #shareBtn 과 동일 포맷 — 풀폭 노란 버튼. */
  .saved-share-btn { width:100%; background:#FEE500; color:#000; border:none; border-radius:14px; font-family:inherit; font-size:16px; font-weight:700; padding:14px; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  /* 공유 캡처 중 화면 변형(스크롤·레이아웃)·이미지 디코드 지연을 가리는 오버레이. 모달 오픈 시 해제. */
  #captureVeil { position:fixed; inset:0; z-index:100045; background:#F7F9F7; display:none; align-items:center; justify-content:center; flex-direction:column; gap:12px; }
  #captureVeil .capture-veil-spin { width:34px; height:34px; border-radius:50%; border:3px solid rgba(21,128,61,.18); border-top-color:var(--green-700,#15803d); animation:capveil-spin .8s linear infinite; }
  #captureVeil .capture-veil-txt { font-size:13px; font-weight:800; color:var(--gray-500,#6b7280); }
  @keyframes capveil-spin { to { transform:rotate(360deg); } }
  /* 공유 캡처에는 토글·공유버튼 제외(그 모드 정보만) */
  .card.capturing .saved-mode-toggle, .card.capturing .saved-share-row,
  #spectateBody.sp-capturing .saved-mode-toggle, #spectateBody.sp-capturing .saved-share-row { display:none !important; }
  /* 단일 페이지 하위뷰 스왑 — 상단(헤더/토글/진행 status bar) 고정, 토글 아래 스코어카드만 교체. */
  #savedScoreWrap { margin:0 2px 4px; }
  body.saved-round-view.saved-sub-score .scorecard-wrap { display:none !important; }
  body.saved-round-view.saved-sub-score #scHalfCourseNav { display:none !important; }
  /* 스코어 하위뷰 = 스코어카드만. 정산(최소송금 등)은 게임 하위뷰에서만. */
  body.saved-round-view.saved-sub-score .min-transfer-wrap,
  body.saved-round-view.saved-sub-score .min-transfer-toggle { display:none !important; }
  body.saved-round-view.saved-sub-score #savedScoreWrap { display:block !important; }
  body.saved-round-view:not(.saved-sub-score) #savedScoreWrap { display:none !important; }
  /* 상세 하위뷰 — 세로 게임 스코어카드·전후반 네비·정산 숨기고 상세 wrap만. */
  #savedDetailWrap { margin:0 2px 4px; }
  body.saved-round-view.saved-sub-detail .scorecard-wrap,
  body.saved-round-view.saved-sub-detail #scHalfCourseNav,
  body.saved-round-view.saved-sub-detail .min-transfer-wrap,
  body.saved-round-view.saved-sub-detail .min-transfer-toggle { display:none !important; }
  body.saved-round-view.saved-sub-detail #savedDetailWrap { display:block !important; }
  body.saved-round-view:not(.saved-sub-detail) #savedDetailWrap { display:none !important; }
  /* 저장 라운드 보기 — 스코어카드 가로폭 확보 위해 앱 공통 좌우거터(16px)를 절반으로. 헤더는 fixed라 무관. */
  body.saved-round-view { padding-left:8px !important; padding-right:8px !important; }
  /* N2 — 게임 '보기'(읽기전용) = 가로 스코어카드. 세로 게임카드·전후반 네비 숨김. 단, '스코어 수정하기'(saved-round-editing) 땐 세로 그리드 복귀. */
  #savedGameWrap { margin:0 0 4px; }
  body.saved-round-view.saved-sub-game:not(.saved-round-editing):not(.mode-teamupdown) .scorecard-wrap,
  body.saved-round-view.saved-sub-game:not(.saved-round-editing):not(.mode-teamupdown) #scHalfCourseNav { display:none !important; }
  body.saved-round-view.saved-sub-game:not(.saved-round-editing):not(.mode-teamupdown) #savedGameWrap { display:block !important; }
  body.saved-round-view:not(.saved-sub-game) #savedGameWrap { display:none !important; }
  body.saved-round-view.saved-round-editing #savedGameWrap { display:none !important; }
  body.mode-teamupdown #savedGameWrap { display:none !important; }
  /* OCR(photo-done) 게임(오장/뽑기) — 토글 없이 가로 정산뷰만: 세로 스코어카드·전후반 네비 숨김. */
  body.ocr-gview.photo-done-stage .scorecard-wrap,
  body.ocr-gview.photo-done-stage #scHalfCourseNav { display:none !important; }
  /* :not(.saved-round-view) — 저장 라운드 조회 시엔 라이브/OCR 스테이지 클래스가 잔존해도 savedGameWrap 을 강제표시하지 않음
     (안 그러면 스코어뷰에서 score 표 + game 표가 동시에 떠 '스코어카드 3개'로 보이던 버그). saved-round-view 는 위 saved-sub-* 규칙이 지배. */
  body.ocr-gview.photo-done-stage:not(.saved-round-view) #savedGameWrap { display:block !important; }
  body.photo-done-stage:not(.ocr-gview) #savedGameWrap { display:none !important; }
  /* 조인자(B) 모드 — 룰/설정 진입칩 숨김. B는 스코어 입력만(룰/베팅/참여자/마킹은 호스트 전용, 서버서도 차단됨). */
  body.joiner-mode #betDisplay,
  body.joiner-mode #headerGameDisplay,
  body.joiner-mode #scGameDisplay,
  body.joiner-mode .sc-vb-gear,
  body.joiner-mode #editModeBtn,
  body.joiner-mode #roundStatusParticipantsBtn { display:none !important; }
  /* 라이브(manual) 게임 — 가로 입력뷰: 세로 스코어카드만 숨김(전후반 토글 #scHalfCourseNav 는 표준 그대로 노출). 세로는 숨은 데이터 모델(.score 입력)로 유지. */
  body.live-gview.manual-stage .scorecard-wrap { display:none !important; }
  body.live-gview.manual-stage:not(.saved-round-view) #savedGameWrap { display:block !important; }
  body.manual-stage:not(.live-gview) #savedGameWrap { display:none !important; }
  /* editable 셀 — 탭 힌트(연한 테두리) + 빈 셀 점 표시. */
  .sp-gtable td.sp-gscore-tap { cursor:pointer; }
  .sp-gtable td.sp-gscore-tap:active { background:rgba(20,83,45,0.06); }
  .sp-gtable td.sp-gcell-cur { box-shadow:inset 0 0 0 2px var(--green-600,#16a34a); border-radius:4px; }
  /* 라이브 게임 입력 패드 — 기록모드처럼 바디 인라인(스코어카드 바로 아래 흐름). 고정 팝업 아님. */
  #liveGamePadDock { display:none; }
  #liveGamePadDock.open { display:block; margin:8px 0 4px; }
  /* 인라인 패드(고정 아님) — 지우기 아래 불필요한 safe-area 빈공간 제거, 상하 패딩 축소. */
  #liveGamePadDock .sp-pad-inline { max-width:520px; margin:0 auto; padding:10px 12px 10px; }
  .sp-gtable .sp-gempty { color:var(--gray-300,#d1d5db); font-weight:700; }
  .sp-gtable th.sp-gh-tap, .sp-gtable td.sp-gpar-tap { cursor:pointer; }
  .sp-gtable td.sp-gpar-tap:active { background:rgba(20,83,45,0.06); }
  .saved-detail-tiles { display:grid; grid-template-columns:repeat(4,1fr); gap:7px; margin:6px 0 14px; }
  .saved-detail-tiles .sdt-tile { min-width:0; background:rgba(255,255,255,0.62); border:1px solid rgba(255,255,255,0.75); border-radius:12px; padding:11px 4px; text-align:center; box-shadow:0 4px 16px rgba(20,83,45,0.05); }
  .saved-detail-tiles .sdt-v { display:block; font-size:19px; font-weight:900; color:var(--green-900,#14532d); line-height:1.1; }
  .saved-detail-tiles .sdt-v .sdt-u { font-size:12px; font-weight:800; }
  .saved-detail-tiles .sdt-l { display:block; margin-top:4px; font-size:10.5px; font-weight:700; color:var(--gray-500); white-space:nowrap; }
  #savedDetailWrap td.ssc-cell, #savedDetailWrap td.sd-edit-cell { cursor:pointer; -webkit-tap-highlight-color:transparent; }
  #savedDetailWrap td.ssc-cell:active, #savedDetailWrap td.sd-edit-cell:active { background:rgba(21,128,61,.10); }
  body.saved-round-editing #savedDetailWrap td.ssc-cell, body.saved-round-editing #savedDetailWrap td.sd-edit-cell { box-shadow:inset 0 0 0 1px rgba(21,128,61,.22); }
  /* 스코어 하위뷰 캡처 제외 안전장치(게임 스코어카드는 게임 캡처에서 처리). */
  #settlementCard.capturing.saved-sub-score .scorecard-wrap { display:none !important; }
  .sc-venue-bar .sc-vb-left { position: relative; width: 100%; min-width: 0; display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 4px; flex-wrap: wrap; padding: 0 30px; box-sizing: border-box; }
  /* 날짜 행 — 날짜 중앙, 전/후반 토글 우측정렬(absolute). */
  .sc-venue-bar .sc-vb-right { position: relative; width: 100%; display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 10px; padding: 0 30px; box-sizing: border-box; }
  .sc-vb-gear { position:static; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; transform:none; background:none; border:none; padding:3px 4px; font-size:17px; line-height:1; cursor:pointer; opacity:.75; -webkit-tap-highlight-color:transparent; }
  .sc-vb-gear:active { opacity: 1; }
  /* OCR(photo-done) — 게임설정 톱니는 라이브와 동일하게 헤더 chip(우상단) 하나만. 베뉴바 톱니는 중복이라 숨김. */
  body.photo-done-stage .sc-vb-gear { display: none !important; }
  /* 점수 입력 중에는 현재 플레이어명과 홀 번호만 강조한다. 셀/점 표시는 추가하지 않는다. */
  /* 활성 플레이어 헤더 — 배경/글자색을 바꾸면 흰 이름이 밝은 배경에 묻혀 안 보임.
     기존 어두운 헤더 배경·흰 이름을 유지하고, 테두리 링으로만 강조. */
  table.scorecard thead th.th-player.sc-entry-active {
    box-shadow:inset 0 0 0 2px var(--green-300,#86efac);
  }
  table.scorecard td.hole-num.sc-entry-active {
    background:var(--green-50,#eef7f0) !important;
    color:var(--green-900,#14532d) !important;
    box-shadow:inset 0 0 0 1px rgba(21,128,61,.2);
  }
  /* 글라스 셀 (점선 대신) */
  /* 입력박스 느낌 제거 — 가로모드처럼 텍스트로. 밑줄로만 편집 가능 힌트. */
  .sc-vb-cell {
    display: flex; align-items: center; gap: 4px; min-height: 30px; height: auto; padding: 3px 4px; box-sizing: border-box;
    background: transparent; border: none; border-bottom: 1px dashed transparent; border-radius: 0;
    box-shadow: none; transition: border-color 0.15s;
  }
  .sc-vb-cell:not(.sc-vb-date):hover { border-bottom-color: rgba(20,83,45,0.18); }
  .sc-vb-cell:focus-within { border-bottom-color: var(--green-600, #16a34a); }
  .sc-venue-sep { color: var(--gray-400); flex-shrink: 0; font-weight: 500; }
  .sp-edit-tag { flex-shrink: 0; font-size: 11.5px; font-weight: 600; color: var(--gray-500,#6b7280); white-space: nowrap; line-height: 1; }
  .sc-vb-cell input.sc-chip {
    background: transparent; border: none; padding: 0; outline: none;
    font-size: 13.5px; font-weight: 700; color: var(--green-900); min-width: 0; box-sizing: border-box; line-height: 1.2;
  }
  .sc-vb-cell input.sc-chip::placeholder { color: #b9bec5; font-weight: 500; font-style: normal; }
  /* 베뉴/코스 — 가로 관전 뷰(.sp-venue 16px/800/gray-900)와 동일 폰트로. */
  .sc-vb-venue input.sc-chip-course { width: auto; max-width: 46vw; text-align: center; font-size: 16px; font-weight: 800; color: var(--gray-900, #111827); }
  /* 전반/후반 코스 — 인라인 (· / 구분점은 .sc-venue-sep 스팬으로) */
  .sc-vb-courses-row { display:flex; align-items:center; gap:6px; line-height:1.2; }
  .sc-vb-course1 input.sc-chip-section {
    width: auto; max-width: 30vw; min-width: 0; text-align: center;
    color: var(--gray-900, #111827); font-weight: 800; font-size: 16px;
  }
  .sc-venue-bar .sc-venue-sep { display:inline-flex; align-items:center; align-self:center; font-size:16px; line-height:1.2; }
  /* 날짜 — 가로 관전 날짜(.sp-progress 12.5px/gray-500)와 동일. */
  .sc-vb-date input.sc-chip-date { width: auto; font-size: 12.5px; font-weight: 700; text-align: center; color: var(--gray-500, #6b7280); }
  .sc-vb-date input.sc-chip-date::-webkit-calendar-picker-indicator { display: none; -webkit-appearance: none; }
  .sc-vb-date input.sc-chip-date::-webkit-date-and-time-value { text-align: left; }
  /* 전/후반 토글 — 날짜 옆 인라인. 폭은 내용에 맞게. */
  .sc-venue-bar .sc-vb-right #scViewToggle { width: auto; height: 30px; margin-left: 0; display: flex; box-sizing: border-box; }
  .sc-venue-bar .sc-vb-right #scViewToggle .sc-view-btn { flex: 0 0 auto; min-width: 0; padding: 4px 14px; text-align: center; }
  @media (max-width: 600px) {
    .sc-venue-bar { gap: 4px; margin: 4px 2px 8px; }
    .sc-venue-bar .sc-vb-right { width: 100%; }
    .sc-vb-cell { min-height: 30px; height: auto; padding: 5px 8px; }
    .sc-vb-cell input.sc-chip { font-size: 12px; }
    /* 모바일에서도 가로 관전 뷰와 동일 크기 유지(축소 안 함). */
    .sc-vb-venue input.sc-chip-course { font-size: 16px; }
    .sc-vb-course1 input.sc-chip-section { font-size: 16px; }
    .sc-vb-courses-row { gap: 5px; }
    .sc-vb-date input.sc-chip-date { font-size: 12.5px; }
    .sc-venue-bar .sc-vb-right #scViewToggle { height: 30px; }
  }
  /* 스코어카드 하단 채점방식 행 (18홀 Total 아래 우측 정렬) */
  .sc-scoring-mode-row {
    display: flex;
    margin: 8px 0 10px;
  }
  .sc-scoring-mode-row .scoring-mode-switch { width: 100%; }
  /* 스코어카드 P1~P4 헤더 — 클릭 시 수정 가능한 인라인 입력 */
  th .th-player-input {
    width: 100%;
    max-width: 100%;
    background: transparent;
    border: none;
    text-align: center;
    font: inherit;
    color: inherit;
    font-weight: 700;
    font-size: 17px;
    outline: none;
    padding: 0;
    cursor: text;
    box-sizing: border-box;
    min-width: 0;
  }
  .th-player-input::placeholder {
    color: rgba(255,255,255,0.55);     /* 그린 배경 위 옅은 흰색 placeholder */
    font-weight: 500;
    font-style: normal;
  }
  .th-player-input:focus {
    background: white;
    color: var(--green-900);
    box-shadow: inset 0 0 0 1px var(--green-700);
    border-radius: 4px;
  }
  /* 모바일: iOS Safari 가 font-size < 16px 인 input focus 시 자동 zoom-in.
     16px 로 두되 transform: scale 을 inline-block + width:100% 로 적용해 정렬 유지. */
  @media (max-width: 600px) {
    table.scorecard th .th-player-input {
      font-size: 16px;                  /* 16px → iOS zoom 안 함 */
      width: 100%;
      display: inline-block;
      text-align: center;
      transform: none;                  /* 모바일에서도 16px 실제 크기 유지 */
      font-weight: 700;
    }
  }
  /* 캡처용 static span — 평소엔 숨김. html2canvas가 input value를 못 잡는 케이스 대비.
     공유 캡처(.capturing) 시에만 노출되고, 같은 위치에서 input을 대체.
     높은 specificity를 위해 table.scorecard로 prefix. */
  table.scorecard th .th-static-name { display: none; }
  .card.capturing table.scorecard th .th-player-input { display: none !important; }
  /* 핸디캡 평문 — sub-row 의 th-hdcp-val 안에 위치. 흰 배경/테두리 없음. */
  table.scorecard th .th-handicap-chip {
    display: inline-block;
    margin: 0;
    padding: 2px 6px;
    background: transparent;
    color: rgba(255,255,255,0.85);
    border: none;
    border-radius: 0;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.2;
    cursor: pointer;
    white-space: nowrap;
    transition: color 0.15s;
  }
  table.scorecard th .th-handicap-chip:hover,
  table.scorecard th .th-handicap-chip:active {
    color: white;
  }
  /* 핸디캡 적용 시 강조 (0 아닌 값) — 그린 배경 위 노란 텍스트 */
  table.scorecard th .th-handicap-chip.has-handicap {
    color: #fde68a;
    font-weight: 700;
  }
  /* 뽑기 모드에서도 HDCP sub-row 노출 — 오장과 동일하게 핸디캡 입력/표시. (사용자 요청) */
  /* 캡처 시 chip 도 정적 표기 */
  .card.capturing table.scorecard th .th-handicap-chip {
    pointer-events: none;
  }
  @media (max-width: 600px) {
    table.scorecard th .th-handicap-chip {
      font-size: 10px;
    }
  }
  /* (i) info chip — 핸디캡 설명 토글용. 작은 원형 버튼. */
  .info-chip {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--gray-200);
    color: var(--gray-700);
    border: none;
    font-size: 12px;
    font-weight: 700;
    font-style: italic;
    font-family: Georgia, serif;
    cursor: pointer;
    padding: 0;
    line-height: 1;
    transition: background 0.15s;
  }
  .info-chip:hover, .info-chip:active { background: var(--gray-300); }
  .info-chip.active { background: var(--green-700); color: white; }
  /* 핸디캡 hint — 기본 숨김. (i) 클릭 시 .show 토글로 노출. */
  .handicap-hint-hidden { display: none; }
  .handicap-hint-hidden.show { display: block; }
  /* 핸디캡 picker modal — 내부 스크롤 없도록 max-height/overflow 해제 */
  .handicap-picker-modal {
    max-width: 360px;
    max-height: none;
    overflow: visible;
  }
  .handicap-picker-modal h3 { font-size: 16px; margin-bottom: 8px; color: var(--green-900); }
  /* 2-stage picker: 10단위 + 단위. 64 단계를 16 버튼으로 압축. */
  .handicap-grid {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 12px;
  }
  /* 스테퍼(− / +N 직접입력 / +) + 빠른선택 — 목업 채택 */
  .hcp-sub { margin:-2px 0 14px; font-size:12.5px; color:var(--gray-500,#6b7280); }
  .hcp-stepper { display:flex; align-items:stretch; gap:10px; }
  .hcp-step { flex:0 0 64px; height:76px; border:1.5px solid var(--gray-200,#e5e7eb); border-radius:14px; background:#fff; color:var(--green-800,#166534); font-size:28px; font-weight:800; font-family:inherit; cursor:pointer; -webkit-tap-highlight-color:transparent; display:flex; align-items:center; justify-content:center; }
  .hcp-step:active { background:var(--green-50,#eef7f0); transform:scale(.97); }
  .hcp-val { flex:1 1 auto; min-width:0; height:76px; display:flex; align-items:center; justify-content:center; gap:1px; border:1.5px solid var(--green-600,#16a34a); border-radius:14px; background:var(--green-50,#eef7f0); cursor:text; }
  .hcp-val-sign { font-size:26px; font-weight:900; color:var(--green-800,#166534); }
  .hcp-val-num { width:1.7em; min-width:0; padding:0; border:0; background:transparent; text-align:center; font-family:inherit; font-size:34px; font-weight:900; color:var(--green-900,#14532d); }
  .hcp-val-num:focus { outline:none; }
  .hcp-typehint { text-align:center; margin:8px 0 16px; font-size:12px; color:var(--gray-400,#9ca3af); }
  .hcp-quick-label { font-size:12.5px; font-weight:800; color:var(--gray-600,#4b5563); margin:0 2px 8px; }
  .hcp-quick { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:14px; }
  .hcp-quick-btn { height:48px; border:1.5px solid var(--gray-200,#e5e7eb); border-radius:12px; background:#fff; color:var(--gray-700,#374151); font-size:16px; font-weight:800; font-family:inherit; cursor:pointer; -webkit-tap-highlight-color:transparent; }
  .hcp-quick-btn.on { border-color:var(--green-600,#16a34a); background:var(--green-50,#eef7f0); color:var(--green-800,#166534); }
  .hcp-quick-btn:active { transform:scale(.97); }
  .handicap-actions {
    display: flex;
    gap: 8px;
    justify-content: space-between;
  }
  .handicap-actions button { flex: 1; padding: 10px; }
  .card.capturing table.scorecard th .th-static-name {
    display: block !important;
    width: 100%;
    text-align: center;
    color: white;
    font-weight: 800;
    font-size: 13px;
    line-height: 1.3;
    padding: 0;
  }
  @media (max-width: 600px) {
    .card.capturing table.scorecard th .th-static-name { font-size: 11px; }
  }
  /* html2canvas + position:sticky 호환성 문제 — 캡처 시 thead가 통째로 빠짐.
     .capturing 시 thead를 일반 흐름으로 강제 변경. */
  .card.capturing table.scorecard thead th {
    position: static !important;
    top: auto !important;
    z-index: auto !important;
  }
  /* Scoring mode switch — 가로 Full 폭, 버튼 50/50 분할 */
  .scoring-mode-switch {
    display: flex;
    align-items: center;
    gap: 6px;
    background: var(--gray-100);
    padding: 4px;
    border-radius: 8px;
    width: 100%;
  }
  .scoring-mode-btn {
    flex: 1 1 50%;
    padding: 8px 10px;
    border: none;
    background: transparent;
    color: var(--gray-700);
    font-size: 13px;
    font-weight: 600;
    border-radius: 6px;
    cursor: pointer;
    transition: all 0.15s;
    text-align: center;
  }
  .scoring-mode-btn:hover { background: white; }
  .scoring-mode-btn.active {
    background: white;
    color: var(--green-900);
    box-shadow: 0 1px 2px rgba(0,0,0,0.06);
  }
  .scoring-mode-banner {
    margin: 8px 0 12px;
    padding: 8px 12px;
    background: var(--blue-light);
    color: var(--blue);
    border-radius: 6px;
    font-size: 12px;
    font-weight: 500;
    display: none;
  }
  .scoring-mode-banner.show { display: block; }
  /* 라운딩 기록 — 홈에서는 단일 버튼 trigger, 클릭 시 modal 팝업 */
  .history-trigger-wrap {
    margin-top: 32px;
    margin-bottom: 20px;
  }
  .history-open-btn {
    display: flex;
    align-items: center;
    justify-content: center;            /* 가운데 정렬 */
    gap: 10px;
    /* 통일 nav-btn — 세로 8px / 폰트 18px (clamp 으로 디바이스 비율 유지) */
    padding: clamp(8px, 2.2vw, 12px) clamp(14px, 4.5vw, 22px);
    width: 100%;
    /* 회색 fill — chip / loser 카드와 동일 톤 (gray-100) */
    background: var(--gray-100);
    border: 1px solid var(--gray-300);
    border-radius: 14px;
    cursor: pointer;
    font-size: clamp(16px, 4.8vw, 20px);
    color: var(--gray-900);
    text-align: center;
    transition: all 0.15s;
    font-weight: 700;
    letter-spacing: -0.3px;
  }
  .history-open-btn:hover {
    background: var(--gray-200);
    border-color: var(--green-500);
  }
  .history-open-btn .ho-label { font-weight: 700; }
  .history-modal { max-width: 520px; }
  .history-modal h3 { font-size: 18px; margin-bottom: 12px; color: var(--green-900); }
  /* history-modal close 위치 override 제거 — 기본 .modal-close (top:12px, right:14px) 사용. */
  @media (max-width: 600px) {
    .history-trigger-wrap { margin-top: 24px; margin-bottom: 14px; }
  }
  /* 라운딩 기록 카드 — collapsible (기본은 닫혀있어 첫 진입 시 시야 방해 최소) — DEPRECATED */
  .history-card { padding: 0; }
  .history-toggle { padding: 0; }
  .history-summary {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 16px 20px;
    cursor: pointer;
    list-style: none;
    user-select: none;
    font-size: 16px;
    font-weight: 700;
    color: var(--green-900);
    border-radius: 16px;
    transition: background 0.15s;
  }
  .history-summary::-webkit-details-marker { display: none; }
  .history-summary:hover { background: var(--green-50); }
  .history-summary::after {
    content: '▾';
    margin-left: auto;
    color: var(--gray-500);
    font-size: 12px;
    transition: transform 0.2s;
  }
  .history-toggle[open] .history-summary::after { transform: rotate(180deg); }
  .history-toggle[open] .history-summary {
    border-bottom: 1px solid var(--gray-200);
    border-radius: 16px 16px 0 0;
  }
  .history-count {
    padding: 2px 9px;
    background: var(--gray-100);
    color: var(--gray-700);
    border-radius: 12px;
    font-size: 11.5px;
    font-weight: 600;
  }
  .history-count.has-data {
    background: var(--green-50);
    color: var(--green-700);
  }
  .history-body { padding: 0 20px 18px; }
  /* 저장/백업/가져오기 — 한 줄에 3등분, nowrap */
  .history-actions {
    display: flex;
    gap: 6px;
    margin-bottom: 14px;
    flex-wrap: nowrap;
  }
  .history-actions button {
    flex: 1 1 0;
    min-width: 0;
    padding: 9px 8px;
    font-size: 13px;
    white-space: nowrap;
  }
  @media (max-width: 600px) {
    .history-summary { font-size: 14px; padding: 14px 16px; }
    .history-count { font-size: 10.5px; padding: 1px 7px; }
    .history-body { padding: 0 16px 16px; }
    .history-actions { gap: 5px; }
    .history-actions button { font-size: 11.5px; padding: 8px 4px; }
  }
  /* 라운딩 기록 */
  .saved-rounds-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .saved-round {
    border: 1px solid var(--gray-200);
    border-radius: 10px;
    padding: 12px 14px;
    background: white;
    transition: border-color 0.15s, box-shadow 0.15s;
  }
  .saved-round:hover {
    border-color: var(--green-500);
    box-shadow: 0 2px 8px rgba(20,83,45,0.08);
  }
  .round-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 8px;
    flex-wrap: wrap;
  }
  .round-course {
    font-weight: 700;
    color: var(--green-900);
    font-size: 15px;
    margin-bottom: 2px;
  }
  .round-date {
    font-size: 11px;
    color: var(--gray-500);
  }
  .round-actions {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
  }
  .round-summary {
    font-size: 12px;
    color: var(--gray-700);
    line-height: 1.5;
    margin-bottom: 6px;
    padding: 6px 8px;
    background: var(--gray-50);
    border-radius: 6px;
  }
  .round-summary .player-bal {
    display: inline-block;
    margin-right: 8px;
  }
  .round-summary .player-bal .name { color: var(--gray-900); font-weight: 600; }
  .round-summary .player-bal .pos { color: var(--green-700); font-weight: 700; }
  .round-summary .player-bal .neg { color: var(--red); font-weight: 700; }
  .round-meta {
    font-size: 11px;
    color: var(--gray-500);
  }
  .round-meta .tag {
    display: inline-block;
    padding: 2px 8px;
    background: var(--green-100);
    color: var(--green-900);
    border-radius: 10px;
    font-weight: 600;
    margin-right: 4px;
  }
  button.danger {
    background: var(--red-light);
    color: var(--red);
    border: 1px solid transparent;
  }
  button.danger:hover {
    background: var(--red);
    color: white;
  }
  .mode-tab {
    flex: 1;
    padding: 10px 12px;
    text-align: center;
    border-radius: 8px;
    cursor: pointer;
    font-size: 13px;
    font-weight: 500;
    color: var(--gray-700);
    transition: all 0.15s;
    user-select: none;
  }
  .mode-tab.active {
    background: white;
    color: var(--green-900);
    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
  }
  .mode-desc {
    margin-top: 10px;
    padding: 10px 14px;
    background: var(--green-50);
    border-left: 3px solid var(--green-500);
    border-radius: 4px;
    font-size: 13px;
    color: var(--green-900);
    line-height: 1.5;
  }
  /* Scorecard */
  .scorecard-wrap { overflow-x: auto; }
  table.scorecard {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: 13px;
    /* 결과 컬럼 제거 → min-width 축소 (720→600) */
    min-width: 600px;
  }
  /* ===== 인원수에 따른 플레이어 열 숨김 (가로 stretch 없이 가운데 정렬) ===== */
  body.players-3 table.scorecard [data-pcol="3"],
  body.players-2 table.scorecard [data-pcol="2"], body.players-2 table.scorecard [data-pcol="3"],
  body.players-1 table.scorecard [data-pcol="1"], body.players-1 table.scorecard [data-pcol="2"], body.players-1 table.scorecard [data-pcol="3"] {
    display: none;
  }
  /* 열이 줄면 테이블을 늘리지 말고 가운데로 */
  body.players-3 table.scorecard, body.players-2 table.scorecard, body.players-1 table.scorecard {
    width: auto; min-width: 0; margin-left: auto; margin-right: auto; table-layout: auto;
  }
  body.players-3 .scorecard-wrap, body.players-2 .scorecard-wrap, body.players-1 .scorecard-wrap { text-align: center; }
  /* 줄어든 우측 끝(마지막 보이는 플레이어 열)에 둥근 모서리 — 일자로 잘리지 않게 */
  body.players-3 table.scorecard thead tr.sc-head-row-main th[data-pcol="2"],
  body.players-2 table.scorecard thead tr.sc-head-row-main th[data-pcol="1"],
  body.players-1 table.scorecard thead tr.sc-head-row-main th[data-pcol="0"] { border-top-right-radius: 8px; }
  table.scorecard th, table.scorecard td {
    padding: 8px 6px;
    text-align: center;
    vertical-align: top;
    border-bottom: 1px solid var(--gray-200);
  }
  /* ===== 스코어카드 본 row 완전 재작성 ===== */
  /* tbody td 패딩 제거 — cell-main / cell-sub div 가 명시적 높이로 정렬 컨트롤. */
  table.scorecard tbody td {
    padding: 0 !important;
  }
  /* cell-main / cell-sub — line-height = height, text-align center, white-space nowrap.
     자식 요소는 inline-block + vertical-align: middle 로 같은 baseline 에 정렬. */
  table.scorecard tbody td .cell-main {
    height: 44px;
    line-height: 44px;
    text-align: center;
    white-space: nowrap;
    font-size: 0; /* 자식 inline-block 사이 whitespace 영향 제거 */
  }
  table.scorecard tbody td .cell-sub {
    height: 18px;
    line-height: 18px;
    text-align: center;
    white-space: nowrap;
    font-size: 0;
  }
  /* cell-main 의 모든 자식 — inline-block + vertical-align: middle 로 텍스트/박스 모두 같은 Y. */
  table.scorecard tbody td .cell-main > * {
    display: inline-block;
    vertical-align: middle;
    line-height: normal;
    font-size: 18px;  /* 자식의 자체 폰트 */
  }
  table.scorecard tbody td .cell-sub > * {
    display: inline-block;
    vertical-align: middle;
    line-height: normal;
    font-size: 12px;
  }
  /* 홀 숫자 / PAR 숫자 span — 동일 폰트 메트릭. */
  table.scorecard tbody td .cell-main .num-text {
    font-size: 18px;
    font-weight: 700;
    color: var(--green-900);
  }
  @media (max-width: 600px) {
    table.scorecard tbody td .cell-main { height: 38px; line-height: 38px; }
    table.scorecard tbody td .cell-sub { height: 14px; line-height: 14px; }
    table.scorecard tbody td .cell-main > * { font-size: 16px; }
    table.scorecard tbody td .cell-main .num-text { font-size: 16px; }
    table.scorecard tbody td .cell-sub > * { font-size: 10px; }
  }
  /* score-delta — cell-sub 안에 위치 (모든 셀이 동일 cell-main/cell-sub 구조). margin 제거. */
  table.scorecard td.score-cell .score-delta {
    margin: 0;
  }
  /* 결과 컬럼 제거 → 플레이어 score 셀 세로 스트레치 (가로는 width % 로 확장) */
  table.scorecard td.score-cell {
    padding: 14px 6px;
  }
  /* (구) summary-par-inline 칩 — 더 이상 사용 안 함 (이제 summary-par-line 으로 줄바꿈 표시) */
  /* 메인 테마 그린 헤더 — 홀/PAR/플레이어명 + HDCP sub-row 모두 동일 톤. */
  table.scorecard thead th {
    background: var(--green-900);
    color: white;
    font-weight: 600;
    vertical-align: middle;
  }
  /* 스코어 입력 중 플레이어명 헤더가 화면 상단에 고정(sticky) — 스크롤해도 홀/PAR/플레이어명이 항상 보임.
     상단 앱 헤더는 스크롤 다운 시 자동 숨김(.header-hidden)이라 top:0 로 화면 최상단에 붙음. */
  table.scorecard thead tr.sc-head-row-main th {
    position: sticky;
    top: 0;
    z-index: 40;
  }
  /* sub-row (HDCP 라벨 + 핸디값) — 메인 헤더와 같은 그린, 살짝 옅은 글자색. */
  table.scorecard thead tr.sc-head-row-sub th {
    background: var(--green-900);
    padding: 2px 4px 3px;
    font-weight: 500;
    border-top: 1px solid rgba(255,255,255,0.15);
    /* 메인 row 바로 아래에 이어 붙는 sticky — 같은 그린 배경이라 top 오프셋이 살짝 어긋나도 이음새 안 보임. */
    position: sticky;
    top: 38px;
    z-index: 39;
  }
  @media (max-width: 600px) {
    table.scorecard thead tr.sc-head-row-sub th { top: 30px; }
  }
  table.scorecard thead tr.sc-head-row-sub th.th-hdcp-label {
    text-align: center;
    font-size: 10.5px;
    letter-spacing: 0.5px;
    color: rgba(255,255,255,0.7);
  }
  table.scorecard thead tr.sc-head-row-sub th.th-hdcp-val {
    text-align: center;
  }
  table.scorecard thead tr.sc-head-row-main th:first-child { border-top-left-radius: 8px; }
  table.scorecard thead tr.sc-head-row-main th:last-child { border-top-right-radius: 8px; }
  /* sub-row 의 첫번째 셀은 sub-row 의 좌측 끝, 마지막 셀도 우측 끝 — 둥근 모서리 보정 X (main 만) */
  /* 모든 스코어카드 tbody 셀 명시적 흰 배경 — body cream bg 가 셀 사이 보이는 issue 방지.
     summary-row / section-header 는 각자 별도 bg 지정 (아래 rule). */
  table.scorecard tbody td {
    background: white;
  }
  table.scorecard td.hole-num {
    font-weight: 700;
    color: var(--green-900);
    background: white;
  }
  table.scorecard td.par-cell {
    background: var(--gray-50);
    color: var(--gray-700);
    font-weight: 500;
  }
  table.scorecard input.score {
    width: 100%;
    padding: 0;
    text-align: center;
    border: none;
    background: transparent;
    /* 점수 폰트는 홀/PAR(18) 보다 살짝 크게 (20). 모바일은 18 (아래 @media). */
    font-size: 20px;
    font-weight: 700;
    line-height: 1;
  }
  table.scorecard input.par {
    /* PAR input — 박스 없음. 텍스트만. line-height: normal, vertical-align: middle 로 가운데 정렬. */
    width: auto;
    min-width: 28px;
    padding: 0;
    text-align: center;
    border: none;
    background: transparent;
    font-size: 18px;
    font-weight: 700;
    color: var(--gray-700);
    line-height: 1;
  }
  table.scorecard input.par:focus { background: var(--gray-100); }
  table.scorecard input.par:focus { border-color: var(--gray-300); background: white; }
  table.scorecard tr.summary td {
    background: var(--gray-100);
    font-weight: 700;
    border-top: 2px solid var(--green-900);
  }
  /* 합계 행 (전반 9홀, 후반 9홀, 총합 18홀) — 본 tbody td 의 padding-bottom:24 를 무시하고 자체 padding */
  table.scorecard tr.summary-row td {
    background: var(--gray-50);
    border-top: 2px solid var(--green-200);
    border-bottom: 1px solid var(--gray-300);
    padding: 12px 6px !important;
  }
  table.scorecard tr.summary-row .summary-label {
    text-align: center;
    color: var(--green-900);
    font-size: 14px;
    font-weight: 700;
    line-height: 1.35;
  }
  /* summary-label 안의 PAR 표기 — 칩 모양 없이 두번째 줄에 작게 */
  table.scorecard tr.summary-row .summary-label .summary-par-line {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    font-weight: 600;
    color: var(--gray-600);
  }
  table.scorecard tr.summary-row .summary-cell {
    text-align: center;
    /* 스코어보다 살짝 큰 폰트 — 데스크탑 20px, 모바일 18px (아래 @media) */
    font-size: 20px;
    font-weight: 700;
    color: var(--green-900);
  }
  table.scorecard tr.summary-row .summary-par {
    text-align: center;
    font-size: 11px;
    font-weight: 600;
    color: var(--gray-500);
    background: var(--gray-100);
  }
  table.scorecard tr.summary-grand td {
    background: linear-gradient(135deg, var(--green-50) 0%, #dcfce7 100%);
    border-top: 3px solid var(--green-700);
    padding: 12px 6px;
  }
  table.scorecard tr.summary-grand .summary-label {
    font-size: 14px;
    color: var(--green-900);
  }
  table.scorecard tr.summary-grand .summary-cell {
    font-size: 17px;
    color: var(--green-900);
  }
  /* 전반/후반 섹션 헤더 — 라이브 모드 scorecard 9홀 묶음 시각 구분 (smart score 스타일). */
  table.scorecard tr.sc-section-header td.sc-section-header-cell {
    background: #166534;
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    padding: 6px 10px;
    text-align: left;
    letter-spacing: 0.3px;
    border-top: 2px solid #14532d;
    border-bottom: none;
    line-height: 1.2;
  }
  /* OCR(photo-done) 모드에선 섹션 헤더 숨김 — 이미 탭/요약 row 가 있음. */
  body.photo-done-stage table.scorecard tr.sc-section-header,
  /* 캡처 모드에서도 섹션 헤더 숨김 — 공유 이미지에서 깔끔하게. */
  #scorecardCard.capturing table.scorecard tr.sc-section-header {
    display: none !important;
  }
  /* 실시간 정산 — 플레이어 이름 옆 총 타수 뱃지 */
  .player-result .stroke-count {
    font-size: 14px;
    color: var(--gray-700);
    font-weight: 600;
    margin-left: 2px;
  }
  .player-result .stroke-count.partial {
    color: var(--gray-500);
    font-size: 13px;
    font-weight: 500;
  }
  td.winner { background: var(--gold-light) !important; }
  td.carryover { background: var(--blue-light) !important; color: var(--blue); }
  /* 편집 모드 토글 버튼 — sc-bottom-btn 의 기본 스타일을 그대로 따름. active 일 때만 진한 그린. */
  #editModeBtn.active {
    background: #1c5734;
    border-color: #1c5734;
    color: white;
  }
  #editModeBtn.active:hover,
  #editModeBtn.active:active {
    background: #163f24;
    border-color: #163f24;
  }
  /* 공유 카카오톡 노란 버튼 — 호버시 살짝 진해짐 */
  button.share-btn { background: #FEE500 !important; color: #191919 !important; }
  button.share-btn:hover:not(:disabled) { background: #FFD400 !important; }
  button.share-btn:disabled { opacity: 0.6; cursor: not-allowed; }
  /* 이미지 캡처 중에는 액션 버튼·모드 토글·힌트·공유 버튼·호버 스피너 숨김 → 깔끔한 결과 이미지 */
  .card.capturing .actions,
  .card.capturing .scoring-mode-switch,
  .card.capturing .hint,
  .card.capturing .share-actions,
  .card.capturing .entry-mode-banner,
  .card.capturing .score-spinner { display: none !important; }
  /* 점수 입력 방법 안내 배너 — 스코어카드가 비어있을 때만 표시.
     처음 사용자가 '직접 입력' / '사진 업로드' 둘 중 어디로 갈지 명확히 안내. */
  .entry-mode-banner {
    margin: 0 0 14px;
    padding: 12px;
    background: linear-gradient(135deg, #f0f9ff 0%, #ecfdf5 100%);
    border: 1px solid #bae6fd;
    border-radius: 12px;
  }
  .entry-mode-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--green-900);
    margin-bottom: 10px;
    text-align: center;
  }
  .entry-mode-options {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
  }
  .entry-mode-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 12px 8px;
    background: white;
    color: var(--gray-900);
    border: 2px solid var(--gray-200);
    border-radius: 10px;
    cursor: pointer;
    transition: all 0.15s;
    text-align: center;
    min-height: 80px;
  }
  .entry-mode-btn:hover {
    border-color: var(--green-500);
    background: var(--green-50);
    transform: translateY(-1px);
  }
  .entry-mode-btn.primary {
    border-color: var(--green-500);
    background: var(--green-50);
    /* button.primary 글로벌 규칙(color:white)이 cascade에서 이겨서 라벨이 안 보이던 문제 — 명시적으로 덮어씀 */
    color: var(--gray-900);
  }
  .entry-mode-btn.primary:hover {
    background: #d1fae5;
    border-color: var(--green-700);
  }
  .entry-mode-btn .emb-icon { font-size: 22px; line-height: 1; margin-bottom: 2px; }
  /* "Live" 라벨 — 실시간 방송 느낌의 빨간 chip (이모지 위치에 들어감) */
  .entry-mode-btn .emb-icon.emb-live {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    font-weight: 800;
    letter-spacing: 1.2px;
    color: white;
    background: #ef4444;
    padding: 3px 10px;
    border-radius: 6px;
    text-transform: uppercase;
    margin-bottom: 4px;
  }
  .entry-mode-btn .emb-icon.emb-live::before {
    content: '';
    width: 6px;
    height: 6px;
    background: white;
    border-radius: 50%;
    box-shadow: 0 0 0 0 rgba(255,255,255,0.7);
    animation: livePulse 1.4s ease-in-out infinite;
  }
  @keyframes livePulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0.7); }
    50% { box-shadow: 0 0 0 5px rgba(255,255,255,0); }
  }
  .entry-mode-btn .emb-label { font-size: 13px; font-weight: 700; line-height: 1.25; color: var(--gray-900); }
  .entry-mode-btn .emb-sub { font-size: 10.5px; color: var(--gray-600); line-height: 1.2; }
  .entry-mode-btn.primary .emb-label { color: var(--gray-900); }
  .entry-mode-btn.primary .emb-sub { color: var(--green-700); font-weight: 600; }
  /* 지원 게임 종류 chip 표시 — '🏌️ 오장' '🎲 뽑기' */
  .entry-mode-btn .emb-games {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    justify-content: center;
    margin-top: 8px;
  }
  .entry-mode-btn .emb-game-chip {
    font-size: 10px;
    font-weight: 700;
    padding: 2px 7px;
    background: var(--green-50);
    color: var(--green-900);
    border: 1px solid var(--green-100);
    border-radius: 999px;
    white-space: nowrap;
  }
  @media (max-width: 600px) {
    .entry-mode-banner { padding: 10px 8px; margin-bottom: 12px; }
    .entry-mode-title { font-size: 12px; margin-bottom: 8px; }
    .entry-mode-btn { padding: 10px 4px; min-height: 72px; }
    .entry-mode-btn .emb-icon { font-size: 19px; }
    .entry-mode-btn .emb-label { font-size: 11.5px; }
    .entry-mode-btn .emb-sub { font-size: 9.5px; }
    .entry-mode-btn .emb-game-chip { font-size: 9px; padding: 2px 6px; }
  }

  /* ===== 단체팀 오장 (BETA) 오버레이 ===== */
  .to-overlay { position:fixed; inset:0; z-index:9800; background:var(--app-bg,#f6f4ee); display:none; flex-direction:column; }
  .to-overlay.open { display:flex; }
  .to-head { position:sticky; top:0; display:flex; align-items:center; gap:8px; padding:calc(env(safe-area-inset-top,0px) + 10px) 12px 10px; background:var(--app-bg,#f6f4ee); border-bottom:1px solid rgba(20,83,45,.08); z-index:2; }
  .to-back { border:none; background:none; font-size:26px; line-height:1; color:var(--green-900); cursor:pointer; padding:2px 6px; }
  .to-title { font-size:18px; font-weight:900; color:var(--green-900); display:flex; align-items:center; gap:7px; }
  .to-body { flex:1; overflow-y:auto; padding:14px 12px calc(env(safe-area-inset-bottom,0px) + 40px); }
  .to-guide { font-size:12.5px; color:var(--gray-500); line-height:1.5; margin-bottom:12px; }
  .to-opts { display:flex; flex-wrap:wrap; gap:10px 14px; align-items:center; margin-bottom:14px; font-size:12.5px; color:var(--gray-700); }
  .to-opts label { display:inline-flex; align-items:center; gap:5px; }
  .to-bet input { width:64px; padding:5px 7px; border:1px solid var(--gray-300); border-radius:8px; font-size:13px; font-family:inherit; text-align:right; }
  .to-loading { text-align:center; color:var(--gray-500); font-size:13.5px; padding:36px 0; }
  .to-tablewrap { overflow-x:auto; -webkit-overflow-scrolling:touch; border:1px solid rgba(20,83,45,.1); border-radius:12px; background:#fff; }
  .to-table { border-collapse:collapse; font-size:12px; white-space:nowrap; }
  .to-table th { background:var(--green-900,#14532d); color:#fff; font-weight:700; padding:6px 4px; font-size:11px; position:sticky; top:0; }
  .to-table td { border-bottom:1px solid rgba(0,0,0,.05); padding:2px; text-align:center; }
  /* 점수 셀 — 진짜 가로 스코어카드와 동일: gained(파대비)+score shape(sp-shape-wrap). 탭하면 인라인 편집. */
  .to-scoretd { cursor:pointer; padding:3px 2px !important; min-width:30px; }
  .to-table .sp-g { font-weight:800; line-height:1; color:var(--gray-800,#1f2937); font-size:12.5px; }
  .to-table .sp-parc { color:var(--gray-300,#d1d5db); font-weight:700; }
  .to-cell-edit { width:34px; height:28px; border:1.5px solid var(--green-600,#16a34a); border-radius:6px; text-align:center; font-size:13px; font-family:inherit; background:#fff; color:var(--gray-900); padding:0; }
  /* 우측 총타 컬럼 — 총타(파대비) */
  .to-toth { border-left:1px solid rgba(255,255,255,.2); }
  .to-total { border-left:1px solid rgba(20,83,45,.12); padding:2px 8px !important; white-space:nowrap; }
  .to-tot-s { font-size:12.5px; font-weight:800; color:var(--gray-900); }
  .to-tot-g { font-size:10.5px; font-weight:700; color:var(--gray-500); }
  /* 이름 — 입력칸 */
  .to-name { width:64px; padding:4px 5px; border:1px solid transparent; border-radius:6px; font-size:12.5px; font-weight:700; font-family:inherit; color:var(--gray-900); background:transparent; }
  .to-name:focus { outline:none; border-color:var(--green-600); background:#fff; }
  /* HDCP — 점수와 확실히 구분: 회색 배경 + 보더의 작은 입력칸 */
  .to-hand { width:36px; height:26px; text-align:center; font-size:12px; font-family:inherit; color:var(--gray-700,#374151); background:var(--gray-100,#f3f4f6); border:1px solid var(--gray-300,#d1d5db); border-radius:6px; padding:0; }
  .to-hand:focus { outline:none; border-color:var(--green-600); background:#fff; }
  /* 좌측 고정 컬럼 — 이름만 sticky(스크롤 고정). HDCP 는 점수와 함께 스크롤. */
  .to-nm { text-align:left !important; position:sticky; left:0; background:#fff; z-index:5; padding-left:6px !important; }
  .to-parrow td, .to-parrow input { color:var(--gray-500); font-weight:700; background:rgba(20,83,45,.04); }
  .to-parrow .to-nm { background:rgba(20,83,45,.04); }
  .to-cardsep td { text-align:left; font-size:11.5px; font-weight:800; color:var(--green-800); background:var(--green-50,#eef7f0); padding:6px 8px; position:sticky; left:0; z-index:5; }
  .to-calc-btn { width:100%; margin-top:16px; padding:15px; border:none; border-radius:14px; background:var(--green-700,#15803d); color:#fff; font-size:16px; font-weight:800; font-family:inherit; cursor:pointer; }
  .to-calc-btn:active { transform:scale(.99); }
  .to-warn { margin:16px 0 0; padding:10px 12px; border-radius:10px; background:#fff7ed; color:#b45309; font-size:12.5px; line-height:1.5; }
  .to-rep-title { margin:20px 2px 10px; font-size:15px; font-weight:900; color:var(--gray-900); }
  .to-rank { border:1px solid rgba(20,83,45,.1); border-radius:12px; overflow:hidden; background:#fff; }
  .to-rank-row { display:flex; align-items:center; gap:10px; padding:11px 13px; border-bottom:1px solid rgba(0,0,0,.05); }
  .to-rank-row:last-child { border-bottom:none; }
  .to-rk { flex:0 0 auto; width:32px; font-size:12px; font-weight:800; color:var(--gray-500); }
  .to-rk-nm { flex:1; min-width:0; font-size:14px; font-weight:800; color:var(--gray-900); overflow:hidden; text-overflow:ellipsis; }
  .to-rk-st { flex:0 0 auto; font-size:12.5px; color:var(--gray-500); }
  .to-rk-bal { flex:0 0 auto; width:88px; text-align:right; font-size:14px; font-weight:900; color:var(--gray-500); }
  .to-rk-bal.pos { color:var(--green-700,#15803d); }
  .to-rk-bal.neg { color:#dc2626; }
  .to-tr { border:1px solid rgba(20,83,45,.1); border-radius:12px; overflow:hidden; background:#fff; }
  .to-tr-row { display:flex; align-items:center; gap:8px; padding:10px 13px; border-bottom:1px solid rgba(0,0,0,.05); font-size:13.5px; }
  .to-tr-row:last-child { border-bottom:none; }
  .to-tr-nm { font-weight:700; color:var(--gray-900); }
  .to-tr-arw { color:var(--gray-400); }
  .to-tr-amt { margin-left:auto; font-weight:900; color:var(--green-800); }
  .to-rules { margin:0 0 14px; padding:8px 11px; border-radius:10px; background:var(--green-50,#eef7f0); color:var(--green-800); font-size:12.5px; font-weight:700; }
