/* ============================================================
   Glow Design V2 — Container Scope
   ============================================================
   .glow-v2 컨테이너 안의 모든 요소는 디자인 V2 규칙을 따른다.
   기존 글로벌 스타일(Tailwind 등)이 새 디자인을 덮어쓰지 못하도록
   font-family / letter-spacing은 !important로 강제. */

.glow-v2 {
  font-family: 'Pretendard', 'Pretendard Variable', -apple-system,
               BlinkMacSystemFont, 'Apple SD Gothic Neo', 'Noto Sans KR',
               system-ui, sans-serif !important;
  letter-spacing: -0.010em;
  color: var(--ink-1);
  background-color: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

.glow-v2 *,
.glow-v2 *::before,
.glow-v2 *::after {
  box-sizing: border-box;
}

/* ============================================================
   Semantic Type — .glow-v2 .t-*
   colors_and_type.standalone.css 의 .t-* 클래스를 .glow-v2 스코프로 한정
   ============================================================ */

.glow-v2 .t-display {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: var(--fs-38);
  line-height: 1.2;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-h1 {
  font-weight: 700;
  font-size: var(--fs-28);
  line-height: 1.3;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-h2 {           /* page title — "홈" 24/700 */
  font-weight: 700;
  font-size: var(--fs-24);
  line-height: 1.3;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-h3 {           /* card heading 18/700 */
  font-weight: 700;
  font-size: var(--fs-18);
  line-height: 1.4;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-body {         /* default 16/500 */
  font-weight: 500;
  font-size: var(--fs-16);
  line-height: 1.5;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-body-strong {  /* 16/600 */
  font-weight: 600;
  font-size: var(--fs-16);
  line-height: 1.5;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-label {        /* 14/500 — buttons, table cells */
  font-weight: 500;
  font-size: var(--fs-14);
  line-height: 1.4;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-label-strong { /* 14/700 */
  font-weight: 700;
  font-size: var(--fs-14);
  line-height: 1.4;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-caption {      /* 12/500 — meta */
  font-weight: 500;
  font-size: var(--fs-12);
  line-height: 1.3;
  letter-spacing: var(--tracking);
  color: var(--ink-3);
}
.glow-v2 .t-caption-strong {
  font-weight: 700;
  font-size: var(--fs-12);
  line-height: 1.3;
  letter-spacing: var(--tracking);
  color: var(--ink-1);
}
.glow-v2 .t-micro {        /* 9/600 — chart axis labels */
  font-weight: 600;
  font-size: var(--fs-9);
  line-height: 1.2;
  color: var(--ink-3);
}

.glow-v2 .t-num-lg {       /* metric numbers — 38/700 */
  font-weight: 700;
  font-size: var(--fs-38);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--ink-1);
}
.glow-v2 .t-num-sm {       /* metric units — 16/500 */
  font-weight: 500;
  font-size: var(--fs-16);
  line-height: 1.3;
  color: var(--ink-3);
}

.glow-v2 .t-muted    { color: var(--ink-3); }
.glow-v2 .t-subtle   { color: var(--ink-4); }
.glow-v2 .t-brand    { color: var(--accent); }
.glow-v2 .t-danger   { color: var(--neg); }
.glow-v2 .t-info     { color: var(--info-500); }

/* ============================================================
   FEAT-FINANCE-TEXT-SCALE-001 — 일/월 마감 텍스트 +3px 스케일.

   사용자 결정: 가독성 향상 위해 일/월 마감 화면 텍스트 크기 일괄 +3px.
   홈 대시보드 / 재료비 등 다른 메뉴는 무영향.

   적용 범위:
   - daily/single.html (.glow-daily-page) — 인라인 font-size 는 직접 px 매핑
   - daily/index.html, monthly/index.html, monthly/detail.html → 본 클래스 부착

   `:where()` 선택자 + 단일 클래스 스코프로 specificity 0 유지 — Tailwind utility
   클래스를 안전하게 override 하면서 필요 시 inline `style="font-size:Npx"` 로
   덮어쓸 수 있게 한다 (사용자 절대 규칙: !important 남발 금지).

   매핑 (+3px, 28px 이상은 KPI 큰 숫자 예외 — 무변경):
     11→14 / 12→15 / 13→16 / 14→17 / 15→18 / 16→19 / 18→21 / 20→24 / 22→24
   ============================================================ */
/* text-xl(20)/text-2xl(24): KPI 영역 — 24 유지 (사용자 규칙) */

/* ============================================================
   FEAT-DESIGN-UNIFY-001 — 표 그리드 + 페이지 헤더 + 콤마 입력.

   홈 대시보드를 기준으로 모든 페이지가 동일 레이아웃/그리드/콤마를
   사용하도록 글로벌 룰을 한 번에 정의한다. specificity 0(`:where()`)
   으로 페이지 자체 클래스 위에 안전하게 얹는다.

   적용 대상:
   - .glow-v2 :where(table.usage-table, .master-table, .ded-table,
     .staff-table, .edu-table, .meal-result-table, .att-table,
     .target-grid, .target-day-grid, .bank-table, table.data-grid)
   ============================================================ */

/* 표 가로/세로 격자 — 모든 페이지 자체 표 클래스를 한 번에 매칭 */
.glow-v2 :where(
  table.usage-table, table.master-table, table.ded-table, table.staff-table,
  table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.data-grid
) {
  border-collapse: collapse;
}
.glow-v2 :where(
  table.usage-table, table.master-table, table.ded-table, table.staff-table,
  table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.data-grid
) :where(th, td) {
  border-right: 1px solid var(--line-strong);
  border-bottom: 1px solid var(--line-strong);
}
.glow-v2 :where(
  table.usage-table, table.master-table, table.ded-table, table.staff-table,
  table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.data-grid
) :where(tr) :where(th, td):last-child {
  border-right: none;
}
.glow-v2 :where(
  table.usage-table, table.master-table, table.ded-table, table.staff-table,
  table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.data-grid
) :where(tbody tr:last-child) :where(td) {
  border-bottom: none;
}

/* 숫자 컬럼 정렬 — th/td 모두 우측 정렬 + tabular-nums */
.glow-v2 :where(.num, .td-num, .th-num) {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.glow-v2 :where(th.num, th.td-num, th.th-num) { text-align: right; }

/* 콤마 입력 필드 — 표시는 콤마, 제출은 숫자 (format.js가 처리) */
.glow-v2 :where(input.money-input) {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* ============================================================
   FEAT-DESIGN-UNIFY-COMPONENTS-001 — Input / Select / Button / Table 통일.

   사용자 디자인 시스템 명세:
   - Input/Select: 36px, r-md, border-1, placeholder fg-4, 13/500,
                   focus brand-500 + outline 2px brand-400 inset
                   라벨 12/600 fg-2, gap 6px, 필수 빨강 *
   - Button: 36/28(sm), Primary brand-500/700, Secondary card+border-1,
             Tertiary text-only+hover bg-hover, Danger text danger-500+hover bg danger-50
   - Table: thead bg-subtle 12/600 fg-3, td 13/500 fg-1, padding 12/14,
            숫자 우측+tabular-nums+600, 0/0%/0원 fg-4, 합계행 brand-50+700,
            sticky subheader bg-subtle 12/700

   적용 범위: body 전체 (글로벌 element selector). 페이지 자체 .input
   /.btn-* 클래스(tailwind_head.html) 위에 specificity 0 으로 얹는다.
   ============================================================ */

/* ---------- Input / Select / Textarea ---------- */
body :where(
  input[type="text"], input[type="number"], input[type="email"],
  input[type="password"], input[type="tel"], input[type="search"],
  input[type="url"], input[type="date"], input[type="time"],
  input[type="datetime-local"], input[type="month"], input[type="week"],
  select, textarea
):not(.input-inline):not([type="hidden"]) {
  height: 36px;
  padding: 0 12px;
  border: 1px solid var(--line-strong);
  border-radius: var(--r-md);
  background: var(--surface);
  font-family: inherit;
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-1);
  letter-spacing: var(--tracking);
  transition: border-color 0.12s, outline-color 0.12s;
}
body :where(textarea):not(.input-inline) {
  height: auto;
  min-height: 72px;
  padding: 10px 12px;
  line-height: 1.5;
}
body :where(
  input[type="text"], input[type="number"], input[type="email"],
  input[type="password"], input[type="tel"], input[type="search"],
  input[type="url"], input[type="date"], input[type="time"],
  input[type="datetime-local"], select, textarea
):not(.input-inline)::placeholder {
  color: var(--ink-4);
  font-weight: 500;
}
body :where(
  input[type="text"], input[type="number"], input[type="email"],
  input[type="password"], input[type="tel"], input[type="search"],
  input[type="url"], input[type="date"], input[type="time"],
  input[type="datetime-local"], select, textarea
):not(.input-inline):focus {
  border-color: var(--accent);
  outline: 2px solid var(--accent);
  outline-offset: -3px;
}
body :where(select):not(.input-inline) {
  padding-right: 30px;
  background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 12px 12px;
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
}
/* FEAT-COMMON-READONLY-CURSOR-001 (2026-06-11 의뢰서) +
   FEAT-COMMON-READONLY-BG-001 (2026-06-11 의뢰서 v2):
   color/cursor 1차 삭제 + 이번 background: var(--bg) 한 줄 삭제 → 블록 자체 제거.
   .dp-ym 은 design-system-v3.css 의 background-color: var(--surface) !important 로 흰배경 유지. */

/* 라벨 + 필수 표시 — .field > label / .glow-label */
body :where(.field, .glow-field) > :where(label, .glow-label, .label) {
  display: block;
  margin-bottom: 6px;
  font-size: var(--fs-12);
  font-weight: 600;
  color: var(--ink-2);
  letter-spacing: var(--tracking);
}
body :where(.field, .glow-field) > :where(label, .glow-label, .label) :where(.required, .req)::after,
body :where(label.required, label.req) > span:first-child + *::after { content: ""; }
body :where(label[data-required], .field label[data-required])::after,
body :where(.glow-field--required) > :where(label, .glow-label, .label)::after {
  content: " *";
  color: var(--neg);
  font-weight: 700;
}

/* ---------- Button (4종) ----------
   기존 .btn-primary/.btn-secondary/.btn-outline/.btn-ghost/.btn-danger 위에 명세 정렬.
   페이지가 명시적으로 인라인 스타일을 두지 않은 한 자동 적용. */
body :where(button, a.btn, .btn):where(
  .btn-primary, .btn-brand, button[type="submit"]:not(.btn-secondary):not(.btn-outline):not(.btn-ghost):not(.btn-danger):not(.btn-accent):not(.cancel-link)
) {
  height: 36px;
  padding: 0 14px;
  background: var(--accent);
  color: #fff;
  border: 1px solid var(--accent);
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 600;
  letter-spacing: var(--tracking);
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
}
body :where(button, a.btn, .btn):where(.btn-primary, .btn-brand):hover,
body button[type="submit"]:not(.btn-secondary):not(.btn-outline):not(.btn-ghost):not(.btn-danger):not(.btn-accent):not(.cancel-link):hover {
  background: var(--accent-text);
  border-color: var(--accent-text);
}
body :where(button, a.btn, .btn):where(.btn-secondary, .btn-outline) {
  height: 36px;
  padding: 0 14px;
  background: var(--surface);
  color: var(--ink-1);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 600;
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
}
body :where(button, a.btn, .btn):where(.btn-secondary, .btn-outline):hover {
  background: var(--hover);
  border-color: var(--line-strong);
}
body :where(button, a.btn, .btn):where(.btn-ghost, .btn-tertiary) {
  height: 36px;
  padding: 0 12px;
  background: transparent;
  color: var(--ink-2);
  border: 1px solid transparent;
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 600;
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
}
body :where(button, a.btn, .btn):where(.btn-ghost, .btn-tertiary):hover {
  background: var(--hover);
  color: var(--ink-1);
}
body :where(button, a.btn, .btn):where(.btn-danger) {
  height: 36px;
  padding: 0 12px;
  background: transparent;
  color: var(--neg);
  border: 1px solid transparent;
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 600;
  cursor: pointer;
  transition: background 0.12s;
}
body :where(button, a.btn, .btn):where(.btn-danger):hover {
  background: var(--neg-tint);
}
/* sm 크기 28px */
body :where(.btn-sm, .btn--sm, button.sm, .btn.btn-sm) {
  height: 28px;
  padding: 0 10px;
  font-size: var(--fs-12);
}

/* ---------- Table (글로벌 명세) ----------
   페이지 자체 표 클래스(.usage-table, .master-table, ...)에도 자동 적용. */
body :where(table.table, table.usage-table, table.master-table, table.ded-table,
  table.staff-table, table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.target-daily-table,
  table.target-summary-table, table.gif-sales-table, table.gif-meta-table,
  table.gif-daily-table, table.data-grid
) :where(thead) :where(th) {
  background: var(--subtle);
  color: var(--ink-3);
  font-size: var(--fs-12);
  font-weight: 600;
  letter-spacing: var(--tracking);
  padding: 10px 14px;
}
body :where(table.table, table.usage-table, table.master-table, table.ded-table,
  table.staff-table, table.edu-table, table.meal-result-table, table.att-table,
  table.bank-table, table.target-grid, table.target-day-grid, table.target-daily-table,
  table.target-summary-table, table.gif-sales-table, table.gif-meta-table,
  table.gif-daily-table, table.data-grid
) :where(tbody) :where(td) {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-1);
  padding: 12px 14px;
  letter-spacing: var(--tracking);
}

/* 숫자 컬럼 — 우측 + tabular-nums + 600 */
body :where(table) :where(td.td-num, td.num, th.th-num, th.num) {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}

/* 0 / 0% / 0원 / "-" 흐림 처리 — data-zero="1" 또는 .is-zero 부착 시 */
body :where(table) :where(td.is-zero, td[data-zero="1"]) {
  color: var(--ink-4);
  font-weight: 500;
}

/* 합계 / 소계 행 — M-30 v3.3.3 (2026-05-25): --accent-tint → --subtle (.tbl tr.total spec 일치) */
body :where(table) :where(tr.tr-total, tr.total-row, tr.daily-total-row) :where(td) {
  background: var(--subtle);
  font-weight: 700;
  color: var(--ink-1);
}

/* sticky subheader — 섹션 구분 (.tr-subheader 또는 .group-row) */
body :where(table) :where(tr.tr-subheader, tr.group-row) :where(td, th) {
  position: sticky;
  top: 0;
  background: var(--subtle);
  font-size: var(--fs-12);
  font-weight: 700;
  color: var(--ink-3);
  letter-spacing: var(--tracking);
  z-index: 1;
}

/* 행 hover — 삭제 버튼 표시 (Dirty row 패턴) */
body :where(table tbody tr) :where(.row-delete, .btn-del, .btn-del-tiny) {
  opacity: 0;
  transition: opacity 0.12s;
}
body :where(table tbody tr:hover) :where(.row-delete, .btn-del, .btn-del-tiny),
body :where(table tbody tr:focus-within) :where(.row-delete, .btn-del, .btn-del-tiny) {
  opacity: 1;
}

/* Dirty row 패턴 — 행에 .is-dirty 클래스 부착되면 저장 버튼 슬라이드 인 */
body :where(table tbody tr) :where(.row-save, .btn-save) {
  opacity: 0;
  transform: translateX(4px);
  transition: opacity 0.15s, transform 0.15s;
  pointer-events: none;
}
body :where(table tbody tr.is-dirty) :where(.row-save, .btn-save) {
  opacity: 1;
  transform: translateX(0);
  pointer-events: auto;
}
body :where(table tbody tr.is-dirty) :where(td) {
  background: var(--warn-50);
}

/* ============================================================
   FEAT-DESIGN-UNIFY-PAGEHEADER-001 — PageHeader 통일.

   모든 페이지의 헤더 영역을 동일 시각/구조로. 매크로는
   _partials/page_header.html — CSS 클래스만 여기서 정의한다.
   ============================================================ */
.glow-page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: var(--sp-8);
}
.glow-page-header .phl-main {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.glow-page-header .phl-back {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-12);
  font-weight: 600;
  color: var(--ink-3);
  text-decoration: none;
  margin-bottom: 2px;
  letter-spacing: var(--tracking);
}
.glow-page-header .phl-back:hover { color: var(--ink-1); text-decoration: none; }
.glow-page-header .phl-title-row {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.glow-page-header .phl-title {
  font-size: var(--fs-24);
  font-weight: 700;
  color: var(--ink-1);
  letter-spacing: -0.02em;
  margin: 0;
}
.glow-page-header .phl-subtitle {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-3);
  margin: 0;
  letter-spacing: var(--tracking);
}
.glow-page-header .phl-badge {
  display: inline-flex;
  align-items: center;
  height: 22px;
  padding: 0 10px;
  border-radius: var(--r-pill);
  font-size: var(--fs-12);
  font-weight: 600;
  letter-spacing: var(--tracking);
}
.glow-page-header .phl-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

/* ============================================================
   FEAT-DESIGN-UNIFY-KPICARD-001 — KPI 카드 통일.

   매크로는 _partials/kpi_card.html — CSS 만 여기서 정의.
   ============================================================ */
.glow-kpi-card {
  background: var(--surface);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-xl);
  padding: 16px 20px;
  min-height: 96px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  box-sizing: border-box;
}
.glow-kpi-card__icon {
  color: var(--ink-3);
  margin-bottom: 4px;
  display: inline-flex;
  align-items: center;
}
.glow-kpi-card__icon svg { stroke-width: 1.6; }
.glow-kpi-card__label {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-3);
  letter-spacing: var(--tracking);
}
.glow-kpi-card__value {
  font-size: var(--fs-28);
  font-weight: 700;
  color: var(--ink-1);
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
  line-height: 1.15;
  margin-top: 4px;
}
.glow-kpi-card__unit {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-3);
  margin-left: 4px;
  letter-spacing: var(--tracking);
}
.glow-kpi-card__helper {
  font-size: var(--fs-12);
  font-weight: 500;
  color: var(--ink-3);
  margin-top: auto;
  padding-top: 8px;
  letter-spacing: var(--tracking);
}

/* 강조 카드 — brand-500 solid + 흰 글씨 (한 화면에 1개만) */
.glow-kpi-card--accent {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.glow-kpi-card--accent .glow-kpi-card__icon,
.glow-kpi-card--accent .glow-kpi-card__label,
.glow-kpi-card--accent .glow-kpi-card__value,
.glow-kpi-card--accent .glow-kpi-card__helper { color: #fff; }
.glow-kpi-card--accent .glow-kpi-card__label,
.glow-kpi-card--accent .glow-kpi-card__unit,
.glow-kpi-card--accent .glow-kpi-card__helper { color: rgba(255, 255, 255, 0.82); }
.glow-kpi-card--accent .glow-kpi-card__value { color: #fff; }

/* ============================================================
   FEAT-DESIGN-UNIFY-CALLOUT-001 — Callout(안내 박스) 3 tone.

   매크로는 _partials/callout.html — CSS 만 여기서 정의.
   info / warn / danger — *-50 배경 + *-500 아이콘.
   ============================================================ */
.glow-callout {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 14px 16px;
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 500;
  line-height: 1.55;
  letter-spacing: var(--tracking);
}
.glow-callout__icon {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  margin-top: 1px;
}
.glow-callout__icon svg { stroke-width: 1.8; }
.glow-callout__body { flex: 1; min-width: 0; }
.glow-callout__title {
  font-weight: 700;
  margin-bottom: 4px;
  letter-spacing: var(--tracking);
}
.glow-callout__body a { color: inherit; text-decoration: underline; }

.glow-callout--info {
  background: var(--info-50);
  color: var(--info-500);
}
.glow-callout--info .glow-callout__icon { color: var(--info-500); }

.glow-callout--warn {
  background: var(--warn-50);
  color: var(--warn-500);
}
.glow-callout--warn .glow-callout__icon { color: var(--warn-500); }

.glow-callout--danger {
  background: var(--neg-tint);
  color: var(--neg);
}
.glow-callout--danger .glow-callout__icon { color: var(--neg); }

/* ============================================================
   FEAT-DESIGN-UNIFY-EMPTY-001 — EmptyState 통일.

   매크로는 _partials/empty_state.html — CSS 만 여기서 정의.
   ============================================================ */
.glow-empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 48px 24px;
  background: var(--surface);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-xl);
  text-align: center;
}
.glow-empty-state__icon {
  color: var(--ink-4);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 4px;
}
.glow-empty-state__icon svg { width: 48px; height: 48px; stroke-width: 1.4; }
.glow-empty-state__text {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-3);
  letter-spacing: var(--tracking);
  margin: 0;
  max-width: 360px;
  line-height: 1.55;
}
.glow-empty-state__action { margin-top: 4px; }

/* ============================================================
   FEAT-DESIGN-HANDOFF-PHASE1 (2026-05-16)
   Glow Design System 통일 — 정답지(GLOW_DESIGN_SYSTEM.md) 반영.

   목적:
   - 모든 화면이 V2(Glow 보라) 단일 시스템을 따르도록 글로벌 룰 추가
   - 옛 페이지 전용 표/버튼 클래스를 새 .table/.btn-* 로 흡수
   - .card 단일 규격, KPI 2종, 표 2종(.table/.table-grid)

   스코프:
   - dashboard_shell.html main 에 .glow-v2 클래스 (단계 2) — 그 안의 요소에 적용
   - body 전역에도 element 셀렉터로 일부 fallback
   ============================================================ */

/* ---------- 카드 단일 규격 ---------- */
.glow-v2 .card,
.glow-v2 section.card {
  background: var(--surface);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-xl);
  box-shadow: var(--shadow-sm);
}
.glow-v2 .card-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--sp-4) var(--sp-5);
  border-bottom: 0;  /* §2.3 — 헤더 하단 라인 없음 */
}
.glow-v2 .card-title {
  font-size: var(--fs-16); font-weight: 600; color: var(--ink-1);
  letter-spacing: var(--tracking);
}
.glow-v2 .card-body { padding: var(--sp-5); }
.glow-v2 .card-body--p0 { padding: 0; }
.glow-v2 .card-stack > section.card + section.card,
.glow-v2 .card-stack > * + * { margin-top: var(--sp-4); }

/* ---------- KPI 카드 — value-line 구조 추가 ---------- */
.glow-kpi-card__value-line { display: flex; align-items: baseline; gap: 3px; }
.glow-kpi-card--wide { grid-column: 1 / -1; }
.kpi-grid { display: grid; gap: var(--sp-4); }
.kpi-grid--3 { grid-template-columns: repeat(3, 1fr); }
.kpi-grid--4 { grid-template-columns: repeat(4, 1fr); }
.kpi-grid--5 { grid-template-columns: repeat(5, 1fr); }

/* ---------- 표 통일 (.table) — 옛 14+ 클래스 일괄 흡수 ----------
   매핑된 옛 클래스명을 같이 셀렉터로 받아 별도 마크업 변경 없이 통일된 시각 적용. */
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid, table.ded-empty-table) {
  width: 100%;
  border-collapse: collapse;
  background: var(--surface);
}
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid) :where(th, td) {
  text-align: center;                          /* 결정 #4 — 모두 가운데 정렬 */
  padding: 12px 14px;
  border-right: 1px solid var(--line-strong);
  border-bottom: 1px solid var(--line-strong);
  letter-spacing: var(--tracking);
}
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid) :where(tr) :where(th, td):last-child {
  border-right: 0;
}
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid) :where(tbody tr:last-child) :where(td) {
  border-bottom: 0;
}
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid) :where(thead th) {
  background: var(--subtle);
  color: var(--ink-3);
  font-size: var(--fs-12);
  font-weight: 600;
  padding: 10px 14px;
}
.glow-v2 :where(table.table, table.staff-table, table.usage-table, table.master-table,
  table.ded-table, table.edu-table, table.bank-table, table.target-summary-table,
  table.gif-meta-table, table.gif-sales-table, table.junior-payout-table,
  table.pk-usage-table, table.ad-list-table, table.data-grid) :where(tbody td) {
  font-size: var(--fs-13);
  font-weight: 500;
  color: var(--ink-1);
}

