    /* Fullscreen overlay */
    .ocv-overlay { position: fixed; inset: 0; z-index: 11000; display: none; }
    .ocv-overlay[aria-hidden="false"] { display: block; }
    .ocv-overlay .ocv-overlay-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,.5); }
    /* Mobile browser address bar handling: prefer lvh, fall back to svh, then dvh */
    .ocv-overlay, .ocv-overlay .ocv-overlay-content { height: 100lvh; height: 100svh; height: 100dvh; }
    .ocv-overlay .ocv-overlay-content {
        position: fixed; top: 0; left: 0; height: 100vh; width: 100%;
        display: flex; align-items: flex-start; justify-content: center;
        overflow: hidden;
        padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom);
        box-sizing: border-box;
        overscroll-behavior: none; touch-action: none;
    }
    .ocv-overlay .ocv-overlay-panel {
        height: 100%; width: 100%;
        display: flex; align-items: flex-start; justify-content: center;
        overflow: hidden; touch-action: none;
        background: transparent;
        box-sizing: border-box;
    }
    .ocv-overlay #ocvOverlayMount {
        height: 100vh; width: auto; max-width: none; overflow: hidden;
        background: #ffffff; display: inline-block;
        /* 현재 오버레이는 mount transform이 아니라 실제 width/height와 자식 fit으로
           배치한다. 예전 합성 레이어 힌트를 남기면 Safari가 iframe 전체를 열린 시점의
           저해상도 합성 비트맵으로 고정해 보드·돌·선수 헤더를 함께 흐리게 만든다. */
        transform-origin: top center;
        box-sizing: border-box;
    }
    /* 준비될 때까지 화면을 가리는 덮개. iframe 자체의 표시 상태는 건드리지 않는다.
       visibility:hidden 은 페인트를 건너뛰어 WebKit 이 빈 합성면을 재사용하고(흰 화면),
       opacity 는 합성 레이어를 만들어 열린 시점의 저해상도 래스터로 고정된다(보드·돌 흐림).
       둘 다 겪은 뒤 남은 방법: iframe 은 그대로 그리게 두고 위를 불투명하게 덮는다. */
    .ocv-overlay .ocv-stage-cover {
        position: absolute; inset: 0; z-index: 2; background: #ffffff;
    }
    html.fs-app-theme-dark .ocv-overlay .ocv-stage-cover,
    body.fs-app-theme-dark .ocv-overlay .ocv-stage-cover {
        background: #0b121d;
    }
    .ocv-overlay .ocv-tourney-game-loader {
        position: absolute; inset: 0; z-index: 2;
        display: flex; align-items: center; justify-content: center;
        background: #ffffff; color: #64748b;
    }
    .ocv-overlay .ocv-tourney-game-loader::before {
        content: ""; width: 30px; height: 30px; box-sizing: border-box;
        border: 3px solid rgba(100,116,139,.25); border-top-color: #2563eb;
        border-radius: 50%; animation: ocv-tourney-loader-spin .7s linear infinite;
    }
    html.fs-app-theme-dark .ocv-overlay .ocv-tourney-game-loader,
    body.fs-app-theme-dark .ocv-overlay .ocv-tourney-game-loader {
        background: #0b121d; color: #94a3b8;
    }
    @keyframes ocv-tourney-loader-spin { to { transform: rotate(360deg); } }
    @media (prefers-reduced-motion: reduce) {
        .ocv-overlay .ocv-tourney-game-loader::before { animation-duration: 1.4s; }
    }
    body.ocv-overlay-open { overflow: hidden !important; touch-action: none; height: 100% !important; overscroll-behavior: none !important; }
    body.ocv-overlay-open.flipsight-archive-open { touch-action: auto !important; }
    body.ocv-overlay-open.ocv-frame-scroll-open { touch-action: pan-y !important; }
    /* 오버레이 위에 자기 스크롤 영역을 가진 팝업(유저기록·기록 히스토리 등)이 열려 있으면
       body touch-action:none 이 그 팝업의 터치 스크롤까지 죽인다. 표면이 등록된 동안만 해제.
       (등록·해제는 공용 OCScrollLock 이 소유 — oc-scroll-lock.js) */
    body.ocv-overlay-open.oc-scroll-surface-open { touch-action: auto !important; }
    .ocv-overlay.ocv-frame-scroll .ocv-overlay-content,
    .ocv-overlay.ocv-frame-scroll .ocv-overlay-panel,
    .ocv-overlay.ocv-frame-scroll #ocvOverlayMount {
        touch-action: pan-y;
        overscroll-behavior-y: contain;
    }
    html.ocv-no-scroll { overflow: hidden !important; height: 100% !important; overscroll-behavior: none !important; }
    .ocv-overlay.ocv-no-viewport-top .ocv-overlay-content { top: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; }
    .ocv-review-launcher { position: absolute; z-index: 4; top: 0; left: 3px; display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 32px; margin: 0; padding: 0; border: 0; border-radius: 6px; background: transparent; color: #f4c542; cursor: pointer; pointer-events: auto; }
    .ocv-review-launcher[hidden], .ocv-overlay.ocv-game-review-open .ocv-review-launcher { display: none !important; }
    .ocv-review-launcher:hover { background: rgba(255,255,255,.1); }
    .ocv-review-launcher:focus-visible { outline: 2px solid #60a5fa; outline-offset: -3px; }
    .ocv-topbar-close:focus-visible { outline: 2px solid #60a5fa; outline-offset: -3px; }
    .ocv-review-launcher svg { display: block; width: 23px; height: 23px; overflow: visible; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
    /* Normal FlipSight keeps an inline viewer below #pzTitleBar. Reuse the
       Report glyph there without borrowing the fullscreen bar's 32px box. */
    #pzTitleBar.pz-title-bar.ocv-inline-review-available { display: flex; align-items: center; }
    #pzTitleBar.pz-title-bar.ocv-inline-review-available #pzTitle { flex: 1 1 auto; min-width: 0; width: auto; }
    .ocv-inline-review-launcher { flex: 0 0 34px; align-self: stretch; display: inline-flex; align-items: center; justify-content: center; width: 34px; min-width: 34px; height: 25px; margin: 0; padding: 0; border: 0; border-radius: 5px; background: transparent; color: #f4c542; cursor: pointer; }
    html.fs-embed .ocv-inline-review-launcher { height: 33px; }
    .ocv-inline-review-launcher[hidden] { display: none !important; }
    .ocv-inline-review-launcher:hover { background: rgba(255,255,255,.1); }
    .ocv-inline-review-launcher:focus-visible { outline: 2px solid #60a5fa; outline-offset: -3px; }
    .ocv-inline-review-launcher svg { display: block; width: 22px; height: 22px; overflow: visible; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
    .ocv-review-tabs { position: absolute; inset: 0 52px; display: grid; grid-template-columns: 1fr 1fr; align-items: stretch; gap: 2px; padding: 3px 0; pointer-events: auto; z-index: 3; }
    .ocv-review-tabs[hidden] { display: none !important; }
    .ocv-review-tab { min-width: 0; padding: 0 5px; border: 0; border-radius: 7px; background: transparent; color: #cbd5e1; font: 750 12px/1 system-ui,sans-serif; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .ocv-review-tab[aria-selected="true"] { background: #fff; color: #111827; }
    .ocv-review-tab:focus-visible { outline: 2px solid #60a5fa; outline-offset: -2px; }
    .ocv-overlay.ocv-game-review-open :focus,
    .ocv-overlay.ocv-game-review-open :focus-visible { outline: none !important; }
    .ocv-review-surface { position: absolute; z-index: 90; top: 36px; right: 0; bottom: 0; left: 0; width: auto; max-width: none; height: auto; box-sizing: border-box; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; padding: 13px clamp(6px,3.65%,14px) 18px; background: #f4f7fb; color: #172033; touch-action: pan-y; font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; }
    .ocv-review-surface[hidden] { display: none !important; }
    .ocv-review-content { width: 100%; min-width: 0; }
    .ocv-review-players { display: grid; grid-template-columns: minmax(0,1fr) minmax(80px,84px) minmax(0,1fr); align-items: start; gap: clamp(2px,1.56%,6px); min-width: 0; padding: 2px 9px 6px 3px; box-sizing: border-box; }
    .ocv-review-player-seat { display: grid; justify-items: center; width: 100%; max-width: 128px; min-width: 0; color: inherit; }
    .ocv-review-player-seat.black { justify-self: start; }
    .ocv-review-player-seat.white { justify-self: end; }
    .ocv-review-player { position: relative; display: grid; grid-template-columns: minmax(0,1fr); align-content: start; justify-items: center; width: min(108px,100%); min-width: 0; padding: 3px; border: 1px solid #d9e2ee; border-radius: 10px; box-sizing: border-box; box-shadow: 0 5px 15px rgba(15,23,42,.08); }
    .ocv-review-player.black { border-color: #111827; background: #111827; color: #f8fafc; }
    .ocv-review-player.white { border-color: #cbd5e1; background: #fff; color: #111827; }
    .ocv-review-player.winner { border-color: #d4a017; box-shadow: 0 0 0 2px rgba(212,160,23,.24), 0 5px 15px rgba(15,23,42,.1); }
    .ocv-review-player-status { position: absolute; z-index: 2; top: 7px; left: 50%; max-width: calc(100% - 12px); transform: translateX(-50%); overflow: hidden; padding: 3px 7px; border-radius: 999px; box-sizing: border-box; background: #f4c542; color: #3f2d00; box-shadow: 0 1px 4px rgba(15,23,42,.3); font-size: 9px; font-weight: 850; line-height: 1; text-overflow: ellipsis; white-space: nowrap; text-transform: uppercase; }
    .ocv-review-player-top { display: grid; justify-items: center; gap: 5px; width: 100%; min-width: 0; }
    .ocv-review-player-photo { display: block; width: 100px; max-width: 100%; height: auto; aspect-ratio: 1 / 1; flex: none; border: 1px solid #d9e2ee; border-radius: 6px; object-fit: cover; background: #e2e8f0; box-sizing: border-box; }
    .ocv-review-player-identity { display: grid; justify-items: center; width: 100%; max-width: 100%; min-width: 0; margin: 5px auto 0; color: inherit; text-align: center; }
    .ocv-review-player-identity-line { display: flex; width: 100%; max-width: 100%; min-width: 0; align-items: center; justify-content: center; gap: 0; }
    .ocv-review-player-meta-line { margin-top: 2px; }
    .ocv-review-player-name { display: block; flex: 0 1 auto; min-width: 0; margin: 0; padding: 0; overflow: hidden; border: 0; appearance: none; -webkit-appearance: none; background: transparent; color: inherit; font: inherit; font-size: 13px; font-weight: 700; line-height: 1.15; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
    .ocv-review-player-name-link { cursor: pointer; text-decoration: none; }
    .ocv-review-player-name-link:hover { text-decoration: underline; text-underline-offset: 2px; }
    .ocv-review-player-flag { display: block; width: 20px !important; height: 15px !important; margin: 0 4px 0 0 !important; object-fit: cover; border: 1px solid rgba(0,0,0,.15); border-radius: 2px; box-sizing: border-box; flex: 0 0 auto; }
    .ocv-review-player-donor { margin-left: 0 !important; margin-right: 4px !important; }
    .ocv-review-player-verified { margin-left: 5px !important; margin-right: 0 !important; }
    .ocv-review-player-rating { display: block; flex: 0 0 auto; margin-left: 0; font-size: 13px; font-weight: 450; font-variant-numeric: tabular-nums; white-space: nowrap; color: inherit; }
    .ocv-review-player-rating.pz-rt-red { color: #e53935; }
    .ocv-review-player-rating.pz-rt-orange { color: #fb8c00; }
    .ocv-review-player-rating.pz-rt-purple { color: #8e24aa; }
    .ocv-review-player-rating.pz-rt-blue { color: #1e88e5; }
    .ocv-review-player-rating.pz-rt-green { color: #43a047; }
    .ocv-review-player-rating.pz-rating-unofficial { color: #999; font-weight: 450; }
    .ocv-review-player.black .ocv-review-accuracy { color: #f8fafc; }
    .ocv-review-player.white .ocv-review-accuracy { color: #111827; }
    .ocv-review-accuracy { max-width: 100%; margin-top: 7px; padding: 0 2px; box-sizing: border-box; overflow: visible; font-size: clamp(18px,7.3vw,28px); font-weight: 850; line-height: 1; letter-spacing: -.02em; white-space: nowrap; }
    .ocv-review-summary { position: relative; z-index: 5; align-self: stretch; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; width: 100%; min-width: 0; overflow: visible; padding: 37px 0 0; box-sizing: border-box; text-align: center; }
    .ocv-review-score { max-width: 100%; padding: 0 2px; box-sizing: border-box; overflow: visible; color: inherit; font-size: clamp(17px,5.5vw,21px); font-weight: 850; line-height: 1; letter-spacing: -.06em; white-space: nowrap; }
    .ocv-review-score-box { display: flex; flex-direction: column; align-items: center; gap: 8px; max-width: 100%; min-width: 0; }
    .ocv-review-game-kind { max-width: 100%; color: #64748b; font-size: 12px; font-weight: 800; line-height: 1; letter-spacing: .02em; white-space: nowrap; }
    .ocv-review-result-label { max-width: 100%; margin-top: 5px; overflow-wrap: anywhere; color: #64748b; font-size: 10px; font-weight: 750; line-height: 1.15; }
    .ocv-review-result-label:empty { display: none; }
    .ocv-review-accuracy-heading { position: relative; z-index: 6; display: grid; grid-template-columns: max-content 15px; align-items: center; gap: 3px; width: max-content; max-width: 100%; min-width: 0; margin: auto 0 53px; color: #64748b; font-size: 11px; font-weight: 800; line-height: 1; white-space: nowrap; }
    .ocv-review-accuracy-heading-label { min-width: 0; overflow: visible; text-overflow: clip; }
    .ocv-review-accuracy-help-button { display: inline-grid; place-items: center; width: 15px; height: 15px; margin: 0; padding: 0; border: 1px solid #94a3b8; border-radius: 50%; background: #fff; color: #475569; font: 850 10px/1 system-ui,sans-serif; cursor: pointer; }
    .ocv-review-accuracy-help-button[aria-expanded="true"] { border-color: #2563eb; background: #2563eb; color: #fff; }
    .ocv-review-accuracy-help-button:focus-visible { outline: 2px solid #60a5fa; outline-offset: 2px; }
    .ocv-review-accuracy-help { position: absolute; z-index: 20; top: calc(100% + 8px); left: 50%; width: min(300px, calc(100vw - 28px)); margin: 0; padding: 9px 10px; border: 1px solid #cbd5e1; border-radius: 9px; box-sizing: border-box; background: #fff; color: #475569; box-shadow: 0 8px 24px rgba(15,23,42,.22); font-size: 10px; font-weight: 500; line-height: 1.45; text-align: left; text-transform: none; white-space: normal; transform: translateX(-50%); }
    .ocv-review-accuracy-help::before { content: ""; position: absolute; top: -5px; left: 50%; width: 8px; height: 8px; border-top: 1px solid #cbd5e1; border-left: 1px solid #cbd5e1; background: inherit; transform: translateX(-50%) rotate(45deg); }
    .ocv-review-accuracy-help[hidden] { display: none !important; }
    /* ACCURACY 캡션 ↔ 양쪽 정확도 숫자 세로 중앙 정렬 (2026-09-03).
       기존 `margin: auto 0 53px`(바닥 고정)은 카드 높이가 사진 폭에 따라 변하는 넓은 화면(iPad)에서 숫자와 어긋났다.
       세 컬럼이 같은 행 트랙(1=사진·점수, 2=정확도 숫자·캡션, 3=이름·레이팅)을 공유하도록 subgrid 로 묶어
       캡션을 2행 중앙에 둔다. 카드 padding-bottom(3px)·숫자 margin-top(7px)은 2행 트랙에 들어가므로 캡션에도
       같은 여백을 주어 두 중심을 정확히 일치시킨다. 미지원 브라우저는 위 폴백 규칙 그대로. */
    @supports (grid-template-rows: subgrid) {
        .ocv-review-players { grid-template-rows: auto auto auto; align-items: stretch; }
        .ocv-review-player-seat { grid-row: 1 / span 3; grid-template-rows: subgrid; align-content: start; }
        .ocv-review-player { grid-row: 1 / span 2; grid-template-rows: subgrid; align-content: stretch; align-self: start; }
        .ocv-review-player-top { grid-row: 1; align-self: start; }
        .ocv-review-accuracy { grid-row: 2; align-self: start; }
        .ocv-review-player-identity { grid-row: 3; align-self: start; }
        .ocv-review-summary { grid-row: 1 / span 3; display: grid; grid-template-rows: subgrid; align-items: center; justify-items: center; padding: 0; }
        .ocv-review-score-box { grid-row: 1; align-self: center; }
        .ocv-review-result-label { grid-row: 1; align-self: end; margin-top: 0; }
        .ocv-review-accuracy-heading { grid-row: 2; align-self: center; margin: 7px 0 3px; }
    }
    .ocv-review-game-type { display: flex; align-items: flex-start; gap: 10px; min-width: 0; margin: 9px 0; padding: 0; box-sizing: border-box; }
    .ocv-review-report-coach { flex: 0 0 auto; }
    .ocv-review-game-type-label { font-weight: 800; }
    .ocv-review-game-type-copy { position: relative; flex: 1 1 auto; min-width: 0; margin: 0; padding: 6px 12px; border-radius: 12px; background: #e9edf3; color: #475569; font-size: 13px; line-height: 1.35; overflow-wrap: anywhere; }
    .ocv-review-game-type-copy::before { content: ''; position: absolute; top: 10px; left: -8px; border-width: 8px 8px 8px 0; border-style: solid; border-color: transparent #e9edf3 transparent transparent; }
    .ocv-review-start { display: block; width: 100%; margin: 0 0 12px; padding: 6px 14px; border: 1px solid #0f766e; border-radius: 9px; background: #0f766e; color: #fff !important; font: 750 14px/1.3 system-ui,sans-serif; cursor: pointer; }
    .ocv-review-start:hover:not(:disabled), .ocv-review-start:focus-visible { border-color: #115e59; background: #115e59; }
    .ocv-review-start:active:not(:disabled) { border-color: #134e4a; background: #134e4a; }
    .ocv-review-start:disabled { opacity: .45; cursor: default; }
    .ocv-report-coach-picker { position: absolute; z-index: 100; inset: 36px 0 0; display: grid; align-items: center; padding: 16px; background: rgba(0,0,0,.55); box-sizing: border-box; touch-action: pan-y; }
    .ocv-report-coach-picker-panel { display: flex; flex-direction: column; max-height: 100%; min-height: 0; width: 100%; max-width: 520px; margin: auto; padding: 14px; border: 1px solid #d9e2ee; border-radius: 13px; background: #f4f7fb; color: #172033; box-sizing: border-box; }
    .ocv-report-coach-picker-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; font-size: 15px; }
    .ocv-report-coach-picker-head button { padding: 0 5px; border: 0; background: transparent; color: inherit; font: 700 26px/1 system-ui,sans-serif; cursor: pointer; }
    .ocv-report-coach-options { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8px; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
    .ocv-report-coach-option { display: flex; align-items: center; gap: 7px; min-width: 0; padding: 8px; border: 1px solid #d9e2ee; border-radius: 9px; background: #fff; color: inherit; text-align: left; cursor: pointer; }
    .ocv-report-coach-option[aria-checked="true"] { border-color: #3b82f6; background: #dbeafe; }
    .ocv-report-coach-option img { width: 40px; height: 40px; flex: 0 0 auto; } /* 모양·바탕: ocviewer.review-coach.css 공용 규칙 */
    .ocv-report-coach-option span { min-width: 0; overflow-wrap: anywhere; }
    .ocv-report-coach-option strong { display: block; font-size: 12px; }
    .ocv-report-coach-option small { display: block; margin-top: 3px; font-size: 10px; line-height: 1.35; opacity: .7; }
    .ocv-review-graph { margin: 10px 0; }
    .ocv-review-graph svg { display: block; width: 100%; height: 120px; }
    .ocv-review-graph svg.ocv-review-graph-tall { height: 150px; }
    /* 넓은 오버레이(맥 iPad 앱·태블릿 가로, 600px 이상)에서는 고정 높이가 viewBox(600×200/250) 비율을 깨뜨려
       점이 가로로 늘어난다. 폭에 비례한 높이로 그리고, 폭은 780px 까지만 키운다(2026-09-12). 폰 폭은 그대로. */
    @media (min-width: 600px) {
      .ocv-review-graph { max-width: 780px; margin-left: auto; margin-right: auto; }
      .ocv-review-graph svg { height: auto; aspect-ratio: 600 / 200; }
      .ocv-review-graph svg.ocv-review-graph-tall { height: auto; aspect-ratio: 600 / 250; }
    }
    .ocv-review-graph-axis { stroke-width: 1; stroke-dasharray: 4 4; stroke-opacity: .7; }
    .ocv-review-graph-label { font-size: 14px; }
    .ocv-review-graph-zero { stroke-width: 1.25; }
    .ocv-review-graph-path { fill: none; stroke: #ff0033; stroke-width: 3; stroke-linejoin: round; stroke-linecap: round; }
    .ocv-review-graph-pre-dim, .ocv-review-graph-post-dim { pointer-events: none; }
    .ocv-review-graph-key-moment { vector-effect: non-scaling-stroke; }
    .ocv-review-graph-analysis-label { font-size: 18px; font-weight: 700; stroke: none; paint-order: fill; }
    html.fs-app-theme-dark .ocv-review-graph-analysis-dim,
    body.fs-app-theme-dark .ocv-review-graph-analysis-dim { fill: #07101d !important; opacity: .58 !important; }
    html.fs-app-theme-dark .ocv-review-graph-analysis-label,
    body.fs-app-theme-dark .ocv-review-graph-analysis-label { fill: #f8fafc !important; }
    .ocv-review-counts { position: relative; overflow: visible; border: 1px solid #d9e2ee; border-radius: 13px; background: #fff; }
    .ocv-review-analysis-status { padding: 22px 14px; color: inherit; text-align: center; font-size: 13px; line-height: 1.5; overflow-wrap: anywhere; }
    .ocv-review-analysis-status p { margin: 5px 0 0; color: inherit; opacity: .7; font-size: 12px; }
    .ocv-review-tab:disabled { cursor: default; opacity: .45; }
    .ocv-review-count-row { position: relative; display: grid; grid-template-columns: 52px 1fr 52px; min-height: 32px; align-items: center; border-top: 1px solid #edf1f6; font-size: 12px; }
    .ocv-review-count-row:first-child { border-top: 0; }
    .ocv-review-count-row > * { min-width: 0; padding: 0 clamp(4px,3.1%,11px); }
    .ocv-review-count-row > .black, .ocv-review-count-row > .white { text-align: center; }
    .ocv-review-count-row.head { min-height: 27px; border-radius: 12px 12px 0 0; background: #f8fafc; color: #64748b; font-size: 10px; font-weight: 800; text-transform: uppercase; }
    .ocv-review-count-row .label { display: grid; grid-template-columns: 23px minmax(0,1fr); align-items: center; justify-self: center; width: min(100%,180px); box-sizing: border-box; column-gap: 6px; text-align: left; font-weight: 730; text-transform: none; }
    .ocv-review-count-row.head .label { display: block; width: 100%; text-align: center; text-transform: uppercase; }
    .ocv-move-quality-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; color: var(--ocv-quality-text, #172033); }
    .ocv-review-count-row .ocv-review-quality-help-trigger { position: relative; margin: 0; border: 0; border-radius: 7px; appearance: none; -webkit-appearance: none; background: transparent; color: inherit; font: inherit; cursor: help; touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
    .ocv-review-count-row .ocv-review-quality-help-trigger[aria-expanded="true"] { background: rgba(37,99,235,.08); }
    .ocv-review-quality-help-trigger:focus-visible { outline: 2px solid #60a5fa; outline-offset: 1px; }
    .ocv-review-quality-tooltip { position: absolute; z-index: 40; top: calc(100% + 7px); left: 50%; width: 270px; max-width: calc(100vw - 36px); padding: 8px 10px; border: 1px solid #cbd5e1; border-radius: 9px; box-sizing: border-box; background: #fff; color: #475569; box-shadow: 0 8px 24px rgba(15,23,42,.22); font-size: 11px; font-weight: 500; line-height: 1.4; text-align: left; white-space: normal; transform: translateX(-50%); pointer-events: none; }
    .ocv-review-quality-tooltip::before { content: ""; position: absolute; top: -5px; left: 50%; width: 8px; height: 8px; border-top: 1px solid #cbd5e1; border-left: 1px solid #cbd5e1; background: inherit; transform: translateX(-50%) rotate(45deg); }
    .ocv-review-count-row.mistake .ocv-review-quality-tooltip,
    .ocv-review-count-row.blunder .ocv-review-quality-tooltip { top: auto; bottom: calc(100% + 7px); }
    .ocv-review-count-row.mistake .ocv-review-quality-tooltip::before,
    .ocv-review-count-row.blunder .ocv-review-quality-tooltip::before { top: auto; bottom: -5px; border: 0; border-right: 1px solid #cbd5e1; border-bottom: 1px solid #cbd5e1; }
    .ocv-review-quality-tooltip[hidden] { display: none !important; }
    .ocv-review-unavailable { margin: 0; padding: 8px 11px; border-top: 1px solid #edf1f6; color: #64748b; font-size: 10px; line-height: 1.35; }
    @media (max-width: 600px) {
        .ocv-review-tab { font-size: 14px; }
        .ocv-review-surface { padding-right: 6px; padding-left: 6px; }
        .ocv-review-players { padding: 2px 3px 8px; }
        .ocv-review-count-row { min-height: 36px; font-size: 14px; }
        .ocv-review-count-row.head { min-height: 30px; font-size: 12px; }
        .ocv-review-count-row .label { grid-template-columns: 25px minmax(0,1fr); column-gap: 7px; }
        .ocv-review-quality-tooltip { width: 290px; max-width: calc(100vw - 28px); padding: 10px 11px; font-size: 13px; line-height: 1.45; }
        .ocv-review-unavailable { font-size: 11px; }
        .ocv-review-accuracy-help { padding: 11px 12px; font-size: 13px; line-height: 1.5; }
    }
    html.fs-app-theme-dark .ocv-review-surface, body.fs-app-theme-dark .ocv-review-surface { background: #0b121d; color: #e5edf8; }
    html.fs-app-theme-dark .ocv-review-counts,
    body.fs-app-theme-dark .ocv-review-counts { border-color: #2c3a4f; background: #111b2a; }
    html.fs-app-theme-dark .ocv-review-player.black, body.fs-app-theme-dark .ocv-review-player.black { border-color: #475569; background: #05080d; color: #f8fafc; }
    html.fs-app-theme-dark .ocv-review-player.white, body.fs-app-theme-dark .ocv-review-player.white { border-color: #cbd5e1; background: #f8fafc; color: #111827; }
    html.fs-app-theme-dark .ocv-review-player-seat, body.fs-app-theme-dark .ocv-review-player-seat { color: #e5edf8; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-red, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-red { color: #ef5b5b; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-orange, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-orange { color: #fb923c; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-purple, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-purple { color: #c084fc; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-blue, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-blue { color: #60a5fa; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-green, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rt-green { color: #4ade80; }
    html.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rating-unofficial, body.fs-app-theme-dark .ocv-review-player-seat .ocv-review-player-rating.pz-rating-unofficial { color: #a8b4c4; }
    html.fs-app-theme-dark .ocv-review-game-type-copy, body.fs-app-theme-dark .ocv-review-game-type-copy { background: #182638; color: #cbd5e1; }
    html.fs-app-theme-dark .ocv-review-game-type-copy::before, body.fs-app-theme-dark .ocv-review-game-type-copy::before { border-right-color: #182638; }
    html.fs-app-theme-dark .ocv-report-coach-picker-panel, body.fs-app-theme-dark .ocv-report-coach-picker-panel, html.fs-app-theme-dark .ocv-report-coach-option, body.fs-app-theme-dark .ocv-report-coach-option { border-color: #2c3a4f; background: #111b2a; color: #e5edf8; }
    html.fs-app-theme-dark .ocv-report-coach-option[aria-checked="true"], body.fs-app-theme-dark .ocv-report-coach-option[aria-checked="true"] { border-color: #3b82f6; background: #233b5f; }
    html.fs-app-theme-dark .ocv-review-accuracy-help-button, body.fs-app-theme-dark .ocv-review-accuracy-help-button { border-color: #64748b; background: #111b2a; color: #e2e8f0; }
    html.fs-app-theme-dark .ocv-review-accuracy-help-button[aria-expanded="true"], body.fs-app-theme-dark .ocv-review-accuracy-help-button[aria-expanded="true"] { border-color: #60a5fa; background: #2563eb; color: #fff; }
    html.fs-app-theme-dark .ocv-review-accuracy-help, body.fs-app-theme-dark .ocv-review-accuracy-help { border-color: #2c3a4f; background: #111b2a; color: #cbd5e1; }
    html.fs-app-theme-dark .ocv-review-accuracy-help::before, body.fs-app-theme-dark .ocv-review-accuracy-help::before { border-color: #2c3a4f; }
    html.fs-app-theme-dark .ocv-review-player.winner, body.fs-app-theme-dark .ocv-review-player.winner { border-color: #f4c542; box-shadow: 0 0 0 2px rgba(244,197,66,.3), 0 5px 15px rgba(0,0,0,.28); }
    html.fs-app-theme-dark .ocv-review-count-row, html.fs-app-theme-dark .ocv-review-unavailable,
    body.fs-app-theme-dark .ocv-review-count-row, body.fs-app-theme-dark .ocv-review-unavailable { border-color: #26364b; }
    html.fs-app-theme-dark .ocv-review-count-row.head, body.fs-app-theme-dark .ocv-review-count-row.head { background: #162235; }
    /* 사진판은 흑/백 카드와 무관하게 온라인 대국 플레이어 사진(app-theme.css .battle-seat-photo-img 계열)과
       같은 색을 쓴다 — 봇 아바타는 배경이 투명이라 이 색이 그대로 보인다. */
    html.fs-app-theme-dark .ocv-review-player-photo, body.fs-app-theme-dark .ocv-review-player-photo { border-color: #64748b; background: #334155; }
    html.fs-app-theme-dark .ocv-move-quality-label, body.fs-app-theme-dark .ocv-move-quality-label { color: var(--ocv-quality-dark-text, #e5edf8); }
    html.fs-app-theme-dark .ocv-review-count-row .ocv-review-quality-help-trigger[aria-expanded="true"],
    body.fs-app-theme-dark .ocv-review-count-row .ocv-review-quality-help-trigger[aria-expanded="true"] { background: rgba(96,165,250,.14); }
    html.fs-app-theme-dark .ocv-review-quality-tooltip,
    body.fs-app-theme-dark .ocv-review-quality-tooltip { border-color: #2c3a4f; background: #111b2a; color: #cbd5e1; }
    html.fs-app-theme-dark .ocv-review-quality-tooltip::before,
    body.fs-app-theme-dark .ocv-review-quality-tooltip::before { border-color: #2c3a4f; }
    /* Report graph follows the live ocviewer #anSvg palette. SVG presentation
       attributes are written when Report opens, but the app theme class may be
       synchronized one frame later; these rules must therefore remain the
       authoritative, live theme layer instead of relying on render-time JS. */
    html.fs-app-theme-dark .ocv-review-graph svg,
    body.fs-app-theme-dark .ocv-review-graph svg { background-color: var(--fs-app-bg, #0b1018) !important; }
    html.fs-app-theme-dark .ocv-review-graph .an-band-mid,
    body.fs-app-theme-dark .ocv-review-graph .an-band-mid { fill: #183326 !important; }
    html.fs-app-theme-dark .ocv-review-graph .an-band-light,
    body.fs-app-theme-dark .ocv-review-graph .an-band-light { fill: #39331d !important; }
    html.fs-app-theme-dark .ocv-review-graph .an-band-heavy,
    body.fs-app-theme-dark .ocv-review-graph .an-band-heavy { fill: #3b251f !important; }
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-axis,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-axis { stroke: #475569 !important; }
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-label,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-label { fill: #f8fafc !important; stroke: none !important; paint-order: fill !important; }
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-y-label,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-y-label { font-weight: 700 !important; }
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-zero,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-zero { stroke: #94a3b8 !important; }
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-pre-dim,
    html.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-post-dim,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-pre-dim,
    body.fs-app-theme-dark .ocv-review-graph .ocv-review-graph-post-dim { fill: #020617 !important; opacity: .46 !important; }
