{
  "$정본": "이 파일이 Provee 디자인의 유일한 정본이다. 화면 코드는 색·간격·글자 크기를 직접 쓰지 않고 항상 여기서 생성된 토큰만 쓴다.",
  "$한번에바뀐다": "이 파일의 값을 바꾸면 안드로이드·iOS 두 앱이 함께 바뀐다. 안드로이드는 이미 wine·ground를 자동 생성해 쓴다(app/build.gradle.kts의 generateDesignTokens). iOS의 DesignTokens.swift는 아직 값을 직접 박아두고 있어 반쪽이다 — JSON에서 생성되게 바꾸는 것이 남은 일이다.",
  "$채우는사람": "값은 디자이너(연주희)가 정한다. 개발은 칸과 이름만 만든다. 아래 값은 현재 화면에서 실제로 쓰고 있는 값을 옮겨 적은 임시 기준선이며, 디자인 시스템이 나오면 통째로 덮어쓴다.",
  "$단위": "숫자는 단위 없는 밀도 독립 값이다. 안드로이드는 dp(글자는 sp), iOS는 point로 그대로 읽는다. 두 앱에 같은 숫자를 쓰면 같은 크기로 보인다.",
  "$구조": "Brand(로고·상징색) → Foundation(색·간격·글자·모서리·그림자·움직임) → Component(부품별 규격). 지마켓 디자인 시스템과 같은 층 구조다.",
  "$갱신": "2026-09-23 · 색 7개만 있던 파일에 Foundation과 Component 층을 추가했다.",
  "$wine": "앱 기본 테마. 안드로이드가 wine 블록에서 ProveeJsonTokens를 자동 생성한다. 생성기가 블록 안의 모든 키를 색으로 바꾸므로 wine·ground 안에는 설명을 적지 말 것. 키 이름을 바꿔도 빌드가 깨진다.",
  "wine": {
    "pageBackground": "#FAF6EC",
    "cardBackground": "#FFFDF8",
    "inkText": "#1E1811",
    "primary": "#8A1C2B",
    "primaryDark": "#5E1220",
    "cardBorder": "#E4DAC7",
    "softBackground": "#F4EFE2"
  },
  "$ground": "필기 도구 색. 학생이 종이에 남기는 획의 색이다. wine과 마찬가지로 이 블록 안에는 설명을 적지 말 것.",
  "ground": {
    "pen": "#221C39",
    "red": "#C0392B",
    "highlighter": "#FFE500",
    "highlighterAlpha": 0.22
  },
  "brand": {
    "$설명": "브랜드 상징. 화면 장식에 함부로 쓰지 않고 로고·강조 한 곳에만 쓴다.",
    "signature": "#8A1C2B",
    "signatureName": "Provee 와인",
    "wordmark": "Provee.",
    "wordmarkFont": "Poppins",
    "wordmarkWeight": 700,
    "wordmarkLetterSpacing": -0.035,
    "$워드마크": "provee.kr과 같은 워드마크. Poppins 700, 자간 -0.035em. 글자는 본문 먹색, 끝의 점만 브랜드 와인.",
    "$남은칸": "로고 여백 규칙, 최소 크기, 금지 사용 예시는 디자이너가 채운다."
  },
  "spacing": {
    "$설명": "여백은 4의 배수만 쓴다. 눈대중 숫자를 화면에 직접 적지 않는다.",
    "xs": 4,
    "sm": 8,
    "md": 12,
    "lg": 16,
    "xl": 24,
    "xxl": 32,
    "xxxl": 48,
    "section": 64,
    "$쓰는곳": "xs=아이콘과 글자 사이 · sm=같은 덩어리 안 · md=카드 안쪽 위아래 · lg=카드 안쪽 기본 · xl=카드끼리 · xxl=화면 좌우 여백 · section=화면 안 큰 단락 사이"
  },
  "radius": {
    "$설명": "모서리 둥글기. 작은 부품일수록 작게.",
    "sm": 8,
    "md": 14,
    "lg": 20,
    "xl": 28,
    "pill": 999,
    "$쓰는곳": "sm=칩·배지 · md=버튼·입력칸 · lg=카드 · xl=시트·대화상자 · pill=동그란 버튼"
  },
  "typography": {
    "$설명": "글자 단계. size는 글자 크기, lineHeight는 줄 간격, weight는 굵기(400 보통 · 500 중간 · 600 약간굵게 · 700 굵게).",
    "$글꼴": "한글 본문은 Noto Sans KR, 손글씨 느낌 표시는 Jua. 수식은 KaTeX가 따로 그린다.",
    "display": {
      "size": 34,
      "lineHeight": 42,
      "weight": 700
    },
    "title": {
      "size": 28,
      "lineHeight": 36,
      "weight": 700
    },
    "heading": {
      "size": 22,
      "lineHeight": 30,
      "weight": 600
    },
    "subheading": {
      "size": 18,
      "lineHeight": 26,
      "weight": 500
    },
    "body": {
      "size": 16,
      "lineHeight": 26,
      "weight": 400
    },
    "bodyStrong": {
      "size": 16,
      "lineHeight": 26,
      "weight": 600
    },
    "caption": {
      "size": 14,
      "lineHeight": 20,
      "weight": 400
    },
    "label": {
      "size": 12,
      "lineHeight": 16,
      "weight": 500
    },
    "question": {
      "size": 21,
      "lineHeight": 32,
      "weight": 700,
      "$설명": "종이 위에 놓이는 문제 본문. 지금 화면이 쓰고 있는 값이다."
    }
  },
  "elevation": {
    "$설명": "떠 있는 정도. y는 아래로 내린 거리, blur는 번짐, alpha는 그림자 진하기.",
    "flat": {
      "y": 0,
      "blur": 0,
      "alpha": 0
    },
    "card": {
      "y": 2,
      "blur": 8,
      "alpha": 0.08
    },
    "raised": {
      "y": 6,
      "blur": 18,
      "alpha": 0.12
    },
    "overlay": {
      "y": 14,
      "blur": 40,
      "alpha": 0.18
    },
    "$쓰는곳": "flat=종이 위 · card=일반 카드 · raised=누를 수 있는 카드·떠 있는 버튼 · overlay=시트·대화상자"
  },
  "status": {
    "$설명": "상태를 알리는 색. 브랜드 와인색과 구분해서 쓴다. 지금은 두 앱의 코드에 같은 값이 각각 박혀 있고, 이 칸이 그 값을 옮겨올 자리다.",
    "correct": "#1F7A4D",
    "wrong": "#C0392B",
    "warning": "#8A5A12",
    "info": "#2F4C5A",
    "$남은일": "생성기가 이 블록도 코드로 내보내게 고치면 두 앱이 한 번에 따라온다."
  },
  "paper": {
    "$설명": "학생이 글씨를 쓰는 종이. 이 앱의 핵심 무대라 따로 둔다.",
    "lineGap": 32,
    "lineColor": "#E4DAC7",
    "penWidthMin": 1,
    "penWidthMax": 10,
    "penWidthStep": 0.5,
    "penWidthDefault": 2.5,
    "zoomMin": 1,
    "zoomMax": 3
  },
  "layout": {
    "$설명": "화면 골격. 태블릿이 기준이고 좁은 화면은 위아래로 접힌다.",
    "screenPadding": 32,
    "cardGap": 24,
    "twoColumnMinWidth": 900,
    "splitInkRatio": 0.4,
    "splitPanelRatio": 0.6,
    "contentMaxWidth": 1400,
    "$설명2": "splitInkRatio는 풀이 화면에서 왼쪽 필기 영역이 차지하는 비율이다. 넓은 화면은 좌우 4대6, 좁은 화면은 위아래로 바뀐다."
  },
  "motion": {
    "$설명": "움직임의 길이(밀리초)와 가속 곡선.",
    "instant": 90,
    "fast": 160,
    "base": 240,
    "slow": 360,
    "easeStandard": "cubic-bezier(0.2, 0, 0, 1)",
    "easeEmphasized": "cubic-bezier(0.2, 0, 0, 1.2)",
    "$원칙": "필기 중에는 애니메이션을 넣지 않는다. 펜이 밀리는 느낌이 나면 안 된다."
  },
  "components": {
    "$설명": "부품별 규격. 화면마다 새로 만들지 않고 여기 정의된 것만 쓴다. 지마켓 디자인 시스템의 Components 층에 해당한다.",
    "$채우기": "status가 '정의됨'이면 두 앱이 같은 규격으로 구현돼 있다는 뜻이다. '초안'과 '비어있음'은 디자이너 확정이 필요하다.",
    "button": {
      "status": "초안",
      "height": 52,
      "paddingX": 24,
      "radius": "radius.md",
      "text": "typography.bodyStrong",
      "variants": [
        "primary",
        "secondary",
        "ghost",
        "danger"
      ],
      "$남은칸": "누를 때·비활성·로딩 상태의 색과 크기"
    },
    "card": {
      "status": "초안",
      "radius": "radius.lg",
      "padding": "spacing.xl",
      "border": "wine.cardBorder",
      "elevation": "elevation.card",
      "variants": [
        "plain",
        "feature",
        "selectable"
      ],
      "$남은칸": "카드 크기를 다르게 섞는 규칙. 지금은 전부 같은 크기라 밋밋하다."
    },
    "chip": {
      "status": "비어있음",
      "$용도": "과목·단원 같은 짧은 꼬리표"
    },
    "badge": {
      "status": "비어있음",
      "$용도": "새 항목·개수 표시"
    },
    "textField": {
      "status": "비어있음",
      "$용도": "검색·답안 타이핑 입력칸"
    },
    "listRow": {
      "status": "비어있음",
      "$용도": "과목 목록·기록 목록의 한 줄"
    },
    "tabs": {
      "status": "비어있음"
    },
    "dialog": {
      "status": "비어있음",
      "$용도": "전체 지우기 확인 같은 물음"
    },
    "sheet": {
      "status": "비어있음",
      "$용도": "아래에서 올라오는 패널"
    },
    "toolbar": {
      "status": "초안",
      "$용도": "펜·지우개·색·굵기 도구 줄"
    },
    "emptyState": {
      "status": "비어있음",
      "$용도": "아직 아무것도 없을 때 보여줄 화면"
    },
    "icon": {
      "status": "비어있음",
      "$문제": "지금 홈 화면이 시스템 이모지를 그대로 쓰고 있다. 기기마다 다르게 보이고 브랜드가 없다. 자체 아이콘 세트가 필요하다.",
      "sizes": [
        16,
        20,
        24,
        32,
        48
      ]
    }
  }
}