/* ---------- 표 그리드 (.table-grid) — 컴팩트 매트릭스. 옛 5종 흡수 ---------- */
.glow-v2 :where(table.table-grid, table.meal-result-table, table.target-daily-table,
  table.target-day-grid, table.gif-daily-table, table.att-table) {
  width: 100%;
  border-collapse: collapse;
  background: var(--surface);
  table-layout: fixed;
}
.glow-v2 :where(table.table-grid, table.meal-result-table, table.target-daily-table,
  table.target-day-grid, table.gif-daily-table, table.att-table) :where(th, td) {
  text-align: center;
  padding: 6px 8px;
  border-right: 1px solid var(--line-strong);
  border-bottom: 1px solid var(--line-strong);
  letter-spacing: var(--tracking);
  font-size: var(--fs-13);
}
.glow-v2 :where(table.table-grid, table.meal-result-table, table.target-daily-table,
  table.target-day-grid, table.gif-daily-table, table.att-table) :where(tr) :where(th, td):last-child {
  border-right: 0;
}
.glow-v2 :where(table.table-grid, table.meal-result-table, table.target-daily-table,
  table.target-day-grid, table.gif-daily-table, table.att-table) :where(tbody tr:last-child td) {
  border-bottom: 0;
}
.glow-v2 :where(table.table-grid, table.meal-result-table, table.target-daily-table,
  table.target-day-grid, table.gif-daily-table, table.att-table) :where(thead th) {
  background: var(--subtle);
  color: var(--ink-3);
  font-size: var(--fs-12);
  font-weight: 600;
  position: sticky;
  top: 0;
  z-index: 1;
}

