/* ==========================================================================
   Run QA — 결과 레이어 창 (.qap) · 그리드 셀 표시 · 확정 기록 출처 색
   설계: app/docs/workspace-qa-run-2026-09-26/10-results-layer-ui.md
   편집 이력 창(.ehp) 값을 기준으로 맞췄다. 편집 이력은 JS 로 스타일을 주입하지만
   이 창은 이 파일에만 정의한다 — JS 주입 스타일이 CSS 파일 수정을 가려 버리는 문제를 겪었다.
   ========================================================================== */

.qap {
    position: fixed; right: 20px; top: 140px;           /* 편집 이력(top 100px)과 겹치지 않게 40px 아래 */
    width: 480px; height: 600px;
    min-width: 380px; min-height: 320px; max-width: 90vw; max-height: 90vh;
    background: var(--bs-body-bg, #fff);
    border: 1px solid #dee2e6; border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    z-index: 1060;
    display: flex; flex-direction: column;
    font-size: 14px;
    resize: both; overflow: hidden;
}
.qap.qap-dragging { cursor: move; user-select: none; box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18); }

.qap-header {
    padding: 12px 16px; border-bottom: 1px solid #e9ecef; background: #f8f9fa;
    border-radius: 10px 10px 0 0;
    display: flex; justify-content: space-between; align-items: center;
    cursor: move; user-select: none;
}
.qap-title { display: flex; align-items: center; gap: 8px; font-weight: 600; min-width: 0; }
.qap-subtitle { font-weight: 400; font-size: 12px; color: #6c757d; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qap-close { background: none; border: none; font-size: 16px; color: #6c757d; cursor: pointer; padding: 4px 8px; border-radius: 4px; }
.qap-close:hover { background: #e9ecef; color: #212529; }
.qap-close:focus-visible, .qap-mode-btn:focus-visible, .qap-link:focus-visible,
.qap-cell-link:focus-visible, .qap-icon-btn:focus-visible, .qap-btn:focus-visible { outline: 2px solid #0d6efd; outline-offset: 1px; }

.qap-summary { padding: 8px 12px; border-bottom: 1px solid #e9ecef; background: #fafbfc; font-size: 12.5px; }
.qap-summary:empty { display: none; }
.qap-counts { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.qap-summary-line { display: flex; align-items: center; gap: 8px; margin-top: 4px; flex-wrap: wrap; color: #495057; }
.qap-busy { display: flex; align-items: center; gap: 8px; color: #495057; }
.qap-progress { height: 4px; background: #e9ecef; border-radius: 2px; margin-top: 6px; overflow: hidden; }
.qap-progress-bar { height: 100%; background: #0d6efd; transition: width 0.2s; }
.qap-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-left: 4px; }
.qap-dot.qap-error, .qap-badge-error { background: #dc3545; }
.qap-dot.qap-warning, .qap-badge-warning { background: #fd7e14; }
.qap-dot.qap-info, .qap-badge-info { background: #0dcaf0; }

.qap-mode-toggle { display: flex; padding: 8px; gap: 4px; border-bottom: 1px solid #e9ecef; }
.qap-mode-btn {
    flex: 1; min-width: 0; padding: 6px 8px; border: 1px solid #dee2e6; background: #fff; color: #495057;
    border-radius: 6px; cursor: pointer; font-size: 12.5px; white-space: nowrap;
}
.qap-mode-btn:hover { background: #f8f9fa; color: #212529; }
.qap-mode-btn.active { background: #0d6efd; color: #fff; border-color: #0d6efd; }

.qap-controls { display: flex; gap: 6px; padding: 8px; border-bottom: 1px solid #e9ecef; flex-wrap: wrap; align-items: center; }
.qap-select, .qap-search { font-size: 12px; padding: 3px 6px; border: 1px solid #ced4da; border-radius: 4px; background: #fff; }
.qap-select { max-width: 160px; }
.qap-search { flex: 1; min-width: 100px; }
.qap-check { font-size: 12px; color: #495057; display: inline-flex; align-items: center; gap: 4px; cursor: pointer; }

.qap-content { flex: 1; overflow-y: auto; padding: 8px; }
.qap-empty { text-align: center; color: #6c757d; padding: 40px 16px; }
.qap-empty-icon { font-size: 32px; display: block; margin-bottom: 8px; color: #adb5bd; }

.qap-group { margin-bottom: 8px; }
.qap-group-head {
    display: flex; align-items: center; gap: 6px; padding: 6px 8px; border-radius: 6px;
    background: #f1f3f5; cursor: pointer; font-size: 13px; user-select: none;
}
.qap-group-name { font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qap-group-count { color: #6c757d; font-size: 12px; }

.qap-card { border: 1px solid #e9ecef; border-radius: 6px; padding: 8px 10px; margin: 6px 0 0; background: #fff; }
.qap-card.qap-stale { opacity: 0.6; }
/* 그리드에서 고른 셀의 행 — 민트 테두리(v4 accent) */
.qap-card.qap-current { border-color: var(--ws-accent, #00d4aa); box-shadow: 0 0 0 2px var(--ws-accent-glow, rgba(0, 212, 170, 0.18)); }
.qap-cell-link.qap-current { background: var(--ws-accent, #00d4aa); color: #000; }
.qap-card-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
/* 원문·번역 상자 — 경계로 앞뒤 ↵ 가 어느 칸인지 보이게, 라벨로 색에만 의존하지 않게 */
.qap-text-wrap { margin-top: 4px; }
.qap-text { border-radius: 6px; border-left: 3px solid; padding: 5px 8px 6px 9px; }
.qap-text-src { background: #f8f9fa; border-left-color: #adb5bd; }
.qap-text-tgt { background: #eef5ff; border-left-color: #74a9f7; }
.qap-text-head { display: flex; justify-content: space-between; align-items: center; min-height: 18px; padding: 0 2px 1px 3px; }
.qap-text-label { font-size: 10.5px; font-weight: 600; color: #868e96; letter-spacing: 0.02em; }
.qap-copy-btn {
    background: transparent; border: none; padding: 2px 4px; border-radius: 3px; cursor: pointer;
    color: #868e96; font-size: 12px; line-height: 1; opacity: 0.6;
    display: inline-flex; align-items: center; justify-content: center;
    transition: opacity 0.15s ease, background-color 0.15s ease, color 0.15s ease;
}
.qap-copy-btn:hover { opacity: 1; background: rgba(0, 0, 0, 0.05); color: #495057; }
.qap-copy-btn.qap-copy-success { color: #2e7d32; opacity: 1; background: rgba(46, 125, 50, 0.08); }
.qap-copy-btn:focus-visible { outline: 2px solid #0d6efd; outline-offset: 1px; }
.qap-src { color: #495057; font-size: 12.5px; white-space: pre-wrap; word-break: break-word; }
.qap-tgt { color: #212529; font-size: 13px; white-space: pre-wrap; word-break: break-word; }
.qap-hl-src { background: #e7f1ff; padding: 0 1px; border-radius: 2px; }
.qap-hl-tgt { background: #ffe3e3; padding: 0 1px; border-radius: 2px; }
/* 보이지 않는 문자 기호 (↵ 줄바꿈 · 앞뒤·연속 공백 → 탭 □ 전각 공백 ◌ 폭 없는 문자) — 본문과 구분되게 흐리게 */
.qap-ws { color: #adb5bd; font-size: 0.9em; user-select: none; }

.qap-issue { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 6px; margin-top: 6px; font-size: 12.5px; }
/* 무시된 이슈는 내용만 흐리게 — [무시 해제] 버튼까지 흐리면 누르기 어렵다 */
.qap-issue.qap-ignored > :not(.qap-issue-actions) { opacity: 0.5; }
.qap-badge { color: #fff; font-size: 10.5px; padding: 1px 5px; border-radius: 3px; text-transform: uppercase; }
.qap-rule { font-weight: 600; }
.qap-msg { flex-basis: 100%; color: #495057; }
.qap-issue-actions { margin-left: auto; display: inline-flex; align-items: center; gap: 10px; }
.qap-tag { font-size: 11px; background: #e9ecef; color: #495057; padding: 0 5px; border-radius: 3px; }

.qap-cell-link {
    font-family: var(--bs-font-monospace, monospace); font-size: 12px;
    background: #e7f1ff; color: #0d6efd; border: none; border-radius: 3px; padding: 0 5px; cursor: pointer;
}
.qap-cell-link:hover { background: #cfe2ff; }
.qap-cell-link.qap-stale { background: #e9ecef; color: #6c757d; }
.qap-link { background: none; border: none; color: #0d6efd; font-size: 12px; padding: 0 2px; cursor: pointer; }
/* main.css 의 전역 `button:hover { background-color:#0056b3 }` 가 (요소+가상클래스 우선순위로) 덮어써
   파랑 배경에 파랑 글자가 됐다 — 결과 창의 글자형 버튼은 hover 배경을 직접 지정한다 */
.qap-link:hover, .qap-link:focus-visible { text-decoration: underline; background: rgba(13, 110, 253, 0.08); color: #0a58ca; border-radius: 3px; }
.qap-icon-btn { background: none; border: 1px solid #dee2e6; border-radius: 4px; padding: 1px 6px; color: #495057; cursor: pointer; }
.qap-icon-btn:hover { background: #e9ecef; }
.qap-btn { font-size: 12px; background: #fff; color: #495057; border: 1px solid #ced4da; border-radius: 4px; padding: 1px 8px; cursor: pointer; }
.qap-btn:hover { background: #f1f3f5; color: #212529; }
.qap-card-actions { margin-top: 6px; text-align: right; }

.qap-cgroup .qap-text-wrap { margin-bottom: 6px; }
.qap-cgroup .qap-src, .qap-cgroup .qap-tgt { font-weight: 600; }
.qap-variant { display: flex; gap: 6px; align-items: baseline; font-size: 12.5px; margin-top: 3px; flex-wrap: wrap; }
.qap-variant-count { color: #6c757d; min-width: 28px; }
.qap-variant-text { flex: 1; min-width: 120px; word-break: break-word; }
.qap-variant-rows { display: inline-flex; gap: 3px; flex-wrap: wrap; }

.qap-footer {
    padding: 8px 12px; border-top: 1px solid #e9ecef; background: #f8f9fa;
    display: flex; align-items: center; gap: 8px; font-size: 12px; flex-wrap: wrap;
}
.qap-final-reason { color: #6c757d; }

.qap-dialog .table td { padding: 4px 6px; }
/* 선택이 필요한 안내 — 경고(노랑)가 아니라 결정을 묻는 칸이라 연한 파랑 (번역 상자 .qap-text-tgt 와 같은 계열) */
.qap-conflict { border: 1px solid #b6d4fe; background: #eef5ff; border-radius: 6px; padding: 8px 10px; }

/* ── 그리드 셀 표시 — 오른쪽 위 모서리 삼각형 ──
   provenance 가 배경색·왼쪽 세로줄을 쓰므로 QA 는 background-image 로 겹치지 않게 둔다. */
.jss_worksheet td.qa-mark-error   { background-image: linear-gradient(225deg, #dc3545 7px, transparent 7px) !important; }
.jss_worksheet td.qa-mark-warning { background-image: linear-gradient(225deg, #fd7e14 7px, transparent 7px) !important; }
.jss_worksheet td.qa-mark-info    { background-image: linear-gradient(225deg, #0dcaf0 7px, transparent 7px) !important; }
.jss_worksheet td.qa-mark-stale   { background-image: linear-gradient(225deg, #adb5bd 7px, transparent 7px) !important; }

/* ── 확정 기록 출처 (provenance) — 청록 세로줄 ── */
.ws-qa-finalized { border-left: 3px solid #20c997 !important; }
.ws-qa-finalized:hover { background-color: rgba(32, 201, 151, 0.10) !important; }

/* ── 편집 이력 창 배지 — QA 확정 · QA 자동 수정 ── */
.ehp-card.edit-qa_finalize .ehp-card-bar { background: #20c997; }
.ehp-card.edit-qa_finalize .ehp-card-badge { background: #e6fcf5; color: #0ca678; }
.ehp-card.edit-qa_fix .ehp-card-bar { background: #7950f2; }
.ehp-card.edit-qa_fix .ehp-card-badge { background: #f3f0ff; color: #7048e8; }

/* ── 툴바 분할 버튼 [실행] · [결과 + 배지] ──
   테두리는 바깥 묶음 하나 — 버튼마다 테두리를 두면 가운데가 이중선처럼 보였다.
   안쪽 칸은 테두리 없이, 사이는 가운뎃점(스타일 그룹 .style-action-sep 과 같은 방식). */
.ws-strip-qa-group {
    display: inline-flex; align-items: center;
    /* 2px — main.css 의 전역 `.btn { border: 2px }` 를 쓰는 옆 버튼들(편집 이력·컨텍스트 패널·저장)과 맞춘다.
       색은 v4 민트 토큰 — 편집 이력·저장과 같은 검토 도구 계열. (Bootstrap --bs-success 는 v4 체계 밖의 색) */
    border: 2px solid var(--ws-accent, #00d4aa); border-radius: var(--bs-border-radius-sm, 0.25rem);
    overflow: hidden; background: transparent;
}
.ws-strip-qa-group .qa-seg-btn {
    border: 0 !important; border-radius: 0; background: transparent; color: var(--ws-accent-strong, #00a080);
}
/* hover·포커스 — 저장(btn-outline-primary)과 같이 칸별 민트 채움 + 검정 글자.
   main.css 전역 button:hover(진한 파랑)를 덮도록 우선순위를 높게 둔다. */
.ws-strip-qa-group .qa-seg-btn:hover:not(:disabled),
.ws-strip-qa-group .qa-seg-btn:focus-visible { background: var(--ws-accent, #00d4aa); color: #000; }
.ws-strip-qa-group .qa-seg-btn:disabled {
    background: transparent; color: var(--ws-accent-strong, #00a080); opacity: 0.45;
}
.ws-strip-qa-group #toggle-qa-panel { padding-left: 8px; padding-right: 8px; }
.qa-seg-sep {
    color: var(--ws-accent, #00d4aa); opacity: 0.55;
    font-weight: 700; user-select: none; pointer-events: none; padding: 0 0.05rem;
}
.qa-strip-badge {
    display: inline-block; min-width: 18px; margin-left: 4px; padding: 0 5px; border-radius: 9px;
    font-size: 11px; font-weight: 600; line-height: 16px; text-align: center;
    background: #fd7e14; color: #fff;               /* warning 만 */
}
.qa-strip-badge.qa-strip-badge-error { background: #dc3545; }   /* error 가 하나라도 */
.qa-strip-badge[hidden] { display: none; }

@media (max-width: 576px) {
    .qap { right: 8px; left: 8px; width: auto; top: 110px; }
}

/* ── 여러 이슈 선택 (Phase 2, 10 §2.3) ── */
.qap-sel { margin: 0; flex: 0 0 auto; cursor: pointer; }
.qap-selbar {
    display: flex; align-items: center; gap: 6px; padding: 6px 12px; flex-wrap: wrap;
    background: #eef5ff; border-bottom: 1px solid #cfe2ff; font-size: 12px;
}
.qap-selbar[hidden] { display: none; }
.qap-selbar-count { font-weight: 600; color: #084298; margin-right: auto; }
.qap-btn:disabled { opacity: 0.5; cursor: default; background: #fff; }
/* 일관성 그룹의 [이 번역으로 통일] — 줄 끝으로 */
.qap-unify { order: 9; margin-left: auto; white-space: nowrap; }

/* ── 실행 창 룰 목록 (읽기 전용) ── */
#qa-rule-list summary { cursor: pointer; color: #495057; }
.qap-rule-list { list-style: none; padding: 4px 0 0; margin: 0; columns: 2; column-gap: 16px; }
.qap-rule-list li { display: flex; align-items: center; gap: 6px; padding: 1px 0; break-inside: avoid; }
.qap-rule-list .qap-dot { margin-left: 0; flex: 0 0 auto; }
.qap-rule-list li > .text-muted { margin-left: auto; font-size: 11px; }
.qap-rule-off { color: #adb5bd; }
.qap-rule-off .qap-dot { background: #dee2e6; }
@media (max-width: 576px) { .qap-rule-list { columns: 1; } }

/* ── 맞춤법 [교정안 적용] — 교정안 고르기 (2026-10-05) ── */
.qap-sug { font-size: 12px; padding: 0 4px; border: 1px solid #ced4da; border-radius: 4px; max-width: 180px; }

/* ── 오픈소스 고지 — 실행 창 맨 아래 링크 줄 + 별도 레이어 (ModalDialog 1060 위) ── */
.qap-oss-line { margin-top: 12px; padding-top: 8px; border-top: 1px solid #e9ecef; text-align: right; }
.qap-oss { position: fixed; inset: 0; z-index: 1080; background: rgba(0, 0, 0, 0.35);
           display: flex; align-items: center; justify-content: center; padding: 16px; }
.qap-oss-box { background: #fff; border-radius: 8px; box-shadow: 0 8px 28px rgba(0, 0, 0, 0.2);
               width: min(680px, 100%); max-height: 80vh; overflow: auto; padding: 14px 16px; }
.qap-oss-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }

/* ── 수정 계열 버튼([수정] · [교정안 적용] · [이 룰 전체 수정]) — 무시(파랑)와 구분되는 짙은 민트 (2026-10-05) ──
   --ws-accent-strong(#00a080)은 흰 바탕 12px 글자에 대비가 낮아 한 단계 더 짙게 */
.qap-link.qap-link-fix { color: #00795f; font-weight: 600; }
.qap-link.qap-link-fix:hover, .qap-link.qap-link-fix:focus-visible { color: #005c48; background: rgba(0, 160, 128, 0.10); }
.qap-group-head .qap-link + .qap-link { margin-left: 4px; }   /* 그룹 머리 [이 룰 전체 수정] · [전체 무시] 사이 */
.qap-fix-pick { display: inline-flex; align-items: center; gap: 4px; }   /* 교정안 고르기 + 적용 버튼은 한 덩어리 */

/* ── 맞춤법 사전 관리 (09 §3.6) ── */
.qap-dict-form { display: flex; gap: 6px; align-items: center; }
.qap-dict-form .qap-dict-kind { flex: 0 0 auto; width: auto; }             /* 종류 먼저 — 입력할 내용이 종류에 따라 다르다 */
.qap-dict-form input { flex: 1 1 0; min-width: 0; }                         /* 단어 칸이 남은 폭을 다 쓴다 (교정은 둘이 나눔) */
/* 입력 줄 아래 — [사전에 추가](줄 처음), 그 아래 예시 안내. 버튼을 내려 입력 칸이 줄 폭을 다 쓴다 */
.qap-dict-form-foot { display: flex; align-items: center; margin: 6px 0 10px; }
.qap-dict-form-foot .btn { flex: 0 0 auto; }
/* 고정 폭 — 내용 따라 줄었다 늘면 종류(명사 ↔ 교정)를 바꿀 때 창 크기가 바뀐다. 교정(두 칸) 기준 660px */
.modal.qap-dict-modal .modal-container { width: min(660px, 92vw); max-width: min(660px, 92vw); }
.qap-dict-arrow { color: #6c757d; flex: 0 0 auto; }
.qap-dict-table td { vertical-align: middle; }
@media (max-width: 576px) { .qap-dict-form { flex-wrap: wrap; } .qap-dict-form input { flex-basis: 100%; } }

/* ── 결과 요약 — 검사 항목별 (2026-10-06) ── */
.qap-fams { display: grid; gap: 3px; }
.qap-fam-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.qap-fam-name { flex: 0 0 72px; text-align: left; font-weight: 600; font-size: 12.5px; color: #212529;
                background: none; border: 1px solid transparent; border-radius: 4px; padding: 0 4px; cursor: pointer; }
.qap-fam-counts { display: inline-flex; align-items: center; gap: 2px; flex-wrap: wrap; }
.qap-count { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; color: #212529;
             background: none; border: 1px solid transparent; border-radius: 10px; padding: 0 6px; cursor: pointer; }
.qap-count .qap-dot { margin-left: 0; }
.qap-fam-name:hover, .qap-count:hover { background: #e9ecef; color: #212529; }
.qap-fam-name.active, .qap-count.active { border-color: #0d6efd; background: #e7f1ff; }      /* 걸려 있는 필터 */
.qap-fam-time { margin-left: auto; color: #6c757d; font-size: 12px; white-space: nowrap; }
/* 툴바 배지 — 막는 것이 없고 info 만(맞춤법 등): 옅은 색 */
.qa-strip-badge.qa-strip-badge-info { background: #dee2e6; color: #495057; }
/* 무시 수 — 위 줄의 항목 이름(QA 규칙 · 맞춤법)과 왼쪽 시작을 맞춘다: 이름 버튼의 테두리 1px + 안쪽 여백 4px */
.qap-ignored-n { padding-left: 5px; }

/* ── 생성형 AI 맞춤법 (설계 12) ── */
.qap-spell-ai .qm-selector { margin-top: 2px; }
.qap-dim { opacity: 0.45; pointer-events: none; }                 /* 고르지 않은 방식의 옵션 */
.qap-tag.qap-ai-tag { background: #ede7f6; color: #4527a0; }     /* 결과 카드 — AI 가 낸 지적 */

/* ── AI 번역 품질 검사 (설계 13) ── */
.qap-acc .qm-selector { margin-top: 2px; }
.qap-acc-checks { max-height: 220px; overflow-y: auto; padding-right: 4px; }
.qap-acc-checks .form-check { margin-bottom: 1px; }
.qap-sugg { font-size: 0.8rem; color: var(--bs-secondary-color, #6c757d); margin-top: 2px; white-space: pre-wrap; }

/* ── AI 프롬프트 보기·편집 (workspace_qa_prompt.js) ── */
.qpe-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--bs-border-color, #dee2e6); margin-bottom: 12px; }
.qpe-tab { background: none; border: 1px solid transparent; border-bottom: none; padding: 6px 12px; font-size: 0.85rem;
           color: var(--bs-secondary-color, #6c757d); border-radius: 6px 6px 0 0; margin-bottom: -1px; }
.qpe-tab.active { color: var(--bs-body-color, #212529); border-color: var(--bs-border-color, #dee2e6);
                  background: var(--bs-body-bg, #fff); font-weight: 600; }
.qpe-tab:focus-visible { outline: 2px solid #00795f; outline-offset: 1px; }
.qpe-sec { border: 1px solid var(--bs-border-color, #dee2e6); border-radius: 6px; margin-bottom: 10px; overflow: hidden; }
.qpe-sec-head { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: var(--bs-tertiary-bg, #f8f9fa);
                border-bottom: 1px solid var(--bs-border-color, #dee2e6); }
.qpe-sec-title { font-weight: 600; font-size: 0.85rem; flex: 1; }
.qpe-badge { display: none; font-size: 0.7rem; padding: 1px 6px; border-radius: 8px; background: #e6f4ef; color: #00795f; }
.qpe-edited .qpe-badge { display: inline-block; }
.qpe-text { border: none; border-radius: 0; font-family: var(--bs-font-monospace, monospace); font-size: 0.82rem; resize: vertical;
            height: auto; margin: 0; }      /* main.css 전역 textarea { height: 250px; margin: 10px 0 } 를 이 칸에서만 — 높이는 rows 로 (2026-10-15) */
.qpe-text:focus { box-shadow: inset 0 0 0 2px #00795f; }
.qpe-pre { margin: 0; padding: 10px; max-height: 55vh; overflow: auto; white-space: pre-wrap; word-break: break-word;
           font-size: 0.8rem; background: var(--bs-tertiary-bg, #f8f9fa); border: 1px solid var(--bs-border-color, #dee2e6);
           border-radius: 6px; }

/* AI 번역 품질 — 교정안 한 줄(취소선 → 강조) + 미리보기 (2026-10-08) */
.qap-diff { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 6px; font-size: 0.82rem; margin-top: 3px; }
.qap-del { color: #b02a37; text-decoration: line-through; background: #fdecee; padding: 0 3px; border-radius: 3px; }
.qap-ins { color: #0f5132; text-decoration: none; background: #d9f2e6; padding: 0 3px; border-radius: 3px; font-weight: 600; }
.qap-arrow { color: var(--bs-secondary-color, #6c757d); }
.qap-diff .qap-link { margin-left: 4px; }
/* 미리보기 상자(교정안 · 유사한 행) — 이슈 줄(flex-wrap)의 맨 끝 · 한 줄 전체로 연다.
   (2026-10-11) 너비 규칙이 없으면 [무시] 버튼 묶음(margin-left: auto) 옆에 끼어 오른쪽 끝에 좁게 열리거나 버튼을 밀어냈다 */
.qap-issue > .qap-preview, .qap-issue > .qap-sim-preview { flex-basis: 100%; order: 10; min-width: 0; }
/* 부분 일관성 — 유사한 행 미리보기 (설계 18). 교정안 미리보기와 같은 왼쪽 띠 · 행마다 원문/번역 상자 */
.qap-sim-preview { margin-top: 4px; padding: 6px 8px; border-left: 3px solid #00795f;
                   background: var(--bs-tertiary-bg, #f8f9fa); border-radius: 0 4px 4px 0; max-height: 320px; overflow-y: auto; }
.qap-sim-row + .qap-sim-row { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--bs-border-color, #dee2e6); }
.qap-sim-head { margin-bottom: 2px; }
.qap-cell-inline { display: inline; padding: 0 2px; font-size: inherit; vertical-align: baseline; }
.qap-preview { margin-top: 4px; padding: 6px 8px; font-size: 0.82rem; white-space: pre-wrap; word-break: break-word;
               border-left: 3px solid #00795f; background: var(--bs-tertiary-bg, #f8f9fa); border-radius: 0 4px 4px 0;
               max-height: 240px; overflow-y: auto; }

/* ── QA 실행 창 — 검사 항목 탭 (2026-10-09) ──
   용어집 모달 탭(termbase_modal.js .tb-modal-tab)과 같은 모양: 밑줄 탭 · 아이콘 · 선택 = 파란 밑줄.
   창 폭과 탭 내용 높이를 고정 — 탭을 바꿔도 창 크기가 그대로. 넘치면 탭 안에서 스크롤. */
.modal.qap-run-modal .modal-container { width: min(730px, 96vw); max-width: min(730px, 96vw); }   /* 560 → 730 (2026-10-14) */
.qap-ctabs { display: flex; gap: 0; border-bottom: 2px solid #dee2e6; margin-bottom: 0.75rem; }
.qap-ctab { display: inline-flex; align-items: center; padding: 0.55rem 1rem; cursor: pointer; border: none;
            background: transparent; border-bottom: 3px solid transparent; margin-bottom: -2px; font-size: 0.9rem;
            color: #495057; transition: color 0.15s, border-color 0.15s; }
.qap-ctab:hover { color: #0d6efd; background: transparent; }
.qap-ctab.active { color: #0d6efd; border-bottom-color: #0d6efd; font-weight: 600; }
.qap-ctab:focus-visible { outline: 2px solid #0d6efd; outline-offset: -2px; }
.qap-ctab-dot { width: 7px; height: 7px; border-radius: 50%; margin-left: 6px; border: 1.5px solid #adb5bd; background: transparent; }
.qap-ctab-dot.on { border-color: #00795f; background: #00795f; }              /* 이 검사를 켰다 */
/* 탭 높이 — 화면 높이에 맞춰 (상단 · 탭 줄 · 하단 버튼 몫을 뺀 나머지), 380px 고정이던 것 (2026-10-14) */
/* 창 높이 고정 + 탭 영역이 남은 높이를 모두 차지 (flex) — 화면 크기와 상관없이 바깥 본문은 스크롤되지 않고
   탭 안에서만 스크롤된다. 숫자 계산(90vh − Npx)은 아래 상자 · 안내 줄 유무에 따라 어긋났다 (2026-10-14) */
/* 높이 = 내용(가장 긴 탭)에 맞춤, 상한 = 공용 90vh + 40px (화면은 98vh 까지). 고정 높이는 짧은 시트에서 빈 공간이 생겼다 (2026-10-15) */
.modal.qap-run-modal .modal-container { height: auto; max-height: min(calc(90vh + 40px), 98vh); }
.modal.qap-run-modal .modal-body { padding: 1rem 1.25rem; display: flex; flex-direction: column; min-height: 0; }
.modal.qap-run-modal .qap-dialog { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
.modal.qap-run-modal .qap-checks { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
.qap-cpane { height: 380px; overflow-y: auto; overflow-x: hidden; padding: 4px 6px 0 4px; }
/* 세 탭을 같은 칸에 겹친다: 보이지 않는 탭도 자리를 차지 → 높이 = 가장 긴 탭. 넘치면 줄어들고 탭 안에서 스크롤 */
.modal.qap-run-modal .qap-panes { flex: 0 1 auto; min-height: 0; display: grid; grid-template-rows: minmax(0, 1fr); }
.modal.qap-run-modal .qap-cpane { grid-area: 1 / 1; height: auto; min-height: 0; }
/*   Bootstrap 의 [hidden] { display: none !important } 를 이 창에서만 이긴다 — 안 그러면 보이는 탭 높이로만 정해져
     탭을 옮길 때마다 창 높이가 달라졌다 (2026-10-15). visibility:hidden 이라 포커스 · 화면 낭독기에서는 빠진다 */
.modal.qap-run-modal .qap-cpane[hidden] { display: block !important; visibility: hidden; }
/*   padding — 스크롤 영역(overflow)은 바깥으로 그리는 포커스 링(box-shadow 0.25rem)을 자른다.
     첫 체크박스의 왼쪽·위 링이 잘리지 않게 여유를 둔다 (2026-10-09 사용자 보고) */
.qap-cpane > .form-check:first-child { margin-bottom: 4px; }
.qap-cpane .qap-acc-checks { max-height: none; overflow: visible; }            /* 탭 전체가 스크롤 — 목록 안 이중 스크롤 없앰 */

/* AI 검사 2개 실행 방식 — 탭 아래, 탭과 무관하게 보인다 (2026-10-09) */
.qap-ai-mode { margin-top: 10px; padding: 8px 10px; border: 1px solid var(--bs-border-color, #dee2e6); border-radius: 6px;
               background: var(--bs-tertiary-bg, #f8f9fa); }
.qap-ai-mode .form-check-inline { margin-right: 0.75rem; }

/* QA 규칙 탭 — 설명 · 프로필 · 심각도별 개수 (2026-10-09) */
.qap-rule-sum { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; }
.qap-rule-sum-item { display: inline-flex; align-items: center; gap: 4px; }
.qap-dim-soft { opacity: 0.5; }               /* 꺼진 검사 — 흐리게만 (룰 목록은 펼쳐 볼 수 있게 클릭은 막지 않는다) */

/* AI 품질 항목 — 이 항목이 더 보내는 맥락 (용어집 · 전후 행) (2026-10-09) */
.qap-ctx-tag { display: inline-block; margin-left: 4px; padding: 0 5px; border-radius: 8px; font-size: 0.72rem;
               line-height: 1.5; color: #8a5300; background: #fff4e0; border: 1px solid #f3d9a6; vertical-align: 1px; }

/* ── AI 품질 — 전송 요약 카드 (2026-10-09) ──
   체크 목록 아래 흩어져 있던 5줄(맥락 · 경고 · 행/호출 · 프롬프트 · 품질 설명)을 의미 단위로:
   품질 설명은 선택기 바로 아래(.qm-description), 무엇을 얼마나 보내는지는 이 카드 한 곳, 프롬프트는 카드의 동작.
   라벨 · 값 두 칸(dl) — 눈이 왼쪽 라벨을 따라 내려가며 훑는다. 강조는 숫자와 경고에만. */
.qap-acc .qm-description { margin-top: 4px !important; font-size: 0.78rem !important; }
.qap-spell-ai .qm-description { margin-top: 4px !important; font-size: 0.78rem !important; }
.qap-sub-label { margin: 10px 0 4px; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.02em;
                 color: var(--bs-secondary-color, #6c757d); text-transform: uppercase; }
.qap-send { margin-top: 10px; border: 1px solid var(--bs-border-color, #dee2e6); border-left: 3px solid #00795f;
            border-radius: 6px; background: var(--bs-tertiary-bg, #f8f9fa); padding: 8px 10px 6px; }
.qap-send-title { font-size: 0.78rem; font-weight: 700; color: #00795f; margin-bottom: 4px; }
.qap-send-rows { display: grid; grid-template-columns: max-content 1fr; gap: 3px 12px; margin: 0; font-size: 0.8rem; }
.qap-send-rows dt { font-weight: 500; color: var(--bs-secondary-color, #6c757d); white-space: nowrap; }
.qap-send-rows dd { margin: 0; min-width: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 4px; }
.qap-send-rows dd strong { font-variant-numeric: tabular-nums; }
.qap-send-rows .qap-ctx-tag { margin-left: 0; }
.qap-send-note { flex-basis: 100%; font-size: 0.72rem; color: var(--bs-secondary-color, #6c757d); }
.qap-send-warn { display: flex; align-items: flex-start; gap: 6px; margin-top: 6px; padding: 4px 8px; border-radius: 4px;
                 font-size: 0.78rem; color: #7a4a00; background: #fff4e0; }
.qap-send-warn .bi { color: #d48806; margin-top: 1px; }
.qap-send-foot { display: flex; justify-content: flex-end; margin-top: 6px; padding-top: 6px;
                 border-top: 1px dashed var(--bs-border-color, #dee2e6); }
.qap-send-btn { display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; font-size: 0.78rem; font-weight: 500;
                color: #00795f; background: transparent; border: 1px solid #b7dccf; border-radius: 4px; }
.qap-send-btn:hover { background: #e6f4ef; }
.qap-send-btn:focus-visible { outline: 2px solid #00795f; outline-offset: 1px; }

/* ── 항목별 보기 2단 — 검사 항목(QA 규칙 · 맞춤법 · AI 품질) → 룰 (2026-10-09) ──
   검사 항목 머리는 룰 그룹 머리(회색 칩)와 다른 층으로 읽히게: 흰 바탕 · 녹색 왼쪽 막대 · 위아래 구분선,
   목록을 내려도 지금 어느 검사 항목인지 보이게 위에 붙는다(sticky). 안의 룰 그룹은 한 단 들여 쓴다. */
.qap-fam-sec { margin-bottom: 10px; }
.qap-fam-head { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; gap: 6px;
                margin: 0 -8px 6px; padding: 7px 12px 7px 9px; cursor: pointer; user-select: none;
                background: var(--bs-body-bg, #fff); border-left: 3px solid #00795f;
                border-top: 1px solid var(--bs-border-color, #dee2e6); border-bottom: 1px solid var(--bs-border-color, #dee2e6); }
.qap-fam-sec:first-child .qap-fam-head { border-top: none; }
.qap-fam-head:hover { background: #f4faf7; }
.qap-fam-head:focus-visible { outline: 2px solid #00795f; outline-offset: -2px; }
.qap-fam-title { font-size: 13px; font-weight: 700; color: #0b4f40; }
.qap-fam-sevs { display: inline-flex; gap: 8px; margin-left: auto; font-size: 12px; color: #495057;
                font-variant-numeric: tabular-nums; }
.qap-fam-sev { display: inline-flex; align-items: center; gap: 3px; }
.qap-fam-body { padding-left: 10px; }

/* 항목 필터 2단 — 검사 항목 선택지 (편집 이력 .ehp-cat-option 과 같은 역할, 2026-10-09) */
.qap-select option.qap-cat-option { font-weight: 600; color: #0b4f40; }

/* 부분 일관성 신뢰도 필터 · 등급 점 (18 §13 S-3) */
/* 분할 버튼 — 테두리는 칸마다(이웃과 1px 겹침), 선택한 칸은 테두리까지 초록으로 맨 위.
   묶음이 테두리를 그리면 선택 칸 바깥에 회색 테두리가 남아 보였다 (2026-10-14) */
.qap-conf { display: inline-flex; }
.qap-conf-btn { position: relative; border: 1px solid #ced4da; background: #fff; font-size: 12px; padding: 2px 9px;
                color: #495057; cursor: pointer; line-height: 1.5; }
.qap-conf-btn + .qap-conf-btn { margin-left: -1px; }
.qap-conf-btn:first-child { border-radius: 4px 0 0 4px; }
.qap-conf-btn:last-child { border-radius: 0 4px 4px 0; }
.qap-conf-btn:hover { background: #f1f3f5; }
.qap-conf-btn.active { z-index: 1; background: #00795f; border-color: #00795f; color: #fff; }
.qap-conf-btn:focus-visible { z-index: 2; outline: 2px solid #00795f; outline-offset: 1px; }
.qap-conf-dots { font-size: 10px; letter-spacing: 1px; color: #00795f; }

/* 부분 일관성 민감도 프리셋 (18 §13.5) */
.qap-sens { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 4px 0 2px 1.5rem; }
.qap-sens-note { font-size: 11px; }
.qap-sens-adv { margin: 0 0 4px 1.5rem; }
.qap-sens-adv summary { cursor: pointer; font-size: 12px; }
.qap-sens-adv .qap-num { width: 64px; }

/* 이름 · 제목 구성 요소 변형 묶음 카드 제목 (18 §16) */
.qap-variant-title { font-size: 12px; font-weight: 600; color: #343a40; }


/* QA 검사 설정 모달 — 정밀한 설정 시트 (2026-10-14)
   위계: 구역(초록 라벨 + 굵은 선) → 그룹(굵은 제목 + 설명) → 항목(가로 칸 · 두 열 행)
   입력은 고정 폭 '숫자 + 단위' 묶음, 기본값은 그 아래 — 행마다 칸 위치가 같다 */
.qas { --qas-accent: #00795f; --qas-line: var(--bs-border-color, #dee2e6); --qas-soft: var(--bs-tertiary-bg, #f8f9fa);
       --qas-muted: var(--bs-secondary-color, #6c757d); --qas-ctl-w: 108px; font-size: 13px; }
.qas-lead { margin: 0; color: var(--qas-muted); }
.qas-sec { margin-top: 20px; }
.qas-sec-head { padding-bottom: 8px; border-bottom: 2px solid var(--qas-accent); }
.qas-sec-title { font-size: 12px; font-weight: 700; letter-spacing: .02em; color: var(--qas-accent); }
.qas-sec-hint { margin-top: 2px; font-size: 12px; color: var(--qas-muted); }
.qas-group { padding: 14px 0; border-bottom: 1px solid var(--qas-line); }
.qas-group:last-child { border-bottom: 0; padding-bottom: 4px; }
.qas-group-title { font-weight: 600; color: var(--bs-body-color, #212529); }
.qas-group-hint { margin-top: 2px; font-size: 12px; line-height: 1.5; color: var(--qas-muted); }
/* 짧은 항목 — 같은 폭의 가로 칸 (프리셋 3칸 · 등급 2칸이 같은 열에 맞는다) */
.qas-tiles { display: grid; grid-template-columns: repeat(3, 136px); gap: 8px; margin-top: 10px; }
.qas-tile { display: flex; flex-direction: column; align-items: flex-start; gap: 5px; margin: 0; padding: 8px 10px;
            background: var(--qas-soft); border: 1px solid var(--qas-line); border-radius: 6px; cursor: text; }
.qas-tile:focus-within { border-color: var(--qas-accent); }
.qas-tile-label { font-size: 12px; font-weight: 600; color: #495057; }
/* 설명이 긴 항목 — 설명 | 고정 폭 입력 */
.qas-rows { margin-top: 6px; }
.qas-row { display: grid; grid-template-columns: minmax(0, 1fr) var(--qas-ctl-w); gap: 20px; align-items: start; padding: 10px 0; }
.qas-row + .qas-row { border-top: 1px dashed var(--qas-line); }
.qas-row-label { margin: 0; font-weight: 500; color: var(--bs-body-color, #212529); }
.qas-row-hint { margin-top: 2px; font-size: 12px; line-height: 1.5; color: var(--qas-muted); }
.qas-row-ctl { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; }
.qas-ctl { width: var(--qas-ctl-w); flex-wrap: nowrap; }
.qas-ctl .form-control { text-align: right; font-variant-numeric: tabular-nums; }
.qas-ctl .input-group-text { min-width: 38px; justify-content: center; font-size: 12px; }
.qas-def { font-size: 11px; color: var(--qas-muted); font-variant-numeric: tabular-nums; }
.qas-error { margin-top: 12px; }
.qas-note { margin: 14px 0 0; font-size: 12px; color: var(--qas-muted); }
@media (max-width: 576px) {
  .qas-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .qas-tile .qas-ctl { width: 100%; }
  .qas-row { grid-template-columns: 1fr; gap: 6px; }
  .qas-row-ctl { align-items: flex-start; }
}

/* ── QA 실행 창 정리 (2026-10-14) ──
   상단 = 한 줄 3칸(언어 페어 | 검사 열 | 범위). QA 규칙 탭 = 주 스위치 줄 + 같은 모양의 옵션 그룹.
   옵션 줄 = 굵은 이름 + 회색 설명 한 줄. 위계: 칸 라벨(작은 대문자) → 그룹 제목 → 옵션. */
.qap-dialog { --qap-accent: #00795f; --qap-line: var(--bs-border-color, #dee2e6); --qap-muted: var(--bs-secondary-color, #6c757d);
              font-size: 13px; }
.qap-head-label { font-size: 11px; font-weight: 700; letter-spacing: .04em; color: var(--qap-muted); margin-bottom: 4px; }
.qap-head-label[title] { cursor: help; }
.qap-run-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 0; border: 1px solid var(--qap-line);
                border-radius: 8px; background: var(--bs-tertiary-bg, #f8f9fa); }
.qap-run-head-2 { grid-template-columns: auto minmax(0, 1fr); }
.qap-head-cell { padding: 7px 12px; min-width: 0; }
.qap-head-cell + .qap-head-cell { border-left: 1px solid var(--qap-line); }
.qap-head-ctl { display: flex; align-items: center; gap: 6px; }
.qap-head-lang { width: 72px; }
.qap-head-row { width: 76px; text-align: right; font-variant-numeric: tabular-nums; }
.qap-head-check { margin: 4px 0 0; font-size: 12px; }
/* 검사 열 — 공용 선택기(workspace_lane_select)의 자체 라벨 · 여백을 칸에 맞춘다 */
.qap-head-lane > .mb-3 { margin: 0 !important; }
.qap-head-lane > .mb-3 > .form-label { display: none; }
.qap-head-lane .form-check-inline { margin-right: 10px; }
.qap-head-note { margin: 6px 2px 0; font-size: 12px; line-height: 1.5; color: var(--qap-muted); }
.qap-checks { margin-top: 12px; }

/* 주 스위치 — 검사를 켜고 끄는 줄. 오른쪽 = 심각도별 개수 */
.qap-master { padding: 2px 0 10px; }
.qap-master-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.qap-master-row .form-check-label { font-weight: 600; font-size: 14px; color: var(--bs-body-color, #212529); }
.qap-master-desc { margin: 2px 0 0 1.5rem; font-size: 12px; line-height: 1.5; color: var(--qap-muted); }
.qap-master-list { margin-left: 1.5rem; font-size: 12px; }
.qap-master-list summary { color: var(--qap-accent); cursor: pointer; }
.qap-rule-sum { font-size: 12px; }

/* 옵션 그룹 — 같은 모양: 제목 + 오른쪽 부가 정보, 그룹 사이 가는 선 */
.qap-og { padding: 10px 0 8px; border-top: 1px solid var(--qap-line); }
.qap-og-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 6px; }
.qap-og-title { font-size: 12.5px; font-weight: 700; color: var(--bs-body-color, #212529); }
.qap-og-meta { font-size: 12px; color: var(--qap-muted); text-align: right; }
.qap-og-note { font-size: 12px; line-height: 1.5; color: var(--qap-muted); margin: 2px 0 4px; }

/* 옵션 줄 — 굵은 이름 + 회색 설명 한 줄 (넘치면 설명만 다음 줄로) */
.qap-opt { margin: 0 0 5px; min-height: 0; }
.qap-opt .form-check-label { font-size: 13px; line-height: 1.45; }
.qap-opt-title { font-weight: 600; color: var(--bs-body-color, #212529); }
.qap-opt-desc { margin-left: 8px; color: var(--qap-muted); font-size: 12px; }
.qap-opt-sub { margin: -1px 0 7px 1.5rem; padding: 6px 10px; border-left: 2px solid var(--qap-line); }
.qap-opt-sub .qap-sens { margin: 0; }
.qap-opt-sub .qap-sens-adv { margin: 4px 0 0; }
.qap-col-badge { display: inline-block; margin-right: 6px; padding: 0 6px; border-radius: 4px; font-size: 11px; font-weight: 600;
                 color: #fff; background: #6c757d; vertical-align: 1px; }
.qap-ref-list { margin-top: 4px; }

/* '무시' 기준 — 켜고 끄는 칩 */
.qap-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.qap-chips-label { font-size: 12px; font-weight: 700; color: var(--bs-body-color, #212529); margin-right: 4px; }
.qap-chip { padding: 2px 10px; border: 1px solid var(--qap-line); border-radius: 999px; font-size: 12px; cursor: pointer;
            color: #495057; background: #fff; user-select: none; }
.btn-check:checked + .qap-chip { color: #fff; background: var(--qap-accent); border-color: var(--qap-accent); }
.btn-check:focus-visible + .qap-chip { outline: 2px solid var(--qap-accent); outline-offset: 1px; }

/* 맞춤법 · AI 품질 탭의 첫 체크(주 스위치)도 같은 무게 */
.qap-cpane > .form-check:first-child > .form-check-label { font-weight: 600; font-size: 14px; }

@media (max-width: 760px) {
  .qap-run-head, .qap-run-head-2 { grid-template-columns: 1fr; }
  .qap-head-cell + .qap-head-cell { border-left: 0; border-top: 1px solid var(--qap-line); }
  .qap-opt-desc { display: block; margin-left: 0; }
}
.qap-ctabs { align-items: flex-end; }
.qap-ctabs-aside { margin-left: auto; align-self: center; font-size: 12px; }
.qap-cpane .qap-ai-mode { margin: 12px 0 8px; }
.qap-master-profile { margin-top: 0; }

/* ── QA 실행 창 · 맞춤법 · AI 품질 탭 (2026-10-15) — QA 규칙 탭과 같은 문법 ──
   주 스위치 줄(오른쪽 = AI 모델) → 옵션 그룹. 높이를 줄이려고: 품질 모드 선택기를 이 창 안에서만 작게,
   검사할 항목 2열, 전송 요약 가로 3칸 · 프롬프트는 제목 줄 오른쪽. 공용 선택기 CSS 는 건드리지 않는다. */
.qap-master-meta { font-size: 12px; text-align: right; }
.qap-dialog .qm-selector { padding: 3px; gap: 4px; border-radius: 8px; font-size: 12.5px; margin-top: 2px; }
.qap-dialog .qm-option { min-height: 30px; padding: 4px 8px; border-radius: 6px; }
.qap-dialog .qm-option .qm-sub { font-size: 11px; }
.qap-dialog .qm-description { margin-top: 4px !important; font-size: 12px !important; line-height: 1.45 !important; }
.qap-ai-line { font-size: 12px; margin-bottom: 4px; }
.qap-ai-foot { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-top: 6px; font-size: 12px; }
/* 검사할 항목 — 2열 */
.qap-acc-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 18px; row-gap: 2px; }
.qap-acc-grid .qap-opt { margin-bottom: 3px; }
.qap-acc-grid .qap-opt-desc { margin-left: 6px; }
.qap-acc-tags { margin-left: 4px; white-space: nowrap; }
.qap-acc-note { display: block; font-size: 11px; font-style: italic; color: var(--qap-muted); }
/* 전송 요약 — 가로 3칸(라벨 위 · 값 아래), 프롬프트 버튼은 제목 줄 오른쪽 */
.qap-cpane .qap-send { margin-top: 10px; padding: 8px 12px; }
.qap-send-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 6px; }
.qap-send-head .qap-send-title { margin-bottom: 0; }
.qap-cpane .qap-send-rows { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: auto auto; grid-auto-flow: column;
                            gap: 2px 14px; }
.qap-cpane .qap-send-rows dt { font-size: 11px; }
@media (max-width: 760px) {
  .qap-acc-grid { grid-template-columns: 1fr; }
  .qap-cpane .qap-send-rows { grid-template-columns: max-content 1fr; grid-template-rows: none; grid-auto-flow: row; }
}
/* 프롬프트 창 · 전체 보기 — '프롬프트 편집' 탭에서 고칠 수 있는 부분 강조 (2026-10-15) */
.qpe-fill { padding: 0 1px; border-radius: 2px; background: #e6f4ef; color: inherit; box-shadow: inset 0 -1px 0 #00795f; }
/* 프롬프트 창 폭 고정 — 내용 따라 늘던 폭(편집 약 680 · 전체 보기 약 1130)의 중간, 탭을 바꿔도 그대로.
   상세 번역 전체 프롬프트 창(.wsprompt-preview 918px)과 같은 폭 (2026-10-15) */
.modal.qpe-modal .modal-container.modal-xl { width: min(918px, 95vw); max-width: min(918px, 95vw); min-width: 0; }
.modal.qpe-modal .qpe-pre { white-space: pre-wrap; word-break: break-word; overflow-x: hidden; }
