/* ============================================================
   components.css — 폼/버튼 컴포넌트(shadcn 방식: 통일 높이·라운드·포커스링)
   ============================================================ */

/* 입력(날짜 등) · 네이티브 셀렉트 */
.cv-input{
  height:var(--cv-h);border:1px solid var(--cv-btn-border);border-radius:var(--cv-radius);
  padding:0 12px;font-size:var(--fs-body-sm);color:var(--c-900);background:#fff;
  transition:border-color .15s,box-shadow .15s;box-sizing:border-box}
.cv-input:hover{border-color:#94a3b8}
.cv-input:focus{outline:none;border-color:var(--brand-500);box-shadow:0 0 0 3px var(--cv-ring)}
/* 네이티브 <select>: 브라우저 기본 화살표 제거 + 커스텀 셰브론(우측 여백 확보). 텍스트 입력엔 영향 없음 */
select.cv-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:34px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;background-size:15px}
/* 여러 줄 textarea: 고정 높이(--cv-h) 대신 자동 높이 + 세로 패딩(플레이스홀더가 상단에 붙지 않게) */
textarea.cv-input{height:auto;min-height:auto;padding:9px 12px;line-height:1.55;resize:vertical}
textarea.cv-input::placeholder,.cv-input::placeholder{color:var(--c-400)}
/* 선택형 칩(체크박스 래핑) — 체크 시 코랄 하이라이트. 밋밋한 기본 체크박스 대체 */
.cv-scope-chip{display:inline-flex;align-items:center;gap:7px;height:42px;padding:0 15px;border:1px solid var(--cv-btn-border);border-radius:var(--cv-radius);font-size:14px;font-weight:500;color:var(--c-700);cursor:pointer;transition:border-color .12s,background .12s,color .12s;user-select:none}
.cv-scope-chip:hover{border-color:#94a3b8;background:#fafbfc}
.cv-scope-chip:has(input:checked){border-color:var(--brand);background:var(--brand-50);color:var(--brand-hover)}

/* 버튼 */
.cv-btn{
  height:var(--cv-h);display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border-radius:var(--cv-radius);padding:0 15px;font-size:var(--fs-body-sm);font-weight:var(--fw-semi);
  border:1px solid var(--cv-btn-border);background:#fff;color:var(--c-700);line-height:1;
  transition:background .15s,border-color .15s,box-shadow .15s;cursor:pointer;white-space:nowrap;text-decoration:none}
.cv-btn:hover{background:#f8fafc;border-color:#94a3b8}
.cv-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--cv-ring)}
.cv-btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}
.cv-btn-primary:hover{background:var(--brand-hover);border-color:var(--brand-hover)}
.cv-btn-sm{height:36px;padding:0 13px;font-size:13px;border-radius:8px}

/* 아이콘 버튼(◀ ▶ 등) */
.cv-icon-btn{
  height:var(--cv-h);width:var(--cv-h);display:inline-flex;align-items:center;justify-content:center;
  border-radius:var(--cv-radius);border:1px solid var(--cv-btn-border);background:#fff;color:var(--c-600);
  cursor:pointer;transition:background .15s,border-color .15s;font-size:12px}
