/* =========================================================================
 * 토닥 관리자 — 별자리 레이아웃 (admin 전용)
 *
 * @author  정경하
 * @since   2026.06.10
 * @version 1.0
 *
 * - style.css 와 완전 독립 (admin 페이지에서만 로드)
 * - 전용 토큰(--a-*)만 사용 → 일반 화면 CSS와 충돌 없음
 * - 좌측 밤하늘 별자리 사이드바 + 밝은 콘텐츠 영역
 *
 * Copyright Neosgen Co,Ltd. All right reserved.
 * ========================================================================= */

:root {
  --a-night-1: #1f1a3a;
  --a-night-2: #2c2455;
  --a-night-3: #14102a;
  --a-gold:    #d4a853;
  --a-gold-2:  #e8c987;
  --a-star:    #f4ecd0;
  --a-cream:   #fdf6ec;
  --a-cream-2: #f5e6d3;
  --a-brown:   #6b3a1f;
  --a-text:    #2d2d2d;
  --a-muted:   #8a8a8a;
  --a-border:  #e8ddca;
  --a-card:    #ffffff;
  --a-ok:      #22c55e;
  --a-warn:    #ef6c6c;
  --a-shadow:  0 6px 24px rgba(31, 26, 58, .08);
  --a-sidebar-w: 264px;
}

* { box-sizing: border-box; }

.admin-body {
  margin: 0;
  font-family: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, sans-serif;
  background: var(--a-cream-2);
  color: var(--a-text);
  -webkit-font-smoothing: antialiased;
}

/* ===== 전체 레이아웃 ===== */
.admin-shell { display: flex; min-height: 100vh; }

/* ===== 사이드바 (밤하늘 별자리) ===== */
.admin-sidebar {
  width: var(--a-sidebar-w);
  flex: 0 0 var(--a-sidebar-w);
  position: fixed;
  top: 0; left: 0; bottom: 0;
  background:
    radial-gradient(1px 1px at 30% 20%, rgba(255,255,255,.7) 50%, transparent 51%),
    radial-gradient(1px 1px at 70% 35%, rgba(255,255,255,.5) 50%, transparent 51%),
    radial-gradient(1.5px 1.5px at 50% 60%, rgba(255,255,255,.6) 50%, transparent 51%),
    radial-gradient(1px 1px at 20% 80%, rgba(255,255,255,.45) 50%, transparent 51%),
    radial-gradient(1px 1px at 85% 75%, rgba(255,255,255,.5) 50%, transparent 51%),
    linear-gradient(165deg, var(--a-night-2) 0%, var(--a-night-1) 45%, var(--a-night-3) 100%);
  color: #d9d2ee;
  display: flex;
  flex-direction: column;
  z-index: 50;
  box-shadow: 4px 0 24px rgba(20, 16, 42, .25);
}

.admin-logo {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 24px 22px 20px;
  font-weight: 900;
  font-size: 1.25rem;
  color: #fff;
  text-decoration: none;
  border-bottom: 1px solid rgba(255,255,255,.08);
}
.admin-logo .moon {
  width: 34px; height: 34px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, var(--a-gold-2), var(--a-gold));
  color: var(--a-night-3);
  font-size: 1.1rem;
  box-shadow: 0 0 14px rgba(212,168,83,.55);
}
.admin-logo em { color: var(--a-gold-2); font-style: normal; }
.admin-logo .admin-tag {
  font-size: .68rem; font-weight: 700; letter-spacing: .04em;
  color: var(--a-gold-2);
  border: 1px solid rgba(212,168,83,.5);
  border-radius: 20px; padding: 2px 9px; margin-left: 2px;
}

/* ===== 사이드바 별자리 메뉴 ===== */
.admin-nav {
  position: relative;
  flex: 1;
  min-height: 0;          /* flex 자식 스크롤 활성화 — 메뉴가 화면보다 길면 nav 내부 스크롤(사이드바 잘림 방지) */
  padding: 22px 16px;
  overflow-y: auto;
}
/* 메뉴 별 사이를 잇는 연결선 (admin-nav.js가 좌표 채움) */
.admin-nav .admin-constellation {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  pointer-events: none;
  z-index: 0;
}
.admin-nav .admin-constellation line {
  stroke: rgba(212,168,83,.28);
  stroke-width: 1;
  transition: stroke .25s ease;
}

.admin-menu-item {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 12px 14px;
  margin: 4px 0;
  border-radius: 12px;
  color: #cfc7e6;
  text-decoration: none;
  font-size: .95rem;
  font-weight: 500;
  transition: background .2s ease, color .2s ease, transform .2s ease;
}
/* 별 노드 (아이콘 앞 점) */
.admin-menu-item .star {
  position: relative;
  width: 30px; height: 30px;
  flex: 0 0 30px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: rgba(255,255,255,.06);
  color: var(--a-gold-2);
  font-size: .9rem;
  transition: all .25s ease;
}
.admin-menu-item .star::after {
  content: "";
  position: absolute;
  width: 5px; height: 5px;
  top: -3px; right: -1px;
  border-radius: 50%;
  background: var(--a-star);
  opacity: .5;
  box-shadow: 0 0 6px var(--a-star);
}
.admin-menu-item .label { flex: 1; }
.admin-menu-item:hover {
  background: rgba(255,255,255,.07);
  color: #fff;
  transform: translateX(2px);
}
.admin-menu-item:hover .star {
  background: rgba(212,168,83,.22);
  box-shadow: 0 0 16px rgba(212,168,83,.5);
}

/* 활성 메뉴 */
.admin-menu-item.active {
  background: linear-gradient(90deg, rgba(212,168,83,.22), rgba(212,168,83,.04));
  color: #fff;
}
.admin-menu-item.active .star {
  background: radial-gradient(circle at 35% 30%, var(--a-gold-2), var(--a-gold));
  color: var(--a-night-3);
  box-shadow: 0 0 18px rgba(212,168,83,.65);
}

/* 준비중 메뉴 */
.admin-menu-item.soon { cursor: default; opacity: .6; }
.admin-menu-item.soon:hover { transform: none; background: rgba(255,255,255,.03); }
.admin-menu-item .soon-badge {
  font-size: .62rem; font-weight: 700;
  color: var(--a-night-3);
  background: var(--a-gold-2);
  border-radius: 10px; padding: 2px 7px;
}