/* 합계행 / 0값 흐림 — 양쪽 표 공통.
   M-30 v3.3.2 (2026-05-25): --accent-tint → --subtle (.tbl tr.total spec 일치) */
.glow-v2 table :where(tr.tr-total, tr.total-row, tr.daily-total-row) :where(td) {
  background: var(--subtle);
  font-weight: 700;
  color: var(--ink-1);
}
.glow-v2 table :where(td.is-zero, td[data-zero="1"]) {
  color: var(--ink-4);
  font-weight: 500;
}
.glow-v2 table :where(td.td-num, td.num, th.th-num, th.num) {
  font-variant-numeric: tabular-nums;
}
.glow-v2 table :where(tbody td.td-num, tbody td.num) { font-weight: 600; }

.glow-v2 .table-wrap {
  overflow-x: auto;
  border: 1px solid var(--line-strong);
  border-radius: var(--r-md);
  background: var(--surface);
}

/* ---------- 버튼 4종 — 옛 클래스(.btn-accent, .btn-brand, .btn-save-all,
                                       .glow-finalize-btn-secondary/-danger,
                                       .btn-outline, .btn-tertiary) 흡수 ---------- */
.glow-v2 :where(
  .btn-primary, .btn-brand, .btn-accent, .btn-save-all,
  .btn-secondary, .btn-outline, .glow-finalize-btn-secondary,
  .btn-ghost, .btn-tertiary,
  .btn-danger, .glow-finalize-btn-danger
) {
  height: 36px;
  padding: 0 14px;
  border-radius: var(--r-md);
  font-size: var(--fs-13);
  font-weight: 600;
  letter-spacing: var(--tracking);
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  border: 1px solid transparent;
  cursor: pointer;
  font-family: inherit;
  transition: background 0.12s, border-color 0.12s, color 0.12s;
}
.glow-v2 :where(.btn-primary, .btn-brand, .btn-accent, .btn-save-all) {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}
.glow-v2 :where(.btn-primary, .btn-brand, .btn-accent, .btn-save-all):hover {
  background: var(--accent-text);
  border-color: var(--accent-text);
}
.glow-v2 :where(.btn-secondary, .btn-outline, .glow-finalize-btn-secondary) {
  background: var(--surface);
  color: var(--ink-1);
  border-color: var(--line-strong);
}
.glow-v2 :where(.btn-secondary, .btn-outline, .glow-finalize-btn-secondary):hover {
  background: var(--hover);
  border-color: var(--line-strong);
}
.glow-v2 :where(.btn-ghost, .btn-tertiary) {
  background: transparent;
  color: var(--ink-2);
  border-color: transparent;
}
.glow-v2 :where(.btn-ghost, .btn-tertiary):hover {
  background: var(--hover);
  color: var(--ink-1);
}
.glow-v2 :where(.btn-danger, .glow-finalize-btn-danger) {
  background: transparent;
  color: var(--neg);
  border-color: transparent;
}
.glow-v2 :where(.btn-danger, .glow-finalize-btn-danger):hover {
  background: var(--neg-tint);
}
.glow-v2 .btn-sm,
.glow-v2 :where(.btn-primary, .btn-secondary, .btn-ghost, .btn-danger).btn-sm {
  height: 28px;
  padding: 0 10px;
  font-size: var(--fs-12);
}

