@solapi/ui-kit 1.0.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.
Files changed (89) hide show
  1. package/README.md +153 -0
  2. package/dist/GlobalMfa-F9T2HvGA.cjs +1 -0
  3. package/dist/GlobalMfa-a9UddAbl.js +2176 -0
  4. package/dist/components/AuthFlow/AuthFlowGoogleOtpForm.d.ts +11 -0
  5. package/dist/components/AuthFlow/AuthFlowPasswordForm.d.ts +15 -0
  6. package/dist/components/AuthFlow/AuthFlowQueueItem.d.ts +6 -0
  7. package/dist/components/AuthFlow/AuthFlowSelfCert.d.ts +16 -0
  8. package/dist/components/AuthFlow/AuthFlowSimpleCert.d.ts +15 -0
  9. package/dist/components/AuthFlow/AuthFlowSmsForm.d.ts +33 -0
  10. package/dist/components/AuthFlow/AuthFlowTimer.d.ts +16 -0
  11. package/dist/components/AuthFlow/index.d.ts +6 -0
  12. package/dist/components/Confirm/Confirm.d.ts +3 -0
  13. package/dist/components/DatePicker/DatePicker.d.ts +21 -0
  14. package/dist/components/DatePicker/DateTimeField.d.ts +16 -0
  15. package/dist/components/DatePicker/MonthCalendar.d.ts +19 -0
  16. package/dist/components/DatePicker/TimeSelector.d.ts +13 -0
  17. package/dist/components/DatePicker/index.d.ts +4 -0
  18. package/dist/components/GlobalMfa/GlobalMfa.d.ts +3 -0
  19. package/dist/components/ListFilter/FilterChip.d.ts +21 -0
  20. package/dist/components/ListFilter/FilterPanelContent.d.ts +9 -0
  21. package/dist/components/ListFilter/ListFilter.d.ts +37 -0
  22. package/dist/components/ListFilter/NumberConditionSelect.d.ts +6 -0
  23. package/dist/components/ListFilter/SelectOptionButtons.d.ts +9 -0
  24. package/dist/components/ListFilter/index.d.ts +2 -0
  25. package/dist/components/Menu/Menu.d.ts +43 -0
  26. package/dist/components/Menu/index.d.ts +2 -0
  27. package/dist/components/Mfa/MfaEmail.d.ts +17 -0
  28. package/dist/components/Mfa/MfaMultiCert.d.ts +23 -0
  29. package/dist/components/Mfa/MfaPasswordNumPad.d.ts +11 -0
  30. package/dist/components/Mfa/MfaQueueItem.d.ts +7 -0
  31. package/dist/components/Mfa/MfaSelfCert.d.ts +20 -0
  32. package/dist/components/Mfa/MfaSms.d.ts +28 -0
  33. package/dist/components/Mfa/index.d.ts +4 -0
  34. package/dist/components/MiniTabs/MiniTabs.d.ts +28 -0
  35. package/dist/components/MiniTabs/index.d.ts +2 -0
  36. package/dist/components/Modal/Modal.d.ts +9 -0
  37. package/dist/components/Snackbar/Snackbar.d.ts +9 -0
  38. package/dist/components/Tabs/Tabs.d.ts +22 -0
  39. package/dist/components/Tabs/index.d.ts +1 -0
  40. package/dist/components/TextInput/TextInput.d.ts +30 -0
  41. package/dist/components/TextInput/index.d.ts +2 -0
  42. package/dist/components/common/Box.d.ts +27 -0
  43. package/dist/components/common/Button.d.ts +22 -0
  44. package/dist/components/common/Collapse.d.ts +19 -0
  45. package/dist/components/common/Divider.d.ts +15 -0
  46. package/dist/components/common/Grid.d.ts +51 -0
  47. package/dist/components/common/IconButton.d.ts +20 -0
  48. package/dist/components/common/Info.d.ts +10 -0
  49. package/dist/components/common/Paper.d.ts +19 -0
  50. package/dist/components/common/Popover.d.ts +20 -0
  51. package/dist/components/common/Stack.d.ts +17 -0
  52. package/dist/components/common/Typography.d.ts +20 -0
  53. package/dist/components/common/index.d.ts +15 -0
  54. package/dist/export/GlobalUIProvider.d.ts +20 -0
  55. package/dist/export/UIHost.d.ts +1 -0
  56. package/dist/export/UIProvider.d.ts +42 -0
  57. package/dist/export/index.d.ts +13 -0
  58. package/dist/federation/componentLoader.d.ts +8 -0
  59. package/dist/federation/hookLoader.d.ts +8 -0
  60. package/dist/federation/index.d.ts +4 -0
  61. package/dist/federation/providerLoader.d.ts +11 -0
  62. package/dist/federation/safeImport.d.ts +14 -0
  63. package/dist/federation.cjs +1 -0
  64. package/dist/federation.js +132 -0
  65. package/dist/hooks/useConfirm.d.ts +7 -0
  66. package/dist/hooks/useEnhancedMutation.d.ts +8 -0
  67. package/dist/hooks/useLingeringValue.d.ts +7 -0
  68. package/dist/hooks/useModal.d.ts +7 -0
  69. package/dist/hooks/useSnackbar.d.ts +12 -0
  70. package/dist/index-BpqgYc0Q.cjs +5 -0
  71. package/dist/index-DV20NPKR.js +18341 -0
  72. package/dist/index.cjs +1 -0
  73. package/dist/index.js +43 -0
  74. package/dist/lib/createMutationConfig.d.ts +62 -0
  75. package/dist/lib/phoneUtils.d.ts +1 -0
  76. package/dist/lib/typeDetector.d.ts +59 -0
  77. package/dist/stores/createConfirmStore.d.ts +24 -0
  78. package/dist/stores/createModalStore.d.ts +37 -0
  79. package/dist/stores/createSnackbarStore.d.ts +20 -0
  80. package/dist/stores/requestQueueStore.d.ts +41 -0
  81. package/dist/theme/ThemeProvider.d.ts +29 -0
  82. package/dist/theme/index.d.ts +8 -0
  83. package/dist/theme/tokens.d.ts +17 -0
  84. package/dist/theme/types.d.ts +126 -0
  85. package/dist/theme/utils.d.ts +52 -0
  86. package/dist/ui-kit.css +1 -0
  87. package/dist/utils/scrollLock.d.ts +6 -0
  88. package/dist/utils/supportAdapter.d.ts +22 -0
  89. package/package.json +66 -0
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-BpqgYc0Q.cjs");require("react/jsx-runtime");require("react");require("react-dom");exports.Box=e.Box;exports.Button=e.Button;exports.Collapse=e.Collapse;exports.DatePicker=e.DatePicker;exports.Divider=e.Divider;exports.GlobalUIProvider=e.GlobalUIProvider;exports.Grid=e.Grid;exports.IconButton=e.IconButton;exports.ListFilter=e.ListFilter;exports.Menu=e.Menu;exports.MiniTabs=e.MiniTabs_default;exports.Paper=e.Paper;exports.Stack=e.Stack;exports.Tabs=e.Tabs;exports.TextInput=e.TextInput;exports.ThemeProvider=e.ThemeProvider;exports.Typography=e.Typography;exports.createTransition=e.createTransition;exports.darkColors=e.darkColors;exports.defaultTheme=e.defaultTheme;exports.getCSSVariable=e.getCSSVariable;exports.getThemeBorderRadius=e.getThemeBorderRadius;exports.getThemeColor=e.getThemeColor;exports.getThemeFontSize=e.getThemeFontSize;exports.getThemeShadow=e.getThemeShadow;exports.getThemeSpacing=e.getThemeSpacing;exports.lightColors=e.lightColors;exports.mediaQuery=e.mediaQuery;exports.setCSSVariable=e.setCSSVariable;exports.spacing=e.spacing;exports.useConfirm=e.useConfirm;exports.useEnhancedMutation=e.useEnhancedMutation;exports.useModal=e.useModal;exports.useSnackbar=e.useSnackbar;exports.useTheme=e.useTheme;exports.useThemeOptional=e.useThemeOptional;exports.withAlpha=e.withAlpha;
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ import { B as o, a as i, C as n, F as h, D as l, y as m, G as u, a2 as T, L as p, E as d, A as g, a1 as S, S as c, r as C, b, N as B, T as P, Z as k, K as x, I as y, Q as I, X as M, U as f, W as v, Y as D, V as F, J as G, _ as V, R as w, a0 as z, u as A, z as E, t as L, x as O, O as Q, P as R, $ as U } from "./index-DV20NPKR.js";
2
+ import "react/jsx-runtime";
3
+ import "react";
4
+ import "react-dom";
5
+ export {
6
+ o as Box,
7
+ i as Button,
8
+ n as Collapse,
9
+ h as DatePicker,
10
+ l as Divider,
11
+ m as GlobalUIProvider,
12
+ u as Grid,
13
+ T as IconButton,
14
+ p as ListFilter,
15
+ d as Menu,
16
+ g as MiniTabs,
17
+ S as Paper,
18
+ c as Stack,
19
+ C as Tabs,
20
+ b as TextInput,
21
+ B as ThemeProvider,
22
+ P as Typography,
23
+ k as createTransition,
24
+ x as darkColors,
25
+ y as defaultTheme,
26
+ I as getCSSVariable,
27
+ M as getThemeBorderRadius,
28
+ f as getThemeColor,
29
+ v as getThemeFontSize,
30
+ D as getThemeShadow,
31
+ F as getThemeSpacing,
32
+ G as lightColors,
33
+ V as mediaQuery,
34
+ w as setCSSVariable,
35
+ z as spacing,
36
+ A as useConfirm,
37
+ E as useEnhancedMutation,
38
+ L as useModal,
39
+ O as useSnackbar,
40
+ Q as useTheme,
41
+ R as useThemeOptional,
42
+ U as withAlpha
43
+ };
@@ -0,0 +1,62 @@
1
+ import { MutationFunction, MutationFunctionContext } from '@tanstack/react-query';
2
+ import { AxiosError } from 'axios';
3
+ import { useRequestQueueStore, type QueuedRequest } from 'stores/requestQueueStore';
4
+ export { useRequestQueueStore, type QueuedRequest };
5
+ export interface Snackbar {
6
+ success: (message: string) => void;
7
+ error: (message: string) => void;
8
+ }
9
+ /**
10
+ * MFA 설정 인터페이스
11
+ * Federation을 통해 host app에서 주입하여 사용
12
+ */
13
+ export interface MfaSettings {
14
+ /** 기존 MFA 헤더 키 (기본값: 'x-mfa-data') */
15
+ legacyMfaHeaderKey?: string;
16
+ /** 신규 MFA 헤더 키 (기본값: 'x-auth-flow') */
17
+ newMfaHeaderKey?: string;
18
+ /** 인증 타입 라벨 매핑 */
19
+ authTypeLabels?: Record<string, string>;
20
+ /** 인증 타입 우선순위 */
21
+ authTypePriority?: string[];
22
+ /** MFA 리다이렉트 URL */
23
+ redirectUrl?: string;
24
+ }
25
+ /**
26
+ * 전역 MFA 설정을 업데이트합니다.
27
+ * host app에서 federation을 통해 import하여 사용합니다.
28
+ */
29
+ export declare function configureMfa(settings: Partial<MfaSettings>): void;
30
+ /**
31
+ * 현재 MFA 설정을 반환합니다.
32
+ */
33
+ export declare function getMfaSettings(): MfaSettings;
34
+ export interface EnhancedMutationOptions<TData, TError, TVariables, TContext> {
35
+ mfaKey?: string;
36
+ enableAlert?: boolean;
37
+ successMessage?: string;
38
+ errorMessage?: string;
39
+ onSuccess?: (data: TData, variables: TVariables, context: TContext | undefined) => void | Promise<void>;
40
+ onError?: (error: TError, variables: TVariables, context: TContext | undefined) => void | Promise<void>;
41
+ snackbar?: Snackbar;
42
+ mutationFn?: MutationFunction<TData, TVariables>;
43
+ [key: string]: unknown;
44
+ }
45
+ export declare function handleNewMfa(error: AxiosError): false | Promise<unknown>;
46
+ export declare function handleLegacyMfa(error: AxiosError): false | Promise<unknown>;
47
+ /**
48
+ * MFA 에러를 감지하고 처리합니다.
49
+ * 신규 MFA(x-auth-flow)와 기존 MFA(response.data.mfa) 모두 지원합니다.
50
+ */
51
+ export declare function handleMfa(error: AxiosError): false | Promise<unknown>;
52
+ /**
53
+ * React hook 없이 mutation config를 생성하는 순수 함수.
54
+ * Module Federation 환경에서 host app이 자체 useMutation과 함께 사용.
55
+ */
56
+ export declare function createMutationConfig<TData = unknown, TError = unknown, TVariables = void, TContext = unknown>(options?: EnhancedMutationOptions<TData, TError, TVariables, TContext>, snackbar?: Snackbar): {
57
+ mutationFn: (variables: TVariables, context: MutationFunctionContext) => Promise<TData>;
58
+ onSuccess: (data: TData, variables: TVariables, context: TContext | undefined) => Promise<void>;
59
+ onError: (error: TError, variables: TVariables, context: TContext | undefined) => Promise<void>;
60
+ mfaKey?: string;
61
+ };
62
+ export default createMutationConfig;
@@ -0,0 +1 @@
1
+ export function isPhoneNumber(number: any): string | false;
@@ -0,0 +1,59 @@
1
+ export function isClassComponent(component: any): boolean;
2
+ export function isFunctionComponent(component: any): boolean;
3
+ export function isReactComponent(component: any): boolean;
4
+ export function isElement(element: any): element is React.ReactElement<any, string | React.JSXElementConstructor<any>>;
5
+ export function isDOMTypeElement(element: any): boolean;
6
+ export function isCompositeTypeElement(element: any): boolean;
7
+ export function isString(string: any): boolean;
8
+ export function isNumber(number: any): boolean;
9
+ export function isNumberString(number: any): boolean;
10
+ export function isArray(array: any): boolean;
11
+ export function isObject(object: any): boolean;
12
+ export function isBoolean(data: any): boolean;
13
+ export function isEmptyObject(object: any): boolean;
14
+ export function isFunction(func: any): boolean;
15
+ export function isPromise(p: any): boolean;
16
+ export function isAsyncFunction(func: any): boolean;
17
+ export function isEmptyString(data: any): boolean;
18
+ export { isPhoneNumber };
19
+ export function isPersonalPhoneNumber(number: any): boolean;
20
+ export function isRegExp(regexp: any): boolean;
21
+ export function isEmail(email: any): boolean;
22
+ export function isUrl(url: any, requireProtocol?: boolean): boolean;
23
+ export function isUrlScheme(url: any): boolean;
24
+ export function isBusinessNumber(number: any): string | false;
25
+ export function isCorporationNumber(number: any): string | false;
26
+ export function isIPAddress(ip: any): boolean;
27
+ export function isMobile(): boolean;
28
+ export function isMemberId(memberId: any): boolean;
29
+ declare namespace _default {
30
+ export { isClassComponent };
31
+ export { isFunctionComponent };
32
+ export { isReactComponent };
33
+ export { isElement };
34
+ export { isDOMTypeElement };
35
+ export { isCompositeTypeElement };
36
+ export { isString };
37
+ export { isArray };
38
+ export { isObject };
39
+ export { isEmptyObject };
40
+ export { isFunction };
41
+ export { isPromise };
42
+ export { isAsyncFunction };
43
+ export { isNumber };
44
+ export { isNumberString };
45
+ export { isEmptyString };
46
+ export { isRegExp };
47
+ export { isEmail };
48
+ export { isUrl };
49
+ export { isUrlScheme };
50
+ export { isBusinessNumber };
51
+ export { isPhoneNumber };
52
+ export { isPersonalPhoneNumber };
53
+ export { isMobile };
54
+ export { isIPAddress };
55
+ export { isMemberId };
56
+ }
57
+ export default _default;
58
+ import React from 'react';
59
+ import { isPhoneNumber } from './phoneUtils';
@@ -0,0 +1,24 @@
1
+ export type Confirm = {
2
+ id: string;
3
+ title: string;
4
+ message: string;
5
+ confirmText: string;
6
+ cancelText: string;
7
+ alertMode: boolean;
8
+ resolve: (value: boolean) => void;
9
+ reject: (reason?: any) => void;
10
+ };
11
+ export type ConfirmProps = {
12
+ title?: string;
13
+ message: string;
14
+ confirmText?: string;
15
+ cancelText?: string;
16
+ alertMode?: boolean;
17
+ };
18
+ export type ConfirmState = {
19
+ confirms: Confirm[];
20
+ confirm: (props: ConfirmProps) => Promise<boolean>;
21
+ close: (id: string, result: boolean) => void;
22
+ closeAll: () => void;
23
+ };
24
+ export declare function createConfirmStore(): import("zustand/vanilla").StoreApi<ConfirmState>;
@@ -0,0 +1,37 @@
1
+ export type ModalMaxWidth = 'xs' | 'sm' | 'md' | number;
2
+ export type Modal = {
3
+ id: string;
4
+ title: string;
5
+ content: React.ReactNode | ((modal: Omit<Modal, 'content'>) => React.ReactNode);
6
+ maxWidth: ModalMaxWidth;
7
+ fullWidth: boolean;
8
+ fullHeight: boolean;
9
+ overrideButton: React.ReactNode | ((modal: Omit<Modal, 'overrideButton'>) => React.ReactNode);
10
+ customActions: React.ReactNode | ((modal: Omit<Modal, 'customActions'>) => React.ReactNode);
11
+ disableActions: boolean;
12
+ disableBackdropClick: boolean;
13
+ disableTransition: boolean;
14
+ onBeforeClose?: () => Promise<boolean> | boolean;
15
+ resolve: (value: boolean) => void;
16
+ reject: (reason?: any) => void;
17
+ };
18
+ export type ModalProps = {
19
+ title?: string;
20
+ content: React.ReactNode | ((dialog: Omit<Modal, 'content'>) => React.ReactNode);
21
+ maxWidth?: ModalMaxWidth;
22
+ fullWidth?: boolean;
23
+ fullHeight?: boolean;
24
+ overrideButton?: React.ReactNode | ((modal: Omit<Modal, 'overrideButton'>) => React.ReactNode);
25
+ customActions?: React.ReactNode | ((modal: Omit<Modal, 'customActions'>) => React.ReactNode);
26
+ disableActions?: boolean;
27
+ disableBackdropClick?: boolean;
28
+ disableTransition?: boolean;
29
+ onBeforeClose?: () => Promise<boolean> | boolean;
30
+ };
31
+ export type ModalState = {
32
+ modals: Modal[];
33
+ open: (props: ModalProps) => Promise<boolean>;
34
+ close: (id: string, result: boolean) => void;
35
+ closeAll: () => void;
36
+ };
37
+ export declare function createModalStore(): import("zustand/vanilla").StoreApi<ModalState>;
@@ -0,0 +1,20 @@
1
+ export type SnackbarSeverity = 'success' | 'error' | 'warning' | 'info';
2
+ export type SnackbarAction = {
3
+ label: string;
4
+ onClick: () => void;
5
+ };
6
+ export type SnackbarItem = {
7
+ id: string;
8
+ message: string;
9
+ severity: SnackbarSeverity;
10
+ autoHideMs?: number;
11
+ timer?: ReturnType<typeof window.setTimeout>;
12
+ actions?: SnackbarAction[];
13
+ };
14
+ export type SnackbarState = {
15
+ items: SnackbarItem[];
16
+ showSnackbar: (message: string, severity?: SnackbarSeverity, autoHideMs?: number, actions?: SnackbarAction[]) => void;
17
+ hideSnackbar: (id: string) => void;
18
+ clear: () => void;
19
+ };
20
+ export declare function createSnackbarStore(): import("zustand/vanilla").StoreApi<SnackbarState>;
@@ -0,0 +1,41 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ export type QueuedRequest = {
3
+ id: string;
4
+ status: string;
5
+ config: AxiosRequestConfig;
6
+ reason: string;
7
+ createdAt: number;
8
+ isNewMfa?: boolean;
9
+ mfa?: {
10
+ [key: string]: any;
11
+ };
12
+ then?: (data: any) => void;
13
+ catch?: (error: any) => void;
14
+ };
15
+ type RequestQueueState = {
16
+ queue: QueuedRequest[];
17
+ isProcessing: boolean;
18
+ lastAddedRequest: QueuedRequest | null;
19
+ lastRemovedRequestId: string | null;
20
+ enqueue: (config: AxiosRequestConfig, options?: {
21
+ reason?: string;
22
+ mfa?: {
23
+ [key: string]: any;
24
+ };
25
+ isNewMfa?: boolean;
26
+ then?: (data: any) => void;
27
+ catch?: (error: any) => void;
28
+ }) => string;
29
+ dequeue: (id: string) => void;
30
+ clearQueue: () => void;
31
+ getQueueStatus: () => {
32
+ total: number;
33
+ };
34
+ updateQueue: (id: string, data: any) => void;
35
+ resolve: (id: string, data: any) => void;
36
+ reject: (id: string, error: any) => void;
37
+ getLastAddedRequest: () => QueuedRequest | null;
38
+ getLastRemovedRequestId: () => string | null;
39
+ };
40
+ export declare const useRequestQueueStore: import("zustand").UseBoundStore<import("zustand").StoreApi<RequestQueueState>>;
41
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Theme Provider
3
+ * CSS Variables를 사용한 테마 시스템 구현
4
+ */
5
+ import React from 'react';
6
+ import { Theme, ThemeMode, ThemeConfig, ThemeColors } from './types';
7
+ interface ThemeContextValue {
8
+ theme: Theme;
9
+ mode: ThemeMode;
10
+ setMode: (mode: ThemeMode) => void;
11
+ updateColors: (colors: Partial<ThemeColors>) => void;
12
+ }
13
+ interface ThemeProviderProps {
14
+ children: React.ReactNode;
15
+ config?: ThemeConfig;
16
+ }
17
+ /**
18
+ * ThemeProvider Component
19
+ */
20
+ export declare const ThemeProvider: React.FC<ThemeProviderProps>;
21
+ /**
22
+ * useTheme Hook
23
+ */
24
+ export declare const useTheme: () => ThemeContextValue;
25
+ /**
26
+ * Optional useTheme Hook (doesn't throw error)
27
+ */
28
+ export declare const useThemeOptional: () => ThemeContextValue | null;
29
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Theme System Export
3
+ * Host 앱에서 사용할 수 있도록 모든 theme 관련 기능 export
4
+ */
5
+ export type { Theme, ThemeMode, ThemeConfig, ThemeColors, ThemeSpacing, ThemeTypography, ThemeBorderRadius, ThemeShadows, ThemeTransition, ThemeBreakpoints } from './types';
6
+ export { defaultTheme, lightColors, darkColors } from './tokens';
7
+ export { ThemeProvider, useTheme, useThemeOptional } from './ThemeProvider';
8
+ export { getCSSVariable, setCSSVariable, getThemeColor, getThemeSpacing, getThemeFontSize, getThemeBorderRadius, getThemeShadow, createTransition, mediaQuery, withAlpha, spacing } from './utils';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Design Tokens
3
+ * 디자인 시스템의 기본 토큰 정의
4
+ */
5
+ import { Theme, ThemeColors } from './types';
6
+ /**
7
+ * Light Mode Colors
8
+ */
9
+ export declare const lightColors: ThemeColors;
10
+ /**
11
+ * Dark Mode Colors
12
+ */
13
+ export declare const darkColors: ThemeColors;
14
+ /**
15
+ * Default Theme
16
+ */
17
+ export declare const defaultTheme: Theme;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Theme System Types
3
+ */
4
+ export interface ThemeColors {
5
+ primary: string;
6
+ primaryHover: string;
7
+ primaryActive: string;
8
+ primaryAlpha: string;
9
+ secondary: string;
10
+ secondaryHover: string;
11
+ secondaryActive: string;
12
+ secondaryAlpha: string;
13
+ success: string;
14
+ successLight: string;
15
+ successDark: string;
16
+ successAlpha: string;
17
+ error: string;
18
+ errorLight: string;
19
+ errorDark: string;
20
+ errorAlpha: string;
21
+ warning: string;
22
+ warningLight: string;
23
+ warningDark: string;
24
+ warningAlpha: string;
25
+ info: string;
26
+ infoLight: string;
27
+ infoDark: string;
28
+ infoAlpha: string;
29
+ background: string;
30
+ surface: string;
31
+ border: string;
32
+ borderLight: string;
33
+ text: string;
34
+ textSecondary: string;
35
+ textDisabled: string;
36
+ textHint: string;
37
+ disabled: string;
38
+ disabledBackground: string;
39
+ overlay: string;
40
+ }
41
+ export interface ThemeSpacing {
42
+ xs: string;
43
+ sm: string;
44
+ md: string;
45
+ lg: string;
46
+ xl: string;
47
+ xxl: string;
48
+ }
49
+ export interface ThemeTypography {
50
+ fontFamily: string;
51
+ fontSize: {
52
+ xs: string;
53
+ sm: string;
54
+ md: string;
55
+ lg: string;
56
+ xl: string;
57
+ xxl: string;
58
+ };
59
+ fontWeight: {
60
+ light: number;
61
+ regular: number;
62
+ medium: number;
63
+ semibold: number;
64
+ bold: number;
65
+ };
66
+ lineHeight: {
67
+ tight: number;
68
+ normal: number;
69
+ relaxed: number;
70
+ };
71
+ }
72
+ export interface ThemeBorderRadius {
73
+ none: string;
74
+ sm: string;
75
+ md: string;
76
+ lg: string;
77
+ xl: string;
78
+ full: string;
79
+ }
80
+ export interface ThemeShadows {
81
+ none: string;
82
+ sm: string;
83
+ md: string;
84
+ lg: string;
85
+ xl: string;
86
+ }
87
+ export interface ThemeTransition {
88
+ duration: {
89
+ fast: string;
90
+ normal: string;
91
+ slow: string;
92
+ };
93
+ timing: {
94
+ easeIn: string;
95
+ easeOut: string;
96
+ easeInOut: string;
97
+ };
98
+ }
99
+ export interface ThemeBreakpoints {
100
+ xs: string;
101
+ sm: string;
102
+ md: string;
103
+ lg: string;
104
+ xl: string;
105
+ }
106
+ export interface Theme {
107
+ colors: ThemeColors;
108
+ spacing: ThemeSpacing;
109
+ typography: ThemeTypography;
110
+ borderRadius: ThemeBorderRadius;
111
+ shadows: ThemeShadows;
112
+ transition: ThemeTransition;
113
+ breakpoints: ThemeBreakpoints;
114
+ spacingUnit: number;
115
+ gridColumns: number;
116
+ transitionDurationMs: {
117
+ fast: number;
118
+ normal: number;
119
+ slow: number;
120
+ };
121
+ }
122
+ export type ThemeMode = 'light' | 'dark';
123
+ export interface ThemeConfig {
124
+ mode: ThemeMode;
125
+ customColors?: Partial<ThemeColors>;
126
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Theme Utilities
3
+ * CSS Variables를 쉽게 사용하기 위한 유틸리티 함수들
4
+ */
5
+ /**
6
+ * CSS Variable 값 가져오기
7
+ */
8
+ export declare const getCSSVariable: (variableName: string) => string;
9
+ /**
10
+ * CSS Variable 값 설정하기
11
+ */
12
+ export declare const setCSSVariable: (variableName: string, value: string) => void;
13
+ /**
14
+ * Theme Color 가져오기
15
+ */
16
+ export declare const getThemeColor: (colorName: string) => string;
17
+ /**
18
+ * Theme Spacing 가져오기
19
+ */
20
+ export declare const getThemeSpacing: (size: string) => string;
21
+ /**
22
+ * Theme Font Size 가져오기
23
+ */
24
+ export declare const getThemeFontSize: (size: string) => string;
25
+ /**
26
+ * Theme Border Radius 가져오기
27
+ */
28
+ export declare const getThemeBorderRadius: (size: string) => string;
29
+ /**
30
+ * Theme Shadow 가져오기
31
+ */
32
+ export declare const getThemeShadow: (size: string) => string;
33
+ /**
34
+ * Transition 생성 헬퍼
35
+ */
36
+ export declare const createTransition: (property: string | string[], duration?: "fast" | "normal" | "slow", timing?: "easeIn" | "easeOut" | "easeInOut") => string;
37
+ /**
38
+ * Media Query 헬퍼
39
+ */
40
+ export declare const mediaQuery: {
41
+ up: (breakpoint: "xs" | "sm" | "md" | "lg" | "xl") => string;
42
+ down: (breakpoint: "xs" | "sm" | "md" | "lg" | "xl") => string;
43
+ between: (start: "xs" | "sm" | "md" | "lg" | "xl", end: "xs" | "sm" | "md" | "lg" | "xl") => string;
44
+ };
45
+ /**
46
+ * Alpha 채널 추가 (rgba 변환)
47
+ */
48
+ export declare const withAlpha: (color: string, alpha: number) => string;
49
+ /**
50
+ * Spacing 계산 헬퍼 (배수 적용)
51
+ */
52
+ export declare const spacing: (multiplier: number, base?: string) => string;
@@ -0,0 +1 @@
1
+ ._root_1p4to_2{position:fixed;bottom:var(--spacing-md);left:var(--spacing-md);z-index:1500;pointer-events:none}._snackbarContainer_1p4to_10{display:flex;flex-direction:column;gap:var(--spacing-sm)}._snackbar_1p4to_10{pointer-events:auto;width:420px}._snackbar_1p4to_10>div{display:flex;flex-direction:column;padding:12px var(--spacing-md);font-size:0;line-height:1;border-left:4px solid;border-radius:var(--border-radius-md);box-shadow:var(--shadow-md)}._snackbar_1p4to_10>div._info_1p4to_29{background-color:#333;color:#fff;border-color:transparent}._snackbar_1p4to_10>div._success_1p4to_34{background-color:#333;color:#2ed843;border-color:#2ed843}._snackbar_1p4to_10>div._warning_1p4to_39{background-color:#333;color:var(--color-warning);border-color:var(--color-warning)}._snackbar_1p4to_10>div._error_1p4to_44{background-color:#333;color:var(--color-error);border-color:var(--color-error)}._topRow_1p4to_49{display:flex;align-items:center;gap:var(--spacing-md)}._icon_1p4to_54{flex-shrink:0;align-self:flex-start}._closeButton_1p4to_58{color:#fff;padding:var(--spacing-xs);flex-shrink:0;align-self:flex-start}._closeButton_1p4to_58:hover{background-color:#ffffff26}._snackbar_1p4to_10 p{font-size:var(--font-size-sm);margin:0;font-family:var(--font-family);color:#fff;text-align:left;flex:1;line-height:1.5}._actions_1p4to_76{display:flex;gap:var(--spacing-xs);justify-content:flex-end;margin-top:var(--spacing-sm)}._actionButton_1p4to_82{font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:#fff;background:#ffffff1f;border:none;padding:4px 10px;border-radius:var(--border-radius-sm);cursor:pointer;white-space:nowrap}._actionButton_1p4to_82:hover{background-color:#ffffff38}._enter_1p4to_99{opacity:0;transform:translate(-10px)}._enterActive_1p4to_103{opacity:1;transform:translate(0);transition:opacity var(--transition-duration-normal) var(--transition-timing-ease-out),transform var(--transition-duration-normal) var(--transition-timing-ease-out)}._exit_1p4to_110{opacity:1;transform:translate(0)}._exitActive_1p4to_114{opacity:0;transform:translate(-10px);transition:opacity var(--transition-duration-fast) var(--transition-timing-ease-in),transform var(--transition-duration-fast) var(--transition-timing-ease-in)}@media(max-width:640px){._root_1p4to_2{left:var(--spacing-md);right:var(--spacing-md);bottom:unset;top:var(--spacing-md);top:calc(var(--spacing-md) + env(safe-area-inset-top,0px))}._snackbar_1p4to_10{width:100%}._snackbar_1p4to_10>div{width:100%}._closeButton_1p4to_58{min-width:44px;min-height:44px;padding:var(--spacing-sm)}._enter_1p4to_99{opacity:0;transform:translateY(-10px)}._enterActive_1p4to_103{opacity:1;transform:translateY(0);transition:opacity var(--transition-duration-normal) var(--transition-timing-ease-out),transform var(--transition-duration-normal) var(--transition-timing-ease-out)}._exit_1p4to_110{opacity:1;transform:translateY(0)}._exitActive_1p4to_114{opacity:0;transform:translateY(-10px);transition:opacity var(--transition-duration-fast) var(--transition-timing-ease-in),transform var(--transition-duration-fast) var(--transition-timing-ease-in)}}._container_bvge5_5._fullWidth_bvge5_5{width:100%}._item_bvge5_9{min-width:0}._typography_1dcgk_1{margin:0;font-family:var(--font-family);color:var(--color-text)}._h1_1dcgk_9{font-size:2.5rem;font-weight:var(--font-weight-bold);line-height:var(--line-height-tight)}._h2_1dcgk_15{font-size:2rem;font-weight:var(--font-weight-bold);line-height:var(--line-height-tight)}._h3_1dcgk_21{font-size:1.75rem;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight)}._h4_1dcgk_27{font-size:1.5rem;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight)}._h5_1dcgk_33{font-size:1.25rem;font-weight:var(--font-weight-medium);line-height:var(--line-height-normal)}._h6_1dcgk_39{font-size:1.125rem;font-weight:var(--font-weight-medium);line-height:var(--line-height-normal)}._body1_1dcgk_45{font-size:var(--font-size-md);font-weight:var(--font-weight-regular);line-height:var(--line-height-normal)}._body2_1dcgk_51{font-size:var(--font-size-sm);font-weight:var(--font-weight-regular);line-height:var(--line-height-normal)}._caption_1dcgk_57{font-size:var(--font-size-xs);font-weight:var(--font-weight-regular);line-height:var(--line-height-normal)}._subtitle1_1dcgk_63{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);line-height:var(--line-height-normal)}._subtitle2_1dcgk_69{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:var(--line-height-normal)}._primary_1dcgk_76{color:var(--color-primary)}._secondary_1dcgk_80{color:var(--color-secondary)}._error_1dcgk_84{color:var(--color-error)}._warning_1dcgk_88{color:var(--color-warning)}._info_1dcgk_92{color:var(--color-info)}._success_1dcgk_96{color:var(--color-success)}._text-primary_1dcgk_100{color:var(--color-text)}._text-secondary_1dcgk_104,._textSecondary_1dcgk_105{color:var(--color-text-secondary)}._gutterBottom_1dcgk_110{margin-bottom:.5em}._noWrap_1dcgk_114{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._button_tcn3h_1{display:inline-flex;align-items:center;justify-content:center;position:relative;box-sizing:border-box;outline:none;border:0;margin:0;cursor:pointer;user-select:none;vertical-align:middle;text-decoration:none;font-family:var(--font-family);font-weight:var(--font-weight-medium);line-height:1.75;text-transform:none;min-width:64px;border-radius:var(--border-radius-sm);transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out),border-color var(--transition-duration-fast) var(--transition-timing-ease-out),color var(--transition-duration-fast) var(--transition-timing-ease-out),box-shadow var(--transition-duration-fast) var(--transition-timing-ease-out)}._button_tcn3h_1:focus-visible{outline:1px solid var(--color-primary);background-color:transparent;outline-offset:2px}._minimum_tcn3h_38{min-width:unset;padding:1px 6px;font-size:var(--font-size-xs)}._small_tcn3h_44{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-sm)}._medium_tcn3h_49{padding:calc(var(--spacing-xs) + 1px) calc(var(--spacing-sm) + 2px);font-size:var(--font-size-sm)}._large_tcn3h_54{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-md)}._text_tcn3h_60{background-color:transparent;border:none;color:var(--color-text)}._text_tcn3h_60:hover{background-color:#0000000a}._text_tcn3h_60:active{background-color:#00000014}._text_tcn3h_60._primary_tcn3h_74{color:var(--color-primary)}._text_tcn3h_60._primary_tcn3h_74:hover{background-color:var(--color-primary-alpha)}._text_tcn3h_60._secondary_tcn3h_82{color:var(--color-secondary)}._text_tcn3h_60._secondary_tcn3h_82:hover{background-color:var(--color-secondary-alpha)}._text_tcn3h_60._error_tcn3h_90{color:var(--color-error)}._text_tcn3h_60._error_tcn3h_90:hover{background-color:var(--color-error-alpha)}._text_tcn3h_60._warning_tcn3h_98{color:var(--color-warning)}._text_tcn3h_60._warning_tcn3h_98:hover{background-color:var(--color-warning-alpha)}._text_tcn3h_60._info_tcn3h_106{color:var(--color-info)}._text_tcn3h_60._info_tcn3h_106:hover{background-color:var(--color-info-alpha)}._text_tcn3h_60._success_tcn3h_114{color:var(--color-success)}._text_tcn3h_60._success_tcn3h_114:hover{background-color:var(--color-success-alpha)}._contained_tcn3h_123{background-color:var(--color-border-light);color:var(--color-text)}._contained_tcn3h_123:hover{background-color:var(--color-border)}._contained_tcn3h_123:active{background-color:var(--color-text-secondary)}._contained_tcn3h_123._primary_tcn3h_74{background-color:var(--color-primary);color:var(--color-background)}._contained_tcn3h_123._primary_tcn3h_74:hover{background-color:var(--color-primary-hover)}._contained_tcn3h_123._primary_tcn3h_74:active{background-color:var(--color-primary-active)}._contained_tcn3h_123._secondary_tcn3h_82{background-color:var(--color-secondary);color:var(--color-background)}._contained_tcn3h_123._secondary_tcn3h_82:hover{background-color:var(--color-secondary-hover)}._contained_tcn3h_123._secondary_tcn3h_82:active{background-color:var(--color-secondary-active)}._contained_tcn3h_123._error_tcn3h_90{background-color:var(--color-error);color:var(--color-background)}._contained_tcn3h_123._error_tcn3h_90:hover{background-color:var(--color-error-dark)}._contained_tcn3h_123._warning_tcn3h_98{background-color:var(--color-warning);color:var(--color-background)}._contained_tcn3h_123._warning_tcn3h_98:hover{background-color:var(--color-warning-dark)}._contained_tcn3h_123._info_tcn3h_106{background-color:var(--color-info);color:var(--color-background)}._contained_tcn3h_123._info_tcn3h_106:hover{background-color:var(--color-info-dark)}._contained_tcn3h_123._success_tcn3h_114{background-color:var(--color-success);color:var(--color-background)}._contained_tcn3h_123._success_tcn3h_114:hover{background-color:var(--color-success-dark)}._outlined_tcn3h_199{background-color:transparent;border:1px solid var(--color-border);color:var(--color-text)}._outlined_tcn3h_199:hover{background-color:#0000000a;border-color:#c4c4c4}._outlined_tcn3h_199._primary_tcn3h_74{color:var(--color-primary);border-color:var(--color-primary)}._outlined_tcn3h_199._primary_tcn3h_74:hover{background-color:var(--color-primary-alpha);border-color:var(--color-primary-hover)}._outlined_tcn3h_199._secondary_tcn3h_82{color:var(--color-secondary);border-color:var(--color-secondary)}._outlined_tcn3h_199._secondary_tcn3h_82:hover{background-color:var(--color-secondary-alpha);border-color:var(--color-secondary-hover)}._outlined_tcn3h_199._error_tcn3h_90{color:var(--color-error);border-color:var(--color-error)}._outlined_tcn3h_199._error_tcn3h_90:hover{background-color:var(--color-error-alpha);border-color:var(--color-error-dark)}._outlined_tcn3h_199._warning_tcn3h_98{color:var(--color-warning);border-color:var(--color-warning)}._outlined_tcn3h_199._warning_tcn3h_98:hover{background-color:var(--color-warning-alpha);border-color:var(--color-warning-dark)}._outlined_tcn3h_199._info_tcn3h_106{color:var(--color-info);border-color:var(--color-info)}._outlined_tcn3h_199._info_tcn3h_106:hover{background-color:var(--color-info-alpha);border-color:var(--color-info-dark)}._outlined_tcn3h_199._success_tcn3h_114{color:var(--color-success);border-color:var(--color-success)}._outlined_tcn3h_199._success_tcn3h_114:hover{background-color:var(--color-success-alpha);border-color:var(--color-success-dark)}._fullWidth_tcn3h_271{width:100%}._disabled_tcn3h_275{cursor:not-allowed;opacity:.6;pointer-events:none;color:var(--color-text-disabled);background-color:var(--color-disabled-background);box-shadow:none}._disabled_tcn3h_275._outlined_tcn3h_199{border-color:var(--color-border)}._iconButton_78he9_1{display:inline-flex;align-items:center;justify-content:center;position:relative;box-sizing:border-box;outline:none;border:0;margin:0;cursor:pointer;user-select:none;vertical-align:middle;text-decoration:none;background-color:transparent;border-radius:var(--border-radius-full);transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out),color var(--transition-duration-fast) var(--transition-timing-ease-out)}._small_78he9_24{padding:var(--spacing-xs);font-size:var(--font-size-sm)}._small_78he9_24 svg{width:18px;height:18px}._medium_78he9_34{padding:var(--spacing-sm);font-size:var(--font-size-md)}._medium_78he9_34 svg{width:20px;height:20px}._large_78he9_44{padding:var(--spacing-md);font-size:var(--font-size-lg)}._large_78he9_44 svg{width:24px;height:24px}._default_78he9_55{color:var(--color-text-secondary)}._default_78he9_55:hover{background-color:#0000000a;color:var(--color-text)}._default_78he9_55:active{background-color:#00000014}._primary_78he9_69{color:var(--color-primary)}._primary_78he9_69:hover,._primary_78he9_69:active{background-color:var(--color-primary-alpha)}._secondary_78he9_82{color:var(--color-secondary)}._secondary_78he9_82:hover,._secondary_78he9_82:active{background-color:var(--color-secondary-alpha)}._error_78he9_95{color:var(--color-error)}._error_78he9_95:hover,._error_78he9_95:active{background-color:var(--color-error-alpha)}._warning_78he9_108{color:var(--color-warning)}._warning_78he9_108:hover,._warning_78he9_108:active{background-color:var(--color-warning-alpha)}._info_78he9_121{color:var(--color-info)}._info_78he9_121:hover,._info_78he9_121:active{background-color:var(--color-info-alpha)}._success_78he9_134{color:var(--color-success)}._success_78he9_134:hover,._success_78he9_134:active{background-color:var(--color-success-alpha)}._disabled_78he9_147{cursor:not-allowed;opacity:.6;pointer-events:none;color:var(--color-text-disabled)}._divider_kfqte_1{margin:0;flex-shrink:0;border-width:0;border-style:solid;border-color:var(--color-border)}._horizontal_kfqte_10{border-bottom-width:thin;width:100%;height:0}._vertical_kfqte_16{border-right-width:thin;width:0;height:auto;align-self:stretch}._fullWidth_kfqte_23{width:100%}._inset_kfqte_27{margin-left:var(--spacing-xxl)}._middle_kfqte_31{margin-left:var(--spacing-md);margin-right:var(--spacing-md)}._flexItem_kfqte_36{align-self:stretch;height:auto}._wrapper_t75l7_3{display:block}._paper_qx9wm_1{background-color:var(--color-background);color:var(--color-text);transition:box-shadow var(--transition-duration-fast) var(--transition-timing-ease-out);border-radius:var(--border-radius-sm)}._elevationNone_qx9wm_11{box-shadow:var(--shadow-none)}._elevationSm_qx9wm_15{box-shadow:var(--shadow-sm)}._elevationMd_qx9wm_19{box-shadow:var(--shadow-md)}._elevationLg_qx9wm_23{box-shadow:var(--shadow-lg)}._elevationXl_qx9wm_27{box-shadow:var(--shadow-xl)}._outlined_qx9wm_32{border:1px solid var(--color-border);box-shadow:var(--shadow-none)}._square_qx9wm_38{border-radius:var(--border-radius-none)}._popover_km28f_1{position:fixed;inset:0;pointer-events:none;z-index:0;opacity:0;transition:opacity var(--transition-duration-normal, .2s) var(--transition-timing-ease-out)}._popover_km28f_1._entered_km28f_14{opacity:1}._popover_km28f_1._closing_km28f_17{opacity:0;transition:opacity var(--transition-duration-fast, .15s) var(--transition-timing-ease-in);pointer-events:none}._popover_km28f_1._entered_km28f_14 ._backdrop_km28f_23,._popover_km28f_1._entered_km28f_14 ._paper_km28f_24{pointer-events:auto}._backdrop_km28f_23{position:fixed;inset:0;background:transparent;pointer-events:auto}._paper_km28f_24{position:fixed;background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);box-sizing:border-box;pointer-events:auto;max-height:min(80vh,100dvh);overflow:hidden;opacity:0;transform:scale(.98);transition:opacity var(--transition-duration-normal, .2s) var(--transition-timing-ease-out),transform var(--transition-duration-normal, .2s) var(--transition-timing-ease-out)}._paper_km28f_24._ready_km28f_56{opacity:1;transform:scale(1)}._popover_km28f_1._closing_km28f_17 ._paper_km28f_24{opacity:0;transform:scale(.98);transition:opacity var(--transition-duration-fast, .15s) var(--transition-timing-ease-in),transform var(--transition-duration-fast, .15s) var(--transition-timing-ease-in)}._paper_km28f_24 ._scroll_km28f_70{max-height:min(80vh,100dvh);overflow-y:auto}._overlay_xqi43_2{position:fixed;inset:0;background:var(--color-overlay);display:grid;place-items:center}._modal_xqi43_14{background:var(--color-background);border-radius:var(--border-radius-sm);display:flex;flex-direction:column;box-shadow:var(--shadow-xl);max-width:calc(100vw - calc(var(--spacing-xl) * 2));max-height:calc(100vh - calc(var(--spacing-xl) * 2));margin:var(--spacing-xl);overflow:hidden}._modal_xqi43_14._xs_xqi43_27{width:var(--breakpoint-sm)}._modal_xqi43_14._sm_xqi43_30{width:var(--breakpoint-md)}._modal_xqi43_14._md_xqi43_33{width:var(--breakpoint-lg)}._modal_xqi43_14._fullWidth_xqi43_36{width:100%}._modal_xqi43_14._fullHeight_xqi43_39{height:calc(100vh - calc(var(--spacing-xl) * 2))}@media(max-width:640px){._modal_xqi43_14{max-width:calc(100vw - calc(var(--spacing-sm) * 2));max-height:calc(100vh - calc(var(--spacing-sm) * 2));margin:var(--spacing-sm)}._modal_xqi43_14._fullHeight_xqi43_39{height:calc(100vh - calc(var(--spacing-sm) * 2))}}._modal_xqi43_14 ._header_xqi43_56{transition:box-shadow var(--transition-duration-normal);box-shadow:0 0 15px #00000012;flex:0 0 auto;z-index:5;padding:var(--spacing-sm);padding-left:var(--spacing-md);padding-right:var(--spacing-md);padding-top:var(--spacing-md)}._modal_xqi43_14 ._header_xqi43_56 h6{font-size:var(--font-size-xl);font-weight:var(--font-weight-medium);line-height:var(--line-height-tight);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text);font-family:var(--font-family)}._modal_xqi43_14 ._header_xqi43_56 ._closeBtn_xqi43_77{padding:6px;font-size:0;min-width:auto;border-radius:var(--border-radius-full)}._modal_xqi43_14 ._header_xqi43_56 ._closeBtn_xqi43_77 svg{fill:var(--color-text-secondary)}._modal_xqi43_14 ._header_xqi43_56._top_xqi43_86{box-shadow:none}._modal_xqi43_14 ._header_xqi43_56._mid_xqi43_89{box-shadow:0 2px 8px #00000014}._modal_xqi43_14 ._content_xqi43_94{overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:0;word-break:break-all;color:var(--color-text);font-family:var(--font-family);padding:var(--spacing-sm) var(--spacing-md)}._modal_xqi43_14 ._content_xqi43_94._noHeader_xqi43_104{padding-top:var(--spacing-md)}._modal_xqi43_14 ._content_xqi43_94._noFooter_xqi43_107{padding-bottom:var(--spacing-md)}._modal_xqi43_14 ._content_xqi43_94::-webkit-scrollbar{width:5px}._modal_xqi43_14 ._content_xqi43_94::-webkit-scrollbar-thumb{background-color:var(--color-text-secondary);border-radius:var(--border-radius-sm)}._modal_xqi43_14 ._content_xqi43_94::-webkit-scrollbar-track{background-color:var(--color-border-light);border-radius:var(--border-radius-sm)}._modal_xqi43_14 ._footer_xqi43_123{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;flex:0 0 auto;gap:var(--spacing-sm);padding:var(--spacing-sm);transition:box-shadow var(--transition-duration-normal);box-shadow:0 0 10px #00000012;z-index:5}._modal_xqi43_14 ._footer_xqi43_123._mid_xqi43_89{box-shadow:0 -2px 8px #00000014}._modal_xqi43_14 ._footer_xqi43_123._bot_xqi43_138{box-shadow:none}._modal_xqi43_14 ._footer_xqi43_123 button{padding:6px var(--spacing-sm)}._footer_xqi43_123 ._supportBtn_xqi43_144 ._liveDot_xqi43_144{width:var(--spacing-sm);height:var(--spacing-sm);border-radius:var(--border-radius-full);background-color:var(--color-error);animation:_supportLive_xqi43_1 3s cubic-bezier(.36,.07,.19,.97) infinite}@keyframes _supportLive_xqi43_1{1%{box-shadow:0 0 0 0 var(--color-error)}50%{box-shadow:0 0 10px 0 var(--color-error)}90%{box-shadow:0 0 20px 0 var(--color-error)}to{box-shadow:0 0 40px 0 var(--color-error-alpha)}}._footer_xqi43_123 ._closeBtn_xqi43_77 ._esc_xqi43_166{display:block;margin-left:var(--spacing-sm);padding:0 var(--spacing-xs);font-size:9px;height:20px;line-height:20px;border-radius:var(--border-radius-sm);background-color:var(--color-disabled-background);color:var(--color-text-secondary);font-family:var(--font-family)}._enter_xqi43_180{opacity:0}._enterActive_xqi43_183{opacity:1;transition:opacity var(--transition-duration-slow) var(--transition-timing-ease-out)}._exit_xqi43_188{opacity:1}._exitActive_xqi43_191{opacity:0;transition:opacity var(--transition-duration-normal) var(--transition-timing-ease-in)}._content_129q0_5{padding:var(--spacing-sm) 0;color:var(--color-text);font-family:var(--font-family);font-size:var(--font-size-md);line-height:var(--line-height-normal);word-break:break-word;white-space:pre-wrap}._footer_129q0_15{margin-top:var(--spacing-md);display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-sm);flex-shrink:0}@font-face{font-family:Spoqa Han Sans Neo;font-weight:300;font-style:normal;font-display:swap;src:url(https://solapi-content.s3.ap-northeast-2.amazonaws.com/assets/SpoqaHanSansNeo_TTF_subset/SpoqaHanSansNeo-Light.woff2) format("woff2")}@font-face{font-family:Spoqa Han Sans Neo;font-weight:400;font-style:normal;font-display:swap;src:url(https://solapi-content.s3.ap-northeast-2.amazonaws.com/assets/SpoqaHanSansNeo_TTF_subset/SpoqaHanSansNeo-Regular.woff2) format("woff2")}@font-face{font-family:Spoqa Han Sans Neo;font-weight:500;font-style:normal;font-display:swap;src:url(https://solapi-content.s3.ap-northeast-2.amazonaws.com/assets/SpoqaHanSansNeo_TTF_subset/SpoqaHanSansNeo-Medium.woff2) format("woff2")}@font-face{font-family:Spoqa Han Sans Neo;font-weight:700;font-style:normal;font-display:swap;src:url(https://solapi-content.s3.ap-northeast-2.amazonaws.com/assets/SpoqaHanSansNeo_TTF_subset/SpoqaHanSansNeo-Bold.woff2) format("woff2")}._root_f5tys_1{display:inline-block}._backdrop_f5tys_6{position:fixed;inset:0;background:transparent}._menuPaper_f5tys_15{position:fixed;border-radius:var(--border-radius-md);border:1px solid var(--color-border);padding:6px 0;box-sizing:border-box;background:var(--color-background);box-shadow:var(--shadow-lg);animation:_menuFadeIn_f5tys_1 .15s ease-out;overflow:hidden}._compact_f5tys_27{min-width:190px;max-width:230px}._wide_f5tys_32{min-width:280px;max-width:300px}@keyframes _menuFadeIn_f5tys_1{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}._menuItem_f5tys_48{box-sizing:border-box;cursor:pointer;margin:0 6px;padding:6px 12px;border-radius:4px;transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out);user-select:none}._menuItem_f5tys_48:hover{background-color:var(--color-surface)}._menuItem_f5tys_48._error_f5tys_63:hover{background-color:var(--color-error-alpha)}._menuItem_f5tys_48:hover ._shortcutBadge_f5tys_67{opacity:1;color:#000000b8;border-color:#00000038}._menuItem_f5tys_48:active{background-color:var(--color-border-light)}._selected_f5tys_77{font-weight:var(--font-weight-medium);background-color:var(--color-border-light)}._disabled_f5tys_82{cursor:default;opacity:.5;pointer-events:none;background-color:transparent}._error_f5tys_63,._menuItem_f5tys_48._error_f5tys_63 ._label_f5tys_93,._menuItem_f5tys_48._error_f5tys_63 ._label_f5tys_93 *{color:var(--color-error)}._leftIcon_f5tys_98{width:22px;height:22px;display:flex;align-items:center;justify-content:center}._iconSvg_f5tys_107{display:block;font-size:1.12em;color:#c4c4c4}._menuItem_f5tys_48._error_f5tys_63 ._iconSvg_f5tys_107{color:var(--color-error)}._label_f5tys_93{min-width:0}._endIcon_f5tys_121{display:flex;align-items:center}._shortcut_f5tys_67{display:inline-flex;align-items:center}._shortcutBadge_f5tys_67{display:inline-flex;align-items:center;justify-content:center;min-width:22px;min-height:22px;padding:3px;box-sizing:border-box;border-radius:4px;border:1px solid rgba(0,0,0,.16);background:transparent;opacity:.75;color:#0009;white-space:nowrap;font-size:10px;line-height:1.2;font-variant-numeric:tabular-nums}._triggerButton_f5tys_153{padding:6px}._dividerFull_f5tys_157{height:1px;background:var(--color-border);opacity:.7;margin:6px 0}._groupHeader_f5tys_164{padding:6px 18px 2px;user-select:none;color:var(--color-text-tertiary)}._dense_f5tys_171{padding:4px 0}._dense_f5tys_171 ._menuItem_f5tys_48{padding:4px 10px;margin:0 4px;font-size:.8125rem}._dense_f5tys_171 ._leftIcon_f5tys_98{width:18px;height:18px}._dense_f5tys_171 ._iconSvg_f5tys_107{font-size:.95em}._dense_f5tys_171 ._dividerFull_f5tys_157{margin:4px 0}._dense_f5tys_171 ._groupHeader_f5tys_164{padding:4px 14px 1px}._shadowWrap_1pc8r_1{position:relative}._root_1pc8r_5{background:transparent;padding:0;margin:0;max-width:100%;overflow:hidden;position:relative}._root_1pc8r_5:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--color-border)}._tabList_1pc8r_25{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start}._tabItem_1pc8r_32{flex-shrink:0}._tabBox_1pc8r_36{position:relative;padding:calc(var(--spacing-xs) - 1px)}._tabButton_1pc8r_41{position:relative;display:flex;align-items:center;font-weight:var(--font-weight-medium);color:var(--color-text-secondary);background:none;border:none;outline:none;cursor:pointer;font-size:var(--font-size-md);font-family:var(--font-family);transition:color .2s,background .2s;border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}._small_1pc8r_60 ._tabButton_1pc8r_41{padding:var(--spacing-xs) var(--spacing-sm)}._medium_1pc8r_64 ._tabButton_1pc8r_41{padding:var(--spacing-sm) var(--spacing-md)}._large_1pc8r_68 ._tabButton_1pc8r_41{padding:var(--spacing-md) var(--spacing-lg)}._tabButton_1pc8r_41:hover{color:var(--color-primary);background:#0000000d}._selectedTabButton_1pc8r_77{color:var(--color-primary)}._disabled_1pc8r_81{cursor:not-allowed;opacity:.6;pointer-events:none}._cursor_1pc8r_87{position:absolute;bottom:0;height:2px;background:var(--color-primary);border-radius:2px;transition:left .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1);z-index:3;pointer-events:none}._startIcon_1pc8r_100{margin-right:var(--spacing-xs);display:flex;align-items:center}._moreButton_1pc8r_106{padding:6px;color:var(--color-text-secondary)}._moreButton_1pc8r_106:hover{color:var(--color-primary);background:var(--color-primary-alpha)}._root_1h21x_1{position:relative;padding:var(--spacing-sm);background-color:var(--color-surface);border-radius:var(--border-radius-sm);font-family:var(--font-family)}._cursor_1h21x_9{position:absolute;transition:left .4s cubic-bezier(.13,.83,.55,1.08);background-color:var(--color-primary);border-radius:var(--border-radius-sm)}._containedCursor_1h21x_16{background-color:var(--color-background);box-shadow:var(--shadow-sm)}._disabledCursor_1h21x_21{background-color:var(--color-disabled)}._scrollContainer_1h21x_25{display:flex;align-items:center;gap:0}._scrollButton_1h21x_31{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;border:none;background:none;color:var(--color-text-secondary);cursor:pointer;padding:0;border-radius:var(--border-radius-sm);transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out)}._scrollButton_1h21x_31:hover{background-color:var(--color-border-light);color:var(--color-text)}._scrollButton_1h21x_31:disabled{opacity:.3;cursor:default}._scrollButton_1h21x_31:disabled:hover{background-color:transparent;color:var(--color-text-secondary)}._selectWrap_1h21x_62{position:relative;overflow:hidden;flex:1;min-width:0;touch-action:pan-y;cursor:grab}._selectWrap_1h21x_62:active{cursor:grabbing}._gridRow_1h21x_75{display:flex;gap:4px;width:fit-content;min-width:100%;transition:transform .3s ease}._tabItemContainer_1h21x_83{min-width:100px;flex:1 0 100px;overflow:hidden}._choiceItemWrap_1h21x_89{color:var(--color-text-secondary);font-weight:var(--font-weight-bold);border-radius:var(--border-radius-sm);cursor:pointer;padding:var(--spacing-sm);transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out),color var(--transition-duration-fast) var(--transition-timing-ease-out);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:100%;box-sizing:border-box;font-family:var(--font-family);font-size:var(--font-size-sm);border:none;background:none;outline:none}._choiceItemWrap_1h21x_89:focus-visible{outline:1px solid var(--color-primary);outline-offset:-1px}._choiceItemWrap_1h21x_89:hover{color:var(--color-text);background-color:var(--color-border-light)}._selectedItemWrap_1h21x_123{color:var(--color-background)}._selectedItemWrap_1h21x_123:hover{color:var(--color-background);background-color:transparent;cursor:default}._containedSelectedItemWrap_1h21x_133{color:var(--color-primary);font-weight:var(--font-weight-bold)}._containedSelectedItemWrap_1h21x_133:hover{color:var(--color-primary);background-color:transparent;cursor:default}._disabledItemWrap_1h21x_144{color:var(--color-text-disabled);background-color:transparent;cursor:default;opacity:.6}._disabledItemWrap_1h21x_144:hover{color:var(--color-text-disabled);background-color:transparent;cursor:default}._root_2630y_1{position:relative}._filterChip_2630y_6{display:inline-flex;align-items:center;gap:var(--spacing-xs);height:24px;box-sizing:border-box;padding:var(--spacing-xs);padding-right:var(--spacing-sm);border:1px dashed var(--color-border);border-radius:20px;background:transparent;cursor:pointer;transition:background-color var(--transition-duration-fast) var(--transition-timing-ease-out)}._filterChip_2630y_6:hover{background-color:var(--color-surface)}._filterChip_2630y_6 span{font-size:12px}._filterChip_2630y_6 ._icon_2630y_29{padding:2px var(--spacing-xs);color:var(--color-text-secondary)}._filterChip_2630y_6 ._icon_2630y_29._hasValue_2630y_33:hover{color:var(--color-error)}._filterChip_2630y_6 ._divider_2630y_37{width:1px;height:1em;background-color:var(--color-border);margin:0 var(--spacing-xs)}._removeAllButton_2630y_44{background:none;border:none;padding:0;cursor:pointer;display:block}._selectOptions_2630y_53{max-height:200px;overflow-y:auto}._condButton_2630y_59{border-radius:var(--border-radius-sm);border:1px solid var(--color-border);background:var(--color-background);padding:2px var(--spacing-xs);font-size:var(--font-size-xs);cursor:pointer}._condButton_2630y_59:hover{border-color:var(--color-text-secondary)}._condOptions_2630y_71{max-width:200px;padding:var(--spacing-xs)}._label_15skt_1{display:block;font-size:var(--font-size-xs);color:var(--color-text-secondary);margin-left:var(--spacing-xs);margin-bottom:5px;font-family:var(--font-family);font-weight:var(--font-weight-medium)}._largeLabel_15skt_11{font-size:var(--font-size-sm)}._focusedLabel_15skt_15{color:var(--color-text)}._requiredMarker_15skt_19{color:var(--color-error);margin-left:var(--spacing-xs)}._inputWrapper_15skt_24{position:relative;display:flex;align-items:stretch;width:100%;border:1px solid var(--color-border);border-radius:var(--border-radius-sm);transition:border-color var(--transition-duration-normal) var(--transition-timing-ease-out),outline-color var(--transition-duration-normal) var(--transition-timing-ease-out),box-shadow var(--transition-duration-normal) var(--transition-timing-ease-out);background-color:var(--color-background)}._inputWrapper_15skt_24:hover:not(._inputWrapperDisabled_15skt_41):not(._inputWrapperError_15skt_41){border-color:var(--color-border-hover, var(--color-text-secondary))}._inputWrapper_15skt_24:focus-within{border-color:var(--color-primary);outline:1px solid var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-alpha)}._inputWrapperError_15skt_41{border-color:var(--color-error)!important;outline:1px solid var(--color-error)!important;box-shadow:0 0 0 3px var(--color-error-alpha)!important}._inputWrapperDisabled_15skt_41{background-color:var(--color-disabled-background);border-color:var(--color-border-light);outline:none}._root_15skt_63{width:100%;box-sizing:border-box;border:none;border-radius:var(--border-radius-sm);font-weight:var(--font-weight-regular);color:var(--color-text);background-color:transparent;outline:none;font-family:var(--font-family);font-size:var(--font-size-md);line-height:var(--line-height-normal)}._root_15skt_63::placeholder{color:var(--color-text-disabled);opacity:.7}._rootWithStartAdornment_15skt_82{border-top-left-radius:0;border-bottom-left-radius:0}._rootWithEndAdornment_15skt_87{border-top-right-radius:0;border-bottom-right-radius:0}._adornment_15skt_92{display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}._smallAdornment_15skt_99{padding:var(--spacing-sm)}._mediumAdornment_15skt_103,._largeAdornment_15skt_107{padding:calc(var(--spacing-sm) * 1.5)}._textarea_15skt_111{resize:none;overflow:hidden;font-family:var(--font-family);line-height:var(--line-height-normal);transition:height var(--transition-duration-normal) var(--transition-timing-ease-out)}._textareaScrollable_15skt_120{overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}._textareaScrollable_15skt_120::-webkit-scrollbar{width:6px}._textareaScrollable_15skt_120::-webkit-scrollbar-track{background:transparent;border-radius:var(--border-radius-sm)}._textareaScrollable_15skt_120::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm)}._textareaScrollable_15skt_120::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}._bolderRoot_15skt_144{font-weight:var(--font-weight-bold)}._small_15skt_99{padding:calc(var(--spacing-sm) - 2px) var(--spacing-sm);font-size:var(--font-size-sm)}._medium_15skt_103{padding:calc(var(--spacing-sm) * 1.5);font-size:var(--font-size-md)}._large_15skt_11{padding:calc(var(--spacing-sm) * 1.5);font-size:var(--font-size-lg)}._hasStartAdornment_15skt_167{padding-left:0}._hasEndAdornment_15skt_171{padding-right:0}._leftAlign_15skt_175{text-align:left}._centerAlign_15skt_179{text-align:center}._rightAlign_15skt_183{text-align:right}._disabledRoot_15skt_187{background-color:var(--color-disabled-background);color:var(--color-text-disabled);cursor:not-allowed;outline:none;opacity:.6}._errorMessage_15skt_195{display:block;margin-top:var(--spacing-xs);margin-left:var(--spacing-xs);padding-left:var(--spacing-xs);padding-right:var(--spacing-xs);white-space:pre-line;font-size:var(--font-size-xs);color:var(--color-error);font-family:var(--font-family)}._helperText_15skt_207{display:block;margin-top:var(--spacing-xs);margin-left:var(--spacing-xs);padding-left:var(--spacing-xs);padding-right:var(--spacing-xs);white-space:pre-line;font-size:var(--font-size-xs);color:var(--color-text-secondary);font-family:var(--font-family)}._messageContainer_15skt_219{min-height:0}._datePicker_1q6kp_1{cursor:pointer;outline:none}._datePicker_1q6kp_1:focus-visible{outline:2px solid var(--color-primary, #1976d2);outline-offset:2px}._timeSelector_1q6kp_13 select{padding:4px 28px 4px 8px;font-size:var(--font-size-sm, .875rem);color:var(--color-text, #111);background-color:var(--color-background, #fff);border:1px solid var(--color-border, #ccc);border-radius:var(--border-radius-sm, 4px);cursor:pointer;min-height:28px;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23666' aria-hidden='true'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:20px 20px;transition:border-color var(--transition-duration-fast) var(--transition-timing-ease-out)}._timeSelector_1q6kp_13 select:hover{border-color:var(--color-border-hover)}._timeSelector_1q6kp_13 select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-alpha)}._timeColon_1q6kp_42{margin:0 2px;font-size:var(--font-size-sm, .875rem);color:var(--color-text-secondary, #666)}._timeInputRow_1q6kp_48{display:flex;flex-wrap:wrap;gap:var(--spacing-md, 16px);margin-bottom:var(--spacing-sm, 8px)}._month_1q6kp_56 strong{font-size:var(--font-size-lg)}._calendar_1q6kp_60 table{border-collapse:collapse;border-spacing:0;table-layout:fixed}._calendar_1q6kp_60 table td{padding:0;text-align:center;vertical-align:middle;cursor:pointer}._calendar_1q6kp_60 table td>div{margin:0;padding:6px 0}._calendar_1q6kp_60 table td>div p{margin:0;padding:0 6px}._calendar_1q6kp_60 ._valid_1q6kp_83:hover{outline:1px solid var(--color-primary);outline-offset:-1px}._calendar_1q6kp_60 ._invalid_1q6kp_88{color:var(--color-text-secondary, #999);cursor:default}._calendar_1q6kp_60 ._current_1q6kp_93 p{font-weight:var(--font-weight-bold)}._calendar_1q6kp_60 ._selected_1q6kp_97{color:var(--color-background);background-color:var(--color-primary);border-radius:var(--border-radius-sm)}._calendar_1q6kp_60 ._selected_1q6kp_97:hover{background-color:var(--color-primary-hover)}._calendar_1q6kp_60 ._selected_1q6kp_97 p{color:var(--color-background);font-weight:var(--font-weight-bold)}._calendar_1q6kp_60 ._inRange_1q6kp_112 p{background-color:var(--color-primary-alpha, rgba(25, 118, 210, .12))}._dateTimeInput_1q6kp_116::-webkit-outer-spin-button,._dateTimeInput_1q6kp_116::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._dateTimeInput_1q6kp_116{-moz-appearance:textfield;appearance:textfield}._base_1tubv_6{box-sizing:border-box;font-family:var( --font-family, "Spoqa Han Sans Neo", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif );-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}._base_1tubv_6 *,._base_1tubv_6 *:before,._base_1tubv_6 *:after{box-sizing:inherit}._root_gcepv_1{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);background-color:#f3f3f3;color:var(--color-text);font-size:var(--font-size-sm);line-height:1.6}._infoIcon_gcepv_11{margin-right:var(--spacing-xs);vertical-align:middle}._listDash_gcepv_16{margin-right:8px}._root_1ot2h_1,._root_1r2ar_1{width:100%;font-family:var(--font-family);color:var(--color-text)}._numBtn_1r2ar_7{cursor:pointer;align-items:center;justify-content:center;display:flex;width:100%;height:50px;border:none;font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);transition:all var(--transition-duration-slow) var(--transition-timing-ease-in-out);color:var(--color-text);border-radius:var(--border-radius-sm);background-color:var(--color-surface);font-family:var(--font-family)}._numBtn_1r2ar_7:hover:not(:disabled){color:var(--color-text);background-color:var(--color-border-light);box-shadow:var(--shadow-sm)}._hoverNumBtn_1r2ar_31{color:var(--color-text);background-color:var(--color-border-light)}._disabledNumBtn_1r2ar_36{cursor:not-allowed;color:var(--color-text-disabled);background-color:var(--color-disabled-background);opacity:.6}._numBox_1r2ar_43{position:relative;box-sizing:border-box;width:100%;padding-bottom:100%;border-radius:var(--border-radius-md);border:1px solid var(--color-border);font-size:var(--font-size-md);background-color:var(--color-background);transition:border-color var(--transition-duration-fast) var(--transition-timing-ease-out)}._numBox_1r2ar_43:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--color-text);font-size:var(--font-size-lg)}._activeNumBox_1r2ar_66{border-color:var(--color-primary);background-color:var(--color-info-light)}._activeNumBox_1r2ar_66:after{content:"●";color:var(--color-primary)}._root_1ot2h_1{width:100%;font-family:var(--font-family);color:var(--color-text)}._root_lw48y_1{width:100%;max-width:400px;margin:0 auto;font-family:var(--font-family);color:var(--color-text)}._selectCard_lw48y_10{height:100%;box-sizing:border-box;border-radius:15px;cursor:pointer;border:1px solid var(--color-border-light, #f1f3f5);box-shadow:0 2px 8px #4950570f;background:var(--color-background);transition:box-shadow .2s ease}._selectCard_lw48y_10:hover{box-shadow:0 2px 8px var(--color-primary-alpha, rgba(59, 130, 246, .35))}._selectCard_lw48y_10._selected_lw48y_25{box-shadow:0 2px 8px var(--color-primary-alpha, rgba(59, 130, 246, .35));border-color:var(--color-primary)}._cardContent_lw48y_30{padding:var(--spacing-md);padding-bottom:var(--spacing-sm);text-align:center}._appIconImg_lw48y_37{width:100%;max-width:35px;box-shadow:0 0 10px #00000026;border-radius:10px}._appIconsWrap_lw48y_44{margin:0 auto;max-width:130px}._iconWrap_lw48y_50{width:100%;max-width:35px}._icon_lw48y_50{font-size:35px;color:#00000080}._plusIcon_lw48y_60{color:#0000003d;font-size:25px}._iconsContainer_lw48y_65{height:92px;display:flex;justify-content:center;align-items:center;gap:var(--spacing-xs)}._radioLabel_lw48y_74{display:flex;align-items:center;justify-content:center;gap:var(--spacing-xs);cursor:pointer;word-break:keep-all}._radioInput_lw48y_83{accent-color:var(--color-primary);width:18px;height:18px;cursor:pointer}._inProgressWrap_lw48y_91{text-align:center;padding:var(--spacing-lg)}._root_stics_1{width:100%}._authTypeSelector_stics_5{display:flex;gap:8px;flex-wrap:wrap}._root_1ot2h_1,._root_7ctgd_1{width:100%;font-family:var(--font-family);color:var(--color-text)}._passButton_7ctgd_7{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 16px;border:none;border-radius:8px;background-color:#e8344e;color:#fff;font-size:15px;font-weight:600;font-family:inherit;cursor:pointer;transition:background-color .15s}._passButton_7ctgd_7:hover{background-color:#d02a42}._passButton_7ctgd_7:disabled{background-color:var(--color-disabled-background);color:var(--color-text-disabled);cursor:default}._passIcon_7ctgd_35{width:24px;height:24px;border-radius:4px;object-fit:cover;margin-right:8px;vertical-align:middle}._root_1ot2h_1,._root_13kk5_1{width:100%;font-family:var(--font-family);color:var(--color-text)}._appItem_13kk5_7{width:100%;display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer;padding:12px 4px;border-radius:8px;border:none;background:none;transition:background-color .15s}._appItem_13kk5_7:hover{background-color:var(--color-border-light)}._appItem_13kk5_7:disabled{cursor:default;opacity:.5}._appItem_13kk5_7:disabled:hover{background-color:transparent}._appIcon_13kk5_34{width:48px;height:48px;border-radius:12px;object-fit:cover}._appLabel_13kk5_41{font-size:11px;color:var(--color-text-secondary);text-align:center;line-height:1.3;word-break:keep-all}._root_193lu_1{width:100%;font-family:var(--font-family);color:var(--color-text)}._qrCode_193lu_7{width:200px;height:200px;border:1px solid var(--color-border);border-radius:8px;padding:8px}._iconWrap_193lu_15{display:flex;flex-direction:column;align-items:center;gap:8px}._icon_193lu_15{font-size:var(--font-size-xl);color:var(--color-text-primary);margin-right:var(--spacing-sm);vertical-align:middle}._otpName_193lu_29{font-size:var(--font-size-lg);text-align:center}._root_1gs03_1{width:100%;padding-bottom:8px}._authTypeSelector_1gs03_6{display:flex;gap:8px;flex-wrap:wrap}._stepper_1gs03_12{display:flex;align-items:flex-start;justify-content:center;gap:8px;padding:4px 0 8px}._stepItem_1gs03_20{display:flex;flex-direction:column;align-items:center;gap:8px;flex-shrink:0}._stepCircle_1gs03_28{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex-shrink:0}._stepCompleted_1gs03_40{background-color:var(--color-primary);color:#fff}._stepActive_1gs03_45{border:2px solid var(--color-primary);color:var(--color-primary);background-color:var(--color-background)}._stepPending_1gs03_51{border:2px solid var(--color-border);color:var(--color-text-disabled);background-color:var(--color-background)}._stepLabel_1gs03_57{font-size:11px;min-width:40px;display:inline-block;text-align:center;color:var(--color-text-disabled);white-space:nowrap}._stepLabelActive_1gs03_66{color:var(--color-primary);font-weight:600}._stepLabelCompleted_1gs03_71{color:var(--color-text-secondary)}._stepLine_1gs03_75{width:32px;height:2px;flex-shrink:0;margin-top:13px}._stepLineCompleted_1gs03_82{background-color:var(--color-primary)}._stepLinePending_1gs03_86{background-color:var(--color-border)}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 중앙화된 스크롤 잠금 관리자
3
+ * 여러 컴포넌트(Modal, Confirm 등)가 동시에 body 스크롤을 제어할 때 충돌 방지
4
+ */
5
+ export declare function lockScroll(): void;
6
+ export declare function unlockScroll(): void;