@bestow-ui/react 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -335,6 +335,7 @@ interface BestowMessages {
335
335
  /** Stepper — 목록 이름 "진행 단계", 완료한 단계에 붙는 "완료" (1.0 이후 추가, 선택 키) */
336
336
  steps?: string;
337
337
  stepCompleted?: string;
338
+ stepInProgress?: string;
338
339
  /**
339
340
  * FileUpload (1.0 이후 추가, 선택 키) — "파일 선택", "또는 여기로 끌어다 놓으세요", "선택한 파일", "○○ 삭제",
340
341
  * "파일 2개 선택됨", "○○ 삭제됨", 크기·형식·개수 초과 안내
@@ -1061,6 +1062,13 @@ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'col
1061
1062
  * `disabled` 와 달리 포커스는 유지된다.
1062
1063
  */
1063
1064
  loading?: boolean;
1065
+ /**
1066
+ * 자식 요소(라우터 링크 등)에 버튼 모양과 속성을 입혀 그대로 렌더링한다. 서버 컴포넌트에서도 쓸 수 있다.
1067
+ * 페이지를 이동하는 주요 동작에 쓰고, 자식은 요소 하나여야 한다.
1068
+ * `disabled` 면 `aria-disabled` 를 붙이고 Tab 순서에서 빼며 클릭을 막는다. 휠 클릭은 막지 못하니 링크는 되도록 비활성으로 두지 않는다.
1069
+ * @example <Button asChild><NextLink href="/signup">시작하기</NextLink></Button>
1070
+ */
1071
+ asChild?: boolean;
1064
1072
  }
1065
1073
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
1066
1074
 
@@ -1475,6 +1483,8 @@ interface IconButtonProps extends Omit<ButtonProps, 'startIcon' | 'endIcon' | 'f
1475
1483
  loading?: boolean;
1476
1484
  /** 버튼이 하는 일을 설명하는 이름 (예: "삭제"). 아이콘만으로는 스크린리더가 알 수 없어 필수다 */
1477
1485
  'aria-label': string;
1486
+ /** 자식 요소(라우터 링크 등)에 모양과 속성을 입혀 그대로 렌더링한다. 아이콘은 그 요소 안에 넣는다 */
1487
+ asChild?: boolean;
1478
1488
  /** 아이콘. 크기는 버튼 size 에 맞춰 자동으로 조절된다 (sm 16px · md 20px · lg 24px) */
1479
1489
  children: ReactNode;
1480
1490
  }
@@ -1958,6 +1968,11 @@ interface StepperProps extends Omit<OlHTMLAttributes<HTMLOListElement>, 'childre
1958
1968
  current: number;
1959
1969
  /** horizontal(기본): 가로로 나란히, 이름은 원 아래. vertical: 세로로, 이름은 원 오른쪽(설명이 길 때) */
1960
1970
  orientation?: 'horizontal' | 'vertical';
1971
+ /**
1972
+ * 현재 단계가 진행 중이다(AI 응답·업로드 처리 등). 원 안에 스피너를 보여 주고 이름에 "(진행 중)" 을 함께 읽는다.
1973
+ * 단계가 바뀌는 순간을 스크린리더에 알리려면 `role="status"` 영역을 따로 둔다.
1974
+ */
1975
+ loading?: boolean;
1961
1976
  /** 목록 이름 (기본 "진행 단계") */
1962
1977
  'aria-label'?: string;
1963
1978
  }
package/dist/index.d.ts CHANGED
@@ -335,6 +335,7 @@ interface BestowMessages {
335
335
  /** Stepper — 목록 이름 "진행 단계", 완료한 단계에 붙는 "완료" (1.0 이후 추가, 선택 키) */
336
336
  steps?: string;
337
337
  stepCompleted?: string;
338
+ stepInProgress?: string;
338
339
  /**
339
340
  * FileUpload (1.0 이후 추가, 선택 키) — "파일 선택", "또는 여기로 끌어다 놓으세요", "선택한 파일", "○○ 삭제",
340
341
  * "파일 2개 선택됨", "○○ 삭제됨", 크기·형식·개수 초과 안내
@@ -1061,6 +1062,13 @@ interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'col
1061
1062
  * `disabled` 와 달리 포커스는 유지된다.
1062
1063
  */
1063
1064
  loading?: boolean;
1065
+ /**
1066
+ * 자식 요소(라우터 링크 등)에 버튼 모양과 속성을 입혀 그대로 렌더링한다. 서버 컴포넌트에서도 쓸 수 있다.
1067
+ * 페이지를 이동하는 주요 동작에 쓰고, 자식은 요소 하나여야 한다.
1068
+ * `disabled` 면 `aria-disabled` 를 붙이고 Tab 순서에서 빼며 클릭을 막는다. 휠 클릭은 막지 못하니 링크는 되도록 비활성으로 두지 않는다.
1069
+ * @example <Button asChild><NextLink href="/signup">시작하기</NextLink></Button>
1070
+ */
1071
+ asChild?: boolean;
1064
1072
  }
1065
1073
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
1066
1074
 
@@ -1475,6 +1483,8 @@ interface IconButtonProps extends Omit<ButtonProps, 'startIcon' | 'endIcon' | 'f
1475
1483
  loading?: boolean;
1476
1484
  /** 버튼이 하는 일을 설명하는 이름 (예: "삭제"). 아이콘만으로는 스크린리더가 알 수 없어 필수다 */
1477
1485
  'aria-label': string;
1486
+ /** 자식 요소(라우터 링크 등)에 모양과 속성을 입혀 그대로 렌더링한다. 아이콘은 그 요소 안에 넣는다 */
1487
+ asChild?: boolean;
1478
1488
  /** 아이콘. 크기는 버튼 size 에 맞춰 자동으로 조절된다 (sm 16px · md 20px · lg 24px) */
1479
1489
  children: ReactNode;
1480
1490
  }
@@ -1958,6 +1968,11 @@ interface StepperProps extends Omit<OlHTMLAttributes<HTMLOListElement>, 'childre
1958
1968
  current: number;
1959
1969
  /** horizontal(기본): 가로로 나란히, 이름은 원 아래. vertical: 세로로, 이름은 원 오른쪽(설명이 길 때) */
1960
1970
  orientation?: 'horizontal' | 'vertical';
1971
+ /**
1972
+ * 현재 단계가 진행 중이다(AI 응답·업로드 처리 등). 원 안에 스피너를 보여 주고 이름에 "(진행 중)" 을 함께 읽는다.
1973
+ * 단계가 바뀌는 순간을 스크린리더에 알리려면 `role="status"` 영역을 따로 둔다.
1974
+ */
1975
+ loading?: boolean;
1961
1976
  /** 목록 이름 (기본 "진행 단계") */
1962
1977
  'aria-label'?: string;
1963
1978
  }
package/dist/shared.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  toISODate,
18
18
  vars,
19
19
  visuallyHidden
20
- } from "./chunk-YYLDXZWR.js";
20
+ } from "./chunk-MP5VSIWQ.js";
21
21
 
22
22
  // src/theme/color.ts
23
23
  import { darkColors, lightColors, palette } from "@bestow-ui/tokens";
