/* ============================================================
   layout.css — 카드 · 섹션 타이틀 · 스탯(재사용 테마 컴포넌트)
   메인 페이지와 드로어 상세가 동일 컴포넌트를 써서 톤을 통일한다.
   ============================================================ */

/* 카드 컨테이너(모든 섹션 공통) */
.cv-card{
  background:#fff;
  border:1px solid #e8eaed;
  border-radius:14px;
  padding:22px;
}

/* 섹션 타이틀(좌측 브랜드 액센트 바 + 타이틀 + 서브) — 메인·드로어 공통 */
.cv-card-title{
  display:flex;align-items:center;gap:8px;
  font-size:15px;font-weight:var(--fw-bold);color:var(--c-900);
  letter-spacing:var(--ls-title);line-height:1.35;margin-bottom:18px;
}
.cv-card-title::before{
  content:"";flex:none;width:3px;height:15px;border-radius:2px;background:var(--brand);
}
.cv-card-title .sub{
  font-size:12px;font-weight:var(--fw-reg);color:var(--c-500);letter-spacing:0;
}

/* 스탯 카드(KPI·드로어 헤더 메타) */
.cv-stat{background:#fff;border:1px solid #e8eaed;border-radius:12px;padding:14px 16px}
.cv-stat--sm{padding:9px 11px;border-radius:10px}          /* 드로어 헤더 미니 스탯 */
.cv-stat-label{font-size:var(--fs-caption);color:var(--c-500);font-weight:var(--fw-med);letter-spacing:0}
.cv-stat-value{font-weight:var(--fw-bold);color:var(--c-900);margin-top:3px;letter-spacing:var(--ls-title)}

/* 스탯 값 큰 변형(관리자 타일 등) · 분모(/N) */
.cv-stat-value--lg{font-size:24px;line-height:1.1;font-variant-numeric:tabular-nums}
.cv-stat-of{font-size:14px;font-weight:600;color:#cbd5e1;margin-left:3px}

/* ── 앱 셸 (16-app-shell) ── */
.cv-shell{display:grid;grid-template-columns:248px 1fr;grid-template-rows:64px 1fr;
  grid-template-areas:"top top" "side main";height:100vh}
.cv-shell.is-collapsed{grid-template-columns:64px 1fr}
.cv-topbar{grid-area:top;display:grid;grid-template-columns:248px 1fr;align-items:stretch;background:#fff;border-bottom:1px solid var(--c-border);z-index:30}
.cv-shell.is-collapsed .cv-topbar{grid-template-columns:64px 1fr}
.cv-topbar-brand{display:flex;align-items:center;gap:9px;padding:0 14px;border-right:1px solid var(--c-border);overflow:hidden}
.cv-shell.is-collapsed .cv-topbar-brand{justify-content:center;padding:0}
.cv-shell.is-collapsed .cv-brand-text{display:none}
.cv-topbar-main{display:flex;align-items:center;gap:14px;padding:0 16px;min-width:0}
.cv-brand{display:flex;align-items:center;gap:9px}
.cv-picker{display:inline-flex;align-items:center;height:38px;min-width:220px;max-width:420px;border:1px solid var(--cv-btn-border);border-radius:var(--cv-radius);background:#fff}
.cv-picker .select2-container{min-width:0}
.cv-topmedia{display:inline-flex;align-items:center;gap:6px;flex:none;max-width:300px;overflow:hidden}
.cv-topmedia .cv-mlogo{border-radius:4px}
.cv-topbar-right{margin-left:auto;display:flex;align-items:center;gap:12px}
.cv-user{display:inline-flex;align-items:center;gap:8px;padding:4px 8px 4px 4px;border-radius:999px;cursor:pointer}
.cv-user:hover{background:#f1f3f5}
.cv-avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,var(--brand-grad1),var(--brand-grad2));color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:13px}
.cv-side{grid-area:side;background:#fff;border-right:1px solid var(--c-border);display:flex;flex-direction:column;padding:10px 10px 8px;overflow:hidden;z-index:20}
.cv-nav-lbl{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--c-400);padding:12px 10px 5px}
.cv-shell.is-collapsed .cv-nav-lbl{opacity:0;height:6px;padding:0;overflow:hidden}
.cv-nav a{display:flex;align-items:center;gap:11px;height:40px;padding:0 11px;border-radius:9px;color:var(--c-700);font-size:14px;font-weight:600;position:relative;white-space:nowrap;text-decoration:none}
.cv-nav a .ic{flex:none;width:19px;height:19px;color:var(--c-500)}
.cv-nav a:hover{background:#f6f7f9}
.cv-nav a.on{background:var(--brand-50);color:var(--brand-hover)}
.cv-nav a.on .ic{color:var(--brand)}
.cv-nav a.on::before{content:"";position:absolute;left:-10px;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--brand)}
.cv-nav .soon{margin-left:auto;font-size:9.5px;font-weight:700;color:var(--c-400);background:#f1f3f5;padding:2px 6px;border-radius:999px}
.cv-shell.is-collapsed .cv-nav a span,.cv-shell.is-collapsed .cv-nav .soon{opacity:0;pointer-events:none}
.cv-side .cv-spacer{flex:1}
.cv-side-foot{border-top:1px solid #f1f3f5;padding-top:6px}
.cv-collapse{display:flex;align-items:center;gap:10px;height:36px;padding:0 11px;border-radius:9px;color:var(--c-400);cursor:pointer;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden}
.cv-collapse:hover{background:#f6f7f9;color:var(--c-600)}
.cv-shell.is-collapsed .cv-collapse{justify-content:center;padding:0;gap:0}
.cv-shell.is-collapsed .cv-collapse span{display:none}
.cv-main{grid-area:main;overflow:auto;min-height:0;min-width:0}
.cv-burger{display:none}
.cv-scrim{display:none}
/* 모바일: 사이드바 오프캔버스 드로어 */
@media (max-width:767.98px){
  .cv-shell{display:block;height:auto;min-height:100vh;min-height:100dvh}
  .cv-topbar{display:flex;align-items:center;grid-template-columns:none;position:sticky;top:0;padding:0 10px;gap:8px;min-height:64px}
  .cv-topbar-brand{border-right:none;padding:0;flex:none}
  .cv-topbar-main{flex:1;padding:0;gap:8px;min-width:0}
  .cv-main{overflow:visible}
  .cv-burger{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:9px;color:var(--c-600)}
  .cv-picker{min-width:0;max-width:none;flex:1}
  .cv-topmedia{display:none}
  .cv-sel-period,.cv-sel-groups{display:none}   /* 모바일 선택기는 프로젝트명만 */
  .cv-spacer{display:none}                       /* 드로어는 자연 흐름(큰 빈틈 제거) */
  .cv-collapse{display:none}                     /* 드로어에선 접기 무의미 */
  .cv-side{position:fixed;top:64px;left:0;bottom:0;width:264px;overflow-y:auto;transform:translateX(-100%);transition:transform .22s ease;box-shadow:0 10px 40px rgba(0,0,0,.18)}
  .cv-shell.is-drawer .cv-side{transform:none}
  .cv-shell.is-drawer .cv-scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:15}
  .cv-shell.is-collapsed .cv-nav a span,.cv-shell.is-collapsed .cv-nav .soon{opacity:1}   /* 드로어 안에선 항상 라벨 */
}
