/* ============================================================================
   VeriBrain Operations Hub — Design Tokens
   Brand tone: #216E84 (VeriBrain deep teal)
   단일 출처(SSOT). 모든 화면은 이 토큰만 참조한다. raw hex 직접 사용 금지.
   ============================================================================ */

/* ── Web fonts ────────────────────────────────────────────────────────────────
   브랜드 폰트 로컬 제공(시스템 설치 의존 제거). 파일: design-system/fonts/.
   토큰 --font-sans/--font-mono 는 불변 — @font-face 가 폴백 스택 앞단을 채운다. */
@font-face { font-family: "Pretendard"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/Pretendard-Regular.otf") format("opentype"); }
@font-face { font-family: "Pretendard"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/Pretendard-Medium.otf") format("opentype"); }
@font-face { font-family: "Pretendard"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/Pretendard-SemiBold.otf") format("opentype"); }
@font-face { font-family: "Pretendard"; font-style: normal; font-weight: 700; font-display: swap; src: url("fonts/Pretendard-Bold.otf") format("opentype"); }
@font-face { font-family: "Pretendard"; font-style: normal; font-weight: 800; font-display: swap; src: url("fonts/Pretendard-ExtraBold.otf") format("opentype"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/JetBrainsMono-Regular.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/JetBrainsMono-Medium.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/JetBrainsMono-SemiBold.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 700; font-display: swap; src: url("fonts/JetBrainsMono-Bold.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 800; font-display: swap; src: url("fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); }

:root {
  /* ── Brand (primary) — #216E84 중심 틸 스케일 ───────────────────────────── */
  --brand-50:  #eef5f7;
  --brand-100: #d6e8ed;
  --brand-200: #aed2dc;
  --brand-300: #7eb4c3;
  --brand-400: #4f93a8;
  --brand-500: #2e7b92;
  --brand-600: #216e84;   /* ★ brand base */
  --brand-700: #1b596b;
  --brand-800: #174857;
  --brand-900: #133a47;
  --brand:      var(--brand-600);
  --brand-ink:  #ffffff;             /* brand 위 텍스트 */
  --brand-soft: var(--brand-50);     /* brand 틴트 배경 */

  /* ── Accent (secondary) — 따뜻한 앰버, 강조/하이라이트 한정 ───────────────── */
  --accent-600: #c77d2e;
  --accent-500: #d98c3d;
  --accent-soft: #fbefdd;

  /* ── Domain track (검사 트랙 좌보더색 — 캘린더/목록 SSOT) ─────────────────── */
  --track-clinical: var(--brand-600);   /* 파견연구검사 = 브랜드 틸 */
  --track-referral: #8a6d3b;            /* 의뢰검사 = 절제된 브론즈(원색 아님) */

  /* ── Neutral (cool slate, 틸과 페어) ─────────────────────────────────────── */
  --ink:        #15232a;             /* 본문 텍스트 */
  --ink-2:      #3a4a52;             /* 보조 텍스트 */
  --muted:      #647079;             /* 흐린 텍스트/라벨 */
  --line:       #e1e7ea;             /* 기본 보더 */
  --line-strong:#c8d2d7;
  --bg:         #f6f9fa;             /* 페이지 배경 */
  --surface:    #ffffff;             /* 카드/패널 */
  --surface-2:  #f4f7f9;             /* 보조 표면(헤더/줄무늬) */

  /* ── Semantic ────────────────────────────────────────────────────────────── */
  --success:    #2e7d5b;  --success-soft: #e3f3ec;
  --warning:    #b5791e;  --warning-soft: #fbefd7;
  --danger:     #c0492f;  --danger-soft:  #fae5e0;
  --info:       var(--brand-600); --info-soft: var(--brand-50);

  /* ── Typography ──────────────────────────────────────────────────────────── */
  --font-sans: "Pretendard", "Inter", system-ui, -apple-system, "Segoe UI",
               "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", sans-serif;
  --font-mono: "JetBrains Mono", "SFMono-Regular", "Consolas", monospace;
  /* 가독성 위해 스케일 전반 상향(2026-06-22). 토큰명은 레거시 앵커(원래 px), 값이 실제 크기. */
  --fs-11: 12px; --fs-12: 13px; --fs-13: 14px; --fs-14: 15px;
  --fs-16: 17px; --fs-18: 20px; --fs-20: 22px; --fs-24: 26px; --fs-30: 33px;
  --fw-regular: 400; /* @kind font */
  --fw-medium: 500; /* @kind font */
  --fw-semibold: 600; /* @kind font */
  --fw-bold: 700; /* @kind font */
  --fw-black: 800; /* @kind font */
  --lh-tight: 1.2; /* @kind font */
  --lh-base: 1.5; /* @kind font */

  /* ── Spacing (4px 베이스) ────────────────────────────────────────────────── */
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px;
  --sp-5: 20px; --sp-6: 24px; --sp-8: 32px; --sp-10: 40px; --sp-12: 48px;

  /* ── Radius / shadow / motion ──── 절제된 각진 형태 (과한 라운드 금지) ─────── */
  --r-sm: 3px; --r-md: 5px; --r-lg: 6px; --r-xl: 8px; --r-tag: 4px;
  --shadow-sm: 0 1px 2px rgba(19, 58, 71, 0.05);
  --shadow-md: 0 4px 14px rgba(19, 58, 71, 0.07);
  --shadow-lg: 0 12px 32px rgba(19, 58, 71, 0.10);
  --ring: 0 0 0 3px rgba(33, 110, 132, 0.18);   /* focus ring (brand) */
  --ease: cubic-bezier(0.2, 0.6, 0.2, 1); /* @kind other */

  /* ── Layout ──────────────────────────────────────────────────────────────── */
  --sidebar-w: 264px;
  --topbar-h: 60px;
  --content-max: 1320px; /* S7(hifi 폴리시): 핸드오프 시안 확장값 — 데이터 밀집 화면(통계 분해·결과 와이드그리드) 가독 */
}

/* ── 도메인 상태 색 (schema enum ↔ 색) — STATE_AND_PERMISSION 과 1:1 ──────────
   배지 색은 의미(semantic)로 매핑. 원색 금지(브랜드 톤): 긍정=딥틸, 위험/경고는
   채도 낮춘 어두운 톤(의미 구분만 유지), 진행=브랜드 틸, 대기/종결=중립.
   신규 enum 값 추가 시 여기 + STATE 사전 동시 갱신. */
:root {
  /* 상태 톤 (StatusTag 전용 — 베이스 --success/--danger/--warning 과 분리) */
  --st-positive: #1b6b63; --st-positive-soft: #e3efed;   /* 완료·승인·확정·활성 = 딥틸(녹색 아님) */
  --st-neg:      #8c3a2a; --st-neg-soft:      #f2e4df;   /* 취소·회수 = 어두운 brick(톤다운) */
  --st-warn:     #7c5a1d; --st-warn-soft:     #efe9dc;   /* 반려·보완·잠금 = 어두운 ochre(톤다운) */
  --st-review:   #9a6a2e; --st-review-soft:   #f0e6d6;   /* 검토 중 = 어두운 amber-brown(톤다운) */

  /* ScheduleStatus */
  --st-DRAFT:     var(--muted);         --st-DRAFT-soft:     var(--surface-2);
  --st-SCHEDULED: var(--brand-600);     --st-SCHEDULED-soft: var(--brand-50);
  --st-DONE:      var(--st-positive);   --st-DONE-soft:      var(--st-positive-soft);
  --st-CANCELLED: var(--st-neg);        --st-CANCELLED-soft: var(--st-neg-soft);
  --st-ARCHIVED:  var(--ink-2);         --st-ARCHIVED-soft:  #eceff1;
  /* ReportStatus / QcTaskStatus 공통 */
  --st-SUBMITTED: var(--brand-600);     --st-SUBMITTED-soft: var(--brand-50);
  --st-RETURNED:  var(--st-warn);       --st-RETURNED-soft:  var(--st-warn-soft);
  --st-APPROVED:  var(--st-positive);   --st-APPROVED-soft:  var(--st-positive-soft);
  --st-OPEN:      var(--muted);         --st-OPEN-soft:      var(--surface-2);
  --st-IN_REVIEW: var(--brand-600);     --st-IN_REVIEW-soft: var(--brand-50);
  /* QcTaskStatus 8단계 — QC-UX2d(P1) 턴 군 색: 평가자 차례(대기·보완·최종대기)=ochre(warn) · 리뷰어 차례(검토·최종검토)=브랜드 틸 · 확인=positive · 전송=종결중립 */
  --st-MATERIAL_PENDING:     var(--st-warn);       --st-MATERIAL_PENDING-soft:     var(--st-warn-soft);
  --st-SUPPLEMENT_REQUESTED: var(--st-warn);       --st-SUPPLEMENT_REQUESTED-soft: var(--st-warn-soft);
  --st-FINAL_PENDING:        var(--st-warn);       --st-FINAL_PENDING-soft:        var(--st-warn-soft);
  --st-FINAL_REVIEW:         var(--brand-600);     --st-FINAL_REVIEW-soft:         var(--brand-50);
  --st-CONFIRMED:            var(--st-positive);   --st-CONFIRMED-soft:            var(--st-positive-soft);
  --st-SYNCED:               var(--ink-2);         --st-SYNCED-soft:               #eceff1;
  /* AccessCodeStatus */
  --st-ACTIVE:    var(--st-positive);   --st-ACTIVE-soft:    var(--st-positive-soft);
  --st-EXPIRED:   var(--muted);         --st-EXPIRED-soft:   var(--surface-2);
  --st-REVOKED:   var(--st-neg);        --st-REVOKED-soft:   var(--st-neg-soft);
  --st-LOCKED:    var(--st-warn);       --st-LOCKED-soft:    var(--st-warn-soft);
  /* LifecycleStatus (프로토콜·배정 매핑 — PENDING/ACTIVE/CLOSE) */
  --st-PENDING:   var(--st-warn);       --st-PENDING-soft:   var(--st-warn-soft);
  --st-CLOSE:     var(--muted);         --st-CLOSE-soft:     var(--surface-2);
}