/* ---------- 날짜 셀렉트 2종 ---------- */
.glow-v2 .glow-date-picker {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  height: 36px; padding: 0 var(--sp-3);
  border: 1px solid var(--line-strong); border-radius: var(--r-md);
  background: var(--surface);
  font-size: var(--fs-13); font-weight: 500; color: var(--ink-2);
  letter-spacing: var(--tracking); cursor: pointer;
  font-family: inherit;
}
.glow-v2 .glow-date-picker:hover { border-color: var(--line-strong); }
.glow-v2 .glow-date-picker .ic-12 { color: var(--ink-4); }

.glow-v2 .glow-ym-select {
  padding-right: 36px;
  background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 12px 12px;
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
}
.glow-v2 .glow-ym-select--year  { width: 100px; }
.glow-v2 .glow-ym-select--month { width: 84px; }

/* ---------- 사이드바 매장 셀렉트 모노그램 숨김 (스펙 §11.1) ----------
   sidebar.html 에서 직접 삭제하지 않더라도 .glow-v2 안의 모노그램 div는 숨김. */
.glow-v2 .branch-monogram { display: none; }

/* ---------- 페이지 헤더 — 백 링크 + 부제 출력 숨김 (스펙 §2.4) ----------
   매크로 인자 호환성 유지: 마크업은 두되 시각만 숨김 (단계 3에서 매크로도 정리). */
