@font-face {
  font-family: "Pretendard Variable";
  src: url("fonts/pretendard/PretendardVariable.woff2") format("woff2-variations");
  font-style: normal;
  font-weight: 45 920;
  font-display: swap;
}

:root {
  /* 2026-08-10 H2 월드(대표 승인): 웜 페이퍼 캔버스 + 코발트 주 행동 + 네이비 레일 +
     골드 위치 마커. 그린은 성공 상태에만 남는다. */
  --dv-bg-page: #faf9f6;
  --dv-bg-surface: #ffffff;
  --dv-bg-subtle: #f2f0ec;
  --dv-bg-selected: #e9edf9;
  --dv-text-strong: #14181f;
  --dv-text: #2e3440;
  /* 보조문구. 흰색·subtle·selected·page 네 배경 모두에서 AA(4.5:1)를 통과해야 한다
     (2026-08-09 실측 원칙 유지 — #636b79는 subtle 4.77:1, selected 4.57:1). */
  --dv-text-muted: #636b79;
  /* 카드 경계선. 흰 카드가 페이지 바탕 위에 놓일 때 윤곽을 알려주는 것은 사실상 이 선
     하나다. 1.30:1짜리 선은 화면에서 보이지 않는다(2026-08-09 실측) — 1.87:1 유지. */
  --dv-border: #c9c5bb;
  --dv-border-strong: #767d89;
  --dv-primary: #2c55e0;
  --dv-primary-hover: #2143c0;
  --dv-primary-pressed: #1c3aa8;
  --dv-on-primary: #ffffff;
  --dv-trust: #13294b;
  --dv-trust-soft: #eaeef8;
  --dv-rail-bg: #0f1c31;
  --dv-rail-ink: #c8d2e2;
  --dv-rail-ink-strong: #ffffff;
  --dv-rail-muted: #93a1b8;
  --dv-rail-hover: rgba(255, 255, 255, .08);
  --dv-rail-selected: rgba(255, 255, 255, .12);
  --dv-rail-line: rgba(255, 255, 255, .14);
  --dv-rail-accent: #e8b64c;
  /* 다크 레일 위 상태색. 라이트 표면용 success/danger 는 레일에서 너무 어둡다. */
  --dv-rail-success: #7ee0b8;
  --dv-rail-danger: #ffb4ac;
  --dv-warning-accent: #e8a33d;
  --dv-warning-text: #6d4300;
  --dv-warning-surface: #fff5e4;
  --dv-danger: #b42318;
  --dv-danger-surface: #fef0ee;
  --dv-success-text: #0d5b47;
  --dv-success-surface: #e7f4ee;
  --dv-voice-signal: #5eead4;
  --dv-focus: #2c55e0;
  --dv-font-ui: "Pretendard Variable", Pretendard, system-ui, -apple-system, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
  /* 공고번호·금액 같은 데이터 표기용 고정폭. 화면들이 제각기 스택을 적던 것을 승격(2026-08-12). */
  --dv-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --dv-radius: 8px;
  --dv-shadow-overlay: 0 18px 48px rgba(23, 33, 29, 0.18);
  --dv-shadow-public-proof: 0 24px 64px rgba(20, 51, 81, 0.14);
  --dv-sidebar-width: 264px;
  --dv-sidebar-collapsed: 72px;
  --dv-duration-fast: 160ms;
  --dv-duration: 220ms;
  --dv-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --dv-z-sidebar: 60;
  --dv-z-drawer: 70;
  --dv-z-overlay: 90;

  --bg: var(--dv-bg-page);
  --surface: var(--dv-bg-surface);
  --surface-soft: var(--dv-bg-subtle);
  --ink: var(--dv-text-strong);
  --ink-soft: var(--dv-text);
  --muted: var(--dv-text-muted);
  --line: var(--dv-border);
  --line-strong: var(--dv-border-strong);
  --green: var(--dv-primary);
  --green-dark: var(--dv-primary-hover);
  --green-soft: var(--dv-bg-selected);
  --gold: var(--dv-warning-text);
  --gold-soft: var(--dv-warning-surface);
  --red: var(--dv-danger);
  --red-soft: var(--dv-danger-surface);
  --radius: var(--dv-radius);

  --app-sidebar-w: var(--dv-sidebar-width);
  --app-sidebar-collapsed: var(--dv-sidebar-collapsed);
  --app-bg: var(--dv-bg-page);
  --app-amber: var(--dv-warning-accent);
  --app-coral: var(--dv-danger);
  --app-green: var(--dv-primary);
  --app-green-soft: var(--dv-bg-selected);
  --app-navy: var(--dv-trust);
  --app-ink: var(--dv-text-strong);
  --app-ink2: var(--dv-text);
  --app-muted: var(--dv-text-muted);
  --app-line: var(--dv-border);
  --app-card-shadow: none;
  --app-hover-shadow: none;
}