@@ -200,6 +200,7 @@ var en = {
200
200
  increment: "Increase",
201
201
  steps: "Progress",
202
202
  stepCompleted: "completed",
203
+ stepInProgress: "in progress",
203
204
  fileSelect: "Choose files",
204
205
  fileDropHint: "or drag and drop here",
205
206
  fileList: "Selected files",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/color.ts","../src/theme/presets.ts","../src/i18n/en.ts","../src/shared.ts","../src/utils/responsive.ts","../src/components/AgreementGroup/agreements.ts","../src/components/Badge/Badge.tsx","../src/components/Badge/Badge.css.ts","../src/components/Card/Card.tsx","../src/components/Card/Card.css.ts","../src/components/Container/Container.tsx","../src/components/Container/Container.css.ts","../src/components/DescriptionList/DescriptionList.tsx","../src/components/DescriptionList/DescriptionList.css.ts","../src/components/Divider/Divider.tsx","../src/components/Divider/Divider.css.ts","../src/components/FormField/FormField.tsx","../src/components/Grid/Grid.tsx","../src/components/Grid/Grid.css.ts","../src/components/Progress/Progress.tsx","../src/components/Progress/Progress.css.ts","../src/components/Stack/Stack.tsx","../src/components/Stack/Stack.css.ts","../src/components/Typography/Typography.tsx","../src/components/Typography/Typography.css.ts","../src/components/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["// 대표색 하나로 intent 색 세트를 만드는 색 계산 유틸.\n// OKLCH(사람이 느끼는 밝기에 가까운 색 공간)에서 밝기를 조절하고, WCAG 대비(4.5:1)를 만족하도록 글자색을 찾는다.\nimport { darkColors, lightColors, palette } from '@bestow-ui/tokens';\nimport type { ThemeInput } from './createTheme';\n\ntype Rgb = [number, number, number]; // 0~1, sRGB\ninterface Oklch {\n l: number;\n c: number;\n h: number;\n}\n\nexport function parseHex(hex: string): Rgb {\n const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!m) throw new Error(`올바른 hex 색이 아니에요: \"${hex}\" (예: \"#7c3aed\")`);\n let h = m[1]!;\n if (h.length === 3) h = h.replace(/./g, (c) => c + c);\n return [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16) / 255) as Rgb;\n}\n\nexport function toHex(rgb: Rgb): string {\n return `#${rgb\n .map((v) =>\n Math.round(Math.min(1, Math.max(0, v)) * 255)\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`;\n}\n\nconst toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);\nconst fromLinear = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055);\n\nfunction rgbToOklch([r, g, b]: Rgb): Oklch {\n const [lr, lg, lb] = [toLinear(r), toLinear(g), toLinear(b)];\n const l_ = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n const m_ = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n const s_ = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;\n const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;\n const bb = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;\n return { l: L, c: Math.hypot(a, bb), h: Math.atan2(bb, a) };\n}\n\nfunction oklchToRgbUnclamped({ l, c, h }: Oklch): Rgb {\n const a = c * Math.cos(h);\n const b = c * Math.sin(h);\n const l_ = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m_ = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s_ = (l - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),\n fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),\n fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_),\n ];\n}\n\nconst inGamut = (rgb: Rgb) => rgb.every((v) => v >= -1e-4 && v <= 1 + 1e-4);\n\n/** sRGB 범위를 벗어나면 채도(c)를 줄여 범위 안으로 맞춘다. */\nfunction oklchToRgb(color: Oklch): Rgb {\n const l = Math.min(1, Math.max(0, color.l));\n let rgb = oklchToRgbUnclamped({ ...color, l });\n if (inGamut(rgb)) return rgb;\n let lo = 0;\n let hi = color.c;\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2;\n if (inGamut(oklchToRgbUnclamped({ l, c: mid, h: color.h }))) lo = mid;\n else hi = mid;\n }\n rgb = oklchToRgbUnclamped({ l, c: lo, h: color.h });\n return rgb;\n}\n\nfunction luminance([r, g, b]: Rgb): number {\n return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** WCAG 대비율 (1 ~ 21) */\nexport function contrastRatio(a: string, b: string): number {\n const [la, lb] = [luminance(parseHex(a)), luminance(parseHex(b))];\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** fg 를 alpha 만큼 bg 위에 겹친 결과 색 */\nfunction blend(fg: string, alpha: number, bg: string): string {\n const [f, b] = [parseHex(fg), parseHex(bg)];\n return toHex(f.map((v, i) => v * alpha + b[i]! * (1 - alpha)) as Rgb);\n}\n\nconst withL = (base: Oklch, l: number, c = base.c) => toHex(oklchToRgb({ l, c, h: base.h }));\n\n/** 대상 배경들 위에서 대비 4.5 를 넘을 때까지 밝기를 step 만큼 옮긴다. */\nfunction findReadable(base: Oklch, startL: number, step: number, backgrounds: string[]): string {\n let l = startL;\n for (let i = 0; i < 40; i++) {\n const hex = withL(base, l);\n if (backgrounds.every((bg) => contrastRatio(hex, bg) >= 4.5)) return hex;\n l = Math.min(1, Math.max(0, l + step));\n }\n return step < 0 ? palette.black : palette.white;\n}\n\n/**\n * solid 의 hover 색: 밝기를 delta 만큼 옮기되, 그 결과에서 글자색(contrast) 대비가 4.5 아래로 떨어지면 반대 방향으로 옮긴다.\n * (예: 다크 모드에서 파란 버튼을 밝게 하면 흰 글자 대비가 떨어지므로 어둡게 한다)\n */\nfunction hoverFor(base: Oklch, delta: number, contrast: string): string {\n const preferred = withL(base, Math.min(1, Math.max(0, base.l + delta)));\n if (contrastRatio(contrast, preferred) >= 4.5) return preferred;\n return withL(base, Math.min(1, Math.max(0, base.l - delta)));\n}\n\n/**\n * solid 배경과 그 위 글자색(contrast). 흰 글자가 4.5 를 넘으면 흰색, 아니면 짙은 글자.\n * 둘 다 4.5 미만인 중간 밝기 색(초록 #059669, 주황 #ea580c 등)은 solid 의 밝기를 가장 적게 옮겨 4.5 를 맞춘다\n * (같은 거리면 어둡게 + 흰 글자를 먼저 고른다).\n */\nfunction solidWithContrast(color: string): { solid: string; contrast: string } {\n const white = palette.white;\n const dark = palette.gray[900];\n if (contrastRatio(white, color) >= 4.5) return { solid: color, contrast: white };\n if (contrastRatio(dark, color) >= 4.5) return { solid: color, contrast: dark };\n const base = rgbToOklch(parseHex(color));\n for (let delta = 0.005; delta <= 1; delta += 0.005) {\n const darker = withL(base, Math.max(0, base.l - delta));\n if (contrastRatio(white, darker) >= 4.5) return { solid: darker, contrast: white };\n const lighter = withL(base, Math.min(1, base.l + delta));\n if (contrastRatio(dark, lighter) >= 4.5) return { solid: lighter, contrast: dark };\n }\n return { solid: palette.black, contrast: white };\n}\n\nconst rgba = (hex: string, alpha: number) => {\n const [r, g, b] = parseHex(hex).map((v) => Math.round(v * 255));\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info';\n\n/**\n * 대표색 하나로 intent(primary 등)의 라이트·다크 색 세트를 만든다. 결과는 createTheme 에 넘긴다.\n * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다). 단 흰 글자·짙은 글자 모두\n * 대비 4.5:1 이 안 나오는 중간 밝기 색이면 4.5 가 나올 만큼만 밝기를 옮긴다.\n * - text 와 contrast(solid 위 글자색)는 WCAG AA 대비 4.5:1 을 만족하도록 계산한다.\n * - intent 가 'primary' 면 포커스 링 색(border.focus)도 함께 바꾼다.\n *\n * @example createTheme(createIntentColors('primary', '#7c3aed'))\n */\nexport function createIntentColors(intent: IntentName, color: string): ThemeInput {\n const input = toHex(parseHex(color));\n const base = rgbToOklch(parseHex(input));\n\n // 라이트\n const lightSubtle = withL(base, 0.97, Math.min(base.c, 0.12) * 0.3);\n const lightSubtleHover = withL(base, 0.93, Math.min(base.c, 0.12) * 0.45);\n const { solid, contrast: lightContrast } = solidWithContrast(input);\n const light = {\n solid,\n solidHover: hoverFor(rgbToOklch(parseHex(solid)), -0.06, lightContrast),\n contrast: lightContrast,\n subtle: lightSubtle,\n subtleHover: lightSubtleHover,\n text: findReadable(base, Math.min(base.l, 0.55), -0.02, [lightColors.bg.default, lightSubtle, lightSubtleHover]),\n };\n\n // 다크\n const darkBg = darkColors.bg.default;\n const { solid: darkSolid, contrast: darkContrast } = solidWithContrast(base.l < 0.5 ? withL(base, 0.55) : input);\n const darkBase = rgbToOklch(parseHex(darkSolid));\n const darkSubtleOnBg = blend(darkSolid, 0.16, darkBg);\n const darkSubtleHoverOnBg = blend(darkSolid, 0.26, darkBg);\n const dark = {\n solid: darkSolid,\n solidHover: hoverFor(darkBase, 0.06, darkContrast),\n contrast: darkContrast,\n subtle: rgba(darkSolid, 0.16),\n subtleHover: rgba(darkSolid, 0.26),\n text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg]),\n };\n\n // primary 는 포커스 링(border.focus)도 브랜드 색을 따라가게 한다. 다크는 어두운 배경에서 잘 보이도록 solid 보다 밝게.\n // 포커스 링은 그래픽이라 배경과 3:1 이상이어야 한다(WCAG 1.4.11). 노랑·하늘색처럼 밝은 색은 라이트에서 미달이므로\n // 그때는 배경 대비 4.5:1 이 보장된 text 색을 쓴다.\n const focusOn = (candidate: string, fallback: string, bg: string) =>\n contrastRatio(candidate, bg) >= 3 ? candidate : fallback;\n const focus =\n intent === 'primary'\n ? {\n light: { border: { focus: focusOn(light.solid, light.text, lightColors.bg.default) } },\n dark: {\n border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) },\n },\n }\n : undefined;\n\n return {\n light: { color: { [intent]: light, ...focus?.light } },\n dark: { color: { [intent]: dark, ...focus?.dark } },\n } as ThemeInput;\n}\n","import type { ThemeInput } from './createTheme';\n\n/**\n * 입력 칸·체크 컨트롤 테두리를 배경과 3:1 이상으로 올리는 테마 입력 (WCAG 1.4.11 비텍스트 대비) — 2.0 에서 기본값이 될 예정.\n * - 입력 칸(border.input): 기본 border.default 는 흰 배경과 1.3:1. hover 는 테두리보다 더 진하게(다크는 더 밝게).\n * - Checkbox·Radio 테두리, 꺼진 Switch, Stepper 예정 단계(border.control): 기본 border.strong 은 라이트 흰 배경과 2.07:1.\n *\n * @example\n * <ThemeProvider overrides={createTheme(strongInputBorders)}>…</ThemeProvider>\n * createTheme(createIntentColors('primary', '#7c3aed'), strongInputBorders) // 브랜드 테마와 함께\n */\n// 색은 palette 를 import 하지 않고 값으로 적는다 — `palette.gray[600]` 같은 속성 읽기는 번들러가 지우지 못해,\n// 이 값을 쓰지 않는 앱에도 tokens 전체가 딸려 왔다(\"앱 기본\" +460 B). palette 와 같은지는 presets.test.ts 가 확인한다.\nexport const strongInputBorders: ThemeInput = /* @__PURE__ */ Object.freeze({\n // 라이트: gray600 / gray700 — 흰 배경 5.18:1, bg.subtle(gray50) 4.91:1\n // 체크 컨트롤: gray600 — 흰 배경 5.18:1\n light: { color: { border: { input: '#666e76', inputHover: '#495057', control: '#666e76' } } },\n // 다크: gray500 / gray300 — gray600 은 bg.subtle(gray900) 위에서 2.98:1 이라 한 단계 밝게. bg.default 8.57:1, bg.subtle 7.43:1\n // 체크 컨트롤: gray500 — 다크 기본값(border.strong)과 같다(이미 8.57:1)\n dark: { color: { border: { input: '#adb5bd', inputHover: '#dee2e6', control: '#adb5bd' } } },\n});\n","import type { BestowMessages } from './LocaleProvider';\n\nconst WEEKDAYS_LONG = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] as const;\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n] as const;\n\n/**\n * 영어 문구. `<LocaleProvider messages={en}>` 로 쓴다. 따로 import 할 때만 번들에 들어간다.\n * 한국 서비스 전용 부품(사업자등록번호 등)의 문구도 영어로 바뀌지만 서식(하이픈 위치 등)은 그대로다.\n */\nexport const en: BestowMessages = {\n close: 'Close',\n loading: 'Loading',\n notifications: 'Notifications',\n breadcrumb: 'Breadcrumb',\n pagination: 'Pagination',\n paginationPrevious: 'Previous page',\n paginationNext: 'Next page',\n paginationPage: (page) => `Page ${page}`,\n newWindow: '(opens in a new window)',\n noResults: 'No results',\n openList: 'Show options',\n clearSelection: 'Clear selection',\n skipToContent: 'Skip to main content',\n decrement: 'Decrease',\n increment: 'Increase',\n steps: 'Progress',\n stepCompleted: 'completed',\n fileSelect: 'Choose files',\n fileDropHint: 'or drag and drop here',\n fileList: 'Selected files',\n fileRemove: (name) => `Remove ${name}`,\n filesSelected: (count) => `${count} ${count === 1 ? 'file' : 'files'} selected`,\n fileRemoved: (name) => `${name} removed`,\n fileTooLarge: (name, maxSize) => `${name}: files must be ${maxSize} or smaller.`,\n fileTypeNotAllowed: (name) => `${name}: this file type is not allowed.`,\n fileTooMany: (maxFiles) => `You can upload up to ${maxFiles} files.`,\n dateRangeStart: 'Start date',\n dateRangeEnd: 'End date',\n dateRangePresets: 'Quick select',\n errorSummaryTitle: (count) => `There ${count === 1 ? 'is 1 problem' : `are ${count} problems`} with your answers`,\n rangeStart: 'minimum',\n rangeEnd: 'maximum',\n agreeAll: 'Agree to all',\n required: 'Required',\n optional: 'Optional',\n show: 'View',\n hide: 'Hide',\n verificationCode: 'Verification code',\n verificationCodeHint: (length, type) => `Enter the ${length}-${type === 'numeric' ? 'digit' : 'character'} code.`,\n resend: 'Resend',\n verificationExpired: 'The code has expired. Please request a new one.',\n phoneNumber: 'Phone number',\n businessNumber: 'Business registration number',\n businessNumberInvalid: 'This business registration number is not valid. Please check it again.',\n businessNumberIncomplete: 'Enter all 10 digits.',\n residentNumber: 'Resident registration number',\n residentNumberFront: 'First 6 digits',\n residentNumberBack: 'Last 7 digits',\n residentNumberBackFirst: 'First digit of the second part',\n residentNumberInvalid: 'This number is not valid. Check the date of birth and the first digit of the second part.',\n residentNumberIncomplete: (digits) => `Enter all ${digits} digits.`,\n amount: 'Amount',\n currencyUnit: 'KRW',\n address: 'Address',\n addressSearch: 'Find address',\n addressSearchDescription: 'Search by road name, building name, or lot number.',\n postalCode: 'Postal code',\n baseAddress: 'Address',\n baseAddressPlaceholder: 'Select \"Find address\" to choose an address',\n detailAddress: 'Address line 2',\n detailAddressPlaceholder: 'Apartment, suite, unit, etc.',\n addressLoading: 'Loading address search',\n addressLoadError: 'Could not load address search. Please try again later.',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,\n weekdaysShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n weekdaysLong: WEEKDAYS_LONG,\n dayLabel: (date, weekdayLong) =>\n `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,\n holiday: 'holiday',\n today: 'today',\n date: 'Date',\n openCalendar: 'Choose date',\n calendar: 'Calendar',\n dateInvalid: 'This date does not exist.',\n dateUnavailable: 'This date is not available.',\n dateIncomplete: 'Enter the date as YYYY-MM-DD.',\n};\n","/**\n * 서버 컴포넌트에서도 부를 수 있는 함수·값·컴포넌트 (hook·Context·Radix 를 쓰지 않는 모듈만).\n * 빌드(ESM)에서 \"use client\" 가 붙지 않는 파일로 나가, Next.js 서버 컴포넌트에서 createTheme() 등을 바로 호출할 수 있다.\n * 여기에 넣는 모듈은 React hook(서버에서도 되는 useId 제외)·createContext·Radix·이벤트 핸들러·useMessages 를 쓰면 안 된다\n * (서버에서 실행됨). 컴포넌트에 이런 것을 더하게 되면 client.ts 로 옮긴다 — 같은 이름을 양쪽에서 export 하면 안 된다.\n */\nexport { vars, themeClass, type ThemeMode, type ThemeName, type ThemeTokens } from './theme/contract.css';\nexport { createIntentColors, contrastRatio, type IntentName } from './theme/color';\nexport {\n createTheme,\n type BestowTheme,\n type DeepPartial,\n type ThemeInput,\n type ThemeOverrides,\n} from './theme/createTheme';\nexport { strongInputBorders } from './theme/presets';\nexport { en } from './i18n/en';\n// 한국 서비스 서식·검증 함수는 @bestow-ui/korean-utils 로 옮겼다(1.6). 예전처럼 여기서도 같은 이름으로 쓸 수 있게 다시 export 한다.\nexport {\n formatBusinessNumber,\n formatKoreanAmount,\n formatKoreanDate,\n formatPhoneNumber,\n isValidBusinessNumber,\n} from '@bestow-ui/korean-utils';\n// 1.7 에 korean-utils 에 추가한 주민번호·마스킹 함수 — react 만 설치한 사용자도 같은 이름으로 쓴다\nexport {\n formatResidentNumber,\n isValidResidentNumber,\n maskCardNumber,\n maskDigits,\n maskName,\n maskPhoneNumber,\n maskResidentNumber,\n parseResidentNumber,\n type ResidentNumberInfo,\n} from '@bestow-ui/korean-utils';\nexport { parseISODate, toISODate } from './utils/date';\nexport { media, type Breakpoint, type Responsive } from './utils/responsive';\nexport {\n composeExtraAddress,\n kakaoPostcodeProvider,\n type AddressProvider,\n type AddressSearchResult,\n} from './components/AddressInput/addressProviders';\nexport { hasAllRequiredAgreements, type AgreementItem } from './components/AgreementGroup/agreements';\n\n// hook·이벤트 핸들러가 없는 표시용 컴포넌트 — 서버 컴포넌트로 렌더링된다(클라이언트 JS 없음, `as` 에 서버 컴포넌트도 넘길 수 있음).\n// playground 첫 페이지가 `as` 에 서버 함수를 넘겨 빌드로 확인한다(클라이언트 컴포넌트면 \"Functions cannot be passed\" 로 실패).\nexport * from './components/Badge';\nexport * from './components/Card';\nexport * from './components/Container';\nexport * from './components/DescriptionList';\nexport {\n dateRangePresets,\n presetRange,\n type DateRange,\n type DateRangePreset,\n} from './components/DateRangePicker/presets';\nexport * from './components/Divider';\nexport * from './components/FormField';\nexport * from './components/Grid';\nexport * from './components/Progress';\nexport * from './components/Skeleton';\nexport * from './components/Stack';\nexport * from './components/Typography';\nexport * from './components/VisuallyHidden';\nexport { focusField } from './utils/focusField';\n","/**\n * 반응형 구간 미디어쿼리(모바일 우선 min-width). `@bestow-ui/tokens` 의 breakpoint(px)를 em 으로 바꾼 값 —\n * em 이라 브라우저 기본 글꼴 크기를 키우면 구간도 따라 바뀐다. 값을 직접 적는다(최상위에서 tokens 객체 속성을 읽으면\n * tokens 전체가 번들에 딸려 온다 — responsive.test.ts 가 tokens 와 같은지 확인).\n *\n * @example style({ flexDirection: 'column', '@media': { [media.md]: { flexDirection: 'row' } } }) // vanilla-extract\n */\nexport const media = {\n sm: '(min-width: 40em)',\n md: '(min-width: 48em)',\n lg: '(min-width: 64em)',\n xl: '(min-width: 80em)',\n} as const;\n\nexport type Breakpoint = keyof typeof media;\n\n/**\n * 한 값 또는 구간별 값. 구간 값은 그 폭 이상에서 쓰이고, 주지 않은 구간은 앞(좁은) 구간 값을 이어받는다.\n *\n * @example direction={{ base: 'column', md: 'row' }} // 768px 미만은 세로, 이상은 가로\n */\nexport type Responsive<T> = T | ({ base?: T } & { [K in Breakpoint]?: T });\n\nconst keys = ['base', 'sm', 'md', 'lg', 'xl'] as const;\n\nexport const isResponsiveObject = <T>(value: Responsive<T> | undefined): value is Exclude<Responsive<T>, T> =>\n typeof value === 'object' && value !== null;\n\n/**\n * 각 구간의 실제 값(앞 구간을 이어받음)을 CSS 변수 `--bestow-<name>-<구간>` 으로 out 에 넣는다.\n * styles/responsive.css.ts 의 responsiveProperty 가 이 변수를 미디어쿼리로 읽는다.\n */\nexport function responsiveVars<T>(\n out: Record<string, string>,\n name: string,\n value: Responsive<T> | undefined,\n toCss: (value: T) => string,\n) {\n if (value === undefined) return;\n const values = (isResponsiveObject(value) ? value : { base: value }) as Partial<Record<(typeof keys)[number], T>>;\n let current: T | undefined;\n for (const key of keys) {\n current = values[key] ?? current;\n if (current !== undefined) out[`--bestow-${name}-${key}`] = toCss(current);\n }\n}\n\n/** space 토큰 키 → 테마 CSS 변수. 변수 이름(--bestow-space-*)이 공개 API 로 고정이라 vars 를 import 하지 않고 적는다 */\nexport const spaceVar = (key: string | number) => `var(--bestow-space-${key})`;\n","import type { ReactNode } from 'react';\n\n// 서버 컴포넌트에서도 부를 수 있도록 컴포넌트(hook·Radix) 파일과 분리한 순수 타입·함수\n\nexport interface AgreementItem {\n value: string;\n /** 약관 이름 (예: \"서비스 이용약관 동의\") */\n label: ReactNode;\n /** 필수 동의 여부. 이름 앞에 \"필수\"/\"선택\" 이 붙는다 */\n required?: boolean;\n /** 펼쳐서 보여 줄 약관 내용. 있으면 \"보기\" 버튼이 생긴다 */\n content?: ReactNode;\n}\n\n/** 필수 항목에 모두 동의했는지 */\nexport function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean {\n return items.every((item) => !item.required || value.includes(item.value));\n}\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Badge.css';\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** 시각적 스타일 */\n variant?: 'solid' | 'soft' | 'outline';\n /** 의미 색상. 일반 안내는 info (브랜드 색과 따로 파랑) */\n color?: 'primary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info';\n /** 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 텍스트 앞에 표시할 아이콘 (장식용 — 의미는 텍스트로 전달한다) */\n startIcon?: ReactNode;\n}\n\nexport const Badge = /* @__PURE__ */ forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant, color, size, startIcon, className, children, ...rest },\n ref,\n) {\n return (\n <span ref={ref} className={cx(styles.badge({ variant, color, size }), className)} {...rest}>\n {startIcon && <span className={styles.icon}>{startIcon}</span>}\n {children}\n </span>\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Badge/Badge.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7WWwW6jMBCG7zyFj7sHVwlpd1vyMNVgD2DV2Mg2JdlV332FqQmBJLIPewHJM___8w1Iw9P7Pn97YZV6Jn8zQriwnYRzQYSSQiGtJJ6OGSEgRa2ocNjagjBUDs14XENXkE8wPygt0To9UNsBQ7r_OVZLbTiaguy7E7FaCk6cAWU7MKjcpYEa4KK3K6PpkFa9lN6s0srRClohz6vORYVaUPbSPqCoG3erfarQFrnoWy_wuM1dwaJM3Xj1oqERDifmgig9GOjG4080TjCQ1I-tIK3gXOIx-8qewrhf_LhLYB-10b3ilGmpTUgOXTufcrM0jnjh9yvKL7_vd7j2-33H7_YbTH34VdirD1soV2_Ae9DOiBbMmfpPyXsvpvFQwbRyBqxbifLHMX3pJK4kh4cShyd3TfYWRaawdwZkAllQJJHNMfFkQbIlgygyDqpGkwD2LUjiCiHxWN-KLVUZRWV7xtDaBKygSOKaY-LBgmRLxqLIBjBKqDqBLCiSyOaYeLIg2ZLxKDKhKp2A5duTmKaAeCDfv6VBT9MKNS-jfNf5HdwB5-MEptV8c-_ml91nxZ91z3xOT_Y6tNqGPv_30Hob-hodeogMte11aPPwN2e8U9sYoT4KsjtmX_8Ai2Cozx8JAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var badge = /* @__PURE__ */ _7a468({defaultClassName:'_1295cfn4',variantClassNames:{variant:{solid:'_1295cfn5',soft:'_1295cfn6',outline:'_1295cfn7'},color:{primary:'_1295cfn8',neutral:'_1295cfn9',danger:'_1295cfna',success:'_1295cfnb',warning:'_1295cfnc',info:'_1295cfnd'},size:{sm:'_1295cfne',md:'_1295cfnf',lg:'_1295cfng'}},defaultVariants:{variant:'soft',color:'neutral',size:'md'},compoundVariants:[]});\nexport var icon = '_1295cfnh';","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Card.css';\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n /** 시각적 스타일. outline 은 테두리, elevated 는 그림자(다크 모드는 가장자리 ring 포함), soft 는 옅은 배경 */\n variant?: 'outline' | 'elevated' | 'soft';\n /** 안쪽 여백 (sm 16px, md 24px, lg 32px). 이미지를 가장자리까지 붙이려면 none */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** 렌더링할 요소 (기본 div). 목록이면 li, 독립된 콘텐츠면 article 등 */\n as?: ElementType;\n}\n\n/** 배경·테두리·radius·padding 을 가진 컨테이너. 자식 사이 간격은 16px. */\nexport const Card = /* @__PURE__ */ forwardRef<HTMLElement, CardProps>(function Card(\n { variant, padding, as: Component = 'div', className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(styles.card({ variant, padding }), className)} {...rest} />;\n});\n\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/** 제목·설명 영역. Typography 와 함께 쓴다. */\nexport const CardHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardHeader(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.header, className)} {...rest} />;\n});\n\n/** 본문 영역 */\nexport const CardBody = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardBody(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.body, className)} {...rest} />;\n});\n\n/** 버튼 등 동작 영역. 오른쪽 정렬 */\nexport const CardFooter = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardFooter(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.footer, className)} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Card/Card.css.ts.vanilla.css?source=LmRudWYxdTAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKICBtaW4td2lkdGg6IDA7CiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmVzdG93LXJhZGl1cy1sZyk7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJnLWRlZmF1bHQpOwogIGNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItZmctZGVmYXVsdCk7CiAgZm9udC1mYW1pbHk6IHZhcigtLWJlc3Rvdy1mb250LWZhbWlseS1zYW5zKTsKfQouZG51ZjF1MSB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItYm9yZGVyLWRlZmF1bHQpOwp9Ci5kbnVmMXUyIHsKICBib3gtc2hhZG93OiB2YXIoLS1iZXN0b3ctc2hhZG93LW1kKTsKfQouZG51ZjF1MyB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJnLXN1YnRsZSk7Cn0KLmRudWYxdTQgewogIHBhZGRpbmc6IDA7Cn0KLmRudWYxdTUgewogIHBhZGRpbmc6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKfQouZG51ZjF1NiB7CiAgcGFkZGluZzogdmFyKC0tYmVzdG93LXNwYWNlLTYpOwp9Ci5kbnVmMXU3IHsKICBwYWRkaW5nOiB2YXIoLS1iZXN0b3ctc3BhY2UtOCk7Cn0KLmRudWYxdTggewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IHZhcigtLWJlc3Rvdy1zcGFjZS0xKTsKfQouZG51ZjF1OSB7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXNtKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtbm9ybWFsKTsKfQouZG51ZjF1YSB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgZ2FwOiB2YXIoLS1iZXN0b3ctc3BhY2UtMik7Cn0';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var body = 'dnuf1u9';\nexport var card = /* @__PURE__ */ _7a468({defaultClassName:'dnuf1u0',variantClassNames:{variant:{outline:'dnuf1u1',elevated:'dnuf1u2',soft:'dnuf1u3'},padding:{none:'dnuf1u4',sm:'dnuf1u5',md:'dnuf1u6',lg:'dnuf1u7'}},defaultVariants:{variant:'outline',padding:'md'},compoundVariants:[]});\nexport var footer = 'dnuf1ua';\nexport var header = 'dnuf1u8';","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Container.css';\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (페이지 본문이면 'main') */\n as?: ElementType;\n /** 최대 폭 — sm 640 · md 768 · lg 1024(기본) · xl 1280px(구간 폭과 같음, 기본 글꼴 크기를 따름), full 은 제한 없음 */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** 좌우 여백을 없앤다 (기본은 좁은 화면 16px, md 구간부터 24px) */\n flush?: boolean;\n}\n\n/** 내용을 가운데에 두고 최대 폭과 좌우 여백을 정하는 페이지 틀 */\nexport const Container = /* @__PURE__ */ forwardRef<HTMLElement, ContainerProps>(function Container(\n { as: Component = 'div', size, flush, className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(styles.container({ size, flush }), className)} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Container/Container.css.ts.vanilla.css?source=LmI0MDRubjAgewogIHdpZHRoOiAxMDAlOwogIG1hcmdpbi1pbmxpbmU6IGF1dG87CiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKfQouYjQwNG5uMSB7CiAgbWF4LXdpZHRoOiA0MHJlbTsKfQouYjQwNG5uMiB7CiAgbWF4LXdpZHRoOiA0OHJlbTsKfQouYjQwNG5uMyB7CiAgbWF4LXdpZHRoOiA2NHJlbTsKfQouYjQwNG5uNCB7CiAgbWF4LXdpZHRoOiA4MHJlbTsKfQouYjQwNG5uNSB7CiAgbWF4LXdpZHRoOiBub25lOwp9Ci5iNDA0bm42IHsKICBwYWRkaW5nLWlubGluZTogMDsKfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5iNDA0bm4wIHsKICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1iZXN0b3ctc3BhY2UtNik7CiAgfQogIC5iNDA0bm42IHsKICAgIHBhZGRpbmctaW5saW5lOiAwOwogIH0KfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var container = /* @__PURE__ */ _7a468({defaultClassName:'b404nn0',variantClassNames:{size:{sm:'b404nn1',md:'b404nn2',lg:'b404nn3',xl:'b404nn4',full:'b404nn5'},flush:{true:'b404nn6'}},defaultVariants:{size:'lg'},compoundVariants:[]});","import { assignInlineVars } from '@vanilla-extract/dynamic';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './DescriptionList.css';\n\nexport interface DescriptionListItem {\n /** 이름 (dt) */\n term: ReactNode;\n /** 값 (dd) */\n description: ReactNode;\n}\n\nexport interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {\n /** 이름–값 목록 */\n items: DescriptionListItem[];\n /** horizontal(기본): 이름 왼쪽·값 오른쪽. vertical: 이름 위·값 아래(좁은 곳·긴 값) */\n layout?: 'horizontal' | 'vertical';\n /** horizontal 일 때 이름 열의 폭 (기본 30%) — 예: \"8rem\" */\n termWidth?: string;\n /** 항목 사이에 구분선 */\n divided?: boolean;\n}\n\n/**\n * 이름–값 목록(주문 상세의 고객·연락처·금액 등). `<dl>` 안에 항목마다 `<div><dt/><dd/></div>` 로 그려 스크린리더가 쌍으로 읽는다.\n * hook 이 없어 서버 컴포넌트로도 렌더링된다.\n */\nexport const DescriptionList = /* @__PURE__ */ forwardRef<HTMLDListElement, DescriptionListProps>(\n function DescriptionList({ items, layout = 'horizontal', termWidth, divided, className, style, ...rest }, ref) {\n return (\n <dl\n ref={ref}\n className={cx(styles.root, className)}\n style={termWidth ? { ...assignInlineVars({ [styles.termWidth]: termWidth }), ...style } : style}\n {...rest}\n >\n {items.map((item, index) => (\n <div key={index} className={styles.item({ layout, divided })}>\n <dt className={styles.term}>{item.term}</dt>\n <dd className={styles.description}>{item.description}</dd>\n </div>\n ))}\n </dl>\n );\n },\n);\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/DescriptionList/DescriptionList.css.ts.vanilla.css?source=Ll8xNGcwb3Q0MSB7CiAgLS1fMTRnMG90NDA6IDMwJTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgbWFyZ2luOiAwOwogIGZvbnQtZmFtaWx5OiB2YXIoLS1iZXN0b3ctZm9udC1mYW1pbHktc2Fucyk7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXNtKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtbm9ybWFsKTsKfQouXzE0ZzBvdDQyIHsKICBtaW4td2lkdGg6IDA7Cn0KLl8xNGcwb3Q0MyB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLV8xNGcwb3Q0MCkgbWlubWF4KDAsIDFmcik7CiAgY29sdW1uLWdhcDogdmFyKC0tYmVzdG93LXNwYWNlLTQpOwogIHBhZGRpbmctYmxvY2s6IHZhcigtLWJlc3Rvdy1zcGFjZS0yKTsKfQouXzE0ZzBvdDQ0IHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZ2FwOiB2YXIoLS1iZXN0b3ctc3BhY2UtMSk7CiAgcGFkZGluZy1ibG9jazogdmFyKC0tYmVzdG93LXNwYWNlLTIpOwp9Ci5fMTRnMG90NDU6bm90KDpsYXN0LWNoaWxkKSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJlc3Rvdy1jb2xvci1ib3JkZXItZGVmYXVsdCk7Cn0KLl8xNGcwb3Q0NiB7CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiB2YXIoLS1iZXN0b3ctZm9udC13ZWlnaHQtbWVkaXVtKTsKICBjb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWZnLW11dGVkKTsKICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQouXzE0ZzBvdDQ3IHsKICBtYXJnaW46IDA7CiAgY29sb3I6IHZhcigtLWJlc3Rvdy1jb2xvci1mZy1kZWZhdWx0KTsKICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var description = '_14g0ot47';\nexport var item = /* @__PURE__ */ _7a468({defaultClassName:'_14g0ot42',variantClassNames:{layout:{horizontal:'_14g0ot43',vertical:'_14g0ot44'},divided:{true:'_14g0ot45'}},defaultVariants:{layout:'horizontal'},compoundVariants:[]});\nexport var root = '_14g0ot41';\nexport var term = '_14g0ot46';\nexport var termWidth = 'var(--_14g0ot40)';","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Divider.css';\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n /** 방향. vertical 은 flex 행 안에서 부모 높이를 채운다 */\n orientation?: 'horizontal' | 'vertical';\n /** 시각적 구분만 하고 의미가 없으면 true — 스크린리더에서 숨긴다 */\n decorative?: boolean;\n /**\n * 가운데에 표시할 텍스트 (예: \"또는\"). horizontal 에서만 쓴다.\n * separator 역할의 자식은 스크린리더가 읽지 않으므로, 텍스트가 있으면 선만 숨기고 텍스트는 읽히게 둔다.\n */\n children?: ReactNode;\n}\n\nexport const Divider = /* @__PURE__ */ forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', decorative, className, children, ...rest },\n ref,\n) {\n if (children && orientation === 'horizontal') {\n return (\n <div ref={ref} className={cx(styles.labeled, className)} {...rest}>\n <span className={styles.line} aria-hidden />\n {children}\n <span className={styles.line} aria-hidden />\n </div>\n );\n }\n\n const a11y = decorative\n ? { role: 'none' }\n : { role: 'separator', 'aria-orientation': orientation === 'vertical' ? ('vertical' as const) : undefined };\n return <div ref={ref} className={cx(styles.divider({ orientation }), className)} {...a11y} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Divider/Divider.css.ts.vanilla.css?source=Ll8xdDNncTh2MCB7CiAgZmxleC1zaHJpbms6IDA7CiAgYm9yZGVyOiBub25lOwogIG1hcmdpbjogMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItYm9yZGVyLWRlZmF1bHQpOwp9Ci5fMXQzZ3E4djEgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMXB4Owp9Ci5fMXQzZ3E4djIgewogIHdpZHRoOiAxcHg7CiAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICBtaW4taGVpZ2h0OiAxZW07Cn0KLl8xdDNncTh2MyB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGdhcDogdmFyKC0tYmVzdG93LXNwYWNlLTMpOwogIHdpZHRoOiAxMDAlOwogIGZvbnQtZmFtaWx5OiB2YXIoLS1iZXN0b3ctZm9udC1mYW1pbHktc2Fucyk7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXhzKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtdGlnaHQpOwogIGNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItZmctc3VidGxlKTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5fMXQzZ3E4djQgewogIGZsZXg6IDE7CiAgaGVpZ2h0OiAxcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJvcmRlci1kZWZhdWx0KTsKfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var divider = /* @__PURE__ */ _7a468({defaultClassName:'_1t3gq8v0',variantClassNames:{orientation:{horizontal:'_1t3gq8v1',vertical:'_1t3gq8v2'}},defaultVariants:{orientation:'horizontal'},compoundVariants:[]});\nexport var labeled = '_1t3gq8v3';\nexport var line = '_1t3gq8v4';","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as fieldStyles from '../Input/Input.css';\n\n/**\n * FormField 가 자식에게 넘기는 연결 속성. 입력 요소(또는 입력 역할을 하는 요소)에 그대로 펼쳐 넣는다.\n * role=\"group\" 처럼 aria-invalid·aria-required 를 받지 못하는 역할이면 그 둘은 빼고 안의 컨트롤에 준다(axe aria-allowed-attr).\n */\nexport interface FormFieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\n 'aria-required'?: true;\n}\n\n/** render 함수의 둘째 인자 — 입력에 펼치지 않는 정보 */\nexport interface FormFieldMeta {\n /** 레이블 요소의 id — label 로 이름을 받을 수 없는 요소(div role=\"combobox\" 등)는 aria-labelledby 에 넣는다 */\n labelId?: string;\n /** 도움말 요소의 id */\n helperId?: string;\n}\n\nexport interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'> {\n /** 입력 위에 표시할 레이블 (짧게 — 보조 설명은 helperText) */\n label?: ReactNode;\n /** 입력 아래 도움말. error 일 때는 오류 메시지로 표시된다 */\n helperText?: ReactNode;\n /** 오류 상태 — 자식에 aria-invalid 를 넘기고 helperText 를 오류 색으로 */\n error?: boolean;\n /** 필수 — 레이블에 * 를 붙이고 자식에 aria-required 를 넘긴다(네이티브 검증이 필요하면 입력에 required 를 직접) */\n required?: boolean;\n /** 입력 요소의 id. 생략하면 만든다 (ErrorSummary 링크·focusField 가 이 id 로 찾아간다) */\n id?: string;\n /** 부모 너비를 꽉 채운다 */\n fullWidth?: boolean;\n /**\n * 입력을 그리는 함수. 첫째 인자를 입력 요소에 그대로 펼쳐 넣는다.\n * @example {(field) => <input {...field} />}\n * @example {(field, { labelId }) => <CustomSelect {...field} aria-labelledby={labelId} />}\n */\n children: (control: FormFieldControlProps, meta: FormFieldMeta) => ReactNode;\n}\n\n/**\n * 직접 만든 입력·다른 라이브러리 입력에 TextField 와 같은 레이블·도움말·오류 연결을 붙인다.\n * hook 은 useId 뿐이라 서버 컴포넌트에서도 쓸 수 있다.\n */\nexport const FormField = /* @__PURE__ */ forwardRef<HTMLDivElement, FormFieldProps>(function FormField(\n { label, helperText, error, required, id, fullWidth, className, children, ...rest },\n ref,\n) {\n const generatedId = useId();\n const controlId = id ?? generatedId;\n const labelId = label ? `${controlId}-label` : undefined;\n const helperId = helperText ? `${controlId}-helper` : undefined;\n\n return (\n <div ref={ref} className={cx(fieldStyles.field, fullWidth && fieldStyles.fieldFullWidth, className)} {...rest}>\n {label && (\n <label id={labelId} htmlFor={controlId} className={fieldStyles.label}>\n {label}\n {required && (\n <span className={fieldStyles.requiredMark} aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n {children(\n {\n id: controlId,\n 'aria-describedby': helperId,\n 'aria-invalid': error || undefined,\n 'aria-required': required || undefined,\n },\n { labelId, helperId },\n )}\n {helperText && (\n <p id={helperId} className={fieldStyles.helperText({ error })}>\n {helperText}\n </p>\n )}\n </div>\n );\n});\n","import type { space } from '@bestow-ui/tokens';\nimport { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport { responsiveVars, spaceVar, type Responsive } from '../../utils/responsive';\nimport * as styles from './Grid.css';\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (목록이면 'ul') */\n as?: ElementType;\n /** 열 개수 (같은 폭). 구간별로: `{ base: 1, md: 2, lg: 3 }`. 생략하면 한 열 */\n columns?: Responsive<number>;\n /**\n * 칸의 최소 폭(CSS 길이, 예: '220px'·'14rem'). 주면 화면 폭에 맞춰 열 개수를 자동으로 정한다(columns 대신).\n * 화면이 이 폭보다 좁으면 칸이 화면 폭으로 줄어든다(가로 스크롤 없음).\n */\n minItemWidth?: string;\n /** 칸 사이 간격 (space 토큰 키). 구간별 값도 받는다 */\n gap?: Responsive<keyof typeof space>;\n}\n\nconst repeatColumns = (count: number) => `repeat(${count}, minmax(0, 1fr))`;\n\nexport const Grid = /* @__PURE__ */ forwardRef<HTMLElement, GridProps>(function Grid(\n { as: Component = 'div', columns, minItemWidth, gap, className, style, ...rest },\n ref,\n) {\n const responsive: Record<string, string> = {};\n if (minItemWidth)\n responsive['--bestow-grid-columns-base'] = `repeat(auto-fill, minmax(min(100%, ${minItemWidth}), 1fr))`;\n else responsiveVars(responsive, 'grid-columns', columns, repeatColumns);\n responsiveVars(responsive, 'gap', gap, spaceVar);\n\n return (\n <Component\n ref={ref}\n className={cx(styles.grid, styles.columns, gap !== undefined && styles.responsiveGap, className)}\n style={{ ...responsive, ...style } as CSSProperties}\n {...rest}\n />\n );\n});\n","import 'src/styles/responsive.css.ts.vanilla.css?source=LmlhcmJsYTAgewogIC0tYmVzdG93LWdhcC1iYXNlOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC1zbTogaW5pdGlhbDsKICAtLWJlc3Rvdy1nYXAtbWQ6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ2FwLWxnOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC14bDogaW5pdGlhbDsKICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtYmFzZSk7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtc20pOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5pYXJibGEwIHsKICAgIGdhcDogdmFyKC0tYmVzdG93LWdhcC1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLmlhcmJsYTAgewogICAgZ2FwOiB2YXIoLS1iZXN0b3ctZ2FwLWxnKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDgwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAteGwpOwogIH0KfQ';\nimport 'src/components/Grid/Grid.css.ts.vanilla.css?source=Ll8xdHlsdjltMCB7CiAgZGlzcGxheTogZ3JpZDsKICBtaW4td2lkdGg6IDA7Cn0KLl8xdHlsdjltMSB7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLWJhc2U6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXNtOiBpbml0aWFsOwogIC0tYmVzdG93LWdyaWQtY29sdW1ucy1tZDogaW5pdGlhbDsKICAtLWJlc3Rvdy1ncmlkLWNvbHVtbnMtbGc6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXhsOiBpbml0aWFsOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tYmVzdG93LWdyaWQtY29sdW1ucy1iYXNlKTsKfQpAbWVkaWEgKG1pbi13aWR0aDogNDBlbSkgewogIC5fMXR5bHY5bTEgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXNtKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQ4ZW0pIHsKICAuXzF0eWx2OW0xIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tYmVzdG93LWdyaWQtY29sdW1ucy1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLl8xdHlsdjltMSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLWJlc3Rvdy1ncmlkLWNvbHVtbnMtbGcpOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogODBlbSkgewogIC5fMXR5bHY5bTEgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXhsKTsKICB9Cn0';\nexport var columns = '_1tylv9m1';\nexport var grid = '_1tylv9m0';\nexport var responsiveGap = 'iarbla0';","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Progress.css';\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** 현재 값 (0 ~ max). 생략하거나 null 이면 진행률을 모르는 상태(indeterminate)로 움직이는 막대를 보여 준다 */\n value?: number | null;\n /** 최댓값 */\n max?: number;\n /** 막대 위에 보이는 레이블. progressbar 의 이름이 된다 */\n label?: ReactNode;\n /** 레이블이 없을 때 스크린리더용 이름 */\n 'aria-label'?: string;\n /** 오른쪽에 값 텍스트(기본 \"42%\")를 보여 준다 */\n showValue?: boolean;\n /** 값 텍스트 형식. 화면 표시와 스크린리더(aria-valuetext)에 함께 쓴다 (예: (v, max) => `${v}/${max}개`) */\n formatValue?: (value: number, max: number) => string;\n /** 막대 두께 (sm 4px · md 8px · lg 12px) */\n size?: 'sm' | 'md' | 'lg';\n /** 의미 색상 */\n color?: 'primary' | 'neutral' | 'success' | 'warning' | 'danger';\n}\n\nconst defaultFormat = (value: number, max: number) => `${Math.round((value / max) * 100)}%`;\n\nexport const Progress = /* @__PURE__ */ forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n label,\n 'aria-label': ariaLabel,\n showValue,\n formatValue = defaultFormat,\n size,\n color,\n className,\n ...rest\n },\n ref,\n) {\n const labelId = useId();\n const isIndeterminate = value === undefined || value === null;\n const safeMax = max > 0 ? max : 100;\n const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value));\n const valueText = isIndeterminate ? undefined : formatValue(clamped, safeMax);\n\n return (\n <div ref={ref} className={cx(styles.root, className)} {...rest}>\n {(label || (showValue && valueText)) && (\n <div className={styles.header}>\n {label && (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n )}\n {/* 스크린리더는 progressbar 의 aria-valuetext 로 읽으므로 화면용 텍스트는 숨긴다 */}\n {showValue && valueText && (\n <span className={styles.value} aria-hidden>\n {valueText}\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={isIndeterminate ? undefined : clamped}\n aria-valuetext={valueText}\n className={styles.track({ size })}\n >\n <div\n className={styles.indicator({ color })}\n data-state={isIndeterminate ? 'indeterminate' : clamped >= safeMax ? 'complete' : 'loading'}\n style={isIndeterminate ? undefined : { width: `${(clamped / safeMax) * 100}%` }}\n />\n </div>\n </div>\n );\n});\n","import 'src/styles/animations.css.ts.vanilla.css?source=#H4sIAAAAAAAAA51T3WqDMBS-9ynOjaBsGYlV27qbPsbuRhqjDdVEYjZahu8-plspGjPtXeB8-f4453Dm10LTmrfwTkrdHLcYw5cHUGhV9w8A1VAmzDUD_OoBdB6AUeMRGUadd5gSkllCMk-IHYSR2yGA0VS2hdJ1NjwraniAEuw_A4p3fggtoxUP8Ms-Df_J5CZL8I2MhA7HG3cFq0VmG3sku9VxvKLjB9tc0FsydmFL9xYwWrGAYOzDE0RxcwmnPuwfsUs8dYhrZX56xTkvnVq_uE16h7SKbcdiR8rOpVYfMkeNaoURSmbQZ5yeoRWL7sFWzd1Y88RFeTK2Q_-bfFIdIKRpLi6IMqZ0LpRETEnDpUEDyhVzPye5gthiy5WSLtuhvq6lexMlN2z3DVsBqiZDBQAA';\nimport 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Progress/Progress.css.ts.vanilla.css?source=#H4sIAAAAAAAAA41Vy27bMBC8-yuIAgXiAw05cZpUQYECvfQDeiuKYCWu5G0oUl0u_WiRfy9IxY2lOI1hwIY5q5nZ5ZBa3C9l8_CrKAr1Z6aUodBb2Jeqsbi7m6n8qw0x1kLelar2NnYuIS30pdoAX2hdYRC_1aGHGvXlPKFbMrIu1bIo3mca70Q30JHdTx46QnQAF-Z3s8fZ4uBqedoVWGqdJsEulKqCgJYcJuBnDELNXtfeCTop1eCpQtki_tf21fyfz0C_8ZTLtK5DlwuToF4jtWs5VXoEa0nf47Yuc1u5cvsqx4DoDg3FQbT21vOkNK_pptUGG4h2InSVhTrglpwml20FAZZSQRT_JmkXBc3zZDbABE60ix0y1aUSqKIFTgthJLzKwr0PNOSG0YLQJm-S3yA31m9LtSZjhm2Z5KXybJA1g6EYJuaGRd1Ea7OzCuqHln10Rr_eS3XcS-V3OqzBJAvkAooq8mfZ716ZQ4iVWBzP9jq3eMjAqt-N0A8j9HaC3ozQ5eUEvh3Dp4dCbo1MkhBhcIdJ50mO2zCRIYHaee7AzhVCQO2jjEW_GxBI8RD89I6cQUHuyIHgux_Z0NMmrQY74KiDQfN-2XJf3RSglotVGOjJJQVFriFHgiOpj5nurI3rmTrgvRbcTbIN55M4jMJgT5BU55OEWNcYwgmS-nySLbAj154gMeeTGHAt8jPH53RHgLroGRvkoBlNrNHozh8OX_o_zwKTjI2z4_xwjT6OCt_MxYvjOwrHgVQp30NNsi9VsbgeZJ69N56T5dxgKBXU6baYWF49qfko6SYr84EN3pJRX8BtIHzDnbz0__TUsYIGk14Vx-ZeTv4rtWubjuCT178Elo90LAcAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var header = '_1tvkq001';\nexport var indicator = /* @__PURE__ */ _7a468({defaultClassName:'_1tvkq008',variantClassNames:{color:{primary:'_1tvkq009',neutral:'_1tvkq00a',success:'_1tvkq00b',warning:'_1tvkq00c',danger:'_1tvkq00d'}},defaultVariants:{color:'primary'},compoundVariants:[]});\nexport var label = '_1tvkq002';\nexport var root = '_1tvkq000';\nexport var track = /* @__PURE__ */ _7a468({defaultClassName:'_1tvkq004',variantClassNames:{size:{sm:'_1tvkq005',md:'_1tvkq006',lg:'_1tvkq007'}},defaultVariants:{size:'md'},compoundVariants:[]});\nexport var value = '_1tvkq003';","import type { space } from '@bestow-ui/tokens';\nimport { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport { isResponsiveObject, responsiveVars, spaceVar, type Responsive } from '../../utils/responsive';\nimport * as styles from './Stack.css';\n\ntype Direction = 'row' | 'column' | 'row-reverse' | 'column-reverse';\ntype Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\ntype Justify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\ntype SpaceKey = keyof typeof space;\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 */\n as?: ElementType;\n /** 배치 방향 (기본 column). 구간별로: `{ base: 'column', md: 'row' }` */\n direction?: Responsive<Direction>;\n /** 자식 사이 간격 (space 토큰 키). 구간별로: `{ base: 3, lg: 6 }` */\n gap?: Responsive<SpaceKey>;\n /** 교차축 정렬 (align-items). 구간별 값도 받는다 */\n align?: Responsive<Align>;\n /** 주축 정렬 (justify-content). 구간별 값도 받는다 */\n justify?: Responsive<Justify>;\n /** 줄바꿈 허용 */\n wrap?: boolean;\n}\n\nconst flexValues: Record<string, string> = {\n start: 'flex-start',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\nconst flexValue = (value: string) => flexValues[value] ?? value;\n\n// 구간별 값을 받는 속성: [prop, CSS 변수 이름, 값 → CSS, 반응형 클래스]\nconst responsiveProps = [\n ['direction', 'stack-direction', String, styles.responsiveDirection],\n ['gap', 'gap', spaceVar, styles.responsiveGap],\n ['align', 'stack-align', flexValue, styles.responsiveAlign],\n ['justify', 'stack-justify', flexValue, styles.responsiveJustify],\n] as const;\n\nexport const Stack = /* @__PURE__ */ forwardRef<HTMLElement, StackProps>(function Stack(\n { as: Component = 'div', direction, gap, align, justify, wrap, className, style, ...rest },\n ref,\n) {\n // 한 값이면 지금처럼 recipe 클래스, 구간별 값이면 반응형 클래스 + 인라인 CSS 변수(그 속성은 recipe 에 넘기지 않음)\n const props: Record<string, unknown> = { direction: direction ?? 'column', gap, align, justify };\n const variants: Record<string, unknown> = { wrap };\n const classes: string[] = [];\n const cssVars: Record<string, string> = {};\n for (const [key, name, toCss, responsiveClass] of responsiveProps) {\n const value = props[key] as Responsive<string>;\n if (!isResponsiveObject(value)) variants[key] = value;\n else {\n // 방향은 base 를 주지 않아도 기본 column 에서 시작한다\n responsiveVars(cssVars, name, key === 'direction' ? { base: 'column', ...value } : value, toCss);\n classes.push(responsiveClass);\n }\n }\n\n return (\n <Component\n ref={ref}\n className={cx(styles.stack(variants), ...classes, className)}\n style={classes.length ? ({ ...cssVars, ...style } as CSSProperties) : style}\n {...rest}\n />\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/styles/responsive.css.ts.vanilla.css?source=LmlhcmJsYTAgewogIC0tYmVzdG93LWdhcC1iYXNlOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC1zbTogaW5pdGlhbDsKICAtLWJlc3Rvdy1nYXAtbWQ6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ2FwLWxnOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC14bDogaW5pdGlhbDsKICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtYmFzZSk7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtc20pOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5pYXJibGEwIHsKICAgIGdhcDogdmFyKC0tYmVzdG93LWdhcC1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLmlhcmJsYTAgewogICAgZ2FwOiB2YXIoLS1iZXN0b3ctZ2FwLWxnKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDgwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAteGwpOwogIH0KfQ';\nimport 'src/components/Stack/Stack.css.ts.vanilla.css?source=#H4sIAAAAAAAAA63VQXLiMBAF0D2n0DIslIKEMGA2c5MpYTdGRJKJJGNIirtP2Y6BFqJDgA2rp49_0zLP_4arz-lyNR2wrx5jmXRrJXYJWyjYznqMaWl4JTO_TNhg1tv3njs_bHzNeCYtpF4WJmG2qJB6iaq0UKU2CL5eiuMWNmAdID0iYqMH3poDuVgnbCPsE-dzcL6ouFuLFPigj_CYxEOM_5D4BeMJiV8xnpJ4hLEg8RvGcxKPMU5JPME4o0cXDBpoHQxvQevgsfNGCyVzw6UH7dqd5s4L65FcnssUjAeLlLyQByZDbnXunLfg0yVi7-dsLhwoafDiqsatSuflYsfTwngw_mIVHdeROobIDSsVcdvOfQ6-AsCXeU0dELYogy_4oDxswKgd8vZ4_Stb70P9iYRrxHFFvEjfj68KXo86YdJIL4WaUdLp65zOrnMqv85tFXLhqw5fgEg7fBl8bBzt8v00ilbRY2gNPYLW0PVbE1RHdyTS-1gDdy5jnbsd-6l15-jenaKbd4ru3qmg_dmliEzgtFQzg78aMinY08mf92gAut9MJLgjv9wtp_v1Y-1Pg_x30HW_VCyh_E74TdtDTrzv5DF9dXZv31jCLX0POdG-49Fj-qr83r6xhFv6HnKifScP2ueturdvLOGWvoec_X_feleolAsAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var responsiveAlign = '_1jz9hj9t';\nexport var responsiveDirection = '_1jz9hj9s';\nexport var responsiveGap = 'iarbla0';\nexport var responsiveJustify = '_1jz9hj9u';\nexport var stack = /* @__PURE__ */ _7a468({defaultClassName:'_1jz9hj90',variantClassNames:{direction:{row:'_1jz9hj91',column:'_1jz9hj92','row-reverse':'_1jz9hj93','column-reverse':'_1jz9hj94'},gap:{'0':'_1jz9hj95','1':'_1jz9hj96','2':'_1jz9hj97','3':'_1jz9hj98','4':'_1jz9hj99','5':'_1jz9hj9a','6':'_1jz9hj9b','8':'_1jz9hj9c','10':'_1jz9hj9d','12':'_1jz9hj9e','16':'_1jz9hj9f'},align:{start:'_1jz9hj9g',center:'_1jz9hj9h',end:'_1jz9hj9i',stretch:'_1jz9hj9j',baseline:'_1jz9hj9k'},justify:{start:'_1jz9hj9l',center:'_1jz9hj9m',end:'_1jz9hj9n',between:'_1jz9hj9o',around:'_1jz9hj9p',evenly:'_1jz9hj9q'},wrap:{true:'_1jz9hj9r'}},defaultVariants:{},compoundVariants:[]});","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Typography.css';\n\nexport type TypographyVariant = 'display' | 'h1' | 'h2' | 'h3' | 'h4' | 'body-lg' | 'body' | 'body-sm' | 'caption';\n\nconst defaultElement: Record<TypographyVariant, ElementType> = {\n display: 'h1',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n 'body-lg': 'p',\n body: 'p',\n 'body-sm': 'p',\n caption: 'span',\n};\n\nexport interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** 텍스트 스타일 */\n variant?: TypographyVariant;\n /** 렌더링할 요소. 기본값은 variant 에 따라 결정된다 (h1, p, span 등) */\n as?: ElementType;\n /** 글자 색상 */\n color?: 'default' | 'muted' | 'subtle' | 'primary' | 'danger' | 'success' | 'warning' | 'inherit';\n /** variant 의 기본 굵기를 덮어쓴다 */\n weight?: 'regular' | 'medium' | 'semibold' | 'bold';\n /** 정렬 */\n align?: 'start' | 'center' | 'end';\n /** 한 줄로 자르고 말줄임표를 표시한다 */\n truncate?: boolean;\n}\n\nexport const Typography = /* @__PURE__ */ forwardRef<HTMLElement, TypographyProps>(function Typography(\n { variant = 'body', as, color, weight, align, truncate, className, ...rest },\n ref,\n) {\n const Component = as ?? defaultElement[variant];\n return (\n <Component\n ref={ref}\n className={cx(styles.typography({ variant, color, weight, align, truncate }), className)}\n {...rest}\n />\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Typography/Typography.css.ts.vanilla.css?source=#H4sIAAAAAAAAA82Vy26DMBBF93yFl83CUZK-ydc4eDDTjm00NiVt1X-vQtTUCakAVVW6YeF7jzmyxjB_Rk_oF-I9E8IqNuhysVhnQpTeRVkqi_SaixfFV1JuIETfyiSRQbkwW2cf2Xy_0bLbqGsEfINz5G5d3mxpdnhLC2iqeK67T-TGk-7qhA5k9WM9iWXcPfcQxAgsQ60KdCYXcjFfrMAm1quR1tf_yvp6pPXqwtbLI-ubkdaTpANY_I34we52pB2ZS9jd_YUdg2lI8VQ5BlJb0Kne_Ug9q_9ez3m2ilK7h5F2wV7C7nHstQiXsFOdXeHJ8wncrcnSSA2lauhoXDfDlG3i8QwVw0xoNpEghfQAVDNaxa8ywvZIEAY4rZwB7mHlABaaooAQepwZ4FrFDp3pcVXKoauAMSYxfo_OhIk44E8TcAsaG5vSzxPo5Dt44GkCf8rajt2dllSExuUiRMXp0bheowAXgZOK71XA6SSvu9y_AJfk21xUqDW49RfzHQAR1gHDLmorjND9BSEXzres6nX28Ql_7_cqbQkAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var typography = /* @__PURE__ */ _7a468({defaultClassName:'kiolio0',variantClassNames:{variant:{display:'kiolio1',h1:'kiolio2',h2:'kiolio3',h3:'kiolio4',h4:'kiolio5','body-lg':'kiolio6',body:'kiolio7','body-sm':'kiolio8',caption:'kiolio9'},color:{'default':'kiolioa',muted:'kioliob',subtle:'kiolioc',primary:'kioliod',danger:'kiolioe',success:'kioliof',warning:'kioliog',inherit:'kiolioh'},weight:{regular:'kiolioi',medium:'kiolioj',semibold:'kioliok',bold:'kioliol'},align:{start:'kioliom',center:'kiolion',end:'kiolioo'},truncate:{true:'kioliop'}},defaultVariants:{variant:'body',color:'default'},compoundVariants:[]});","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { visuallyHidden } from '../../styles/visuallyHidden.css';\nimport { cx } from '../../utils/cx';\n\nexport interface VisuallyHiddenProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (기본 span) */\n as?: ElementType;\n}\n\n/**\n * 화면에는 보이지 않고 스크린리더만 읽는 글자. 아이콘만 있는 열 머리글(\"작업\"), 보이는 글자에 붙는 보충 설명 등에 쓴다.\n * `display: none`·`hidden` 과 달리 보조기술이 읽는다. hook 이 없어 서버 컴포넌트로도 렌더링된다.\n */\nexport const VisuallyHidden = /* @__PURE__ */ forwardRef<HTMLElement, VisuallyHiddenProps>(function VisuallyHidden(\n { as: Component = 'span', className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(visuallyHidden, className)} {...rest} />;\n});\n"],"mappings":"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","names":["value","value","item","Badge","forwardRef","_7a468","jsx","forwardRef","Card","CardHeader","CardBody","CardFooter","forwardRef","_7a468","jsx","forwardRef","Container","forwardRef","_7a468","jsx","jsxs","forwardRef","DescriptionList","termWidth","item","forwardRef","_7a468","jsx","jsxs","forwardRef","Divider","forwardRef","jsx","jsxs","forwardRef","FormField","label","helperText","forwardRef","jsx","forwardRef","Grid","columns","forwardRef","useId","_7a468","header","label","root","jsx","jsxs","value","forwardRef","Progress","label","useId","root","header","forwardRef","_7a468","responsiveGap","jsx","value","responsiveGap","forwardRef","Stack","forwardRef","_7a468","jsx","forwardRef","Typography","forwardRef","jsx","forwardRef","VisuallyHidden"]}