.glow-v2 .glow-page-header .phl-back,
.glow-v2 .glow-page-header .phl-subtitle { display: none; }

/* ============================================================
   FEAT-DESIGNER-30-FIX-001 (2026-05-17) — 디자이너 30개 수정사항.
   공통 14개 글로벌 룰. 우선순위 최상위(파일 끝).
   ============================================================ */

/* 공통-1: a 태그 hover 제거 */
.glow-v2 :where(a:hover) {
  text-decoration: none;
  color: inherit;
  background: inherit;
}

/* 공통-2: 테이블 tr hover 제거 */
.glow-v2 :where(table tr:hover),
.glow-v2 :where(table tbody tr:hover) {
  background: inherit;
}
.glow-v2 :where(table tbody tr:hover td) {
  background: inherit;
}

/* 공통-3: select / input / textarea focus border 변경 제거 */
.glow-v2 :where(select:focus, input:focus, textarea:focus) {
  border-color: var(--line-strong);
  outline: none;
  box-shadow: none;
}

/* 공통-7: 사이드바 메뉴명 17px → 16px */
.glow-v2 nav a {
  font-size: 16px !important;
}

/* v3.3.3 M-30 Plan A (2026-05-25): table.table / table.table-grid 결합 룰 4건 제거.
   .tbl / .tbl-flush / .table / .table-grid 통일 spec 은 _quiet.css M-30 확장 룰 적용. */

