/* ============================================================
   calendar_v2 — app.css  v3 (수정안 2)
   Apple HIG 기준 typography + 통합 디자인
   ============================================================ */

/* ── 폰트 전역 적용 ─────────────────────────────────────── */
* { font-family: 'Noto Sans KR', sans-serif; box-sizing: border-box; }
h1, h2, h3, h4, h5, h6, .font-heading { font-family: 'IBM Plex Sans KR', sans-serif; }
html { height: 100%; }
/* Tailwind CDN 제거 후 body 기본 스타일 직접 정의 */
body {
  margin: 0;
  min-height: 100%;
  overflow-y: auto;
  background-color: #ffffff;
  color: #1f2937;
  transition: background-color 0.3s, color 0.3s;
}
.dark body {
  background-color: #111827;
  color: #f3f4f6;
}

/* ── CSS 변수 (라이트) ──────────────────────────────────── */
:root {
  /* 상승/하락 기본 (한국 모드: 기본값) */
  --cv2-up:   #ef4444;   /* red-500 */
  --cv2-down: #3b82f6;   /* blue-500 */
  --cv2-flat: #9ca3af;

  /* 배경 — 흰색으로 통일 */
  --cv2-bg:        #ffffff;
  --cv2-bg-alt:    #f8f9fa;

  /* 이벤트 카테고리 */
  --cv2-cat-economy:    #3b82f6;
  --cv2-cat-stock:      #ef4444;
  --cv2-cat-tax:        #f97316;
  --cv2-cat-realestate: #22c55e;

  /* 강조 */
  --cv2-accent:    #6366f1;
  --cv2-primary:   #6366f1;
  --cv2-warning:   #f59e0b;

  /* 표면 */
  --cv2-surface-1: #ffffff;
  --cv2-surface-2: #f9fafb;
  --cv2-surface-3: #e5e7eb;
  --cv2-border:    #e5e7eb;
  /* 오늘버튼·오늘원형·로고배경 등 subtle UI 요소 배경 */
  --cv2-subtle-bg: #f3f4f6;

  /* 텍스트 */
  --cv2-text-1:    #111827;
  --cv2-text-2:    #374151;
  --cv2-text-3:    #6b7280;
  --cv2-text-muted:#9ca3af;
  /* 하위 호환 */
  --cv2-text-primary:   #111827;
  --cv2-text-secondary: #6b7280;
  --cv2-text-sat: oklch(70.7% 0.165 254.624);
  --cv2-text-sun: oklch(70.4% 0.191 22.216);
}

/* 다크모드 */
.dark {
  --cv2-bg:        #111827;
  --cv2-bg-alt:    #1a2332;
  --cv2-surface-1: #1f2937;
  --cv2-surface-2: #111827;
  --cv2-surface-3: #374151;
  --cv2-border:    #374151;
  --cv2-subtle-bg: #374151;
  --cv2-text-1:    #f9fafb;
  --cv2-text-2:    #d1d5db;
  --cv2-text-3:    #9ca3af;
  --cv2-text-muted:#6b7280;
  --cv2-text-primary:   #f9fafb;
  --cv2-text-secondary: #9ca3af;
}

/* data-color-mode="dark" 컨텍스트 변수 재정의 */
[data-color-mode="dark"] {
  --cv2-subtle-bg: #374151;
}

/* ── 색상 모드: 상승/하락 CSS 변수 ────────────────────── */
[data-color-mode="korean"] {
  --cv2-up:   #ef4444;  /* red-500 */
  --cv2-down: #3b82f6;  /* blue-500 */
}
[data-color-mode="american"] {
  --cv2-up:   #22c55e;  /* green-500 */
  --cv2-down: #ef4444;  /* red-500 */
}
.up   { color: var(--cv2-up); }
.down { color: var(--cv2-down); }
.flat { color: var(--cv2-flat); }

/* ── 앱 래퍼 ────────────────────────────────────────────── */
.cv2-app {
  display: flex;
  flex-direction: column;
  background: var(--cv2-bg);
}

/* ── 공통 섹션 ──────────────────────────────────────────── */
.cv2-section {
  padding: 0 16px;
  /* 구분선 없이 여백으로만 구분 */
}

/* ── 설정 FAB (우측하단 fixed) ─────────────────────────── */
.cv2-settings-fab {
  position: fixed;
  right: 1.5rem;
  bottom: 1.5rem;
  z-index: 66;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  color: var(--cv2-text-3);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  transition: transform 0.15s, background 0.2s;
}
.cv2-settings-fab:hover  { transform: scale(1.08); }
.cv2-settings-fab:active { transform: scale(0.95); }
.cv2-settings-fab svg { width: 20px; height: 20px; }
@media (max-width: 699px) {
  .cv2-settings-fab { right: 1rem; bottom: 1rem; }
}

/* ── 모바일 상단 광고 배너 ─────────────────────────────────── */
.cv2-mob-top-ad {
  display: none; /* 기본: 숨김 (데스크탑 포함) */
  position: sticky;
  top: 0;
  z-index: 99; /* 헤더(z-index:100)보다 1 낮게 */
  width: 100%;
  height: 50px;
  overflow: hidden;
  background: #eeeeee;
}
.cv2-mob-top-ad > div { margin: 0 !important; }
@media (max-width: 699px) {
  .cv2-mob-top-ad { display: block; }
}