1
+ {"version":3,"sources":["../src/theme/color.ts","../src/theme/presets.ts","../src/i18n/en.ts","../src/shared.ts","../src/utils/responsive.ts","../src/components/AgreementGroup/agreements.ts","../src/components/Badge/Badge.tsx","../src/components/Badge/Badge.css.ts","../src/components/Card/Card.tsx","../src/components/Card/Card.css.ts","../src/components/Container/Container.tsx","../src/components/Container/Container.css.ts","../src/components/DescriptionList/DescriptionList.tsx","../src/components/DescriptionList/DescriptionList.css.ts","../src/components/Divider/Divider.tsx","../src/components/Divider/Divider.css.ts","../src/components/FormField/FormField.tsx","../src/components/Grid/Grid.tsx","../src/components/Grid/Grid.css.ts","../src/components/Progress/Progress.tsx","../src/components/Progress/Progress.css.ts","../src/components/Stack/Stack.tsx","../src/components/Stack/Stack.css.ts","../src/components/Typography/Typography.tsx","../src/components/Typography/Typography.css.ts","../src/components/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["// 대표색 하나로 intent 색 세트를 만드는 색 계산 유틸.\n// OKLCH(사람이 느끼는 밝기에 가까운 색 공간)에서 밝기를 조절하고, WCAG 대비(4.5:1)를 만족하도록 글자색을 찾는다.\nimport { darkColors, lightColors, palette } from '@bestow-ui/tokens';\nimport type { ThemeInput } from './createTheme';\n\ntype Rgb = [number, number, number]; // 0~1, sRGB\ninterface Oklch {\n l: number;\n c: number;\n h: number;\n}\n\nexport function parseHex(hex: string): Rgb {\n const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex.trim());\n if (!m) throw new Error(`올바른 hex 색이 아니에요: \"${hex}\" (예: \"#7c3aed\")`);\n let h = m[1]!;\n if (h.length === 3) h = h.replace(/./g, (c) => c + c);\n return [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16) / 255) as Rgb;\n}\n\nexport function toHex(rgb: Rgb): string {\n return `#${rgb\n .map((v) =>\n Math.round(Math.min(1, Math.max(0, v)) * 255)\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`;\n}\n\nconst toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);\nconst fromLinear = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055);\n\nfunction rgbToOklch([r, g, b]: Rgb): Oklch {\n const [lr, lg, lb] = [toLinear(r), toLinear(g), toLinear(b)];\n const l_ = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n const m_ = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n const s_ = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;\n const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;\n const bb = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;\n return { l: L, c: Math.hypot(a, bb), h: Math.atan2(bb, a) };\n}\n\nfunction oklchToRgbUnclamped({ l, c, h }: Oklch): Rgb {\n const a = c * Math.cos(h);\n const b = c * Math.sin(h);\n const l_ = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m_ = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s_ = (l - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n fromLinear(4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_),\n fromLinear(-1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_),\n fromLinear(-0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_),\n ];\n}\n\nconst inGamut = (rgb: Rgb) => rgb.every((v) => v >= -1e-4 && v <= 1 + 1e-4);\n\n/** sRGB 범위를 벗어나면 채도(c)를 줄여 범위 안으로 맞춘다. */\nfunction oklchToRgb(color: Oklch): Rgb {\n const l = Math.min(1, Math.max(0, color.l));\n let rgb = oklchToRgbUnclamped({ ...color, l });\n if (inGamut(rgb)) return rgb;\n let lo = 0;\n let hi = color.c;\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2;\n if (inGamut(oklchToRgbUnclamped({ l, c: mid, h: color.h }))) lo = mid;\n else hi = mid;\n }\n rgb = oklchToRgbUnclamped({ l, c: lo, h: color.h });\n return rgb;\n}\n\nfunction luminance([r, g, b]: Rgb): number {\n return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n}\n\n/** WCAG 대비율 (1 ~ 21) */\nexport function contrastRatio(a: string, b: string): number {\n const [la, lb] = [luminance(parseHex(a)), luminance(parseHex(b))];\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** fg 를 alpha 만큼 bg 위에 겹친 결과 색 */\nfunction blend(fg: string, alpha: number, bg: string): string {\n const [f, b] = [parseHex(fg), parseHex(bg)];\n return toHex(f.map((v, i) => v * alpha + b[i]! * (1 - alpha)) as Rgb);\n}\n\nconst withL = (base: Oklch, l: number, c = base.c) => toHex(oklchToRgb({ l, c, h: base.h }));\n\n/** 대상 배경들 위에서 대비 4.5 를 넘을 때까지 밝기를 step 만큼 옮긴다. */\nfunction findReadable(base: Oklch, startL: number, step: number, backgrounds: string[]): string {\n let l = startL;\n for (let i = 0; i < 40; i++) {\n const hex = withL(base, l);\n if (backgrounds.every((bg) => contrastRatio(hex, bg) >= 4.5)) return hex;\n l = Math.min(1, Math.max(0, l + step));\n }\n return step < 0 ? palette.black : palette.white;\n}\n\n/**\n * solid 의 hover 색: 밝기를 delta 만큼 옮기되, 그 결과에서 글자색(contrast) 대비가 4.5 아래로 떨어지면 반대 방향으로 옮긴다.\n * (예: 다크 모드에서 파란 버튼을 밝게 하면 흰 글자 대비가 떨어지므로 어둡게 한다)\n */\nfunction hoverFor(base: Oklch, delta: number, contrast: string): string {\n const preferred = withL(base, Math.min(1, Math.max(0, base.l + delta)));\n if (contrastRatio(contrast, preferred) >= 4.5) return preferred;\n return withL(base, Math.min(1, Math.max(0, base.l - delta)));\n}\n\n/**\n * solid 배경과 그 위 글자색(contrast). 흰 글자가 4.5 를 넘으면 흰색, 아니면 짙은 글자.\n * 둘 다 4.5 미만인 중간 밝기 색(초록 #059669, 주황 #ea580c 등)은 solid 의 밝기를 가장 적게 옮겨 4.5 를 맞춘다\n * (같은 거리면 어둡게 + 흰 글자를 먼저 고른다).\n */\nfunction solidWithContrast(color: string): { solid: string; contrast: string } {\n const white = palette.white;\n const dark = palette.gray[900];\n if (contrastRatio(white, color) >= 4.5) return { solid: color, contrast: white };\n if (contrastRatio(dark, color) >= 4.5) return { solid: color, contrast: dark };\n const base = rgbToOklch(parseHex(color));\n for (let delta = 0.005; delta <= 1; delta += 0.005) {\n const darker = withL(base, Math.max(0, base.l - delta));\n if (contrastRatio(white, darker) >= 4.5) return { solid: darker, contrast: white };\n const lighter = withL(base, Math.min(1, base.l + delta));\n if (contrastRatio(dark, lighter) >= 4.5) return { solid: lighter, contrast: dark };\n }\n return { solid: palette.black, contrast: white };\n}\n\nconst rgba = (hex: string, alpha: number) => {\n const [r, g, b] = parseHex(hex).map((v) => Math.round(v * 255));\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nexport type IntentName = 'primary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info';\n\n/**\n * 대표색 하나로 intent(primary 등)의 라이트·다크 색 세트를 만든다. 결과는 createTheme 에 넘긴다.\n * - solid 는 넘긴 색을 그대로 쓴다 (다크모드에서 너무 어두우면 조금 밝힌다). 단 흰 글자·짙은 글자 모두\n * 대비 4.5:1 이 안 나오는 중간 밝기 색이면 4.5 가 나올 만큼만 밝기를 옮긴다.\n * - text 와 contrast(solid 위 글자색)는 WCAG AA 대비 4.5:1 을 만족하도록 계산한다.\n * - intent 가 'primary' 면 포커스 링 색(border.focus)도 함께 바꾼다.\n *\n * @example createTheme(createIntentColors('primary', '#7c3aed'))\n */\nexport function createIntentColors(intent: IntentName, color: string): ThemeInput {\n const input = toHex(parseHex(color));\n const base = rgbToOklch(parseHex(input));\n\n // 라이트\n const lightSubtle = withL(base, 0.97, Math.min(base.c, 0.12) * 0.3);\n const lightSubtleHover = withL(base, 0.93, Math.min(base.c, 0.12) * 0.45);\n const { solid, contrast: lightContrast } = solidWithContrast(input);\n const light = {\n solid,\n solidHover: hoverFor(rgbToOklch(parseHex(solid)), -0.06, lightContrast),\n contrast: lightContrast,\n subtle: lightSubtle,\n subtleHover: lightSubtleHover,\n text: findReadable(base, Math.min(base.l, 0.55), -0.02, [lightColors.bg.default, lightSubtle, lightSubtleHover]),\n };\n\n // 다크\n const darkBg = darkColors.bg.default;\n const { solid: darkSolid, contrast: darkContrast } = solidWithContrast(base.l < 0.5 ? withL(base, 0.55) : input);\n const darkBase = rgbToOklch(parseHex(darkSolid));\n const darkSubtleOnBg = blend(darkSolid, 0.16, darkBg);\n const darkSubtleHoverOnBg = blend(darkSolid, 0.26, darkBg);\n const dark = {\n solid: darkSolid,\n solidHover: hoverFor(darkBase, 0.06, darkContrast),\n contrast: darkContrast,\n subtle: rgba(darkSolid, 0.16),\n subtleHover: rgba(darkSolid, 0.26),\n text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg]),\n };\n\n // primary 는 포커스 링(border.focus)도 브랜드 색을 따라가게 한다. 다크는 어두운 배경에서 잘 보이도록 solid 보다 밝게.\n // 포커스 링은 그래픽이라 배경과 3:1 이상이어야 한다(WCAG 1.4.11). 노랑·하늘색처럼 밝은 색은 라이트에서 미달이므로\n // 그때는 배경 대비 4.5:1 이 보장된 text 색을 쓴다.\n const focusOn = (candidate: string, fallback: string, bg: string) =>\n contrastRatio(candidate, bg) >= 3 ? candidate : fallback;\n const focus =\n intent === 'primary'\n ? {\n light: { border: { focus: focusOn(light.solid, light.text, lightColors.bg.default) } },\n dark: {\n border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) },\n },\n }\n : undefined;\n\n return {\n light: { color: { [intent]: light, ...focus?.light } },\n dark: { color: { [intent]: dark, ...focus?.dark } },\n } as ThemeInput;\n}\n","import type { ThemeInput } from './createTheme';\n\n/**\n * 입력 칸·체크 컨트롤 테두리를 배경과 3:1 이상으로 올리는 테마 입력 (WCAG 1.4.11 비텍스트 대비) — 2.0 에서 기본값이 될 예정.\n * - 입력 칸(border.input): 기본 border.default 는 흰 배경과 1.3:1. hover 는 테두리보다 더 진하게(다크는 더 밝게).\n * - Checkbox·Radio 테두리, 꺼진 Switch, Stepper 예정 단계(border.control): 기본 border.strong 은 라이트 흰 배경과 2.07:1.\n *\n * @example\n * <ThemeProvider overrides={createTheme(strongInputBorders)}>…</ThemeProvider>\n * createTheme(createIntentColors('primary', '#7c3aed'), strongInputBorders) // 브랜드 테마와 함께\n */\n// 색은 palette 를 import 하지 않고 값으로 적는다 — `palette.gray[600]` 같은 속성 읽기는 번들러가 지우지 못해,\n// 이 값을 쓰지 않는 앱에도 tokens 전체가 딸려 왔다(\"앱 기본\" +460 B). palette 와 같은지는 presets.test.ts 가 확인한다.\nexport const strongInputBorders: ThemeInput = /* @__PURE__ */ Object.freeze({\n // 라이트: gray600 / gray700 — 흰 배경 5.18:1, bg.subtle(gray50) 4.91:1\n // 체크 컨트롤: gray600 — 흰 배경 5.18:1\n light: { color: { border: { input: '#666e76', inputHover: '#495057', control: '#666e76' } } },\n // 다크: gray500 / gray300 — gray600 은 bg.subtle(gray900) 위에서 2.98:1 이라 한 단계 밝게. bg.default 8.57:1, bg.subtle 7.43:1\n // 체크 컨트롤: gray500 — 다크 기본값(border.strong)과 같다(이미 8.57:1)\n dark: { color: { border: { input: '#adb5bd', inputHover: '#dee2e6', control: '#adb5bd' } } },\n});\n","import type { BestowMessages } from './LocaleProvider';\n\nconst WEEKDAYS_LONG = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] as const;\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n] as const;\n\n/**\n * 영어 문구. `<LocaleProvider messages={en}>` 로 쓴다. 따로 import 할 때만 번들에 들어간다.\n * 한국 서비스 전용 부품(사업자등록번호 등)의 문구도 영어로 바뀌지만 서식(하이픈 위치 등)은 그대로다.\n */\nexport const en: BestowMessages = {\n close: 'Close',\n loading: 'Loading',\n notifications: 'Notifications',\n breadcrumb: 'Breadcrumb',\n pagination: 'Pagination',\n paginationPrevious: 'Previous page',\n paginationNext: 'Next page',\n paginationPage: (page) => `Page ${page}`,\n newWindow: '(opens in a new window)',\n noResults: 'No results',\n openList: 'Show options',\n clearSelection: 'Clear selection',\n skipToContent: 'Skip to main content',\n decrement: 'Decrease',\n increment: 'Increase',\n steps: 'Progress',\n stepCompleted: 'completed',\n stepInProgress: 'in progress',\n fileSelect: 'Choose files',\n fileDropHint: 'or drag and drop here',\n fileList: 'Selected files',\n fileRemove: (name) => `Remove ${name}`,\n filesSelected: (count) => `${count} ${count === 1 ? 'file' : 'files'} selected`,\n fileRemoved: (name) => `${name} removed`,\n fileTooLarge: (name, maxSize) => `${name}: files must be ${maxSize} or smaller.`,\n fileTypeNotAllowed: (name) => `${name}: this file type is not allowed.`,\n fileTooMany: (maxFiles) => `You can upload up to ${maxFiles} files.`,\n dateRangeStart: 'Start date',\n dateRangeEnd: 'End date',\n dateRangePresets: 'Quick select',\n errorSummaryTitle: (count) => `There ${count === 1 ? 'is 1 problem' : `are ${count} problems`} with your answers`,\n rangeStart: 'minimum',\n rangeEnd: 'maximum',\n agreeAll: 'Agree to all',\n required: 'Required',\n optional: 'Optional',\n show: 'View',\n hide: 'Hide',\n verificationCode: 'Verification code',\n verificationCodeHint: (length, type) => `Enter the ${length}-${type === 'numeric' ? 'digit' : 'character'} code.`,\n resend: 'Resend',\n verificationExpired: 'The code has expired. Please request a new one.',\n phoneNumber: 'Phone number',\n businessNumber: 'Business registration number',\n businessNumberInvalid: 'This business registration number is not valid. Please check it again.',\n businessNumberIncomplete: 'Enter all 10 digits.',\n residentNumber: 'Resident registration number',\n residentNumberFront: 'First 6 digits',\n residentNumberBack: 'Last 7 digits',\n residentNumberBackFirst: 'First digit of the second part',\n residentNumberInvalid: 'This number is not valid. Check the date of birth and the first digit of the second part.',\n residentNumberIncomplete: (digits) => `Enter all ${digits} digits.`,\n amount: 'Amount',\n currencyUnit: 'KRW',\n address: 'Address',\n addressSearch: 'Find address',\n addressSearchDescription: 'Search by road name, building name, or lot number.',\n postalCode: 'Postal code',\n baseAddress: 'Address',\n baseAddressPlaceholder: 'Select \"Find address\" to choose an address',\n detailAddress: 'Address line 2',\n detailAddressPlaceholder: 'Apartment, suite, unit, etc.',\n addressLoading: 'Loading address search',\n addressLoadError: 'Could not load address search. Please try again later.',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,\n weekdaysShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n weekdaysLong: WEEKDAYS_LONG,\n dayLabel: (date, weekdayLong) =>\n `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,\n holiday: 'holiday',\n today: 'today',\n date: 'Date',\n openCalendar: 'Choose date',\n calendar: 'Calendar',\n dateInvalid: 'This date does not exist.',\n dateUnavailable: 'This date is not available.',\n dateIncomplete: 'Enter the date as YYYY-MM-DD.',\n};\n","/**\n * 서버 컴포넌트에서도 부를 수 있는 함수·값·컴포넌트 (hook·Context·Radix 를 쓰지 않는 모듈만).\n * 빌드(ESM)에서 \"use client\" 가 붙지 않는 파일로 나가, Next.js 서버 컴포넌트에서 createTheme() 등을 바로 호출할 수 있다.\n * 여기에 넣는 모듈은 React hook(서버에서도 되는 useId 제외)·createContext·Radix·이벤트 핸들러·useMessages 를 쓰면 안 된다\n * (서버에서 실행됨). 컴포넌트에 이런 것을 더하게 되면 client.ts 로 옮긴다 — 같은 이름을 양쪽에서 export 하면 안 된다.\n */\nexport { vars, themeClass, type ThemeMode, type ThemeName, type ThemeTokens } from './theme/contract.css';\nexport { createIntentColors, contrastRatio, type IntentName } from './theme/color';\nexport {\n createTheme,\n type BestowTheme,\n type DeepPartial,\n type ThemeInput,\n type ThemeOverrides,\n} from './theme/createTheme';\nexport { strongInputBorders } from './theme/presets';\nexport { en } from './i18n/en';\n// 한국 서비스 서식·검증 함수는 @bestow-ui/korean-utils 로 옮겼다(1.6). 예전처럼 여기서도 같은 이름으로 쓸 수 있게 다시 export 한다.\nexport {\n formatBusinessNumber,\n formatKoreanAmount,\n formatKoreanDate,\n formatPhoneNumber,\n isValidBusinessNumber,\n} from '@bestow-ui/korean-utils';\n// 1.7 에 korean-utils 에 추가한 주민번호·마스킹 함수 — react 만 설치한 사용자도 같은 이름으로 쓴다\nexport {\n formatResidentNumber,\n isValidResidentNumber,\n maskCardNumber,\n maskDigits,\n maskName,\n maskPhoneNumber,\n maskResidentNumber,\n parseResidentNumber,\n type ResidentNumberInfo,\n} from '@bestow-ui/korean-utils';\nexport { parseISODate, toISODate } from './utils/date';\nexport { media, type Breakpoint, type Responsive } from './utils/responsive';\nexport {\n composeExtraAddress,\n kakaoPostcodeProvider,\n type AddressProvider,\n type AddressSearchResult,\n} from './components/AddressInput/addressProviders';\nexport { hasAllRequiredAgreements, type AgreementItem } from './components/AgreementGroup/agreements';\n\n// hook·이벤트 핸들러가 없는 표시용 컴포넌트 — 서버 컴포넌트로 렌더링된다(클라이언트 JS 없음, `as` 에 서버 컴포넌트도 넘길 수 있음).\n// playground 첫 페이지가 `as` 에 서버 함수를 넘겨 빌드로 확인한다(클라이언트 컴포넌트면 \"Functions cannot be passed\" 로 실패).\nexport * from './components/Badge';\nexport * from './components/Card';\nexport * from './components/Container';\nexport * from './components/DescriptionList';\nexport {\n dateRangePresets,\n presetRange,\n type DateRange,\n type DateRangePreset,\n} from './components/DateRangePicker/presets';\nexport * from './components/Divider';\nexport * from './components/FormField';\nexport * from './components/Grid';\nexport * from './components/Progress';\nexport * from './components/Skeleton';\nexport * from './components/Stack';\nexport * from './components/Typography';\nexport * from './components/VisuallyHidden';\nexport { focusField } from './utils/focusField';\n","/**\n * 반응형 구간 미디어쿼리(모바일 우선 min-width). `@bestow-ui/tokens` 의 breakpoint(px)를 em 으로 바꾼 값 —\n * em 이라 브라우저 기본 글꼴 크기를 키우면 구간도 따라 바뀐다. 값을 직접 적는다(최상위에서 tokens 객체 속성을 읽으면\n * tokens 전체가 번들에 딸려 온다 — responsive.test.ts 가 tokens 와 같은지 확인).\n *\n * @example style({ flexDirection: 'column', '@media': { [media.md]: { flexDirection: 'row' } } }) // vanilla-extract\n */\nexport const media = {\n sm: '(min-width: 40em)',\n md: '(min-width: 48em)',\n lg: '(min-width: 64em)',\n xl: '(min-width: 80em)',\n} as const;\n\nexport type Breakpoint = keyof typeof media;\n\n/**\n * 한 값 또는 구간별 값. 구간 값은 그 폭 이상에서 쓰이고, 주지 않은 구간은 앞(좁은) 구간 값을 이어받는다.\n *\n * @example direction={{ base: 'column', md: 'row' }} // 768px 미만은 세로, 이상은 가로\n */\nexport type Responsive<T> = T | ({ base?: T } & { [K in Breakpoint]?: T });\n\nconst keys = ['base', 'sm', 'md', 'lg', 'xl'] as const;\n\nexport const isResponsiveObject = <T>(value: Responsive<T> | undefined): value is Exclude<Responsive<T>, T> =>\n typeof value === 'object' && value !== null;\n\n/**\n * 각 구간의 실제 값(앞 구간을 이어받음)을 CSS 변수 `--bestow-<name>-<구간>` 으로 out 에 넣는다.\n * styles/responsive.css.ts 의 responsiveProperty 가 이 변수를 미디어쿼리로 읽는다.\n */\nexport function responsiveVars<T>(\n out: Record<string, string>,\n name: string,\n value: Responsive<T> | undefined,\n toCss: (value: T) => string,\n) {\n if (value === undefined) return;\n const values = (isResponsiveObject(value) ? value : { base: value }) as Partial<Record<(typeof keys)[number], T>>;\n let current: T | undefined;\n for (const key of keys) {\n current = values[key] ?? current;\n if (current !== undefined) out[`--bestow-${name}-${key}`] = toCss(current);\n }\n}\n\n/** space 토큰 키 → 테마 CSS 변수. 변수 이름(--bestow-space-*)이 공개 API 로 고정이라 vars 를 import 하지 않고 적는다 */\nexport const spaceVar = (key: string | number) => `var(--bestow-space-${key})`;\n","import type { ReactNode } from 'react';\n\n// 서버 컴포넌트에서도 부를 수 있도록 컴포넌트(hook·Radix) 파일과 분리한 순수 타입·함수\n\nexport interface AgreementItem {\n value: string;\n /** 약관 이름 (예: \"서비스 이용약관 동의\") */\n label: ReactNode;\n /** 필수 동의 여부. 이름 앞에 \"필수\"/\"선택\" 이 붙는다 */\n required?: boolean;\n /** 펼쳐서 보여 줄 약관 내용. 있으면 \"보기\" 버튼이 생긴다 */\n content?: ReactNode;\n}\n\n/** 필수 항목에 모두 동의했는지 */\nexport function hasAllRequiredAgreements(items: AgreementItem[], value: string[]): boolean {\n return items.every((item) => !item.required || value.includes(item.value));\n}\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Badge.css';\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** 시각적 스타일 */\n variant?: 'solid' | 'soft' | 'outline';\n /** 의미 색상. 일반 안내는 info (브랜드 색과 따로 파랑) */\n color?: 'primary' | 'neutral' | 'danger' | 'success' | 'warning' | 'info';\n /** 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 텍스트 앞에 표시할 아이콘 (장식용 — 의미는 텍스트로 전달한다) */\n startIcon?: ReactNode;\n}\n\nexport const Badge = /* @__PURE__ */ forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant, color, size, startIcon, className, children, ...rest },\n ref,\n) {\n return (\n <span ref={ref} className={cx(styles.badge({ variant, color, size }), className)} {...rest}>\n {startIcon && <span className={styles.icon}>{startIcon}</span>}\n {children}\n </span>\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Badge/Badge.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7WWwW6jMBCG7zyFj7sHVwlpd1vyMNVgD2DV2Mg2JdlV332FqQmBJLIPewHJM___8w1Iw9P7Pn97YZV6Jn8zQriwnYRzQYSSQiGtJJ6OGSEgRa2ocNjagjBUDs14XENXkE8wPygt0To9UNsBQ7r_OVZLbTiaguy7E7FaCk6cAWU7MKjcpYEa4KK3K6PpkFa9lN6s0srRClohz6vORYVaUPbSPqCoG3erfarQFrnoWy_wuM1dwaJM3Xj1oqERDifmgig9GOjG4080TjCQ1I-tIK3gXOIx-8qewrhf_LhLYB-10b3ilGmpTUgOXTufcrM0jnjh9yvKL7_vd7j2-33H7_YbTH34VdirD1soV2_Ae9DOiBbMmfpPyXsvpvFQwbRyBqxbifLHMX3pJK4kh4cShyd3TfYWRaawdwZkAllQJJHNMfFkQbIlgygyDqpGkwD2LUjiCiHxWN-KLVUZRWV7xtDaBKygSOKaY-LBgmRLxqLIBjBKqDqBLCiSyOaYeLIg2ZLxKDKhKp2A5duTmKaAeCDfv6VBT9MKNS-jfNf5HdwB5-MEptV8c-_ml91nxZ91z3xOT_Y6tNqGPv_30Hob-hodeogMte11aPPwN2e8U9sYoT4KsjtmX_8Ai2Cozx8JAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var badge = /* @__PURE__ */ _7a468({defaultClassName:'_1295cfn4',variantClassNames:{variant:{solid:'_1295cfn5',soft:'_1295cfn6',outline:'_1295cfn7'},color:{primary:'_1295cfn8',neutral:'_1295cfn9',danger:'_1295cfna',success:'_1295cfnb',warning:'_1295cfnc',info:'_1295cfnd'},size:{sm:'_1295cfne',md:'_1295cfnf',lg:'_1295cfng'}},defaultVariants:{variant:'soft',color:'neutral',size:'md'},compoundVariants:[]});\nexport var icon = '_1295cfnh';","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Card.css';\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n /** 시각적 스타일. outline 은 테두리, elevated 는 그림자(다크 모드는 가장자리 ring 포함), soft 는 옅은 배경 */\n variant?: 'outline' | 'elevated' | 'soft';\n /** 안쪽 여백 (sm 16px, md 24px, lg 32px). 이미지를 가장자리까지 붙이려면 none */\n padding?: 'none' | 'sm' | 'md' | 'lg';\n /** 렌더링할 요소 (기본 div). 목록이면 li, 독립된 콘텐츠면 article 등 */\n as?: ElementType;\n}\n\n/** 배경·테두리·radius·padding 을 가진 컨테이너. 자식 사이 간격은 16px. */\nexport const Card = /* @__PURE__ */ forwardRef<HTMLElement, CardProps>(function Card(\n { variant, padding, as: Component = 'div', className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(styles.card({ variant, padding }), className)} {...rest} />;\n});\n\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/** 제목·설명 영역. Typography 와 함께 쓴다. */\nexport const CardHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardHeader(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.header, className)} {...rest} />;\n});\n\n/** 본문 영역 */\nexport const CardBody = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardBody(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.body, className)} {...rest} />;\n});\n\n/** 버튼 등 동작 영역. 오른쪽 정렬 */\nexport const CardFooter = /* @__PURE__ */ forwardRef<HTMLDivElement, CardSectionProps>(function CardFooter(\n { className, ...rest },\n ref,\n) {\n return <div ref={ref} className={cx(styles.footer, className)} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Card/Card.css.ts.vanilla.css?source=LmRudWYxdTAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKICBtaW4td2lkdGg6IDA7CiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmVzdG93LXJhZGl1cy1sZyk7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJnLWRlZmF1bHQpOwogIGNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItZmctZGVmYXVsdCk7CiAgZm9udC1mYW1pbHk6IHZhcigtLWJlc3Rvdy1mb250LWZhbWlseS1zYW5zKTsKfQouZG51ZjF1MSB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItYm9yZGVyLWRlZmF1bHQpOwp9Ci5kbnVmMXUyIHsKICBib3gtc2hhZG93OiB2YXIoLS1iZXN0b3ctc2hhZG93LW1kKTsKfQouZG51ZjF1MyB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJnLXN1YnRsZSk7Cn0KLmRudWYxdTQgewogIHBhZGRpbmc6IDA7Cn0KLmRudWYxdTUgewogIHBhZGRpbmc6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKfQouZG51ZjF1NiB7CiAgcGFkZGluZzogdmFyKC0tYmVzdG93LXNwYWNlLTYpOwp9Ci5kbnVmMXU3IHsKICBwYWRkaW5nOiB2YXIoLS1iZXN0b3ctc3BhY2UtOCk7Cn0KLmRudWYxdTggewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IHZhcigtLWJlc3Rvdy1zcGFjZS0xKTsKfQouZG51ZjF1OSB7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXNtKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtbm9ybWFsKTsKfQouZG51ZjF1YSB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgZ2FwOiB2YXIoLS1iZXN0b3ctc3BhY2UtMik7Cn0';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var body = 'dnuf1u9';\nexport var card = /* @__PURE__ */ _7a468({defaultClassName:'dnuf1u0',variantClassNames:{variant:{outline:'dnuf1u1',elevated:'dnuf1u2',soft:'dnuf1u3'},padding:{none:'dnuf1u4',sm:'dnuf1u5',md:'dnuf1u6',lg:'dnuf1u7'}},defaultVariants:{variant:'outline',padding:'md'},compoundVariants:[]});\nexport var footer = 'dnuf1ua';\nexport var header = 'dnuf1u8';","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Container.css';\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (페이지 본문이면 'main') */\n as?: ElementType;\n /** 최대 폭 — sm 640 · md 768 · lg 1024(기본) · xl 1280px(구간 폭과 같음, 기본 글꼴 크기를 따름), full 은 제한 없음 */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /** 좌우 여백을 없앤다 (기본은 좁은 화면 16px, md 구간부터 24px) */\n flush?: boolean;\n}\n\n/** 내용을 가운데에 두고 최대 폭과 좌우 여백을 정하는 페이지 틀 */\nexport const Container = /* @__PURE__ */ forwardRef<HTMLElement, ContainerProps>(function Container(\n { as: Component = 'div', size, flush, className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(styles.container({ size, flush }), className)} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Container/Container.css.ts.vanilla.css?source=LmI0MDRubjAgewogIHdpZHRoOiAxMDAlOwogIG1hcmdpbi1pbmxpbmU6IGF1dG87CiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWJlc3Rvdy1zcGFjZS00KTsKfQouYjQwNG5uMSB7CiAgbWF4LXdpZHRoOiA0MHJlbTsKfQouYjQwNG5uMiB7CiAgbWF4LXdpZHRoOiA0OHJlbTsKfQouYjQwNG5uMyB7CiAgbWF4LXdpZHRoOiA2NHJlbTsKfQouYjQwNG5uNCB7CiAgbWF4LXdpZHRoOiA4MHJlbTsKfQouYjQwNG5uNSB7CiAgbWF4LXdpZHRoOiBub25lOwp9Ci5iNDA0bm42IHsKICBwYWRkaW5nLWlubGluZTogMDsKfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5iNDA0bm4wIHsKICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1iZXN0b3ctc3BhY2UtNik7CiAgfQogIC5iNDA0bm42IHsKICAgIHBhZGRpbmctaW5saW5lOiAwOwogIH0KfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var container = /* @__PURE__ */ _7a468({defaultClassName:'b404nn0',variantClassNames:{size:{sm:'b404nn1',md:'b404nn2',lg:'b404nn3',xl:'b404nn4',full:'b404nn5'},flush:{true:'b404nn6'}},defaultVariants:{size:'lg'},compoundVariants:[]});","import { assignInlineVars } from '@vanilla-extract/dynamic';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './DescriptionList.css';\n\nexport interface DescriptionListItem {\n /** 이름 (dt) */\n term: ReactNode;\n /** 값 (dd) */\n description: ReactNode;\n}\n\nexport interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {\n /** 이름–값 목록 */\n items: DescriptionListItem[];\n /** horizontal(기본): 이름 왼쪽·값 오른쪽. vertical: 이름 위·값 아래(좁은 곳·긴 값) */\n layout?: 'horizontal' | 'vertical';\n /** horizontal 일 때 이름 열의 폭 (기본 30%) — 예: \"8rem\" */\n termWidth?: string;\n /** 항목 사이에 구분선 */\n divided?: boolean;\n}\n\n/**\n * 이름–값 목록(주문 상세의 고객·연락처·금액 등). `<dl>` 안에 항목마다 `<div><dt/><dd/></div>` 로 그려 스크린리더가 쌍으로 읽는다.\n * hook 이 없어 서버 컴포넌트로도 렌더링된다.\n */\nexport const DescriptionList = /* @__PURE__ */ forwardRef<HTMLDListElement, DescriptionListProps>(\n function DescriptionList({ items, layout = 'horizontal', termWidth, divided, className, style, ...rest }, ref) {\n return (\n <dl\n ref={ref}\n className={cx(styles.root, className)}\n style={termWidth ? { ...assignInlineVars({ [styles.termWidth]: termWidth }), ...style } : style}\n {...rest}\n >\n {items.map((item, index) => (\n <div key={index} className={styles.item({ layout, divided })}>\n <dt className={styles.term}>{item.term}</dt>\n <dd className={styles.description}>{item.description}</dd>\n </div>\n ))}\n </dl>\n );\n },\n);\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/DescriptionList/DescriptionList.css.ts.vanilla.css?source=Ll8xNGcwb3Q0MSB7CiAgLS1fMTRnMG90NDA6IDMwJTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgbWFyZ2luOiAwOwogIGZvbnQtZmFtaWx5OiB2YXIoLS1iZXN0b3ctZm9udC1mYW1pbHktc2Fucyk7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXNtKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtbm9ybWFsKTsKfQouXzE0ZzBvdDQyIHsKICBtaW4td2lkdGg6IDA7Cn0KLl8xNGcwb3Q0MyB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLV8xNGcwb3Q0MCkgbWlubWF4KDAsIDFmcik7CiAgY29sdW1uLWdhcDogdmFyKC0tYmVzdG93LXNwYWNlLTQpOwogIHBhZGRpbmctYmxvY2s6IHZhcigtLWJlc3Rvdy1zcGFjZS0yKTsKfQouXzE0ZzBvdDQ0IHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZ2FwOiB2YXIoLS1iZXN0b3ctc3BhY2UtMSk7CiAgcGFkZGluZy1ibG9jazogdmFyKC0tYmVzdG93LXNwYWNlLTIpOwp9Ci5fMTRnMG90NDU6bm90KDpsYXN0LWNoaWxkKSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJlc3Rvdy1jb2xvci1ib3JkZXItZGVmYXVsdCk7Cn0KLl8xNGcwb3Q0NiB7CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiB2YXIoLS1iZXN0b3ctZm9udC13ZWlnaHQtbWVkaXVtKTsKICBjb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWZnLW11dGVkKTsKICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQouXzE0ZzBvdDQ3IHsKICBtYXJnaW46IDA7CiAgY29sb3I6IHZhcigtLWJlc3Rvdy1jb2xvci1mZy1kZWZhdWx0KTsKICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var description = '_14g0ot47';\nexport var item = /* @__PURE__ */ _7a468({defaultClassName:'_14g0ot42',variantClassNames:{layout:{horizontal:'_14g0ot43',vertical:'_14g0ot44'},divided:{true:'_14g0ot45'}},defaultVariants:{layout:'horizontal'},compoundVariants:[]});\nexport var root = '_14g0ot41';\nexport var term = '_14g0ot46';\nexport var termWidth = 'var(--_14g0ot40)';","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Divider.css';\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n /** 방향. vertical 은 flex 행 안에서 부모 높이를 채운다 */\n orientation?: 'horizontal' | 'vertical';\n /** 시각적 구분만 하고 의미가 없으면 true — 스크린리더에서 숨긴다 */\n decorative?: boolean;\n /**\n * 가운데에 표시할 텍스트 (예: \"또는\"). horizontal 에서만 쓴다.\n * separator 역할의 자식은 스크린리더가 읽지 않으므로, 텍스트가 있으면 선만 숨기고 텍스트는 읽히게 둔다.\n */\n children?: ReactNode;\n}\n\nexport const Divider = /* @__PURE__ */ forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', decorative, className, children, ...rest },\n ref,\n) {\n if (children && orientation === 'horizontal') {\n return (\n <div ref={ref} className={cx(styles.labeled, className)} {...rest}>\n <span className={styles.line} aria-hidden />\n {children}\n <span className={styles.line} aria-hidden />\n </div>\n );\n }\n\n const a11y = decorative\n ? { role: 'none' }\n : { role: 'separator', 'aria-orientation': orientation === 'vertical' ? ('vertical' as const) : undefined };\n return <div ref={ref} className={cx(styles.divider({ orientation }), className)} {...a11y} {...rest} />;\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Divider/Divider.css.ts.vanilla.css?source=Ll8xdDNncTh2MCB7CiAgZmxleC1zaHJpbms6IDA7CiAgYm9yZGVyOiBub25lOwogIG1hcmdpbjogMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItYm9yZGVyLWRlZmF1bHQpOwp9Ci5fMXQzZ3E4djEgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMXB4Owp9Ci5fMXQzZ3E4djIgewogIHdpZHRoOiAxcHg7CiAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICBtaW4taGVpZ2h0OiAxZW07Cn0KLl8xdDNncTh2MyB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGdhcDogdmFyKC0tYmVzdG93LXNwYWNlLTMpOwogIHdpZHRoOiAxMDAlOwogIGZvbnQtZmFtaWx5OiB2YXIoLS1iZXN0b3ctZm9udC1mYW1pbHktc2Fucyk7CiAgZm9udC1zaXplOiB2YXIoLS1iZXN0b3ctZm9udC1zaXplLXhzKTsKICBsaW5lLWhlaWdodDogdmFyKC0tYmVzdG93LWZvbnQtbGluZS1oZWlnaHQtdGlnaHQpOwogIGNvbG9yOiB2YXIoLS1iZXN0b3ctY29sb3ItZmctc3VidGxlKTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5fMXQzZ3E4djQgewogIGZsZXg6IDE7CiAgaGVpZ2h0OiAxcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmVzdG93LWNvbG9yLWJvcmRlci1kZWZhdWx0KTsKfQ';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var divider = /* @__PURE__ */ _7a468({defaultClassName:'_1t3gq8v0',variantClassNames:{orientation:{horizontal:'_1t3gq8v1',vertical:'_1t3gq8v2'}},defaultVariants:{orientation:'horizontal'},compoundVariants:[]});\nexport var labeled = '_1t3gq8v3';\nexport var line = '_1t3gq8v4';","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as fieldStyles from '../Input/Input.css';\n\n/**\n * FormField 가 자식에게 넘기는 연결 속성. 입력 요소(또는 입력 역할을 하는 요소)에 그대로 펼쳐 넣는다.\n * role=\"group\" 처럼 aria-invalid·aria-required 를 받지 못하는 역할이면 그 둘은 빼고 안의 컨트롤에 준다(axe aria-allowed-attr).\n */\nexport interface FormFieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\n 'aria-required'?: true;\n}\n\n/** render 함수의 둘째 인자 — 입력에 펼치지 않는 정보 */\nexport interface FormFieldMeta {\n /** 레이블 요소의 id — label 로 이름을 받을 수 없는 요소(div role=\"combobox\" 등)는 aria-labelledby 에 넣는다 */\n labelId?: string;\n /** 도움말 요소의 id */\n helperId?: string;\n}\n\nexport interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'> {\n /** 입력 위에 표시할 레이블 (짧게 — 보조 설명은 helperText) */\n label?: ReactNode;\n /** 입력 아래 도움말. error 일 때는 오류 메시지로 표시된다 */\n helperText?: ReactNode;\n /** 오류 상태 — 자식에 aria-invalid 를 넘기고 helperText 를 오류 색으로 */\n error?: boolean;\n /** 필수 — 레이블에 * 를 붙이고 자식에 aria-required 를 넘긴다(네이티브 검증이 필요하면 입력에 required 를 직접) */\n required?: boolean;\n /** 입력 요소의 id. 생략하면 만든다 (ErrorSummary 링크·focusField 가 이 id 로 찾아간다) */\n id?: string;\n /** 부모 너비를 꽉 채운다 */\n fullWidth?: boolean;\n /**\n * 입력을 그리는 함수. 첫째 인자를 입력 요소에 그대로 펼쳐 넣는다.\n * @example {(field) => <input {...field} />}\n * @example {(field, { labelId }) => <CustomSelect {...field} aria-labelledby={labelId} />}\n */\n children: (control: FormFieldControlProps, meta: FormFieldMeta) => ReactNode;\n}\n\n/**\n * 직접 만든 입력·다른 라이브러리 입력에 TextField 와 같은 레이블·도움말·오류 연결을 붙인다.\n * hook 은 useId 뿐이라 서버 컴포넌트에서도 쓸 수 있다.\n */\nexport const FormField = /* @__PURE__ */ forwardRef<HTMLDivElement, FormFieldProps>(function FormField(\n { label, helperText, error, required, id, fullWidth, className, children, ...rest },\n ref,\n) {\n const generatedId = useId();\n const controlId = id ?? generatedId;\n const labelId = label ? `${controlId}-label` : undefined;\n const helperId = helperText ? `${controlId}-helper` : undefined;\n\n return (\n <div ref={ref} className={cx(fieldStyles.field, fullWidth && fieldStyles.fieldFullWidth, className)} {...rest}>\n {label && (\n <label id={labelId} htmlFor={controlId} className={fieldStyles.label}>\n {label}\n {required && (\n <span className={fieldStyles.requiredMark} aria-hidden>\n *\n </span>\n )}\n </label>\n )}\n {children(\n {\n id: controlId,\n 'aria-describedby': helperId,\n 'aria-invalid': error || undefined,\n 'aria-required': required || undefined,\n },\n { labelId, helperId },\n )}\n {helperText && (\n <p id={helperId} className={fieldStyles.helperText({ error })}>\n {helperText}\n </p>\n )}\n </div>\n );\n});\n","import type { space } from '@bestow-ui/tokens';\nimport { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport { responsiveVars, spaceVar, type Responsive } from '../../utils/responsive';\nimport * as styles from './Grid.css';\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (목록이면 'ul') */\n as?: ElementType;\n /** 열 개수 (같은 폭). 구간별로: `{ base: 1, md: 2, lg: 3 }`. 생략하면 한 열 */\n columns?: Responsive<number>;\n /**\n * 칸의 최소 폭(CSS 길이, 예: '220px'·'14rem'). 주면 화면 폭에 맞춰 열 개수를 자동으로 정한다(columns 대신).\n * 화면이 이 폭보다 좁으면 칸이 화면 폭으로 줄어든다(가로 스크롤 없음).\n */\n minItemWidth?: string;\n /** 칸 사이 간격 (space 토큰 키). 구간별 값도 받는다 */\n gap?: Responsive<keyof typeof space>;\n}\n\nconst repeatColumns = (count: number) => `repeat(${count}, minmax(0, 1fr))`;\n\nexport const Grid = /* @__PURE__ */ forwardRef<HTMLElement, GridProps>(function Grid(\n { as: Component = 'div', columns, minItemWidth, gap, className, style, ...rest },\n ref,\n) {\n const responsive: Record<string, string> = {};\n if (minItemWidth)\n responsive['--bestow-grid-columns-base'] = `repeat(auto-fill, minmax(min(100%, ${minItemWidth}), 1fr))`;\n else responsiveVars(responsive, 'grid-columns', columns, repeatColumns);\n responsiveVars(responsive, 'gap', gap, spaceVar);\n\n return (\n <Component\n ref={ref}\n className={cx(styles.grid, styles.columns, gap !== undefined && styles.responsiveGap, className)}\n style={{ ...responsive, ...style } as CSSProperties}\n {...rest}\n />\n );\n});\n","import 'src/styles/responsive.css.ts.vanilla.css?source=LmlhcmJsYTAgewogIC0tYmVzdG93LWdhcC1iYXNlOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC1zbTogaW5pdGlhbDsKICAtLWJlc3Rvdy1nYXAtbWQ6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ2FwLWxnOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC14bDogaW5pdGlhbDsKICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtYmFzZSk7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtc20pOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5pYXJibGEwIHsKICAgIGdhcDogdmFyKC0tYmVzdG93LWdhcC1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLmlhcmJsYTAgewogICAgZ2FwOiB2YXIoLS1iZXN0b3ctZ2FwLWxnKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDgwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAteGwpOwogIH0KfQ';\nimport 'src/components/Grid/Grid.css.ts.vanilla.css?source=Ll8xdHlsdjltMCB7CiAgZGlzcGxheTogZ3JpZDsKICBtaW4td2lkdGg6IDA7Cn0KLl8xdHlsdjltMSB7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLWJhc2U6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXNtOiBpbml0aWFsOwogIC0tYmVzdG93LWdyaWQtY29sdW1ucy1tZDogaW5pdGlhbDsKICAtLWJlc3Rvdy1ncmlkLWNvbHVtbnMtbGc6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXhsOiBpbml0aWFsOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tYmVzdG93LWdyaWQtY29sdW1ucy1iYXNlKTsKfQpAbWVkaWEgKG1pbi13aWR0aDogNDBlbSkgewogIC5fMXR5bHY5bTEgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXNtKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQ4ZW0pIHsKICAuXzF0eWx2OW0xIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tYmVzdG93LWdyaWQtY29sdW1ucy1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLl8xdHlsdjltMSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLWJlc3Rvdy1ncmlkLWNvbHVtbnMtbGcpOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogODBlbSkgewogIC5fMXR5bHY5bTEgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1iZXN0b3ctZ3JpZC1jb2x1bW5zLXhsKTsKICB9Cn0';\nexport var columns = '_1tylv9m1';\nexport var grid = '_1tylv9m0';\nexport var responsiveGap = 'iarbla0';","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Progress.css';\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** 현재 값 (0 ~ max). 생략하거나 null 이면 진행률을 모르는 상태(indeterminate)로 움직이는 막대를 보여 준다 */\n value?: number | null;\n /** 최댓값 */\n max?: number;\n /** 막대 위에 보이는 레이블. progressbar 의 이름이 된다 */\n label?: ReactNode;\n /** 레이블이 없을 때 스크린리더용 이름 */\n 'aria-label'?: string;\n /** 오른쪽에 값 텍스트(기본 \"42%\")를 보여 준다 */\n showValue?: boolean;\n /** 값 텍스트 형식. 화면 표시와 스크린리더(aria-valuetext)에 함께 쓴다 (예: (v, max) => `${v}/${max}개`) */\n formatValue?: (value: number, max: number) => string;\n /** 막대 두께 (sm 4px · md 8px · lg 12px) */\n size?: 'sm' | 'md' | 'lg';\n /** 의미 색상 */\n color?: 'primary' | 'neutral' | 'success' | 'warning' | 'danger';\n}\n\nconst defaultFormat = (value: number, max: number) => `${Math.round((value / max) * 100)}%`;\n\nexport const Progress = /* @__PURE__ */ forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n label,\n 'aria-label': ariaLabel,\n showValue,\n formatValue = defaultFormat,\n size,\n color,\n className,\n ...rest\n },\n ref,\n) {\n const labelId = useId();\n const isIndeterminate = value === undefined || value === null;\n const safeMax = max > 0 ? max : 100;\n const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value));\n const valueText = isIndeterminate ? undefined : formatValue(clamped, safeMax);\n\n return (\n <div ref={ref} className={cx(styles.root, className)} {...rest}>\n {(label || (showValue && valueText)) && (\n <div className={styles.header}>\n {label && (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n )}\n {/* 스크린리더는 progressbar 의 aria-valuetext 로 읽으므로 화면용 텍스트는 숨긴다 */}\n {showValue && valueText && (\n <span className={styles.value} aria-hidden>\n {valueText}\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={isIndeterminate ? undefined : clamped}\n aria-valuetext={valueText}\n className={styles.track({ size })}\n >\n <div\n className={styles.indicator({ color })}\n data-state={isIndeterminate ? 'indeterminate' : clamped >= safeMax ? 'complete' : 'loading'}\n style={isIndeterminate ? undefined : { width: `${(clamped / safeMax) * 100}%` }}\n />\n </div>\n </div>\n );\n});\n","import 'src/styles/animations.css.ts.vanilla.css?source=#H4sIAAAAAAAAA51T3WqDMBS-9ynOjaBsGYlV27qbPsbuRhqjDdVEYjZahu8-plspGjPtXeB8-f4453Dm10LTmrfwTkrdHLcYw5cHUGhV9w8A1VAmzDUD_OoBdB6AUeMRGUadd5gSkllCMk-IHYSR2yGA0VS2hdJ1NjwraniAEuw_A4p3fggtoxUP8Ms-Df_J5CZL8I2MhA7HG3cFq0VmG3sku9VxvKLjB9tc0FsydmFL9xYwWrGAYOzDE0RxcwmnPuwfsUs8dYhrZX56xTkvnVq_uE16h7SKbcdiR8rOpVYfMkeNaoURSmbQZ5yeoRWL7sFWzd1Y88RFeTK2Q_-bfFIdIKRpLi6IMqZ0LpRETEnDpUEDyhVzPye5gthiy5WSLtuhvq6lexMlN2z3DVsBqiZDBQAA';\nimport 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Progress/Progress.css.ts.vanilla.css?source=#H4sIAAAAAAAAA41Vy27bMBC8-yuIAgXiAw05cZpUQYECvfQDeiuKYCWu5G0oUl0u_WiRfy9IxY2lOI1hwIY5q5nZ5ZBa3C9l8_CrKAr1Z6aUodBb2Jeqsbi7m6n8qw0x1kLelar2NnYuIS30pdoAX2hdYRC_1aGHGvXlPKFbMrIu1bIo3mca70Q30JHdTx46QnQAF-Z3s8fZ4uBqedoVWGqdJsEulKqCgJYcJuBnDELNXtfeCTop1eCpQtki_tf21fyfz0C_8ZTLtK5DlwuToF4jtWs5VXoEa0nf47Yuc1u5cvsqx4DoDg3FQbT21vOkNK_pptUGG4h2InSVhTrglpwml20FAZZSQRT_JmkXBc3zZDbABE60ix0y1aUSqKIFTgthJLzKwr0PNOSG0YLQJm-S3yA31m9LtSZjhm2Z5KXybJA1g6EYJuaGRd1Ea7OzCuqHln10Rr_eS3XcS-V3OqzBJAvkAooq8mfZ716ZQ4iVWBzP9jq3eMjAqt-N0A8j9HaC3ozQ5eUEvh3Dp4dCbo1MkhBhcIdJ50mO2zCRIYHaee7AzhVCQO2jjEW_GxBI8RD89I6cQUHuyIHgux_Z0NMmrQY74KiDQfN-2XJf3RSglotVGOjJJQVFriFHgiOpj5nurI3rmTrgvRbcTbIN55M4jMJgT5BU55OEWNcYwgmS-nySLbAj154gMeeTGHAt8jPH53RHgLroGRvkoBlNrNHozh8OX_o_zwKTjI2z4_xwjT6OCt_MxYvjOwrHgVQp30NNsi9VsbgeZJ69N56T5dxgKBXU6baYWF49qfko6SYr84EN3pJRX8BtIHzDnbz0__TUsYIGk14Vx-ZeTv4rtWubjuCT178Elo90LAcAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var header = '_1tvkq001';\nexport var indicator = /* @__PURE__ */ _7a468({defaultClassName:'_1tvkq008',variantClassNames:{color:{primary:'_1tvkq009',neutral:'_1tvkq00a',success:'_1tvkq00b',warning:'_1tvkq00c',danger:'_1tvkq00d'}},defaultVariants:{color:'primary'},compoundVariants:[]});\nexport var label = '_1tvkq002';\nexport var root = '_1tvkq000';\nexport var track = /* @__PURE__ */ _7a468({defaultClassName:'_1tvkq004',variantClassNames:{size:{sm:'_1tvkq005',md:'_1tvkq006',lg:'_1tvkq007'}},defaultVariants:{size:'md'},compoundVariants:[]});\nexport var value = '_1tvkq003';","import type { space } from '@bestow-ui/tokens';\nimport { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport { isResponsiveObject, responsiveVars, spaceVar, type Responsive } from '../../utils/responsive';\nimport * as styles from './Stack.css';\n\ntype Direction = 'row' | 'column' | 'row-reverse' | 'column-reverse';\ntype Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\ntype Justify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\ntype SpaceKey = keyof typeof space;\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 */\n as?: ElementType;\n /** 배치 방향 (기본 column). 구간별로: `{ base: 'column', md: 'row' }` */\n direction?: Responsive<Direction>;\n /** 자식 사이 간격 (space 토큰 키). 구간별로: `{ base: 3, lg: 6 }` */\n gap?: Responsive<SpaceKey>;\n /** 교차축 정렬 (align-items). 구간별 값도 받는다 */\n align?: Responsive<Align>;\n /** 주축 정렬 (justify-content). 구간별 값도 받는다 */\n justify?: Responsive<Justify>;\n /** 줄바꿈 허용 */\n wrap?: boolean;\n}\n\nconst flexValues: Record<string, string> = {\n start: 'flex-start',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\nconst flexValue = (value: string) => flexValues[value] ?? value;\n\n// 구간별 값을 받는 속성: [prop, CSS 변수 이름, 값 → CSS, 반응형 클래스]\nconst responsiveProps = [\n ['direction', 'stack-direction', String, styles.responsiveDirection],\n ['gap', 'gap', spaceVar, styles.responsiveGap],\n ['align', 'stack-align', flexValue, styles.responsiveAlign],\n ['justify', 'stack-justify', flexValue, styles.responsiveJustify],\n] as const;\n\nexport const Stack = /* @__PURE__ */ forwardRef<HTMLElement, StackProps>(function Stack(\n { as: Component = 'div', direction, gap, align, justify, wrap, className, style, ...rest },\n ref,\n) {\n // 한 값이면 지금처럼 recipe 클래스, 구간별 값이면 반응형 클래스 + 인라인 CSS 변수(그 속성은 recipe 에 넘기지 않음)\n const props: Record<string, unknown> = { direction: direction ?? 'column', gap, align, justify };\n const variants: Record<string, unknown> = { wrap };\n const classes: string[] = [];\n const cssVars: Record<string, string> = {};\n for (const [key, name, toCss, responsiveClass] of responsiveProps) {\n const value = props[key] as Responsive<string>;\n if (!isResponsiveObject(value)) variants[key] = value;\n else {\n // 방향은 base 를 주지 않아도 기본 column 에서 시작한다\n responsiveVars(cssVars, name, key === 'direction' ? { base: 'column', ...value } : value, toCss);\n classes.push(responsiveClass);\n }\n }\n\n return (\n <Component\n ref={ref}\n className={cx(styles.stack(variants), ...classes, className)}\n style={classes.length ? ({ ...cssVars, ...style } as CSSProperties) : style}\n {...rest}\n />\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/styles/responsive.css.ts.vanilla.css?source=LmlhcmJsYTAgewogIC0tYmVzdG93LWdhcC1iYXNlOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC1zbTogaW5pdGlhbDsKICAtLWJlc3Rvdy1nYXAtbWQ6IGluaXRpYWw7CiAgLS1iZXN0b3ctZ2FwLWxnOiBpbml0aWFsOwogIC0tYmVzdG93LWdhcC14bDogaW5pdGlhbDsKICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtYmFzZSk7Cn0KQG1lZGlhIChtaW4td2lkdGg6IDQwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAtc20pOwogIH0KfQpAbWVkaWEgKG1pbi13aWR0aDogNDhlbSkgewogIC5pYXJibGEwIHsKICAgIGdhcDogdmFyKC0tYmVzdG93LWdhcC1tZCk7CiAgfQp9CkBtZWRpYSAobWluLXdpZHRoOiA2NGVtKSB7CiAgLmlhcmJsYTAgewogICAgZ2FwOiB2YXIoLS1iZXN0b3ctZ2FwLWxnKTsKICB9Cn0KQG1lZGlhIChtaW4td2lkdGg6IDgwZW0pIHsKICAuaWFyYmxhMCB7CiAgICBnYXA6IHZhcigtLWJlc3Rvdy1nYXAteGwpOwogIH0KfQ';\nimport 'src/components/Stack/Stack.css.ts.vanilla.css?source=#H4sIAAAAAAAAA63VQXLiMBAF0D2n0DIslIKEMGA2c5MpYTdGRJKJJGNIirtP2Y6BFqJDgA2rp49_0zLP_4arz-lyNR2wrx5jmXRrJXYJWyjYznqMaWl4JTO_TNhg1tv3njs_bHzNeCYtpF4WJmG2qJB6iaq0UKU2CL5eiuMWNmAdID0iYqMH3poDuVgnbCPsE-dzcL6ouFuLFPigj_CYxEOM_5D4BeMJiV8xnpJ4hLEg8RvGcxKPMU5JPME4o0cXDBpoHQxvQevgsfNGCyVzw6UH7dqd5s4L65FcnssUjAeLlLyQByZDbnXunLfg0yVi7-dsLhwoafDiqsatSuflYsfTwngw_mIVHdeROobIDSsVcdvOfQ6-AsCXeU0dELYogy_4oDxswKgd8vZ4_Stb70P9iYRrxHFFvEjfj68KXo86YdJIL4WaUdLp65zOrnMqv85tFXLhqw5fgEg7fBl8bBzt8v00ilbRY2gNPYLW0PVbE1RHdyTS-1gDdy5jnbsd-6l15-jenaKbd4ru3qmg_dmliEzgtFQzg78aMinY08mf92gAut9MJLgjv9wtp_v1Y-1Pg_x30HW_VCyh_E74TdtDTrzv5DF9dXZv31jCLX0POdG-49Fj-qr83r6xhFv6HnKifScP2ueturdvLOGWvoec_X_feleolAsAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var responsiveAlign = '_1jz9hj9t';\nexport var responsiveDirection = '_1jz9hj9s';\nexport var responsiveGap = 'iarbla0';\nexport var responsiveJustify = '_1jz9hj9u';\nexport var stack = /* @__PURE__ */ _7a468({defaultClassName:'_1jz9hj90',variantClassNames:{direction:{row:'_1jz9hj91',column:'_1jz9hj92','row-reverse':'_1jz9hj93','column-reverse':'_1jz9hj94'},gap:{'0':'_1jz9hj95','1':'_1jz9hj96','2':'_1jz9hj97','3':'_1jz9hj98','4':'_1jz9hj99','5':'_1jz9hj9a','6':'_1jz9hj9b','8':'_1jz9hj9c','10':'_1jz9hj9d','12':'_1jz9hj9e','16':'_1jz9hj9f'},align:{start:'_1jz9hj9g',center:'_1jz9hj9h',end:'_1jz9hj9i',stretch:'_1jz9hj9j',baseline:'_1jz9hj9k'},justify:{start:'_1jz9hj9l',center:'_1jz9hj9m',end:'_1jz9hj9n',between:'_1jz9hj9o',around:'_1jz9hj9p',evenly:'_1jz9hj9q'},wrap:{true:'_1jz9hj9r'}},defaultVariants:{},compoundVariants:[]});","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Typography.css';\n\nexport type TypographyVariant = 'display' | 'h1' | 'h2' | 'h3' | 'h4' | 'body-lg' | 'body' | 'body-sm' | 'caption';\n\nconst defaultElement: Record<TypographyVariant, ElementType> = {\n display: 'h1',\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n 'body-lg': 'p',\n body: 'p',\n 'body-sm': 'p',\n caption: 'span',\n};\n\nexport interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** 텍스트 스타일 */\n variant?: TypographyVariant;\n /** 렌더링할 요소. 기본값은 variant 에 따라 결정된다 (h1, p, span 등) */\n as?: ElementType;\n /** 글자 색상 */\n color?: 'default' | 'muted' | 'subtle' | 'primary' | 'danger' | 'success' | 'warning' | 'inherit';\n /** variant 의 기본 굵기를 덮어쓴다 */\n weight?: 'regular' | 'medium' | 'semibold' | 'bold';\n /** 정렬 */\n align?: 'start' | 'center' | 'end';\n /** 한 줄로 자르고 말줄임표를 표시한다 */\n truncate?: boolean;\n}\n\nexport const Typography = /* @__PURE__ */ forwardRef<HTMLElement, TypographyProps>(function Typography(\n { variant = 'body', as, color, weight, align, truncate, className, ...rest },\n ref,\n) {\n const Component = as ?? defaultElement[variant];\n return (\n <Component\n ref={ref}\n className={cx(styles.typography({ variant, color, weight, align, truncate }), className)}\n {...rest}\n />\n );\n});\n","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Typography/Typography.css.ts.vanilla.css?source=#H4sIAAAAAAAAA82Vy26DMBBF93yFl83CUZK-ydc4eDDTjm00NiVt1X-vQtTUCakAVVW6YeF7jzmyxjB_Rk_oF-I9E8IqNuhysVhnQpTeRVkqi_SaixfFV1JuIETfyiSRQbkwW2cf2Xy_0bLbqGsEfINz5G5d3mxpdnhLC2iqeK67T-TGk-7qhA5k9WM9iWXcPfcQxAgsQ60KdCYXcjFfrMAm1quR1tf_yvp6pPXqwtbLI-ubkdaTpANY_I34we52pB2ZS9jd_YUdg2lI8VQ5BlJb0Kne_Ug9q_9ez3m2ilK7h5F2wV7C7nHstQiXsFOdXeHJ8wncrcnSSA2lauhoXDfDlG3i8QwVw0xoNpEghfQAVDNaxa8ywvZIEAY4rZwB7mHlABaaooAQepwZ4FrFDp3pcVXKoauAMSYxfo_OhIk44E8TcAsaG5vSzxPo5Dt44GkCf8rajt2dllSExuUiRMXp0bheowAXgZOK71XA6SSvu9y_AJfk21xUqDW49RfzHQAR1gHDLmorjND9BSEXzres6nX28Ql_7_cqbQkAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var typography = /* @__PURE__ */ _7a468({defaultClassName:'kiolio0',variantClassNames:{variant:{display:'kiolio1',h1:'kiolio2',h2:'kiolio3',h3:'kiolio4',h4:'kiolio5','body-lg':'kiolio6',body:'kiolio7','body-sm':'kiolio8',caption:'kiolio9'},color:{'default':'kiolioa',muted:'kioliob',subtle:'kiolioc',primary:'kioliod',danger:'kiolioe',success:'kioliof',warning:'kioliog',inherit:'kiolioh'},weight:{regular:'kiolioi',medium:'kiolioj',semibold:'kioliok',bold:'kioliol'},align:{start:'kioliom',center:'kiolion',end:'kiolioo'},truncate:{true:'kioliop'}},defaultVariants:{variant:'body',color:'default'},compoundVariants:[]});","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { visuallyHidden } from '../../styles/visuallyHidden.css';\nimport { cx } from '../../utils/cx';\n\nexport interface VisuallyHiddenProps extends HTMLAttributes<HTMLElement> {\n /** 렌더링할 요소 (기본 span) */\n as?: ElementType;\n}\n\n/**\n * 화면에는 보이지 않고 스크린리더만 읽는 글자. 아이콘만 있는 열 머리글(\"작업\"), 보이는 글자에 붙는 보충 설명 등에 쓴다.\n * `display: none`·`hidden` 과 달리 보조기술이 읽는다. hook 이 없어 서버 컴포넌트로도 렌더링된다.\n */\nexport const VisuallyHidden = /* @__PURE__ */ forwardRef<HTMLElement, VisuallyHiddenProps>(function VisuallyHidden(\n { as: Component = 'span', className, ...rest },\n ref,\n) {\n return <Component ref={ref} className={cx(visuallyHidden, className)} {...rest} />;\n});\n"],"mappings":"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","names":["value","value","item","Badge","forwardRef","_7a468","jsx","forwardRef","Card","CardHeader","CardBody","CardFooter","forwardRef","_7a468","jsx","forwardRef","Container","forwardRef","_7a468","jsx","jsxs","forwardRef","DescriptionList","termWidth","item","forwardRef","_7a468","jsx","jsxs","forwardRef","Divider","forwardRef","jsx","jsxs","forwardRef","FormField","label","helperText","forwardRef","jsx","forwardRef","Grid","columns","forwardRef","useId","_7a468","header","label","root","jsx","jsxs","value","forwardRef","Progress","label","useId","root","header","forwardRef","_7a468","responsiveGap","jsx","value","responsiveGap","forwardRef","Stack","forwardRef","_7a468","jsx","forwardRef","Typography","forwardRef","jsx","forwardRef","VisuallyHidden"]}