/* 공통-11: 카드 타이틀 18px / weight 700 */
.glow-v2 .card .card-title,
.glow-v2 :where(.card-title, .section-title) {
  font-size: 18px;
  font-weight: 700;
}

/* 공통-12: 카드 영역 내 버튼 15px / weight 500 */
.glow-v2 .card :where(button, .btn-primary, .btn-secondary, .btn-ghost, .btn-danger) {
  font-size: 15px;
  font-weight: 500;
}

/* 공통-14: select 배경/화살표 통일 (.glow-ym-select / .glow-date-picker 제외) */
.glow-v2 :where(select):not(.glow-ym-select):not(.glow-date-picker):not(.date-select) {
  background-color: var(--surface);
  background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 12px 12px;
  padding-right: 32px;
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
}

/* ============================
   FEAT-DESIGN-UNIFY-RESET-001
   전역 인터랙션 reset (underline 강제 차단판 — PR #1.5)

   underline 차단만 !important로 강제.
   색·배경 변경은 PR #1 원본 룰 유지 (인라인 페이지에선 인라인이 이김 — 허용).
   ============================ */

/* ============================
   1. a 태그 underline 강제 차단 (1순위)
   페이지 인라인 <style> 의 a:hover { text-decoration: underline } 룰을 무력화
   ============================ */
a, a:link, a:visited, a:hover, a:focus, a:active {
  text-decoration: none !important;
}

/* ============================
   1-b. a 태그 색 — PR #1 원본 유지 (!important 없음)
   인라인 페이지에서 색 변화가 발생할 수 있으나, 활성 표시 보호 위해 허용
   ============================ */
a, a:link, a:visited, a:hover, a:focus, a:active {
  color: inherit;
}

/* ============================
   2. 테이블 행 hover 배경 변경 제거 — PR #1 원본 유지 (!important 없음)
   인라인 페이지에선 인라인 룰이 이김 — 허용
   ============================ */
.table tbody tr:hover,
.table tr:hover,
.table-grid tbody tr:hover,
.table-grid tr:hover {
  background-color: transparent;
  cursor: default;
}

/* ============================
   3. input/select/textarea focus border 변경 제거 — PR #1 원본 유지 (!important 없음)
   ============================ */
input:focus, input:active,
select:focus, select:active,
textarea:focus, textarea:active {
  outline: none;
  box-shadow: none;
}
/* 접근성: 키보드 포커스만 보이도록 */
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--brand-500, #9C65FF);
  outline-offset: 1px;
}

/* ============================
   13. 전역 폰트 — Pretendard 강제 (!important 유지)
   ============================ */
*, *::before, *::after {
  font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;
}
code, pre, kbd, samp, tt, var {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;
}

/* ============================
   FEAT-DESIGN-UNIFY-TYPE-001
   타이포그래피 표준 클래스
   (디자인 시스템 type scale 단일 적용)
   ============================ */

/* 페이지 타이틀 (예: "매출·정산", "고객 관리") */
.gl-page-title {
  font-size: 24px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.010em;
  color: var(--ink-1);
}