/* ── 헤더 ────────────────────────────────────────────────── */
.cv2-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--cv2-bg);
  /* shadow (하단 경계) */
  box-shadow: 0 1px 6px rgba(0,0,0,0.08);
  height: 55px;
  overflow: hidden;
  flex-shrink: 0;
}
/* ── 헤더 내부 최대 너비 래퍼 ──────────────────────────── */
.cv2-header-inner {
  max-width: 920px;
  margin: 0 auto;
}
.dark .cv2-header {
  box-shadow: 0 1px 6px rgba(0,0,0,0.3);
  background: var(--cv2-bg);
}
/* 로고 + 날짜 + 티커 + nav 한 줄 (height: 70px) */
.cv2-header-row1 {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 55px;
  gap: 8px;
  padding: 0 16px;
}
@media (max-width: 600px) {
    .cv2-header-row1 {
        padding: 0 12px;
    }
}
.cv2-header-left {
  display: flex;
  align-items: center;
  gap: 7px;
  flex-shrink: 0;
  margin-bottom: 4px;
}
@media (max-width: 600px) {
    .cv2-header-left { margin-bottom: 0; }
}
.cv2-header-date {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 15px;
  font-weight: 600;
  color: var(--cv2-text-1);
  white-space: nowrap;
}
@media (max-width: 600px) {
    .cv2-header-date { padding-top: 1px; }
}
.cv2-header-badges-wrap {
  margin-left: 0;
  flex-shrink: 0;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.cv2-header-badges-wrap::-webkit-scrollbar { display: none; }
.cv2-header-badges {
  display: flex;
  gap: 5px;
  align-items: center;
}
@media (max-width: 600px) {
    .cv2-header-badges { display: none; }
}

/* 시장 상태 뱃지 */
.cv2-market-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px 3px 6px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 500;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
  white-space: nowrap;
  text-decoration: none;
}
/* 국기 아이콘: 직사각형 (3:2 비율, border-radius: 1px) */
.cv2-badge-flag {
  padding-top: 1px;
  width: 15px;
  height: 10px;
  border-radius: 1px;
  object-fit: cover;
  flex-shrink: 0;
}
.cv2-market-badge.open  { border-color: #22c55e; color: #16a34a; background: #f0fdf4; }
.cv2-market-badge.pre   { border-color: #f59e0b; color: #d97706; background: #fffbeb; }
.cv2-market-badge.close { border-color: var(--cv2-border); }
.dark .cv2-market-badge.open  { background: #052e16; }
.dark .cv2-market-badge.pre   { background: #1c1400; }

/* 헤더 수직 자동 스크롤 티커 (row1 중간 flex:1) */
.cv2-header-ticker {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  padding: 0 4px;
}
@media (max-width: 600px) {
  .cv2-header-ticker { display: none; }
}
.cv2-ticker-slot {
  position: relative;
  height: 20px;
  overflow: hidden;
}
.cv2-ticker-item {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  display: flex;
  align-items: center;
  gap: 8px;
  transform: translateY(-110%);
  opacity: 0;
  transition: transform 0.4s cubic-bezier(0.4,0,0.2,1), opacity 0.35s;
  height: 20px;
  line-height: 20px;
}
.cv2-ticker-item.visible { transform: translateY(0); opacity: 1; }
.cv2-ticker-item.exit    { transform: translateY(110%); opacity: 0; transition: transform 0.35s cubic-bezier(0.4,0,0.6,1), opacity 0.3s; }
.cv2-ticker-name  { font-size: 12px; font-weight: 500; color: var(--cv2-text-3); margin-right: 7px; }
.cv2-ticker-value { font-family: 'IBM Plex Sans KR', sans-serif; font-size: 13px; font-weight: 700; }
.cv2-ticker-pct   { font-family: 'IBM Plex Sans KR', sans-serif; font-size: 12px; font-weight: 500; }

/* ── 이번 주의 핵심 이벤트 섹션 ────────────────────────── */
.cv2-week-events-section {
  background: var(--cv2-bg-alt);
  padding: 18px 0 24px;
  /* 구분선 없이 배경색으로 구분 */
}
.dark .cv2-week-events-section {
  background: var(--cv2-surface-2);
}
.cv2-we-section-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 16px;
  font-weight: 700;
  color: var(--cv2-text-1);
  padding: 0 16px 14px;
}
.cv2-we-wrap { padding: 0 0 4px; }

/* 날짜 선택기 (Mon~Sat 6일) */
.cv2-we-selector {
  display: flex;
  gap: 2px;
  padding: 0 16px 12px;
  overflow-x: auto;
  scrollbar-width: none;
}
.cv2-we-selector::-webkit-scrollbar { display: none; }
.cv2-we-day {
  flex: 1;
  min-width: 42px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 8px 4px 8px;
  border-radius: 12px;
  border: 1.5px solid transparent;
  background: none;    /* 배경색 제거 */
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s;
  -webkit-tap-highlight-color: transparent;
}

/* 선택된 날짜: accent 색상 */
.cv2-we-day.selected .cv2-we-day-label,
.cv2-we-day.selected .cv2-we-day-num,
.cv2-we-day.selected .cv2-we-day-dot { color: var(--cv2-accent); }

.cv2-we-day-label {
    font-family: 'IBM Plex Sans KR', sans-serif;
    font-size: 13px;
    font-weight: 400;
    color: var(--cv2-text-muted);
}
.cv2-we-day-num   {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 15px;
  font-weight: 600;
  color: var(--cv2-text-1);
  line-height: 1;
}
/* dot: 선택 날짜에만 표시 */
.cv2-we-day-dot {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--cv2-accent);
}
.cv2-we-day-dot.hidden { background: transparent; }

/* 이벤트 목록 */
.cv2-we-list {
  padding: 0 16px;
  display: flex;
  flex-direction: column;
  gap: 0;
}
.cv2-we-empty {
  padding: 20px 0;
  text-align: center;
  font-size: 13px;
  color: var(--cv2-text-muted);
}

/* 이벤트 한 줄 레이아웃 */
.cv2-we-event-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 0;
  border-bottom: 1px solid var(--cv2-border);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.cv2-we-event-row:last-child { border-bottom: none; }
.cv2-we-event-row:active { opacity: 0.7; }

.cv2-we-time {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 11px;
  color: var(--cv2-text-muted);
  flex-shrink: 0;
  min-width: 24px;
  text-align: center;
}
.cv2-we-icon {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* 원형 기업 아이콘 */
.cv2-we-icon-company {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  overflow: hidden;
  position: relative;
  flex-shrink: 0;
}
.cv2-we-icon-logo {
  width: 24px;
  height: 24px;
  object-fit: contain;
  border-radius: 50%;
}
.cv2-we-icon-fallback {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 13px;
  font-weight: 700;
  color: #fff;
}
/* 원형 국기 아이콘 (object-fit: contain + padding) */
.cv2-we-icon-flag-circle {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  overflow: hidden;
  background: #f0f0f0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 4px;
  flex-shrink: 0;
}
.dark .cv2-we-icon-flag-circle { background: #374151; }
.cv2-we-icon-flag-circle img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.cv2-we-name {
  flex: 1;
  min-width: 0;
  font-size: 14px;
  font-weight: 500;
  color: var(--cv2-text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cv2-we-value {
  font-size: 11px;
  color: var(--cv2-text-3);
  flex: 0 1 auto;
  max-width: 44%;          /* 글자 제한 없음, 화면 폭 44% 이내에서 표시 */
  font-family: 'IBM Plex Sans KR', sans-serif;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── 경제 일정 섹션 ─────────────────────────────────────── */
.cv2-calendar-section {
  padding: 5px 0 24px;
}

/* ── 필터 바 ─────────────────────────────────────────────── */
.cv2-filter-bar {
  background: none;      /* 배경색 제거 */
  /* top은 JS로 동적 설정 */
  z-index: 30;
  padding-bottom: 2px;
}

/* 상단: 카테고리(좌) + 국가 드롭다운(우) */
.cv2-filter-top-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 16px 4px;
  gap: 8px;
}
.cv2-filter-cat-wrap {
  display: flex;
  gap: 5px;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  flex: 1;
}
.cv2-filter-cat-wrap::-webkit-scrollbar { display: none; }

/* 카테고리 뱃지 — 상하 padding 좁게 */
.cv2-filter-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 10px;    /* 상하 padding 좁게 */
  border-radius: 999px;
  font-size: 13px;
  font-weight: 500;
  border: 1.5px solid var(--cv2-border);
  background: var(--cv2-surface-1);
  color: var(--cv2-text-3);
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.15s;
  -webkit-tap-highlight-color: transparent;
}
.cv2-filter-btn:hover { opacity: 0.8; }
/* sub-row 표시 중인 대분류 (활성 포커스) */
.cv2-filter-btn.active-all         { background:#eef2ff; border-color:#6366f1; color:#4f46e5; }
.cv2-filter-btn.active-economy     { background:#dbeafe; border-color:#3b82f6; color:#1d4ed8; }
.cv2-filter-btn.active-stock       { background:#fee2e2; border-color:#ef4444; color:#dc2626; }
.cv2-filter-btn.active-tax         { background:#ffedd5; border-color:#f97316; color:#ea580c; }
.cv2-filter-btn.active-realestate  { background:#dcfce7; border-color:#22c55e; color:#16a34a; }
.dark .cv2-filter-btn.active-all        { background:#1e1b4b; border-color:#818cf8; color:#a5b4fc; }
.dark .cv2-filter-btn.active-economy    { background:#172554; border-color:#60a5fa; color:#93c5fd; }
.dark .cv2-filter-btn.active-stock      { background:#450a0a; border-color:#f87171; color:#fca5a5; }
.dark .cv2-filter-btn.active-tax        { background:#431407; border-color:#fb923c; color:#fdba74; }
.dark .cv2-filter-btn.active-realestate { background:#052e16; border-color:#4ade80; color:#86efac; }

/* 선택됐지만 sub-row 미표시인 대분류 (연한 색상) */
.cv2-filter-btn.active-dim-economy     { background:#eff6ff; border-color:#bfdbfe; color:#93c5fd; }
.cv2-filter-btn.active-dim-stock       { background:#fef2f2; border-color:#fecaca; color:#fca5a5; }
.cv2-filter-btn.active-dim-tax         { background:#fff7ed; border-color:#fed7aa; color:#fdba74; }
.cv2-filter-btn.active-dim-realestate  { background:#f0fdf4; border-color:#bbf7d0; color:#86efac; }
.dark .cv2-filter-btn.active-dim-economy     { background:#0c1a33; border-color:#1e3a5f; color:#60a5fa; }
.dark .cv2-filter-btn.active-dim-stock       { background:#1c0505; border-color:#7f1d1d; color:#f87171; }
.dark .cv2-filter-btn.active-dim-tax         { background:#1a0a03; border-color:#7c2d12; color:#fb923c; }
.dark .cv2-filter-btn.active-dim-realestate  { background:#021408; border-color:#14532d; color:#4ade80; }

/* 소분류 */
.cv2-filter-sub {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease;
}
.cv2-filter-sub.open { max-height: 60px; }
.cv2-filter-sub-row {
  display: flex;
  gap: 5px;
  padding: 4px 16px 6px;
  overflow-x: auto;
  scrollbar-width: none;
}
.cv2-filter-sub-row::-webkit-scrollbar { display: none; }
.cv2-filter-sub-btn {
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 500;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-muted);
  cursor: pointer;
  white-space: nowrap;
}
.cv2-filter-sub-btn.selected {
  background: var(--cv2-surface-1);
  color: var(--cv2-text-1);
  border-color: var(--cv2-text-3);
}

/* 국가 드롭다운 */
.cv2-mkt-dropdown {
  position: relative;
  flex-shrink: 0;
}
.cv2-mkt-trigger {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 8px 4px 6px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  border: 1.5px solid var(--cv2-border);
  background: var(--cv2-surface-1);
  color: var(--cv2-text-2);
  cursor: pointer;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
}
.cv2-mkt-trigger img { vertical-align: middle; }
.cv2-mkt-chevron {
  flex-shrink: 0;
  color: var(--cv2-text-muted);
  transition: transform 0.15s;
}
.cv2-mkt-trigger[aria-expanded="true"] .cv2-mkt-chevron { transform: rotate(180deg); }
.cv2-mkt-options {
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  z-index: 50;
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 10px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.12);
  padding: 4px;
  min-width: 110px;
}
.dark .cv2-mkt-options { box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
.cv2-mkt-option {
  display: flex;
  align-items: center;
  gap: 6px;
  width: 100%;
  padding: 8px 10px;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 500;
  border: none;
  background: none;
  color: var(--cv2-text-2);
  cursor: pointer;
  text-align: left;
  -webkit-tap-highlight-color: transparent;
  white-space: nowrap;
}
.cv2-mkt-option:hover   { background: var(--cv2-surface-2); }
.cv2-mkt-option.selected { color: var(--cv2-accent); font-weight: 600; }
.cv2-mkt-option img { vertical-align: middle; }

/* ── 달력 공통 ───────────────────────────────────────────── */
.cv2-cal-wrap {
  background: var(--cv2-surface-1);
  /* 좌우 마진 제거 — 화면 전체 폭 */
  margin: 0;
  border-radius: 0;
  border-left: none;
  border-right: none;
  border-top: 1px solid var(--cv2-border);
  border-bottom: none;
  overflow: hidden;
}
.cv2-cal-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 16px 8px;
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-cal-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 600;
  color: var(--cv2-text-1);
}
.cv2-cal-week-badge {
  font-size: 11px;
  color: var(--cv2-text-muted);
  background: var(--cv2-surface-2);
  border: 1px solid var(--cv2-border);
  border-radius: 4px;
  padding: 1px 6px;
  margin-left: 6px;
}
.cv2-cal-nav { display: flex; gap: 4px; align-items: center; }
.cv2-cal-nav-btn {
  width: 32px; height: 32px;
  border-radius: 50%;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.15s;
}
.cv2-cal-nav-btn:hover { background: var(--cv2-border); }
.cv2-cal-view-tabs { display: flex; gap: 2px; }
.cv2-cal-view-tab {
  padding: 3px 10px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  color: var(--cv2-text-3);
  border: 1px solid transparent;
}
.cv2-cal-view-tab.active  { background:#eef2ff; color:#4f46e5; border-color:#c7d2fe; }
.dark .cv2-cal-view-tab.active { background:#1e1b4b; color:#a5b4fc; border-color:#3730a3; }
.cv2-cal-view-wrap { overflow: hidden; position: relative; }

/* 오늘 이동 버튼 */
.cv2-cal-today-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 6px;
  font-size: 12px;
  font-weight: 500;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.15s, color 0.15s;
  -webkit-tap-highlight-color: transparent;
}
.cv2-cal-today-btn:hover { background: var(--cv2-border); color: var(--cv2-text-1); }

/* ── 카테고리 컬러 바 (| 모양) ──────────────────────────── */
.cv2-cat-bar {
  display: inline-block;
  width: 3px;
  align-self: stretch;
  min-height: 16px;
  border-radius: 2px;
  flex-shrink: 0;
}

/* ── 주간 뷰 (월~토, 6행) ────────────────────────────────── */
.cv2-week-view { padding: 0; }
.cv2-week-row {
  display: flex;
  padding: 10px 16px;
  border-bottom: 1px solid var(--cv2-border);
  transition: background 0.12s;
  -webkit-tap-highlight-color: transparent;
}
.cv2-week-row:nth-child(6) .cv2-week-day-num:not(.today) { color: var(--cv2-text-sat); }
.cv2-week-row:nth-child(6) .cv2-week-day-name { color: oklch(80.9% 0.105 251.813); }
.cv2-week-row:nth-child(7) .cv2-week-day-num:not(.today) { color: var(--cv2-text-sun); }
.cv2-week-row:nth-child(7) .cv2-week-day-name { color: oklch(80.8% 0.114 19.571); }
.cv2-week-row:last-child  { border-bottom: none; }
.cv2-week-row:hover,
.cv2-week-row.selected    { background: var(--cv2-surface-2); }
.cv2-week-date-col {
  width: 44px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding-top: 2px;
}
.cv2-week-day-num {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 20px;
  font-weight: 700;
  color: var(--cv2-text-1);
  line-height: 1;
}
.cv2-week-day-num.today {
  background: var(--cv2-primary);
  color: #fff;
  width: 32px; height: 32px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 16px;
}
.cv2-week-day-name { font-size: 10px; color: var(--cv2-text-muted); margin-top: 2px; }
.cv2-week-events-col { flex: 1; padding-left: 12px; min-height: 32px; }
.cv2-week-event-item {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 2px 0;
  font-size: 13px;
  color: var(--cv2-text-1);
}
.cv2-week-event-time {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 10px;
  color: var(--cv2-text-muted);
  min-width: 52px;
  flex-shrink: 0;
}
.cv2-week-event-name { font-size: 13px; line-height: 1.4; }
.cv2-week-empty { font-size: 12px; color: var(--cv2-text-muted); padding-top: 4px; }

/* ── 월간 뷰 (월~토, 6열) ────────────────────────────────── */
.cv2-month-view { padding: 0 7px 14px; }
.cv2-month-header-row {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 4px;
  padding: 8px 0 4px;
  margin-bottom: 7px;
}
.cv2-month-header-cell {
  text-align: center;
  font-size: 11px;
  font-weight: 600;
  color: var(--cv2-text-muted);
}
.cv2-month-header-cell:nth-child(6) { color: var(--cv2-text-sat) } /* 토요일 */
.cv2-month-header-cell:nth-child(7) { color: var(--cv2-text-sun); } /* 일요일 */
.dark .cv2-month-header-cell:nth-child(6) { color: #60a5fa; }
.dark .cv2-month-header-cell:nth-child(7) { color: #f87171; }
.cv2-month-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr)); /* minmax(0,1fr): 셀 너비 균등 보장 */
  gap: 4px;
}
.cv2-month-cell {
  min-height: 60px;
  min-width: 0;        /* 그리드 셀 너비 초과 방지 */
  overflow: hidden;    /* 칩 등 내부 콘텐츠가 셀 경계 밖으로 넘치지 않도록 */
  padding: 4px 5px;
  border-radius: 8px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background 0.12s;
  -webkit-tap-highlight-color: transparent;
  background: var(--cv2-surface-2);
}
.cv2-month-cell:hover     { background: #f0f0f5; }
.dark .cv2-month-cell:hover { background: rgba(255,255,255,0.07); }   /* 다크모드 hover 버그 수정 */
.cv2-month-cell.selected  { border-color: var(--cv2-primary); background: #eef2ff; }
.dark .cv2-month-cell.selected { background: #1e1b4b; }
.cv2-month-cell.other-month { opacity: 0.35; }
.cv2-month-cell-num {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 12px;
  font-weight: 600;
  color: var(--cv2-text-1);
  margin-bottom: 2px;
}
.cv2-month-cell-num.today {
  background: var(--cv2-primary);
  color: #fff;
  width: 20px; height: 20px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px;
}
.cv2-month-event-chip {
  display: block;
  font-size: 10px;
  line-height: 1.3;
  color: var(--cv2-text-3);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 1px 3px;
  border-radius: 3px;
  margin-bottom: 1px;
}
.cv2-month-event-chip.economy    { color:#1d4ed8; background:#dbeafe; }
.cv2-month-event-chip.stock      { color:#dc2626; background:#fee2e2; }
.cv2-month-event-chip.tax        { color:#ea580c; background:#ffedd5; }
.cv2-month-event-chip.realestate { color:#16a34a; background:#dcfce7; }
.dark .cv2-month-event-chip.economy    { color:#93c5fd; background:#1e3a5f; }
.dark .cv2-month-event-chip.stock      { color:#fca5a5; background:#450a0a; }
.dark .cv2-month-event-chip.tax        { color:#fdba74; background:#431407; }
.dark .cv2-month-event-chip.realestate { color:#86efac; background:#052e16; }
.cv2-month-more { font-size: 10px; color: var(--cv2-text-muted); }

/* 빈 이벤트 */
.cv2-event-empty {
  text-align: center;
  padding: 20px 0;
  font-size: 13px;
  color: var(--cv2-text-muted);
}

/* ── 공통 바텀시트 ───────────────────────────────────────── */
/* display는 JS(bottom-sheet.js)가 전적으로 관리 — CSS에 display 규칙 없음 */

/* overlay 있는 버전 (설정 모달) */
.cv2-bs-root.cv2-bs-overlay {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0,0,0,0);
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
  transition: background 0.25s;
}
.cv2-bs-root.cv2-bs-overlay.cv2-bs-open {
  background: rgba(0,0,0,0.45);
  pointer-events: auto;
}

/* overlay 없는 버전 (이벤트 상세, 배경 스크롤 가능) */
/* 하단 내비게이션과 관계없이 화면 가장 밑에서부터 */
.cv2-bs-root.cv2-bs-no-overlay {
  position: fixed;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 100%;
  max-width: 600px;
  z-index: 100;
  pointer-events: none;
}
.cv2-bs-root.cv2-bs-no-overlay.cv2-bs-open {
  pointer-events: auto;
}

/* 시트 공통 */
.cv2-bs-sheet {
  width: 100%;
  max-width: 600px;
  background: var(--cv2-surface-1);
  border-radius: 20px 20px 0 0;
  border-top: 1px solid var(--cv2-border);
  padding: 0 0 env(safe-area-inset-bottom, 16px);
  transform: translateY(100%);
  transition: transform 0.3s cubic-bezier(0.4,0,0.2,1);
  max-height: 70vh;
  overflow-y: auto;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.12);
}
.dark .cv2-bs-sheet { box-shadow: 0 -4px 20px rgba(0,0,0,0.4); }

.cv2-bs-root.cv2-bs-overlay .cv2-bs-sheet { max-height: 85vh; }
.cv2-bs-open .cv2-bs-sheet { transform: translateY(0); }

/* 핸들 바 */
.cv2-bs-handle-bar {
  width: 36px;
  height: 4px;
  background: var(--cv2-border);
  border-radius: 2px;
  margin: 12px auto 0;
}

/* 시트 헤더 */
.cv2-bs-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 7px 20px;
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-bs-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 17px;
  font-weight: 700;
  color: var(--cv2-text-1);
}
.cv2-bs-close {
  width: 32px; height: 32px;
  border-radius: 50%;
  border: none;
  color: var(--cv2-text-3);
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.15s;
}
.cv2-bs-close:hover { background: var(--cv2-border); }

/* 시트 본문 */
.cv2-bs-body { padding: 7px 20px 16px; }

/* ── 이벤트 상세 아이템 (바텀시트 내) ──────────────────── */
.cv2-event-detail-item {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--cv2-border);
  font-size: 13px;
}
.cv2-event-detail-item:last-child { border-bottom: none; }
.cv2-event-detail-left {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
  min-width: 70px;
}
.cv2-event-detail-time {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 11px;
  color: var(--cv2-text-muted);
}
.cv2-event-detail-icon {
  flex-shrink: 0;
  width: 28px; height: 28px;
  display: flex; align-items: center; justify-content: center;
}
.cv2-event-detail-body { flex: 1; min-width: 0; }
.cv2-event-detail-name {
  font-size: 14px;
  font-weight: 500;
  color: var(--cv2-text-1);
  line-height: 1.4;
}
.cv2-event-detail-value {
  font-size: 12px;
  color: var(--cv2-text-3);
  font-family: 'IBM Plex Sans KR', sans-serif;
  margin-top: 2px;
}

/* ── 설정 모달 내용 (cv2-bs-body 안) ─────────────────────── */
.cv2-setting-row {
  padding: 14px 0;
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-setting-row:last-child { border-bottom: none; }
.cv2-setting-label {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  margin-bottom: 10px;
}
.cv2-setting-toggle {
  display: flex;
  gap: 6px;
}
.cv2-toggle-btn {
  flex: 1;
  padding: 8px 10px;
  border-radius: 10px;
  font-size: 13px;
  font-weight: 500;
  border: 1.5px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
  cursor: pointer;
  text-align: center;
  transition: all 0.15s;
  display: flex; align-items: center; justify-content: center;
  gap: 4px;
  pointer-events: auto;  /* 클릭 버그 수정 */
}
.cv2-toggle-btn.active {
  background: #eef2ff;
  border-color: var(--cv2-primary);
  color: var(--cv2-primary);
  font-weight: 600;
}
.dark .cv2-toggle-btn.active { background:#1e1b4b; border-color:#818cf8; color:#a5b4fc; }

/* 인라인 확인 영역 */
.cv2-confirm-row {
  margin-top: 8px;
  padding: 12px 14px;
  background: var(--cv2-surface-2);
  border-radius: 10px;
  border: 1px solid var(--cv2-border);
}
.cv2-confirm-msg {
  font-size: 13px;
  color: var(--cv2-text-1);
  line-height: 1.5;
  margin-bottom: 10px;
}
.cv2-confirm-btns { display: flex; gap: 8px; }
.cv2-confirm-btn {
  flex: 1;
  padding: 8px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  border: 1.5px solid var(--cv2-border);
  background: var(--cv2-surface-1);
  color: var(--cv2-text-3);
  cursor: pointer;
  text-align: center;
  transition: all 0.15s;
}
.cv2-confirm-btn.primary {
  background: var(--cv2-primary);
  border-color: var(--cv2-primary);
  color: #fff;
  font-weight: 600;
}

/* ── 헤더 우측 탭 nav ────────────────────────────────────── */
.cv2-header-nav {
  flex-shrink: 0;
  display: flex;
  align-items: center;
}
.cv2-tab-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  text-decoration: none;
  color: var(--cv2-text-muted);
  font-size: 9px;
  font-weight: 500;
  transition: color 0.15s;
    padding: 4px 8px;
  min-width: 40px;
  -webkit-tap-highlight-color: transparent;
}
.cv2-tab-item.active { color: var(--cv2-primary); }
.cv2-tab-item svg    { width: 20px; height: 20px; }
@media (max-width: 600px) {
    .cv2-tab-item {
        min-width: 20px;
    }
}

/* ── 스켈레톤 로딩 ───────────────────────────────────────── */
.cv2-skeleton {
  background: linear-gradient(90deg, var(--cv2-surface-2) 25%, var(--cv2-border) 50%, var(--cv2-surface-2) 75%);
  background-size: 200% 100%;
  animation: cv2-shimmer 1.2s infinite;
  border-radius: 4px;
}
@keyframes cv2-shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ── 페이지 레이아웃 (헤더 아래 3단 영역) ─────────────── */
.cv2-page-layout {
  display: flex;
  justify-content: center;
  background: var(--cv2-bg);
}
.cv2-layout-wrapper {
  display: flex;
  justify-content: center;
  width: 100%;
  max-width: 920px;
  gap: 20px;
  align-items: flex-start;
}
/* 메인 래퍼: flex-col (콘텐츠 + 탭바) */
.cv2-main-wrapper {
  flex: 1;
  min-width: 350px;
  max-width: 600px;
  display: flex;
  flex-direction: column;
  background: var(--cv2-bg);
}
/* 메인 콘텐츠: 페이지 스크롤에 따라 자연스럽게 이동 */
.cv2-main-content {
  background: var(--cv2-bg);
}

/* ── 우측 사이드바 ──────────────────────────────────────── */
.cv2-sidebar-col {
  display: block;
  width: 200px;
  flex-shrink: 0;
  align-self: flex-start;
  position: sticky;
  top: 70px;
  max-height: calc(100vh - 70px);
  overflow-y: auto;
  background: var(--cv2-bg);
  scrollbar-width: none;
}
.cv2-sidebar-col::-webkit-scrollbar { display: none; }
@media (max-width: 600px) {
  .cv2-sidebar-col { display: none; }
}
.cv2-sidebar-inner {
  padding: 0 12px 16px;
}

/* 푸터 (모든 화면 크기에서 항상 표시) */
.cv2-sidebar-inline {
  display: block;
  padding: 16px;
}
/*@media (min-width: 700px) {*/
/*  !* 700px 이상: 우측 사이드바가 표시되므로 메인 컬럼 footer는 숨김 *!*/
/*  .cv2-footer { display: none; }*/
/*}*/

/* ── 광고 영역 ────────────────────────────────────────────── */
.cv2-ad-block {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 300px;
  border: 1px dashed var(--cv2-border);
  border-radius: 8px;
  color: var(--cv2-text-muted);
  font-size: 13px;
  font-weight: 500;
  margin-bottom: 12px;
  background: var(--cv2-surface-2);
}
/* ── 출석체크 카드 ─────────────────────────────────────── */
.cv2-checkin-card {
  position: relative;
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 14px;
  padding: 14px 14px 13px;
  margin-bottom: 12px;
  overflow: hidden;
}
.cv2-checkin-header {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 11px;
}
.cv2-checkin-flame-wrap {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  background: rgba(99,102,241,0.12);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--cv2-primary);
  flex-shrink: 0;
}
.dark .cv2-checkin-flame-wrap {
  background: rgba(99,102,241,0.18);
  color: var(--cv2-primary);
}
.cv2-checkin-meta {
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.cv2-checkin-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--cv2-text-1);
  letter-spacing: -0.01em;
}
.cv2-checkin-sub {
  font-size: 11px;
  color: var(--cv2-text-muted);
}
.cv2-checkin-streak {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 12px;
  padding: 0 1px;
}
.cv2-streak-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
}
.cv2-streak-dot {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--cv2-surface-2);
  border: 1.5px solid var(--cv2-border);
  display: block;
}
.cv2-streak-dot.is-done {
  background: var(--cv2-primary);
  border-color: transparent;
  box-shadow: 0 1px 4px rgba(99,102,241,0.35);
}
.cv2-streak-dot.is-today {
  background: var(--cv2-surface-1);
  border: 2px solid var(--cv2-primary);
  box-shadow: 0 0 0 3px rgba(99,102,241,0.15);
  animation: cv2-streak-pulse 2s ease-in-out infinite;
}
@keyframes cv2-streak-pulse {
  0%, 100% { box-shadow: 0 0 0 3px rgba(99,102,241,0.15); }
  50%       { box-shadow: 0 0 0 5px rgba(99,102,241,0.08); }
}
.cv2-streak-label {
  font-size: 9px;
  font-weight: 500;
  color: var(--cv2-text-muted);
  letter-spacing: 0.02em;
}
.cv2-checkin-btn {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 9px 0;
  border: none;
  border-radius: 9px;
  background: var(--cv2-primary);
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -0.01em;
  cursor: pointer;
  transition: transform 80ms ease, box-shadow 80ms ease, filter 80ms ease;
  box-shadow: 0 2px 8px rgba(99,102,241,0.35);
  -webkit-tap-highlight-color: transparent;
}
.cv2-checkin-btn:hover {
  filter: brightness(1.08);
  box-shadow: 0 4px 12px rgba(99,102,241,0.45);
}
.cv2-checkin-btn:active {
  transform: scale(0.95);
  box-shadow: 0 1px 4px rgba(99,102,241,0.25);
  filter: brightness(0.97);
}

.cv2-ad-sidebar {
  display: flex;
  justify-content: center;
}

/* ── 사이드바 링크 + 카피라이트 ─────────────────────────── */
.cv2-sidebar-links {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 6px;
  flex-wrap: wrap;
}
.cv2-sidebar-link {
  font-size: 11px;
  color: var(--cv2-text-3);
  text-decoration: none;
  transition: color 0.15s;
}
.cv2-sidebar-link:hover { color: var(--cv2-primary); }
.cv2-sidebar-link-sep {
  font-size: 11px;
  color: var(--cv2-border);
}
.cv2-sidebar-copy {
  font-size: 11px;
  color: var(--cv2-text-muted);
  margin-left: 8px;
}

/* ── 약관 텍스트 박스 ─────────────────────────────────────── */
.cv2-disclaimer-box {
  border: 1px solid var(--cv2-border);
  border-radius: 8px;
  padding: 10px 12px;
  background: var(--cv2-surface-2);
}
.cv2-disclaimer-text {
  font-size: 11px;
  line-height: 1.6;
  color: var(--cv2-text-muted);
}

/* ── 인덱스 화면 레이아웃 ───────────────────────────────── */
.cv2-index {
  padding-top: 12px;
  padding-bottom: 24px;
}

/* 섹션 카드 공통 */
.cv2-index-card {
  margin: 0 16px 32px;
}

/* 카드 헤더 */
.cv2-index-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 0 14px;
}
.cv2-index-card-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 20px;
  font-weight: 700;
  color: var(--cv2-text-1);
}

/* 카드 헤더 우측 버튼 (링크·버튼 공용) */
.cv2-index-nav-btn {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  border: none;
  background: none;
  color: var(--cv2-text-3);
  cursor: pointer;
  text-decoration: none;
  flex-shrink: 0;
  transition: background 150ms ease, color 150ms ease;
}
.cv2-index-nav-btn:hover {
  background: var(--cv2-surface-2);
  color: var(--cv2-text-1);
}
.cv2-index-nav-btn svg { width: 24px; height: 24px; }
.cv2-index-nav-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* 새로고침 버튼 로딩 중 spin */
.cv2-index-nav-btn.loading svg {
  animation: cv2-spin 0.8s linear infinite;
}
@keyframes cv2-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* 카드 바디 */
.cv2-index-card-body { padding: 0 0 16px; }
.cv2-index-card-body-flush { padding: 0; }

/* 카드 푸터 */
.cv2-index-card-footer {
  padding: 12px 0 0;
}

/* CTA 버튼 */
.cv2-index-cta-btn {
  display: block;
  width: 100%;
  padding: 12px 16px;
  background: var(--cv2-accent);
  color: #fff;
  border: none;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 600;
  text-align: center;
  cursor: pointer;
  transition: opacity 150ms ease;
  text-decoration: none;
}
.cv2-index-cta-btn:hover { opacity: 0.9; }
.cv2-index-cta-btn.cv2-index-cta-btn-outline {
  background: transparent;
  border: 1.5px solid var(--cv2-accent);
  color: var(--cv2-accent);
}

/* ── 데일리 브리핑 ─────────────────── */
/* body + footer: 그라디언트 배경 컨테이너 */
#cv2-daily-briefing .cv2-briefing-content-wrap {
  padding-top: 12px;
  border-radius: 14px;
  background: linear-gradient(145deg, #dbe3ff 0%, #bbc5f8 55%, #C4B5FD 100%);
  position: relative;
  overflow: hidden;
}
/* 장식용 원형 도형 */
#cv2-daily-briefing .cv2-briefing-content-wrap::before {
  content: '';
  position: absolute;
  top: -44px; right: -28px;
  width: 160px; height: 160px;
  border-radius: 50%;
  background: rgba(255,255,255,0.30);
  pointer-events: none;
  filter: blur(20px);
}
#cv2-daily-briefing .cv2-briefing-content-wrap::after {
  content: '';
  position: absolute;
  bottom: -32px; left: 10px;
  width: 110px; height: 110px;
  border-radius: 50%;
  background: rgba(255,255,255,0.20);
  pointer-events: none;
  filter: blur(20px);
}
#cv2-daily-briefing .cv2-briefing-content-wrap .cv2-index-card-body {
  padding: 16px 16px 0;
}
#cv2-daily-briefing .cv2-briefing-content-wrap .cv2-index-card-footer {
  padding: 10px 16px 16px;
}
/* 스켈레톤: 흰색 반투명 shimmer */
#cv2-daily-briefing .cv2-skeleton {
  background: linear-gradient(
    90deg,
    rgba(255,255,255,0.30) 25%,
    rgba(255,255,255,0.55) 50%,
    rgba(255,255,255,0.30) 75%
  );
  background-size: 200% 100%;
}
/* 알림 CTA 버튼 */
#cv2-daily-briefing .cv2-briefing-alert-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  background: rgba(255,255,255,0.40);
  border: 1.5px solid rgba(255,255,255,0.65);
  color: #312e81;
  font-weight: 700;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
#cv2-daily-briefing .cv2-briefing-alert-btn:hover {
  background: rgba(255,255,255,0.60);
  opacity: 1;
}
.cv2-briefing-alert-icon {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
/* ── 데일리 브리핑 다크모드 ──────────────────────────────── */
/* 헤더 영역: 타이틀 · 버튼 */
.dark #cv2-daily-briefing .cv2-index-card-title {
  color: #a5b4fc;
}
.dark #cv2-daily-briefing .cv2-index-nav-btn {
  color: #818cf8;
}
.dark #cv2-daily-briefing .cv2-index-nav-btn:hover {
  background: rgba(255,255,255,0.08);
  color: #a5b4fc;
}
/* body+footer wrapper: 다크 그라디언트 */
.dark #cv2-daily-briefing .cv2-briefing-content-wrap {
  background: linear-gradient(145deg, #1e1b4b 0%, #2d2b6e 55%, #3b1f6e 100%);
}
.dark #cv2-daily-briefing .cv2-briefing-content-wrap::before {
  background: rgba(165,180,252,0.10);
}
.dark #cv2-daily-briefing .cv2-briefing-content-wrap::after {
  background: rgba(165,180,252,0.07);
}
/* 타임라인 dot / line */
.dark #cv2-daily-briefing .cv2-tl-dot-past   { background: #818cf8; }
.dark #cv2-daily-briefing .cv2-tl-dot-current {
  background: #1e1b4b;
  border-color: #818cf8;
}
.dark #cv2-daily-briefing .cv2-tl-dot-upcoming {
  background: #1e1b4b;
  border-color: #4338ca;
}
.dark #cv2-daily-briefing .cv2-tl-line-solid   { background: #818cf8; }
.dark #cv2-daily-briefing .cv2-tl-line-dashed  {
  background: repeating-linear-gradient(
    to bottom,
    #4338ca 0px, #4338ca 4px,
    transparent 4px, transparent 8px
  );
}
/* 타임라인 뱃지 (periodLabel) */
.dark #cv2-daily-briefing .cv2-tl-period-badge {
  background: rgba(165,180,252,0.18);
  color: #c7d2fe;
}
/* 스켈레톤 */
.dark #cv2-daily-briefing .cv2-skeleton {
  background: linear-gradient(
    90deg,
    rgba(255,255,255,0.06) 25%,
    rgba(255,255,255,0.14) 50%,
    rgba(255,255,255,0.06) 75%
  );
  background-size: 200% 100%;
}
/* 알림 CTA 버튼 */
.dark #cv2-daily-briefing .cv2-briefing-alert-btn {
  background: rgba(165,180,252,0.15);
  border-color: rgba(165,180,252,0.35);
  color: #c7d2fe;
}
.dark #cv2-daily-briefing .cv2-briefing-alert-btn:hover {
  background: rgba(165,180,252,0.28);
  opacity: 1;
}

/* ── 포트폴리오 자산 추가하기 버튼 ──────────────────────── */
.cv2-asset-add-btn {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  background: var(--cv2-surface-1);
  text-decoration: none;
  cursor: pointer;
  transition: box-shadow 150ms ease, transform 150ms ease;
  -webkit-tap-highlight-color: transparent;
}
.cv2-asset-add-btn:hover {
  box-shadow: 0 4px 14px rgba(0,0,0,0.10);
  transform: translateY(-1px);
}
.cv2-asset-add-circle {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  color: var(--cv2-text-3);
}
.cv2-asset-add-circle svg { width: 20px; height: 20px; }
.cv2-asset-add-label {
  font-size: 15px;
  font-weight: 500;
  color: var(--cv2-text-2);
}

/* ── 타임라인 (Daily Briefing) ──────────────────────────── */
.cv2-timeline {
  list-style: none;
  padding: 0;
  margin: 0;
}
.cv2-tl-item {
  position: relative;
  padding-left: 36px;
  padding-bottom: 20px;
}
.cv2-tl-item:last-child { padding-bottom: 0; }

/* 예정 이벤트: 투명도 처리 */
.cv2-tl-item.cv2-tl-upcoming { opacity: 0.6; }

/* 수직 연결선 */
.cv2-tl-line {
  position: absolute;
  left: 11px;
  top: 26px;
  bottom: 0;
  width: 2px;
}
.cv2-tl-line-solid { background: var(--cv2-accent); }
.cv2-tl-line-dashed {
  background: repeating-linear-gradient(
    to bottom,
    var(--cv2-border) 0px,
    var(--cv2-border) 4px,
    transparent 4px,
    transparent 8px
  );
}

/* 원형 아이콘 */
.cv2-tl-dot {
  position: absolute;
  left: 0;
  top: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv2-tl-dot svg { width: 14px; height: 14px; }

/* 완료: 파란 filled 원 */
.cv2-tl-dot-past { background: var(--cv2-accent); }

/* 현재: 파란 테두리 원 */
.cv2-tl-dot-current {
  background: var(--cv2-surface-1);
  border: 2px solid var(--cv2-accent);
}
.dark .cv2-tl-dot-current { background: var(--cv2-surface-2); }

/* 예정: 회색 테두리 원 */
.cv2-tl-dot-upcoming {
  background: var(--cv2-surface-1);
  border: 2px solid var(--cv2-border);
}
.dark .cv2-tl-dot-upcoming { background: var(--cv2-surface-2); }

/* 타임라인 기간 뱃지 */
.cv2-tl-period-badge {
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 20px;
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
  flex-shrink: 0;
}

/* ── 포트폴리오 Top Event 카드 ───────────────────────────── */
.cv2-top-event-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 12px;
  padding: 14px 16px;
  margin-bottom: 12px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.06), 0 1px 3px rgba(0,0,0,0.04);
}

/* ── Quick Navigation 필 버튼 ─────────────────────────────── */
.cv2-qn-pill-row {
  display: flex;
  flex-direction: row;
  gap: 8px;
  padding: 12px 16px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.cv2-qn-pill-row::-webkit-scrollbar { display: none; }
.cv2-qn-pill {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 7px 16px 7px 10px;
  border-radius: 100px;
  border: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
  color: var(--cv2-text-1);
  text-decoration: none;
  white-space: nowrap;
  flex-shrink: 0;
  cursor: pointer;
  transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
  -webkit-tap-highlight-color: transparent;
}
.cv2-qn-pill:hover {
  background: var(--cv2-surface-1);
  border-color: var(--cv2-accent);
  color: var(--cv2-accent);
}
.cv2-qn-pill-icon {
  margin-left: 4px;
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  border-radius: 4px;
  object-fit: contain;
}
.cv2-qn-pill-label {
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
}

/* ── 실시간 업데이트 타입 태그 ──────────────────────────── */
.cv2-update-tag {
  display: inline-flex;
  align-items: center;
  padding: 2px 7px;
  border-radius: 20px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.3px;
  white-space: nowrap;
  flex-shrink: 0;
}
.cv2-update-tag.breaking { background: #fef2f2; color: #ef4444; }
.cv2-update-tag.update   { background: #eff6ff; color: #3b82f6; }
.cv2-update-tag.announce { background: #f0fdf4; color: #22c55e; }
.dark .cv2-update-tag.breaking { background: rgba(239,68,68,0.15);  color: #f87171; }
.dark .cv2-update-tag.update   { background: rgba(59,130,246,0.15); color: #93c5fd; }
.dark .cv2-update-tag.announce { background: rgba(34,197,94,0.15);  color: #86efac; }

/* ── 애니메이션 설정 ─────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
}


/* ============================================================
   calendar_v2 — 서브 헤더 + 이벤트 상세 페이지 스타일
   v1 — 2026-03-12
   ============================================================ */

/* ── 헤더 좌측 슬롯 (header-left-slot) ─────────────────── */
.cv2-header-left-slot {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* ── 서브페이지 공통 헤더 좌측 ─────────────────────────── */
.cv2-sub-header-left {
  display: flex;
  align-items: center;
  gap: 2px;
  min-width: 0;
}
.cv2-back-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  min-width: 36px;
  border-radius: 50%;
  background: transparent;
  border: none;
  color: var(--cv2-text-1);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: background 150ms ease, color 150ms ease;
}
.cv2-back-btn:hover  { background: var(--cv2-surface-2); }
.cv2-back-btn:active { background: var(--cv2-border); }
.cv2-sub-header-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 16px;
  font-weight: 600;
  color: var(--cv2-text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  line-height: 1.2;
}
@media (max-width: 600px) {
  .cv2-sub-header-title { font-size: 15px; }
}

/* ── 이벤트 상세 페이지 기본 레이아웃 ──────────────────── */
.cv2-event-page {
  display: flex;
  flex-direction: column;
  background: var(--cv2-bg);
  padding-bottom: 40px;
  overflow-x: hidden; /* 모바일 가로 오버플로 방지 */
  width: 100%;
}
.cv2-event-section {
  padding: 0 16px;
  margin-bottom: 12px;
}
@media (max-width: 600px) {
  .cv2-event-section { padding: 0 12px; }
}

/* ── ① 이벤트 히어로 ────────────────────────────────────── */
.cv2-event-hero {
  padding: 16px 16px 12px;
  background: linear-gradient(160deg, var(--cv2-surface-2) 0%, var(--cv2-bg) 100%);
  border-bottom: 1px solid var(--cv2-border);
  margin-bottom: 16px;
}
@media (max-width: 600px) {
  .cv2-event-hero { padding: 14px 12px 10px; }
}
.cv2-event-hero-inner { display: flex; flex-direction: column; gap: 6px; }
.cv2-event-meta-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
}
.cv2-event-cat-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 0;
  border-radius: 999px;
  color: var(--cv2-text-muted);
  font-size: 11px;
  font-weight: 400;
  letter-spacing: 0.02em;
}
.cv2-event-market-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  color: var(--cv2-text-2);
}
.cv2-event-status-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
}
.cv2-event-status-badge.released {
  background: #f0fdf4;
  color: #22c55e;
}
.cv2-event-status-badge.upcoming {
  background: #eff6ff;
  color: #3b82f6;
}
.dark .cv2-event-status-badge.released {
  background: rgba(34,197,94,0.15);
  color: #86efac;
}
.dark .cv2-event-status-badge.upcoming {
  background: rgba(59,130,246,0.15);
  color: #93c5fd;
}
.cv2-event-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 22px;
  font-weight: 700;
  color: var(--cv2-text-1);
  line-height: 1.25;
  margin: 0;
}
.cv2-event-title.cv2-event-title-h1 {
  font-size: 22px;
}
.cv2-event-title .cv2-status-badge {
  vertical-align: middle;
  margin-left: 6px;
  font-size: 11px;
}
@media (max-width: 600px) {
  .cv2-event-title { font-size: 19px; }
  .cv2-event-title.cv2-event-title-h1 { font-size: 20px; }
}
.cv2-event-datetime {
  font-size: 13px;
  color: var(--cv2-text-3);
  margin: 0;
}
.cv2-event-summary-text {
  display: inline-block;
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-2);
  line-height: 1.5;
  margin: 8px 0 0;
  padding: 6px 10px;
  background: rgba(107, 114, 128, 0.08);
  border-radius: 10px;
}
/* 히어로 스켈레톤 */
.cv2-event-hero-skeleton {
  padding: 4px 0;
}

/* ── ② 수치 비교 카드 ───────────────────────────────────── */
.cv2-value-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05), 0 1px 3px rgba(0,0,0,0.04);
}
/* 3칸 그리드 */
.cv2-vg-row {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 0;
}
.cv2-vg-item {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px 14px;
  border-right: 1px solid var(--cv2-border);
}
.cv2-vg-item:last-child { border-right: none; }
/* 발표 카드 강조 */
.cv2-vg-item.cv2-vg-actual {
  background: rgba(99,102,241,0.05);
  position: relative;
}
/* 라벨 */
.cv2-vg-label {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 11px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.cv2-vg-label-en {
  font-size: 9px;
  font-weight: 400;
  color: var(--cv2-text-muted);
  text-transform: none;
  letter-spacing: 0;
}
/* 값 */
.cv2-vg-val {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 22px;
  font-weight: 700;
  color: var(--cv2-text-1);
  letter-spacing: -0.02em;
  line-height: 1.1;
  display: flex;
  align-items: baseline;
  gap: 1px;
}
.cv2-vg-val.positive { color: #ef4444; }
.cv2-vg-val.negative { color: #3b82f6; }
.cv2-vg-val.muted    { color: var(--cv2-text-muted); font-size: 18px; }
.cv2-vg-unit {
  font-size: 13px;
  font-weight: 500;
  color: inherit;
  opacity: 0.75;
}
@media (max-width: 400px) {
  .cv2-vg-val { font-size: 18px; }
  .cv2-vg-unit { font-size: 11px; }
}
/* 서프라이즈 스트립 */
.cv2-surprise-wrap {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 11px 16px;
  border-top: 1px solid var(--cv2-border);
  background: var(--cv2-surface-2);
}
.cv2-surprise-wrap.positive { background: rgba(239,68,68,0.05); }
.cv2-surprise-wrap.negative { background: rgba(59,130,246,0.05); }
.cv2-surprise-icon-wrap {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 1.5px solid var(--cv2-border);
  background: var(--cv2-surface-1);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  margin-top: 1px;
  color: var(--cv2-text-muted);
}
.cv2-surprise-wrap.positive .cv2-surprise-icon-wrap { border-color: rgba(239,68,68,0.4); color: #ef4444; }
.cv2-surprise-wrap.negative .cv2-surprise-icon-wrap { border-color: rgba(59,130,246,0.4); color: #3b82f6; }
.cv2-surprise-content { flex: 1; min-width: 0; }
.cv2-surprise-top {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  margin-bottom: 3px;
}
.cv2-surprise-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.cv2-surprise-valstr {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: var(--cv2-text-1);
}
.cv2-surprise-wrap.positive .cv2-surprise-valstr { color: #ef4444; }
.cv2-surprise-wrap.negative .cv2-surprise-valstr { color: #3b82f6; }
.cv2-surprise-tag {
  font-size: 11px;
  font-weight: 700;
  padding: 1px 8px;
  border-radius: 999px;
  line-height: 1.8;
}
.cv2-surprise-tag.positive { background: rgba(239,68,68,0.12); color: #ef4444; }
.cv2-surprise-tag.negative { background: rgba(59,130,246,0.12); color: #3b82f6; }
.cv2-surprise-tag.neutral  { background: var(--cv2-surface-2); color: var(--cv2-text-3); border: 1px solid var(--cv2-border); }
.cv2-surprise-desc {
  font-size: 12px;
  color: var(--cv2-text-muted);
  margin: 0;
  line-height: 1.5;
}
/* 수치 없음 */
.cv2-value-no-data {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 80px;
}
.cv2-value-nodata-msg {
  font-size: 13px;
  color: var(--cv2-text-muted);
  margin: 0;
}

/* ── ③④ 차트 행 ─────────────────────────────────────────── */
.cv2-chart-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05), 0 1px 3px rgba(0,0,0,0.04);
}
.cv2-chart-card-inner {
  padding: 14px 16px 12px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.cv2-chart-card-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.cv2-chart-card-summary {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: var(--cv2-text-1);
  margin: 0 0 6px;
  line-height: 1.3;
}
.cv2-chart-card-summary.positive { color: var(--cv2-up); }
.cv2-chart-card-summary.negative { color: var(--cv2-down); }
.cv2-chart-empty {
  justify-content: center;
  align-items: flex-start;
  min-height: 120px;
}
.cv2-chart-no-data {
  font-size: 12px;
  color: var(--cv2-text-muted);
  margin: 8px 0 0;
}
.cv2-hbar-wrap  { padding: 4px 0 6px; }
.cv2-area-wrap  { padding: 2px 0; }
/* 수평 바 차트 내부 */
.cv2-hbar-chart-inner { display: flex; flex-direction: column; gap: 8px; }
.cv2-hbar-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.cv2-hbar-label {
  font-size: 12px;
  color: var(--cv2-text-3);
  width: 24px;
  flex-shrink: 0;
  text-align: right;
}
.cv2-hbar-track {
  flex: 1;
  height: 18px;
  background: var(--cv2-surface-2);
  border-radius: 6px;
  overflow: hidden;
}
.cv2-hbar-fill {
  height: 100%;
  border-radius: 6px;
  transition: width 0.5s cubic-bezier(0.34,1.56,0.64,1);
}
.cv2-hbar-value {
  font-size: 11px;
  color: var(--cv2-text-3);
  white-space: nowrap;
  flex-shrink: 0;
  min-width: 44px;
  text-align: right;
}
.cv2-hbar-value.current {
  font-weight: 700;
  color: var(--cv2-text-1);
}

/* ── ⑤ 영향 방향성 ─────────────────────────────────────── */
.cv2-impact-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  padding: 14px 16px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05), 0 1px 3px rgba(0,0,0,0.04);
}
.cv2-impact-header {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 12px;
}
.cv2-impact-header svg { color: var(--cv2-text-3); flex-shrink: 0; }
.cv2-impact-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px;
}
@media (max-width: 380px) {
  .cv2-impact-grid { grid-template-columns: 1fr; }
}
.cv2-impact-item {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 10px 12px;
  background: var(--cv2-surface-2);
  border-radius: 10px;
}
.cv2-impact-asset {
  font-size: 12px;
  color: var(--cv2-text-3);
}
.cv2-impact-direction {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 700;
}
.cv2-impact-direction.positive { color: var(--cv2-up); }
.cv2-impact-direction.negative { color: var(--cv2-down); }
.cv2-impact-direction.flat,
.cv2-impact-direction.neutral  { color: var(--cv2-flat); }

/* ── ⑥ AI 분석 요약 ─────────────────────────────────────── */
.cv2-ai-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05), 0 1px 3px rgba(0,0,0,0.04);
}
.cv2-ai-header {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 12px 16px 10px;
  background: linear-gradient(90deg, rgba(99,102,241,0.08) 0%, transparent 100%);
  border-bottom: 1px solid var(--cv2-border);
  font-size: 12px;
  font-weight: 600;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.cv2-ai-header svg { color: var(--cv2-accent); flex-shrink: 0; }
.cv2-ai-badge {
  margin-left: auto;
  padding: 1px 6px;
  border-radius: 4px;
  background: var(--cv2-accent);
  color: white;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.05em;
}
.cv2-ai-text {
  font-size: 13px;
  line-height: 1.7;
  color: var(--cv2-text-2);
  padding: 14px 16px;
  margin: 0;
}
/* AI 포맷 콘텐츠 본문 영역 */
.cv2-ai-body {
  padding: 16px 18px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.cv2-ai-section {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cv2-ai-section-key {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: var(--cv2-text-1);
  line-height: 1.4;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-ai-section-body {
  font-size: 13px;
  line-height: 1.75;
  color: var(--cv2-text-2);
}
.cv2-ai-list {
  margin: 2px 0 0;
  padding-left: 20px;
  list-style: disc;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.cv2-ai-list li { line-height: 1.7; }
.cv2-ai-list--sub {
  margin-top: 4px;
  list-style: circle;
}
.cv2-ai-item-title { font-weight: 600; }
.cv2-ai-table-item { list-style: none; margin-left: -20px; }
.cv2-ai-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  margin: 4px 0 2px;
}
.cv2-ai-table th,
.cv2-ai-table td {
  border: 1px solid var(--cv2-border);
  padding: 6px 10px;
  text-align: left;
}
.cv2-ai-table th {
  background: var(--cv2-surface-2);
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-weight: 700;
  font-size: 11px;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.cv2-ai-text-plain {
  font-size: 13px;
  line-height: 1.75;
  color: var(--cv2-text-2);
  white-space: pre-wrap;
}

/* ── ⑦⑧⑨ 일정 링크리스트 ──────────────────────────────── */
.cv2-schedule-section { margin-bottom: 8px; }
.cv2-schedule-list-wrap {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.05), 0 1px 3px rgba(0,0,0,0.04);
}
.cv2-schedule-list-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 16px 10px;
}
.cv2-schedule-list-title {
  font-size: 12px;
  font-weight: 700;
  color: var(--cv2-text-3);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.cv2-schedule-list-count {
  font-size: 11px;
  font-weight: 600;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--cv2-surface-2);
  color: var(--cv2-text-3);
}
.cv2-schedule-link-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.cv2-schedule-link-list li:not(:last-child) {
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-schedule-link-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 12px 16px;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: background 150ms ease;
  -webkit-tap-highlight-color: transparent;
}
.cv2-schedule-link-row:hover { background: var(--cv2-surface-2); }
.cv2-schedule-link-row:active { background: var(--cv2-border); }
.cv2-sl-left {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.cv2-sl-date {
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-1);
}
.cv2-sl-name {
  font-size: 13px;
  font-weight: 500;
  color: var(--cv2-text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: flex;
  align-items: center;
  gap: 6px;
}
.cv2-sl-relation {
  font-size: 10px;
  font-weight: 600;
  padding: 1px 6px;
  border-radius: 4px;
  background: rgba(99,102,241,0.1);
  color: var(--cv2-accent);
  flex-shrink: 0;
}
.cv2-sl-right {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.cv2-sl-value {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-2);
}
.cv2-sl-chevron {
  color: var(--cv2-text-muted);
  flex-shrink: 0;
}

/* ── 상세 내용 섹션 ──────────────────────────────────────── */
.cv2-event-content-card {
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.cv2-content-body {
  padding: 16px 18px;
  font-size: 13px;
  line-height: 1.9;
  color: var(--cv2-text-2);
  word-break: break-word;
}
.cv2-content-body br { display: block; content: ''; margin-bottom: 2px; }
/* bullet 스타일: "·" 으로 시작하는 줄 */
.cv2-content-body p { margin: 0; }

/* ── 일정 리스트 레이아웃 변경 ───────────────────────────── */
/* sl-name--sub: title을 연한 색 설명으로 */
.cv2-sl-name--sub {
  font-size: 11px !important;
  font-weight: 400 !important;
  color: var(--cv2-text-muted) !important;
}
/* sl-summary: 우측 summary 텍스트 */
.cv2-sl-summary {
  font-size: 12px;
  color: var(--cv2-text-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100px;
}

/* ── 에러/빈 상태 ────────────────────────────────────────── */
.cv2-event-notfound {
  font-size: 15px;
  color: var(--cv2-text-3);
  margin: 0 0 12px;
}
.cv2-event-back-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  font-weight: 600;
  color: var(--cv2-accent);
  text-decoration: none;
}
.cv2-event-back-link:hover { text-decoration: underline; }

/* ── 다크모드 오버라이드 ─────────────────────────────────── */
.dark .cv2-event-hero {
  background: linear-gradient(160deg, var(--cv2-surface-2) 0%, var(--cv2-bg) 100%);
}
.dark .cv2-value-surprise.positive { background: rgba(239,68,68,0.12); }
.dark .cv2-value-surprise.negative { background: rgba(59,130,246,0.12); }
.dark .cv2-ai-header {
  background: linear-gradient(90deg, rgba(99,102,241,0.15) 0%, transparent 100%);
}
.dark .cv2-schedule-link-row:hover  { background: rgba(255,255,255,0.04); }
.dark .cv2-schedule-link-row:active { background: rgba(255,255,255,0.08); }

/* ── 소셜 통계 바 ────────────────────────────────────────── */
.cv2-event-stats-row {
  display: flex;
  align-items: center;
  gap: 2px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.cv2-event-stat-item {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 12px;
  color: var(--cv2-text-3);
  line-height: 1;
}
.cv2-event-stat-item.is-active {
  color: var(--cv2-accent);
}

/* ── 모아보기(history) 아이템 ───────────────────────────── */
.cv2-history-link-row {
  padding: 12px 16px;
}
.cv2-sl-history-left {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.cv2-sl-history-title {
  font-size: 14px;
  font-weight: 500;
  color: var(--cv2-text-1);
  transition: color 150ms ease;
}
.cv2-history-link-row:hover .cv2-sl-history-title {
  color: var(--cv2-accent);
}
.cv2-sl-history-name {
  font-size: 12px;
  font-weight: 400;
  color: var(--cv2-text-3);
}

/* ── 더보기 버튼 ─────────────────────────────────────────── */
.cv2-schedule-more-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  width: 100%;
  padding: 12px 0;
  font-size: 13px;
  font-weight: 500;
  color: var(--cv2-text-3);
  background: var(--cv2-surface-2);
  border: 1px solid var(--cv2-border);
  border-top: none;
  border-radius: 0 0 12px 12px;
  text-decoration: none;
  transition: background 150ms ease, color 150ms ease;
  -webkit-tap-highlight-color: transparent;
}
.cv2-schedule-more-btn:hover {
  background: var(--cv2-border);
  color: var(--cv2-text-1);
}
.dark .cv2-schedule-more-btn {
  background: rgba(255,255,255,0.03);
}
.dark .cv2-schedule-more-btn:hover {
  background: rgba(255,255,255,0.07);
  color: var(--cv2-text-1);
}

/* ============================================================
   WEB-001 — 메인화면 신규 컴포넌트 스타일 (2026-03-19 개정)
   ============================================================ */

/* ── 카테고리 색상 변수 ── */
:root {
  --cv2-cat-usmarket: #dc2626;
}

/* ── sticky 레이아웃 공통 클래스 ── */
.cv2-top-header {
  position: sticky;
  top: 0;
  z-index: 100;
  height: 55px;
  background: var(--cv2-bg);
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-main-header {
  position: sticky;
  top: 55px;
  z-index: 90;
  height: 44px;
  background: var(--cv2-bg);
  padding: 0 8px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.cv2-main-header-left {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cv2-main-header-right {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cv2-week-strip-wrapper {
  position: sticky;
  top: 99px;
  z-index: 80;
  background: var(--cv2-bg);
  width: 100%;
  height: 72px;
  overflow: hidden;
}
/* ── 상단 헤더 요소 ── */
.cv2-top-header-logo {
  width: 32px;
  height: 32px;
  border-radius: 8px;
}
.cv2-top-header-date {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 600;
  color: var(--cv2-text-2);
}

/* ── 메인 헤더 버튼들 ── */
.cv2-btn-today {
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-2);
  background: var(--cv2-subtle-bg);
  border: none;
  border-radius: 999px;
  padding: 4px 10px;
  cursor: pointer;
}
.cv2-btn-filter {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--cv2-text-2);
  display: flex;
  align-items: center;
}
.cv2-btn-filter.active { color: var(--cv2-accent); }
.cv2-btn-bell {
  position: relative;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--cv2-text-2);
  display: flex;
  align-items: center;
}
.cv2-bell-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #ef4444;
  position: absolute;
  top: 0;
  right: 0;
  display: none;
}
.cv2-bell-dot.visible { display: block; }

/* ── 필터바 (메인헤더~주달력 사이) ── */
.cv2-filter-bar {
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  border-bottom: 1px solid var(--cv2-border);
  background: var(--cv2-bg);
  position: sticky;
  top: 99px;
  z-index: 85;
}
.cv2-filter-bar.open {
  max-height: 60px;
  opacity: 1;
}
.cv2-filter-bar-inner {
  display: flex;
  align-items: center;
  gap: 8px;
  overflow-x: auto;
  padding: 4px 8px 8px;
  -ms-overflow-style: none;
  scrollbar-width: none;
}
.cv2-filter-bar-inner::-webkit-scrollbar { display: none; }
.cv2-filter-chip {
  padding: 4px 12px;
  border-radius: 999px;
  font-size: 13px;
  background: var(--cv2-surface-2);
  border: 1px solid var(--cv2-border);
  color: var(--cv2-text-2);
  white-space: nowrap;
  cursor: pointer;
  transition: all 0.15s;
  flex-shrink: 0;
}
.cv2-filter-chip.active {
  border: none;
  color: #ffffff;
}

/* ── 주 달력 스트립 ── */
.cv2-week-strip-container {
  display: flex;
  align-items: center;
  width: 100%;
  height: 100%;
}
.cv2-week-strip {
  display: flex;
  transition: transform 0.25s ease;
  flex: 1;
  overflow: hidden;
}
.cv2-week-strip-col {
  flex: 1;
  text-align: center;
  cursor: pointer;
}
.cv2-week-strip-nav {
  flex-shrink: 0;
  width: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--cv2-text-3);
  background: none;
  border: none;
  cursor: pointer;
  padding: 0;
  height: 100%;
}
.cv2-week-strip-day-label {
  margin-bottom: 3px;
  font-size: 11px;
  color: var(--cv2-text-3);
  cursor: pointer;
  display: block;
}
.cv2-week-strip-date {
  font-size: 15px;
  font-weight: 500;
  color: var(--cv2-text-1);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  margin: 0 auto;
  border-radius: 50%;
}
/* 선택됨 (최우선): 보라색 원 */
.cv2-week-strip-date.selected {
  background: var(--cv2-accent);
  color: #ffffff;
  font-weight: 700;
}
/* 오늘 (선택 안 됨): 오늘 버튼과 동일한 회색 원 */
.cv2-week-strip-date.today:not(.selected) {
  background: var(--cv2-subtle-bg);
}
.cv2-week-strip-date.has-events { font-weight: 600; color: var(--cv2-text-1); }
.cv2-week-strip-date.no-events  { color: var(--cv2-text-muted); font-weight: 400; }
.cv2-week-strip-dot {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--cv2-accent);
  margin: 2px auto 0;
}
.cv2-week-strip-col.is-sun .cv2-week-strip-day-label { color: var(--cv2-text-sun); }
.cv2-week-strip-col.is-sat .cv2-week-strip-day-label { color: var(--cv2-text-sat); }

/* ── 메인 스크롤 영역 컨테이너 ── */
.cv2-event-list { padding-bottom: 40px; }

/* 주차 구분선 sticky */
/* 날짜 구분선 — sticky, 좌측 일자 + 중앙 hairline + 우측 주차 */
.cv2-date-divider {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 16px;
  margin-top: 24px;
  background: var(--cv2-bg);
  position: sticky;
  z-index: 64;
  /* top은 JS에서 동적 설정 */
}
.cv2-date-divider-left {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}
.cv2-date-divider-month-prefix {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 12px;
  font-weight: 500;
  color: var(--cv2-text-1);
  letter-spacing: -0.01em;
  line-height: 1;
  margin-right: 2px;
}
.cv2-date-divider-day-num {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 14px;
  font-weight: 700;
  color: var(--cv2-text-1);
  letter-spacing: -0.02em;
  line-height: 1;
}
.cv2-date-divider-day-label {
  font-size: 11px;
  font-weight: 400;
  color: var(--cv2-text-3);
  letter-spacing: 0;
  line-height: 1;
}
.cv2-date-divider-line {
  flex: 1;
  height: 1px;
  background: var(--cv2-border);
  opacity: 0.35;
}
.cv2-date-divider-week {
  flex-shrink: 0;
  font-size: 10px;
  font-weight: 500;
  color: var(--cv2-text-muted);
  letter-spacing: 0.04em;
  border: 1px solid var(--cv2-border);
  border-radius: 999px;
  padding: 2px 7px;
  line-height: 1.5;
}
.cv2-date-divider.is-sat .cv2-date-divider-day-num,
.cv2-date-divider.is-sat .cv2-date-divider-day-label { color: var(--cv2-text-sat); }
.cv2-date-divider.is-sun .cv2-date-divider-day-num,
.cv2-date-divider.is-sun .cv2-date-divider-day-label { color: var(--cv2-text-sun); }
.cv2-date-divider-today-badge {
  padding: 2px 7px;
  font-size: 12px;
  font-weight: 600;
  color: var(--cv2-primary);
  letter-spacing: 0.02em;
  line-height: 1.5;
  margin-left: 2px;
  align-self: center;
}
.dark .cv2-date-divider-week {
  border-color: var(--cv2-surface-3);
}

/* ── 이벤트 카드 (새 레이아웃) ── */
.cv2-event-card {
  padding: 12px 14px 8px;
  background: var(--cv2-surface-1);
  border: none;
  border-radius: 0;
  border-bottom: 1px solid color-mix(in srgb, var(--cv2-border) 55%, transparent);
  cursor: pointer;
}
.cv2-event-card:active { background: var(--cv2-surface-2); }
.cv2-event-card:has(.cv2-event-stat:active):active { background: var(--cv2-surface-1); }
.cv2-event-card-inner {
  display: flex;
  gap: 10px;
}

/* 좌측 원형이미지 */
.cv2-event-logo {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cv2-event-logo img:not(.cv2-event-logo-flag-overlay) {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
}
.cv2-event-logo.flag-only {
  background: var(--cv2-subtle-bg);
}
.cv2-event-logo-flag {
  width: 25px !important;
  height: 17px !important;
  border-radius: 0 !important;
}
.cv2-event-logo-flag-overlay {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 16px;
  height: 11px;
  border: 1px solid var(--cv2-surface-1);
  border-radius: 2px;
  object-fit: cover;
}

/* 우측 콘텐츠 */
.cv2-event-content {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.cv2-event-row1 {
  display: flex;
  align-items: flex-start;
  gap: 6px;
}
.cv2-event-title-wrap {
  flex: 1;
  min-width: 0;
}
.cv2-event-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--cv2-text-1);
  white-space: normal;
  word-break: keep-all;
}
.cv2-event-category-dot {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  flex-shrink: 0;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cv2-event-category-dot::after {
  content: '';
  position: relative;
  left: 1px;
  width: 6px;
  height: 4px;
  border-left: 2px solid rgba(255,255,255,0.9);
  border-bottom: 2px solid rgba(255,255,255,0.9);
  transform: rotate(-45deg) translateY(-1px);
  flex-shrink: 0;
}
.cv2-event-separator {
  color: var(--cv2-text-3);
  font-size: 12px;
  flex-shrink: 0;
}
.cv2-event-time {
  display: inline;
  font-size: 12px;
  color: var(--cv2-text-muted);
  margin-right: 5px;
}
/* ── status 뱃지 ── */
.cv2-status-badge {
  display: inline-block;
  font-size: 10px;
  font-weight: 600;
  padding: 2px 6px;
  border-radius: 10px;
  letter-spacing: 0.3px;
  vertical-align: middle;
  margin-left: 5px;
  white-space: nowrap;
}
.cv2-status-badge--pre {
  background: #EEEEEE;
  color: #757575;
}
.cv2-status-badge--post {
  background: #E8F5E9;
  color: #388E3C;
}
/* ── 카테고리 그룹 헤더 ── */
.cv2-cat-group-header {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 12px 16px 4px;
  font-size: 11px;
  font-weight: 700;
  color: #9E9E9E;
  letter-spacing: 0.5px;
  text-transform: uppercase;
}
.cv2-cat-group-header-bar {
  width: 3px;
  height: 12px;
  border-radius: 2px;
  flex-shrink: 0;
}
.cv2-event-row3 {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  gap: 8px;
  width: 100%;
  margin-top: 4px;
}
.cv2-event-stat {
  display: flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  color: var(--cv2-text-muted);
  padding: 4px 6px;
  border-radius: 4px;
  background: none;
  border: none;
  cursor: pointer;
  transition: background 0.15s;
}
.cv2-event-stat.no-action { cursor: default; }
.cv2-event-stat.stat-comment:hover { background: rgba(34, 197, 94, 0.12); }
.cv2-event-stat.stat-like:hover    { background: rgba(236, 72, 153, 0.12); }
.cv2-event-stat.stat-bookmark:hover { background: rgba(59, 130, 246, 0.12); }
.cv2-event-stat.stat-comment svg { color: var(--cv2-text-muted); }
.cv2-event-stat.stat-comment.active svg { color: #22c55e; }
.cv2-event-stat.stat-like.active svg    { fill: #ec4899; color: #ec4899; }
.cv2-event-stat.stat-bookmark.active svg { fill: #3b82f6; color: #3b82f6; }

/* 동일 일자 카드 간 구분선 (last 카드에는 없음) */
.cv2-event-divider {
  height: 1px;
  background: var(--cv2-border);
  margin: 0 16px;
}

/* 스켈레톤 이벤트 카드 */
.cv2-event-card--skeleton {
  pointer-events: none;
  cursor: default;
  padding: 12px 0;
}
.cv2-sk-bar {
  border-radius: 4px;
  flex-shrink: 0;
}
.cv2-sk-stat {
  width: 34px;
  height: 20px;
  border-radius: 4px;
  flex-shrink: 0;
}
.cv2-sk-time {
  width: 36px;
  height: 12px;
  border-radius: 4px;
  margin-left: auto;
}

/* 로더 / 더이상없음 */
.cv2-loader {
  text-align: center;
  padding: 24px;
  color: var(--cv2-text-muted);
  font-size: 13px;
}
.cv2-no-more {
  text-align: center;
  padding: 24px;
  font-size: 13px;
  color: var(--cv2-text-muted);
}
.cv2-empty-state {
  text-align: center;
  padding: 48px 24px;
  font-size: 14px;
  color: var(--cv2-text-muted);
}

/* ── Float 버튼 + 필터 패널 제거 (display:none 처리) ── */
.cv2-filter-fab   { display: none !important; }
.cv2-filter-panel { display: none !important; }

/* ── 우측 사이드바 검색 ── */
.cv2-sidebar-search { margin-bottom: 16px; }
.cv2-sidebar-search-input-wrap {
  position: relative;
  width: 100%;
}
.cv2-sidebar-search-input {
  width: 100%;
  padding: 8px 36px 8px 12px;
  border: 1px solid var(--cv2-border);
  border-radius: 8px;
  font-size: 13px;
  background: var(--cv2-surface-1);
  color: var(--cv2-text-1);
  outline: none;
}
.cv2-sidebar-search-input:focus { border-color: var(--cv2-accent); }
.cv2-sidebar-search-btn {
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  cursor: pointer;
  color: var(--cv2-text-3);
  display: flex;
  align-items: center;
}
.cv2-sidebar-search-dropdown {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  width: 100%;
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  z-index: 300;
  display: none;
}
.cv2-sidebar-search-dropdown.open { display: block; }
.cv2-sidebar-search-item {
  padding: 8px 12px;
  font-size: 13px;
  color: var(--cv2-text-1);
  cursor: pointer;
}
.cv2-sidebar-search-item:hover { background: var(--cv2-surface-2); }
.cv2-sidebar-search-item:first-child { border-radius: 8px 8px 0 0; }
.cv2-sidebar-search-item:last-child  { border-radius: 0 0 8px 8px; }
.cv2-sidebar-search-item:only-child  { border-radius: 8px; }

/* ── 다크모드 오버라이드 ── */
.dark .cv2-sidebar-search-dropdown {
  box-shadow: 0 4px 12px rgba(0,0,0,0.4);
}

/* ── 로그인 필요 모달 ────────────────────────────────────── */
.cv2-login-modal-backdrop {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity 0.22s ease;
  pointer-events: none;
}
.cv2-login-modal-backdrop.open {
  opacity: 1;
  pointer-events: auto;
}
.cv2-login-modal {
  background: var(--cv2-surface-1);
  border-radius: 22px;
  padding: 32px 28px 24px;
  width: min(360px, calc(100vw - 40px));
  box-shadow:
    0 32px 72px rgba(0, 0, 0, 0.18),
    0 6px 20px rgba(0, 0, 0, 0.08),
    0 0 0 1px var(--cv2-border);
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  transform: scale(0.90) translateY(10px);
  transition:
    transform 0.28s cubic-bezier(0.34, 1.45, 0.64, 1),
    opacity   0.22s ease;
  opacity: 0;
}
.cv2-login-modal-backdrop.open .cv2-login-modal {
  transform: scale(1) translateY(0);
  opacity: 1;
}
.cv2-login-modal-icon {
  width: 58px;
  height: 58px;
  background: linear-gradient(145deg, rgba(99,102,241,0.14), rgba(99,102,241,0.06));
  border-radius: 17px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 18px;
  color: var(--cv2-primary);
  border: 1px solid rgba(99,102,241,0.22);
  box-shadow: 0 2px 10px rgba(99,102,241,0.12);
}
.cv2-login-modal-title {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-size: 17px;
  font-weight: 700;
  color: var(--cv2-text-1);
  margin-bottom: 16px;
  line-height: 1.35;
  letter-spacing: -0.3px;
}
.cv2-login-modal-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  width: 100%;
}
.cv2-login-modal-btn-primary {
  width: 100%;
  padding: 13px 20px;
  background: var(--cv2-primary);
  color: #fff;
  border: none;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  letter-spacing: -0.2px;
  transition: background 0.15s, transform 0.1s, box-shadow 0.15s;
  box-shadow: 0 4px 14px rgba(99,102,241,0.32);
}
.cv2-login-modal-btn-primary:hover {
  background: #4f46e5;
  box-shadow: 0 6px 18px rgba(99,102,241,0.42);
}
.cv2-login-modal-btn-primary:active { transform: scale(0.98); }
.cv2-login-modal-btn-dismiss {
  width: 100%;
  padding: 11px 20px;
  background: transparent;
  color: var(--cv2-text-3);
  border: 1px solid var(--cv2-border);
  border-radius: 12px;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.cv2-login-modal-btn-dismiss:hover {
  background: var(--cv2-surface-2);
  color: var(--cv2-text-2);
  border-color: var(--cv2-text-muted);
}

/* ── 앱 설치 광고 모달 ──────────────────────────────────── */
.cv2-app-modal-backdrop {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity 0.22s ease;
  pointer-events: none;
}
.cv2-app-modal-backdrop.open {
  opacity: 1;
  pointer-events: auto;
}
.cv2-app-modal {
  background: var(--cv2-surface-1);
  border-radius: 22px;
  padding: 28px 24px 20px;
  width: min(400px, calc(100vw - 40px));
  box-shadow:
    0 32px 72px rgba(0, 0, 0, 0.18),
    0 6px 20px rgba(0, 0, 0, 0.08),
    0 0 0 1px var(--cv2-border);
  display: flex;
  flex-direction: column;
  gap: 16px;
  position: relative;
  transform: scale(0.90) translateY(10px);
  transition:
    transform 0.28s cubic-bezier(0.34, 1.45, 0.64, 1),
    opacity   0.22s ease;
  opacity: 0;
}
.cv2-app-modal-backdrop.open .cv2-app-modal {
  transform: scale(1) translateY(0);
  opacity: 1;
}
.cv2-app-modal-close {
  position: absolute;
  top: 14px;
  right: 16px;
  background: none;
  border: none;
  font-size: 22px;
  line-height: 1;
  color: var(--cv2-text-3);
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 8px;
  transition: background 0.15s, color 0.15s;
}
.cv2-app-modal-close:hover {
  background: var(--cv2-surface-2);
  color: var(--cv2-text-1);
}
.cv2-app-modal-header {
  display: flex;
  align-items: center;
  gap: 12px;
}
.cv2-app-modal-app-icon {
  width: 60px;
  height: 60px;
  border-radius: 14px;
  flex-shrink: 0;
  object-fit: cover;
}
.cv2-app-modal-title {
  font-size: 17px;
  font-weight: 700;
  color: var(--cv2-text-1);
  letter-spacing: -0.3px;
  margin-bottom: 4px;
}
.cv2-app-modal-subtitle {
  font-size: 13px;
  color: var(--cv2-text-3);
  line-height: 1.4;
}
.cv2-app-modal-qr {
  text-align: center;
  padding: 8px 0;
}
.cv2-app-modal-qr img {
  width: 160px;
  height: 160px;
  display: block;
  margin: 0 auto 8px;
  border: 5px solid var(--cv2-primary);
  border-radius: 8px;
}
.cv2-app-modal-qr p {
  font-size: 12px;
  color: var(--cv2-text-3);
  margin: 0;
}
@media (max-width: 600px) {
  .cv2-app-modal-qr { display: none; }
}
.cv2-app-modal-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.cv2-app-modal-btn-android,
.cv2-app-modal-btn-ios {
  width: 100%;
  padding: 13px 20px;
  border: none;
  border-radius: 12px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  letter-spacing: -0.2px;
  transition: opacity 0.15s, transform 0.1s;
}
.cv2-app-modal-btn-android {
  background: #2ecc71;
  color: #fff;
}
.cv2-app-modal-btn-android:hover { opacity: 0.88; }
.cv2-app-modal-btn-android:active { transform: scale(0.98); }
.cv2-app-modal-btn-ios {
  background: #1c1c1e;
  color: #fff;
}
.cv2-app-modal-btn-ios:hover { opacity: 0.82; }
.cv2-app-modal-btn-ios:active { transform: scale(0.98); }
.cv2-app-modal-btn-dismiss {
  width: 100%;
  padding: 11px 20px;
  background: transparent;
  color: var(--cv2-text-3);
  border: 1px solid var(--cv2-border);
  border-radius: 12px;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.cv2-app-modal-btn-dismiss:hover {
  background: var(--cv2-surface-2);
  color: var(--cv2-text-2);
  border-color: var(--cv2-text-muted);
}
.cv2-app-modal-skip {
  display: block;
  width: 100%;
  padding: 8px;
  background: transparent;
  border: none;
  font-size: 13px;
  color: #b0b0b0;
  text-align: center;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
}
.cv2-app-modal-skip:hover {
  color: #888;
}

/* ── 이전달/다음달 유도 버튼 ────────────────────────────── */
.cv2-month-promo-btn {
  display: block;
  width: calc(100% - 32px);
  margin: 16px auto;
  padding: 14px 20px;
  background: var(--cv2-surface-2);
  border: 1px dashed var(--cv2-border);
  border-radius: 12px;
  color: var(--cv2-text-3);
  font-size: 14px;
  font-weight: 500;
  text-align: center;
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
  font-family: 'Noto Sans KR', sans-serif;
}
.cv2-month-promo-btn:hover {
  background: var(--cv2-surface-3);
  color: var(--cv2-text-2);
}

/* ── 주달력 화살표 disabled ─────────────────────────────── */
.cv2-week-strip-nav.disabled,
.cv2-week-strip-nav:disabled {
  color: var(--cv2-text-muted);
  cursor: not-allowed;
  opacity: 0.4;
}

/* ── 업데이트 시간 (통계 바 우측) ─────────────────────── */
.cv2-event-updated-at {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  margin-left: auto;
  font-size: 12px;
  color: var(--cv2-text-muted);
  letter-spacing: 0;
  white-space: nowrap;
}
.cv2-event-updated-at svg {
  margin-top: 3px;
  margin-right: 3px;
}

/* ── 액션 버튼 바 (댓글 영역 상단) ───────────────────── */
.cv2-action-bar {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 8px 8px;
  border-bottom: 1px solid var(--cv2-border);
  background: var(--cv2-surface-1);
}
.cv2-action-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  padding: 6px 10px;
  background: transparent;
  border: 1px solid var(--cv2-border);
  border-radius: 20px;
  cursor: pointer;
  color: var(--cv2-text-2);
  font-size: 11px;
  font-weight: 500;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.15s, color 0.15s, border-color 0.15s;
  -webkit-tap-highlight-color: transparent;
  white-space: nowrap;
}
.cv2-action-btn:hover {
  background: var(--cv2-surface-2);
  color: var(--cv2-text-1);
  border-color: var(--cv2-text-muted);
}
.cv2-action-btn:active { transform: scale(0.95); }
.cv2-action-btn.is-active {
  background: rgba(99,102,241,0.08);
  border-color: var(--cv2-accent);
  color: var(--cv2-accent);
}
.cv2-action-btn svg,
.cv2-action-btn img { flex-shrink: 0; }
/* 클로드 버튼: 아이콘만, 정사각형 */
.cv2-action-btn--icon-only {
  padding: 6px 8px;
}

/* ── 공유 모달 ────────────────────────────────────────── */
.cv2-share-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cv2-share-modal {
  background: var(--cv2-surface-1);
  border-radius: 16px;
  width: 320px;
  max-width: 90vw;
  overflow: hidden;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
}
.cv2-share-modal-header {
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  padding: 18px 16px;
  font-size: 15px;
  font-weight: 600;
  color: var(--cv2-text-1);
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-share-modal-close {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  cursor: pointer;
  padding: 6px;
  color: var(--cv2-text-3);
  border-radius: 6px;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  -webkit-tap-highlight-color: transparent;
}
.cv2-share-modal-close:hover { color: var(--cv2-text-1); }
.cv2-share-modal-icons {
  display: flex;
  gap: 16px;
  justify-content: center;
  padding: 24px 16px 20px;
}
.cv2-share-modal-icon {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  background: none;
  border: none;
  font-size: 11px;
  font-weight: 500;
  color: var(--cv2-text-1);
  font-family: 'Noto Sans KR', sans-serif;
  min-width: 64px;
  -webkit-tap-highlight-color: transparent;
}
.cv2-share-modal-icon:active .cv2-share-modal-icon-circle { opacity: 0.8; }
.cv2-share-modal-icon-circle {
  width: 52px;
  height: 52px;
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.15s;
}
.cv2-share-modal-icon-circle--kakao   { background: #fee500; color: #3a1d1d; }
.cv2-share-modal-icon-circle--facebook { background: #1877f2; color: #fff; }
.cv2-share-modal-icon-circle--twitter  { background: #000;    color: #fff; }
.cv2-share-modal-link-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 16px 20px;
  border-top: 1px solid var(--cv2-border);
}
.cv2-share-modal-link-input {
  flex: 1;
  min-width: 0;
  padding: 9px 12px;
  border: 1px solid var(--cv2-border);
  border-radius: 8px;
  background: var(--cv2-surface-2);
  color: var(--cv2-text-2);
  font-size: 12px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  outline: none;
}
.cv2-share-modal-copy-btn {
  flex-shrink: 0;
  padding: 9px 16px;
  background: var(--cv2-primary, #3b82f6);
  color: #fff;
  border: none;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
}
.cv2-share-modal-copy-btn:hover { opacity: 0.9; }

/* ── 댓글 섹션 ────────────────────────────────────────── */
.cv2-comments-section {
  padding: 4px 16px 32px;
}
.cv2-comments-header {
  display: flex;
  align-items: baseline;
  gap: 6px;
  padding: 20px 0 14px;
}
.cv2-comments-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--cv2-text-1);
  letter-spacing: -0.01em;
}
.cv2-comments-count {
  font-size: 13px;
  color: var(--cv2-text-muted);
  font-weight: 400;
}

/* 댓글 입력 */
.cv2-comment-input-area {
  margin-bottom: 20px;
}
.cv2-comment-login-prompt {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  padding: 11px 16px;
  background: none;
  border: 1px solid var(--cv2-border);
  border-radius: 22px;
  cursor: pointer;
  color: var(--cv2-text-muted);
  font-size: 13px;
  font-family: 'Noto Sans KR', sans-serif;
  transition: border-color 0.15s, color 0.15s;
}
.cv2-comment-login-prompt:hover {
  border-color: var(--cv2-text-muted);
  color: var(--cv2-text-3);
}
.cv2-comment-form {
  display: flex;
  gap: 8px;
  align-items: flex-end;
}
.cv2-comment-textarea {
  flex: 1;
  min-width: 0; /* iOS Safari flex 내 input 기본 min-width 제거 */
  height: 38px;
  padding: 0 14px;
  border: 1px solid var(--cv2-border);
  border-radius: 20px;
  font-size: 16px;
  color: var(--cv2-text-1);
  background: var(--cv2-surface-1);
  font-family: 'Noto Sans KR', sans-serif;
  outline: none;
  transition: border-color 0.2s;
}
.cv2-comment-textarea:focus { border-color: var(--cv2-accent); }
.cv2-comment-textarea::placeholder { color: var(--cv2-text-muted); }
.cv2-comment-submit-btn {
  width: 38px;
  height: 38px;
  padding: 0;
  background: var(--cv2-accent);
  color: #fff;
  border: none;
  border-radius: 50%;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s, transform 0.1s;
}
.cv2-comment-submit-btn:hover { background: #4f46e5; }
.cv2-comment-submit-btn:active { transform: scale(0.92); }

/* 댓글 목록 */
.cv2-comment-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.cv2-comment-item {
  display: flex;
  gap: 10px;
  padding: 12px 0;
  border-bottom: 1px solid var(--cv2-surface-3);
}
.cv2-comment-item:last-child { border-bottom: none; }

/* 아바타 열 */
.cv2-comment-avatar,
.cv2-comment-avatar-placeholder {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-top: 1px;
}
.cv2-comment-avatar {
  object-fit: cover;
  background: var(--cv2-surface-3);
}
.cv2-comment-avatar-placeholder {
  background: var(--cv2-subtle-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--cv2-text-muted);
  font-size: 13px;
  font-weight: 600;
}

/* 컨텐츠 열 */
.cv2-comment-content-col {
  flex: 1;
  min-width: 0;
}
.cv2-comment-meta {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 3px;
  position: relative;
}

/* ··· 드롭다운 메뉴 */
.cv2-comment-menu-wrap {
  margin-left: auto;
  position: relative;
}
.cv2-comment-more-btn {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--cv2-text-muted);
  font-size: 13px;
  letter-spacing: 2px;
  padding: 2px 4px;
  border-radius: 6px;
  line-height: 1;
  transition: background 0.12s, color 0.12s;
}
.cv2-comment-more-btn:hover {
  background: var(--cv2-surface-3);
  color: var(--cv2-text-2);
}
.cv2-comment-dropdown {
  display: none;
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  background: var(--cv2-surface-1);
  border: 1px solid var(--cv2-border);
  border-radius: 10px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.1);
  min-width: 80px;
  z-index: 200;
  overflow: hidden;
}
.cv2-comment-dropdown.is-open { display: block; }
.cv2-dropdown-item {
  display: block;
  width: 100%;
  padding: 10px 14px;
  text-align: left;
  background: none;
  border: none;
  cursor: pointer;
  font-size: 13px;
  color: var(--cv2-text-2);
  font-family: 'Noto Sans KR', sans-serif;
  white-space: nowrap;
  transition: background 0.12s;
}
.cv2-dropdown-item:hover { background: var(--cv2-surface-2); }
.cv2-dropdown-item.is-danger { color: #ef4444; }
.cv2-dropdown-item.is-danger:hover { background: rgba(239,68,68,0.06); }
.cv2-comment-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--cv2-text-1);
  letter-spacing: -0.01em;
}
.cv2-comment-time {
  font-size: 11px;
  color: var(--cv2-text-muted);
  font-weight: 400;
}
.cv2-comment-body {
  font-size: 13.5px;
  color: var(--cv2-text-2);
  line-height: 1.55;
  margin-bottom: 7px;
  word-break: break-word;
}
.cv2-comment-body.is-deleted {
  color: var(--cv2-text-muted);
  font-style: italic;
  font-size: 13px;
}
.cv2-comment-tag {
  color: var(--cv2-accent);
  font-weight: 500;
  margin-right: 2px;
}

/* 댓글 액션 버튼 */
.cv2-comment-actions {
  display: flex;
  align-items: center;
  gap: 2px;
}
.cv2-comment-action-btn {
  background: none;
  border: none;
  cursor: pointer;
  font-size: 12px;
  color: var(--cv2-text-muted);
  font-family: 'Noto Sans KR', sans-serif;
  padding: 3px 6px;
  border-radius: 6px;
  display: flex;
  align-items: center;
  gap: 3px;
  transition: background 0.12s, color 0.12s;
}
.cv2-comment-action-btn:hover {
  background: var(--cv2-surface-3);
  color: var(--cv2-text-2);
}
.cv2-comment-action-btn.is-active { color: var(--cv2-accent); }
.cv2-comment-action-btn.is-danger:hover { color: #ef4444; background: none; }

/* 답글 영역 (항상 표시) */
.cv2-reply-area {
  border-left: 2px solid var(--cv2-surface-3);
  padding-left: 12px;
  margin-top: 6px;
}

/* 답글 폼 래퍼 */
.cv2-reply-form-wrap { margin-bottom: 16px; }
.cv2-reply-form { margin-top: 0; }

/* 답글 목록 */
.cv2-reply-list { }
.cv2-reply-item {
  display: flex;
  gap: 7px;
  padding: 7px 0;
}
.cv2-reply-item:first-child { padding-top: 2px; }

/* 답글 아바타 — 댓글보다 작게 */
.cv2-reply-item .cv2-comment-avatar,
.cv2-reply-item .cv2-comment-avatar-placeholder {
  width: 22px;
  height: 22px;
  font-size: 10px;
}

/* 더보기 버튼 */
.cv2-comments-more-btn {
  display: block;
  width: 100%;
  padding: 9px 16px;
  margin-top: 8px;
  background: none;
  border: 1px solid var(--cv2-border);
  border-radius: 22px;
  font-size: 13px;
  color: var(--cv2-text-muted);
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  text-align: center;
  transition: border-color 0.15s, color 0.15s;
}
.cv2-comments-more-btn:hover {
  border-color: var(--cv2-text-muted);
  color: var(--cv2-text-3);
}

/* ── 댓글 인라인 편집 ─────────────────────────────────── */
.cv2-comment-edit-form {
  margin-top: 6px;
}
.cv2-comment-edit-actions {
  display: flex;
  gap: 6px;
  margin-top: 6px;
}
.cv2-comment-edit-save-btn {
  padding: 5px 14px;
  background: var(--cv2-accent);
  color: #fff;
  border: none;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.15s;
}
.cv2-comment-edit-save-btn:hover { background: #4f46e5; }
.cv2-comment-edit-cancel-btn {
  padding: 5px 14px;
  background: transparent;
  color: var(--cv2-text-muted);
  border: 1px solid var(--cv2-border);
  border-radius: 8px;
  font-size: 12px;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.15s;
}
.cv2-comment-edit-cancel-btn:hover { background: var(--cv2-surface-2); }

/* ── AI 마크다운 스타일 ────────────────────────────────── */
.cv2-ai-body.is-markdown { line-height: 1.7; }
.cv2-ai-body.is-markdown h1,
.cv2-ai-body.is-markdown h2,
.cv2-ai-body.is-markdown h3,
.cv2-ai-body.is-markdown h4 {
  font-family: 'IBM Plex Sans KR', sans-serif;
  font-weight: 700;
  color: var(--cv2-text-1);
  margin: 16px 0 6px;
  line-height: 1.4;
}
.cv2-ai-body.is-markdown h1 { font-size: 17px; }
.cv2-ai-body.is-markdown h2 { font-size: 15px; }
.cv2-ai-body.is-markdown h3 { font-size: 14px; }
.cv2-ai-body.is-markdown h4 { font-size: 13px; color: var(--cv2-text-2); }
.cv2-ai-body.is-markdown p  { margin: 6px 0; font-size: 13px; color: var(--cv2-text-2); }
.cv2-ai-body.is-markdown ul,
.cv2-ai-body.is-markdown ol {
  padding-left: 18px;
  margin: 6px 0;
  font-size: 13px;
  color: var(--cv2-text-2);
}
.cv2-ai-body.is-markdown li { margin: 3px 0; }
.cv2-ai-body.is-markdown blockquote {
  border-left: 3px solid var(--cv2-accent);
  margin: 10px 0;
  padding: 6px 12px;
  background: rgba(99,102,241,0.06);
  border-radius: 0 6px 6px 0;
  color: var(--cv2-text-2);
  font-size: 13px;
}
.cv2-ai-body.is-markdown code {
  background: var(--cv2-surface-3);
  padding: 1px 5px;
  border-radius: 4px;
  font-size: 12px;
  font-family: 'Courier New', monospace;
  color: var(--cv2-text-1);
}
.cv2-ai-body.is-markdown pre {
  background: var(--cv2-surface-3);
  border-radius: 8px;
  padding: 10px 12px;
  overflow-x: auto;
  margin: 8px 0;
}
.cv2-ai-body.is-markdown pre code {
  background: none;
  padding: 0;
  font-size: 12px;
}
.cv2-ai-body.is-markdown hr {
  border: none;
  border-top: 1px solid var(--cv2-border);
  margin: 12px 0;
}
.cv2-ai-body.is-markdown table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  margin: 8px 0;
}
.cv2-ai-body.is-markdown th,
.cv2-ai-body.is-markdown td {
  padding: 6px 8px;
  border: 1px solid var(--cv2-border);
  text-align: left;
  color: var(--cv2-text-2);
}
.cv2-ai-body.is-markdown th {
  background: var(--cv2-surface-2);
  font-weight: 600;
  color: var(--cv2-text-1);
}

/* ── 신고 모달 ──────────────────────────────────────── */
.cv2-report-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.45);
  z-index: 1000;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  animation: cv2FadeIn 0.15s ease;
}
.cv2-report-modal {
  background: var(--cv2-surface-1);
  border-radius: 20px 20px 0 0;
  width: 100%;
  max-width: 480px;
  padding-bottom: env(safe-area-inset-bottom, 0px);
  animation: cv2SlideUp 0.2s ease;
}
@keyframes cv2SlideUp {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
.cv2-report-modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 20px 14px;
  border-bottom: 1px solid var(--cv2-border);
}
.cv2-report-modal-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--cv2-text-1);
  letter-spacing: -0.02em;
}
.cv2-report-modal-close {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--cv2-text-muted);
  font-size: 16px;
  line-height: 1;
  padding: 2px 4px;
}
.cv2-report-type-list {
  list-style: none;
  margin: 0;
  padding: 6px 0;
  max-height: 55vh;
  overflow-y: auto;
}
.cv2-report-type-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 13px 20px;
  cursor: pointer;
  font-size: 14px;
  color: var(--cv2-text-2);
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.1s;
}
.cv2-report-type-item:hover { background: var(--cv2-surface-2); }
.cv2-report-type-item input[type="radio"] {
  width: 16px;
  height: 16px;
  accent-color: var(--cv2-accent);
  flex-shrink: 0;
}
.cv2-report-modal-footer {
  display: flex;
  gap: 8px;
  padding: 12px 20px 16px;
  border-top: 1px solid var(--cv2-border);
}
.cv2-report-cancel-btn {
  flex: 1;
  padding: 11px;
  background: var(--cv2-surface-2);
  border: none;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 500;
  color: var(--cv2-text-2);
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.12s;
}
.cv2-report-cancel-btn:hover { background: var(--cv2-surface-3); }
.cv2-report-submit-btn {
  flex: 1;
  padding: 11px;
  background: #ef4444;
  border: none;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 600;
  color: #fff;
  cursor: pointer;
  font-family: 'Noto Sans KR', sans-serif;
  transition: background 0.12s, opacity 0.12s;
}
.cv2-report-submit-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.cv2-report-submit-btn:not(:disabled):hover { background: #dc2626; }

/* ── 토스트 알림 ──────────────────────────────────────── */
.cv2-toast {
  position: fixed;
  bottom: 80px;
  left: 50%;
  transform: translateX(-50%) translateY(12px);
  background: rgba(17,24,39,0.92);
  color: #f9fafb;
  font-size: 13px;
  font-family: 'Noto Sans KR', sans-serif;
  padding: 10px 18px;
  border-radius: 22px;
  white-space: nowrap;
  z-index: 3000;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s, transform 0.2s;
  max-width: calc(100vw - 40px);
  text-align: center;
}
.cv2-toast.show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
  pointer-events: auto;
}