/* 사이드바 하단 (관리자/로그아웃) */
.admin-side-foot {
  flex-shrink: 0;         /* nav가 스크롤돼도 로그아웃 영역은 줄지 않고 하단 고정 */
  padding: 16px 18px 22px;
  border-top: 1px solid rgba(255,255,255,.08);
}
.admin-side-foot .who {
  font-size: .82rem; color: #b6acd4; margin-bottom: 10px;
}
.admin-side-foot .who strong { color: #fff; font-weight: 700; }
.admin-logout {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%;
  padding: 10px;
  border: 1px solid rgba(212,168,83,.45);
  border-radius: 10px;
  background: transparent;
  color: var(--a-gold-2);
  font-size: .88rem; font-weight: 600;
  cursor: pointer;
  text-decoration: none;
  transition: all .2s ease;
}
.admin-logout:hover { background: rgba(212,168,83,.15); color: #fff; }

/* ===== 메인 영역 ===== */
.admin-main {
  margin-left: var(--a-sidebar-w);
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.admin-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 32px;
  background: var(--a-cream);
  border-bottom: 1px solid var(--a-border);
}
.admin-topbar .page-title {
  font-size: 1.3rem; font-weight: 800; color: var(--a-brown);
  display: flex; align-items: center; gap: 10px; margin: 0;
}
.admin-topbar .page-title i { color: var(--a-gold); }
.admin-hamburger {
  display: none;
  background: none; border: none;
  font-size: 1.4rem; color: var(--a-brown); cursor: pointer;
}

.admin-content { padding: 32px; flex: 1; }

/* ===== 통계 카드 ===== */
.stat-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
  margin-bottom: 30px;
}
.stat-card {
  position: relative;
  background: var(--a-card);
  border-radius: 16px;
  padding: 22px 24px;
  box-shadow: var(--a-shadow);
  overflow: hidden;
}
.stat-card::before {
  content: "";
  position: absolute;
  top: -20px; right: -20px;
  width: 80px; height: 80px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(212,168,83,.16), transparent 70%);
}
.stat-card .ic {
  width: 42px; height: 42px;
  display: grid; place-items: center;
  border-radius: 12px;
  font-size: 1.1rem; color: #fff;
  margin-bottom: 14px;
}
.stat-card .ic.c1 { background: linear-gradient(135deg, #8b5e3c, #6b3a1f); }
.stat-card .ic.c2 { background: linear-gradient(135deg, #e8c987, #d4a853); }
.stat-card .ic.c3 { background: linear-gradient(135deg, #5ed18f, #22c55e); }
.stat-card .ic.c4 { background: linear-gradient(135deg, #7c83f0, #4f57d6); }
.stat-card .val { font-size: 2rem; font-weight: 900; color: var(--a-text); line-height: 1; }
.stat-card .lbl { font-size: .85rem; color: var(--a-muted); margin-top: 6px; }

/* ===== 패널 / 테이블 ===== */
.panel-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
  align-items: start;        /* v6: 최근가입 행 두 테이블을 내용 높이대로 */
}
.panel {
  background: var(--a-card);
  border-radius: 16px;
  /* 2026.06.24 카드 룩 통일 — 정책·이력 카드(.pol-card/.hist-card)와 동일하게 그림자 대신 테두리 */
  border: 1px solid var(--a-border);
  overflow: hidden;
}
.panel-head {
  display: flex; align-items: center; gap: 9px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--a-border);
  font-weight: 800; color: var(--a-brown);
}
.panel-head i { color: var(--a-gold); }
.panel-body { padding: 6px 0 10px; }

.a-table { width: 100%; border-collapse: collapse; font-size: .9rem; }
.a-table th {
  text-align: left;
  padding: 11px 22px;
  font-size: .76rem; font-weight: 700;
  color: var(--a-muted);
  background: #faf4ea;
  border-bottom: 1px solid var(--a-border);
  white-space: nowrap;
}
.a-table td {
  padding: 12px 22px;
  border-bottom: 1px solid #f1e7d6;
  color: var(--a-text);
  white-space: nowrap;
}
.a-table tr:last-child td { border-bottom: none; }
.a-table tr:hover td { background: #fdfaf3; }
.a-table .num { text-align: right; font-variant-numeric: tabular-nums; }
.a-empty { padding: 36px 22px; text-align: center; color: var(--a-muted); font-size: .9rem; }

/* 등급/상태 배지 */
.badge {
  display: inline-block;
  font-size: .72rem; font-weight: 700;
  padding: 3px 10px; border-radius: 20px;
}
.badge.grade { background: #f3e6cf; color: var(--a-brown); }
.badge.on  { background: rgba(34,197,94,.14);  color: #15803d; }
.badge.off { background: rgba(239,108,108,.16); color: #c0392b; }
.badge.t-charge { background: rgba(79,87,214,.12); color: #4f57d6; }
.badge.t-use    { background: rgba(212,168,83,.18); color: #a9791f; }

.amount-plus  { color: #15803d; font-weight: 700; }
.amount-minus { color: #c0392b; font-weight: 700; }

/* ===== 알림(alert) — 별자리 톤 (관리자 공용) ===== */
.admin-alert {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 16px;
  margin-bottom: 16px;
  border-radius: 12px;
  border: 1px solid var(--a-border);
  border-left-width: 3px;
  background: #fff;
  box-shadow: 0 2px 12px rgba(31, 26, 58, .06);
  font-size: .9rem;
  font-weight: 600;
  color: var(--a-text);
  position: relative;
  overflow: hidden;
}
/* 우상단 은은한 별빛 */
.admin-alert::after {
  content: "";
  position: absolute;
  top: -14px; right: -14px;
  width: 56px; height: 56px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(212,168,83,.14), transparent 70%);
  pointer-events: none;
}
.admin-alert .ic {
  width: 30px; height: 30px;
  flex: 0 0 30px;
  display: grid; place-items: center;
  border-radius: 50%;
  font-size: .85rem;
  color: #fff;
  z-index: 1;
}
.admin-alert .msg { z-index: 1; }

.admin-alert-info    { border-left-color: var(--a-night-2); background: #f6f5fc; color: var(--a-night-1); }
.admin-alert-info    .ic { background: linear-gradient(135deg, #5a4f96, var(--a-night-2)); }
.admin-alert-success { border-left-color: var(--a-ok); background: #f4faf2; color: #2c6b27; }
.admin-alert-success .ic { background: linear-gradient(135deg, #5ed18f, var(--a-ok)); }
.admin-alert-error   { border-left-color: var(--a-warn); background: #fdf4f4; color: #b03636; }
.admin-alert-error   .ic { background: linear-gradient(135deg, #ef8a8a, var(--a-warn)); }
.admin-alert-warn    { border-left-color: var(--a-gold); background: #fdfaf2; color: #9a6f1a; }
.admin-alert-warn    .ic { background: linear-gradient(135deg, var(--a-gold-2), var(--a-gold)); }

/* ===== 모바일 ===== */
.admin-backdrop {
  display: none;
  position: fixed; inset: 0;
  background: rgba(20,16,42,.5);
  z-index: 45;
}
@media (max-width: 900px) {
  .admin-sidebar { transform: translateX(-100%); transition: transform .28s ease; }
  .admin-sidebar.open { transform: translateX(0); }
  .admin-main { margin-left: 0; }
  .admin-hamburger { display: block; }
  .admin-backdrop.show { display: block; }
  .stat-grid { grid-template-columns: repeat(2, 1fr); }
  .panel-grid { grid-template-columns: 1fr; }
  .admin-content { padding: 20px; }
}
@media (max-width: 480px) {
  .stat-grid { grid-template-columns: 1fr; }
}

/* ============================================================
   [추가] 회원 가입 이력 모달 (대시보드 최근 가입 회원 클릭 시)
   - 기존 .audit-* 선택자 없음 확인 → 중복/충돌 0
   - z-index 60 (기존 backdrop 45 / sticky 50 위)
   ============================================================ */
.audit-clickable { cursor: pointer; transition: background .15s; }
.audit-clickable:hover { background: rgba(255,255,255,.06); }

.audit-backdrop {
  display: none;
  position: fixed; inset: 0;
  background: rgba(8,6,24,.66);
  backdrop-filter: blur(3px);
  z-index: 60;
  align-items: center; justify-content: center;
}
.audit-backdrop.show { display: flex; }

.audit-modal {
  width: min(560px, 92vw);
  max-height: 80vh;
  display: flex; flex-direction: column;
  background: linear-gradient(160deg, #1a1740, #221a4d);
  border: 1px solid rgba(232,169,60,.35);
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0,0,0,.5);
  overflow: hidden;
}
.audit-modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 18px;
  border-bottom: 1px solid rgba(255,255,255,.1);
  color: #f4f1ff; font-weight: 600;
}
.audit-modal-head b { color: #e8a93c; }
.audit-close {
  background: none; border: none; color: #cfc8f0;
  font-size: 24px; line-height: 1; cursor: pointer;
}
.audit-close:hover { color: #fff; }
.audit-modal-body { padding: 14px 18px; overflow-y: auto; }

.audit-table { width: 100%; border-collapse: collapse; }
.audit-table th, .audit-table td {
  padding: 9px 10px; text-align: left;
  border-bottom: 1px solid rgba(255,255,255,.08);
  color: #e6e2f7; font-size: 13px;
}
.audit-table th { color: #9b93c7; font-weight: 600; }

.audit-empty {
  padding: 22px 8px; text-align: center;
  color: #9b93c7; font-size: 13px;
}

/* ============================================================
   [추가] 회원 관리 — 마스킹/열람 모달/페이징
   - 기존 .panel-sub/.reveal-*/.a-paging/.badge.role 없음 확인(중복 0)
   ============================================================ */
.panel-sub { font-size: 12px; color: #9b93c7; font-weight: 400; margin-left: 10px; }

.reveal-btn {
  background: rgba(232,169,60,.15); color: #e8a93c;
  border: 1px solid rgba(232,169,60,.4); border-radius: 7px;
  padding: 4px 10px; cursor: pointer; font-size: 12px;
}
.reveal-btn:hover { background: rgba(232,169,60,.28); }
.revealed { color: #7fd6a3; font-size: 12px; }

.reveal-desc { color: #cfc8f0; font-size: 13px; margin: 0 0 12px; }
.reveal-input {
  width: 100%; padding: 10px 12px; box-sizing: border-box;
  border: 1px solid rgba(255,255,255,.18); border-radius: 8px;
  background: rgba(255,255,255,.06); color: #fff;
}
.reveal-error { color: #ff8b8b; font-size: 12px; margin-top: 8px; }
.reveal-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 16px; }
.reveal-cancel, .reveal-submit {
  padding: 8px 16px; border-radius: 8px; cursor: pointer; font-size: 13px; border: none;
}
.reveal-cancel { background: rgba(255,255,255,.1); color: #cfc8f0; }
.reveal-submit { background: #e8a93c; color: #1a1740; font-weight: 700; }

.a-paging { display: flex; gap: 6px; justify-content: center; margin-top: 16px; }
.a-paging a {
  padding: 5px 10px; border-radius: 6px; color: #cfc8f0;
  text-decoration: none; font-size: 13px; border: 1px solid rgba(255,255,255,.12);
}
.a-paging a.on { background: #e8a93c; color: #1a1740; font-weight: 700; }

.badge.role { background: rgba(123,182,255,.15); color: #9bb6ff; }

/* ============================================================
   [추가] v3 대시보드 — 최근 결제 전폭 배치
   2026.06.11 정경하
   - v6(2026.06.18): 기존 .stat-split / .stat-split-item / .stat-split-sep /
     .stat-card .val.sm 는 대시보드 '오늘 가입 분리카드' 전용이었고,
     상단 개편(단일 카드화)으로 더 이상 사용처가 없어 제거(grep 확인: dashboard.jsp 외 사용 0).
   [삭제 목록] .stat-split, .stat-split-item, .stat-split-sep, .stat-card .val.sm
   [추가 목록] (배너/세부 스타일은 파일 하단 대시보드 블록에 정의)
   ============================================================ */

/* 최근 결제 내역 — 최근가입 패널 그리드 아래 전폭 배치 */
.panel-wide { margin-top: 22px; }

/* ============================================================
   [추가] v? 상담사 심사 콘솔 (admin/counselors.jsp)
   2026.06.11 정경하
   - grep 확인: 기존 .cv-* 선택자 0건 → 중복/충돌 0.
   [삭제 목록] 없음
   [추가 목록] .cv-step, .cv-review-btn, .cv-backdrop(.show), .cv-modal(-head/-body),
              .cv-close, .cv-card(-head), .cv-num, .cv-badge(.done), .cv-row,
              .cv-label, .cv-value, .cv-radio, .cv-textarea, .cv-actions,
              .cv-btn(.primary/.approve/.revoke/[disabled]), .cv-result(.ok/.bad),
              .cv-photo-wrap, .cv-photo-box, .cv-photo-side, .cv-file, .cv-note, .cv-final
   ============================================================ */

/* 목록 — 단계 진행 점 */
.cv-step {
  display: inline-grid; place-items: center;
  width: 22px; height: 22px; margin-right: 3px;
  border-radius: 50%;
  font-size: .72rem; font-weight: 800;
  background: #efe6d4; color: #b6a98c;
  border: 1px solid var(--a-border);
}
.cv-step.done { background: var(--a-ok); color: #fff; border-color: var(--a-ok); }

.cv-review-btn {
  border: 1px solid var(--a-gold); background: #fff7e9; color: var(--a-brown);
  font-size: .78rem; font-weight: 700; padding: 5px 12px; border-radius: 8px; cursor: pointer;
}
.cv-review-btn:hover { background: var(--a-gold); color: #fff; }

/* 모달 */
.cv-backdrop {
  display: none; position: fixed; inset: 0; z-index: 70;
  background: rgba(20,16,42,.55);
  align-items: center; justify-content: center; padding: 20px;
}
.cv-backdrop.show { display: flex; }
.cv-modal {
  width: 560px; max-width: 100%; max-height: 90vh; overflow-y: auto;
  background: var(--a-card); border-radius: 16px; box-shadow: var(--a-shadow);
}
.cv-modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 20px; border-bottom: 1px solid var(--a-border);
  font-weight: 800; color: var(--a-brown);
}
.cv-modal-head small { color: var(--a-muted); font-weight: 500; margin-left: 4px; }
.cv-modal-head i { color: var(--a-gold); }
.cv-close { background: none; border: none; font-size: 1.4rem; color: var(--a-muted); cursor: pointer; line-height: 1; }
.cv-modal-body { padding: 16px 20px 22px; }

/* 단계 카드 */
.cv-card { border: 1px solid var(--a-border); border-radius: 12px; padding: 14px 16px; margin-bottom: 14px; background: #fffdf8; }
.cv-card-head { display: flex; align-items: center; gap: 8px; font-weight: 800; color: var(--a-text); margin-bottom: 10px; }
.cv-card-head small { color: var(--a-muted); font-weight: 500; }
.cv-num { display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--a-gold); color: #fff; font-size: .76rem; font-weight: 800; }
.cv-badge { margin-left: auto; font-size: .72rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; background: #f0e8d8; color: #a08a5e; }
.cv-badge.done { background: rgba(34,197,94,.15); color: #15803d; }

.cv-row { display: flex; align-items: flex-start; gap: 10px; margin: 7px 0; font-size: .9rem; }
.cv-label { width: 78px; flex: 0 0 78px; color: var(--a-muted); padding-top: 4px; }
.cv-value { flex: 1; color: var(--a-text); font-weight: 600; }
.cv-radio { margin-right: 14px; font-weight: 600; cursor: pointer; }
.cv-textarea { flex: 1; border: 1px solid var(--a-border); border-radius: 8px; padding: 8px 10px; font-family: inherit; font-size: .88rem; resize: vertical; }

.cv-actions { display: flex; align-items: center; gap: 10px; margin-top: 10px; flex-wrap: wrap; }
.cv-btn { display: inline-flex; align-items: center; gap: 6px; border: none; border-radius: 8px; padding: 7px 14px; font-size: .82rem; font-weight: 700; cursor: pointer; }
.cv-btn.primary { background: var(--a-gold); color: #fff; }
.cv-btn.primary:hover { background: #c2974a; }
.cv-btn.approve { background: var(--a-ok); color: #fff; }
.cv-btn.revoke  { background: var(--a-warn); color: #fff; }
.cv-btn:disabled { background: #e6ddcb; color: #b0a489; cursor: not-allowed; }

.cv-result { font-size: .82rem; color: var(--a-muted); }
.cv-result.ok  { color: #15803d; font-weight: 700; }
.cv-result.bad { color: #c0392b; font-weight: 700; }

/* 3단계 사진 */
.cv-photo-wrap { display: flex; gap: 16px; align-items: flex-start; }
.cv-photo-box {
  width: 110px; height: 110px; flex: 0 0 110px; border-radius: 12px;
  border: 1px dashed var(--a-border); background: #faf4ea;
  display: grid; place-items: center; overflow: hidden; color: var(--a-muted); font-size: .8rem;
}
.cv-photo-box img { width: 100%; height: 100%; object-fit: cover; }
.cv-photo-side { flex: 1; }
.cv-file { display: block; width: 100%; font-size: .82rem; margin-bottom: 8px; }
.cv-note { font-size: .76rem; color: var(--a-muted); margin: 8px 0 6px; line-height: 1.4; }

.cv-final { display: flex; align-items: center; gap: 12px; margin-top: 4px; }

/* ============================================================
   [추가] 결제내역 페이지 (admin/payments.jsp)
   2026.06.11 정경하
   - grep 확인: 기존 .pay-* 선택자 0건 → 중복/충돌 0.
   [삭제 목록] 없음
   [추가 목록] .pay-filter, .pay-chips, .pay-chip(.active), .pay-controls,
              .pay-dates, .pay-tilde, .pay-search, .pay-go, .pay-notice,
              .pay-range, .pay-sum-grid, .pay-sum(.c-*), .pay-sum-lbl,
              .pay-sum-val, .pay-paging, .pay-page-now
   ============================================================ */

/* 필터 바 */
.pay-filter {
  background: var(--a-card); border-radius: 16px; box-shadow: var(--a-shadow);
  padding: 16px 18px; margin-bottom: 16px;
}
.pay-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.pay-chip {
  border: 1px solid var(--a-border); background: #fbf5ea; color: var(--a-brown);
  font-size: .82rem; font-weight: 700; padding: 7px 16px; border-radius: 999px; cursor: pointer;
  transition: all .15s ease;
}
.pay-chip:hover { background: #f3e6cf; }
.pay-chip.active { background: linear-gradient(135deg, var(--a-gold), #c2974a); color: #fff; border-color: transparent; box-shadow: 0 4px 12px rgba(212,168,83,.3); }

.pay-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.pay-dates { display: flex; align-items: center; gap: 8px; }
.pay-dates input[type="date"] { border: 1px solid var(--a-border); border-radius: 9px; padding: 8px 10px; font-family: inherit; font-size: .85rem; color: var(--a-text); }
.pay-tilde { color: var(--a-muted); }

.pay-search { position: relative; flex: 1; min-width: 200px; }
.pay-search i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--a-muted); font-size: .85rem; }
.pay-search input {
  width: 100%; border: 1px solid var(--a-border); border-radius: 9px;
  padding: 9px 12px 9px 34px; font-family: inherit; font-size: .88rem; color: var(--a-text);
}
.pay-search input:focus { outline: none; border-color: var(--a-gold); }

.pay-go {
  display: inline-flex; align-items: center; gap: 6px; border: none; cursor: pointer;
  background: var(--a-brown); color: #fff; font-weight: 700; font-size: .85rem;
  padding: 9px 18px; border-radius: 9px;
}
.pay-go:hover { background: #532d18; }

/* 안내 / 구간 */
.pay-notice {
  display: flex; align-items: center; gap: 8px; margin-bottom: 12px;
  background: #fff7e6; border: 1px solid #f0d9a8; color: #9a6a18;
  border-radius: 10px; padding: 10px 14px; font-size: .85rem; font-weight: 600;
}
.pay-range { color: var(--a-muted); font-size: .85rem; margin-bottom: 14px; }
.pay-range i { color: var(--a-gold); margin-right: 4px; }
.pay-range b { color: var(--a-brown); }

/* 요약 카드 */
.pay-sum-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 18px; }
.pay-sum {
  background: var(--a-card); border-radius: 14px; box-shadow: var(--a-shadow);
  padding: 16px 18px; border-left: 4px solid var(--a-border);
}
.pay-sum-lbl { font-size: .8rem; color: var(--a-muted); margin-bottom: 6px; }
.pay-sum-val { font-size: 1.5rem; font-weight: 900; line-height: 1; }
.pay-sum-val small { font-size: .85rem; font-weight: 700; margin-left: 2px; opacity: .7; }
.pay-sum.c-charge { border-left-color: #4f57d6; } .pay-sum.c-charge .pay-sum-val { color: #4f57d6; }
.pay-sum.c-use    { border-left-color: #c0392b; } .pay-sum.c-use .pay-sum-val { color: #c0392b; }
.pay-sum.c-net    { border-left-color: var(--a-ok); } .pay-sum.c-net .pay-sum-val { color: #15803d; }
.pay-sum.c-cnt    { border-left-color: var(--a-gold); } .pay-sum.c-cnt .pay-sum-val { color: var(--a-brown); }

/* 페이지네이션 */
.pay-paging { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 18px; }
.pay-paging a {
  display: inline-grid; place-items: center; width: 34px; height: 34px; border-radius: 9px;
  background: var(--a-card); border: 1px solid var(--a-border); color: var(--a-brown);
  text-decoration: none; box-shadow: var(--a-shadow);
}
.pay-paging a:hover { background: var(--a-gold); color: #fff; border-color: transparent; }
.pay-paging a.disabled { opacity: .4; pointer-events: none; }
.pay-page-now { font-size: .88rem; font-weight: 700; color: var(--a-text); }

@media (max-width: 720px) {
  .pay-sum-grid { grid-template-columns: repeat(2, 1fr); }
  .pay-search { min-width: 140px; }
}

/* ============================================================
   [추가] 공지사항 관리 (admin/notices.jsp)
   2026.06.11 정경하
   - grep 확인: 기존 .ntc-* / @keyframes ntcShine 0건 → 중복/충돌 0.
   - .cv-result(결과문구) / .pay-paging(페이지네이션) 은 기존 것 재사용.
   [삭제 목록] 없음
   [추가 목록] .ntc-toolbar(-info), .ntc-new-btn, .ntc-list, .ntc-item(.pinned),
              .ntc-main, .ntc-title-row, .ntc-title(.shine), .ntc-pin-badge,
              .ntc-meta, .ntc-actions, .ntc-act(.pin/.edit/.del),
              .ntc-backdrop(.show), .ntc-modal(-head/-body/-foot), .ntc-close,
              .ntc-field, .ntc-input, .ntc-textarea, .ntc-check(-shine), .ntc-save,
              @keyframes ntcShine
   ============================================================ */

.ntc-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.ntc-toolbar-info { color: var(--a-muted); font-size: .85rem; }
.ntc-new-btn {
  display: inline-flex; align-items: center; gap: 7px; border: none; cursor: pointer;
  background: linear-gradient(135deg, var(--a-gold), #c2974a); color: #fff;
  font-weight: 800; font-size: .85rem; padding: 10px 18px; border-radius: 10px;
  box-shadow: 0 4px 12px rgba(212,168,83,.3);
}
.ntc-new-btn:hover { filter: brightness(1.05); }

.ntc-list { display: flex; flex-direction: column; gap: 12px; }
.ntc-item {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  background: var(--a-card); border-radius: 14px; box-shadow: var(--a-shadow);
  padding: 16px 20px; border-left: 4px solid transparent;
}
.ntc-item.pinned {
  border-left-color: var(--a-gold);
  background: linear-gradient(90deg, rgba(212,168,83,.10), var(--a-card) 55%);
  box-shadow: 0 6px 22px rgba(212,168,83,.18);
}
.ntc-main { min-width: 0; flex: 1; }
.ntc-title-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ntc-pin-badge {
  display: inline-flex; align-items: center; gap: 4px;
  background: linear-gradient(135deg, var(--a-gold), #c2974a); color: #fff;
  font-size: .68rem; font-weight: 800; padding: 3px 9px; border-radius: 20px;
}
.ntc-title { font-size: 1rem; font-weight: 700; color: var(--a-text); }
.ntc-title.shine {
  font-weight: 900;
  background: linear-gradient(90deg, var(--a-brown) 0%, #d4a853 30%, #fff3d0 50%, #d4a853 70%, var(--a-brown) 100%);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: ntcShine 3s linear infinite;
}
@keyframes ntcShine {
  0%   { background-position: 200% center; }
  100% { background-position: -200% center; }
}
.ntc-meta { font-size: .8rem; color: var(--a-muted); margin-top: 6px; }
.ntc-meta i { color: var(--a-gold); margin-right: 3px; }

.ntc-actions { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; }
.ntc-act {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  border: 1px solid var(--a-border); background: #fff; color: var(--a-text);
  font-size: .78rem; font-weight: 700; padding: 6px 11px; border-radius: 8px;
}
.ntc-act:hover { background: #faf4ea; }
.ntc-act.pin    { color: var(--a-brown); }
.ntc-act.pin:hover { background: var(--a-gold); color: #fff; border-color: transparent; }
/* 강조(★) 토글 — 켜짐/꺼짐을 색으로 명확히 (OFF=회색, ON=금색) */
.ntc-act.feat       { color: var(--a-muted); }
.ntc-act.feat:hover { background: #faf4ea; color: var(--a-gold); }
.ntc-act.feat.on    { color: var(--a-gold); border-color: var(--a-gold); background: #fff8ea; }
.ntc-act.feat.on:hover { background: var(--a-gold); color: #fff; border-color: transparent; }
.ntc-act.del:hover { background: #fde8e8; color: #c0392b; border-color: #f0c4c4; }

/* 모달 */
.ntc-backdrop {
  display: none; position: fixed; inset: 0; z-index: 70;
  background: rgba(20,16,42,.55); align-items: center; justify-content: center; padding: 20px;
}
.ntc-backdrop.show { display: flex; }
.ntc-modal { width: 560px; max-width: 100%; max-height: 90vh; overflow-y: auto; background: var(--a-card); border-radius: 16px; box-shadow: var(--a-shadow); }
.ntc-modal-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--a-border); font-weight: 800; color: var(--a-brown); }
.ntc-modal-head i { color: var(--a-gold); }
.ntc-close { background: none; border: none; font-size: 1.4rem; color: var(--a-muted); cursor: pointer; line-height: 1; }
.ntc-modal-body { padding: 18px 20px 20px; }

.ntc-field { margin-bottom: 14px; }
.ntc-field label { display: block; font-size: .82rem; font-weight: 700; color: var(--a-muted); margin-bottom: 6px; }
.ntc-input, .ntc-textarea {
  width: 100%; border: 1px solid var(--a-border); border-radius: 9px; padding: 10px 12px;
  font-family: inherit; font-size: .9rem; color: var(--a-text); box-sizing: border-box;
}
.ntc-input:focus, .ntc-textarea:focus { outline: none; border-color: var(--a-gold); }
.ntc-textarea { resize: vertical; line-height: 1.5; }

.ntc-check { display: flex; align-items: center; gap: 9px; padding: 12px 14px; border-radius: 10px; background: #faf4ea; font-size: .88rem; color: var(--a-text); cursor: pointer; }
.ntc-check input { width: 17px; height: 17px; accent-color: var(--a-gold); }
.ntc-check i { color: var(--a-gold); }
.ntc-check-shine {
  background: linear-gradient(90deg, #c2974a, #fff3d0, #c2974a);
  background-size: 200% auto; -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: ntcShine 3s linear infinite; font-weight: 900;
}

.ntc-modal-foot { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin-top: 16px; }
.ntc-save {
  display: inline-flex; align-items: center; gap: 7px; border: none; cursor: pointer;
  background: var(--a-brown); color: #fff; font-weight: 800; font-size: .85rem;
  padding: 10px 20px; border-radius: 10px;
}
.ntc-save:hover { background: #532d18; }

@media (max-width: 720px) {
  .ntc-item { flex-direction: column; align-items: flex-start; }
  .ntc-actions { width: 100%; justify-content: flex-end; }
}

/* ============================================================
   [추가] 게시판 관리 (admin/boards.jsp)
   2026.06.11 정경하
   - grep 확인: 기존 .brd-* 0건 → 중복/충돌 0.
   - 재사용: .ntc-toolbar/.ntc-new-btn/.ntc-pin-badge/.ntc-actions/.ntc-act/
            .ntc-backdrop/.ntc-modal/.ntc-check/.ntc-save, @keyframes ntcShine,
            .cv-result, .badge.on/.badge.off  → 추가 정의하지 않음.
   [삭제 목록] 없음
   [추가 목록] .brd-list, .brd-item(.pinned/.off), .brd-main, .brd-name-row,
              .brd-name(.shine), .brd-meta, .brd-intro, .brd-toggle
   ============================================================ */

.brd-list { display: flex; flex-direction: column; gap: 12px; }
.brd-item {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  background: var(--a-card); border-radius: 14px; box-shadow: var(--a-shadow);
  padding: 16px 20px; border-left: 4px solid transparent;
}
.brd-item.pinned {
  border-left-color: var(--a-gold);
  background: linear-gradient(90deg, rgba(212,168,83,.10), var(--a-card) 55%);
  box-shadow: 0 6px 22px rgba(212,168,83,.18);
}
.brd-item.off { opacity: .62; }
.brd-item.off .brd-name { color: var(--a-muted); }

.brd-main { min-width: 0; flex: 1; }
.brd-name-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.brd-name { font-size: 1.02rem; font-weight: 800; color: var(--a-text); }
.brd-name.shine {
  font-weight: 900;
  background: linear-gradient(90deg, var(--a-brown) 0%, #d4a853 30%, #fff3d0 50%, #d4a853 70%, var(--a-brown) 100%);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: ntcShine 3s linear infinite;
}
.brd-meta { font-size: .8rem; color: var(--a-muted); margin-top: 6px; }
.brd-meta i { color: var(--a-gold); margin: 0 3px 0 2px; }
.brd-intro { color: var(--a-text); }

/* ============================================================
   게시판 설정 배지 (열람범위 / 댓글) — 2026.06.24 추가
   [grep 확인] .badge.sc-all/.sc-member/.sc-counselor/.sc-private/.cmt/.cmt-off
              기존 정의 없음(중복 0). 기존 .badge 기반 색만 추가.
   [삭제 목록] 없음   [추가 목록] 아래 6종
   ============================================================ */
.badge.sc-all       { background: rgba(34,197,94,.14);  color: #15803d; }
.badge.sc-member    { background: rgba(79,87,214,.12);  color: #4f57d6; }
.badge.sc-counselor { background: rgba(123,182,255,.16); color: #4f73bd; }
.badge.sc-private   { background: rgba(239,108,108,.16); color: #c0392b; }
.badge.cmt          { background: rgba(212,168,83,.18);  color: #a9791f; }
.badge.cmt-off      { background: rgba(120,120,120,.13); color: #6b7280; }

.brd-toggle { color: var(--a-brown); }
.brd-toggle:hover { background: #faf4ea; }

/* ============================================================
   [추가] 게시판 권한 체크박스 그룹 (admin/boards.jsp 모달)
   2026.06.24 정경하
   [grep 확인] .brd-perm-group / .brd-perm / .brd-perm-hint 기존 정의 없음(중복 0).
              기존 .brd-* (list/item/main/name-row/name/meta/intro/toggle) 와 충돌 없음.
   [삭제 목록] 없음
   [추가 목록] .brd-perm-group, .brd-perm(.is-fixed), .brd-perm span, .brd-perm-hint
   재사용: 색/폰트 변수(--a-gold/--a-text/--a-muted/--a-border)만 사용.
   ============================================================ */
.brd-perm-group { display: flex; flex-wrap: wrap; gap: 8px; }
.brd-perm {
  display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  padding: 9px 14px; border-radius: 9px; background: #faf4ea;
  border: 1px solid var(--a-border); font-size: .86rem; color: var(--a-text);
  user-select: none;
}
.brd-perm input { width: 16px; height: 16px; accent-color: var(--a-gold); cursor: pointer; }
.brd-perm.is-fixed { opacity: .7; cursor: default; background: #f1ece1; }
.brd-perm.is-fixed input { cursor: default; }
.brd-perm-hint { margin-top: 8px; font-size: .76rem; line-height: 1.5; color: var(--a-muted); }

@media (max-width: 720px) {
  .brd-item { flex-direction: column; align-items: flex-start; }
  .brd-item .ntc-actions { width: 100%; justify-content: flex-end; }
}

/* ============================================================
   [추가] 이벤트 관리 (admin/events.jsp)
   2026.06.11 정경하
   - grep 확인: 기존 .evt-* 0건 → 중복/충돌 0.
   - 재사용: .ntc-toolbar/.ntc-new-btn/.ntc-pin-badge/.ntc-actions/.ntc-act/
            .ntc-backdrop/.ntc-modal/.ntc-check/.ntc-save/.ntc-field/.ntc-input/
            .ntc-textarea, @keyframes ntcShine, .cv-result, .badge.on/.off, .pay-paging
   [삭제 목록] 없음
   [추가 목록] .evt-list, .evt-item(.featured/.off), .evt-thumb, .evt-noimg,
              .evt-main, .evt-title-row, .evt-title(.shine), .evt-meta,
              .evt-aud(.all/.user/.counselor), .evt-file, .evt-preview,
              .evt-radio-group, .evt-radio
   ============================================================ */

.evt-list { display: flex; flex-direction: column; gap: 12px; }
.evt-item {
  display: flex; align-items: center; gap: 16px;
  background: var(--a-card); border-radius: 14px; box-shadow: var(--a-shadow);
  padding: 14px 18px; border-left: 4px solid transparent;
}
.evt-item.featured {
  border-left-color: var(--a-gold);
  background: linear-gradient(90deg, rgba(212,168,83,.10), var(--a-card) 55%);
  box-shadow: 0 6px 22px rgba(212,168,83,.18);
}
.evt-item.off { opacity: .6; }
.evt-item.off .evt-title { color: var(--a-muted); }

.evt-thumb {
  width: 84px; height: 60px; flex: 0 0 auto; border-radius: 10px;
  object-fit: cover; background: #f1e9d9; border: 1px solid var(--a-border);
}
.evt-noimg { display: grid; place-items: center; color: var(--a-muted); font-size: 1.2rem; }

.evt-main { min-width: 0; flex: 1; }
.evt-title-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.evt-title { font-size: 1rem; font-weight: 800; color: var(--a-text); }
.evt-title.shine {
  font-weight: 900;
  background: linear-gradient(90deg, var(--a-brown) 0%, #d4a853 30%, #fff3d0 50%, #d4a853 70%, var(--a-brown) 100%);
  background-size: 200% auto;
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: ntcShine 3s linear infinite;
}
.evt-meta { font-size: .8rem; color: var(--a-muted); margin-top: 6px; }
.evt-meta i { color: var(--a-gold); margin: 0 3px 0 2px; }

.evt-aud {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .72rem; font-weight: 800; padding: 2px 9px; border-radius: 20px;
}
.evt-aud i { color: inherit !important; margin: 0; }
.evt-aud.all       { background: #f3e6cf; color: var(--a-brown); }
.evt-aud.user      { background: rgba(79,87,214,.12);  color: #4f57d6; }
.evt-aud.counselor { background: rgba(150,90,200,.14);  color: #8a3fb0; }

/* 모달 — 파일/미리보기/라디오 */
.evt-file { width: 100%; font-size: .85rem; color: var(--a-text); }
.evt-preview { margin-top: 10px; }
.evt-preview img { max-width: 100%; max-height: 200px; border-radius: 10px; border: 1px solid var(--a-border); }

.evt-radio-group { display: flex; gap: 8px; flex-wrap: wrap; }
.evt-radio {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  border: 1px solid var(--a-border); background: #fbf5ea; color: var(--a-text);
  font-size: .84rem; font-weight: 700; padding: 7px 14px; border-radius: 9px;
}
.evt-radio input { accent-color: var(--a-gold); }

@media (max-width: 720px) {
  .evt-item { flex-wrap: wrap; }
  .evt-item .ntc-actions { width: 100%; justify-content: flex-end; }
}

/* 대시보드 상담사 상태(대기) + 검증단계 배지 (@since 2026.06.11) */
.badge.wait  { background: rgba(234,179,8,.16);  color: #b07d05; }
.badge.stage { background: rgba(123,182,255,.16); color: #4f73bd; font-weight: 800; letter-spacing: .2px; }

/* =========================================================================
 * 상담사 승인 처리 기록 타임라인 (cv 모달) — @since 2026.06.11 말미 추가
 * ========================================================================= */
.cv-logbox .cv-card-head i { margin-right:6px; }
.cv-log { margin-top:4px; }
.cv-log-empty { padding:14px 4px; color:#9aa3b2; font-size:.85rem; text-align:center; }
.cv-log-item { display:flex; gap:12px; padding:11px 4px; border-bottom:1px solid #eef1f5; }
.cv-log-item:last-child { border-bottom:none; }
.cv-log-dot { flex-shrink:0; width:11px; height:11px; border-radius:50%; margin-top:4px; background:#1B3A6B; box-shadow:0 0 0 3px rgba(27,58,107,.12); }
.cv-log-dot.s-BIZ { background:#2563eb; box-shadow:0 0 0 3px rgba(37,99,235,.14); }
.cv-log-dot.s-MEET { background:#7c3aed; box-shadow:0 0 0 3px rgba(124,58,237,.14); }
.cv-log-dot.s-PHOTO { background:#d97706; box-shadow:0 0 0 3px rgba(217,119,6,.14); }
.cv-log-dot.s-APPROVE { background:#16a34a; box-shadow:0 0 0 3px rgba(22,163,74,.16); }
.cv-log-dot.s-REVOKE { background:#dc2626; box-shadow:0 0 0 3px rgba(220,38,38,.14); }
.cv-log-dot.s-PROFILE { background:#0891b2; box-shadow:0 0 0 3px rgba(8,145,178,.14); }
.cv-log-main { flex:1; min-width:0; }
.cv-log-top { display:flex; align-items:center; gap:8px; }
.cv-log-stage { font-size:.88rem; font-weight:700; color:#1f2937; }
.cv-log-res { font-size:.72rem; font-weight:700; padding:2px 8px; border-radius:999px; }
.cv-log-res.ok { background:#dcfce7; color:#166534; }
.cv-log-res.no { background:#fee2e2; color:#991b1b; }
.cv-log-detail { margin-top:3px; font-size:.82rem; color:#4b5563; line-height:1.45; word-break:break-all; }
.cv-log-meta { margin-top:4px; font-size:.74rem; color:#9aa3b2; }

/* =========================================================================
 * 상담사 행 펼침 — 처리 이력 + 페이지네이션  @since 2026.06.11
 * ========================================================================= */
.cv-trow { cursor:pointer; }
.cv-trow:hover { background:rgba(27,58,107,.04); }
.cv-trow.open { background:rgba(27,58,107,.07); }
.cv-logrow > td { padding:0 !important; background:#fafbfc; border-bottom:1px solid #e5e9f0; }
/* 각 상담사 행은 [보이는 cv-trow] + [숨김 cv-logrow] 2행 구조 → tr:last-child 가 숨김행에 걸려
   마지막 데이터 행에 하단 선이 남는다. 마지막 보이는 행(nth-last-child(2))의 선을 제거해 회원·신고 표와 통일. */
.cv-ctable tr.cv-trow:nth-last-child(2) > td { border-bottom: none; }
.cv-loginline { padding:14px 18px; }
.cv-loginline-head { font-size:.82rem; font-weight:700; color:#1B3A6B; margin-bottom:8px; }
.cv-loginline-head i { margin-right:6px; }
.cv-loginline-head small { font-weight:400; color:#9aa3b2; margin-left:4px; }
.cv-loginline-pager { display:flex; align-items:center; justify-content:center; gap:12px; margin-top:10px; padding-top:10px; border-top:1px dashed #e5e9f0; }
.cv-loginline-pager:empty { display:none; }

/* 상담사 표 — 열을 컨텐츠 폭으로 좌측 정렬, 남는 폭은 마지막(관리) 열이 흡수 → 헤더·데이터 정확 정렬 */
.cv-ctable { table-layout: fixed; min-width: 720px; }
/* 7열 너비 고정 → 헤더·데이터 항상 정렬 */
.cv-ctable .cvc-nick   { width: 15%; }
.cv-ctable .cvc-name   { width: 14%; }
.cv-ctable .cvc-cat    { width: 11%; }
.cv-ctable .cvc-step   { width: 13%; }
.cv-ctable .cvc-photo  { width: 9%; }
.cv-ctable .cvc-status { width: 9%; }
.cv-ctable .cvc-mng    { width: 29%; }
.cv-ctable thead th, .cv-ctable tr.cv-trow > td { overflow: hidden; text-overflow: ellipsis; }
.cv-ctable tr.cv-logrow > td { white-space: normal; }

/* ============================================================
   [추가] 활동 로그 모달 — 행위 필터 바 + 행 [활동] 버튼
   [추가 목록] .act-actbtn, .act-filterbar, .act-select, .act-gobtn
   [삭제 목록] 없음 (기존 .act-* 선택자 부재 확인 — 중복 0)
   ============================================================ */
.act-actbtn {
  background: rgba(123,182,255,.12); color: #b9c8ff;
  border: 1px solid rgba(123,182,255,.4); border-radius: 7px;
  padding: 4px 10px; cursor: pointer; font-size: 12px; margin-left: 4px;
}
.act-actbtn:hover { background: rgba(123,182,255,.24); }
.act-filterbar {
  display: flex; gap: 8px; align-items: center;
  padding: 10px 18px;
  border-bottom: 1px solid rgba(255,255,255,.1);
  background: rgba(255,255,255,.03);
}
.act-select {
  flex: 1; padding: 7px 10px;
  background: #1a1740; color: #e6e2f7;
  border: 1px solid rgba(255,255,255,.18); border-radius: 8px;
  font-size: 13px;
}
.act-gobtn {
  background: rgba(232,169,60,.15); color: #e8a93c;
  border: 1px solid rgba(232,169,60,.4); border-radius: 8px;
  padding: 7px 14px; cursor: pointer; font-size: 13px; white-space: nowrap;
}
.act-gobtn:hover { background: rgba(232,169,60,.28); }

/* [추가] 활동 로그 모달 — 페이지네이션 (중복 0 확인) */
.act-pager {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  padding: 10px 18px; border-top: 1px solid rgba(255,255,255,.1);
  background: rgba(255,255,255,.03);
}
.act-pager:empty { display: none; }

/* [추가] 결제내역 구분 필터(충전/사용/적립/전체) + 적립 배지 (중복 0 확인) */
.badge.t-bonus { background: rgba(159,0,220,.12); color: #9f00dc; }
.pay-kindrow { align-items: center; }
.pay-kindlabel { font-size: .8rem; font-weight: 700; color: var(--a-muted); margin-right: 2px; }
.pay-kind {
  border: 1px solid var(--a-border); background: #fbf5ea; color: var(--a-brown);
  font-size: .82rem; font-weight: 700; padding: 6px 14px; border-radius: 999px; cursor: pointer;
  transition: all .15s ease;
}
.pay-kind:hover { background: #f3e6cf; }
.pay-kind.active { background: linear-gradient(135deg, var(--a-gold), #c2974a); color: #fff; border-color: transparent; box-shadow: 0 4px 12px rgba(212,168,83,.3); }

/* [추가] 정책 변경 이력 — 반응형 테이블 + 페이저 (중복 0 확인) */
.hist-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin-top: 6px; }
.hist-table { width: 100%; min-width: 420px; }
.hist-table .num { text-align: right; font-variant-numeric: tabular-nums; }
.hist-empty { text-align: center; color: var(--a-muted); padding: 20px 8px; }

/* ============================================================
   [추가] 변경 이력 카드 — 정책 화면(.pol-card)과 동일 룩을 콘텐츠 영역
   (게시판/공지/이벤트/운세/충전구간) 하단 이력 패널에서 공유.
   [grep 확인] .hist-card / .hist-desc 기존 정의 없음(중복 0).
   [삭제 목록] 없음   [추가 목록] .hist-card, .hist-card h3, .hist-desc
   ============================================================ */
.hist-card {
  background: var(--a-card, #fff);
  border: 1px solid var(--a-border, rgba(120,130,160,.18));
  border-radius: 16px; padding: 22px 24px; margin-top: 18px;
}
.hist-card h3 { margin: 0 0 6px; font-size: 16px; font-weight: 800; color: var(--a-text); }
.hist-desc { color: #7a839a; font-size: 13px; margin-bottom: 16px; line-height: 1.6; }

@media (max-width: 560px) {
  .hist-table { min-width: 0; }
  .hist-table thead { display: none; }
  .hist-table, .hist-table tbody, .hist-table tr, .hist-table td { display: block; width: 100%; }
  .hist-table tr { border: 1px solid var(--a-border); border-radius: 10px; margin-bottom: 8px; padding: 6px 12px; background: #fff; }
  .hist-table tr:hover td { background: transparent; }
  .hist-table td { border: none !important; padding: 5px 0; display: flex; justify-content: space-between; gap: 12px; }
  .hist-table td::before { content: attr(data-label); font-weight: 700; color: var(--a-muted); flex: 0 0 auto; }
  .hist-table td.hist-empty { display: block; text-align: center; }
  .hist-table td.hist-empty::before { content: ""; }
}

/* [추가] 대시보드 v5 — 클릭형 카드 / 정책 현황 / 이벤트·공지 리스트 (중복 0) */
.stat-card.clk, .panel-head.clk { cursor: pointer; }
.stat-card.clk { transition: transform .12s ease, box-shadow .12s ease; }
.stat-card.clk:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(60,40,10,.12); }
.stat-card .ic.c5 { background: linear-gradient(135deg, #ef8a8a, #e23d3d); }
.stat-card.alert-on  { border: 1px solid rgba(226,61,61,.35); background: #fdf5f5; }
.stat-card.alert-on  .val { color: #c0392b; }
.stat-card.alert-off .val { color: #15803d; }
.panel-head.clk .pa-go { font-size: 11px; opacity: .55; margin-left: 6px; }
.panel-head.clk:hover .pa-go { opacity: 1; }
.panel-head .ph-sub { font-size: .78rem; font-weight: 600; color: var(--a-muted); margin-left: 4px; }

.dash-policy { display: flex; gap: 14px; flex-wrap: wrap; padding: 6px 22px 2px; }
.dash-policy .dp-item { flex: 1 1 130px; background: #faf6ee; border: 1px solid var(--a-border); border-radius: 12px; padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
.dash-policy .dp-k { font-size: .85rem; color: var(--a-muted); font-weight: 700; }
.dash-policy .dp-v { font-size: 1.9rem; font-weight: 900; color: var(--a-text); line-height: 1; }
.dash-policy .dp-v i { font-size: 1rem; font-style: normal; color: var(--a-muted); margin-left: 2px; }
.dp-note { margin: 10px 22px 2px; font-size: .8rem; color: var(--a-muted); }

.dash-tiers { display: flex; flex-wrap: wrap; gap: 10px; padding: 8px 22px 12px; }
.tier-chip { flex: 1 1 92px; min-width: 92px; display: inline-flex; flex-direction: column; align-items: center; gap: 3px; background: #f3e6cf; color: var(--a-brown); border-radius: 12px; padding: 12px 10px; text-align: center; }
.tier-chip b { font-size: .8rem; letter-spacing: .03em; }
.tier-chip em { font-style: normal; font-size: .92rem; font-weight: 800; color: var(--a-text); font-variant-numeric: tabular-nums; }

.dash-list { list-style: none; margin: 0; padding: 2px 0; }
.dash-list li { display: flex; align-items: center; gap: 8px; padding: 10px 22px; border-bottom: 1px solid var(--a-border); }
.dash-list li:last-child { border-bottom: none; }
.dash-list .dl-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--a-text); font-size: .92rem; }
.dash-list .dl-date { color: var(--a-muted); font-size: .8rem; flex: 0 0 auto; }
.badge.feat { background: rgba(212,168,83,.2);  color: #a9791f; }
.badge.pin  { background: rgba(123,131,240,.16); color: #4f57d6; }

/* ============================================================
   [추가] 대시보드 v6 — 신고 전폭 강조 배너(.dash-alert) + 오늘가입 세부(.stat-sub)
   - grep 확인: .dash-alert / .ab-val / .ab-unit / .ab-lbl / .ab-go / .stat-sub
     → 기존 정의 없음(중복/충돌 0). .stat-card.alert-on(빨강 배경/테두리)은 그대로 재사용.
   [삭제 목록] 없음
   [추가 목록] .stat-card.dash-alert(+::before/.ic/.ab-*), .stat-card .stat-sub, @keyframes dashAlertPulse
   ============================================================ */
.stat-card.dash-alert {
  display: flex; align-items: center; gap: 18px;
  padding: 18px 22px; margin-bottom: 18px;
}
.stat-card.dash-alert::before { display: none; }
.stat-card.dash-alert .ic { margin-bottom: 0; flex: 0 0 auto; width: 46px; height: 46px; font-size: 1.2rem; }
.stat-card.dash-alert .ab-text { flex: 1 1 auto; min-width: 0; }
.stat-card.dash-alert .ab-val { font-size: 1.9rem; font-weight: 900; line-height: 1; color: var(--a-text); font-variant-numeric: tabular-nums; }
.stat-card.dash-alert .ab-unit { font-size: .85rem; font-weight: 700; color: var(--a-muted); margin-left: 3px; }
.stat-card.dash-alert .ab-lbl { font-size: .9rem; color: var(--a-muted); margin-top: 5px; }
.stat-card.dash-alert .ab-go { flex: 0 0 auto; color: var(--a-muted); opacity: .45; font-size: 13px; }
.stat-card.dash-alert.clk:hover .ab-go { opacity: 1; }
.stat-card.dash-alert.alert-on  { border-left: 4px solid #e23d3d; }
.stat-card.dash-alert.alert-on  .ab-val { color: #c0392b; }
.stat-card.dash-alert.alert-off { border: 1px solid var(--a-border); border-left: 4px solid var(--a-ok); background: #f4faf6; }
.stat-card.dash-alert.alert-off .ab-val { color: #15803d; }
@media (prefers-reduced-motion: no-preference) {
  .stat-card.dash-alert.alert-on { animation: dashAlertPulse 2.4s ease-in-out infinite; }
  @keyframes dashAlertPulse {
    0%, 100% { box-shadow: var(--a-shadow); }
    50%      { box-shadow: 0 0 0 3px rgba(226,61,61,.12), var(--a-shadow); }
  }
}
/* 오늘 신규 가입 — 회원/상담사 세부 */
.stat-card .stat-sub { margin-top: 7px; font-size: .78rem; color: var(--a-muted); }
.stat-card .stat-sub b { color: var(--a-text); font-weight: 800; font-variant-numeric: tabular-nums; }

/* 배너는 모바일에서도 가로 유지(아이콘+수치+화살표) */
@media (max-width: 480px) {
  .stat-card.dash-alert { gap: 14px; padding: 16px 18px; }
  .stat-card.dash-alert .ab-val { font-size: 1.6rem; }
}

/* ============================================================
   [v6.2] 4패널을 좌우 2열 짝 정렬(.panel-grid)로 환원 — masonry는 2번째 패널(등급/공지) 좌우 어긋남이 어색하여 제거.
   - .panel-grid(대시보드 전용)는 align-items:start 로 짧은 패널 빈 stretch 방지, 행 간 margin 22px.
   - 본문 들여쓰기(.dash-policy/.dash-tiers/.dash-list li/.dp-note) 22px 헤더 정렬은 유지.
   [삭제 목록] .dash-masonry, .dash-masonry > .panel, @media .dash-masonry
   [추가 목록] .panel-grid + .panel-grid (행 간격)
   ============================================================ */
.panel-grid + .panel-grid { margin-top: 22px; }

/* ============================================================
   [v6.3] 모바일/좁은 화면 — 표가 든 패널은 가로 스크롤(잘림 방지)
   - .panel(overflow:hidden)이 넓은 표를 잘라서 회원/상담사/신고/결제/최근가입 표가 모바일에서 잘림.
   - 표가 들어있는 .panel-body 만 가로 스크롤 허용(:has) → 등급 이력(.hist-wrap)과 동일 동작.
   - 표 없는 패널(이벤트/공지 .dash-list, 정책 폼)은 미매칭 → 영향 0. 내용이 넘칠 때만 스크롤바 표시.
   [추가 목록] .panel-body:has(.a-table)
   ============================================================ */
.panel-body:has(.a-table) { padding: 6px 22px 10px; overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* ============================================================
   [v6.4] 플랫폼 수익(/admin/revenue) — 누적 수익 헤드라인 + 수수료율 표기
   - grep 확인: .rev-* 기존 정의 없음(중복/충돌 0). 결제 화면의 .pay-* 는 그대로 재사용.
   [추가 목록] .rev-hero(+ic/text/lbl/val/unit), .rev-pct
   ============================================================ */
.rev-hero { display: flex; align-items: center; gap: 18px; background: var(--a-card); border: 1px solid var(--a-border); border-left: 4px solid var(--a-gold); border-radius: 16px; padding: 20px 24px; box-shadow: var(--a-shadow); margin-bottom: 20px; }
.rev-hero-ic { width: 52px; height: 52px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 14px; background: linear-gradient(135deg, #e8c987, #d4a853); color: #fff; font-size: 1.4rem; }
.rev-hero-text { min-width: 0; }
.rev-hero-lbl { font-size: .9rem; color: var(--a-muted); font-weight: 700; }
.rev-hero-lbl small { font-weight: 400; }
.rev-hero-val { font-size: 2.4rem; font-weight: 900; color: var(--a-brown); line-height: 1.1; font-variant-numeric: tabular-nums; }
.rev-hero-val .rev-unit { font-size: 1rem; font-weight: 700; color: var(--a-muted); margin-left: 4px; }
.rev-pct { color: var(--a-muted); font-weight: 600; font-size: .75rem; margin-left: 2px; }

/* ============================================================
   [v6.5] 대시보드 — 우측 컬럼 스택(.dash-col)으로 공지+수익을 쌓아 좌측 이벤트와 높이 맞춤(빈 공간 제거)
   + 플랫폼 수익 미니 카드(.dash-rev). 모두 대시보드 전용(중복/충돌 0).
   [추가 목록] .dash-col, .dash-rev(+main/lbl/val/sub)
   ============================================================ */
.dash-col { display: flex; flex-direction: column; gap: 22px; min-width: 0; }
.dash-rev { padding: 8px 22px 12px; }
.dash-rev-main { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.dash-rev-lbl { font-size: .85rem; color: var(--a-muted); font-weight: 700; }
.dash-rev-val { font-size: 1.9rem; font-weight: 900; color: var(--a-brown); line-height: 1; font-variant-numeric: tabular-nums; }
.dash-rev-val i { font-size: .9rem; font-style: normal; color: var(--a-muted); margin-left: 2px; }
.dash-rev-sub { margin-top: 8px; font-size: .82rem; color: var(--a-muted); }
.dash-rev-sub b { color: #15803d; font-weight: 800; }

/* ───────────────────────────────────────────────
   통합 페이지네이션 (관리자 공통) — admin-pager.jsp
   기존 .pay-paging / .a-paging / .rep 인라인 페이저를 대체.
   내용이 많아져도 현재 위치 주변 번호 + 처음/끝 점프로 보기 편하게.
   ─────────────────────────────────────────────── */
.a-pager{ display:flex; align-items:center; justify-content:center;
  gap:6px; flex-wrap:wrap; margin-top:18px; }
.a-pager a, .a-pager span{
  display:inline-flex; align-items:center; justify-content:center;
  min-width:34px; height:34px; padding:0 10px; box-sizing:border-box;
  border:1px solid var(--a-border); border-radius:9px; background:#fff;
  color:var(--a-brown); font-size:13px; font-weight:700; line-height:1;
  text-decoration:none; transition:background .15s, border-color .15s; }
.a-pager a:hover{ background:#fbf3e2; border-color:var(--a-gold); }
.a-pager .a-pg-num.on{
  background:linear-gradient(135deg, var(--a-gold-2), var(--a-gold));
  border-color:var(--a-gold); color:#3a2412;
  box-shadow:0 2px 6px rgba(212,168,83,.35); }
.a-pager .disabled{ opacity:.4; cursor:default; background:#faf7f0; }
.a-pager .a-pg-gap{ border:none; background:transparent;
  min-width:18px; padding:0 2px; color:#b9ab90; }
@media (max-width:640px){
  .a-pager a, .a-pager span{ min-width:30px; height:30px; padding:0 7px; font-size:12px; }
}