/* 카드 타이틀 — 18px / 700 일괄 통일 (PR #6 본격 통합) */
.card-title,
.gl-card-title {
  font-size: 18px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.010em;
  color: var(--ink-1);
  margin: 0;
}

/* 본문 - 큰 (16px) — 사이드바 메뉴 / 강조 본문 */
.gl-body-lg {
  font-size: 16px;
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: -0.010em;
}

/* 본문 - 기본 (14px) — 테이블 셀 / 카드 버튼 / 일반 텍스트 */
.gl-body {
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: -0.010em;
}

/* 메타/캡션 (12px) */
.gl-meta {
  font-size: 12px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: -0.010em;
  color: var(--ink-3);
}

/* KPI 큰 숫자 (38px) */
.gl-kpi-value {
  font-size: 38px;
  font-weight: 700;
  line-height: 1.0;
  letter-spacing: -0.010em;
  color: var(--ink-1);
}

/* KPI 단위 (만원/건/명) — KPI 값 옆 작은 텍스트 */
.gl-kpi-unit {
  font-size: 14px;
  font-weight: 500;
  letter-spacing: -0.010em;
  color: var(--ink-3);
  margin-left: 4px;
}

/* 차트 축 라벨 (9px) */
.gl-axis {
  font-size: 9px;
  font-weight: 600;
  letter-spacing: -0.010em;
  color: var(--ink-4);
}

/* ============================
   Weight 변형 (modifier)
   기본 클래스에 추가 적용 가능
   예: <p class="gl-body gl-text--bold">
   ============================ */
.gl-text--bold   { font-weight: 700; }
.gl-text--strong { font-weight: 600; }
.gl-text--regular { font-weight: 400; }

