:root{
  /* ── Brand: Shinhan Blue (#0046FF, the single mandated CI colour) ───────── */
  --shinhan-blue: #0046ff;
  --blue-50:#edf2ff; --blue-100:#dbe4ff; --blue-200:#b8c9ff; --blue-300:#8aa5ff;
  --blue-400:#4d78ff; --blue-500:#0046ff; --blue-600:#003adb; --blue-700:#0030b3;
  --blue-800:#00227d; --blue-900:#001a5e;

  /* ── Heritage gold (original CI, used for premium / PWM tiers only) ─────── */
  --gold-50:#fbf3e5; --gold-100:#f3e3c2; --gold-300:#d9b871; --gold-500:#b78d3f;
  --gold-700:#8a682c;

  /* ── Neutrals: cool-tinted greys ───────────────────────────────────────── */
  --neutral-0:#ffffff;  --neutral-50:#f7f8fa;  --neutral-100:#eff1f5;
  --neutral-200:#e2e5eb; --neutral-300:#cbd0d9; --neutral-400:#a3aab8;
  --neutral-500:#7a8394; --neutral-600:#5a6273; --neutral-700:#3e4553;
  --neutral-800:#262b36; --neutral-900:#14171f;

  /* ── Semantic hues. In Korean retail banking red = 출금/감소, blue = 입금/증가 */
  --red-50:#fdedec;  --red-100:#fbd9d7; --red-500:#e5342e; --red-600:#c62622; --red-700:#9e1c19;
  --green-50:#e6f6f0; --green-100:#c7ebdd; --green-500:#00a171; --green-600:#00815b;
  --amber-50:#fff5e5; --amber-500:#f5a623; --amber-600:#c9821a;

  /* ── Semantic aliases — always author against these ─────────────────────── */
  --text-strong: var(--neutral-900);
  --text-body: var(--neutral-800);
  --text-muted: var(--neutral-600);
  --text-subtle: var(--neutral-500);
  --text-disabled: var(--neutral-400);
  --text-on-brand: var(--neutral-0);
  --text-brand: var(--shinhan-blue);
  --text-link: var(--blue-600);
  --text-credit: var(--blue-600);   /* 입금 */
  --text-debit: var(--red-500);     /* 출금 */

  --surface-page: var(--neutral-50);
  --surface-card: var(--neutral-0);
  --surface-sunken: var(--neutral-100);
  --surface-brand: var(--shinhan-blue);
  --surface-brand-soft: var(--blue-50);
  --surface-inverse: var(--neutral-900);
  --surface-overlay: rgba(20,23,31,.55);

  --border-subtle: var(--neutral-200);
  --border-default: var(--neutral-300);
  --border-strong: var(--neutral-400);
  --border-brand: var(--shinhan-blue);
  --border-danger: var(--red-500);

  --state-hover-brand: var(--blue-600);
  --state-press-brand: var(--blue-700);
  --state-hover-neutral: var(--neutral-100);
  --state-press-neutral: var(--neutral-200);
  --focus-ring: rgba(0,70,255,.32);

  --status-success: var(--green-500);
  --status-warning: var(--amber-500);
  --status-danger: var(--red-500);
  --status-info: var(--shinhan-blue);
}