.cv-icon-btn:hover{background:#f8fafc;border-color:#94a3b8}
.cv-icon-btn:disabled{opacity:.35;cursor:default;background:#fff}

/* ── 커스텀 체크박스(.cv-check) — Select2와 동일 프리미엄 톤 ── */
.cv-check{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  width:18px;height:18px;flex:none;box-sizing:border-box;
  border:1.5px solid #cbd5e1;border-radius:6px;background:#fff;cursor:pointer;position:relative;
  display:inline-block;vertical-align:middle;
  transition:background .15s,border-color .15s,box-shadow .15s}
.cv-check:hover{border-color:#94a3b8}
.cv-check:focus-visible{outline:none;box-shadow:0 0 0 3px var(--cv-ring)}
.cv-check:checked{background:var(--brand);border-color:var(--brand)}
.cv-check:checked:hover{background:var(--brand-hover);border-color:var(--brand-hover)}
.cv-check:checked::after{
  content:"";position:absolute;left:5px;top:1.5px;width:5px;height:9px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
/* 반체크(indeterminate) — 부분 선택: 브랜드 배경 + 흰 가로 대시 */
.cv-check:indeterminate{background:var(--brand);border-color:var(--brand)}
.cv-check:indeterminate:hover{background:var(--brand-hover);border-color:var(--brand-hover)}
.cv-check:indeterminate::after{
  content:"";position:absolute;left:3.5px;top:7px;width:9px;height:2px;
  background:#fff;border-radius:1px}
/* 클래스 기반 3-state(span용 — 파생상태 완전 반영): is-on=체크 · is-half=반체크 */
.cv-check.is-on,.cv-check.is-half{background:var(--brand);border-color:var(--brand)}
.cv-check.is-on:hover,.cv-check.is-half:hover{background:var(--brand-hover);border-color:var(--brand-hover)}
.cv-check.is-on::after{
  content:"";position:absolute;left:5px;top:1.5px;width:5px;height:9px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.cv-check.is-half::after{
  content:"";position:absolute;left:3.5px;top:7px;width:9px;height:2px;
  background:#fff;border-radius:1px}

/* ── 정보 툴팁(ⓘ 마우스오버) — 지표 유의사항 안내 ── */
.cv-info{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;
  color:#b0b8c4;cursor:help;position:relative;vertical-align:middle;flex:none}
.cv-info:hover{color:var(--brand)}
.cv-info::before{content:"";width:13px;height:13px;display:block;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20stroke='%23000'%3E%3Ccircle%20cx='8'%20cy='8'%20r='6.7'%20stroke-width='1.5'/%3E%3Ccircle%20cx='8'%20cy='4.9'%20r='0.98'%20fill='%23000'%20stroke='none'/%3E%3Crect%20x='7.08'%20y='6.6'%20width='1.84'%20height='4.95'%20rx='0.92'%20fill='%23000'%20stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20fill='none'%20stroke='%23000'%3E%3Ccircle%20cx='8'%20cy='8'%20r='6.7'%20stroke-width='1.5'/%3E%3Ccircle%20cx='8'%20cy='4.9'%20r='0.98'%20fill='%23000'%20stroke='none'/%3E%3Crect%20x='7.08'%20y='6.6'%20width='1.84'%20height='4.95'%20rx='0.92'%20fill='%23000'%20stroke='none'/%3E%3C/svg%3E") center/contain no-repeat}
.cv-info .cv-tip{visibility:hidden;opacity:0;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(3px);
  width:max-content;max-width:min(220px,72vw);background:#1e293b;color:#fff;font-size:11.5px;font-weight:400;line-height:1.55;padding:8px 10px;border-radius:8px;
  box-shadow:0 10px 30px rgba(16,24,40,.22);z-index:60;text-align:left;white-space:normal;letter-spacing:0;
  transition:opacity .14s ease,transform .14s ease;pointer-events:none}
.cv-info:hover .cv-tip{visibility:visible;opacity:1;transform:translateX(-50%) translateY(0)}
.cv-info .cv-tip::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#1e293b}

/* ── 랜딩 '바로가기' chip(소재 이름 옆) ── */
.cv-gochip{display:inline-flex;align-items:center;gap:2px;margin-left:7px;padding:1.5px 8px;
  font-size:10.5px;font-weight:600;line-height:1.5;border-radius:999px;white-space:nowrap;vertical-align:middle;
  background:var(--brand-50);color:var(--brand);text-decoration:none;transition:background .12s,color .12s}
.cv-gochip:hover{background:var(--brand);color:#fff}
.cv-gochip svg{width:11px;height:11px}

/* ── 썸네일 hover 확대 프리뷰(body 레벨, 클리핑 없음) ── */
#cv-preview{position:fixed;z-index:9999;pointer-events:none;display:none;
  background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 16px 48px rgba(16,24,40,.3);padding:5px}
#cv-preview img{display:block;max-width:340px;max-height:340px;border-radius:7px}

/* ── 소재 외부링크(outlink) 아이콘 — '바로가기' 텍스트 대체 ── */
.cv-outlink{flex:none;display:inline-flex;align-items:center;color:#94a3b8;text-decoration:none;padding:1px}
.cv-outlink:hover{color:var(--brand)}
.cv-outlink svg{width:15px;height:15px}
.cv-outlink .cv-outlink-n{font-size:9.5px;font-weight:700;margin-left:1px;color:var(--c-500)}
.cv-unmerge{margin-left:6px;padding:1px 7px;border-radius:999px;background:#f1f5f9;color:#64748b;
  cursor:pointer;font-size:10px;font-weight:600;vertical-align:middle;white-space:nowrap}
.cv-unmerge:hover{background:#fdecec;color:#ce0000}

/* ── 그룹 설정 모달(SortableJS D&D: 노출 순서 + 2단계 머지) ── */
.gs-root{display:flex;flex-direction:column;gap:9px;min-height:60px}
.gs-item{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #e2e8f0;border-radius:var(--cv-radius);padding:12px 15px;font-size:14px;font-weight:500;color:#1f2937;transition:border-color .12s,background .12s}
.gs-item{cursor:grab}
.gs-item:active{cursor:grabbing}
.gs-item:hover{border-color:#94a3b8;background:#fafbfc}
.gs-item .gs-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
/* 이름 + 캠페인명(연한 서브라벨) 세로 스택 */
.gs-namebox{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:1px}
.gs-namebox .gs-name{flex:initial}
.gs-sub{font-size:11px;font-weight:400;color:#9aa5b4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cv-subtle{display:block;font-size:11px;color:#9aa5b4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
/* 소재 자식행: 캠페인/그룹 컬러 태그 + 값(각 줄, 리치) */
.cv-mrow{display:flex;align-items:center;gap:5px;margin-top:2px;min-width:0}
.cv-mtag{flex:none;font-size:9px;font-weight:700;letter-spacing:.03em;padding:1px 5px;border-radius:4px;line-height:1.55}
.cv-mtag.is-camp{color:#3f5aa8;background:#eaf0fb}
.cv-mtag.is-adg{color:#2f8f66;background:#e7f5ee}
.cv-mval{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:#7b8594;min-width:0}
/* 노출 토글(iOS 스위치, 텍스트 인라인) — 카드 맨 오른쪽. ON="노출"(브랜드)·OFF="숨김"(회색) */
.gs-switch{position:relative;flex:none;margin-left:auto;display:inline-flex;align-items:center;width:64px;height:26px;padding:0;border:none;border-radius:999px;background:var(--brand);cursor:pointer;transition:background .18s}
.gs-switch.off{background:#cbcbcb}
.gs-switch:focus-visible{outline:none;box-shadow:0 0 0 3px var(--cv-ring)}
.gs-switch-txt{position:absolute;top:50%;transform:translateY(-50%);font-size:10px;font-weight:500;letter-spacing:.14em;text-indent:.14em;color:rgba(255,255,255,.96);line-height:1;transition:left .18s,right .18s}
.gs-switch:not(.off) .gs-switch-txt{left:11px;right:auto}   /* 노출: 왼쪽(노브는 오른쪽) */
.gs-switch.off .gs-switch-txt{right:11px;left:auto}         /* 숨김: 오른쪽(노브는 왼쪽) */
.gs-switch-knob{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.28);transition:transform .18s}
.gs-switch:not(.off) .gs-switch-knob{transform:translateX(38px)}
/* 숨김(OFF) 상태: 카드 흐리게 + 이름 취소선 */
.gs-hidden{opacity:.55}
.gs-hidden .gs-name,.gs-hidden .gs-box-name{text-decoration:line-through;color:#94a3b8}
/* 머지 그룹 = 부모 카드(일반 카드와 동일 크기) + 자식 들여쓰기(선/그립/폴더아이콘 없음) */
.gs-box{display:flex;flex-direction:column;gap:5px}
.gs-box-head{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #e2e8f0;border-radius:var(--cv-radius);padding:12px 15px}
.gs-box-media{flex:none;display:inline-flex;align-items:center;gap:5px}
.gs-box-media:empty{display:none}
/* 부모 이름: 내용 폭 인풋(JS 자동확장). 평소 텍스트 느낌, hover/focus 시 편집 필드 */
.gs-box-name{flex:0 0 auto;min-width:0;height:auto!important;border:1.5px solid transparent!important;background:transparent;padding:3px 8px;border-radius:6px;font-size:14px;font-weight:600;color:#1f2937;box-shadow:none!important;cursor:text;transition:border-color .12s,background .12s}
.gs-box-name:not([readonly]):hover{background:#eef2f7;border-color:#dbe3ee!important}
.gs-box-name:focus,.gs-box-name.editing{background:#fff;border-color:var(--brand)!important;outline:none}
.gs-box-name[readonly]{flex:1 1 auto;border-color:transparent!important;background:transparent!important;padding:3px 0;cursor:default;text-overflow:ellipsis}
/* 폭 측정용 숨김 미러(인풋과 동일 폰트) */
.gs-box-namemeasure{position:absolute;left:-9999px;top:0;visibility:hidden;white-space:pre;font-size:14px;font-weight:600;padding:0}
/* 이름 옆 연필(수정) 버튼 — 항상 노출, 이름 바로 옆 */
.gs-box-edit{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;color:#b6bdc9;border-radius:6px;cursor:pointer;transition:color .12s,background .12s}
.gs-box-edit:hover{color:var(--brand);background:#fff2f1}
/* 해제+토글은 우측에 함께: 해제만 auto 마진, 토글의 기본 auto 마진은 헤더 안에서 해제 */
.gs-box-head .gs-box-del{margin-left:auto}
.gs-box-head .gs-switch{margin-left:0}
.gs-box-del{flex:none;font-size:11px;font-weight:600;color:#8a94a3;border:1px solid #e2e8f0;border-radius:7px;padding:4px 10px;background:#fff;cursor:pointer;transition:color .12s,border-color .12s,background .12s}
.gs-box-del:hover{color:#ce0000;border-color:#f1c9c9;background:#fdf2f2}
.gs-box .gs-list{display:flex;flex-direction:column;gap:5px;padding-left:24px;min-height:34px}
.gs-box .gs-list:empty::after{content:'여기로 끌어다 놓으면 이 묶음에 포함됩니다';display:block;text-align:left;color:#9bb2f2;font-size:11.5px;padding:7px 0}
.gs-box .gs-item{background:#f7f9fc}
.gs-ghost{opacity:.35;pointer-events:none}
.gs-fallback{pointer-events:none;opacity:.9}

/* 그룹 위에 올려 머지: 대상 하이라이트 */
.gs-merge-target{outline:2px solid var(--brand);outline-offset:1px;background:var(--brand-50)!important;border-color:var(--brand)!important}
/* 광고그룹 자동/수동 모드바 */
.gs-modebar{display:flex;align-items:center;gap:10px;padding:9px 13px;border-radius:var(--cv-radius);margin-bottom:12px;font-size:12.5px;line-height:1.5}
.gs-modebar.is-auto{background:#f1f5f9;border:1px solid #e2e8f0;color:#5a6675}
.gs-modebar.is-manual{background:#f1f5f9;border:1px solid #e2e8f0;color:#475569}
.gs-modebar-txt{flex:1;min-width:0}
.gs-modebar-txt b{font-weight:700;color:#1f2937}
.gs-modebar.is-manual .gs-modebar-txt b{color:var(--c-900)}
/* 잠금(자동) 상태: 편집 불가 — grab 커서 제거, hover 강조 제거 */
.gs-item.gs-locked,.gs-box.gs-locked .gs-box-name{cursor:default}
.gs-item.gs-locked:hover{border-color:#e2e8f0;background:#fff}
/* 서비스 매체 리프 — 묶기 불가(드래그 차단). 살짝 흐리게 + 기본 커서 */
.gs-item.gs-bonus{cursor:not-allowed;background:#f8fafc;border-style:dashed}
.gs-item.gs-bonus:hover{border-color:#cbd5e1}
.gs-box.gs-locked .gs-box-head{background:#f8fafc;border-color:#e2e8f0}

/* 네이티브 DnD 인디케이터 */
.gs-item.gs-dragging,.gs-box.gs-dragging{opacity:.7;border-color:var(--brand-500);border-style:dashed;background:var(--brand-50)}
.gs-drop-before{box-shadow:0 -3px 0 -1px var(--brand)}
.gs-drop-after{box-shadow:0 3px 0 -1px var(--brand)}

/* 컨트롤 바 필드 라벨: 라벨 텍스트 + 보조 정보 칩(괄호 텍스트 대체). height 고정 = 칩 유무와 무관하게 전 필드 라벨 정렬 */
.cv-field-label{display:flex;align-items:center;gap:6px;height:17px;font-size:11px;font-weight:600;color:#4b5563;letter-spacing:.02em;margin-bottom:5px;white-space:nowrap}

/* 리포트일 스테퍼: ◀ 날짜 ▶ 결합 세그먼트 (전일/익일 이동 — 데일리 리포트 핵심 동선) */
.cv-date-seg{display:flex;align-items:stretch;height:var(--cv-h)}
.cv-date-seg .cv-input{border-radius:0;text-align:center;padding:0 4px;flex:1;min-width:0;border-left:none;border-right:none}
.cv-date-seg .cv-input:focus{position:relative;z-index:1}
.cv-date-step{display:inline-flex;align-items:center;justify-content:center;width:30px;flex:0 0 30px;border:1px solid var(--cv-btn-border);background:#fff;color:#6b7280;cursor:pointer;transition:background .12s,color .12s;padding:0}
.cv-date-step:first-child{border-radius:var(--cv-radius) 0 0 var(--cv-radius)}
.cv-date-step:last-child{border-radius:0 var(--cv-radius) var(--cv-radius) 0}
.cv-date-step:hover:not(:disabled){background:#f3f6fb;color:var(--brand)}
.cv-date-step:disabled{color:#d1d5db;cursor:default;background:#fafafa}

/* 컨트롤 바 액션 구분선(조회 | 내보내기 그룹) */
.cv-vdiv{width:1px;height:22px;background:#e5e8ee;align-self:center}

/* 세그먼트 토글(차트 지표 선택 등) */
.cv-seg{display:inline-flex;height:30px;border:1px solid var(--cv-btn-border);border-radius:9px;overflow:hidden;background:#fff}
.cv-seg button{padding:0 13px;font-size:12px;font-weight:600;color:#6b7280;background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;line-height:1}
.cv-seg button+button{border-left:1px solid #e8ebf0}
.cv-seg button:hover{background:#f6f8fb}
.cv-seg button.on{color:#1f2937;box-shadow:inset 0 -2px 0 var(--brand)}

/* 리프트 KPI 스탯 카드(검색량 대비 비용 등 — 사전 대비 상승 요약) */
.cv-lift-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:2px 0 12px}
.cv-lift-card{display:flex;align-items:center;gap:12px;padding:8px 14px;border:1px solid #e8ebf0;border-radius:11px;background:#fbfcfe}
.cv-lift-kw{font-size:12.5px;font-weight:700;color:#334155}
.cv-lift-nums{display:flex;align-items:baseline;gap:6px;font-size:12.5px;color:#8a94a5}
.cv-lift-nums .arr{color:#c3cad6;font-size:12px}
.cv-lift-nums b{font-size:15px;color:#111827;font-weight:700;letter-spacing:-.01em}
.cv-lift-delta{display:inline-flex;align-items:center;gap:3px;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:700;line-height:1}
.cv-lift-delta.up{background:#e6f5ec;color:#1e9155}
.cv-lift-delta.down{background:#fdeeee;color:#dc2626}
.cv-lift-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.cv-lift-note{font-size:11px;color:#9aa3b2}

/* 네이버 키워드 칩(검색량 대비 비용 카드) */
.cv-kw-chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 5px 0 10px;background:#fff;color:#1f2937;border:1px solid #e2e6ec;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}
.cv-kw-chip .kwd{width:7px;height:7px;border-radius:50%;flex:none}
.cv-kw-chip button{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:50%;border:none;background:transparent;color:#b6bcc6;cursor:pointer;font-size:15px;line-height:1;padding:0}
.cv-kw-chip button:hover{background:#dbe3f7;color:var(--brand)}

/* ── 전역 프로젝트 헤더(탭 위 · 전 탭 공통 컨텍스트) ── */
.cv-phead{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:16px 18px;margin-bottom:16px;
  background:#fff;border:1px solid var(--cv-card-border,#e8eaee);border-radius:var(--cv-radius,10px);box-shadow:0 1px 2px rgba(16,24,40,.04)}
.cv-phead-sel{width:360px;flex-shrink:0}
.cv-phead-sel .select2-container--default .select2-selection--single{height:46px;border-color:#e5e7eb}   /* 소진율 스탯박스와 높이 맞춤 */
.cv-phead-sel .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:1}
.cv-phead-sel .select2-container--default .select2-selection--single .select2-selection__arrow{height:44px}
.cv-phead-meta{display:flex;align-items:center;gap:16px;flex-wrap:wrap;flex:1;min-width:0;font-size:13px;color:#64748b}
/* 스코프 클러스터: 매체 · 기간 · 그룹수 (가운데 점 없이 덩어리로 그룹핑) */
.ph-scope{display:inline-flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
.cv-phead-meta .ph-media{display:inline-flex;align-items:center;gap:4px}
.cv-phead-meta .ph-chip{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:5px;
  background:#f1f5f9;color:#475569;font-size:11px;font-weight:600;white-space:nowrap}
.cv-phead-meta .ph-chip.ph-ended{background:#f1f5f9;color:#94a3b8}
/* 소진율 차트 클러스터: 소진/예산 라벨 + 프로그레스 바 */
.ph-burnbox{display:flex;flex-direction:column;justify-content:center;gap:5px;flex:0 1 420px;min-width:260px;max-width:460px;margin-left:auto;
  padding:10px 13px;border:1px solid #ebedf0;border-radius:var(--cv-radius);background:#fcfcfd}
.ph-burnrow{display:flex;align-items:baseline;justify-content:space-between;gap:10px;white-space:nowrap;line-height:1.2}
.ph-burnlabel{color:#64748b;font-size:11px}   /* 셀렉트 날짜 폰트와 동일 크기 */
.ph-burnlabel b{color:#1f2937;font-weight:700;font-variant-numeric:tabular-nums}
.ph-of{color:#94a3b8}
.ph-burnpct{font-weight:800;font-size:11px;font-variant-numeric:tabular-nums;color:#334155}
.ph-bar{height:6px;border-radius:999px;background:#eef2f6;overflow:hidden}
.ph-bar-fill{height:100%;border-radius:999px;background:#009EB8;transition:width .35s ease}   /* 정상 소진: 차분한 틸(위기감 없음) */
.ph-bar-fill.is-over{background:var(--brand,#F0464F)}   /* 초과(>100%)일 때만 코랄 경고 */

/* ── 매체 로고(전 화면 공통) ── 테두리·배경 없이 최대 크기로. 원본은 _orig/, 실사용 png는 256² 정규화(여백 0) */
.cv-mlogo{display:inline-block;object-fit:contain;vertical-align:middle}

/* 표 */
.sched-table{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}
.sched-table thead th{background:#fafbfc;color:var(--c-600);font-size:12.5px;font-weight:600;letter-spacing:0;
  padding:10px 14px;border-bottom:1px solid #eef0f3;white-space:nowrap}
/* 클릭 정렬 헤더 */
.cv-th-sort{cursor:pointer;user-select:none;transition:color .12s}
.cv-th-sort:hover{color:var(--brand)}
.cv-sort-ind{display:inline-block;width:.9em;margin-left:3px;font-size:8px;color:var(--brand);vertical-align:middle}
.sched-table tbody td{padding:10px 14px;border-bottom:1px solid #f1f3f5;vertical-align:middle}
.sched-table tbody tr:last-child td{border-bottom:none}
.sched-table tbody tr{transition:background .12s}
.sched-table tbody tr:hover{background:#fafbfc}
.sched-table tbody tr.is-disabled{background:#fcfcfd}
.sched-table tbody tr.is-disabled td:not(:last-child){opacity:.5}
/* 표 모서리 직접 라운딩 → 카드 overflow-hidden 없이도 둥글게(툴팁·드롭다운이 카드에 안 잘리게) */
.sched-table thead tr:first-child th:first-child{border-top-left-radius:13px}
.sched-table thead tr:first-child th:last-child{border-top-right-radius:13px}
.sched-table tbody tr:last-child td:first-child{border-bottom-left-radius:13px}
.sched-table tbody tr:last-child td:last-child{border-bottom-right-radius:13px}

/* 토글 스위치(정제) */
.cv-switch{position:relative;display:inline-flex;width:40px;height:23px;border-radius:12px;background:#d1d7e0;
  cursor:pointer;transition:background .16s;border:none;padding:0;flex-shrink:0}
.cv-switch:focus-visible{outline:none;box-shadow:0 0 0 3px var(--cv-ring)}
.cv-switch.is-on{background:var(--brand)}
.cv-switch-knob{position:absolute;top:2.5px;left:2.5px;width:18px;height:18px;border-radius:50%;background:#fff;
  box-shadow:0 1px 3px rgba(16,24,40,.28);transition:transform .16s}
.cv-switch.is-on .cv-switch-knob{transform:translateX(17px)}

/* 실행 시각 입력(잘림 방지·아이콘 결합) */
.sched-time{display:inline-flex;align-items:center;justify-content:center;height:34px;padding:0 11px;border:1px solid var(--cv-btn-border);
  border-radius:9px;background:#fff;transition:border-color .12s,box-shadow .12s}
.sched-time:focus-within{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--cv-ring)}
.sched-time.is-mute{background:#f8fafc}
.sched-time input[type=time]{border:none;outline:none;background:transparent;font-size:13px;font-weight:600;
  color:var(--c-800,#1f2937);font-variant-numeric:tabular-nums;width:118px;min-width:118px;padding:0}
.sched-time input[type=time]::-webkit-calendar-picker-indicator{opacity:.45;cursor:pointer}
.sched-time.is-mute input{color:#94a3b8}

/* 룩백 스테퍼 */
.sched-stepper{display:inline-flex;align-items:center;height:34px;border:1px solid var(--cv-btn-border);border-radius:9px;overflow:hidden;background:#fff}
.sched-stepper.is-mute{background:#f8fafc}
.sched-stepper button{width:30px;height:100%;border:none;background:transparent;color:var(--c-500);font-size:15px;font-weight:600;cursor:pointer;transition:background .12s,color .12s}
.sched-stepper button:hover:not(:disabled){background:#f1f5f9;color:var(--brand)}
.sched-stepper button:disabled{color:#d1d5db;cursor:default}
.sched-stepper-v{min-width:44px;text-align:center;font-size:13px;font-weight:700;color:var(--c-900);font-variant-numeric:tabular-nums;border-left:1px solid #eef0f3;border-right:1px solid #eef0f3;height:100%;line-height:34px}
.sched-stepper.is-mute .sched-stepper-v{color:#94a3b8}
.sched-stepper-u{font-size:11px;font-weight:500;color:#9ca3af;margin-left:2px}

/* 작은 스피너 */
.cv-spinner-sm{display:inline-block;width:12px;height:12px;border-radius:50%;
  border:2px solid var(--brand-100);border-top-color:var(--brand);animation:cv-spin .7s linear infinite}

/* 크론 안내(차분) */
.sched-hint{display:flex;align-items:flex-start;gap:8px;margin-top:14px;padding:10px 13px;border-radius:var(--cv-radius);
  background:#f8fafc;border:1px solid #eef0f3;font-size:12px;color:var(--c-600);line-height:1.5}
.sched-hint code{background:#fff;padding:2px 8px;border-radius:5px;border:1px solid #e5e7eb;font-size:11.5px;
  color:var(--brand-hover);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

/* 토스트 */
.cv-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(12px);background:#1e293b;color:#fff;
  font-size:13px;font-weight:500;padding:10px 18px;border-radius:var(--cv-radius);box-shadow:0 12px 34px rgba(16,24,40,.28);
  opacity:0;pointer-events:none;transition:.18s;z-index:80}
.cv-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.cv-pill{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;border-radius:6px;font-size:12.5px;font-weight:600;white-space:nowrap;line-height:1;vertical-align:middle}
.cv-pill .dot{width:6px;height:6px;border-radius:50%;flex:none}
.cv-pill b{font-weight:700;font-variant-numeric:tabular-nums}
.cv-pill.is-good{background:#eefaf3;color:#0f6b40}      .cv-pill.is-good .dot{background:#197a4b}
.cv-pill.is-warn{background:#fff4ec;color:#b4530a}      .cv-pill.is-warn .dot{background:#d98a1f}
.cv-pill.is-bad{background:#fdecec;color:#b3160f}       .cv-pill.is-bad .dot{background:#ce0000}
.cv-pill.is-neutral{background:#f1f5f9;color:#64748b}   .cv-pill.is-neutral .dot{background:#cbd5e1}
.cv-pill.is-brand{background:#ffe6e2;color:#1f2937}     .cv-pill.is-brand .dot{background:var(--brand)}
.cv-pill--xs{height:auto;padding:4px 8px;border-radius:999px;font-size:11.5px;font-weight:600;gap:3px;line-height:1}
/* 서비스/보너스(매체 무상) 표기 — 그룹명 옆 뱃지 하나로. 예산·소진은 합계에서만 제외 */
.cv-svc-badge{display:inline-flex;align-items:center;height:16px;padding:0 6px;border-radius:999px;font-size:10.5px;font-weight:700;line-height:1;letter-spacing:.2px;background:#e0f2fe;color:#0369a1;vertical-align:middle;white-space:nowrap}
.cv-bonus-line{font-size:11px;color:#0369a1;font-variant-numeric:tabular-nums;margin-top:1px;white-space:nowrap}
.cv-unit-ref{font-size:11px;color:#94a3b8;font-variant-numeric:tabular-nums;margin-top:1px;white-space:nowrap}
.cv-save{color:#16a34a;font-weight:700;font-size:9.5px;margin-left:1px}
/* 매체 형태 배지 — 유가 / 초과분 보너스(sky) / 전액 무상(violet). window.cvBonusForm과 짝 */
.cv-form-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:700;line-height:1;padding:2px 6px;border-radius:5px;border:1px solid transparent;white-space:nowrap;vertical-align:middle}
.cv-form--over{background:#e0f2fe;color:#0369a1;border-color:#bae6fd}
.cv-form--free{background:#ede9fe;color:#6d28d9;border-color:#ddd6fe}
.cv-form--paid{color:#9ca3af;font-size:11px}

/* 리포트 요약 코멘트(담당자 총평) — 접힘=클라 노출 최종본 / 펼침=매체팀·AE 편집.
   폭은 리포트 본문과 동일한 풀폭(요약 카드·표와 정렬), 긴 코멘트는 세로 자동 확장(cmtGrow)으로 대응. */
.cv-cmt{margin:2px 0 14px}
.cv-cmt-bar{display:flex;align-items:center;gap:10px;padding:9px 13px;border:1px solid var(--c-200,#e6e8ec);border-radius:11px;background:#fafbfc}
.cv-cmt-ic{font-size:14px;line-height:1;flex-shrink:0}
.cv-cmt-txt{flex:1;min-width:0;font-size:13px;color:#1f2733;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cv-cmt-empty{color:#9aa2ac}
.cv-cmt-clabel{flex-shrink:0;font-size:10.5px;font-weight:600;color:#9aa2ac}   /* 접힘바 '클라 노출' 프레임 */
.cv-cmt-badge{flex-shrink:0;font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;letter-spacing:.02em;line-height:1.5}
.cv-cmt-badge.ae{background:#fdeeeb;color:#c34433;border:1px solid #f6cabf}
.cv-cmt-badge.media{background:#eef2f6;color:#4a5a6a;border:1px solid #d9e1e9}
.cv-cmt-btn{flex-shrink:0;font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;border-radius:8px;padding:5px 11px;border:1px solid var(--c-200,#e6e8ec);background:#fff;color:#1f2733;transition:background .12s,border-color .12s}
.cv-cmt-btn:hover{background:#f5f6f8;border-color:#9aa2ac}
.cv-cmt-btn.primary{background:#e8604c;border-color:#e8604c;color:#fff}
.cv-cmt-btn.primary:hover{background:#c34433;border-color:#c34433}
.cv-cmt-btn:disabled{opacity:.55;cursor:default}
.cv-cmt-editor{border:1px solid var(--c-200,#e6e8ec);border-radius:12px;background:#fff}   /* overflow 미지정 — 링크 팝오버·색상 드롭다운이 잘리지 않게 */
/* 탭(매체팀/AE) — 한 화면에 하나만 편집(세로 절반) */
.cv-cmt-tabs{display:flex;align-items:center;gap:8px;padding:0 16px 0 20px;border-bottom:1px solid #eef0f3}
.cv-cmt-tab{box-sizing:border-box;display:inline-flex;align-items:center;gap:7px;font-family:inherit;font-size:12.5px;font-weight:600;color:#8a929c;background:transparent;border:0;border-bottom:2px solid transparent;padding:14px 4px 10px;margin-bottom:-1px;cursor:pointer;line-height:1}
.cv-cmt-tab:hover{color:#4a5a6a}
.cv-cmt-tab.on{color:#1f2733;border-bottom-color:#5a6572}
.cv-cmt-tab--ae.on{color:#c34433;border-bottom-color:#e8604c}
.cv-cmt-tabsub{font-weight:500;color:#9aa2ac;font-size:11px}
.cv-cmt-body{padding:16px 16px 14px}
.cv-cmt-num{flex:none;box-sizing:border-box;width:18px;height:18px;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;line-height:1;color:#fff;padding-top:1px}
.cv-cmt-num.n1{background:#4a5a6a}
.cv-cmt-num.n2{background:#e8604c}
/* Summernote-lite — suite 톤에 맞춘 플랫·컴팩트 리파인 */
.cv-cmt-body .note-editor.note-frame{border:1px solid var(--c-200,#e6e8ec);border-radius:10px;margin:0;background:#fff;box-shadow:none}   /* overflow 미지정 — 팝오버 노출 */
.cv-cmt-body .note-editor.note-frame:focus-within{border-color:#e8604c;box-shadow:0 0 0 3px #fdeeeb}
/* 툴바: 저채도·플랫·컴팩트 — 박스형 버튼 제거 */
.cv-cmt-body .note-toolbar{background:#fbfcfd;border-bottom:1px solid #eef0f3;padding:3px 6px}
.cv-cmt-body .note-toolbar .note-btn-group{margin:0 5px 0 0;border:0}
.cv-cmt-body .note-toolbar .note-btn{background:transparent!important;border:0!important;box-shadow:none!important;color:#5a6572;height:26px;padding:0 6px;border-radius:6px}
.cv-cmt-body .note-toolbar .note-btn:hover{background:#eef2f6;color:#1f2733}
.cv-cmt-body .note-toolbar .note-btn.active{background:#fdeeeb;color:#c34433}
.cv-cmt-body .note-toolbar .note-icon-caret{margin-left:1px}
/* 편집 영역 */
.cv-cmt-body .note-editable{font-family:inherit!important;font-size:13px!important;line-height:1.7;color:#1f2733;padding:14px 15px}
.cv-cmt-body .note-editable img{max-width:100%;border-radius:6px}
.cv-cmt-body .note-editable a{color:#0369a1}
.cv-cmt-body .note-placeholder{font-family:inherit!important;font-size:13px!important;line-height:1.7;color:#9aa2ac;padding:14px 15px}
.cv-cmt-body .note-statusbar{display:none}   /* 리사이즈바 제거 */
/* 링크 팝오버(클릭 시 URL·수정·해제) — 앱 톤 + 여백. body에 붙어도 잡히게 전역 스코프(코멘트에만 Summernote 존재) */
.note-popover.note-link-popover{font-family:inherit;border:1px solid #e6e8ec;border-radius:9px;box-shadow:0 6px 20px rgba(20,28,40,.12)}
.note-popover.note-link-popover .popover-content,.note-popover.note-link-popover .note-popover-content{display:flex;align-items:center;gap:10px;padding:7px 12px!important}
.note-popover.note-link-popover .popover-content a{font-size:12px;color:#0369a1;text-decoration:none;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0}
.note-popover.note-link-popover .popover-content a:hover{text-decoration:underline}
.note-popover.note-link-popover .note-btn{background:transparent!important;border:0!important;box-shadow:none!important;color:#5a6572;height:24px;padding:0 7px;border-radius:6px}
.note-popover.note-link-popover .note-btn:hover{background:#eef2f6;color:#1f2733}
.cv-cmt-hint{margin-top:7px;font-size:11.5px;color:#9aa2ac}
.cv-cmt-ghost{display:inline-flex;align-items:center;gap:5px;font-family:inherit;font-size:11.5px;font-weight:600;cursor:pointer;border:0;background:transparent;color:#c34433;border-radius:7px;padding:6px 9px 4px;line-height:1}
.cv-cmt-ghost:hover{background:#fdeeeb}
/* 내부용 유틸(어제 가져오기)은 슬레이트 — 코랄은 AE→클라 경로만 */
.cv-cmt-ghost--slate{color:#4a5a6a}
.cv-cmt-ghost--slate:hover{background:#eef2f6}
.cv-gic{width:13px;height:13px;flex:none}   /* 고스트 버튼 앞 SVG 아이콘 */
.cv-cmt-preview{display:flex;align-items:flex-start;gap:11px;padding:14px 16px;background:#fff7f5;border-top:1px solid #f3cfc6}
.cv-cmt-plabel{flex-shrink:0;font-size:11px;font-weight:700;color:#c34433;display:inline-flex;align-items:center;gap:6px}
.cv-cmt-ptext{flex:1;min-width:0;font-size:12.5px;color:#1f2733;padding-top:1px}
.cv-cmt-ptext img{max-width:240px;border-radius:6px;display:block;margin:4px 0}
.cv-cmt-ptext a{color:#0369a1;text-decoration:underline}
.cv-cmt-ptext ul,.cv-cmt-ptext ol{margin:2px 0;padding-left:20px}
.cv-cmt-foot{display:flex;align-items:center;gap:9px;padding:10px 15px;border-top:1px solid #eef0f3;background:#fafbfc;border-radius:0 0 12px 12px}
.cv-cmt-meta{font-size:11px;color:#9aa2ac}
.cv-cmt-err{font-size:11.5px;font-weight:600;color:#b23b2e}   /* 저장 실패 — 성공과 절대 헷갈리지 않게 */
.cv-cmt-spacer{flex:1}
.cv-cmt-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:60;background:#1f2733;color:#fff;font-size:12.5px;font-weight:600;padding:9px 16px;border-radius:9px;box-shadow:0 6px 20px rgba(20,28,40,.25)}
.cv-pill--lg{height:30px;padding:0 13px;border-radius:999px;font-size:12px;gap:7px;border:1px solid transparent}
.cv-pill--lg .dot{width:7px;height:7px}
.cv-pill--lg.is-good{border-color:#c7ead6}   .cv-pill--lg.is-good .dot{box-shadow:0 0 0 3px rgba(25,122,75,.14)}
.cv-pill--lg.is-neutral{background:#f4f5f7;border-color:#e5e7eb;color:#94a3b8}

/* ============================================================
   상단 툴바 — 탭(좌) + 컨트롤(우) 병합 한 줄. 컨트롤바 카드 대체.
   ============================================================ */
.cv-toolbar{display:flex;align-items:center;gap:10px;border-bottom:1px solid #e5e7eb;margin:-14px 0 20px;min-height:64px;flex-wrap:wrap}
/* ── 탭(cv-tabs) — 범용 모듈: 베이스라인 위 언더라인 탭. 어느 시스템에나 이식 가능 ── */
.cv-tabs{display:flex;gap:2px;align-items:stretch;min-height:48px;border-bottom:1px solid var(--c-border)}
.cv-tabs a,.cv-tabs button{display:inline-flex;align-items:center;padding:0 13px;font-size:14.5px;font-weight:var(--fw-semi);line-height:1;color:var(--c-500);background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;transition:color .12s;text-decoration:none}
.cv-tabs a:hover,.cv-tabs button:hover{color:var(--c-700)}
.cv-tabs a.on,.cv-tabs button.on{color:var(--c-900);border-bottom-color:var(--brand)}
/* 툴바 컨텍스트: 툴바 높이 채움, 베이스라인은 툴바 하단 보더가 담당(중복 방지) */
.cv-toolbar .cv-tabs{align-self:stretch;min-height:0;border-bottom:none}
.cv-toolbar-right{margin-left:auto;display:flex;align-items:center;gap:8px;padding:7px 0;flex-wrap:wrap;justify-content:flex-end}
.cv-tb-field{display:inline-flex;align-items:center;gap:7px}
.cv-tb-lbl{display:inline-flex;align-items:center;gap:3px;font-size:12px;font-weight:600;color:#6b7280;white-space:nowrap}
/* 툴바 내 컨트롤 높이 통일(34px) · 날짜 스테퍼는 컨테이너에만 테두리(자식 borderless로 이음새 제거) */
.cv-toolbar-right .cv-input{height:36px}
.cv-toolbar-right .cv-date-seg{height:36px;border:1px solid var(--cv-btn-border);border-radius:9px;overflow:hidden;align-items:stretch}
.cv-toolbar-right .cv-date-seg .cv-input{height:auto;border:none;background:transparent;font-size:13.5px;font-weight:600;color:#1f2937;width:106px;line-height:36px}
.cv-toolbar-right .cv-date-step{height:auto;width:30px;border:none;background:transparent;border-radius:0}
.cv-toolbar-right .cv-date-step:not(:disabled):hover{background:#f3f6fb}
.cv-tb-media{width:156px}   /* ETC 개별 매체(가장 긴 Coupangplay)까지 여유 있게 */
.cv-toolbar-right .select2-container--default .select2-selection--single{height:36px;border-color:#d7dce3}
.cv-toolbar-right .cv-btn-sm{height:36px;font-size:13px}
.cv-toolbar-right .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:34px;font-size:13px}
.cv-toolbar-right .select2-container--default .select2-selection--single .select2-selection__arrow{height:34px}
/* ⚙ 옵션 팝오버 */
.cv-tb-pop{position:absolute;right:0;top:calc(100% + 6px);width:224px;background:#fff;border:1px solid #e5e7eb;border-radius:var(--cv-radius);box-shadow:0 12px 30px rgba(16,24,40,.12);padding:12px;z-index:40}
.cv-tb-pop-lbl{font-size:11.5px;font-weight:600;color:#475569;margin-bottom:6px;display:flex;align-items:center;gap:5px}
.cv-tb-pop-hint{font-size:11px;color:#94a3b8;margin-top:7px;line-height:1.5}

/* 드로어 그룹 순회 = 날짜 스테퍼 형태, 선택 폭만 넓게 */
.cv-toolbar-right .cv-date-seg.cv-grpnav{height:36px}
.cv-toolbar-right .cv-grpnav .cv-input{flex:none;width:auto;min-width:280px;max-width:480px;padding:0 10px;line-height:36px;font-weight:500;font-size:13px}

/* ── 인풋 그룹(cv-input-group) — 범용 모듈: 입력·애드온·버튼을 한 테두리로 seamless 결합(Bootstrap input-group 격) ── */
.cv-input-group{display:inline-flex;align-items:stretch;height:var(--cv-h);border:1px solid var(--cv-btn-border);border-radius:var(--cv-radius);background:#fff;overflow:hidden;transition:border-color .15s,box-shadow .15s}
.cv-input-group:focus-within{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--cv-ring)}
.cv-input-group > .cv-input{height:auto;border:none;border-radius:0;background:transparent}
.cv-input-group > .cv-input:focus{box-shadow:none}
.cv-input-group > *:not(:first-child){border-left:1px solid var(--c-border)}
.cv-ig-text{display:inline-flex;align-items:center;padding:0 10px;color:var(--c-500);font-size:var(--fs-body-sm);background:#f8fafc;white-space:nowrap}
.cv-ig-btn{display:inline-flex;align-items:center;justify-content:center;padding:0 11px;background:#fff;border:none;color:var(--c-600);cursor:pointer;transition:background .12s,color .12s}
.cv-ig-btn:hover:not(:disabled){background:#f3f6fb;color:var(--brand)}
.cv-ig-btn:disabled{color:#d1d5db;cursor:default}

/* ── 기간 입력 그룹(cv-daterange) — cv-input-group 계열의 도메인 컴포넌트: 시작·종료 두 필드 + ~ 구분 ── */
.cv-daterange{display:inline-flex;align-items:stretch;height:var(--cv-h);border:1px solid var(--cv-btn-border);border-radius:var(--cv-radius);background:#fff;overflow:hidden;transition:border-color .15s,box-shadow .15s}
.cv-daterange:focus-within{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--cv-ring)}
.cv-daterange .cv-input{height:auto;border:none;border-radius:0;background:transparent;width:118px;text-align:center;font-weight:600;color:var(--c-900)}
.cv-daterange .cv-input:hover{background:#f8fafc}
.cv-daterange .cv-input:focus{box-shadow:none}
.cv-daterange-sep{display:inline-flex;align-items:center;padding:0 2px;color:var(--c-400);font-size:12px;user-select:none;flex:none}
.cv-toolbar-right .cv-daterange{height:36px}
.cv-toolbar-right .cv-daterange .cv-input{height:auto;width:104px;font-size:13.5px}

/* ══════════════ 모바일(md 768 미만) — 반응형 기반 ══════════════ */
@media (max-width:767.98px){
  /* 툴바: 탭 행 ↔ 컨트롤 행 세로 스택 */
  .cv-toolbar{flex-direction:column;align-items:stretch;gap:6px;min-height:0;margin-bottom:16px}
  .cv-toolbar--noctrl{border-bottom:none;margin-bottom:14px}   /* 컨트롤 없는 탭(ETC): 언더라인 불필요 */
  .cv-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .cv-tabs::-webkit-scrollbar{display:none}
  .cv-tabs a,.cv-tabs button{min-height:var(--cv-touch)}
  .cv-toolbar-right{margin-left:0;justify-content:flex-start;flex-wrap:wrap;gap:8px;padding:8px 0 14px}
  /* 필드를 full-width 행으로: 날짜·매체 각각 한 줄 (컨트롤 width:100%가 툴바 전체폭 기준이 되도록) */
  .cv-tb-field{width:100%;flex-wrap:wrap}
  .cv-tb-field .cv-date-seg,.cv-tb-media{width:100%}
  .cv-toolbar-right .cv-date-seg .cv-input{width:auto;flex:1;min-width:0;line-height:var(--cv-touch)}
  .cv-toolbar-right>.cv-btn-primary{flex:1 1 auto}   /* 조회(주 액션): ⚙과 같은 줄에서 확장 */
  .cv-tb-lbl{display:none}   /* 리포트일·매체 라벨 숨김(컨트롤이 자명·full-width) */
  /* 툴바 컨트롤 높이 var(--cv-touch)(44px) 통일 — 버튼·날짜 스텝퍼·매체 셀렉트 */
  .cv-toolbar-right .cv-date-seg{height:var(--cv-touch)}
  .cv-toolbar-right .select2-container--default .select2-selection--single{height:var(--cv-touch)}
  .cv-toolbar-right .select2-container--default .select2-selection--single .select2-selection__rendered{line-height:var(--cv-touch)}
  .cv-toolbar-right .select2-container--default .select2-selection--single .select2-selection__arrow{height:var(--cv-touch)}
  .cv-toolbar-right .cv-input{height:var(--cv-touch)}         /* 기간 from/to 등 단독 인풋(버튼과 통일) */
  .cv-daterange{width:100%;height:var(--cv-touch)}
  .cv-toolbar-right .cv-daterange .cv-input{height:auto;width:auto;flex:1}  /* 기간 from/to 균등하게 행 채움 */
  /* 프로젝트 헤더: 셀렉터 full-width + 메타 2줄 */
  .cv-phead{flex-direction:column;align-items:stretch;gap:16px;padding:16px 16px}
  .cv-phead-sel{width:100%}
  /* 터치 타깃 */
  .cv-btn{min-height:var(--cv-touch)}
  .cv-btn-sm{min-height:var(--cv-touch)}
  /* 드로어(그룹 상세) 헤더: 2행 wrap + 그룹순회 셀렉트 축소(상단 가로 오버플로 방지) */
  .cv-drawer-head{flex-wrap:wrap;gap:8px}
  .cv-drawer-head .truncate{min-width:0}
  .cv-drawer-head .cv-toolbar-right{margin-left:0;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:6px}
  .cv-drawer-head .cv-grpnav{flex:1;min-width:0}
  .cv-drawer-head .cv-toolbar-right .cv-date-seg.cv-grpnav{height:var(--cv-touch)}
  .cv-drawer-head .cv-toolbar-right .cv-grpnav .cv-input{min-width:0;width:auto;flex:1;max-width:none;line-height:var(--cv-touch)}
  /* 카드 헤더: 모바일은 부제(.sub) 숨겨 공간 확보 → 제목+우측 컨트롤이 한 줄에. 안 맞으면 자연 wrap(강제 스택 불필요) */
  .cv-card-title .sub{display:none}
  .cv-card-title{flex-wrap:wrap;row-gap:6px;column-gap:8px}
  .cv-seg button{white-space:nowrap}
  .cv-cardhead{flex-wrap:wrap;row-gap:8px}
  /* 데스크톱 전용(모바일 숨김) — 편집 기능·보조 지표 */
  .cv-md-only{display:none !important}
  .cv-lift-row{display:none}   /* 검색량 카드: lift KPI 숨기고 차트만 */
  /* KPI 숫자 폰트 축소(모바일) — 요약/드로어 KPI(.num-lg) */
  .num-lg{font-size:20px}
  /* 프로젝트 헤더 메타: 모바일은 매체 아이콘(.ph-scope) 숨기고 소진율 바만 → 헤더 = 선택값 + 바 */
  .cv-phead-meta{gap:10px}
  .ph-scope{display:none}
  .ph-burnbox{width:100%;max-width:none;min-width:0;margin-left:0}
  .ph-burnrow{justify-content:center;gap:8px}   /* 모바일: 라벨+% 양끝 벌어짐 → 가운데 그룹 */
}
.cv-flabel{display:block;font-size:13px;font-weight:600;color:var(--c-700);margin-bottom:6px}
/* AI 분석 섹션(AI 리포트) */
.cv-ai{margin:2px 0 14px;border:1px solid var(--c-200,#e6e8ec);border-radius:12px;background:linear-gradient(180deg,#fbfaff,#fff)}
.cv-ai-head{display:flex;align-items:center;gap:10px;padding:11px 15px;border-bottom:1px solid #eef0f3}
.cv-ai-title{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;color:#1f2733}
.cv-ai-badge{font-size:10px;font-weight:700;color:#6d28d9;background:#ede9fe;border:1px solid #ddd6fe;border-radius:999px;padding:2px 8px;line-height:1.5}
.cv-ai-spacer{flex:1}
.cv-ai-meta{font-size:11px;color:#9aa2ac}
.cv-ai-btn{font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;border-radius:8px;padding:6px 12px;border:1px solid #ddd6fe;background:#f5f3ff;color:#6d28d9;transition:background .12s}
.cv-ai-btn:hover{background:#ede9fe}
.cv-ai-busy{cursor:default;opacity:.7}
.cv-ai-body{padding:13px 15px}
.cv-ai-summary{margin:0 0 10px;font-size:13px;line-height:1.7;color:#1f2733;white-space:pre-wrap}
.cv-ai-bullets{display:flex;flex-direction:column;gap:6px}
.cv-ai-bullet{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;line-height:1.55;color:#334155}
.cv-ai-dot{flex:none;width:7px;height:7px;border-radius:50%;margin-top:6px;background:#94a3b8}
.cv-ai-bullet.t-up .cv-ai-dot{background:#16a34a}
.cv-ai-bullet.t-down .cv-ai-dot{background:#d97706}
.cv-ai-bullet.t-bonus .cv-ai-dot{background:#7c3aed}
.cv-ai-bullet.t-waste .cv-ai-dot{background:#dc2626}
.cv-ai-bullet.t-note .cv-ai-dot{background:#64748b}
.cv-ai-empty{padding:13px 15px;font-size:12.5px;color:#9aa2ac}
.cv-ai-err{color:#b23b2e;font-weight:600}
/* AI 분석 — 핵심 성과 스코어카드 */
.cv-ai-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px;margin:0 0 14px}
.cv-ai-card{display:flex;flex-direction:column;gap:3px;padding:11px 13px;border:1px solid #eceaf5;border-radius:10px;background:#fbfaff}
.cv-ai-card-val{font-size:18px;font-weight:800;color:#312e81;letter-spacing:-.3px;line-height:1.2}
.cv-ai-card-lbl{font-size:11.5px;font-weight:600;color:#8a8fa3}
/* AI 분석 — 하이라이트 표 */
.cv-ai-hl{margin:0 0 14px;overflow-x:auto}
.cv-ai-table{width:100%;border-collapse:collapse;font-size:12.5px}
.cv-ai-table th{text-align:left;font-weight:600;color:#9aa2ac;font-size:11px;padding:6px 10px;border-bottom:1px solid #eef0f3;white-space:nowrap}
.cv-ai-table td{padding:8px 10px;border-bottom:1px solid #f4f5f7;color:#334155;vertical-align:top}
.cv-ai-table .num{text-align:right;font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}
.cv-ai-table tr:last-child td{border-bottom:none}
.cv-ai-hl-g{font-weight:600;color:#1f2733}
.cv-ai-hl-share{display:block;font-size:10.5px;font-weight:500;color:#9aa2ac;margin-top:1px}
.cv-ai-hl-m{color:#6b7280;white-space:nowrap}
.cv-ai-hl-n{color:#475569}
.cv-ai-tdot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;background:#94a3b8;vertical-align:middle}
.cv-ai-table tr.tn-good .cv-ai-tdot{background:#16a34a}
.cv-ai-table tr.tn-good .num{color:#15803d}
.cv-ai-table tr.tn-warn .cv-ai-tdot{background:#dc2626}
.cv-ai-table tr.tn-warn .num{color:#b91c1c}
.cv-ai-table tr.tn-note .cv-ai-tdot{background:#64748b}
/* AI 분석 — 한 줄 결론(headline) */
.cv-ai-headline{display:flex;align-items:center;gap:3px;font-size:13.5px;font-weight:800;color:#241c46;letter-spacing:-.2px;line-height:1.45;margin:0 0 13px;padding:10px 13px;background:linear-gradient(180deg,#f4f1ff,#fbfaff);border:1px solid #e6e0f7;border-radius:9px}
/* AI 분석 — 근거 아이콘(마우스오버) */
.cv-ai-bl-body{flex:1;min-width:0}
.cv-ai-why{position:relative;display:inline-flex;align-items:center;justify-content:center;margin-left:5px;color:#b7bcc6;cursor:help;vertical-align:-2px;user-select:none}
.cv-ai-why:hover,.cv-ai-why:focus{color:#6d28d9;outline:none}
.cv-ai-whyic{width:13px;height:13px;display:block;flex:none}
.cv-ai-tip{position:absolute;bottom:150%;right:-2px;width:max-content;max-width:300px;background:#1f2733;color:#f3f4f6;font-size:11.5px;font-weight:500;line-height:1.55;letter-spacing:0;padding:8px 11px;border-radius:8px;box-shadow:0 8px 24px rgba(20,28,40,.3);opacity:0;visibility:hidden;transform:translateY(3px);transition:opacity .12s,transform .12s;z-index:60;white-space:normal;text-align:left}
.cv-ai-why:hover .cv-ai-tip,.cv-ai-why:focus .cv-ai-tip{opacity:1;visibility:visible;transform:translateY(0)}
.cv-ai-tip::after{content:'';position:absolute;top:100%;right:12px;border:6px solid transparent;border-top-color:#1f2733}
/* ── 프로젝트 개요 대시보드(overview) — 데일리 리포트와 동일 디자인 언어(.cv-card·.cv-card-title·.cv-stat) ── */
.cv-ov-loading{padding:40px;text-align:center;color:var(--c-500);font-size:13.5px}

/* 상태 히어로(컨테이너는 .cv-card, 내부 레이아웃만 정의) */
.cv-ov-hero-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 15px}
.cv-ov-title{font-size:16px;font-weight:var(--fw-bold);color:var(--c-900);letter-spacing:var(--ls-title)}
.cv-ov-badge{font-size:11px;font-weight:700;color:var(--c-600);background:#f1f5f9;border:1px solid #e5e9ef;border-radius:999px;padding:2px 10px}
.cv-ov-dday{font-size:11.5px;font-weight:700;border-radius:7px;padding:2px 9px}
.cv-ov-dday.live{color:#15803d;background:#dcfce7}
.cv-ov-dday.end{color:var(--c-600);background:#f1f5f9}
.cv-ov-spacer{flex:1}
.cv-ov-period{font-size:12px;color:var(--c-400);font-variant-numeric:tabular-nums}
/* 달성률 인라인 스트립(데일리와 중복되는 요약은 칩으로 압축) */
.cv-ov-kline{display:flex;flex-wrap:wrap;gap:9px 10px;margin:0 0 16px}
.cv-ov-ki{display:inline-flex;align-items:baseline;gap:5px;background:#f8fafc;border:1px solid #eef1f5;border-radius:9px;padding:7px 12px;font-size:12px;color:var(--c-500);font-weight:600}
.cv-ov-ki b{font-size:16px;font-weight:var(--fw-bold);color:var(--c-900);letter-spacing:var(--ls-title);font-variant-numeric:tabular-nums}
/* 예산 페이스 게이지(소진율 vs 기간경과 — 상태색은 텍스트 라벨 동반) */
.cv-ov-gauge-bar{position:relative;height:12px;border-radius:7px;background:#eef0f3;overflow:visible}
.cv-ov-gauge-fill{height:100%;border-radius:7px;transition:width .4s}
.cv-ov-gauge-fill.p-ok{background:linear-gradient(90deg,#34d399,#10b981)}
.cv-ov-gauge-fill.p-fast{background:linear-gradient(90deg,#fbbf24,#f59e0b)}
.cv-ov-gauge-fill.p-slow{background:linear-gradient(90deg,#93c5fd,#60a5fa)}
.cv-ov-gauge-elapsed{position:absolute;top:-4px;width:2px;height:20px;background:var(--c-700);border-radius:1px}
.cv-ov-gauge-elapsed::before{content:'';position:absolute;top:-5px;left:50%;transform:translateX(-50%);border:4px solid transparent;border-top-color:var(--c-700)}
.cv-ov-tick{color:var(--c-700);font-weight:700}
.cv-ov-gauge-lbl{display:flex;justify-content:space-between;gap:12px;margin-top:10px;font-size:12px;color:var(--c-500);flex-wrap:wrap}
.cv-ov-gauge-lbl b{color:var(--c-900);font-weight:700}
.pc-fast{color:#d97706 !important}.pc-slow{color:#2563eb !important}.pc-ok{color:#059669 !important}

/* 차트(전역 Apex 테마 팔레트 유지 — 색 오버라이드 금지) */
.cv-ov-chart{min-height:250px}
/* 효율 추세 방향 뱃지(카드 타이틀 우측) */
.cv-ov-dirs{margin-left:auto;display:inline-flex;gap:6px}
.cv-ov-dir{font-size:11px;font-weight:700;padding:2px 9px;border-radius:7px}
.cv-ov-dir.d-up{color:#15803d;background:#dcfce7}
.cv-ov-dir.d-down{color:#b91c1c;background:#fee2e2}
.cv-ov-dir.d-flat{color:var(--c-600);background:#f1f5f9}

/* YouTube 반응 */
.cv-ov-yt-loading{display:flex;flex-direction:column;align-items:center;gap:13px;padding:46px 22px;text-align:center}
.cv-ov-yt-loading-t{font-size:13.5px;font-weight:600;color:var(--c-700)}
.cv-ov-yt-loading-s{font-size:12px;color:var(--c-400)}
.cv-ov-yt-substat{font-size:11px;color:var(--c-400);font-weight:500;margin-top:4px}

/* 정성 반응 패널(시그니처: 감성 판정 + 반응 토픽 + 시청자의 목소리) */
.cv-ov-react{margin:16px 0 6px;padding:17px 18px;background:#fbfcfd;border:1px solid #eef1f5;border-radius:12px}
.cv-ov-react-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cv-ov-verdict-lbl{font-size:12px;font-weight:700;color:var(--c-600);white-space:nowrap}
.cv-ov-verdict-sub{font-size:11.5px;color:var(--c-500);white-space:nowrap}
/* 감성 스택바 — dataviz mark spec: 세그먼트 2px 간격 + 라운드 엔드 */
.cv-ov-sbar{flex:1;min-width:220px;display:flex;gap:2px;height:12px}
.cv-ov-sbar span{border-radius:3px;min-width:3px}
.cv-ov-sbar .pos{background:#16a34a}
.cv-ov-sbar .neu{background:#cbd5e1}
.cv-ov-sbar .neg{background:#ef4444}
/* 반응 토픽 — 감성별 칩(가짜 크기 바 대신 정직한 분류) */
.cv-ov-tps{margin-top:16px;display:flex;flex-direction:column;gap:9px}
.cv-ov-tps-lbl{display:flex;align-items:baseline;gap:8px;font-size:11.5px;font-weight:700;color:var(--c-600);margin-bottom:1px}
.cv-ov-tps-lbl span{font-size:11px;font-weight:500;color:var(--c-400)}
.cv-ov-topic-row{display:flex;align-items:flex-start;gap:9px}
.cv-ov-topic-glbl{flex:none;width:32px;font-size:11px;font-weight:700;padding-top:4px}
.cv-ov-topic-glbl.g-pos{color:#15803d}.cv-ov-topic-glbl.g-neg{color:#b91c1c}.cv-ov-topic-glbl.g-neu{color:var(--c-500)}
.cv-ov-topic-chips{display:flex;flex-wrap:wrap;gap:6px}
.cv-ov-topic{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;line-height:1;padding:4px 10px 4px 11px;border-radius:999px;border:1px solid transparent}
.cv-ov-topic > span{line-height:1}
.cv-ov-topic b{display:inline-flex;align-items:center;line-height:1;font-weight:700;font-size:11px;opacity:.72;font-variant-numeric:tabular-nums}
.cv-ov-topic.t-pos{color:#15803d;background:#dcfce7;border-color:#bbf7d0}
.cv-ov-topic.t-neg{color:#b91c1c;background:#fee2e2;border-color:#fecaca}
.cv-ov-topic.t-neu{color:var(--c-600);background:#f1f5f9;border-color:#e2e8f0}
.cv-ov-quotes-wrap{margin-top:15px}
.cv-ov-quotes-lbl{display:block;font-size:11.5px;font-weight:700;color:var(--c-600);margin-bottom:8px}
.cv-ov-quotes{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:9px}
.cv-ov-quote{position:relative;margin:0;font-size:12.5px;line-height:1.55;color:var(--c-700);background:#fff;border:1px solid #eef1f5;border-radius:9px;padding:11px 12px 11px 30px}
.cv-ov-quote::before{content:'“';position:absolute;left:9px;top:6px;font-size:24px;font-weight:800;color:var(--brand-200);line-height:1;font-family:Georgia,serif}

/* 영상별 반응(썸네일 16:9 확대·여백 확보) */
.cv-ov-vids-lbl{display:flex;align-items:baseline;gap:8px;margin:20px 0 11px;font-size:13px;font-weight:700;color:var(--c-900)}
.cv-ov-vids-lbl span{font-size:11.5px;font-weight:500;color:var(--c-400)}
.cv-ov-vids{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:560px){.cv-ov-vids{grid-template-columns:repeat(2,1fr)}}
@media(min-width:920px){.cv-ov-vids{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1200px){.cv-ov-vids{grid-template-columns:repeat(4,1fr)}}
.cv-ov-vid{display:flex;gap:12px;padding:10px;border:1px solid #e8eaed;border-radius:12px;text-decoration:none;transition:border-color .12s,background .12s,box-shadow .12s}
.cv-ov-vid:hover{border-color:var(--brand-200);background:var(--brand-50);box-shadow:0 2px 10px rgba(240,70,79,.06)}
.cv-ov-vid-thumb{position:relative;flex:none;width:128px;height:72px;border-radius:8px;overflow:hidden;background:#eef0f3}
.cv-ov-vid-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cv-ov-vid-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(17,24,39,.55);border-radius:50%}
.cv-ov-vid-play svg{width:14px;height:14px;fill:currentColor;stroke:none;margin-left:1px}
.cv-ov-vid-meta{display:flex;flex-direction:column;gap:4px;min-width:0;padding:1px 0}
.cv-ov-vid-title{font-size:12.5px;font-weight:600;color:var(--c-900);line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.cv-ov-vid-nums{display:flex;flex-wrap:wrap;align-items:center;gap:3px 11px;font-size:11.5px;color:var(--c-500)}
.cv-ov-vid-nums .m{display:inline-flex;align-items:center;gap:4px}
.cv-ov-vid-nums b{color:var(--c-900);font-weight:700}
.cv-ov-vid-nums svg{width:13px;height:13px;color:var(--c-400);stroke-width:2}
.cv-ov-vid-sent{display:flex;align-items:center;gap:8px;margin-top:2px}
.cv-ov-vid-sbar{flex:1;max-width:120px;display:flex;gap:1.5px;height:7px}
.cv-ov-vid-sbar span{border-radius:2px;min-width:2px}
.cv-ov-vid-sbar .pos{background:#16a34a}.cv-ov-vid-sbar .neu{background:#cbd5e1}.cv-ov-vid-sbar .neg{background:#ef4444}
.cv-ov-vid-pos{font-size:11px;font-weight:700;color:#15803d;white-space:nowrap}
.cv-ov-vid{cursor:pointer}
/* 영상 반응 댓글 모달(긍정/중립/부정 대표 댓글) */
.cv-ov-modal{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(17,24,39,.5)}
.cv-ov-modal-card{position:relative;width:100%;max-width:640px;max-height:88vh;display:flex;flex-direction:column;background:#fff;border-radius:16px;box-shadow:0 24px 60px rgba(16,24,40,.28);padding:24px}
.cv-ov-modal-x{position:absolute;top:12px;right:12px;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--c-500);border-radius:8px;cursor:pointer}
.cv-ov-modal-x:hover{background:#f1f5f9;color:var(--c-900)}
.cv-ov-modal-x svg{width:18px;height:18px}
.cv-ov-modal-head{display:flex;gap:13px;padding-right:28px}
.cv-ov-modal-thumb{width:132px;height:74px;flex:none;object-fit:cover;border-radius:9px;background:#eef0f3}
.cv-ov-modal-meta{display:flex;flex-direction:column;gap:6px;min-width:0}
.cv-ov-modal-title{font-size:14px;font-weight:700;color:var(--c-900);line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.cv-ov-modal-nums{display:flex;flex-wrap:wrap;align-items:center;gap:3px 12px;font-size:11.5px;color:var(--c-500)}
.cv-ov-modal-nums .m{display:inline-flex;align-items:center;gap:4px}
.cv-ov-modal-nums b{color:var(--c-900);font-weight:700}
.cv-ov-modal-nums svg{width:13px;height:13px;color:var(--c-400);stroke-width:2}
.cv-ov-modal-sbar{display:flex;gap:2px;height:9px;margin-top:2px;max-width:200px}
.cv-ov-modal-sbar span{border-radius:3px;min-width:3px}
.cv-ov-modal-sbar .pos{background:#16a34a}.cv-ov-modal-sbar .neu{background:#cbd5e1}.cv-ov-modal-sbar .neg{background:#ef4444}
.cv-ov-modal-body{display:flex;flex-direction:column;min-height:0;margin-top:16px}
.cv-ov-modal-tabs{display:flex;gap:6px;border-bottom:1px solid #eef1f5}
.cv-ov-modal-tabs button{padding:7px 13px;font-size:12.5px;font-weight:600;color:var(--c-500);background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer}
.cv-ov-modal-tabs button b{font-weight:700;margin-left:2px}
.cv-ov-modal-tabs button:hover{color:var(--c-700)}
.cv-ov-modal-tabs button.on{color:var(--c-900);border-bottom-color:var(--brand)}
.cv-ov-modal-list{overflow-y:auto;padding:14px 2px 2px;display:flex;flex-direction:column;gap:7px}
.cv-ov-modal-cmt{font-size:13.5px;line-height:1.72;color:#2b3442;background:#fbfcfd;border:1px solid #e7eaee;border-radius:11px;padding:13px 16px}
.cv-ov-modal-empty{font-size:12.5px;color:var(--c-400);padding:18px 4px;text-align:center}
.cv-ov-modal-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:16px;padding-top:15px;border-top:1px solid #eef1f5}
.cv-ov-modal-note{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--c-400);line-height:1.5}
.cv-ov-modal-fallback{margin-top:16px;padding:16px;font-size:12.5px;line-height:1.6;color:var(--c-500);background:#f8fafc;border:1px solid #eef1f5;border-radius:10px}
.cv-ov-modal-link{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--brand);text-decoration:none;padding:8px 14px;border:1px solid var(--brand-200);border-radius:9px;white-space:nowrap;transition:background .12s,border-color .12s}
.cv-ov-modal-link:hover{background:var(--brand-50);border-color:var(--brand-300)}
.cv-ov-modal-link svg{width:14px;height:14px;stroke-width:2}
/* 수집·분석 버튼(카드 헤더) */
.cv-ov-sync{margin-left:auto;display:inline-flex;align-items:center;height:30px;padding:0 13px;font-size:12px;font-weight:600;color:var(--brand);background:var(--brand-50);border:1px solid var(--brand-200);border-radius:8px;cursor:pointer;transition:background .12s,border-color .12s}
.cv-ov-sync:hover:not(:disabled){background:#ffe7e5;border-color:var(--brand-300)}
.cv-ov-sync:disabled{color:var(--c-500);background:#f1f5f9;border-color:#e5e9ef;cursor:default}
.cv-ov-sync-in{display:inline-flex;align-items:center;gap:6px}
.cv-ov-sync-in svg{width:14px;height:14px;stroke-width:2}
/* 미분석 안내 */
.cv-ov-yt-empty{margin-top:16px;padding:18px;font-size:13px;line-height:1.6;color:var(--c-500);background:#fbfcfd;border:1px dashed #dfe4ea;border-radius:11px}
.cv-ov-yt-empty b{color:var(--brand);font-weight:700}
/* 반응 토픽 실수치 바(언급 댓글 수) */
.cv-ov-tps{margin-top:16px}
.cv-ov-tps-lbl{display:flex;align-items:baseline;gap:8px;font-size:11.5px;font-weight:700;color:var(--c-600);margin-bottom:10px}
.cv-ov-tps-lbl span{font-size:11px;font-weight:500;color:var(--c-400)}
.cv-ov-tp{display:grid;grid-template-columns:96px 1fr auto;align-items:center;gap:10px;margin:7px 0}
.cv-ov-tp-label{font-size:12px;font-weight:600;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cv-ov-tp-label.t-pos{color:#15803d}.cv-ov-tp-label.t-neg{color:#b91c1c}.cv-ov-tp-label.t-neu{color:var(--c-600)}
.cv-ov-tp-bar{height:13px;background:#eef1f5;border-radius:7px;overflow:hidden}
.cv-ov-tp-bar span{display:block;height:100%;border-radius:7px;transition:width .4s}
.cv-ov-tp-bar span.t-pos{background:#16a34a}.cv-ov-tp-bar span.t-neg{background:#ef4444}.cv-ov-tp-bar span.t-neu{background:#94a3b8}
.cv-ov-tp-cnt{font-size:11px;color:var(--c-500);font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}
.cv-ov-quotes-sub{font-size:11px;font-weight:500;color:var(--c-400)}
/* 영상 댓글 드로워 */
.cv-ov-dw{position:fixed;inset:0;z-index:200}
.cv-ov-dw-scrim{position:absolute;inset:0;background:rgba(17,24,39,.42)}
.cv-ov-dw-panel{position:absolute;top:0;right:0;height:100%;width:min(560px,94vw);display:flex;flex-direction:column;background:#fff;box-shadow:-16px 0 48px rgba(16,24,40,.2);animation:cv-dw-in .22s ease}
@keyframes cv-dw-in{from{transform:translateX(30px);opacity:.4}to{transform:translateX(0);opacity:1}}
.cv-ov-dw-head{display:flex;gap:13px;align-items:flex-start;padding:20px 22px;border-bottom:1px solid #eef1f5}
.cv-ov-dw-thumb{width:120px;height:68px;flex:none;object-fit:cover;border-radius:9px;background:#eef0f3}
.cv-ov-dw-meta{flex:1;min-width:0}
.cv-ov-dw-title{font-size:14px;font-weight:700;color:var(--c-900);line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.cv-ov-dw-nums{display:flex;flex-wrap:wrap;align-items:center;gap:3px 12px;margin-top:6px;font-size:11.5px;color:var(--c-500)}
.cv-ov-dw-nums .m{display:inline-flex;align-items:center;gap:4px}
.cv-ov-dw-nums b{color:var(--c-900);font-weight:700}
.cv-ov-dw-nums svg{width:13px;height:13px;color:var(--c-400);stroke-width:2}
.cv-ov-dw-x{flex:none;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--c-500);border-radius:8px;cursor:pointer}
.cv-ov-dw-x:hover{background:#f1f5f9;color:var(--c-900)}.cv-ov-dw-x svg{width:18px;height:18px}
.cv-ov-dw-tabs{display:flex;gap:4px;padding:10px 22px 0;border-bottom:1px solid #eef1f5}
.cv-ov-dw-tabs button{padding:9px 14px;font-size:12.5px;font-weight:600;color:var(--c-500);background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer}
.cv-ov-dw-tabs button b{font-weight:700;margin-left:3px;color:var(--c-600)}
.cv-ov-dw-tabs button:hover{color:var(--c-700)}
.cv-ov-dw-tabs button.on{color:var(--c-900)}
.cv-ov-dw-tabs button.on.t-pos{border-bottom-color:#16a34a}.cv-ov-dw-tabs button.on.t-pos b{color:#15803d}
.cv-ov-dw-tabs button.on.t-neu{border-bottom-color:#94a3b8}
.cv-ov-dw-tabs button.on.t-neg{border-bottom-color:#ef4444}.cv-ov-dw-tabs button.on.t-neg b{color:#b91c1c}
.cv-ov-dw-list{flex:1;overflow-y:auto;padding:16px 22px;display:flex;flex-direction:column;gap:8px}
.cv-ov-dw-cload{padding:30px;display:flex;justify-content:center}
.cv-ov-dw-empty{padding:34px 10px;text-align:center;color:var(--c-400);font-size:13px}
.cv-ov-dw-cmt{background:#fbfcfd;border:1px solid #eef1f5;border-radius:11px;padding:13px 15px}
.cv-ov-dw-cmt-t{font-size:13.5px;line-height:1.65;color:#2b3442}
.cv-ov-dw-cmt-b{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:9px}
.cv-ov-dw-tag{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px}
.cv-ov-dw-tag.t-pos{color:#15803d;background:#dcfce7}.cv-ov-dw-tag.t-neg{color:#b91c1c;background:#fee2e2}.cv-ov-dw-tag.t-neu{color:var(--c-600);background:#f1f5f9}
.cv-ov-dw-reason{font-size:11.5px;color:var(--c-500);font-style:italic}
.cv-ov-dw-like{display:inline-flex;align-items:center;gap:3px;margin-left:auto;font-size:11px;color:var(--c-400);font-weight:600}
.cv-ov-dw-like svg{width:12px;height:12px}
.cv-ov-dw-more{margin:6px auto 2px;padding:8px 18px;font-size:12.5px;font-weight:600;color:var(--c-700);background:#f4f6f9;border:1px solid #e5e9ef;border-radius:8px;cursor:pointer}
.cv-ov-dw-more:hover:not(:disabled){background:#eef1f5}
.cv-ov-dw-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 22px;border-top:1px solid #eef1f5}
.cv-ov-dw-note{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--c-500)}.cv-ov-dw-note b{color:var(--c-700);font-weight:700}
@media(max-width:560px){.cv-ov-dw-panel{width:100vw}}