/* Color 변형 */
.gl-text--muted    { color: var(--ink-3); }
.gl-text--subtle   { color: var(--ink-4); }
.gl-text--brand    { color: var(--brand-500, #9C65FF); }

/* ============================
   FEAT-DESIGN-UNIFY-TABLE-001
   테이블 표준 — 좌측 정렬 통일
   ============================ */

/* v3.3.3 M-30 Plan A (2026-05-25): .table / .table-grid 결합 룰 2건 제거 (14px/500/세로구분선/fixed layout).
   .tbl / .tbl-flush / .table / .table-grid 통일 spec 은 _quiet.css M-30 확장 룰 적용. */

/* 숫자/날짜 — 등폭 (자릿수 정렬) */
.table .cell--num,
.table .cell--count,
.table .cell--pct,
.table .cell--date,
.table th.cell--num,
.table th.cell--count,
.table th.cell--pct,
.table th.cell--date {
  font-variant-numeric: tabular-nums;
}

/* 이름/액션 — 한 줄 고정 (8번) */
.table .cell--name,
.table .cell--action,
.table td .btn-primary,
.table td .btn-secondary,
.table td .btn-ghost,
.table td .btn-danger,
.table td .btn-sm,
.table td .btn-tertiary {
  white-space: nowrap;
}

/* 액션 셀 — 우측 정렬 예외 */
.table .cell--action,
.table th.cell--action {
  text-align: right;
}

/* ============================
   Variant: 카드 인셋
   (좌·우 외곽선만 제거, 세로·가로 라인 유지)
   ============================ */
.table--inset {
  border-left: none;
  border-right: none;
  border-radius: 0;
}

/* 첫 컬럼 — 좌측 외곽선 제거 */
.table--inset thead th:first-child,
.table--inset tbody td:first-child,
.table--inset tfoot th:first-child,
.table--inset tfoot td:first-child {
  border-left: none;
}

/* 마지막 컬럼 — 우측 외곽선 제거 */
.table--inset thead th:last-child,
.table--inset tbody td:last-child,
.table--inset tfoot th:last-child,
.table--inset tfoot td:last-child {
  border-right: none;
}

/* 첫/마지막 셀 padding 유지 (사용자 결정: padding 유지 = 안쪽으로 들어간 형태) */
/* 별도 처리 불필요 — 기본 padding 그대로 사용 */

/* ============================
   FEAT-DESIGN-UNIFY-CARDBUTTON-001
   카드 내 버튼 텍스트 통일 (12번)
   ============================ */

/* 카드 안에 들어간 모든 버튼 — 14px / 500 */
.card .btn-primary,
.card .btn-secondary,
.card .btn-ghost,
.card .btn-danger,
.card .btn-tertiary,
.card-header .btn-primary,
.card-header .btn-secondary,
.card-header .btn-ghost,
.card-header .btn-danger,
.card-body .btn-primary,
.card-body .btn-secondary,
.card-body .btn-ghost,
.card-body .btn-danger {
  font-size: 14px;
  font-weight: 500;
  letter-spacing: -0.010em;
}

/* .btn-sm 은 더 작은 사이즈 — 12번에 해당 안 됨, 기존 유지 */
/* (단, .btn-sm 의 weight 가 들쭉날쭉하다면 별도 PR로 통일) */

/* ============================
   FEAT-DESIGN-UNIFY-SELECT-001
   셀렉트박스 통일 (14번)
   날짜 전용은 .glow-ym-select / .glow-date-picker 로 분리, 영향 없음
   ============================ */

/* 일반 select — 날짜 전용 제외 */
select:not(.glow-ym-select):not(.glow-date-picker),
.gl-select {
  /* 배경 — 화이트 */
  background-color: #FFFFFF;

  /* 우측 화살표 — Lucide chevron-down inline SVG */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231e1b4b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 16px 16px;

  /* 네이티브 화살표 제거 */
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;

  /* 화살표 자리 확보 */
  padding: 8px 36px 8px 12px;

  /* 보더 / 라운드 */
  border: 1px solid var(--border, #E2E8F0);
  border-radius: 8px;

  /* 타이포 */
  font-family: 'Pretendard', sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: -0.010em;
  color: var(--ink-1);

  /* 사이즈 */
  height: 36px;
  min-width: 100px;

  /* 인터랙션 */
  cursor: pointer;
}

/* disabled 상태 */
select:not(.glow-ym-select):not(.glow-date-picker):disabled,
.gl-select:disabled {
  background-color: var(--bg-app, #F8FAFC);
  color: var(--fg-3, #94a3b8);
  cursor: not-allowed;
  opacity: 0.6;
}

/* IE의 네이티브 화살표 제거 */
select:not(.glow-ym-select):not(.glow-date-picker)::-ms-expand {
  display: none;
}

/* ============================
   FEAT-DESIGN-UNIFY-SELECT-002
   PR #7b — specificity 보강 (.glow-v2 스코프 페이지에서 PR #7 룰 완전 적용)
   기존 FEAT-DESIGNER-30-FIX-001 공통-14 (line 1018) 셀렉터와 동일 specificity (0,4,0) +
   카스케이드 후 정의로 이김. .date-select 마크업 사용 0건이라 :not에 포함해도 안전.
   ============================ */
.glow-v2 :where(select):not(.glow-ym-select):not(.glow-date-picker):not(.date-select),
.glow-v2 .gl-select {
  /* 배경 — 화이트 */
  background-color: #FFFFFF;

  /* 우측 화살표 — Lucide chevron-down inline SVG */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231e1b4b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 16px 16px;

  /* 네이티브 화살표 제거 */
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;

  /* 화살표 자리 확보 */
  padding: 8px 36px 8px 12px;

  /* 보더 / 라운드 */
  border: 1px solid var(--border, #E2E8F0);
  border-radius: 8px;

  /* 타이포 */
  font-family: 'Pretendard', sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: -0.010em;
  color: var(--ink-1);

  /* 사이즈 */
  height: 36px;
  min-width: 100px;

  /* 인터랙션 */
  cursor: pointer;
}

/* disabled 상태 — .glow-v2 스코프 */
.glow-v2 :where(select):not(.glow-ym-select):not(.glow-date-picker):not(.date-select):disabled,
.glow-v2 .gl-select:disabled {
  background-color: var(--bg-app, #F8FAFC);
  color: var(--fg-3, #94a3b8);
  cursor: not-allowed;
  opacity: 0.6;
}

/* FIX-STAFF-RESIGN-CHEV-001 (2026-06-11 의뢰서):
   직원관리 (designers/managers/juniors) 의 '퇴사자관리' 접힘 카드 chevron.
   통장거래 카드 .bnk-cat .chev 와 동일 톤/크기/회전. ▶ 이모지 → SVG 교체. */
.staff-resigned-chev { display: inline-block; width: 12px; height: 12px; transition: transform 150ms; color: var(--ink-3); }
/* FEAT-CHEVRON-DIRECTION-001 (2026-06-11): 접힘 ▼ / 펼침 ▲ — 180deg. */
details[open] > summary .staff-resigned-chev { transform: rotate(180deg); }

/* ============================================================
   FEAT-FILE-INPUT-GLOBAL-001 (2026-06-11 의뢰서 v2):
   .file-input — 월마감 통장거래 / 통계 월비용 공용 외형.
   이전: monthly/detail.html 인라인 <style> 한정. 통계 페이지에선 적용 X.
   글로벌 승격 후 두 위치 모두 동일 외형(점선 박스 + 흰 버튼 + 파일명).
   FIX-MERGE-CONFLICT-RESTORE-001 (2026-06-11): PR #202 머지 충돌로 누락된 변경 복원.
   ============================================================ */
.file-input { display: flex; flex-direction: column; gap: 6px; }
.file-input .lbl { font-size: 11.5px; font-weight: 600; color: var(--ink-2); }
.file-input .input { display: flex; align-items: center; gap: 0; border: 1px dashed var(--line-strong); border-radius: 8px; background: var(--bg); padding: 0; height: 36px; overflow: hidden; }
.file-input .input input[type="file"] { flex: 1; padding: 0 12px; font-size: 12.5px; color: var(--ink-3); cursor: pointer; border: 0; background: transparent; font-family: inherit; }
.file-input .input input[type="file"]::file-selector-button { font: inherit; font-size: 11.5px; font-weight: 600; height: 24px; padding: 0 10px; background: var(--surface); color: var(--ink-1); border: 1px solid var(--ink-3); border-radius: 4px; cursor: pointer; margin-right: 12px; }

/* ============================================================
   CHORE-LOGO-SIDEBAR-FIX (2026-06-19): 사이드바 로고 크기/접힘 — 전 레이아웃 공통.
   _v2/layout.html 은 Tailwind 미로드 → Tailwind 유틸(h-7 등) 대신 여기서 정의해
   dashboard_shell(Tailwind 로드) + _v2/layout(미로드) 양쪽에 동일 적용.
   펼침=워드마크(.sidebar-logo) / 접힘(≤900px)=심볼(.brand-symbol).
   ============================================================ */
.glow-v2 .sidebar-logo { display: block; height: 28px; width: auto; }
.glow-v2 .brand .brand-symbol { display: none; }
@media (max-width: 900px) {
  .glow-v2 .sidebar-logo { display: none; }
  .glow-v2 .brand .brand-symbol { display: block; }
}

/* ============================================================
   FIX-2FA-CANCEL-LINK (2026-06-19): 2차 인증 '취소' = 순수 텍스트 링크.
   전역 button[type=submit] 자동 primary 스타일에서 .cancel-link 제외(위 :not 추가) +
   테두리·배경·hover 보라 없이 회색 밑줄 텍스트만. 클릭 동작(로그아웃)은 마크업 그대로.
   ============================================================ */
.cancel-link {
  display: block; width: 100%; text-align: center;
  background: none; border: 0; padding: 0; cursor: pointer;
  font: inherit; font-size: 13px; font-weight: 500; color: #8A8A95;
  text-decoration: underline; text-underline-offset: 2px;
}
.cancel-link:hover { color: #4A4A55; background: none; }
