@uniai-fe/uds-templates 0.0.10 → 0.0.12

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 (119) hide show
  1. package/README.md +88 -1
  2. package/dist/styles.css +2051 -2266
  3. package/package.json +5 -3
  4. package/src/auth/common/complete/Template.tsx +47 -0
  5. package/src/auth/common/complete/img/circle-check-complete.svg +4 -0
  6. package/src/auth/common/complete/index.scss +38 -0
  7. package/src/auth/common/complete/types.ts +15 -0
  8. package/src/auth/common/container/header/StageHeader.tsx +61 -0
  9. package/src/auth/common/container/header/index.tsx +5 -0
  10. package/src/auth/common/container/header/stage-header.scss +50 -0
  11. package/src/{components/auth → auth/common}/container/index.tsx +2 -0
  12. package/src/auth/common/find/hooks/useFindAccountForm.ts +79 -0
  13. package/src/auth/common/find/markup/CodeStep.tsx +166 -0
  14. package/src/auth/common/find/markup/Header.tsx +46 -0
  15. package/src/auth/common/find/markup/InfoStep.tsx +109 -0
  16. package/src/auth/common/find/styles/email.scss +55 -0
  17. package/src/auth/common/find/styles/find-account.scss +4 -0
  18. package/src/auth/common/find/styles/layout.scss +19 -0
  19. package/src/auth/common/find/styles/password.scss +39 -0
  20. package/src/auth/common/find/styles/result.scss +78 -0
  21. package/src/auth/common/find/types/forms.ts +30 -0
  22. package/src/auth/common/find/types/index.ts +121 -0
  23. package/src/auth/common/find/utils/composeFieldProps.ts +45 -0
  24. package/src/auth/common/password/constants.ts +19 -0
  25. package/src/auth/common/password/hooks/useCheckPassword.ts +133 -0
  26. package/src/auth/common/password/img/check-password.svg +3 -0
  27. package/src/auth/common/password/markup/PasswordSetField.tsx +250 -0
  28. package/src/auth/common/password/styles/password-set-field.scss +49 -0
  29. package/src/auth/common/password/types.ts +142 -0
  30. package/src/auth/common/password/utils/composePasswordFieldProps.ts +44 -0
  31. package/src/auth/find-account.ts +28 -0
  32. package/src/auth/find-id/hooks/index.ts +1 -0
  33. package/src/auth/find-id/index.scss +1 -0
  34. package/src/auth/find-id/index.ts +23 -0
  35. package/src/auth/find-id/markup/StepComplete.tsx +58 -0
  36. package/src/auth/find-id/markup/StepIdentify.tsx +46 -0
  37. package/src/auth/find-id/markup/StepVerifyCode.tsx +48 -0
  38. package/src/auth/find-id/types/index.ts +66 -0
  39. package/src/auth/find-password/index.scss +1 -0
  40. package/src/auth/find-password/index.ts +30 -0
  41. package/src/auth/find-password/markup/StepComplete.tsx +30 -0
  42. package/src/auth/find-password/markup/StepIdentify.tsx +45 -0
  43. package/src/auth/find-password/markup/StepResetPassword.tsx +150 -0
  44. package/src/auth/find-password/markup/StepVerifyCode.tsx +48 -0
  45. package/src/auth/index.tsx +41 -0
  46. package/src/{components/auth → auth}/login/index.tsx +1 -7
  47. package/src/{components/auth → auth}/login/markup/Container.tsx +1 -1
  48. package/src/{components/auth → auth}/login/markup/FormField.tsx +2 -2
  49. package/src/{components/auth → auth}/login/types/props.ts +13 -13
  50. package/src/auth/login/types.ts +2 -0
  51. package/src/auth/signup/hooks/index.ts +3 -0
  52. package/src/auth/signup/hooks/useSignupAccountForm.ts +101 -0
  53. package/src/auth/signup/hooks/useSignupUserInfoForm.ts +88 -0
  54. package/src/auth/signup/hooks/useSignupVerificationForm.ts +77 -0
  55. package/src/auth/signup/img/check-agree.svg +3 -0
  56. package/src/auth/signup/img/chevron-open-detail.svg +3 -0
  57. package/src/auth/signup/index.ts +27 -0
  58. package/src/auth/signup/markup/AccountForm.tsx +113 -0
  59. package/src/auth/signup/markup/Complete.tsx +59 -0
  60. package/src/auth/signup/markup/Template.tsx +110 -0
  61. package/src/auth/signup/markup/UserInfoForm.tsx +107 -0
  62. package/src/auth/signup/markup/VerificationForm.tsx +285 -0
  63. package/src/auth/signup/markup/index.ts +5 -0
  64. package/src/auth/signup/styles/signup.scss +187 -0
  65. package/src/auth/signup/types/hooks.ts +86 -0
  66. package/src/auth/signup/types/index.ts +2 -0
  67. package/src/auth/signup/types/props.ts +145 -0
  68. package/src/auth/signup/utils/composeFieldProps.ts +50 -0
  69. package/src/auth/signup/utils/getSignupFieldDefaultValue.ts +40 -0
  70. package/src/index.scss +5 -3
  71. package/src/index.tsx +3 -2
  72. package/src/modal/core/components/Container.tsx +41 -0
  73. package/src/modal/core/components/FooterButtons.tsx +132 -0
  74. package/src/modal/core/components/Provider.tsx +28 -0
  75. package/src/modal/core/components/Root.tsx +93 -0
  76. package/src/modal/core/hooks/useModal.ts +136 -0
  77. package/src/modal/core/jotai/atoms.ts +10 -0
  78. package/src/modal/index.scss +4 -0
  79. package/src/modal/index.tsx +16 -0
  80. package/src/modal/styles/animations.scss +24 -0
  81. package/src/modal/styles/base.scss +45 -0
  82. package/src/modal/styles/container.scss +138 -0
  83. package/src/modal/styles/dimmer.scss +23 -0
  84. package/src/modal/templates/Alert.tsx +104 -0
  85. package/src/modal/templates/Dialog.tsx +112 -0
  86. package/src/modal/types/footer.ts +36 -0
  87. package/src/modal/types/index.ts +21 -0
  88. package/src/modal/types/options.ts +6 -0
  89. package/src/modal/types/state.ts +31 -0
  90. package/src/modal/types/templates.ts +32 -0
  91. package/src/page-frame/mobile/header/PageFrameMobileHeader.tsx +52 -0
  92. package/src/page-frame/mobile/header/index.ts +4 -0
  93. package/src/page-frame/mobile/header/page-frame-mobile-header.scss +48 -0
  94. package/src/page-frame/mobile/img/chevron-backward.svg +3 -0
  95. package/src/components/auth/index.tsx +0 -20
  96. package/src/components/auth/login/types.ts +0 -2
  97. /package/src/{components/auth → auth/common}/container/AuthContainer.tsx +0 -0
  98. /package/src/{components/auth → auth/common}/container/index.scss +0 -0
  99. /package/src/{components/auth → auth/common}/container/types.ts +0 -0
  100. /package/src/{components/auth → auth}/login/data/valid-options.ts +0 -0
  101. /package/src/{components/auth → auth}/login/hooks/index.ts +0 -0
  102. /package/src/{components/auth → auth}/login/hooks/useAuthLoginForm.ts +0 -0
  103. /package/src/{components/auth → auth}/login/index.scss +0 -0
  104. /package/src/{components/auth → auth}/login/markup/LinkButtons.tsx +0 -0
  105. /package/src/{components/auth → auth}/login/styles/login.scss +0 -0
  106. /package/src/{components/auth → auth}/login/types/form.ts +0 -0
  107. /package/src/{components/auth → auth}/login/types/hooks.ts +0 -0
  108. /package/src/{components/page-frame → page-frame}/container/PageFrameContainer.tsx +0 -0
  109. /package/src/{components/page-frame → page-frame}/container/index.scss +0 -0
  110. /package/src/{components/page-frame → page-frame}/container/index.tsx +0 -0
  111. /package/src/{components/page-frame → page-frame}/container/types.ts +0 -0
  112. /package/src/{components/page-frame → page-frame}/index.tsx +0 -0
  113. /package/src/{components/page-frame → page-frame}/mobile/PageFrameMobile.tsx +0 -0
  114. /package/src/{components/page-frame → page-frame}/mobile/index.scss +0 -0
  115. /package/src/{components/page-frame → page-frame}/mobile/index.tsx +0 -0
  116. /package/src/{components/page-frame → page-frame}/mobile/types.ts +0 -0
  117. /package/src/{components/page-frame → page-frame}/navigation/PageFrameNavigation.tsx +0 -0
  118. /package/src/{components/page-frame → page-frame}/navigation/index.scss +0 -0
  119. /package/src/{components/page-frame → page-frame}/navigation/index.tsx +0 -0
package/dist/styles.css CHANGED
@@ -1,969 +1,10 @@
1
1
  @charset "UTF-8";
2
- @layer theme.init {
3
- :root {
4
- -webkit-tap-highlight-color: transparent;
5
- text-size-adjust: none;
6
- overflow-wrap: break-word;
7
- word-break: break-word;
8
- }
9
- *,
10
- *::before,
11
- *::after {
12
- margin: 0;
13
- padding: 0;
14
- border: 0;
15
- box-sizing: border-box;
16
- }
17
- * {
18
- letter-spacing: -0.05em;
19
- flex-shrink: 0;
20
- overscroll-behavior-y: none;
21
- font-family: var(--font-family-sans, "Pretendard JP Variable", "Pretendard JP", "Pretendard Variable", "Pretendard", "Inter", sans-serif);
22
- }
23
- *:focus,
24
- *:focus-within,
25
- *:focus-visible {
26
- outline: none;
27
- }
28
- html {
29
- width: 100%;
30
- font-size: 10px;
31
- font-family: var(--font-family-sans);
32
- background-color: #fff;
33
- touch-action: manipulation;
34
- }
35
- body {
36
- width: 100%;
37
- position: relative;
38
- background: none;
39
- }
40
- h1,
41
- h2,
42
- h3,
43
- h4,
44
- h5,
45
- h6 {
46
- margin: 0;
47
- padding: 0;
48
- font-weight: 500;
49
- line-height: 1em;
50
- }
51
- strong,
52
- b {
53
- font-weight: 700;
54
- line-height: 1em;
55
- }
56
- p,
57
- span,
58
- i,
59
- sup,
60
- sub,
61
- del,
62
- ins,
63
- s {
64
- margin: 0;
65
- padding: 0;
66
- line-height: 1em;
67
- word-break: keep-all;
68
- }
69
- i,
70
- address,
71
- cite,
72
- em,
73
- q {
74
- font-weight: 400;
75
- font-style: normal;
76
- }
77
- blockquote,
78
- abbr,
79
- dfn {
80
- font-weight: 400;
81
- }
82
- pre,
83
- code,
84
- samp,
85
- kbd,
86
- var {
87
- font-family: "Consolas", "Monaco", "Menlo", "DejaVu Sans Mono", SFMono-Regular, "Liberation Mono", "Courier New", monospace;
88
- }
89
- blockquote,
90
- q {
91
- quotes: none;
92
- }
93
- blockquote::before,
94
- blockquote::after,
95
- q::before,
96
- q::after {
97
- content: "";
98
- }
99
- img,
100
- svg {
101
- max-width: 100%;
102
- object-fit: contain;
103
- perspective: 1;
104
- }
105
- li,
106
- dt,
107
- dd {
108
- list-style: none;
109
- }
110
- table {
111
- width: 100%;
112
- border-collapse: collapse;
113
- border-spacing: 0;
114
- table-layout: fixed;
115
- }
116
- label {
117
- display: block;
118
- }
119
- legend,
120
- caption {
121
- display: none;
122
- }
123
- article,
124
- aside,
125
- footer,
126
- header,
127
- main,
128
- nav,
129
- section,
130
- time,
131
- audio,
132
- canvas,
133
- figure,
134
- figcaption,
135
- video,
136
- meter,
137
- progress,
138
- details,
139
- summary {
140
- display: block;
141
- }
142
- figure {
143
- position: relative;
144
- width: fit-content;
145
- height: fit-content;
146
- font-size: 0;
147
- }
148
- a {
149
- display: block;
150
- color: #333;
151
- text-decoration: none;
152
- cursor: pointer;
153
- }
154
- input,
155
- select,
156
- button,
157
- textarea {
158
- display: block;
159
- max-width: 100%;
160
- background: transparent;
161
- border-radius: 0;
162
- box-shadow: none;
163
- outline: none;
164
- caret-color: transparent;
165
- appearance: none;
166
- }
167
- button {
168
- cursor: pointer;
169
- font-family: inherit;
170
- user-select: none;
171
- }
172
- textarea {
173
- resize: none;
174
- }
175
- select {
176
- user-select: none;
177
- }
178
- select::-ms-expand {
179
- opacity: 0;
180
- }
181
- input::placeholder,
182
- textarea::placeholder {
183
- opacity: 1;
184
- color: #959595;
185
- }
186
- input:focus::placeholder,
187
- textarea:focus::placeholder {
188
- color: transparent;
189
- }
190
- [type=button],
191
- [type=reset],
192
- [type=submit] {
193
- appearance: button;
194
- }
195
- [type=search] {
196
- appearance: textfield;
197
- outline-offset: -2px;
198
- }
199
- :-webkit-inner-spin-button,
200
- ::-webkit-outer-spin-button {
201
- height: auto;
202
- }
203
- ::-webkit-search-decoration,
204
- ::-webkit-search-cancel-button {
205
- appearance: none;
206
- }
207
- ::-webkit-file-upload-button {
208
- appearance: button;
209
- }
210
- input[type=date],
211
- input[type=number] {
212
- appearance: none;
213
- }
214
- input[type=date]::-webkit-inner-spin-button,
215
- input[type=number]::-webkit-inner-spin-button {
216
- display: none;
217
- }
218
- input[type=date]::-webkit-calendar-picker-indicator,
219
- input[type=number]::-webkit-calendar-picker-indicator {
220
- opacity: 0;
221
- }
222
- input[type=date]::-webkit-clear-button,
223
- input[type=number]::-webkit-clear-button {
224
- display: none;
225
- }
226
- input[type=date]::-ms-clear,
227
- input[type=number]::-ms-clear {
228
- display: none;
229
- }
230
- input[type=range]::-webkit-slider-thumb {
231
- appearance: none;
232
- }
233
- input[type=checkbox] {
234
- appearance: checkbox;
235
- }
236
- button:disabled {
237
- cursor: default;
238
- }
239
- progress {
240
- appearance: none;
241
- border: 1px solid #e1e1e1;
242
- }
243
- progress::-webkit-progress-bar {
244
- background-color: #fff;
245
- }
246
- progress::-webkit-progress-value {
247
- background-color: grey;
248
- }
249
- @media (orientation: landscape) {
250
- html.mobile-device {
251
- font-size: 1vw;
252
- }
253
- }
254
- @media (orientation: portrait) {
255
- html.mobile-device {
256
- font-size: 1vw;
257
- }
258
- }
259
- }
260
- @layer theme.init {
261
- html,
262
- body {
263
- width: 100%;
264
- height: 100%;
265
- position: fixed;
266
- top: 0;
267
- left: 0;
268
- overflow: auto;
269
- z-index: 0;
270
- }
271
- }
272
- @layer theme.tokens.color {
273
- :root {
274
- --color-common-100: #fff;
275
- --color-common-0: #000;
276
- --color-neutral-10: #1a1a1a;
277
- --color-neutral-20: #333333;
278
- --color-neutral-30: #4d4d4d;
279
- --color-neutral-40: #666666;
280
- --color-neutral-45: #737373;
281
- --color-neutral-50: #808080;
282
- --color-neutral-55: #8c8c8c;
283
- --color-neutral-60: #999999;
284
- --color-neutral-70: #b3b3b3;
285
- --color-neutral-80: #cccccc;
286
- --color-neutral-90: #e6e6e6;
287
- --color-neutral-95: #f2f2f2;
288
- --color-neutral-99: #fcfcfc;
289
- --color-cool-gray-10: #18191b;
290
- --color-cool-gray-20: #313235;
291
- --color-cool-gray-25: #3d3f43;
292
- --color-cool-gray-30: #494b50;
293
- --color-cool-gray-35: #55585e;
294
- --color-cool-gray-40: #61656b;
295
- --color-cool-gray-45: #6d7178;
296
- --color-cool-gray-50: #797e86;
297
- --color-cool-gray-55: #878b92;
298
- --color-cool-gray-60: #94989e;
299
- --color-cool-gray-65: #a1a5aa;
300
- --color-cool-gray-70: #afb1b6;
301
- --color-cool-gray-75: #bcbec2;
302
- --color-cool-gray-80: #cacbce;
303
- --color-cool-gray-85: #d7d8db;
304
- --color-cool-gray-90: #e4e5e7;
305
- --color-cool-gray-95: #f2f2f3;
306
- --color-cool-gray-99: #fcfcfd;
307
- --color-blue-10: #001233;
308
- --color-blue-20: #002466;
309
- --color-blue-30: #003699;
310
- --color-blue-40: #0047cc;
311
- --color-blue-45: #0050e5;
312
- --color-blue-50: #0059ff;
313
- --color-blue-55: #1a6aff;
314
- --color-blue-60: #337aff;
315
- --color-blue-70: #669cff;
316
- --color-blue-80: #99bdff;
317
- --color-blue-90: #ccdeff;
318
- --color-blue-95: #e5eeff;
319
- --color-blue-99: #fafcff;
320
- --color-purple-10: #120033;
321
- --color-purple-20: #240066;
322
- --color-purple-30: #360099;
323
- --color-purple-40: #4800cc;
324
- --color-purple-45: #5200e5;
325
- --color-purple-50: #5b00ff;
326
- --color-purple-55: #6c1bff;
327
- --color-purple-60: #7b33ff;
328
- --color-purple-70: #9c66ff;
329
- --color-purple-80: #bd99ff;
330
- --color-purple-90: #deccff;
331
- --color-purple-95: #efe5ff;
332
- --color-purple-99: #fcfaff;
333
- --color-magenta-10: #32012e;
334
- --color-magenta-20: #64025b;
335
- --color-magenta-30: #950489;
336
- --color-magenta-40: #c705b6;
337
- --color-magenta-45: #e005cd;
338
- --color-magenta-50: #f906e4;
339
- --color-magenta-55: #fa1fe7;
340
- --color-magenta-60: #fa38e9;
341
- --color-magenta-70: #fb6aef;
342
- --color-magenta-80: #fd9bf4;
343
- --color-magenta-90: #fecdfa;
344
- --color-magenta-95: #fee6fc;
345
- --color-magenta-99: #fffafe;
346
- --color-pink-10: #320116;
347
- --color-pink-20: #63032b;
348
- --color-pink-30: #950441;
349
- --color-pink-40: #c70556;
350
- --color-pink-45: #e00661;
351
- --color-pink-50: #f8076c;
352
- --color-pink-55: #f91f7a;
353
- --color-pink-60: #fa3889;
354
- --color-pink-70: #fb6aa7;
355
- --color-pink-80: #fc9cc4;
356
- --color-pink-90: #fecde2;
357
- --color-pink-95: #fee6f0;
358
- --color-pink-99: #fffafc;
359
- --color-red-10: #310602;
360
- --color-red-20: #610d05;
361
- --color-red-30: #921307;
362
- --color-red-40: #c21a0a;
363
- --color-red-45: #da1d0b;
364
- --color-red-50: #f2200d;
365
- --color-red-55: #f43625;
366
- --color-red-60: #f54d3d;
367
- --color-red-70: #f7796e;
368
- --color-red-80: #faa69e;
369
- --color-red-90: #fcd2cf;
370
- --color-red-95: #fde8e7;
371
- --color-red-99: #fffafa;
372
- --color-orange-10: #331100;
373
- --color-orange-20: #662200;
374
- --color-orange-30: #993300;
375
- --color-orange-40: #cc4400;
376
- --color-orange-45: #e54d00;
377
- --color-orange-50: #ff5500;
378
- --color-orange-55: #ff661a;
379
- --color-orange-60: #ff7733;
380
- --color-orange-70: #ff9966;
381
- --color-orange-80: #ffbb99;
382
- --color-orange-90: #ffddcc;
383
- --color-orange-95: #ffeee5;
384
- --color-orange-99: #fffcfa;
385
- --color-yellow-10: #302903;
386
- --color-yellow-20: #615205;
387
- --color-yellow-30: #917a08;
388
- --color-yellow-40: #c2a30a;
389
- --color-yellow-45: #dab80b;
390
- --color-yellow-50: #f2cc0d;
391
- --color-yellow-55: #f4d125;
392
- --color-yellow-60: #f5d63d;
393
- --color-yellow-70: #f7e06e;
394
- --color-yellow-80: #faeb9e;
395
- --color-yellow-90: #fcf5cf;
396
- --color-yellow-95: #fefae7;
397
- --color-yellow-99: #fffefa;
398
- --color-lime-10: #2b3300;
399
- --color-lime-20: #556600;
400
- --color-lime-30: #809900;
401
- --color-lime-40: #aacc00;
402
- --color-lime-45: #bfe500;
403
- --color-lime-50: #d5ff00;
404
- --color-lime-55: #d9ff1a;
405
- --color-lime-60: #ddff33;
406
- --color-lime-70: #e6ff66;
407
- --color-lime-80: #eeff99;
408
- --color-lime-90: #f7ffcc;
409
- --color-lime-95: #fbffe5;
410
- --color-lime-99: #fefffa;
411
- --color-green-10: #062d13;
412
- --color-green-20: #0d5926;
413
- --color-green-30: #138639;
414
- --color-green-40: #1ab24d;
415
- --color-green-45: #1dc956;
416
- --color-green-50: #20df60;
417
- --color-green-55: #36e270;
418
- --color-green-60: #4de580;
419
- --color-green-70: #79ec9f;
420
- --color-green-80: #a6f2bf;
421
- --color-green-90: #d2f9df;
422
- --color-green-95: #e9fcef;
423
- --color-green-99: #fbfefc;
424
- --color-bright-green-10: #213003;
425
- --color-bright-green-20: #426105;
426
- --color-bright-green-30: #639108;
427
- --color-bright-green-40: #84c10b;
428
- --color-bright-green-45: #95da0c;
429
- --color-bright-green-50: #a5f20d;
430
- --color-bright-green-55: #aef325;
431
- --color-bright-green-60: #b7f43e;
432
- --color-bright-green-70: #c9f76e;
433
- --color-bright-green-80: #dbfa9e;
434
- --color-bright-green-90: #edfccf;
435
- --color-bright-green-95: #f6fee7;
436
- --color-bright-green-99: #fdfffa;
437
- --color-teal-10: #062d20;
438
- --color-teal-20: #0d5940;
439
- --color-teal-30: #13865f;
440
- --color-teal-40: #1ab27f;
441
- --color-teal-45: #1dc98f;
442
- --color-teal-50: #20df9f;
443
- --color-teal-55: #36e2a9;
444
- --color-teal-60: #4de5b2;
445
- --color-teal-70: #79ecc5;
446
- --color-teal-80: #a6f2d9;
447
- --color-teal-90: #d2f9ec;
448
- --color-teal-95: #e9fcf5;
449
- --color-teal-99: #fbfefd;
450
- --color-cyan-10: #002f33;
451
- --color-cyan-20: #005e66;
452
- --color-cyan-30: #008c99;
453
- --color-cyan-40: #00bbcc;
454
- --color-cyan-45: #00d2e5;
455
- --color-cyan-50: #00eaff;
456
- --color-cyan-55: #1aecff;
457
- --color-cyan-60: #33eeff;
458
- --color-cyan-70: #66f2ff;
459
- --color-cyan-80: #99f7ff;
460
- --color-cyan-90: #ccfbff;
461
- --color-cyan-95: #e5fdff;
462
- --color-cyan-99: #faffff;
463
- }
464
- }
465
- @layer theme.tokens.color {
466
- :root,
467
- .theme-light {
468
- --color-primary-default: var(--color-blue-55);
469
- --color-primary-strong: var(--color-blue-45);
470
- --color-primary-heavy: var(--color-blue-30);
471
- --color-secondary-default: var(--color-blue-95);
472
- --color-secondary-strong: var(--color-blue-90);
473
- --color-secondary-heavy: var(--color-blue-80);
474
- --color-tertiary-default: var(--color-cool-gray-95);
475
- --color-tertiary-strong: var(--color-cool-gray-90);
476
- --color-tertiary-heavy: var(--color-cool-gray-80);
477
- }
478
- }
479
- @layer theme.tokens.color {
480
- :root,
481
- .theme-light {
482
- --color-label-strong: var(--color-cool-gray-10);
483
- --color-label-standard: var(--color-cool-gray-20);
484
- --color-label-neutral: var(--color-cool-gray-50);
485
- --color-label-alternative: var(--color-cool-gray-70);
486
- --color-label-assistive: var(--color-cool-gray-80);
487
- --color-label-disabled: var(--color-cool-gray-80);
488
- }
489
- }
490
- @layer theme.tokens.color {
491
- :root,
492
- .theme-light {
493
- --color-border-standard-cool-gray: var(--color-cool-gray-90);
494
- --color-border-standard-blue: var(--color-blue-90);
495
- --color-border-standard-strong: var(--color-cool-gray-75);
496
- --color-border-standard-heavy: var(--color-cool-gray-20);
497
- --color-border-standard-alternative: var(--color-cool-gray-80);
498
- --color-border-standard-assistive: var(--color-cool-gray-90);
499
- }
500
- }
501
- @layer theme.tokens.color {
502
- :root,
503
- .theme-light {
504
- --color-bg-standard-cool-gray: var(--color-cool-gray-99);
505
- --color-bg-alternative-cool-gray: var(--color-cool-gray-95);
506
- --color-bg-standard-neutral: var(--color-neutral-99);
507
- --color-bg-alternative-neutral: var(--color-neutral-95);
508
- }
509
- }
510
- @layer theme.tokens.color {
511
- :root,
512
- .theme-light {
513
- --color-bg-surface-static-white: var(--color-common-100);
514
- --color-bg-surface-static-cool-gray: var(--color-cool-gray-99);
515
- --color-bg-surface-static-blue: var(--color-blue-95);
516
- --color-bg-surface-neutral: var(--color-neutral-95);
517
- --color-bg-surface-standard: var(--color-cool-gray-95);
518
- --color-bg-surface-strong: var(--color-neutral-80);
519
- --color-bg-surface-heavy: var(--color-cool-gray-20);
520
- }
521
- }
522
- @layer theme.tokens.color {
523
- :root,
524
- .theme-light {
525
- --color-interaction-static: var(--color-common-100);
526
- --color-interaction-disabled: var(--color-cool-gray-95);
527
- }
528
- }
529
- @layer theme.tokens.color {
530
- :root,
531
- .theme-light {
532
- --color-danger: var(--color-red-40);
533
- --color-error: var(--color-red-45);
534
- --color-warning: var(--color-yellow-50);
535
- --color-success: var(--color-green-40);
536
- --color-information: var(--color-blue-60);
537
- --color-new: var(--color-red-50);
538
- }
539
- }
540
- @layer theme.tokens.spacing {
541
- :root {
542
- --spacing-padding-1: 2px;
543
- --spacing-padding-2: 4px;
544
- --spacing-padding-3: 6px;
545
- --spacing-padding-4: 8px;
546
- --spacing-padding-5: 12px;
547
- --spacing-padding-6: 16px;
548
- --spacing-padding-7: 20px;
549
- --spacing-padding-8: 24px;
550
- --spacing-padding-9: 28px;
551
- --spacing-padding-10: 32px;
552
- --spacing-padding-11: 40px;
553
- }
554
- }
555
- @layer theme.tokens.spacing {
556
- :root {
557
- --spacing-gap-1: 2px;
558
- --spacing-gap-2: 4px;
559
- --spacing-gap-3: 6px;
560
- --spacing-gap-4: 8px;
561
- --spacing-gap-5: 12px;
562
- --spacing-gap-6: 16px;
563
- --spacing-gap-7: 20px;
564
- --spacing-gap-8: 24px;
565
- --spacing-gap-9: 28px;
566
- --spacing-gap-10: 32px;
567
- --spacing-gap-11: 36px;
568
- --spacing-gap-12: 40px;
569
- --spacing-gap-13: 48px;
570
- --spacing-gap-14: 64px;
571
- --spacing-gap-15: 80px;
572
- }
573
- }
574
- @layer theme.tokens.layout {
575
- :root {
576
- --theme-breakpoint-xsmall-start: 0px;
577
- --theme-breakpoint-small-start: 768px;
578
- --theme-breakpoint-medium-start: 992px;
579
- --theme-breakpoint-large-start: 1200px;
580
- }
581
- }
582
- @layer theme.tokens.layout {
583
- :root {
584
- --theme-size-xxsmall: 4px;
585
- --theme-size-xsmall-1: 8px;
586
- --theme-size-xsmall-2: 12px;
587
- --theme-size-xsmall-3: 16px;
588
- --theme-size-small-1: 20px;
589
- --theme-size-small-2: 24px;
590
- --theme-size-small-3: 32px;
591
- --theme-size-medium-1: 40px;
592
- --theme-size-medium-2: 48px;
593
- --theme-size-medium-3: 56px;
594
- --theme-size-medium-4: 64px;
595
- --theme-size-large-1: 72px;
596
- --theme-size-large-2: 80px;
597
- --theme-size-xlarge-1: 96px;
598
- --theme-size-xlarge-2: 120px;
599
- }
600
- }
601
- @layer theme.tokens.layout {
602
- :root {
603
- --theme-radius-4x4: 1px;
604
- --theme-radius-8x8: 2px;
605
- --theme-radius-12x12: 2px;
606
- --theme-radius-16x16: 2px;
607
- --theme-radius-20x20: 4px;
608
- --theme-radius-24x24: 4px;
609
- --theme-radius-32x32: 4px;
610
- --theme-radius-40x40: 6px;
611
- --theme-radius-48x48: 6px;
612
- --theme-radius-56x56: 8px;
613
- --theme-radius-64x64: 10px;
614
- --theme-radius-72x72: 12px;
615
- --theme-radius-80x80: 16px;
616
- --theme-radius-96x96: 16px;
617
- --theme-radius-120x120: 16px;
618
- --theme-radius-xxsmall: 1px;
619
- --theme-radius-xsmall: 2px;
620
- --theme-radius-small: 4px;
621
- --theme-radius-medium-1: 6px;
622
- --theme-radius-medium-2: 6px;
623
- --theme-radius-medium-3: 8px;
624
- --theme-radius-medium-4: 10px;
625
- --theme-radius-large-1: 12px;
626
- --theme-radius-large-2: 16px;
627
- --theme-radius-xlarge: 16px;
628
- }
629
- }
630
- @layer theme.tokens.typography {
631
- @font-face {
632
- font-family: "Pretendard JP Variable";
633
- src: url("./fonts/pretendard-jp/PretendardJPVariable.woff2") format("woff2");
634
- font-weight: 100 900;
635
- font-style: normal;
636
- font-display: swap;
637
- }
638
- @font-face {
639
- font-family: "InterVariable";
640
- src: url("./fonts/inter/InterVariable.woff2") format("woff2");
641
- font-weight: 100 900;
642
- font-style: normal;
643
- font-display: swap;
644
- }
645
- }
646
- @layer theme.tokens.typography {
647
- :root {
648
- --font-family-pretendard:
649
- "Pretendard JP Variable", "Pretendard JP", "Pretendard Variable",
650
- "Pretendard", "InterVariable", "Inter", "Noto Sans KR", "-apple-system",
651
- "BlinkMacSystemFont", "Apple SD Gothic Neo", "Segoe UI", "Roboto",
652
- "Helvetica Neue", "Helvetica", "Apple Color Emoji", "Segoe UI Emoji",
653
- "Segoe UI Symbol", "Malgun Gothic", "맑은 고딕", "돋움", "dotum",
654
- "Oxygen", "Oxygen-Sans", "Ubuntu", "Cantarell", "sans-serif";
655
- --font-family-inter:
656
- "InterVariable", "Inter", "Pretendard JP Variable", "Pretendard JP",
657
- "Pretendard Variable", "Pretendard", "-apple-system",
658
- "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica Neue", "Helvetica",
659
- "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Malgun Gothic",
660
- "맑은 고딕", "돋움", "dotum", "Oxygen", "Oxygen-Sans", "Ubuntu",
661
- "Cantarell", "sans-serif";
662
- --font-family-system:
663
- "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto",
664
- "Helvetica Neue", "Helvetica", "Apple Color Emoji", "Segoe UI Emoji",
665
- "Segoe UI Symbol", "Malgun Gothic", "맑은 고딕", "돋움", "dotum",
666
- "Oxygen", "Oxygen-Sans", "Ubuntu", "Cantarell", "sans-serif";
667
- --font-family-sans: var(--font-family-pretendard);
668
- }
669
- }
670
- @layer theme.tokens.typography {
671
- :root {
672
- --font-display-large-size: 60px;
673
- --font-display-large-line-height: 1.4em;
674
- --font-display-large-letter-spacing: -0.2px;
675
- --font-display-large-weight: 700;
676
- --font-display-medium-size: 44px;
677
- --font-display-medium-line-height: 1.4em;
678
- --font-display-medium-letter-spacing: -0.2px;
679
- --font-display-medium-weight: 700;
680
- --font-display-small-size: 36px;
681
- --font-display-small-line-height: 1.4em;
682
- --font-display-small-letter-spacing: -0.2px;
683
- --font-display-small-weight: 600;
684
- }
685
- }
686
- @layer theme.tokens.typography {
687
- :root {
688
- --font-heading-xlarge-size: 40px;
689
- --font-heading-xlarge-line-height: 1.4em;
690
- --font-heading-xlarge-letter-spacing: -0.2px;
691
- --font-heading-xlarge-weight: 600;
692
- --font-heading-large-size: 32px;
693
- --font-heading-large-line-height: 1.4em;
694
- --font-heading-large-letter-spacing: -0.2px;
695
- --font-heading-large-weight: 600;
696
- --font-heading-medium-size: 24px;
697
- --font-heading-medium-line-height: 1.4em;
698
- --font-heading-medium-letter-spacing: 0px;
699
- --font-heading-medium-weight: 600;
700
- --font-heading-small-size: 19px;
701
- --font-heading-small-line-height: 1.4em;
702
- --font-heading-small-letter-spacing: 0px;
703
- --font-heading-small-weight: 600;
704
- --font-heading-xsmall-size: 17px;
705
- --font-heading-xsmall-line-height: 1.5em;
706
- --font-heading-xsmall-letter-spacing: 0px;
707
- --font-heading-xsmall-weight: 600;
708
- --font-heading-xxsmall-size: 15px;
709
- --font-heading-xxsmall-line-height: 1.5em;
710
- --font-heading-xxsmall-letter-spacing: 0px;
711
- --font-heading-xxsmall-weight: 600;
712
- }
713
- }
714
- @layer theme.tokens.typography {
715
- :root {
716
- --font-body-large-size: 19px;
717
- --font-body-large-line-height: 1.5em;
718
- --font-body-large-letter-spacing: 0px;
719
- --font-body-large-weight: 600;
720
- --font-body-medium-size: 17px;
721
- --font-body-medium-line-height: 1.5em;
722
- --font-body-medium-letter-spacing: 0px;
723
- --font-body-medium-weight: 500;
724
- --font-body-small-size: 15px;
725
- --font-body-small-line-height: 1.5em;
726
- --font-body-small-letter-spacing: 0px;
727
- --font-body-small-weight: 400;
728
- --font-body-xsmall-size: 13px;
729
- --font-body-xsmall-line-height: 1.5em;
730
- --font-body-xsmall-letter-spacing: 0px;
731
- --font-body-xsmall-weight: 400;
732
- }
733
- }
734
- @layer theme.tokens.typography {
735
- :root {
736
- --font-label-large-size: 16px;
737
- --font-label-large-line-height: 1.5em;
738
- --font-label-large-letter-spacing: 0px;
739
- --font-label-large-weight: 400;
740
- --font-label-medium-size: 14px;
741
- --font-label-medium-line-height: 1.5em;
742
- --font-label-medium-letter-spacing: 0px;
743
- --font-label-medium-weight: 400;
744
- --font-label-small-size: 13px;
745
- --font-label-small-line-height: 1.5em;
746
- --font-label-small-letter-spacing: 0px;
747
- --font-label-small-weight: 500;
748
- }
749
- }
750
- @layer theme.tokens.typography {
751
- :root {
752
- --font-caption-large-size: 12px;
753
- --font-caption-large-line-height: 1.5em;
754
- --font-caption-large-letter-spacing: 0px;
755
- --font-caption-large-weight: 600;
756
- --font-caption-medium-size: 11px;
757
- --font-caption-medium-line-height: 1.5em;
758
- --font-caption-medium-letter-spacing: 0px;
759
- --font-caption-medium-weight: 500;
760
- }
761
- }
762
- /**
763
- * Radix Theme가 사용하는 CSS 변수에 foundation 토큰을 연결하기 위한 placeholder.
764
- * - 추후 토큰 매핑이 확정되면, 실제 색상/타이포/간격 값을 아래에 정의한다.
765
- */
766
- /* ThemeProvider 기본 className(theme-root)와 Radix Theme 루트(.radix-themes)에 scope 지정 */
767
- :where(.radix-themes, .theme-root, :root) {
768
- /* Foundation 기본 폰트로 통일 */
769
- --default-font-family: var(--font-body-medium-family, "Pretendard");
770
- /* 서피스/라벨/피드백 계층을 foundation 시멘틱 토큰으로 변환 */
771
- --color-background: var(--color-bg-surface-static-white);
772
- --color-panel-solid: var(--color-bg-surface-static-white);
773
- --color-panel-translucent: var(--color-bg-surface-neutral);
774
- --color-surface: var(--color-bg-surface-standard);
775
- --color-overlay: var(--color-border-standard-heavy);
776
- --color-interaction-static: var(--color-interaction-static);
777
- --color-interaction-disabled: var(--color-interaction-disabled);
778
- --color-border: var(--color-border-standard-cool-gray);
779
- --color-border-strong: var(--color-border-standard-strong);
780
- --color-border-heavy: var(--color-border-standard-heavy);
781
- /* Primary(blue) 팔레트를 foundation blue 단계로 재정의 */
782
- --blue-1: var(--color-blue-99);
783
- --blue-2: var(--color-blue-95);
784
- --blue-3: var(--color-blue-90);
785
- --blue-4: var(--color-blue-80);
786
- --blue-5: var(--color-blue-70);
787
- --blue-6: var(--color-blue-60);
788
- --blue-7: var(--color-blue-55);
789
- --blue-8: var(--color-blue-50);
790
- --blue-9: var(--color-blue-45);
791
- --blue-10: var(--color-blue-40);
792
- --blue-11: var(--color-blue-30);
793
- --blue-12: var(--color-blue-20);
794
- --blue-contrast: var(--color-common-100);
795
- --blue-surface: var(--color-bg-surface-static-blue);
796
- --blue-indicator: var(--color-primary-default);
797
- --blue-track: var(--color-secondary-strong);
798
- /* Secondary(sky) 팔레트 → foundation secondary 토큰 */
799
- --sky-1: var(--color-blue-99);
800
- --sky-2: var(--color-blue-95);
801
- --sky-3: var(--color-blue-90);
802
- --sky-4: var(--color-blue-80);
803
- --sky-5: var(--color-blue-70);
804
- --sky-6: var(--color-blue-60);
805
- --sky-7: var(--color-blue-55);
806
- --sky-8: var(--color-blue-50);
807
- --sky-9: var(--color-secondary-strong);
808
- --sky-10: var(--color-secondary-heavy);
809
- --sky-11: var(--color-secondary-default);
810
- --sky-12: var(--color-blue-45);
811
- --sky-contrast: var(--color-primary-heavy);
812
- --sky-surface: var(--color-bg-surface-static-blue);
813
- --sky-indicator: var(--color-secondary-strong);
814
- --sky-track: var(--color-secondary-heavy);
815
- /* Tertiary(gray) 팔레트 → cool gray 단계 */
816
- --gray-1: var(--color-cool-gray-99);
817
- --gray-2: var(--color-cool-gray-95);
818
- --gray-3: var(--color-cool-gray-90);
819
- --gray-4: var(--color-cool-gray-85);
820
- --gray-5: var(--color-cool-gray-80);
821
- --gray-6: var(--color-cool-gray-75);
822
- --gray-7: var(--color-cool-gray-70);
823
- --gray-8: var(--color-cool-gray-65);
824
- --gray-9: var(--color-cool-gray-60);
825
- --gray-10: var(--color-cool-gray-55);
826
- --gray-11: var(--color-cool-gray-45);
827
- --gray-12: var(--color-cool-gray-20);
828
- --gray-contrast: var(--color-label-strong);
829
- --gray-surface: var(--color-bg-surface-standard);
830
- --gray-indicator: var(--color-label-neutral);
831
- --gray-track: var(--color-label-assistive);
832
- /* 공간 단위(spacing)는 foundation gap/padding 토큰으로 재정의 */
833
- --space-1: var(--spacing-gap-1);
834
- --space-2: var(--spacing-gap-2);
835
- --space-3: var(--spacing-gap-3);
836
- --space-4: var(--spacing-gap-4);
837
- --space-5: var(--spacing-gap-8);
838
- --space-6: var(--spacing-gap-10);
839
- --space-7: var(--spacing-gap-11);
840
- --space-8: var(--spacing-gap-12);
841
- --space-9: var(--spacing-gap-14);
842
- /* 글꼴 스케일을 foundation 타이포 토큰으로 매핑 */
843
- --font-size-1: var(--font-caption-large-size);
844
- --font-size-2: var(--font-label-medium-size);
845
- --font-size-3: var(--font-label-large-size);
846
- --font-size-4: var(--font-heading-xsmall-size);
847
- --font-size-5: var(--font-heading-small-size);
848
- --font-size-6: var(--font-heading-medium-size);
849
- --font-size-7: var(--font-heading-large-size);
850
- --font-size-8: var(--font-heading-xlarge-size);
851
- --font-size-9: var(--font-display-large-size);
852
- --line-height-1: var(--font-caption-large-line-height);
853
- --line-height-2: var(--font-label-medium-line-height);
854
- --line-height-3: var(--font-label-large-line-height);
855
- --line-height-4: var(--font-heading-xsmall-line-height);
856
- --line-height-5: var(--font-heading-small-line-height);
857
- --line-height-6: var(--font-heading-medium-line-height);
858
- --line-height-7: var(--font-heading-large-line-height);
859
- --line-height-8: var(--font-heading-xlarge-line-height);
860
- --line-height-9: var(--font-display-large-line-height);
861
- --letter-spacing-1: var(--font-caption-large-letter-spacing);
862
- --letter-spacing-2: var(--font-label-medium-letter-spacing);
863
- --letter-spacing-3: var(--font-label-large-letter-spacing);
864
- --letter-spacing-4: var(--font-heading-xsmall-letter-spacing);
865
- --letter-spacing-5: var(--font-heading-small-letter-spacing);
866
- --letter-spacing-6: var(--font-heading-medium-letter-spacing);
867
- --letter-spacing-7: var(--font-heading-large-letter-spacing);
868
- --letter-spacing-8: var(--font-heading-xlarge-letter-spacing);
869
- --letter-spacing-9: var(--font-display-large-letter-spacing);
870
- --font-weight-light: var(--font-label-small-weight);
871
- --font-weight-regular: var(--font-body-small-weight);
872
- --font-weight-medium: var(--font-body-medium-weight);
873
- --font-weight-bold: var(--font-display-large-weight);
874
- --default-font-family: var(--font-body-medium-family, "Pretendard");
875
- --default-font-size: var(--font-body-medium-size);
876
- --default-font-style: normal;
877
- --default-font-weight: var(--font-body-medium-weight);
878
- --default-line-height: var(--font-body-medium-line-height);
879
- --default-letter-spacing: var(--font-body-medium-letter-spacing);
880
- --default-leading-trim-start: 0.42em;
881
- --default-leading-trim-end: 0.36em;
882
- --heading-font-family: var(--font-body-medium-family, "Pretendard");
883
- --heading-font-size-adjust: 1;
884
- --heading-font-style: normal;
885
- --heading-leading-trim-start: var(--default-leading-trim-start);
886
- --heading-leading-trim-end: var(--default-leading-trim-end);
887
- --heading-letter-spacing: var(--font-heading-small-letter-spacing);
888
- --heading-line-height-1: var(--font-heading-xxsmall-line-height);
889
- --heading-line-height-2: var(--font-heading-xsmall-line-height);
890
- --heading-line-height-3: var(--font-heading-small-line-height);
891
- --heading-line-height-4: var(--font-heading-medium-line-height);
892
- --heading-line-height-5: var(--font-heading-large-line-height);
893
- --heading-line-height-6: var(--font-heading-xlarge-line-height);
894
- --heading-line-height-7: var(--font-display-small-line-height, 1.4em);
895
- --heading-line-height-8: var(--font-display-medium-line-height);
896
- --heading-line-height-9: var(--font-display-large-line-height);
897
- --code-font-family:
898
- "Menlo", "Consolas", "Bitstream Vera Sans Mono", monospace;
899
- --code-font-style: normal;
900
- --code-letter-spacing: -0.007em;
901
- --strong-font-family: var(--font-body-medium-family, "Pretendard");
902
- --strong-font-weight: var(--font-display-medium-weight, 700);
903
- --em-font-family: "Times New Roman", "Times", serif;
904
- --quote-font-family: "Times New Roman", "Times", serif;
905
- --tab-active-letter-spacing: var(--font-label-medium-letter-spacing);
906
- --tab-inactive-letter-spacing: var(--font-label-medium-letter-spacing);
907
- --tab-active-word-spacing: 0em;
908
- --tab-inactive-word-spacing: 0em;
909
- /* 입력/텍스트 요소에서 커서 컬러는 본문 텍스트와 동일하게 유지한다. */
910
- }
911
- :where(.radix-themes, .theme-root, :root) input,
912
- :where(.radix-themes, .theme-root, :root) textarea {
913
- caret-color: var(--color-label-strong);
914
- }
915
- :where(.radix-themes, .theme-root, :root) {
916
- /* 커서/컨테이너 기본값 */
917
- --cursor-button: default;
918
- --cursor-checkbox: default;
919
- --cursor-disabled: not-allowed;
920
- --cursor-link: pointer;
921
- --cursor-menu-item: default;
922
- --cursor-radio: default;
923
- --cursor-slider-thumb: default;
924
- --cursor-slider-thumb-active: default;
925
- --cursor-switch: default;
926
- --container-1: 448px;
927
- --container-2: 688px;
928
- --container-3: 880px;
929
- --container-4: 1136px;
930
- --scrollarea-scrollbar-horizontal-margin-top: var(--space-1);
931
- --scrollarea-scrollbar-horizontal-margin-bottom: var(--space-1);
932
- --scrollarea-scrollbar-horizontal-margin-left: var(--space-1);
933
- --scrollarea-scrollbar-horizontal-margin-right: var(--space-1);
934
- --scrollarea-scrollbar-vertical-margin-top: var(--space-1);
935
- --scrollarea-scrollbar-vertical-margin-bottom: var(--space-1);
936
- --scrollarea-scrollbar-vertical-margin-left: var(--space-1);
937
- --scrollarea-scrollbar-vertical-margin-right: var(--space-1);
938
- --segmented-control-transition-duration: 100ms;
939
- --spinner-animation-duration: 800ms;
940
- --spinner-opacity: 0.65;
941
- overflow-wrap: break-word;
942
- font-family: var(--default-font-family);
943
- font-size: var(--default-font-size);
944
- font-weight: var(--default-font-weight);
945
- font-style: var(--default-font-style);
946
- line-height: var(--default-line-height);
947
- letter-spacing: var(--default-letter-spacing);
948
- -webkit-text-size-adjust: none;
949
- text-size-adjust: none;
950
- -webkit-font-smoothing: antialiased;
951
- -moz-osx-font-smoothing: grayscale;
952
- color: var(--gray-12);
953
- }
954
-
955
- /* Radix Themes reset(`.rt-reset`)이 foundation reset보다 우선하지 않도록 기본 박스 모델 재정의 */
956
- :where(.radix-themes, .theme-root) :is(.rt-reset, .rt-reset::before, .rt-reset::after) {
957
- box-sizing: border-box;
958
- margin: 0;
959
- padding: 0;
960
- border: 0;
961
- }
962
-
963
- /* 모든 primitives component SCSS를 한 번에 노출해 서비스 import 부담을 줄인다. */
2
+ /* templates styles는 foundation/primitives 순으로 import된 이후를 가정한다. */
3
+ /* 모든 primitives component SCSS를 한 번에 노출해 서비스 import 부담을 줄인다.
4
+ ※ foundation CSS(`@uniai-fe/uds-foundation/css`)는 소비자가 별도로 한 번만 로드해야 한다. */
964
5
  /* TODO(alternate): 스타일을 SOT 토큰 값으로 정의한다. */
965
6
  /* Badge 토큰을 foundation 변수에 맞춰 한 번 더 래핑해 override 여지를 둔다. */
966
- :where(.radix-themes, .theme-root, :root) {
7
+ .uds-theme-root {
967
8
  --theme-badge-height-xsmall: var(--theme-size-small-1, 20px);
968
9
  --theme-badge-height-small: var(--theme-size-small-2, 24px);
969
10
  --theme-badge-padding-inline-xsmall: var(--spacing-padding-3, 6px);
@@ -1646,7 +687,7 @@
1646
687
  }
1647
688
 
1648
689
  /* TODO(calendar): 스타일을 SOT 토큰 값으로 정의한다. */
1649
- :where(.radix-themes, .theme-root, :root) {
690
+ .uds-theme-root {
1650
691
  --theme-checkbox-frame-size-medium: 20px;
1651
692
  --theme-checkbox-frame-size-large: 24px;
1652
693
  --theme-checkbox-indicator-size-medium: 16px;
@@ -1659,13 +700,15 @@
1659
700
  --theme-checkbox-surface: var(--color-common-100);
1660
701
  --theme-checkbox-surface-selected: var(--color-primary-default);
1661
702
  --theme-checkbox-surface-disabled: var(--color-neutral-95);
703
+ --theme-checkbox-surface-selected-disabled: rgba(26, 106, 255, 0.28);
1662
704
  --theme-checkbox-label-color: var(--color-label-strong);
1663
705
  --theme-checkbox-label-disabled: var(--color-label-disabled);
1664
706
  --theme-checkbox-helper-color: var(--color-label-neutral);
1665
707
  --theme-checkbox-helper-disabled: var(--color-label-disabled);
1666
- --theme-checkbox-icon-color: var(--color-common-100);
708
+ --theme-checkbox-icon-default: transparent;
709
+ --theme-checkbox-icon-selected: var(--color-common-100);
710
+ --theme-checkbox-icon-disabled-selected: var(--color-common-100);
1667
711
  --theme-checkbox-focus-ring: rgba(2, 84, 255, 0.32);
1668
- --theme-checkbox-disabled-selected-opacity: 0.28;
1669
712
  }
1670
713
 
1671
714
  .checkbox {
@@ -1691,7 +734,6 @@
1691
734
  border-radius: var(--theme-checkbox-control-radius-large);
1692
735
  }
1693
736
  .checkbox[data-disabled=true] {
1694
- opacity: 0.6;
1695
737
  cursor: not-allowed;
1696
738
  }
1697
739
 
@@ -1699,49 +741,64 @@
1699
741
  box-shadow: 0 0 0 2px var(--theme-checkbox-focus-ring);
1700
742
  }
1701
743
 
1702
- .checkbox-indicator {
744
+ .checkbox-surface {
1703
745
  inline-size: var(--theme-checkbox-indicator-size-medium);
1704
746
  block-size: var(--theme-checkbox-indicator-size-medium);
1705
747
  display: inline-flex;
1706
748
  align-items: center;
1707
749
  justify-content: center;
1708
- color: var(--theme-checkbox-icon-color);
1709
750
  border: var(--theme-checkbox-border-width) solid var(--theme-checkbox-border-color);
1710
751
  border-radius: var(--theme-checkbox-control-radius-medium);
1711
752
  background-color: var(--theme-checkbox-surface);
1712
- transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, opacity 0.15s ease;
1713
- }
1714
- .checkbox-indicator svg {
1715
- display: block;
1716
- inline-size: auto;
1717
- block-size: auto;
1718
- max-inline-size: 100%;
1719
- max-block-size: 100%;
753
+ transition: background-color 0.15s ease, border-color 0.15s ease;
1720
754
  }
1721
755
 
1722
- .checkbox[data-size=large] .checkbox-indicator {
756
+ .checkbox[data-size=large] .checkbox-surface {
1723
757
  inline-size: var(--theme-checkbox-indicator-size-large);
1724
758
  block-size: var(--theme-checkbox-indicator-size-large);
1725
759
  border-radius: var(--theme-checkbox-control-radius-large);
1726
760
  }
1727
761
 
1728
- .checkbox[data-state=checked] .checkbox-indicator,
1729
- .checkbox[data-state=indeterminate] .checkbox-indicator {
762
+ .checkbox[data-state=checked] .checkbox-surface,
763
+ .checkbox[data-state=indeterminate] .checkbox-surface {
1730
764
  background-color: var(--theme-checkbox-surface-selected);
1731
765
  border-color: var(--theme-checkbox-border-selected);
1732
766
  }
1733
767
 
1734
- .checkbox[data-disabled=true] .checkbox-indicator {
768
+ .checkbox[data-disabled=true] .checkbox-surface {
1735
769
  background-color: var(--theme-checkbox-surface-disabled);
1736
770
  border-color: var(--theme-checkbox-border-color);
1737
- opacity: 1;
771
+ }
772
+
773
+ .checkbox[data-disabled=true][data-state=checked] .checkbox-surface,
774
+ .checkbox[data-disabled=true][data-state=indeterminate] .checkbox-surface {
775
+ background-color: var(--theme-checkbox-surface-selected-disabled);
776
+ border-color: var(--theme-checkbox-border-color);
777
+ }
778
+
779
+ .checkbox-indicator {
780
+ display: inline-flex;
781
+ align-items: center;
782
+ justify-content: center;
783
+ color: var(--theme-checkbox-icon-default);
784
+ transition: color 0.15s ease;
785
+ }
786
+ .checkbox-indicator svg {
787
+ display: block;
788
+ inline-size: auto;
789
+ block-size: auto;
790
+ max-inline-size: 100%;
791
+ max-block-size: 100%;
792
+ }
793
+
794
+ .checkbox[data-state=checked] .checkbox-indicator,
795
+ .checkbox[data-state=indeterminate] .checkbox-indicator {
796
+ color: var(--theme-checkbox-icon-selected);
1738
797
  }
1739
798
 
1740
799
  .checkbox[data-disabled=true][data-state=checked] .checkbox-indicator,
1741
800
  .checkbox[data-disabled=true][data-state=indeterminate] .checkbox-indicator {
1742
- background-color: var(--theme-checkbox-surface-selected);
1743
- border-color: var(--theme-checkbox-border-selected);
1744
- opacity: var(--theme-checkbox-disabled-selected-opacity);
801
+ color: var(--theme-checkbox-icon-disabled-selected);
1745
802
  }
1746
803
 
1747
804
  .checkbox-field {
@@ -1794,7 +851,7 @@
1794
851
  }
1795
852
 
1796
853
  /* Chip 기본 토큰 래핑 */
1797
- :where(.radix-themes, .theme-root, :root) {
854
+ .uds-theme-root {
1798
855
  --theme-chip-height: var(--theme-size-small-3, 32px);
1799
856
  --theme-chip-padding-inline: var(--spacing-padding-5, 12px);
1800
857
  --theme-chip-radius: var(--theme-radius-medium-3, 8px);
@@ -1928,1705 +985,2433 @@ figure.chip {
1928
985
  height: 100%;
1929
986
  }
1930
987
 
1931
- :where(.radix-themes, .theme-root, :root) {
1932
- /* dialog essentials */
1933
- --dialog-overlay-bg: rgba(5, 6, 12, 0.55);
1934
- --dialog-panel-width: 360px;
1935
- --dialog-panel-max-width: calc(100vw - var(--spacing-padding-10) * 2);
1936
- --dialog-panel-bg: var(--color-bg-surface-static-white);
1937
- --dialog-panel-radius: var(--theme-radius-large-1);
1938
- --dialog-panel-shadow: 0px 18px 40px rgba(8, 11, 30, 0.18);
1939
- --dialog-border-color: var(--color-border-standard-cool-gray);
1940
- --dialog-title-color: var(--color-label-strong);
1941
- --dialog-title-font-size: var(--font-heading-xsmall-size);
1942
- --dialog-title-line-height: var(--font-heading-xsmall-line-height);
1943
- --dialog-title-weight: var(--font-heading-xsmall-weight);
1944
- --dialog-body-color: var(--color-label-standard);
1945
- --dialog-body-font-size: var(--font-body-small-size);
1946
- --dialog-body-line-height: var(--font-body-small-line-height);
1947
- --dialog-description-color: var(--color-label-standard);
1948
- --dialog-description-font-size: var(--font-body-small-size);
1949
- --dialog-description-line-height: var(--font-body-small-line-height);
1950
- /* alert(notice) defaults */
1951
- --notice-dialog-section-padding-x: var(--spacing-padding-8);
1952
- --notice-dialog-section-padding-y: var(--spacing-padding-10);
1953
- --notice-dialog-action-height: 52px;
1954
- /* confirm defaults */
1955
- --confirm-dialog-header-padding-x: var(--spacing-padding-6);
1956
- --confirm-dialog-header-padding-y: var(--spacing-padding-7);
1957
- --confirm-dialog-body-padding-x: var(--spacing-padding-6);
1958
- --confirm-dialog-body-padding-y: var(--spacing-padding-7);
1959
- --confirm-dialog-footer-padding-x: var(--spacing-padding-6);
1960
- --confirm-dialog-footer-padding-y: var(--spacing-padding-7);
1961
- --confirm-dialog-actions-gap: var(--spacing-gap-5);
1962
- }
1963
-
1964
- .dialog-overlay {
988
+ .uds-theme-root {
989
+ --drawer-overlay-bg: rgba(0, 0, 0, 0.44);
990
+ --drawer-surface-bg: var(--color-bg-surface-static-white);
991
+ --drawer-radius-large: var(--theme-radius-large-2);
992
+ --drawer-radius-medium: var(--theme-radius-large-1);
993
+ --drawer-body-color: var(--color-label-standard);
994
+ --drawer-title-color: var(--color-label-strong);
995
+ --drawer-gap: calc(var(--spacing-gap-9, 28px) + 2px);
996
+ --drawer-padding-x: calc(var(--spacing-padding-10, 32px) - 2px);
997
+ --drawer-padding-top: var(--spacing-padding-7, 20px);
998
+ --drawer-padding-bottom: calc(
999
+ var(--spacing-padding-11, 40px) + var(--spacing-padding-7, 20px)
1000
+ );
1001
+ --drawer-footer-gap: var(--spacing-gap-6, 16px);
1002
+ --drawer-section-gap: var(--spacing-gap-6, 16px);
1003
+ --drawer-handle-width: calc(
1004
+ var(--spacing-padding-11, 40px) + var(--spacing-padding-7, 20px)
1005
+ );
1006
+ --drawer-handle-height: var(--spacing-padding-2, 4px);
1007
+ --drawer-handle-bg: var(--color-border-standard-cool-gray);
1008
+ --drawer-close-size: 36px;
1009
+ --drawer-drag-offset: 0px;
1010
+ }
1011
+
1012
+ .drawer-overlay {
1965
1013
  position: fixed;
1966
1014
  inset: 0;
1967
- background-color: var(--dialog-overlay-bg);
1015
+ background-color: var(--drawer-overlay-bg);
1968
1016
  opacity: 0;
1969
- transition: opacity 0.2s ease;
1017
+ pointer-events: none;
1018
+ transition: opacity 0.25s ease;
1970
1019
  will-change: opacity;
1971
1020
  }
1972
- .dialog-overlay[data-state=open] {
1021
+ .drawer-overlay[data-phase=entering], .drawer-overlay[data-phase=entered] {
1973
1022
  opacity: 1;
1023
+ pointer-events: auto;
1974
1024
  }
1975
- .dialog-overlay[data-state=closed] {
1025
+ .drawer-overlay[data-phase=exiting] {
1976
1026
  opacity: 0;
1977
- pointer-events: none;
1027
+ pointer-events: auto;
1978
1028
  }
1979
1029
 
1980
1030
  @media (prefers-reduced-motion: reduce) {
1981
- .dialog-overlay {
1031
+ .drawer-overlay {
1982
1032
  transition: none;
1983
1033
  }
1984
1034
  }
1985
- .dialog-content {
1035
+ .drawer-content {
1986
1036
  position: fixed;
1987
- top: 50%;
1988
- left: 50%;
1989
- transform: translate(-50%, -50%);
1990
- width: min(var(--dialog-panel-width), var(--dialog-panel-max-width));
1991
- max-width: var(--dialog-panel-max-width);
1992
- max-height: calc(100vh - var(--spacing-padding-10) * 2);
1993
- background-color: var(--dialog-panel-bg);
1994
- border-radius: var(--dialog-panel-radius);
1995
- box-shadow: var(--dialog-panel-shadow);
1996
1037
  display: flex;
1997
1038
  flex-direction: column;
1998
- overflow: hidden;
1999
- overflow-y: auto;
2000
- overscroll-behavior: contain;
1039
+ background-color: var(--drawer-surface-bg);
2001
1040
  outline: none;
2002
1041
  border: none;
2003
- gap: 0;
1042
+ box-shadow: none;
1043
+ color: var(--drawer-body-color);
1044
+ overscroll-behavior: contain;
1045
+ left: 50%;
1046
+ bottom: 0;
1047
+ transform: translate3d(-50%, 100%, 0);
1048
+ border-top-left-radius: var(--drawer-radius-large);
1049
+ border-top-right-radius: var(--drawer-radius-large);
1050
+ max-width: 640px;
1051
+ padding-bottom: env(safe-area-inset-bottom);
1052
+ max-width: min(640px, 100%);
1053
+ width: 100%;
1054
+ max-height: calc(100vh - var(--spacing-padding-8));
1055
+ transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s ease;
2004
1056
  opacity: 0;
2005
- transition: opacity 0.2s ease, transform 0.2s ease;
1057
+ pointer-events: none;
1058
+ will-change: transform;
1059
+ }
1060
+
1061
+ .drawer-content[data-phase=entering],
1062
+ .drawer-content[data-phase=entered] {
1063
+ transform: translate3d(-50%, var(--drawer-drag-offset, 0px), 0);
1064
+ opacity: 1;
1065
+ pointer-events: auto;
2006
1066
  }
2007
- .dialog-content[data-state=open] {
1067
+
1068
+ .drawer-content[data-phase=exiting] {
1069
+ transform: translate3d(-50%, calc(100% + var(--drawer-drag-offset, 0px)), 0);
2008
1070
  opacity: 1;
2009
- transform: translate(-50%, -50%);
1071
+ pointer-events: none;
2010
1072
  }
2011
- .dialog-content[data-state=closed] {
1073
+
1074
+ .drawer-content[data-phase=exited] {
1075
+ transform: translate3d(-50%, 100%, 0);
2012
1076
  opacity: 0;
2013
- transform: translate(-50%, calc(-50% + 12px));
2014
1077
  pointer-events: none;
2015
1078
  }
2016
1079
 
1080
+ .drawer-content[data-dragging=true] {
1081
+ transition: none;
1082
+ }
1083
+
2017
1084
  @media (prefers-reduced-motion: reduce) {
2018
- .dialog-content {
1085
+ .drawer-content {
2019
1086
  transition: none;
2020
1087
  }
2021
1088
  }
2022
- .dialog-section {
1089
+ .drawer-handle {
1090
+ display: flex;
1091
+ align-items: center;
1092
+ justify-content: center;
1093
+ border: none;
1094
+ background: transparent;
1095
+ padding: var(--drawer-padding-top) 0 var(--spacing-padding-6);
1096
+ cursor: grab;
1097
+ }
1098
+
1099
+ .drawer-handle:active {
1100
+ cursor: grabbing;
1101
+ }
1102
+
1103
+ .drawer-handle-bar {
1104
+ width: var(--drawer-handle-width);
1105
+ height: var(--drawer-handle-height);
1106
+ border-radius: var(--drawer-handle-height);
1107
+ background-color: var(--drawer-handle-bg);
1108
+ display: block;
1109
+ }
1110
+
1111
+ .drawer-close-button {
1112
+ position: absolute;
1113
+ top: var(--drawer-padding-top);
1114
+ right: var(--drawer-padding-x);
1115
+ width: 24px;
1116
+ height: 24px;
1117
+ border-radius: 0;
1118
+ border: none;
1119
+ background: transparent;
1120
+ display: flex;
1121
+ align-items: center;
1122
+ justify-content: center;
1123
+ cursor: pointer;
2023
1124
  padding: 0;
1125
+ color: var(--color-label-neutral, #7f8a94);
2024
1126
  }
2025
- .dialog-section[data-section=actions] {
2026
- flex-shrink: 0;
1127
+
1128
+ .drawer-close-button svg {
1129
+ width: 24px;
1130
+ height: 24px;
2027
1131
  }
2028
1132
 
2029
- .dialog-title {
2030
- margin: 0;
2031
- color: var(--dialog-title-color);
2032
- font-size: var(--dialog-title-font-size);
2033
- line-height: var(--dialog-title-line-height);
2034
- font-weight: var(--dialog-title-weight);
1133
+ .drawer-inner {
1134
+ display: flex;
1135
+ flex-direction: column;
1136
+ gap: var(--drawer-gap);
1137
+ padding-inline: var(--drawer-padding-x);
1138
+ padding-bottom: var(--drawer-padding-bottom);
1139
+ padding-top: var(--drawer-padding-top);
1140
+ flex: 1 1 auto;
1141
+ min-height: 0;
1142
+ }
1143
+
1144
+ .drawer-section {
1145
+ display: flex;
1146
+ flex-direction: column;
1147
+ gap: var(--drawer-section-gap);
1148
+ color: var(--drawer-body-color);
1149
+ width: 100%;
1150
+ }
1151
+
1152
+ .drawer-header {
1153
+ text-align: left;
1154
+ padding-top: 0;
1155
+ }
1156
+
1157
+ .drawer-body {
1158
+ flex: 1 1 auto;
1159
+ overflow-y: auto;
1160
+ gap: var(--spacing-gap-5);
1161
+ font-size: var(--font-body-small-size);
1162
+ line-height: var(--font-body-small-line-height);
1163
+ color: var(--drawer-body-color);
1164
+ width: 100%;
1165
+ word-break: keep-all;
1166
+ }
1167
+
1168
+ .drawer-body > * {
1169
+ width: 100%;
2035
1170
  }
2036
1171
 
2037
- .dialog-description {
1172
+ .drawer-body p {
2038
1173
  margin: 0;
2039
- color: var(--dialog-description-color);
2040
- font-size: var(--dialog-description-font-size);
2041
- line-height: var(--dialog-description-line-height);
1174
+ word-break: inherit;
2042
1175
  }
2043
1176
 
2044
- .dialog-button {
1177
+ .drawer-footer {
1178
+ padding: var(--spacing-padding-8) 0 0;
1179
+ border-top: none;
1180
+ flex-shrink: 0;
2045
1181
  display: flex;
2046
- align-items: center;
2047
- justify-content: center;
1182
+ flex-direction: column;
1183
+ gap: var(--drawer-footer-gap);
2048
1184
  width: 100%;
2049
- border: none;
2050
- border-radius: 0;
1185
+ }
1186
+
1187
+ .drawer-title {
2051
1188
  margin: 0;
2052
- padding: 0;
2053
- font-size: var(--font-body-medium-size);
2054
- line-height: var(--font-body-medium-line-height);
2055
- font-weight: var(--font-body-medium-weight);
2056
- cursor: pointer;
2057
- background: transparent;
2058
- color: var(--color-label-strong);
2059
- transition: background-color 0.15s ease, color 0.15s ease;
1189
+ font-size: var(--font-heading-medium-size);
1190
+ line-height: var(--font-heading-medium-line-height);
1191
+ font-weight: var(--font-heading-medium-weight);
1192
+ color: var(--drawer-title-color);
1193
+ letter-spacing: var(--font-heading-medium-letter-spacing, normal);
1194
+ }
1195
+
1196
+ .drawer-description {
1197
+ margin: 0;
1198
+ color: var(--drawer-body-color);
1199
+ font-size: var(--font-body-xsmall-size);
1200
+ line-height: var(--font-body-xsmall-line-height);
1201
+ letter-spacing: var(--font-body-xsmall-letter-spacing, normal);
2060
1202
  }
2061
1203
 
2062
- .dialog-button[data-native-element=true] {
2063
- appearance: none;
1204
+ .drawer-dismiss {
1205
+ display: none;
2064
1206
  }
2065
1207
 
2066
- .notice-dialog-header,
2067
- .notice-dialog-body {
2068
- padding: var(--notice-dialog-section-padding-y) var(--notice-dialog-section-padding-x);
1208
+ /* TODO(dropdown): 스타일을 SOT 토큰 값으로 정의한다. */
1209
+ .uds-theme-root {
1210
+ --theme-input-height-small: var(--theme-size-medium-1);
1211
+ --theme-input-height-medium: var(--theme-size-medium-2);
1212
+ --theme-input-height-large: var(--theme-size-medium-3);
1213
+ --theme-input-height-tertiary: calc(var(--theme-size-medium-2) + 24px);
1214
+ --theme-input-padding-x: var(--spacing-padding-6);
1215
+ --theme-input-padding-y: var(--spacing-padding-4);
1216
+ --theme-input-gap: var(--spacing-gap-4);
1217
+ --theme-input-radius-default: var(--theme-radius-large-1);
1218
+ --theme-input-radius-tertiary: var(--theme-radius-large-2);
1219
+ --theme-input-label-color: var(--color-label-standard);
1220
+ --theme-input-helper-color: var(--color-label-neutral);
1221
+ --theme-input-helper-success-color: var(--color-success);
1222
+ --theme-input-helper-error-color: var(--color-error);
1223
+ --theme-input-helper-disabled-color: var(--color-label-disabled);
1224
+ --theme-input-label-accent-color: var(--color-primary-default);
1225
+ --theme-input-label-error-color: var(--color-error);
1226
+ --theme-input-placeholder-color: var(--color-label-alternative);
1227
+ --theme-input-text-color: var(--color-label-strong);
1228
+ --theme-input-border-color: var(--color-border-standard-cool-gray);
1229
+ --theme-input-border-width-default: 1px;
1230
+ --theme-input-border-width-emphasis: 1.4px;
1231
+ --theme-input-border-active: #99bdff;
1232
+ --theme-input-border-success: #99bdff;
1233
+ --theme-input-border-error: rgba(218, 29, 11, 0.44);
1234
+ --theme-input-border-disabled: var(--color-border-standard-cool-gray);
1235
+ --theme-input-border-underline-disabled: var(
1236
+ --color-border-standard-assistive
1237
+ );
1238
+ --theme-input-surface: var(--color-common-100);
1239
+ --theme-input-surface-muted: var(--color-neutral-99);
1240
+ --theme-input-surface-disabled: var(--color-neutral-95);
2069
1241
  }
2070
1242
 
2071
- .notice-dialog-header {
1243
+ .input {
2072
1244
  display: flex;
2073
1245
  flex-direction: column;
2074
1246
  gap: var(--spacing-gap-3);
2075
- text-align: center;
2076
- }
2077
-
2078
- .notice-dialog-body {
2079
- text-align: center;
1247
+ width: 100%;
2080
1248
  }
2081
-
2082
- .notice-dialog-body p {
2083
- margin: 0 0 var(--spacing-gap-2);
2084
- color: var(--dialog-body-color);
2085
- font-size: var(--dialog-body-font-size);
2086
- line-height: 1.5em;
2087
- font-weight: var(--font-body-small-weight);
2088
- word-break: keep-all;
1249
+ .input[data-block=true], .input--block {
1250
+ width: 100%;
2089
1251
  }
2090
1252
 
2091
- .notice-dialog-body p:last-child {
2092
- margin-bottom: 0;
1253
+ .input-label {
1254
+ color: var(--theme-input-label-color);
1255
+ font-size: var(--font-label-small-size);
1256
+ line-height: var(--font-label-small-line-height);
1257
+ font-weight: var(--font-label-small-weight);
2093
1258
  }
2094
1259
 
2095
- .notice-dialog-actions {
2096
- border-top: 1px solid var(--dialog-border-color);
2097
- display: flex;
2098
- align-items: stretch;
2099
- flex-direction: row;
1260
+ .input-label--visually-hidden {
1261
+ position: absolute;
1262
+ width: 1px;
1263
+ height: 1px;
2100
1264
  padding: 0;
2101
- gap: 0;
2102
- justify-content: center;
1265
+ margin: -1px;
2103
1266
  overflow: hidden;
2104
- --button-min-height: var(--notice-dialog-action-height);
2105
- --button-padding-inline: 0;
2106
- --button-padding-block: 0;
2107
- --button-border-radius: 0;
1267
+ clip: rect(0 0 0 0);
1268
+ clip-path: inset(50%);
1269
+ white-space: nowrap;
1270
+ border: 0;
2108
1271
  }
2109
1272
 
2110
- .notice-dialog-actions > * {
2111
- flex: 1;
1273
+ .input-box {
1274
+ width: 100%;
2112
1275
  }
2113
1276
 
2114
- .notice-dialog-actions .button {
1277
+ .input-field {
2115
1278
  display: flex;
2116
1279
  align-items: center;
2117
- justify-content: center;
2118
1280
  width: 100%;
1281
+ gap: var(--theme-input-gap);
1282
+ border-radius: var(--theme-input-radius-default);
1283
+ border: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
1284
+ background-color: var(--theme-input-surface);
1285
+ padding: var(--theme-input-padding-y) var(--theme-input-padding-x);
1286
+ min-height: var(--theme-input-height-medium);
1287
+ transition: border-color 0.15s ease, background-color 0.15s ease;
1288
+ box-sizing: border-box;
1289
+ outline: none;
1290
+ box-shadow: none;
1291
+ }
1292
+ .input-field[data-size=small] {
1293
+ min-height: var(--theme-input-height-small);
1294
+ }
1295
+ .input-field[data-size=large] {
1296
+ min-height: var(--theme-input-height-large);
1297
+ }
1298
+ .input-field[data-priority=secondary] {
2119
1299
  border: none;
1300
+ border-bottom: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
2120
1301
  border-radius: 0;
2121
- margin: 0;
2122
- padding: 0;
2123
- font-size: var(--font-body-medium-size);
2124
- line-height: var(--font-body-medium-line-height);
2125
- font-weight: var(--font-body-medium-weight);
2126
- cursor: pointer;
2127
- background: transparent;
2128
- color: var(--color-label-strong);
2129
- transition: background-color 0.15s ease, color 0.15s ease;
2130
- background-color: var(--color-common-100);
2131
- color: var(--color-primary-default);
2132
- }
2133
- .notice-dialog-actions .button:hover {
2134
- background-color: var(--color-bg-surface-static-cool-gray);
1302
+ padding-inline: 0;
1303
+ padding-block: var(--spacing-padding-4);
1304
+ background-color: transparent;
2135
1305
  }
2136
-
2137
- .notice-dialog-actions .button:not(:first-child),
2138
- .notice-dialog-actions [data-native-element=true]:not(:first-child) {
2139
- border-left: 1px solid var(--dialog-border-color);
1306
+ .input-field[data-priority=secondary][data-state=active], .input-field[data-priority=secondary][data-state=focused] {
1307
+ border-bottom-color: var(--theme-input-border-active);
1308
+ border-bottom-width: var(--theme-input-border-width-emphasis);
2140
1309
  }
2141
-
2142
- .confirm-dialog-header {
2143
- padding: var(--confirm-dialog-header-padding-y) var(--confirm-dialog-header-padding-x);
1310
+ .input-field[data-priority=secondary][data-state=success] {
1311
+ border-bottom-color: var(--theme-input-border-success);
1312
+ border-bottom-width: var(--theme-input-border-width-emphasis);
2144
1313
  }
2145
-
2146
- .confirm-dialog-body {
2147
- padding: var(--confirm-dialog-body-padding-y) var(--confirm-dialog-body-padding-x);
1314
+ .input-field[data-priority=secondary][data-state=error] {
1315
+ border-bottom-color: var(--theme-input-border-error);
1316
+ border-bottom-width: var(--theme-input-border-width-emphasis);
2148
1317
  }
2149
-
2150
- .confirm-dialog-header {
2151
- display: flex;
2152
- flex-direction: column;
2153
- gap: var(--spacing-gap-2);
2154
- text-align: center;
1318
+ .input-field[data-priority=secondary][data-state=disabled] {
1319
+ border-bottom-color: var(--theme-input-border-underline-disabled);
1320
+ border-bottom-width: var(--theme-input-border-width-default);
2155
1321
  }
2156
-
2157
- .confirm-dialog-body {
2158
- display: flex;
2159
- flex-direction: column;
1322
+ .input-field[data-priority=tertiary] {
1323
+ border-radius: var(--theme-input-radius-tertiary);
1324
+ background-color: var(--theme-input-surface);
1325
+ min-height: var(--theme-input-height-tertiary);
1326
+ row-gap: var(--spacing-gap-1);
1327
+ column-gap: var(--theme-input-gap);
1328
+ flex-wrap: wrap;
2160
1329
  align-items: center;
2161
- gap: var(--spacing-gap-2);
2162
- text-align: center;
2163
1330
  }
2164
-
2165
- .confirm-dialog-body p {
2166
- margin: 0;
2167
- color: var(--dialog-body-color);
2168
- font-size: var(--dialog-body-font-size);
2169
- line-height: 1.5em;
2170
- font-weight: var(--font-body-small-weight);
2171
- word-break: keep-all;
1331
+ .input-field[data-priority=tertiary] .input-field__control {
1332
+ display: grid;
1333
+ grid-template-columns: auto minmax(0, 1fr);
1334
+ column-gap: var(--theme-input-gap);
1335
+ row-gap: var(--spacing-gap-1);
1336
+ align-items: center;
1337
+ flex: 1 1 auto;
1338
+ min-width: 0;
2172
1339
  }
2173
-
2174
- .confirm-dialog-description {
1340
+ .input-field[data-priority=tertiary] .input-inline-label {
1341
+ grid-column: 1/-1;
2175
1342
  margin: 0;
2176
- color: var(--dialog-body-color);
2177
- font-size: var(--dialog-body-font-size);
2178
- line-height: 1.5em;
2179
- font-weight: var(--font-body-small-weight);
2180
- word-break: keep-all;
2181
- }
2182
-
2183
- .confirm-dialog-actions {
2184
- display: flex;
2185
- align-items: stretch;
2186
- flex-direction: row;
2187
- padding: var(--confirm-dialog-footer-padding-y) var(--confirm-dialog-footer-padding-x);
2188
- gap: var(--confirm-dialog-actions-gap);
2189
- justify-content: center;
1343
+ align-self: flex-start;
2190
1344
  }
2191
-
2192
- .confirm-dialog-actions > * {
2193
- flex: 1;
1345
+ .input-field[data-priority=tertiary] .input-element {
1346
+ min-height: var(--theme-size-medium-2);
1347
+ width: auto;
1348
+ flex: 1 1 auto;
2194
1349
  }
2195
-
2196
- :where(.radix-themes, .theme-root, :root) {
2197
- --drawer-overlay-bg: rgba(0, 0, 0, 0.44);
2198
- --drawer-surface-bg: var(--color-bg-surface-static-white);
2199
- --drawer-radius-large: var(--theme-radius-large-2);
2200
- --drawer-radius-medium: var(--theme-radius-large-1);
2201
- --drawer-body-color: var(--color-label-standard);
2202
- --drawer-title-color: var(--color-label-strong);
2203
- --drawer-gap: calc(var(--spacing-gap-9, 28px) + 2px);
2204
- --drawer-padding-x: calc(var(--spacing-padding-10, 32px) - 2px);
2205
- --drawer-padding-top: var(--spacing-padding-7, 20px);
2206
- --drawer-padding-bottom: calc(
2207
- var(--spacing-padding-11, 40px) + var(--spacing-padding-7, 20px)
2208
- );
2209
- --drawer-footer-gap: var(--spacing-gap-6, 16px);
2210
- --drawer-section-gap: var(--spacing-gap-6, 16px);
2211
- --drawer-handle-width: calc(
2212
- var(--spacing-padding-11, 40px) + var(--spacing-padding-7, 20px)
2213
- );
2214
- --drawer-handle-height: var(--spacing-padding-2, 4px);
2215
- --drawer-handle-bg: var(--color-border-standard-cool-gray);
2216
- --drawer-close-size: 36px;
2217
- --drawer-drag-offset: 0px;
1350
+ .input-field[data-priority=tertiary] .input-field__utilities {
1351
+ align-self: center;
1352
+ margin-left: 0;
2218
1353
  }
2219
-
2220
- .drawer-overlay {
2221
- position: fixed;
2222
- inset: 0;
2223
- background-color: var(--drawer-overlay-bg);
2224
- opacity: 0;
2225
- pointer-events: none;
2226
- transition: opacity 0.25s ease;
2227
- will-change: opacity;
1354
+ .input-field:not([data-priority=secondary])[data-state=active], .input-field:not([data-priority=secondary])[data-state=focused] {
1355
+ border-color: var(--theme-input-border-active);
1356
+ border-width: var(--theme-input-border-width-emphasis);
2228
1357
  }
2229
- .drawer-overlay[data-phase=entering], .drawer-overlay[data-phase=entered] {
2230
- opacity: 1;
2231
- pointer-events: auto;
1358
+ .input-field:not([data-priority=secondary])[data-state=success] {
1359
+ border-color: var(--theme-input-border-success);
1360
+ border-width: var(--theme-input-border-width-emphasis);
2232
1361
  }
2233
- .drawer-overlay[data-phase=exiting] {
2234
- opacity: 0;
2235
- pointer-events: auto;
1362
+ .input-field:not([data-priority=secondary])[data-state=error] {
1363
+ border-color: var(--theme-input-border-error);
1364
+ border-width: var(--theme-input-border-width-emphasis);
2236
1365
  }
2237
-
2238
- @media (prefers-reduced-motion: reduce) {
2239
- .drawer-overlay {
2240
- transition: none;
2241
- }
1366
+ .input-field:not([data-priority=secondary])[data-state=disabled] {
1367
+ border-color: var(--theme-input-border-disabled);
1368
+ border-width: var(--theme-input-border-width-default);
1369
+ background-color: var(--theme-input-surface-disabled);
2242
1370
  }
2243
- .drawer-content {
2244
- position: fixed;
2245
- display: flex;
2246
- flex-direction: column;
2247
- background-color: var(--drawer-surface-bg);
2248
- outline: none;
1371
+ .input-field .input-element {
1372
+ flex: 1 1 auto;
1373
+ width: 100%;
2249
1374
  border: none;
1375
+ background: transparent;
1376
+ color: var(--theme-input-text-color);
1377
+ caret-color: var(--theme-input-text-color);
1378
+ font-size: var(--font-body-medium-size);
1379
+ line-height: var(--font-body-medium-line-height);
1380
+ font-weight: var(--font-body-medium-weight);
1381
+ outline: none;
2250
1382
  box-shadow: none;
2251
- color: var(--drawer-body-color);
2252
- overscroll-behavior: contain;
2253
- left: 50%;
2254
- bottom: 0;
2255
- transform: translate3d(-50%, 100%, 0);
2256
- border-top-left-radius: var(--drawer-radius-large);
2257
- border-top-right-radius: var(--drawer-radius-large);
2258
- max-width: 640px;
2259
- padding-bottom: env(safe-area-inset-bottom);
2260
- max-width: min(640px, 100%);
2261
- width: 100%;
2262
- max-height: calc(100vh - var(--spacing-padding-8));
2263
- transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s ease;
2264
- opacity: 0;
2265
- pointer-events: none;
2266
- will-change: transform;
1383
+ min-width: 0;
1384
+ }
1385
+ .input-field .input-element::placeholder {
1386
+ color: var(--theme-input-placeholder-color);
2267
1387
  }
2268
-
2269
- .drawer-content[data-phase=entering],
2270
- .drawer-content[data-phase=entered] {
2271
- transform: translate3d(-50%, var(--drawer-drag-offset, 0px), 0);
2272
- opacity: 1;
2273
- pointer-events: auto;
1388
+ .input-field .input-element:disabled {
1389
+ color: var(--color-label-disabled);
2274
1390
  }
2275
-
2276
- .drawer-content[data-phase=exiting] {
2277
- transform: translate3d(-50%, calc(100% + var(--drawer-drag-offset, 0px)), 0);
2278
- opacity: 1;
2279
- pointer-events: none;
1391
+ .input-field .input-element:disabled::placeholder {
1392
+ color: var(--color-label-disabled);
2280
1393
  }
2281
-
2282
- .drawer-content[data-phase=exited] {
2283
- transform: translate3d(-50%, 100%, 0);
2284
- opacity: 0;
2285
- pointer-events: none;
1394
+ .input-field .input-element:focus, .input-field .input-element:focus-visible, .input-field .input-element:focus-within {
1395
+ outline: none;
1396
+ box-shadow: none;
2286
1397
  }
2287
1398
 
2288
- .drawer-content[data-dragging=true] {
2289
- transition: none;
1399
+ .input-field__control {
1400
+ display: flex;
1401
+ align-items: center;
1402
+ gap: var(--theme-input-gap);
1403
+ flex: 1 1 auto;
1404
+ min-width: 0;
2290
1405
  }
2291
1406
 
2292
- @media (prefers-reduced-motion: reduce) {
2293
- .drawer-content {
2294
- transition: none;
2295
- }
2296
- }
2297
- .drawer-handle {
1407
+ .input-field__utilities {
2298
1408
  display: flex;
2299
1409
  align-items: center;
2300
- justify-content: center;
2301
- border: none;
2302
- background: transparent;
2303
- padding: var(--drawer-padding-top) 0 var(--spacing-padding-6);
2304
- cursor: grab;
1410
+ gap: var(--spacing-gap-2, 8px);
1411
+ flex-shrink: 0;
1412
+ margin-left: var(--spacing-gap-3, 12px);
2305
1413
  }
2306
-
2307
- .drawer-handle:active {
2308
- cursor: grabbing;
1414
+ .input-field__utilities .input-affix {
1415
+ margin-left: 0;
2309
1416
  }
2310
1417
 
2311
- .drawer-handle-bar {
2312
- width: var(--drawer-handle-width);
2313
- height: var(--drawer-handle-height);
2314
- border-radius: var(--drawer-handle-height);
2315
- background-color: var(--drawer-handle-bg);
2316
- display: block;
1418
+ .input-inline-label {
1419
+ order: -2;
1420
+ flex-basis: 100%;
1421
+ font-size: var(--font-label-small-size);
1422
+ line-height: var(--font-label-small-line-height);
1423
+ color: var(--theme-input-label-color);
2317
1424
  }
2318
1425
 
2319
- .drawer-close-button {
2320
- position: absolute;
2321
- top: var(--drawer-padding-top);
2322
- right: var(--drawer-padding-x);
2323
- width: 24px;
2324
- height: 24px;
2325
- border-radius: 0;
2326
- border: none;
2327
- background: transparent;
2328
- display: flex;
2329
- align-items: center;
2330
- justify-content: center;
2331
- cursor: pointer;
2332
- padding: 0;
2333
- color: var(--color-label-neutral, #7f8a94);
1426
+ .input-field[data-priority=secondary] .input-element {
1427
+ padding-inline: 0;
2334
1428
  }
2335
1429
 
2336
- .drawer-close-button svg {
2337
- width: 24px;
2338
- height: 24px;
1430
+ .input-field[data-priority=tertiary] .input-element {
1431
+ min-height: var(--theme-size-medium-2);
2339
1432
  }
2340
1433
 
2341
- .drawer-inner {
2342
- display: flex;
2343
- flex-direction: column;
2344
- gap: var(--drawer-gap);
2345
- padding-inline: var(--drawer-padding-x);
2346
- padding-bottom: var(--drawer-padding-bottom);
2347
- padding-top: var(--drawer-padding-top);
2348
- flex: 1 1 auto;
2349
- min-height: 0;
1434
+ .input-helper-text {
1435
+ color: var(--theme-input-helper-color);
1436
+ font-size: var(--font-label-small-size);
1437
+ line-height: var(--font-label-small-line-height);
1438
+ }
1439
+ [data-state=error] .input-helper-text {
1440
+ color: var(--theme-input-border-error);
1441
+ }
1442
+ [data-state=disabled] .input-helper-text {
1443
+ color: var(--theme-input-helper-disabled-color);
2350
1444
  }
2351
1445
 
2352
- .drawer-section {
1446
+ .input-affix {
2353
1447
  display: flex;
2354
- flex-direction: column;
2355
- gap: var(--drawer-section-gap);
2356
- color: var(--drawer-body-color);
2357
- width: 100%;
1448
+ align-items: center;
1449
+ justify-content: center;
1450
+ min-width: 20px;
1451
+ color: var(--theme-input-helper-color);
2358
1452
  }
2359
-
2360
- .drawer-header {
2361
- text-align: left;
2362
- padding-top: 0;
1453
+ .input-affix--left {
1454
+ order: -1;
1455
+ margin-right: var(--spacing-gap-3);
2363
1456
  }
2364
-
2365
- .drawer-body {
2366
- flex: 1 1 auto;
2367
- overflow-y: auto;
2368
- gap: var(--spacing-gap-5);
2369
- font-size: var(--font-body-small-size);
2370
- line-height: var(--font-body-small-line-height);
2371
- color: var(--drawer-body-color);
2372
- width: 100%;
2373
- word-break: keep-all;
1457
+ .input-affix--right, .input-affix--clear, .input-affix--status {
1458
+ margin-left: var(--spacing-gap-3);
1459
+ }
1460
+ .input-affix--clear, .input-affix--status {
1461
+ color: var(--theme-input-text-color);
1462
+ }
1463
+ .input-affix--status[data-state=error] {
1464
+ color: var(--color-error);
1465
+ }
1466
+ .input-affix--status[data-state=success] {
1467
+ color: var(--color-primary-default);
2374
1468
  }
2375
1469
 
2376
- .drawer-body > * {
2377
- width: 100%;
1470
+ .input-field[data-priority=secondary] {
1471
+ border-bottom-width: var(--theme-input-border-width-default);
1472
+ }
1473
+ .input-field[data-priority=secondary][data-state=active], .input-field[data-priority=secondary][data-state=focused] {
1474
+ border-bottom-color: var(--theme-input-border-active);
1475
+ border-bottom-width: var(--theme-input-border-width-emphasis);
1476
+ }
1477
+ .input-field[data-priority=secondary][data-state=success] {
1478
+ border-bottom-color: var(--theme-input-border-success);
1479
+ border-bottom-width: var(--theme-input-border-width-emphasis);
1480
+ }
1481
+ .input-field[data-priority=secondary][data-state=error] {
1482
+ border-bottom-color: var(--theme-input-border-error);
1483
+ border-bottom-width: var(--theme-input-border-width-emphasis);
1484
+ }
1485
+ .input-field[data-priority=secondary][data-state=disabled] {
1486
+ border-bottom-color: var(--theme-input-border-underline-disabled);
1487
+ border-bottom-width: var(--theme-input-border-width-default);
2378
1488
  }
2379
1489
 
2380
- .drawer-body p {
2381
- margin: 0;
2382
- word-break: inherit;
1490
+ .input[data-state=active] .input-label,
1491
+ .input[data-state=active] .input-inline-label,
1492
+ .input[data-state=focused] .input-label,
1493
+ .input[data-state=focused] .input-inline-label,
1494
+ .input[data-state=success] .input-label,
1495
+ .input[data-state=success] .input-inline-label {
1496
+ color: var(--theme-input-label-accent-color);
2383
1497
  }
2384
1498
 
2385
- .drawer-footer {
2386
- padding: var(--spacing-padding-8) 0 0;
2387
- border-top: none;
2388
- flex-shrink: 0;
2389
- display: flex;
2390
- flex-direction: column;
2391
- gap: var(--drawer-footer-gap);
2392
- width: 100%;
1499
+ .input[data-state=error] .input-label,
1500
+ .input[data-state=error] .input-inline-label {
1501
+ color: var(--theme-input-label-error-color);
1502
+ }
1503
+ .input[data-state=error] .input-helper-text {
1504
+ color: var(--theme-input-label-error-color);
2393
1505
  }
2394
1506
 
2395
- .drawer-title {
2396
- margin: 0;
2397
- font-size: var(--font-heading-medium-size);
2398
- line-height: var(--font-heading-medium-line-height);
2399
- font-weight: var(--font-heading-medium-weight);
2400
- color: var(--drawer-title-color);
2401
- letter-spacing: var(--font-heading-medium-letter-spacing, normal);
1507
+ .input[data-state=disabled] .input-label,
1508
+ .input[data-state=disabled] .input-inline-label,
1509
+ .input[data-state=disabled] .input-helper-text,
1510
+ .input[data-state=disabled] .input-affix {
1511
+ color: var(--theme-input-helper-disabled-color);
1512
+ }
1513
+ .input[data-state=disabled] .input-field {
1514
+ border-color: var(--theme-input-border-color);
1515
+ background-color: var(--theme-input-surface-disabled);
1516
+ }
1517
+ .input[data-state=disabled] .input-field[data-priority=secondary] {
1518
+ background-color: transparent;
2402
1519
  }
2403
1520
 
2404
- .drawer-description {
2405
- margin: 0;
2406
- color: var(--drawer-body-color);
2407
- font-size: var(--font-body-xsmall-size);
2408
- line-height: var(--font-body-xsmall-line-height);
2409
- letter-spacing: var(--font-body-xsmall-letter-spacing, normal);
1521
+ .input-password-toggle {
1522
+ border: none;
1523
+ background: transparent;
1524
+ color: var(--theme-input-label-accent-color);
1525
+ font-size: var(--font-label-small-size);
1526
+ line-height: var(--font-label-small-line-height);
1527
+ font-weight: var(--font-label-small-weight);
1528
+ padding: 0;
1529
+ cursor: pointer;
1530
+ }
1531
+ .input-password-toggle:disabled {
1532
+ color: var(--theme-input-helper-disabled-color);
1533
+ cursor: not-allowed;
2410
1534
  }
2411
1535
 
2412
- .drawer-dismiss {
2413
- display: none;
1536
+ .input-search-icon {
1537
+ font-size: var(--font-label-large-size);
1538
+ line-height: 1;
2414
1539
  }
2415
1540
 
2416
- /* TODO(dropdown): 스타일을 SOT 토큰 값으로 정의한다. */
2417
- :where(.radix-themes, .theme-root, :root) {
2418
- --theme-input-height-small: var(--theme-size-medium-1);
2419
- --theme-input-height-medium: var(--theme-size-medium-2);
2420
- --theme-input-height-large: var(--theme-size-medium-3);
2421
- --theme-input-height-tertiary: calc(var(--theme-size-medium-2) + 24px);
2422
- --theme-input-padding-x: var(--spacing-padding-6);
2423
- --theme-input-padding-y: var(--spacing-padding-4);
2424
- --theme-input-gap: var(--spacing-gap-4);
2425
- --theme-input-radius-default: var(--theme-radius-large-1);
2426
- --theme-input-radius-tertiary: var(--theme-radius-large-2);
2427
- --theme-input-label-color: var(--color-label-standard);
2428
- --theme-input-helper-color: var(--color-label-neutral);
2429
- --theme-input-helper-disabled-color: var(--color-label-disabled);
2430
- --theme-input-label-accent-color: var(--color-primary-default);
2431
- --theme-input-label-error-color: var(--color-error);
2432
- --theme-input-placeholder-color: var(--color-label-alternative);
2433
- --theme-input-text-color: var(--color-label-strong);
2434
- --theme-input-border-color: var(--color-border-standard-cool-gray);
2435
- --theme-input-border-width-default: 1px;
2436
- --theme-input-border-width-emphasis: 1.4px;
2437
- --theme-input-border-active: #99bdff;
2438
- --theme-input-border-success: #99bdff;
2439
- --theme-input-border-error: rgba(218, 29, 11, 0.44);
2440
- --theme-input-border-disabled: var(--color-border-standard-cool-gray);
2441
- --theme-input-border-underline-disabled: var(
2442
- --color-border-standard-assistive
2443
- );
2444
- --theme-input-surface: var(--color-common-100);
2445
- --theme-input-surface-muted: var(--color-neutral-99);
2446
- --theme-input-surface-disabled: var(--color-neutral-95);
1541
+ .one-time-code {
1542
+ display: flex;
1543
+ flex-direction: column;
1544
+ gap: var(--spacing-gap-2);
2447
1545
  }
2448
1546
 
2449
- .input {
1547
+ .one-time-code__label {
1548
+ font-size: var(--font-label-small-size);
1549
+ color: var(--theme-input-label-color);
1550
+ }
1551
+
1552
+ .one-time-code__fields {
2450
1553
  display: flex;
2451
- flex-direction: column;
2452
1554
  gap: var(--spacing-gap-3);
2453
- width: 100%;
2454
1555
  }
2455
- .input[data-block=true], .input--block {
2456
- width: 100%;
1556
+
1557
+ .one-time-code__input {
1558
+ width: 44px;
1559
+ height: 56px;
1560
+ border-radius: var(--theme-input-radius-default);
1561
+ border: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
1562
+ text-align: center;
1563
+ font-size: var(--font-heading-medium-size);
1564
+ font-weight: var(--font-heading-medium-weight);
1565
+ color: var(--theme-input-text-color);
1566
+ }
1567
+ .one-time-code__input:focus {
1568
+ outline: none;
1569
+ border-color: var(--theme-input-border-active);
1570
+ border-width: var(--theme-input-border-width-emphasis);
2457
1571
  }
2458
1572
 
2459
- .input-label {
2460
- color: var(--theme-input-label-color);
1573
+ .one-time-code__helper {
2461
1574
  font-size: var(--font-label-small-size);
2462
- line-height: var(--font-label-small-line-height);
2463
- font-weight: var(--font-label-small-weight);
1575
+ color: var(--theme-input-helper-color);
2464
1576
  }
2465
1577
 
2466
- .input-label--visually-hidden {
2467
- position: absolute;
2468
- width: 1px;
2469
- height: 1px;
2470
- padding: 0;
2471
- margin: -1px;
2472
- overflow: hidden;
2473
- clip: rect(0 0 0 0);
2474
- clip-path: inset(50%);
2475
- white-space: nowrap;
2476
- border: 0;
1578
+ .email-verification,
1579
+ .phone-verification {
1580
+ display: flex;
1581
+ flex-direction: column;
1582
+ gap: var(--spacing-gap-4);
2477
1583
  }
2478
1584
 
2479
- .input-box {
2480
- width: 100%;
1585
+ .auth-code-input__actions,
1586
+ .email-verification__code-actions,
1587
+ .phone-verification__code-actions {
1588
+ display: flex;
1589
+ align-items: center;
1590
+ justify-content: flex-end;
1591
+ gap: var(--spacing-gap-3);
1592
+ min-width: 0;
2481
1593
  }
2482
1594
 
2483
- .input-field {
1595
+ .auth-code-input__countdown,
1596
+ .email-verification__countdown,
1597
+ .phone-verification__countdown {
2484
1598
  display: flex;
2485
1599
  align-items: center;
2486
- width: 100%;
2487
- gap: var(--theme-input-gap);
2488
- border-radius: var(--theme-input-radius-default);
2489
- border: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
2490
- background-color: var(--theme-input-surface);
2491
- padding: var(--theme-input-padding-y) var(--theme-input-padding-x);
2492
- min-height: var(--theme-input-height-medium);
2493
- transition: border-color 0.15s ease, background-color 0.15s ease;
2494
- box-sizing: border-box;
2495
- outline: none;
2496
- box-shadow: none;
1600
+ font-weight: 500;
1601
+ font-style: normal;
1602
+ font-size: 13px;
1603
+ line-height: 1em;
1604
+ letter-spacing: -0.0025em;
1605
+ color: var(--color-primary-default);
1606
+ flex-shrink: 0;
2497
1607
  }
2498
- .input-field[data-size=small] {
2499
- min-height: var(--theme-input-height-small);
1608
+
1609
+ .button.input-utility-button {
1610
+ min-height: 32px;
1611
+ padding: var(--spacing-padding-2, 4px) var(--spacing-padding-6, 24px);
1612
+ border-radius: var(--shape-rounded-1, 8px);
2500
1613
  }
2501
- .input-field[data-size=large] {
2502
- min-height: var(--theme-input-height-large);
1614
+ .button.input-utility-button .button-label {
1615
+ font-size: var(--font-body-xxsmall-size);
1616
+ line-height: var(--font-body-xxsmall-line-height);
1617
+ letter-spacing: var(--font-body-xxsmall-letter-spacing);
1618
+ font-weight: var(--font-body-xxsmall-weight);
2503
1619
  }
2504
- .input-field[data-priority=secondary] {
2505
- border: none;
2506
- border-bottom: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
2507
- border-radius: 0;
2508
- padding-inline: 0;
2509
- padding-block: var(--spacing-padding-4);
2510
- background-color: transparent;
1620
+
1621
+ /* TODO(label): 스타일을 SOT 토큰 값으로 정의한다. */
1622
+ .uds-theme-root {
1623
+ --theme-navigation-height: 86px;
1624
+ --theme-navigation-padding-inline: 32px;
1625
+ --theme-navigation-padding-block-start: 8px;
1626
+ --theme-navigation-padding-block-end: 20px;
1627
+ --theme-navigation-item-gap: 2px;
1628
+ --theme-navigation-icon-size: 24px;
1629
+ --theme-navigation-label-font-size: 12px;
1630
+ --theme-navigation-label-line-height: 1.4;
1631
+ --theme-navigation-label-font-weight: 500;
1632
+ --theme-navigation-label-letter-spacing: -0.12px;
1633
+ --theme-navigation-bg: var(--color-common-100, #ffffff);
1634
+ --theme-navigation-border: var(--color-border-standard-assistive, #e4e5e7);
1635
+ --theme-navigation-shadow: 0 -4px 16px rgba(0, 0, 0, 0.04);
1636
+ --theme-navigation-color: var(--color-label-strong, #3d3f43);
1637
+ --theme-navigation-color-active: var(--color-primary-default, #0061ff);
1638
+ --theme-navigation-color-disabled: var(--color-label-disabled, #c5c6cc);
2511
1639
  }
2512
- .input-field[data-priority=tertiary] {
2513
- border-radius: var(--theme-input-radius-tertiary);
2514
- background-color: var(--theme-input-surface);
2515
- min-height: var(--theme-input-height-tertiary);
2516
- flex-wrap: wrap;
2517
- row-gap: var(--spacing-gap-1);
2518
- column-gap: var(--theme-input-gap);
1640
+
1641
+ .bottom-navigation {
1642
+ width: 100%;
1643
+ position: relative;
1644
+ z-index: 10;
1645
+ background-color: var(--theme-navigation-bg);
1646
+ border-top: 1px solid var(--theme-navigation-border);
1647
+ box-shadow: var(--theme-navigation-shadow, 0 -4px 16px rgba(0, 0, 0, 0.04));
1648
+ padding-inline: var(--theme-navigation-padding-inline);
1649
+ padding-block-start: var(--theme-navigation-padding-block-start);
1650
+ padding-block-end: max(var(--theme-navigation-padding-block-end), env(safe-area-inset-bottom, 0px));
1651
+ min-height: var(--theme-navigation-height);
2519
1652
  }
2520
- .input-field[data-priority=tertiary] .input-inline-label {
2521
- flex-basis: 100%;
1653
+
1654
+ .bottom-navigation[data-fixed=true] {
1655
+ position: fixed;
1656
+ inset-inline: 0;
1657
+ bottom: 0;
1658
+ z-index: 20;
2522
1659
  }
2523
- .input-field[data-priority=tertiary] .input-element {
2524
- min-height: var(--theme-size-medium-2);
2525
- width: auto;
2526
- flex: 1 1 auto;
1660
+
1661
+ .bottom-navigation-list {
1662
+ display: flex;
1663
+ align-items: flex-start;
1664
+ justify-content: space-between;
1665
+ gap: 0;
1666
+ padding: 0;
1667
+ margin: 0;
1668
+ list-style: none;
2527
1669
  }
2528
- .input-field[data-priority=tertiary] .input-element + .input-affix {
2529
- margin-left: auto;
1670
+
1671
+ .bottom-navigation-item {
1672
+ flex: 1;
1673
+ min-width: 0;
1674
+ display: flex;
1675
+ justify-content: center;
2530
1676
  }
2531
- .input-field:not([data-priority=secondary])[data-state=active], .input-field:not([data-priority=secondary])[data-state=focused] {
2532
- border-color: var(--theme-input-border-active);
2533
- border-width: var(--theme-input-border-width-emphasis);
1677
+
1678
+ .bottom-navigation-trigger {
1679
+ display: inline-flex;
1680
+ flex-direction: column;
1681
+ align-items: center;
1682
+ gap: var(--theme-navigation-item-gap);
1683
+ min-width: 0;
1684
+ padding: 0;
1685
+ border: none;
1686
+ background: none;
1687
+ appearance: none;
1688
+ text-decoration: none;
1689
+ color: var(--theme-navigation-color);
1690
+ font: inherit;
1691
+ cursor: pointer;
1692
+ -webkit-tap-highlight-color: transparent;
1693
+ transition: color 0.16s ease;
2534
1694
  }
2535
- .input-field:not([data-priority=secondary])[data-state=success] {
2536
- border-color: var(--theme-input-border-success);
2537
- border-width: var(--theme-input-border-width-emphasis);
1695
+
1696
+ .bottom-navigation-trigger[data-active=true] {
1697
+ color: var(--theme-navigation-color-active);
2538
1698
  }
2539
- .input-field:not([data-priority=secondary])[data-state=error] {
2540
- border-color: var(--theme-input-border-error);
2541
- border-width: var(--theme-input-border-width-emphasis);
1699
+
1700
+ .bottom-navigation-trigger[data-disabled=true],
1701
+ .bottom-navigation-trigger:disabled {
1702
+ color: var(--theme-navigation-color-disabled);
1703
+ cursor: default;
1704
+ pointer-events: none;
2542
1705
  }
2543
- .input-field:not([data-priority=secondary])[data-state=disabled] {
2544
- border-color: var(--theme-input-border-disabled);
2545
- border-width: var(--theme-input-border-width-default);
2546
- background-color: var(--theme-input-surface-disabled);
1706
+
1707
+ .bottom-navigation-trigger:focus-visible {
1708
+ outline: none;
1709
+ border-radius: var(--theme-radius-large-1, 12px);
1710
+ box-shadow: 0 0 0 2px var(--color-primary-focus, rgba(0, 97, 255, 0.2));
2547
1711
  }
2548
- .input-field .input-element {
2549
- flex: 1 1 auto;
1712
+
1713
+ .navigation-item-icon {
1714
+ display: inline-flex;
1715
+ align-items: center;
1716
+ justify-content: center;
1717
+ width: var(--theme-navigation-icon-size);
1718
+ height: var(--theme-navigation-icon-size);
1719
+ color: currentColor;
1720
+ }
1721
+ .navigation-item-icon svg {
1722
+ display: block;
2550
1723
  width: 100%;
2551
- border: none;
2552
- background: transparent;
2553
- color: var(--theme-input-text-color);
2554
- font-size: var(--font-body-medium-size);
2555
- line-height: var(--font-body-medium-line-height);
2556
- font-weight: var(--font-body-medium-weight);
2557
- outline: none;
2558
- box-shadow: none;
2559
- min-width: 0;
1724
+ height: 100%;
2560
1725
  }
2561
- .input-field .input-element::placeholder {
2562
- color: var(--theme-input-placeholder-color);
1726
+ .navigation-item-icon {
1727
+ /* SVG fill/stroke를 currentColor로 맞춰 selected 컬러만 제어한다. */
2563
1728
  }
2564
- .input-field .input-element:disabled {
2565
- color: var(--color-label-disabled);
1729
+ .navigation-item-icon svg [fill]:not([fill=none]) {
1730
+ fill: currentColor;
1731
+ }
1732
+ .navigation-item-icon svg [stroke]:not([stroke=none]) {
1733
+ stroke: currentColor;
1734
+ }
1735
+
1736
+ .navigation-item-label {
1737
+ display: block;
1738
+ font-size: var(--theme-navigation-label-font-size);
1739
+ font-weight: var(--theme-navigation-label-font-weight);
1740
+ line-height: var(--theme-navigation-label-line-height);
1741
+ letter-spacing: var(--theme-navigation-label-letter-spacing);
1742
+ color: currentColor;
1743
+ text-align: center;
1744
+ white-space: nowrap;
1745
+ overflow: hidden;
1746
+ text-overflow: ellipsis;
1747
+ max-width: 100%;
1748
+ }
1749
+
1750
+ /* Pagination native 구현 스타일 */
1751
+ .pagination {
1752
+ --pagination-gap: var(--spacing-gap-2, 8px);
1753
+ --pagination-number-height: var(--theme-size-small-2, 24px);
1754
+ --pagination-number-min-width: var(--theme-size-small-2, 24px);
1755
+ --pagination-number-radius: var(--theme-radius-medium-1, 6px);
1756
+ --pagination-color-active-bg: var(--color-cool-gray-10, #18191b);
1757
+ --pagination-color-active-label: var(--color-common-100, #ffffff);
1758
+ --pagination-color-inactive-label: var(--color-label-alternative, #afb1b6);
1759
+ --pagination-dot-size: 8px;
1760
+ --pagination-dot-bg: var(--color-cool-gray-85, #d2d3d7);
1761
+ --pagination-dot-active-bg: var(--color-primary-default, #0061ff);
1762
+ --pagination-dot-active-bg-secondary: var(
1763
+ --color-bg-surface-heavy,
1764
+ #313235
1765
+ );
1766
+ --pagination-carousel-height: 8px;
1767
+ --pagination-carousel-dot-width: 8px;
1768
+ --pagination-carousel-active-width: 20px;
1769
+ --pagination-count-bg: var(--color-cool-gray-10, #18191b);
1770
+ --pagination-count-divider: var(--color-common-100, #ffffff);
1771
+ --pagination-count-total: var(--color-label-alternative, #afb1b6);
1772
+ display: inline-flex;
1773
+ gap: var(--pagination-gap);
1774
+ align-items: center;
1775
+ padding: 0;
1776
+ margin: 0;
1777
+ list-style: none;
2566
1778
  }
2567
- .input-field .input-element:disabled::placeholder {
2568
- color: var(--color-label-disabled);
1779
+
1780
+ .pagination[data-interactive=false] .pagination-button,
1781
+ .pagination-button:disabled {
1782
+ cursor: default;
2569
1783
  }
2570
- .input-field .input-element:focus, .input-field .input-element:focus-visible, .input-field .input-element:focus-within {
2571
- outline: none;
2572
- box-shadow: none;
1784
+
1785
+ .pagination-item {
1786
+ list-style: none;
2573
1787
  }
2574
1788
 
2575
- .input-inline-label {
2576
- order: -2;
2577
- flex-basis: 100%;
2578
- font-size: var(--font-label-small-size);
2579
- line-height: var(--font-label-small-line-height);
2580
- color: var(--theme-input-label-color);
1789
+ .pagination-button {
1790
+ appearance: none;
1791
+ border: none;
1792
+ background: transparent;
1793
+ padding: 0;
1794
+ margin: 0;
1795
+ display: inline-flex;
1796
+ align-items: center;
1797
+ justify-content: center;
1798
+ cursor: pointer;
1799
+ color: inherit;
1800
+ font: inherit;
1801
+ transition: background-color 0.16s ease, color 0.16s ease, opacity 0.16s ease;
2581
1802
  }
2582
1803
 
2583
- .input-field[data-priority=secondary] .input-element {
2584
- padding-inline: 0;
1804
+ .pagination--variant-list {
1805
+ gap: var(--spacing-gap-1, 4px);
2585
1806
  }
2586
1807
 
2587
- .input-field[data-priority=tertiary] .input-element {
2588
- min-height: var(--theme-size-medium-2);
1808
+ .pagination--variant-list .pagination-button {
1809
+ min-width: var(--pagination-number-min-width);
1810
+ height: var(--pagination-number-height);
1811
+ padding-inline: var(--spacing-padding-2, 8px);
1812
+ border-radius: var(--pagination-number-radius);
1813
+ background-color: transparent;
1814
+ color: var(--pagination-color-inactive-label);
1815
+ font-size: var(--font-label-medium-size, 12px);
1816
+ font-weight: var(--font-label-medium-weight, 400);
1817
+ line-height: var(--font-label-medium-line-height, 1.5);
2589
1818
  }
2590
1819
 
2591
- .input-helper-text {
2592
- color: var(--theme-input-helper-color);
2593
- font-size: var(--font-label-small-size);
2594
- line-height: var(--font-label-small-line-height);
1820
+ .pagination[data-interactive=true] .pagination--variant-list .pagination-button:not([data-active=true]):hover {
1821
+ background-color: var(--color-bg-alternative-cool-gray, #f0f1f5);
1822
+ color: var(--color-label-strong, #5b5c60);
2595
1823
  }
2596
- [data-state=error] .input-helper-text {
2597
- color: var(--theme-input-border-error);
1824
+
1825
+ .pagination--variant-list .pagination-button[data-active=true] {
1826
+ background-color: var(--pagination-color-active-bg);
1827
+ color: var(--pagination-color-active-label);
2598
1828
  }
2599
- [data-state=disabled] .input-helper-text {
2600
- color: var(--theme-input-helper-disabled-color);
1829
+
1830
+ .pagination-number {
1831
+ min-width: 1ch;
1832
+ text-align: center;
2601
1833
  }
2602
1834
 
2603
- .input-affix {
2604
- display: inline-flex;
1835
+ .pagination--variant-carousel {
1836
+ gap: 5px;
1837
+ min-height: var(--pagination-carousel-height);
2605
1838
  align-items: center;
2606
- justify-content: center;
2607
- min-width: 20px;
2608
- color: var(--theme-input-helper-color);
2609
- }
2610
- .input-affix--left {
2611
- order: -1;
2612
- margin-right: var(--spacing-gap-3);
2613
- }
2614
- .input-affix--right, .input-affix--clear, .input-affix--status {
2615
- margin-left: var(--spacing-gap-3);
2616
1839
  }
2617
- .input-affix--clear, .input-affix--status {
2618
- color: var(--theme-input-text-color);
2619
- }
2620
- .input-affix--status[data-state=error] {
2621
- color: var(--color-error);
2622
- }
2623
- .input-affix--status[data-state=success] {
2624
- color: var(--color-primary-default);
1840
+
1841
+ .pagination--variant-carousel[data-priority=secondary] {
1842
+ --pagination-dot-active-bg: var(
1843
+ --pagination-dot-active-bg-secondary,
1844
+ var(--color-secondary-strong, #ccdeff)
1845
+ );
2625
1846
  }
2626
1847
 
2627
- .input-field[data-priority=secondary] {
2628
- border-bottom-width: var(--theme-input-border-width-default);
1848
+ .pagination--variant-carousel .pagination-button {
1849
+ width: auto;
1850
+ height: var(--pagination-carousel-height);
1851
+ padding: 0;
2629
1852
  }
2630
- .input-field[data-priority=secondary][data-state=active], .input-field[data-priority=secondary][data-state=focused] {
2631
- border-bottom-color: var(--theme-input-border-active);
2632
- border-bottom-width: var(--theme-input-border-width-emphasis);
1853
+
1854
+ .pagination--variant-carousel .pagination-dot {
1855
+ display: inline-flex;
1856
+ width: var(--pagination-carousel-dot-width);
1857
+ height: var(--pagination-carousel-height);
1858
+ border-radius: calc(var(--pagination-carousel-height) / 2);
1859
+ background-color: var(--pagination-dot-bg);
1860
+ transition: width 0.16s ease, background-color 0.16s ease;
2633
1861
  }
2634
- .input-field[data-priority=secondary][data-state=success] {
2635
- border-bottom-color: var(--theme-input-border-success);
2636
- border-bottom-width: var(--theme-input-border-width-emphasis);
1862
+
1863
+ .pagination--variant-carousel .pagination-button[data-active=true] .pagination-dot {
1864
+ width: var(--pagination-carousel-active-width);
1865
+ background-color: var(--pagination-dot-active-bg);
2637
1866
  }
2638
- .input-field[data-priority=secondary][data-state=error] {
2639
- border-bottom-color: var(--theme-input-border-error);
2640
- border-bottom-width: var(--theme-input-border-width-emphasis);
1867
+
1868
+ .pagination--variant-count {
1869
+ gap: 0;
2641
1870
  }
2642
- .input-field[data-priority=secondary][data-state=disabled] {
2643
- border-bottom-color: var(--theme-input-border-underline-disabled);
2644
- border-bottom-width: var(--theme-input-border-width-default);
1871
+
1872
+ .pagination--variant-count .pagination-button {
1873
+ border-radius: var(--theme-radius-large-2, 16px);
1874
+ padding-inline: var(--spacing-padding-4, 16px);
1875
+ background-color: var(--pagination-count-bg);
1876
+ color: var(--pagination-color-active-label);
1877
+ font-weight: var(--font-label-medium-weight, 400);
1878
+ line-height: 1.5;
2645
1879
  }
2646
1880
 
2647
- .input[data-state=active] .input-label,
2648
- .input[data-state=active] .input-inline-label,
2649
- .input[data-state=focused] .input-label,
2650
- .input[data-state=focused] .input-inline-label,
2651
- .input[data-state=success] .input-label,
2652
- .input[data-state=success] .input-inline-label {
2653
- color: var(--theme-input-label-accent-color);
1881
+ .pagination--variant-count.pagination--count-size-small .pagination-button {
1882
+ height: var(--theme-size-small-2, 24px);
1883
+ font-size: var(--font-label-medium-size, 12px);
2654
1884
  }
2655
1885
 
2656
- .input[data-state=error] .input-label,
2657
- .input[data-state=error] .input-inline-label {
2658
- color: var(--theme-input-label-error-color);
1886
+ .pagination--variant-count.pagination--count-size-xsmall .pagination-button {
1887
+ height: var(--theme-size-small-1, 20px);
1888
+ font-size: var(--font-label-small-size, 11px);
2659
1889
  }
2660
- .input[data-state=error] .input-helper-text {
2661
- color: var(--theme-input-label-error-color);
1890
+
1891
+ .pagination-count-current {
1892
+ color: var(--pagination-color-active-label);
2662
1893
  }
2663
1894
 
2664
- .input[data-state=disabled] .input-label,
2665
- .input[data-state=disabled] .input-inline-label,
2666
- .input[data-state=disabled] .input-helper-text,
2667
- .input[data-state=disabled] .input-affix {
2668
- color: var(--theme-input-helper-disabled-color);
1895
+ .pagination-count-divider {
1896
+ margin-inline: var(--spacing-gap-1, 4px);
1897
+ color: var(--pagination-count-divider);
2669
1898
  }
2670
- .input[data-state=disabled] .input-field {
2671
- border-color: var(--theme-input-border-color);
2672
- background-color: var(--theme-input-surface-disabled);
1899
+
1900
+ .pagination-count-total {
1901
+ color: var(--pagination-count-total);
2673
1902
  }
2674
- .input[data-state=disabled] .input-field[data-priority=secondary] {
2675
- background-color: transparent;
1903
+
1904
+ .uds-theme-root {
1905
+ --theme-radio-frame-size-medium: 20px;
1906
+ --theme-radio-frame-size-large: 24px;
1907
+ --theme-radio-indicator-size-medium: 16px;
1908
+ --theme-radio-indicator-size-large: 20px;
1909
+ --theme-radio-indicator-border-width: 1.4px;
1910
+ --theme-radio-indicator-border-width-selected-medium: 4px;
1911
+ --theme-radio-indicator-border-width-selected-large: 6px;
1912
+ --theme-radio-border-color: var(--color-border-standard-assistive);
1913
+ --theme-radio-border-selected: var(--color-primary-default);
1914
+ --theme-radio-surface-selected: var(--color-primary-default);
1915
+ --theme-radio-surface-disabled: var(--color-border-standard-assistive);
1916
+ --theme-radio-border-disabled: var(--color-border-standard-assistive);
1917
+ --theme-radio-disabled-selected-fill: var(--color-primary-default);
1918
+ --theme-radio-label-color: var(--color-label-strong);
1919
+ --theme-radio-label-disabled: var(--color-label-disabled);
1920
+ --theme-radio-helper-color: var(--color-label-neutral);
1921
+ --theme-radio-helper-disabled: var(--color-label-disabled);
1922
+ --theme-radio-card-background: var(--color-common-100);
1923
+ --theme-radio-card-title-color: var(--color-label-strong);
1924
+ --theme-radio-card-description-color: var(--color-label-neutral);
1925
+ --theme-radio-card-badge-background: var(--color-bg-surface-static-blue);
1926
+ --theme-radio-card-badge-color: var(--color-primary-default);
1927
+ --theme-radio-focus-ring: rgba(2, 84, 255, 0.32);
1928
+ --theme-radio-disabled-selected-opacity: 0.28;
2676
1929
  }
2677
1930
 
2678
- .input-password-toggle,
2679
- .input-action-button {
1931
+ .radio {
1932
+ display: inline-flex;
1933
+ align-items: center;
1934
+ justify-content: center;
1935
+ inline-size: var(--theme-radio-frame-size-medium);
1936
+ block-size: var(--theme-radio-frame-size-medium);
2680
1937
  border: none;
2681
- background: transparent;
2682
- color: var(--theme-input-label-accent-color);
2683
- font-size: var(--font-label-small-size);
2684
- line-height: var(--font-label-small-line-height);
2685
- font-weight: var(--font-label-small-weight);
1938
+ background-color: transparent;
1939
+ border-radius: 0;
2686
1940
  padding: 0;
2687
1941
  cursor: pointer;
1942
+ transition: box-shadow 0.15s ease, transform 0.15s ease;
2688
1943
  }
2689
- .input-password-toggle:disabled,
2690
- .input-action-button:disabled {
2691
- color: var(--theme-input-helper-disabled-color);
2692
- cursor: not-allowed;
2693
- }
2694
-
2695
- .input-search-icon {
2696
- font-size: var(--font-label-large-size);
2697
- line-height: 1;
2698
- }
2699
-
2700
- .one-time-code {
2701
- display: flex;
2702
- flex-direction: column;
2703
- gap: var(--spacing-gap-2);
1944
+ .radio[data-size=large] {
1945
+ inline-size: var(--theme-radio-frame-size-large);
1946
+ block-size: var(--theme-radio-frame-size-large);
2704
1947
  }
2705
-
2706
- .one-time-code__label {
2707
- font-size: var(--font-label-small-size);
2708
- color: var(--theme-input-label-color);
1948
+ .radio[data-disabled=true] {
1949
+ cursor: not-allowed;
1950
+ opacity: 0.6;
2709
1951
  }
2710
1952
 
2711
- .one-time-code__fields {
2712
- display: flex;
2713
- gap: var(--spacing-gap-3);
1953
+ .radio:focus-visible {
1954
+ box-shadow: 0 0 0 2px var(--theme-radio-focus-ring);
2714
1955
  }
2715
1956
 
2716
- .one-time-code__input {
2717
- width: 44px;
2718
- height: 56px;
2719
- border-radius: var(--theme-input-radius-default);
2720
- border: var(--theme-input-border-width-default) solid var(--theme-input-border-color);
2721
- text-align: center;
2722
- font-size: var(--font-heading-medium-size);
2723
- font-weight: var(--font-heading-medium-weight);
2724
- color: var(--theme-input-text-color);
1957
+ .radio-indicator {
1958
+ inline-size: var(--theme-radio-indicator-size-medium);
1959
+ block-size: var(--theme-radio-indicator-size-medium);
1960
+ border-radius: 9999px;
1961
+ border: var(--theme-radio-indicator-border-width) solid var(--theme-radio-border-color);
1962
+ transition: border-color 0.15s ease;
2725
1963
  }
2726
- .one-time-code__input:focus {
2727
- outline: none;
2728
- border-color: var(--theme-input-border-active);
2729
- border-width: var(--theme-input-border-width-emphasis);
1964
+
1965
+ .radio[data-state=checked] .radio-indicator,
1966
+ .radio[data-size=medium][data-state=checked] .radio-indicator {
1967
+ border-width: var(--theme-radio-indicator-border-width-selected-medium);
2730
1968
  }
2731
1969
 
2732
- .one-time-code__helper {
2733
- font-size: var(--font-label-small-size);
2734
- color: var(--theme-input-helper-color);
1970
+ .radio[data-size=large] .radio-indicator {
1971
+ inline-size: var(--theme-radio-indicator-size-large);
1972
+ block-size: var(--theme-radio-indicator-size-large);
1973
+ }
1974
+ .radio[data-size=large][data-state=checked] .radio-indicator {
1975
+ border-width: var(--theme-radio-indicator-border-width-selected-large);
2735
1976
  }
2736
1977
 
2737
- /* TODO(label): 스타일을 SOT 토큰 값으로 정의한다. */
2738
- :where(.radix-themes, .theme-root, :root) {
2739
- --theme-navigation-height: 86px;
2740
- --theme-navigation-padding-inline: 32px;
2741
- --theme-navigation-padding-block-start: 8px;
2742
- --theme-navigation-padding-block-end: 20px;
2743
- --theme-navigation-item-gap: 2px;
2744
- --theme-navigation-icon-size: 24px;
2745
- --theme-navigation-label-font-size: 12px;
2746
- --theme-navigation-label-line-height: 1.4;
2747
- --theme-navigation-label-font-weight: 500;
2748
- --theme-navigation-label-letter-spacing: -0.12px;
2749
- --theme-navigation-bg: var(--color-common-100, #ffffff);
2750
- --theme-navigation-border: var(--color-border-standard-assistive, #e4e5e7);
2751
- --theme-navigation-shadow: 0 -4px 16px rgba(0, 0, 0, 0.04);
2752
- --theme-navigation-color: var(--color-label-strong, #3d3f43);
2753
- --theme-navigation-color-active: var(--color-primary-default, #0061ff);
2754
- --theme-navigation-color-disabled: var(--color-label-disabled, #c5c6cc);
1978
+ .radio[data-state=checked] .radio-indicator {
1979
+ border-color: var(--theme-radio-border-selected);
2755
1980
  }
2756
1981
 
2757
- .bottom-navigation {
2758
- width: 100%;
2759
- position: relative;
2760
- z-index: 10;
2761
- background-color: var(--theme-navigation-bg);
2762
- border-top: 1px solid var(--theme-navigation-border);
2763
- box-shadow: var(--theme-navigation-shadow, 0 -4px 16px rgba(0, 0, 0, 0.04));
2764
- padding-inline: var(--theme-navigation-padding-inline);
2765
- padding-block-start: var(--theme-navigation-padding-block-start);
2766
- padding-block-end: max(var(--theme-navigation-padding-block-end), env(safe-area-inset-bottom, 0px));
2767
- min-height: var(--theme-navigation-height);
1982
+ .radio[data-disabled=true] .radio-indicator {
1983
+ border-color: var(--theme-radio-border-disabled);
1984
+ background-color: var(--theme-radio-surface-disabled);
1985
+ opacity: 1;
2768
1986
  }
2769
1987
 
2770
- .bottom-navigation[data-fixed=true] {
2771
- position: fixed;
2772
- inset-inline: 0;
2773
- bottom: 0;
2774
- z-index: 20;
1988
+ .radio[data-disabled=true][data-state=checked] .radio-indicator {
1989
+ border-color: var(--theme-radio-disabled-selected-fill);
1990
+ opacity: var(--theme-radio-disabled-selected-opacity);
2775
1991
  }
2776
1992
 
2777
- .bottom-navigation-list {
1993
+ .radio-field {
2778
1994
  display: flex;
2779
- align-items: flex-start;
2780
- justify-content: space-between;
2781
- gap: 0;
2782
- padding: 0;
2783
- margin: 0;
2784
- list-style: none;
1995
+ flex-direction: column;
1996
+ gap: var(--spacing-gap-1);
1997
+ color: var(--theme-radio-label-color);
2785
1998
  }
2786
1999
 
2787
- .bottom-navigation-item {
2788
- flex: 1;
2789
- min-width: 0;
2790
- display: flex;
2791
- justify-content: center;
2000
+ .radio-field[data-disabled=true] {
2001
+ color: var(--theme-radio-label-disabled);
2792
2002
  }
2793
2003
 
2794
- .bottom-navigation-trigger {
2004
+ .radio-label-wrapper {
2795
2005
  display: inline-flex;
2796
- flex-direction: column;
2797
2006
  align-items: center;
2798
- gap: var(--theme-navigation-item-gap);
2799
- min-width: 0;
2800
- padding: 0;
2801
- border: none;
2802
- background: none;
2803
- appearance: none;
2804
- text-decoration: none;
2805
- color: var(--theme-navigation-color);
2806
- font: inherit;
2007
+ gap: var(--spacing-gap-2);
2807
2008
  cursor: pointer;
2808
- -webkit-tap-highlight-color: transparent;
2809
- transition: color 0.16s ease;
2810
2009
  }
2811
2010
 
2812
- .bottom-navigation-trigger[data-active=true] {
2813
- color: var(--theme-navigation-color-active);
2011
+ .radio-label-wrapper[data-disabled=true] {
2012
+ cursor: not-allowed;
2814
2013
  }
2815
2014
 
2816
- .bottom-navigation-trigger[data-disabled=true],
2817
- .bottom-navigation-trigger:disabled {
2818
- color: var(--theme-navigation-color-disabled);
2819
- cursor: default;
2820
- pointer-events: none;
2015
+ .radio-label-text {
2016
+ font-weight: var(--font-body-medium-weight);
2017
+ user-select: none;
2821
2018
  }
2822
2019
 
2823
- .bottom-navigation-trigger:focus-visible {
2824
- outline: none;
2825
- border-radius: var(--theme-radius-large-1, 12px);
2826
- box-shadow: 0 0 0 2px var(--color-primary-focus, rgba(0, 97, 255, 0.2));
2020
+ .radio-field[data-size=medium] .radio-label-text {
2021
+ font-size: var(--font-body-xsmall-size);
2022
+ line-height: var(--font-body-xsmall-line-height);
2827
2023
  }
2828
2024
 
2829
- .navigation-item-icon {
2830
- display: inline-flex;
2831
- align-items: center;
2832
- justify-content: center;
2833
- width: var(--theme-navigation-icon-size);
2834
- height: var(--theme-navigation-icon-size);
2835
- color: currentColor;
2836
- }
2837
- .navigation-item-icon svg {
2838
- display: block;
2839
- width: 100%;
2840
- height: 100%;
2841
- }
2842
- .navigation-item-icon {
2843
- /* SVG fill/stroke를 currentColor로 맞춰 selected 컬러만 제어한다. */
2025
+ .radio-field[data-size=large] .radio-label-text {
2026
+ font-size: var(--font-body-medium-size);
2027
+ line-height: var(--font-body-medium-line-height);
2844
2028
  }
2845
- .navigation-item-icon svg [fill]:not([fill=none]) {
2846
- fill: currentColor;
2029
+
2030
+ .radio-helper {
2031
+ margin: 0;
2032
+ font-size: var(--font-caption-large-size);
2033
+ line-height: var(--font-caption-large-line-height);
2034
+ color: var(--theme-radio-helper-color);
2035
+ user-select: none;
2847
2036
  }
2848
- .navigation-item-icon svg [stroke]:not([stroke=none]) {
2849
- stroke: currentColor;
2037
+
2038
+ .radio-field[data-disabled=true] .radio-helper {
2039
+ color: var(--theme-radio-helper-disabled);
2850
2040
  }
2851
2041
 
2852
- .navigation-item-label {
2853
- display: block;
2854
- font-size: var(--theme-navigation-label-font-size);
2855
- font-weight: var(--theme-navigation-label-font-weight);
2856
- line-height: var(--theme-navigation-label-line-height);
2857
- letter-spacing: var(--theme-navigation-label-letter-spacing);
2858
- color: currentColor;
2859
- text-align: center;
2860
- white-space: nowrap;
2861
- overflow: hidden;
2862
- text-overflow: ellipsis;
2863
- max-width: 100%;
2042
+ .radio-card-group {
2043
+ display: flex;
2044
+ flex-direction: column;
2045
+ gap: var(--spacing-gap-3);
2864
2046
  }
2865
2047
 
2866
- /* Pagination native 구현 스타일 */
2867
- .pagination {
2868
- --pagination-gap: var(--spacing-gap-2, 8px);
2869
- --pagination-number-height: var(--theme-size-small-2, 24px);
2870
- --pagination-number-min-width: var(--theme-size-small-2, 24px);
2871
- --pagination-number-radius: var(--theme-radius-medium-1, 6px);
2872
- --pagination-color-active-bg: var(--color-cool-gray-10, #18191b);
2873
- --pagination-color-active-label: var(--color-common-100, #ffffff);
2874
- --pagination-color-inactive-label: var(--color-label-alternative, #afb1b6);
2875
- --pagination-dot-size: 8px;
2876
- --pagination-dot-bg: var(--color-cool-gray-85, #d2d3d7);
2877
- --pagination-dot-active-bg: var(--color-primary-default, #0061ff);
2878
- --pagination-carousel-height: 8px;
2879
- --pagination-carousel-dot-width: 8px;
2880
- --pagination-carousel-active-width: 20px;
2881
- --pagination-count-bg: var(--color-cool-gray-10, #18191b);
2882
- --pagination-count-divider: var(--color-common-100, #ffffff);
2883
- --pagination-count-total: var(--color-label-alternative, #afb1b6);
2884
- display: inline-flex;
2885
- gap: var(--pagination-gap);
2048
+ .radio-card {
2049
+ display: flex;
2886
2050
  align-items: center;
2887
- padding: 0;
2888
- margin: 0;
2889
- list-style: none;
2051
+ justify-content: space-between;
2052
+ inline-size: 100%;
2053
+ gap: var(--spacing-gap-3);
2054
+ padding: 16px 24px;
2055
+ background-color: var(--theme-radio-card-background);
2056
+ transition: background-color 0.15s ease;
2057
+ cursor: pointer;
2890
2058
  }
2891
-
2892
- .pagination[data-interactive=false] .pagination-button,
2893
- .pagination-button:disabled {
2894
- cursor: default;
2059
+ .radio-card[data-disabled=true] {
2060
+ cursor: not-allowed;
2061
+ opacity: 0.7;
2895
2062
  }
2896
2063
 
2897
- .pagination-item {
2898
- list-style: none;
2064
+ .radio-card-content {
2065
+ display: flex;
2066
+ flex-direction: column;
2067
+ gap: var(--spacing-gap-1);
2068
+ min-inline-size: 0;
2899
2069
  }
2900
2070
 
2901
- .pagination-button {
2902
- appearance: none;
2903
- border: none;
2904
- background: transparent;
2905
- padding: 0;
2906
- margin: 0;
2071
+ .radio-card-title-row {
2907
2072
  display: inline-flex;
2908
2073
  align-items: center;
2909
- justify-content: center;
2910
- cursor: pointer;
2911
- color: inherit;
2912
- font: inherit;
2913
- transition: background-color 0.16s ease, color 0.16s ease, opacity 0.16s ease;
2914
- }
2915
-
2916
- .pagination--variant-list {
2917
- gap: var(--spacing-gap-1, 4px);
2074
+ gap: var(--spacing-gap-1);
2075
+ min-inline-size: 0;
2918
2076
  }
2919
2077
 
2920
- .pagination--variant-list .pagination-button {
2921
- min-width: var(--pagination-number-min-width);
2922
- height: var(--pagination-number-height);
2923
- padding-inline: var(--spacing-padding-2, 8px);
2924
- border-radius: var(--pagination-number-radius);
2925
- background-color: transparent;
2926
- color: var(--pagination-color-inactive-label);
2927
- font-size: var(--font-label-medium-size, 12px);
2928
- font-weight: var(--font-label-medium-weight, 400);
2929
- line-height: var(--font-label-medium-line-height, 1.5);
2078
+ .radio-card-title {
2079
+ font-size: var(--font-heading-small-size);
2080
+ line-height: var(--font-heading-small-line-height);
2081
+ font-weight: var(--font-heading-small-weight);
2082
+ letter-spacing: 0.2px;
2083
+ color: var(--theme-radio-card-title-color);
2084
+ white-space: nowrap;
2930
2085
  }
2931
2086
 
2932
- .pagination[data-interactive=true] .pagination--variant-list .pagination-button:not([data-active=true]):hover {
2933
- background-color: var(--color-bg-alternative-cool-gray, #f0f1f5);
2934
- color: var(--color-label-strong, #5b5c60);
2087
+ .radio-card-badge {
2088
+ display: none;
2089
+ align-items: center;
2090
+ justify-content: center;
2091
+ padding: 4px 6px;
2092
+ font-size: var(--font-caption-medium-size);
2093
+ line-height: var(--font-caption-medium-line-height);
2094
+ border-radius: 6px;
2095
+ background-color: var(--theme-radio-card-badge-background);
2096
+ color: var(--theme-radio-card-badge-color);
2935
2097
  }
2936
2098
 
2937
- .pagination--variant-list .pagination-button[data-active=true] {
2938
- background-color: var(--pagination-color-active-bg);
2939
- color: var(--pagination-color-active-label);
2099
+ .radio-card[data-state=checked] .radio-card-title {
2100
+ color: var(--theme-radio-card-badge-color);
2940
2101
  }
2941
-
2942
- .pagination-number {
2943
- min-width: 1ch;
2944
- text-align: center;
2102
+ .radio-card[data-state=checked] .radio-card-badge {
2103
+ display: inline-flex;
2945
2104
  }
2946
2105
 
2947
- .pagination--variant-carousel {
2948
- gap: 5px;
2949
- min-height: var(--pagination-carousel-height);
2950
- align-items: center;
2106
+ .radio-card-description {
2107
+ margin: 0;
2108
+ font-size: var(--font-body-small-size);
2109
+ line-height: var(--font-body-small-line-height);
2110
+ color: var(--theme-radio-card-description-color);
2951
2111
  }
2952
2112
 
2953
- .pagination--variant-carousel .pagination-button {
2954
- width: auto;
2955
- height: var(--pagination-carousel-height);
2956
- padding: 0;
2113
+ .radio-card-indicator-wrapper {
2114
+ display: inline-flex;
2115
+ align-items: center;
2116
+ justify-content: center;
2117
+ flex-shrink: 0;
2957
2118
  }
2958
2119
 
2959
- .pagination--variant-carousel .pagination-dot {
2960
- display: inline-flex;
2961
- width: var(--pagination-carousel-dot-width);
2962
- height: var(--pagination-carousel-height);
2963
- border-radius: calc(var(--pagination-carousel-height) / 2);
2964
- background-color: var(--pagination-dot-bg);
2965
- transition: width 0.16s ease, background-color 0.16s ease;
2120
+ .radio-card-indicator {
2121
+ inline-size: var(--theme-radio-indicator-size-medium);
2122
+ block-size: var(--theme-radio-indicator-size-medium);
2123
+ border-radius: 9999px;
2124
+ border: var(--theme-radio-indicator-border-width) solid var(--theme-radio-border-color);
2125
+ transition: border-color 0.15s ease;
2966
2126
  }
2967
2127
 
2968
- .pagination--variant-carousel .pagination-button[data-active=true] .pagination-dot {
2969
- width: var(--pagination-carousel-active-width);
2970
- background-color: var(--pagination-dot-active-bg);
2128
+ .radio-card[data-size=large] .radio-card-indicator {
2129
+ inline-size: var(--theme-radio-indicator-size-large);
2130
+ block-size: var(--theme-radio-indicator-size-large);
2971
2131
  }
2972
2132
 
2973
- .pagination--variant-count {
2974
- gap: 0;
2133
+ .radio-card[data-state=checked] .radio-card-indicator {
2134
+ border-color: var(--theme-radio-border-selected);
2135
+ border-width: var(--theme-radio-indicator-border-width-selected-medium);
2975
2136
  }
2976
2137
 
2977
- .pagination--variant-count .pagination-button {
2978
- border-radius: var(--theme-radius-large-2, 16px);
2979
- padding-inline: var(--spacing-padding-4, 16px);
2980
- background-color: var(--pagination-count-bg);
2981
- color: var(--pagination-color-active-label);
2982
- font-weight: var(--font-label-medium-weight, 400);
2983
- line-height: 1.5;
2138
+ .radio-card[data-size=large][data-state=checked] .radio-card-indicator {
2139
+ border-width: var(--theme-radio-indicator-border-width-selected-large);
2984
2140
  }
2985
2141
 
2986
- .pagination--variant-count.pagination--count-size-small .pagination-button {
2987
- height: var(--theme-size-small-2, 24px);
2988
- font-size: var(--font-label-medium-size, 12px);
2142
+ /* TODO(scrollbar): 스타일을 SOT 토큰 값으로 정의한다. */
2143
+ .segmented-control {
2144
+ --segmented-height: 34px;
2145
+ --segmented-padding: 2px;
2146
+ --segmented-radius: 16px;
2147
+ --segmented-bg: var(--color-bg-alternative-cool-gray, #f2f2f3);
2148
+ --segmented-indicator-bg: var(--color-common-100, #ffffff);
2149
+ --segmented-indicator-shadow: 2px 2px 4px rgba(0, 0, 0, 0.02);
2150
+ --segmented-label-color: var(--color-label-neutral, #797e86);
2151
+ --segmented-label-active-color: var(--color-label-strong, #181a1b);
2152
+ --segmented-disabled-opacity: 0.4;
2153
+ --segmented-gap: 2px;
2154
+ --segmented-item-padding-x: 22px;
2155
+ --segmented-item-padding-y: 4px;
2156
+ --segmented-item-font-size: var(--font-heading-xxsmall-size, 15px);
2157
+ --segmented-item-font-weight: var(--font-heading-xxsmall-weight, 500);
2158
+ --segmented-item-line-height: var(--font-heading-xxsmall-line-height, 1.5);
2159
+ position: relative;
2160
+ display: block;
2161
+ box-sizing: border-box;
2162
+ padding: var(--segmented-padding);
2163
+ border-radius: var(--segmented-radius);
2164
+ background: var(--segmented-bg);
2165
+ width: fit-content;
2166
+ min-height: var(--segmented-height);
2167
+ isolation: isolate;
2168
+ overflow: hidden;
2989
2169
  }
2990
2170
 
2991
- .pagination--variant-count.pagination--count-size-xsmall .pagination-button {
2992
- height: var(--theme-size-small-1, 20px);
2993
- font-size: var(--font-label-small-size, 11px);
2171
+ .segmented-control:where([data-keep-selected=true]) {
2172
+ --segmented-disabled-opacity: 0.3;
2994
2173
  }
2995
2174
 
2996
- .pagination-count-current {
2997
- color: var(--pagination-color-active-label);
2175
+ .segmented-control-indicator {
2176
+ position: absolute;
2177
+ top: var(--segmented-padding);
2178
+ bottom: var(--segmented-padding);
2179
+ left: 0;
2180
+ width: 0px;
2181
+ height: calc(100% - var(--segmented-padding) * 2);
2182
+ margin: 0;
2183
+ border-radius: calc(var(--segmented-radius) - var(--segmented-padding));
2184
+ background: var(--segmented-indicator-bg);
2185
+ box-shadow: var(--segmented-indicator-shadow);
2186
+ transition: transform 0.2s ease, width 0.2s ease, opacity 0.2s ease;
2187
+ pointer-events: none;
2188
+ z-index: 0;
2998
2189
  }
2999
2190
 
3000
- .pagination-count-divider {
3001
- margin-inline: var(--spacing-gap-1, 4px);
3002
- color: var(--pagination-count-divider);
2191
+ .segmented-control-indicator[data-visible=false] {
2192
+ opacity: 0;
3003
2193
  }
3004
2194
 
3005
- .pagination-count-total {
3006
- color: var(--pagination-count-total);
2195
+ .segmented-control-list {
2196
+ display: flex;
2197
+ column-gap: var(--segmented-gap);
2198
+ row-gap: 0;
2199
+ margin: 0;
2200
+ padding: 0;
2201
+ list-style: none;
2202
+ position: relative;
2203
+ z-index: 1;
3007
2204
  }
3008
2205
 
3009
- :where(.radix-themes, .theme-root) {
3010
- --theme-radio-frame-size-medium: 20px;
3011
- --theme-radio-frame-size-large: 24px;
3012
- --theme-radio-indicator-size-medium: 16px;
3013
- --theme-radio-indicator-size-large: 20px;
3014
- --theme-radio-indicator-border-width: 1.4px;
3015
- --theme-radio-indicator-border-width-selected-medium: 4px;
3016
- --theme-radio-indicator-border-width-selected-large: 6px;
3017
- --theme-radio-border-color: var(--color-border-standard-assistive);
3018
- --theme-radio-border-selected: var(--color-primary-default);
3019
- --theme-radio-surface-selected: var(--color-primary-default);
3020
- --theme-radio-surface-disabled: var(--color-border-standard-assistive);
3021
- --theme-radio-border-disabled: var(--color-border-standard-assistive);
3022
- --theme-radio-disabled-selected-fill: var(--color-primary-default);
3023
- --theme-radio-label-color: var(--color-label-strong);
3024
- --theme-radio-label-disabled: var(--color-label-disabled);
3025
- --theme-radio-helper-color: var(--color-label-neutral);
3026
- --theme-radio-helper-disabled: var(--color-label-disabled);
3027
- --theme-radio-card-background: var(--color-common-100);
3028
- --theme-radio-card-title-color: var(--color-label-strong);
3029
- --theme-radio-card-description-color: var(--color-label-neutral);
3030
- --theme-radio-card-badge-background: var(--color-bg-surface-static-blue);
3031
- --theme-radio-card-badge-color: var(--color-primary-default);
3032
- --theme-radio-focus-ring: rgba(2, 84, 255, 0.32);
3033
- --theme-radio-disabled-selected-opacity: 0.28;
2206
+ .segmented-control-item {
2207
+ list-style: none;
2208
+ margin: 0;
2209
+ padding: 0;
3034
2210
  }
3035
2211
 
3036
- .radio {
3037
- display: inline-flex;
2212
+ .segmented-control-button {
2213
+ position: relative;
2214
+ z-index: 1;
2215
+ display: flex;
3038
2216
  align-items: center;
3039
2217
  justify-content: center;
3040
- inline-size: var(--theme-radio-frame-size-medium);
3041
- block-size: var(--theme-radio-frame-size-medium);
2218
+ width: 100%;
3042
2219
  border: none;
3043
- background-color: transparent;
3044
- border-radius: 0;
3045
- padding: 0;
2220
+ background: transparent;
3046
2221
  cursor: pointer;
3047
- transition: box-shadow 0.15s ease, transform 0.15s ease;
3048
- }
3049
- .radio[data-size=large] {
3050
- inline-size: var(--theme-radio-frame-size-large);
3051
- block-size: var(--theme-radio-frame-size-large);
2222
+ min-width: 0;
2223
+ border-radius: calc(var(--segmented-radius) - var(--segmented-padding));
2224
+ padding: var(--segmented-item-padding-y) var(--segmented-item-padding-x);
2225
+ transition: color 0.2s ease;
3052
2226
  }
3053
- .radio[data-disabled=true] {
2227
+
2228
+ .segmented-control-button:where([data-disabled=true]) {
3054
2229
  cursor: not-allowed;
3055
- opacity: 0.6;
2230
+ opacity: var(--segmented-disabled-opacity);
3056
2231
  }
3057
2232
 
3058
- .radio:focus-visible {
3059
- box-shadow: 0 0 0 2px var(--theme-radio-focus-ring);
2233
+ .segmented-control-button:where(:focus-visible) {
2234
+ outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
2235
+ outline-offset: 2px;
3060
2236
  }
3061
2237
 
3062
- .radio-indicator {
3063
- inline-size: var(--theme-radio-indicator-size-medium);
3064
- block-size: var(--theme-radio-indicator-size-medium);
3065
- border-radius: 9999px;
3066
- border: var(--theme-radio-indicator-border-width) solid var(--theme-radio-border-color);
3067
- transition: border-color 0.15s ease;
2238
+ .segmented-control-button-label {
2239
+ display: flex;
2240
+ align-items: center;
2241
+ justify-content: center;
2242
+ font-size: var(--segmented-item-font-size);
2243
+ font-weight: var(--segmented-item-font-weight);
2244
+ line-height: var(--segmented-item-line-height);
2245
+ letter-spacing: 0.2px;
2246
+ color: var(--segmented-label-color);
2247
+ transition: color 0.2s ease;
3068
2248
  }
3069
2249
 
3070
- .radio[data-state=checked] .radio-indicator,
3071
- .radio[data-size=medium][data-state=checked] .radio-indicator {
3072
- border-width: var(--theme-radio-indicator-border-width-selected-medium);
2250
+ .segmented-control-button:where([data-state=on]) .segmented-control-button-label {
2251
+ color: var(--segmented-label-active-color);
3073
2252
  }
3074
2253
 
3075
- .radio[data-size=large] .radio-indicator {
3076
- inline-size: var(--theme-radio-indicator-size-large);
3077
- block-size: var(--theme-radio-indicator-size-large);
2254
+ /* TODO(select): 스타일을 SOT 토큰 값으로 정의한다. */
2255
+ /* TODO(spinner): 스타일을 SOT 토큰 값으로 정의한다. */
2256
+ .tab-root {
2257
+ /* Figma node 694:4619 측정값을 CSS 변수로 고정해 Storybook과 실 서비스 간 시각 편차를 줄인다. */
2258
+ --tab-label-font-size: var(--font-heading-xsmall-size, 17px);
2259
+ --tab-label-font-weight: var(--font-heading-xsmall-weight, 600);
2260
+ --tab-label-line-height: 1.4;
2261
+ --tab-label-letter-spacing: 0px;
2262
+ --tab-gap: var(--spacing-gap-2, 8px);
2263
+ --tab-padding-y: 10px;
2264
+ --tab-padding-x: var(--spacing-padding-8, 24px);
2265
+ --tab-icon-gap: 6px;
2266
+ --tab-line-track-color: var(--color-border-divider, #f2f2f3);
2267
+ --tab-line-track-height: 1px;
2268
+ --tab-line-indicator-height: 2px;
2269
+ --tab-color-active-default: #1a6aff;
2270
+ --tab-color-active: var(--tab-color-active-default);
2271
+ --tab-color-hover: color-mix(in srgb, var(--tab-color-active), #000 15%);
2272
+ --tab-line-hover-color: var(--tab-color-hover, var(--tab-color-active));
2273
+ --tab-fill-hover-bg: var(--color-bg-alternative-cool-gray, #f2f2f3);
2274
+ --tab-fill-active-color: var(--color-common-100, #ffffff);
2275
+ --tab-inactive-color: var(--color-label-alternative, #afb1b6);
2276
+ --tab-disabled-opacity: 0.4;
2277
+ --tab-height: 48px;
2278
+ width: 100%;
2279
+ display: flex;
2280
+ flex-direction: column;
2281
+ gap: var(--spacing-gap-3);
3078
2282
  }
3079
- .radio[data-size=large][data-state=checked] .radio-indicator {
3080
- border-width: var(--theme-radio-indicator-border-width-selected-large);
2283
+
2284
+ .tab-root:where([data-scale=small]) {
2285
+ --tab-label-font-size: var(--font-heading-xxsmall-size, 15px);
2286
+ --tab-label-font-weight: var(--font-heading-xxsmall-weight, 600);
2287
+ --tab-height: 40px;
2288
+ --tab-padding-x: var(--spacing-padding-4, 8px);
3081
2289
  }
3082
2290
 
3083
- .radio[data-state=checked] .radio-indicator {
3084
- border-color: var(--theme-radio-border-selected);
2291
+ .tab-root:where([data-scale=medium]) {
2292
+ --tab-label-font-size: var(--font-heading-xsmall-size, 17px);
2293
+ --tab-label-font-weight: var(--font-heading-xsmall-weight, 600);
2294
+ --tab-height: 48px;
3085
2295
  }
3086
2296
 
3087
- .radio[data-disabled=true] .radio-indicator {
3088
- border-color: var(--theme-radio-border-disabled);
3089
- background-color: var(--theme-radio-surface-disabled);
3090
- opacity: 1;
2297
+ .tab-root:where([data-scale=large]) {
2298
+ --tab-label-font-size: var(--font-heading-small-size, 19px);
2299
+ --tab-label-font-weight: var(--font-heading-small-weight, 600);
2300
+ --tab-height: 56px;
2301
+ --tab-padding-x: var(--spacing-padding-8, 24px);
3091
2302
  }
3092
2303
 
3093
- .radio[data-disabled=true][data-state=checked] .radio-indicator {
3094
- border-color: var(--theme-radio-disabled-selected-fill);
3095
- opacity: var(--theme-radio-disabled-selected-opacity);
2304
+ .tab-list {
2305
+ display: flex;
2306
+ align-items: stretch;
2307
+ gap: var(--tab-gap);
2308
+ width: fit-content;
2309
+ overflow-x: auto;
2310
+ scrollbar-width: none;
3096
2311
  }
3097
2312
 
3098
- .radio-field {
3099
- display: flex;
3100
- flex-direction: column;
3101
- gap: var(--spacing-gap-1);
3102
- color: var(--theme-radio-label-color);
2313
+ .tab-list::-webkit-scrollbar {
2314
+ display: none;
3103
2315
  }
3104
2316
 
3105
- .radio-field[data-disabled=true] {
3106
- color: var(--theme-radio-label-disabled);
2317
+ .tab-list:where([data-full-width=true]) {
2318
+ width: 100%;
3107
2319
  }
3108
2320
 
3109
- .radio-label-wrapper {
3110
- display: inline-flex;
2321
+ .tab-trigger {
2322
+ position: relative;
2323
+ display: flex;
3111
2324
  align-items: center;
3112
- gap: var(--spacing-gap-2);
2325
+ justify-content: center;
2326
+ gap: var(--tab-icon-gap);
2327
+ min-height: var(--tab-height);
2328
+ padding: var(--tab-padding-y) var(--tab-padding-x);
2329
+ background: transparent;
2330
+ border: none;
3113
2331
  cursor: pointer;
2332
+ transition: background-color 0.2s ease;
3114
2333
  }
3115
2334
 
3116
- .radio-label-wrapper[data-disabled=true] {
3117
- cursor: not-allowed;
2335
+ .tab-trigger:where(:focus-visible) {
2336
+ outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
2337
+ outline-offset: 2px;
3118
2338
  }
3119
2339
 
3120
- .radio-label-text {
3121
- font-weight: var(--font-body-medium-weight);
3122
- user-select: none;
2340
+ .tab-trigger:where([data-disabled=true]) {
2341
+ cursor: not-allowed;
2342
+ opacity: var(--tab-disabled-opacity);
3123
2343
  }
3124
2344
 
3125
- .radio-field[data-size=medium] .radio-label-text {
3126
- font-size: var(--font-body-xsmall-size);
3127
- line-height: var(--font-body-xsmall-line-height);
2345
+ .tab-trigger-icon {
2346
+ display: flex;
2347
+ align-items: center;
2348
+ justify-content: center;
3128
2349
  }
3129
2350
 
3130
- .radio-field[data-size=large] .radio-label-text {
3131
- font-size: var(--font-body-medium-size);
3132
- line-height: var(--font-body-medium-line-height);
2351
+ .tab-trigger-label {
2352
+ display: flex;
2353
+ align-items: center;
2354
+ justify-content: center;
2355
+ font-size: var(--tab-label-font-size);
2356
+ font-weight: var(--tab-label-font-weight);
2357
+ line-height: var(--tab-label-line-height);
2358
+ letter-spacing: var(--tab-label-letter-spacing);
2359
+ color: var(--tab-inactive-color);
2360
+ transition: color 0.2s ease;
3133
2361
  }
3134
2362
 
3135
- .radio-helper {
3136
- margin: 0;
3137
- font-size: var(--font-caption-large-size);
3138
- line-height: var(--font-caption-large-line-height);
3139
- color: var(--theme-radio-helper-color);
3140
- user-select: none;
2363
+ .tab-list:where([data-variant=line]) {
2364
+ position: relative;
2365
+ width: 100%;
3141
2366
  }
3142
2367
 
3143
- .radio-field[data-disabled=true] .radio-helper {
3144
- color: var(--theme-radio-helper-disabled);
2368
+ .tab-list:where([data-variant=line])::before {
2369
+ content: "";
2370
+ position: absolute;
2371
+ inset: auto 0 0;
2372
+ height: var(--tab-line-track-height, 1px);
2373
+ background: var(--tab-line-track-color);
2374
+ z-index: 0;
3145
2375
  }
3146
2376
 
3147
- .radio-card-group {
3148
- display: flex;
3149
- flex-direction: column;
3150
- gap: var(--spacing-gap-3);
2377
+ .tab-list:where([data-variant=line][data-full-width=true]) > .tab-trigger {
2378
+ flex: 1;
3151
2379
  }
3152
2380
 
3153
- .radio-card {
3154
- display: flex;
3155
- align-items: center;
3156
- justify-content: space-between;
3157
- inline-size: 100%;
3158
- gap: var(--spacing-gap-3);
3159
- padding: 16px 24px;
3160
- background-color: var(--theme-radio-card-background);
3161
- transition: background-color 0.15s ease;
3162
- cursor: pointer;
3163
- }
3164
- .radio-card[data-disabled=true] {
3165
- cursor: not-allowed;
3166
- opacity: 0.7;
2381
+ .tab-trigger:where([data-variant=line])::after {
2382
+ content: "";
2383
+ position: absolute;
2384
+ left: 0;
2385
+ right: 0;
2386
+ bottom: -1px;
2387
+ height: var(--tab-line-indicator-height, 2px);
2388
+ background: transparent;
2389
+ transform: scaleX(0);
2390
+ transform-origin: center;
2391
+ z-index: 1;
2392
+ transition: transform 0.2s ease, background-color 0.2s ease;
3167
2393
  }
3168
2394
 
3169
- .radio-card-content {
3170
- display: flex;
3171
- flex-direction: column;
3172
- gap: var(--spacing-gap-1);
3173
- min-inline-size: 0;
2395
+ .tab-trigger:where([data-variant=line][data-state=active]) .tab-trigger-label {
2396
+ color: var(--tab-color-active);
3174
2397
  }
3175
2398
 
3176
- .radio-card-title-row {
3177
- display: inline-flex;
3178
- align-items: center;
3179
- gap: var(--spacing-gap-1);
3180
- min-inline-size: 0;
2399
+ .tab-trigger:where([data-variant=line][data-state=active])::after {
2400
+ background: var(--tab-color-active);
2401
+ transform: scaleX(1);
3181
2402
  }
3182
2403
 
3183
- .radio-card-title {
3184
- font-size: var(--font-heading-small-size);
3185
- line-height: var(--font-heading-small-line-height);
3186
- font-weight: var(--font-heading-small-weight);
3187
- letter-spacing: 0.2px;
3188
- color: var(--theme-radio-card-title-color);
3189
- white-space: nowrap;
2404
+ .tab-trigger:where([data-variant=line]):where(:not([data-state=active])):hover .tab-trigger-label {
2405
+ color: var(--tab-line-hover-color);
3190
2406
  }
3191
2407
 
3192
- .radio-card-badge {
3193
- display: none;
3194
- align-items: center;
3195
- justify-content: center;
3196
- padding: 4px 6px;
3197
- font-size: var(--font-caption-medium-size);
3198
- line-height: var(--font-caption-medium-line-height);
3199
- border-radius: 6px;
3200
- background-color: var(--theme-radio-card-badge-background);
3201
- color: var(--theme-radio-card-badge-color);
2408
+ .tab-list:where([data-variant=fill]) {
2409
+ width: fit-content;
2410
+ border: none;
2411
+ background: transparent;
2412
+ border-radius: 0;
2413
+ gap: 0;
3202
2414
  }
3203
2415
 
3204
- .radio-card[data-state=checked] .radio-card-title {
3205
- color: var(--theme-radio-card-badge-color);
2416
+ .tab-list:where([data-variant=fill][data-full-width=true]) {
2417
+ width: 100%;
3206
2418
  }
3207
- .radio-card[data-state=checked] .radio-card-badge {
3208
- display: inline-flex;
2419
+
2420
+ .tab-list:where([data-variant=fill][data-full-width=true]) > .tab-trigger {
2421
+ flex: 1;
3209
2422
  }
3210
2423
 
3211
- .radio-card-description {
3212
- margin: 0;
3213
- font-size: var(--font-body-small-size);
3214
- line-height: var(--font-body-small-line-height);
3215
- color: var(--theme-radio-card-description-color);
2424
+ .tab-trigger:where([data-variant=fill]) {
2425
+ border-radius: 12px;
2426
+ min-width: 0;
3216
2427
  }
3217
2428
 
3218
- .radio-card-indicator-wrapper {
3219
- display: inline-flex;
3220
- align-items: center;
3221
- justify-content: center;
3222
- flex-shrink: 0;
2429
+ .tab-trigger:where([data-variant=fill][data-state=active]) {
2430
+ background: var(--tab-color-active);
3223
2431
  }
3224
2432
 
3225
- .radio-card-indicator {
3226
- inline-size: var(--theme-radio-indicator-size-medium);
3227
- block-size: var(--theme-radio-indicator-size-medium);
3228
- border-radius: 9999px;
3229
- border: var(--theme-radio-indicator-border-width) solid var(--theme-radio-border-color);
3230
- transition: border-color 0.15s ease;
2433
+ .tab-trigger:where([data-variant=fill][data-state=active]) .tab-trigger-label {
2434
+ color: var(--tab-fill-active-color);
3231
2435
  }
3232
2436
 
3233
- .radio-card[data-size=large] .radio-card-indicator {
3234
- inline-size: var(--theme-radio-indicator-size-large);
3235
- block-size: var(--theme-radio-indicator-size-large);
2437
+ .tab-trigger:where([data-variant=fill]):where(:not([data-state=active])):hover {
2438
+ background: var(--tab-fill-hover-bg);
3236
2439
  }
3237
2440
 
3238
- .radio-card[data-state=checked] .radio-card-indicator {
3239
- border-color: var(--theme-radio-border-selected);
3240
- border-width: var(--theme-radio-indicator-border-width-selected-medium);
2441
+ .tab-content {
2442
+ display: block;
2443
+ padding: var(--spacing-padding-6) 0;
3241
2444
  }
3242
2445
 
3243
- .radio-card[data-size=large][data-state=checked] .radio-card-indicator {
3244
- border-width: var(--theme-radio-indicator-border-width-selected-large);
2446
+ /* TODO(table): 스타일을 SOT 토큰 값으로 정의한다. */
2447
+ :root {
2448
+ --divider-width: 1px;
2449
+ --divider-height: 12px;
2450
+ --divider-color: var(--color-border-standard-cool-gray, #e4e5e7);
2451
+ --divider-margin: var(--spacing-gap-4, 8px);
3245
2452
  }
3246
2453
 
3247
- /* TODO(scrollbar): 스타일을 SOT 토큰 값으로 정의한다. */
3248
- .segmented-control {
3249
- --segmented-height: 34px;
3250
- --segmented-padding: 2px;
3251
- --segmented-radius: 16px;
3252
- --segmented-bg: var(--color-bg-alternative-cool-gray, #f2f2f3);
3253
- --segmented-indicator-bg: var(--color-common-100, #ffffff);
3254
- --segmented-indicator-shadow: 2px 2px 4px rgba(0, 0, 0, 0.02);
3255
- --segmented-label-color: var(--color-label-neutral, #797e86);
3256
- --segmented-label-active-color: var(--color-label-strong, #181a1b);
3257
- --segmented-disabled-opacity: 0.4;
3258
- --segmented-item-padding-x: 22px;
3259
- --segmented-item-padding-y: 4px;
3260
- --segmented-item-font-size: var(--font-heading-xxsmall-size, 15px);
3261
- --segmented-item-font-weight: var(--font-heading-xxsmall-weight, 500);
3262
- --segmented-item-line-height: var(--font-heading-xxsmall-line-height, 1.5);
3263
- display: grid;
3264
- grid-auto-flow: column;
3265
- grid-auto-columns: 1fr;
3266
- align-items: stretch;
3267
- padding: var(--segmented-padding);
3268
- border-radius: var(--segmented-radius);
3269
- background: var(--segmented-bg);
3270
- width: fit-content;
3271
- height: var(--segmented-height);
2454
+ .divider {
2455
+ width: var(--divider-width);
2456
+ height: var(--divider-height);
2457
+ background-color: var(--divider-color);
2458
+ margin: 0 var(--divider-margin);
2459
+ vertical-align: middle;
2460
+ align-self: center;
3272
2461
  font-size: 0;
3273
- isolation: isolate;
3274
2462
  }
3275
2463
 
3276
- .segmented-control:where(.rt-SegmentedControlRoot) {
3277
- /* Radix Theme 기본 inline-grid를 덮어 동일한 sizing 시스템에서만 layout이 될 수 있도록 한다. */
3278
- display: grid;
2464
+ /* 템플릿 레벨 스타일을 통합해 서비스 앱이 단일 엔트리만 import하도록 구성한다. */
2465
+ :root {
2466
+ --frame-device-height: 812px;
2467
+ --frame-device-width: 480px;
2468
+ --frame-safe-area-top: env(safe-area-inset-top, 0px);
2469
+ --frame-safe-area-bottom: env(safe-area-inset-bottom, 0px);
2470
+ --page-frame-height: min(100svh, 100dvh, var(--frame-device-height, 812px));
2471
+ --page-frame-header-padding-top: var(--frame-safe-area-top);
2472
+ --page-frame-footer-safe-area: var(--frame-safe-area-bottom);
2473
+ --page-frame-max-width: var(
2474
+ --frame-device-width,
2475
+ 480px
2476
+ );
3279
2477
  }
3280
2478
 
3281
- .segmented-control:where([data-keep-selected=true]) {
3282
- --segmented-disabled-opacity: 0.3;
2479
+ .page-frame-container {
2480
+ display: grid;
2481
+ grid-template-rows: auto 1fr auto;
2482
+ width: min(100%, var(--page-frame-max-width));
2483
+ margin: 0 auto;
2484
+ height: var(--page-frame-height);
2485
+ background-color: var(--color-common-100, #ffffff);
2486
+ color: inherit;
3283
2487
  }
3284
2488
 
3285
- .segmented-control :where(.rt-SegmentedControlIndicator) {
3286
- border-radius: calc(var(--segmented-radius) - var(--segmented-padding));
3287
- background: transparent;
3288
- box-shadow: none;
3289
- overflow: hidden;
2489
+ .page-frame-header,
2490
+ .page-frame-body,
2491
+ .page-frame-footer {
2492
+ width: 100%;
3290
2493
  }
3291
2494
 
3292
- .segmented-control :where(.rt-SegmentedControlIndicator)::before {
3293
- content: "";
3294
- position: absolute;
3295
- inset: var(--segmented-padding);
3296
- border-radius: calc(var(--segmented-radius) - var(--segmented-padding));
3297
- background: var(--segmented-indicator-bg);
3298
- box-shadow: var(--segmented-indicator-shadow);
2495
+ .page-frame-header {
2496
+ padding-top: var(--page-frame-header-padding-top);
3299
2497
  }
3300
2498
 
3301
- .segmented-control :where(.rt-SegmentedControlItemSeparator) {
3302
- display: none;
2499
+ .page-frame-body {
2500
+ min-height: 0;
2501
+ overflow-y: auto;
3303
2502
  }
3304
2503
 
3305
- .segmented-control :where(.rt-SegmentedControlItem) {
3306
- background: transparent;
3307
- padding: 0;
3308
- border: none;
3309
- min-width: 0;
3310
- display: flex;
2504
+ .page-frame-footer {
2505
+ padding-bottom: var(--page-frame-footer-safe-area);
3311
2506
  }
3312
2507
 
3313
- .segmented-control :where(.rt-SegmentedControlItemLabel) {
3314
- gap: 0;
3315
- height: fit-content;
3316
- padding: 0;
3317
- font-size: 0;
2508
+ .page-frame-mobile {
2509
+ width: 100%;
2510
+ height: 100%;
2511
+ min-height: var(--page-frame-height, var(--frame-device-height, 812px));
2512
+ max-height: 100dvh;
2513
+ background-color: var(--color-common-100, #ffffff);
3318
2514
  }
3319
2515
 
3320
- .segmented-control-item {
2516
+ .page-frame-mobile-header,
2517
+ .page-frame-mobile-body,
2518
+ .page-frame-mobile-footer {
3321
2519
  width: 100%;
3322
- height: 100%;
3323
- border: none;
3324
- background: transparent;
3325
- cursor: pointer;
3326
2520
  }
3327
- .segmented-control-item .rt-SegmentedControlItemLabel {
3328
- display: flex;
3329
- align-items: center;
3330
- justify-content: center;
3331
- padding: var(--segmented-item-padding-y) var(--segmented-item-padding-x);
3332
- border-radius: calc(var(--segmented-radius) - var(--segmented-padding));
2521
+
2522
+ .page-frame-mobile-body {
2523
+ background-color: inherit;
3333
2524
  }
3334
2525
 
3335
- .segmented-control-item:where([data-disabled=true]) {
3336
- cursor: not-allowed;
3337
- opacity: var(--segmented-disabled-opacity);
2526
+ .page-frame-navigation {
2527
+ width: 100%;
3338
2528
  }
3339
2529
 
3340
- .segmented-control-item:where(:focus-visible) {
3341
- outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
3342
- outline-offset: 2px;
2530
+ @layer foundation.reset {
2531
+ :root {
2532
+ -webkit-tap-highlight-color: transparent;
2533
+ text-size-adjust: none;
2534
+ overflow-wrap: break-word;
2535
+ word-break: break-word;
2536
+ }
2537
+ *,
2538
+ *::before,
2539
+ *::after {
2540
+ margin: 0;
2541
+ padding: 0;
2542
+ border: 0;
2543
+ box-sizing: border-box;
2544
+ }
2545
+ * {
2546
+ letter-spacing: -0.05em;
2547
+ flex-shrink: 0;
2548
+ overscroll-behavior-y: none;
2549
+ font-family: var(--font-family-sans, "Pretendard JP Variable", "Pretendard JP", "Pretendard Variable", "Pretendard", "Inter", sans-serif);
2550
+ }
2551
+ *:focus,
2552
+ *:focus-within,
2553
+ *:focus-visible {
2554
+ outline: none;
2555
+ }
2556
+ html {
2557
+ width: 100%;
2558
+ font-size: 10px;
2559
+ font-family: var(--font-family-sans);
2560
+ background-color: #fff;
2561
+ touch-action: manipulation;
2562
+ }
2563
+ body {
2564
+ width: 100%;
2565
+ position: relative;
2566
+ background: none;
2567
+ }
2568
+ h1,
2569
+ h2,
2570
+ h3,
2571
+ h4,
2572
+ h5,
2573
+ h6 {
2574
+ margin: 0;
2575
+ padding: 0;
2576
+ font-weight: 500;
2577
+ line-height: 1em;
2578
+ }
2579
+ strong,
2580
+ b {
2581
+ font-weight: 700;
2582
+ line-height: 1em;
2583
+ }
2584
+ p,
2585
+ span,
2586
+ i,
2587
+ sup,
2588
+ sub,
2589
+ del,
2590
+ ins,
2591
+ s {
2592
+ margin: 0;
2593
+ padding: 0;
2594
+ line-height: 1em;
2595
+ word-break: keep-all;
2596
+ }
2597
+ i,
2598
+ address,
2599
+ cite,
2600
+ em,
2601
+ q {
2602
+ font-weight: 400;
2603
+ font-style: normal;
2604
+ }
2605
+ blockquote,
2606
+ abbr,
2607
+ dfn {
2608
+ font-weight: 400;
2609
+ }
2610
+ pre,
2611
+ code,
2612
+ samp,
2613
+ kbd,
2614
+ var {
2615
+ font-family: "Consolas", "Monaco", "Menlo", "DejaVu Sans Mono", SFMono-Regular, "Liberation Mono", "Courier New", monospace;
2616
+ }
2617
+ blockquote,
2618
+ q {
2619
+ quotes: none;
2620
+ }
2621
+ blockquote::before,
2622
+ blockquote::after,
2623
+ q::before,
2624
+ q::after {
2625
+ content: "";
2626
+ }
2627
+ img,
2628
+ svg {
2629
+ max-width: 100%;
2630
+ object-fit: contain;
2631
+ perspective: 1;
2632
+ }
2633
+ li,
2634
+ dt,
2635
+ dd {
2636
+ list-style: none;
2637
+ }
2638
+ table {
2639
+ width: 100%;
2640
+ border-collapse: collapse;
2641
+ border-spacing: 0;
2642
+ table-layout: fixed;
2643
+ }
2644
+ label {
2645
+ display: block;
2646
+ }
2647
+ legend,
2648
+ caption {
2649
+ display: none;
2650
+ }
2651
+ article,
2652
+ aside,
2653
+ footer,
2654
+ header,
2655
+ main,
2656
+ nav,
2657
+ section,
2658
+ time,
2659
+ audio,
2660
+ canvas,
2661
+ figure,
2662
+ figcaption,
2663
+ video,
2664
+ meter,
2665
+ progress,
2666
+ details,
2667
+ summary {
2668
+ display: block;
2669
+ }
2670
+ figure {
2671
+ position: relative;
2672
+ width: fit-content;
2673
+ height: fit-content;
2674
+ font-size: 0;
2675
+ }
2676
+ a {
2677
+ display: block;
2678
+ color: #333;
2679
+ text-decoration: none;
2680
+ cursor: pointer;
2681
+ }
2682
+ input,
2683
+ select,
2684
+ button,
2685
+ textarea {
2686
+ display: block;
2687
+ max-width: 100%;
2688
+ background: transparent;
2689
+ border-radius: 0;
2690
+ box-shadow: none;
2691
+ outline: none;
2692
+ caret-color: transparent;
2693
+ appearance: none;
2694
+ }
2695
+ button {
2696
+ cursor: pointer;
2697
+ font-family: inherit;
2698
+ user-select: none;
2699
+ }
2700
+ textarea {
2701
+ resize: none;
2702
+ }
2703
+ select {
2704
+ user-select: none;
2705
+ }
2706
+ select::-ms-expand {
2707
+ opacity: 0;
2708
+ }
2709
+ input::placeholder,
2710
+ textarea::placeholder {
2711
+ opacity: 1;
2712
+ color: #959595;
2713
+ }
2714
+ input:focus::placeholder,
2715
+ textarea:focus::placeholder {
2716
+ color: transparent;
2717
+ }
2718
+ [type=button],
2719
+ [type=reset],
2720
+ [type=submit] {
2721
+ appearance: button;
2722
+ }
2723
+ [type=search] {
2724
+ appearance: textfield;
2725
+ outline-offset: -2px;
2726
+ }
2727
+ :-webkit-inner-spin-button,
2728
+ ::-webkit-outer-spin-button {
2729
+ height: auto;
2730
+ }
2731
+ ::-webkit-search-decoration,
2732
+ ::-webkit-search-cancel-button {
2733
+ appearance: none;
2734
+ }
2735
+ ::-webkit-file-upload-button {
2736
+ appearance: button;
2737
+ }
2738
+ input[type=date],
2739
+ input[type=number] {
2740
+ appearance: none;
2741
+ }
2742
+ input[type=date]::-webkit-inner-spin-button,
2743
+ input[type=number]::-webkit-inner-spin-button {
2744
+ display: none;
2745
+ }
2746
+ input[type=date]::-webkit-calendar-picker-indicator,
2747
+ input[type=number]::-webkit-calendar-picker-indicator {
2748
+ opacity: 0;
2749
+ }
2750
+ input[type=date]::-webkit-clear-button,
2751
+ input[type=number]::-webkit-clear-button {
2752
+ display: none;
2753
+ }
2754
+ input[type=date]::-ms-clear,
2755
+ input[type=number]::-ms-clear {
2756
+ display: none;
2757
+ }
2758
+ input[type=range]::-webkit-slider-thumb {
2759
+ appearance: none;
2760
+ }
2761
+ input[type=checkbox] {
2762
+ appearance: checkbox;
2763
+ }
2764
+ button:disabled {
2765
+ cursor: default;
2766
+ }
2767
+ progress {
2768
+ appearance: none;
2769
+ border: 1px solid #e1e1e1;
2770
+ }
2771
+ progress::-webkit-progress-bar {
2772
+ background-color: #fff;
2773
+ }
2774
+ progress::-webkit-progress-value {
2775
+ background-color: grey;
2776
+ }
2777
+ @media (orientation: landscape) {
2778
+ html.mobile-device {
2779
+ font-size: 1vw;
2780
+ }
2781
+ }
2782
+ @media (orientation: portrait) {
2783
+ html.mobile-device {
2784
+ font-size: 1vw;
2785
+ }
2786
+ }
2787
+ html,
2788
+ body {
2789
+ width: 100%;
2790
+ height: 100%;
2791
+ position: fixed;
2792
+ top: 0;
2793
+ left: 0;
2794
+ overflow: auto;
2795
+ z-index: 0;
2796
+ }
3343
2797
  }
3344
-
3345
- .segmented-control-item-label {
3346
- font-size: var(--segmented-item-font-size);
3347
- font-weight: var(--segmented-item-font-weight);
3348
- line-height: var(--segmented-item-line-height);
3349
- letter-spacing: 0.2px;
3350
- color: var(--segmented-label-color);
3351
- transition: color 0.2s ease;
2798
+ @layer foundation.color {
2799
+ :root {
2800
+ --color-common-100: #fff;
2801
+ --color-common-0: #000;
2802
+ --color-neutral-10: #1a1a1a;
2803
+ --color-neutral-20: #333333;
2804
+ --color-neutral-30: #4d4d4d;
2805
+ --color-neutral-40: #666666;
2806
+ --color-neutral-45: #737373;
2807
+ --color-neutral-50: #808080;
2808
+ --color-neutral-55: #8c8c8c;
2809
+ --color-neutral-60: #999999;
2810
+ --color-neutral-70: #b3b3b3;
2811
+ --color-neutral-80: #cccccc;
2812
+ --color-neutral-90: #e6e6e6;
2813
+ --color-neutral-95: #f2f2f2;
2814
+ --color-neutral-99: #fcfcfc;
2815
+ --color-cool-gray-10: #18191b;
2816
+ --color-cool-gray-20: #313235;
2817
+ --color-cool-gray-25: #3d3f43;
2818
+ --color-cool-gray-30: #494b50;
2819
+ --color-cool-gray-35: #55585e;
2820
+ --color-cool-gray-40: #61656b;
2821
+ --color-cool-gray-45: #6d7178;
2822
+ --color-cool-gray-50: #797e86;
2823
+ --color-cool-gray-55: #878b92;
2824
+ --color-cool-gray-60: #94989e;
2825
+ --color-cool-gray-65: #a1a5aa;
2826
+ --color-cool-gray-70: #afb1b6;
2827
+ --color-cool-gray-75: #bcbec2;
2828
+ --color-cool-gray-80: #cacbce;
2829
+ --color-cool-gray-85: #d7d8db;
2830
+ --color-cool-gray-90: #e4e5e7;
2831
+ --color-cool-gray-95: #f2f2f3;
2832
+ --color-cool-gray-99: #fcfcfd;
2833
+ --color-blue-10: #001233;
2834
+ --color-blue-20: #002466;
2835
+ --color-blue-30: #003699;
2836
+ --color-blue-40: #0047cc;
2837
+ --color-blue-45: #0050e5;
2838
+ --color-blue-50: #0059ff;
2839
+ --color-blue-55: #1a6aff;
2840
+ --color-blue-60: #337aff;
2841
+ --color-blue-70: #669cff;
2842
+ --color-blue-80: #99bdff;
2843
+ --color-blue-90: #ccdeff;
2844
+ --color-blue-95: #e5eeff;
2845
+ --color-blue-99: #fafcff;
2846
+ --color-purple-10: #120033;
2847
+ --color-purple-20: #240066;
2848
+ --color-purple-30: #360099;
2849
+ --color-purple-40: #4800cc;
2850
+ --color-purple-45: #5200e5;
2851
+ --color-purple-50: #5b00ff;
2852
+ --color-purple-55: #6c1bff;
2853
+ --color-purple-60: #7b33ff;
2854
+ --color-purple-70: #9c66ff;
2855
+ --color-purple-80: #bd99ff;
2856
+ --color-purple-90: #deccff;
2857
+ --color-purple-95: #efe5ff;
2858
+ --color-purple-99: #fcfaff;
2859
+ --color-magenta-10: #32012e;
2860
+ --color-magenta-20: #64025b;
2861
+ --color-magenta-30: #950489;
2862
+ --color-magenta-40: #c705b6;
2863
+ --color-magenta-45: #e005cd;
2864
+ --color-magenta-50: #f906e4;
2865
+ --color-magenta-55: #fa1fe7;
2866
+ --color-magenta-60: #fa38e9;
2867
+ --color-magenta-70: #fb6aef;
2868
+ --color-magenta-80: #fd9bf4;
2869
+ --color-magenta-90: #fecdfa;
2870
+ --color-magenta-95: #fee6fc;
2871
+ --color-magenta-99: #fffafe;
2872
+ --color-pink-10: #320116;
2873
+ --color-pink-20: #63032b;
2874
+ --color-pink-30: #950441;
2875
+ --color-pink-40: #c70556;
2876
+ --color-pink-45: #e00661;
2877
+ --color-pink-50: #f8076c;
2878
+ --color-pink-55: #f91f7a;
2879
+ --color-pink-60: #fa3889;
2880
+ --color-pink-70: #fb6aa7;
2881
+ --color-pink-80: #fc9cc4;
2882
+ --color-pink-90: #fecde2;
2883
+ --color-pink-95: #fee6f0;
2884
+ --color-pink-99: #fffafc;
2885
+ --color-red-10: #310602;
2886
+ --color-red-20: #610d05;
2887
+ --color-red-30: #921307;
2888
+ --color-red-40: #c21a0a;
2889
+ --color-red-45: #da1d0b;
2890
+ --color-red-50: #f2200d;
2891
+ --color-red-55: #f43625;
2892
+ --color-red-60: #f54d3d;
2893
+ --color-red-70: #f7796e;
2894
+ --color-red-80: #faa69e;
2895
+ --color-red-90: #fcd2cf;
2896
+ --color-red-95: #fde8e7;
2897
+ --color-red-99: #fffafa;
2898
+ --color-orange-10: #331100;
2899
+ --color-orange-20: #662200;
2900
+ --color-orange-30: #993300;
2901
+ --color-orange-40: #cc4400;
2902
+ --color-orange-45: #e54d00;
2903
+ --color-orange-50: #ff5500;
2904
+ --color-orange-55: #ff661a;
2905
+ --color-orange-60: #ff7733;
2906
+ --color-orange-70: #ff9966;
2907
+ --color-orange-80: #ffbb99;
2908
+ --color-orange-90: #ffddcc;
2909
+ --color-orange-95: #ffeee5;
2910
+ --color-orange-99: #fffcfa;
2911
+ --color-yellow-10: #302903;
2912
+ --color-yellow-20: #615205;
2913
+ --color-yellow-30: #917a08;
2914
+ --color-yellow-40: #c2a30a;
2915
+ --color-yellow-45: #dab80b;
2916
+ --color-yellow-50: #f2cc0d;
2917
+ --color-yellow-55: #f4d125;
2918
+ --color-yellow-60: #f5d63d;
2919
+ --color-yellow-70: #f7e06e;
2920
+ --color-yellow-80: #faeb9e;
2921
+ --color-yellow-90: #fcf5cf;
2922
+ --color-yellow-95: #fefae7;
2923
+ --color-yellow-99: #fffefa;
2924
+ --color-lime-10: #2b3300;
2925
+ --color-lime-20: #556600;
2926
+ --color-lime-30: #809900;
2927
+ --color-lime-40: #aacc00;
2928
+ --color-lime-45: #bfe500;
2929
+ --color-lime-50: #d5ff00;
2930
+ --color-lime-55: #d9ff1a;
2931
+ --color-lime-60: #ddff33;
2932
+ --color-lime-70: #e6ff66;
2933
+ --color-lime-80: #eeff99;
2934
+ --color-lime-90: #f7ffcc;
2935
+ --color-lime-95: #fbffe5;
2936
+ --color-lime-99: #fefffa;
2937
+ --color-green-10: #062d13;
2938
+ --color-green-20: #0d5926;
2939
+ --color-green-30: #138639;
2940
+ --color-green-40: #1ab24d;
2941
+ --color-green-45: #1dc956;
2942
+ --color-green-50: #20df60;
2943
+ --color-green-55: #36e270;
2944
+ --color-green-60: #4de580;
2945
+ --color-green-70: #79ec9f;
2946
+ --color-green-80: #a6f2bf;
2947
+ --color-green-90: #d2f9df;
2948
+ --color-green-95: #e9fcef;
2949
+ --color-green-99: #fbfefc;
2950
+ --color-bright-green-10: #213003;
2951
+ --color-bright-green-20: #426105;
2952
+ --color-bright-green-30: #639108;
2953
+ --color-bright-green-40: #84c10b;
2954
+ --color-bright-green-45: #95da0c;
2955
+ --color-bright-green-50: #a5f20d;
2956
+ --color-bright-green-55: #aef325;
2957
+ --color-bright-green-60: #b7f43e;
2958
+ --color-bright-green-70: #c9f76e;
2959
+ --color-bright-green-80: #dbfa9e;
2960
+ --color-bright-green-90: #edfccf;
2961
+ --color-bright-green-95: #f6fee7;
2962
+ --color-bright-green-99: #fdfffa;
2963
+ --color-teal-10: #062d20;
2964
+ --color-teal-20: #0d5940;
2965
+ --color-teal-30: #13865f;
2966
+ --color-teal-40: #1ab27f;
2967
+ --color-teal-45: #1dc98f;
2968
+ --color-teal-50: #20df9f;
2969
+ --color-teal-55: #36e2a9;
2970
+ --color-teal-60: #4de5b2;
2971
+ --color-teal-70: #79ecc5;
2972
+ --color-teal-80: #a6f2d9;
2973
+ --color-teal-90: #d2f9ec;
2974
+ --color-teal-95: #e9fcf5;
2975
+ --color-teal-99: #fbfefd;
2976
+ --color-cyan-10: #002f33;
2977
+ --color-cyan-20: #005e66;
2978
+ --color-cyan-30: #008c99;
2979
+ --color-cyan-40: #00bbcc;
2980
+ --color-cyan-45: #00d2e5;
2981
+ --color-cyan-50: #00eaff;
2982
+ --color-cyan-55: #1aecff;
2983
+ --color-cyan-60: #33eeff;
2984
+ --color-cyan-70: #66f2ff;
2985
+ --color-cyan-80: #99f7ff;
2986
+ --color-cyan-90: #ccfbff;
2987
+ --color-cyan-95: #e5fdff;
2988
+ --color-cyan-99: #faffff;
2989
+ --color-primary-default: var(--color-blue-55);
2990
+ --color-primary-strong: var(--color-blue-45);
2991
+ --color-primary-heavy: var(--color-blue-30);
2992
+ --color-secondary-default: var(--color-blue-95);
2993
+ --color-secondary-strong: var(--color-blue-90);
2994
+ --color-secondary-heavy: var(--color-blue-80);
2995
+ --color-tertiary-default: var(--color-cool-gray-95);
2996
+ --color-tertiary-strong: var(--color-cool-gray-90);
2997
+ --color-tertiary-heavy: var(--color-cool-gray-80);
2998
+ --color-label-strong: var(--color-cool-gray-10);
2999
+ --color-label-standard: var(--color-cool-gray-20);
3000
+ --color-label-neutral: var(--color-cool-gray-50);
3001
+ --color-label-alternative: var(--color-cool-gray-70);
3002
+ --color-label-assistive: var(--color-cool-gray-80);
3003
+ --color-label-disabled: var(--color-cool-gray-80);
3004
+ --color-border-standard-cool-gray: var(--color-cool-gray-90);
3005
+ --color-border-standard-blue: var(--color-blue-90);
3006
+ --color-border-standard-strong: var(--color-cool-gray-75);
3007
+ --color-border-standard-heavy: var(--color-cool-gray-20);
3008
+ --color-border-standard-alternative: var(--color-cool-gray-80);
3009
+ --color-border-standard-assistive: var(--color-cool-gray-90);
3010
+ --color-bg-standard-cool-gray: var(--color-cool-gray-99);
3011
+ --color-bg-alternative-cool-gray: var(--color-cool-gray-95);
3012
+ --color-bg-standard-neutral: var(--color-neutral-99);
3013
+ --color-bg-alternative-neutral: var(--color-neutral-95);
3014
+ --color-bg-surface-static-white: var(--color-common-100);
3015
+ --color-bg-surface-static-cool-gray: var(--color-cool-gray-99);
3016
+ --color-bg-surface-static-blue: var(--color-blue-95);
3017
+ --color-bg-surface-neutral: var(--color-neutral-95);
3018
+ --color-bg-surface-standard: var(--color-cool-gray-95);
3019
+ --color-bg-surface-strong: var(--color-neutral-80);
3020
+ --color-bg-surface-heavy: var(--color-cool-gray-20);
3021
+ --color-interaction-static: var(--color-common-100);
3022
+ --color-interaction-disabled: var(--color-cool-gray-95);
3023
+ --color-danger: var(--color-red-40);
3024
+ --color-error: var(--color-red-45);
3025
+ --color-warning: var(--color-yellow-50);
3026
+ --color-success: var(--color-green-40);
3027
+ --color-information: var(--color-blue-60);
3028
+ --color-new: var(--color-red-50);
3029
+ }
3352
3030
  }
3353
-
3354
- .segmented-control-item:where([data-state=on]) .segmented-control-item-label {
3355
- color: var(--segmented-label-active-color);
3031
+ @layer foundation.spacing {
3032
+ :root {
3033
+ --spacing-padding-1: 2px;
3034
+ --spacing-padding-2: 4px;
3035
+ --spacing-padding-3: 6px;
3036
+ --spacing-padding-4: 8px;
3037
+ --spacing-padding-5: 12px;
3038
+ --spacing-padding-6: 16px;
3039
+ --spacing-padding-7: 20px;
3040
+ --spacing-padding-8: 24px;
3041
+ --spacing-padding-9: 28px;
3042
+ --spacing-padding-10: 32px;
3043
+ --spacing-padding-11: 40px;
3044
+ --spacing-gap-1: 2px;
3045
+ --spacing-gap-2: 4px;
3046
+ --spacing-gap-3: 6px;
3047
+ --spacing-gap-4: 8px;
3048
+ --spacing-gap-5: 12px;
3049
+ --spacing-gap-6: 16px;
3050
+ --spacing-gap-7: 20px;
3051
+ --spacing-gap-8: 24px;
3052
+ --spacing-gap-9: 28px;
3053
+ --spacing-gap-10: 32px;
3054
+ --spacing-gap-11: 36px;
3055
+ --spacing-gap-12: 40px;
3056
+ --spacing-gap-13: 48px;
3057
+ --spacing-gap-14: 64px;
3058
+ --spacing-gap-15: 80px;
3059
+ }
3356
3060
  }
3357
-
3358
- /* TODO(select): 스타일을 SOT 토큰 값으로 정의한다. */
3359
- /* TODO(spinner): 스타일을 SOT 토큰 값으로 정의한다. */
3360
- .tab-root {
3361
- /* Figma node 694:4619 측정값을 CSS 변수로 고정해 Storybook과 실 서비스 간 시각 편차를 줄인다. */
3362
- --tab-label-font-size: var(--font-heading-xsmall-size, 17px);
3363
- --tab-label-font-weight: var(--font-heading-xsmall-weight, 600);
3364
- --tab-label-line-height: 1.4;
3365
- --tab-label-letter-spacing: 0px;
3366
- --tab-gap: var(--spacing-gap-2, 8px);
3367
- --tab-padding-y: 10px;
3368
- --tab-padding-x: var(--spacing-padding-8, 24px);
3369
- --tab-icon-gap: 6px;
3370
- --tab-line-track-color: var(--color-border-divider, #f2f2f3);
3371
- --tab-line-track-height: 1px;
3372
- --tab-line-indicator-height: 2px;
3373
- --tab-color-active-default: #1a6aff;
3374
- --tab-color-active: var(--tab-color-active-default);
3375
- --tab-color-hover: color-mix(in srgb, var(--tab-color-active), #000 15%);
3376
- --tab-line-hover-color: var(--tab-color-hover, var(--tab-color-active));
3377
- --tab-fill-hover-bg: var(--color-bg-alternative-cool-gray, #f2f2f3);
3378
- --tab-fill-active-color: var(--color-common-100, #ffffff);
3379
- --tab-inactive-color: var(--color-label-alternative, #afb1b6);
3380
- --tab-disabled-opacity: 0.4;
3381
- --tab-height: 48px;
3382
- width: 100%;
3383
- display: flex;
3384
- flex-direction: column;
3385
- gap: var(--spacing-gap-3);
3061
+ @layer foundation.layout {
3062
+ :root {
3063
+ --theme-breakpoint-xsmall-start: 0px;
3064
+ --theme-breakpoint-small-start: 768px;
3065
+ --theme-breakpoint-medium-start: 992px;
3066
+ --theme-breakpoint-large-start: 1200px;
3067
+ --theme-size-xxsmall: 4px;
3068
+ --theme-size-xsmall-1: 8px;
3069
+ --theme-size-xsmall-2: 12px;
3070
+ --theme-size-xsmall-3: 16px;
3071
+ --theme-size-small-1: 20px;
3072
+ --theme-size-small-2: 24px;
3073
+ --theme-size-small-3: 32px;
3074
+ --theme-size-medium-1: 40px;
3075
+ --theme-size-medium-2: 48px;
3076
+ --theme-size-medium-3: 56px;
3077
+ --theme-size-medium-4: 64px;
3078
+ --theme-size-large-1: 72px;
3079
+ --theme-size-large-2: 80px;
3080
+ --theme-size-xlarge-1: 96px;
3081
+ --theme-size-xlarge-2: 120px;
3082
+ --theme-radius-4x4: 1px;
3083
+ --theme-radius-8x8: 2px;
3084
+ --theme-radius-12x12: 2px;
3085
+ --theme-radius-16x16: 2px;
3086
+ --theme-radius-20x20: 4px;
3087
+ --theme-radius-24x24: 4px;
3088
+ --theme-radius-32x32: 4px;
3089
+ --theme-radius-40x40: 6px;
3090
+ --theme-radius-48x48: 6px;
3091
+ --theme-radius-56x56: 8px;
3092
+ --theme-radius-64x64: 10px;
3093
+ --theme-radius-72x72: 12px;
3094
+ --theme-radius-80x80: 16px;
3095
+ --theme-radius-96x96: 16px;
3096
+ --theme-radius-120x120: 16px;
3097
+ --theme-radius-xxsmall: 1px;
3098
+ --theme-radius-xsmall: 2px;
3099
+ --theme-radius-small: 4px;
3100
+ --theme-radius-medium-1: 6px;
3101
+ --theme-radius-medium-2: 6px;
3102
+ --theme-radius-medium-3: 8px;
3103
+ --theme-radius-medium-4: 10px;
3104
+ --theme-radius-large-1: 12px;
3105
+ --theme-radius-large-2: 16px;
3106
+ --theme-radius-xlarge: 16px;
3107
+ }
3386
3108
  }
3387
-
3388
- .tab-root:where([data-scale=small]) {
3389
- --tab-label-font-size: var(--font-heading-xxsmall-size, 15px);
3390
- --tab-label-font-weight: var(--font-heading-xxsmall-weight, 600);
3391
- --tab-height: 40px;
3392
- --tab-padding-x: var(--spacing-padding-4, 8px);
3109
+ @layer foundation.typography {
3110
+ @font-face {
3111
+ font-family: "Pretendard JP Variable";
3112
+ src: url("./fonts/pretendard-jp/PretendardJPVariable.woff2") format("woff2");
3113
+ font-weight: 100 900;
3114
+ font-style: normal;
3115
+ font-display: swap;
3116
+ }
3117
+ @font-face {
3118
+ font-family: "InterVariable";
3119
+ src: url("./fonts/inter/InterVariable.woff2") format("woff2");
3120
+ font-weight: 100 900;
3121
+ font-style: normal;
3122
+ font-display: swap;
3123
+ }
3124
+ :root :root {
3125
+ --font-family-pretendard:
3126
+ "Pretendard JP Variable", "Pretendard JP", "Pretendard Variable",
3127
+ "Pretendard", "InterVariable", "Inter", "Noto Sans KR", "-apple-system",
3128
+ "BlinkMacSystemFont", "Apple SD Gothic Neo", "Segoe UI", "Roboto",
3129
+ "Helvetica Neue", "Helvetica", "Apple Color Emoji", "Segoe UI Emoji",
3130
+ "Segoe UI Symbol", "Malgun Gothic", "맑은 고딕", "돋움", "dotum",
3131
+ "Oxygen", "Oxygen-Sans", "Ubuntu", "Cantarell", "sans-serif";
3132
+ --font-family-inter:
3133
+ "InterVariable", "Inter", "Pretendard JP Variable", "Pretendard JP",
3134
+ "Pretendard Variable", "Pretendard", "-apple-system",
3135
+ "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica Neue", "Helvetica",
3136
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Malgun Gothic",
3137
+ "맑은 고딕", "돋움", "dotum", "Oxygen", "Oxygen-Sans", "Ubuntu",
3138
+ "Cantarell", "sans-serif";
3139
+ --font-family-system:
3140
+ "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto",
3141
+ "Helvetica Neue", "Helvetica", "Apple Color Emoji", "Segoe UI Emoji",
3142
+ "Segoe UI Symbol", "Malgun Gothic", "맑은 고딕", "돋움", "dotum",
3143
+ "Oxygen", "Oxygen-Sans", "Ubuntu", "Cantarell", "sans-serif";
3144
+ --font-family-sans: var(--font-family-pretendard);
3145
+ }
3146
+ :root {
3147
+ --font-display-large-size: 60px;
3148
+ --font-display-large-line-height: 1.4em;
3149
+ --font-display-large-letter-spacing: -0.2px;
3150
+ --font-display-large-weight: 700;
3151
+ --font-display-medium-size: 44px;
3152
+ --font-display-medium-line-height: 1.4em;
3153
+ --font-display-medium-letter-spacing: -0.2px;
3154
+ --font-display-medium-weight: 700;
3155
+ --font-display-small-size: 36px;
3156
+ --font-display-small-line-height: 1.4em;
3157
+ --font-display-small-letter-spacing: -0.2px;
3158
+ --font-display-small-weight: 600;
3159
+ --font-heading-xlarge-size: 40px;
3160
+ --font-heading-xlarge-line-height: 1.4em;
3161
+ --font-heading-xlarge-letter-spacing: -0.2px;
3162
+ --font-heading-xlarge-weight: 600;
3163
+ --font-heading-large-size: 32px;
3164
+ --font-heading-large-line-height: 1.4em;
3165
+ --font-heading-large-letter-spacing: -0.2px;
3166
+ --font-heading-large-weight: 600;
3167
+ --font-heading-medium-size: 24px;
3168
+ --font-heading-medium-line-height: 1.4em;
3169
+ --font-heading-medium-letter-spacing: 0px;
3170
+ --font-heading-medium-weight: 600;
3171
+ --font-heading-small-size: 19px;
3172
+ --font-heading-small-line-height: 1.4em;
3173
+ --font-heading-small-letter-spacing: 0px;
3174
+ --font-heading-small-weight: 600;
3175
+ --font-heading-xsmall-size: 17px;
3176
+ --font-heading-xsmall-line-height: 1.5em;
3177
+ --font-heading-xsmall-letter-spacing: 0px;
3178
+ --font-heading-xsmall-weight: 600;
3179
+ --font-heading-xxsmall-size: 15px;
3180
+ --font-heading-xxsmall-line-height: 1.5em;
3181
+ --font-heading-xxsmall-letter-spacing: 0px;
3182
+ --font-heading-xxsmall-weight: 600;
3183
+ --font-body-large-size: 19px;
3184
+ --font-body-large-line-height: 1.5em;
3185
+ --font-body-large-letter-spacing: 0px;
3186
+ --font-body-large-weight: 600;
3187
+ --font-body-medium-size: 17px;
3188
+ --font-body-medium-line-height: 1.5em;
3189
+ --font-body-medium-letter-spacing: 0px;
3190
+ --font-body-medium-weight: 500;
3191
+ --font-body-small-size: 16px;
3192
+ --font-body-small-line-height: 1.5em;
3193
+ --font-body-small-letter-spacing: 0px;
3194
+ --font-body-small-weight: 400;
3195
+ --font-body-xsmall-size: 15px;
3196
+ --font-body-xsmall-line-height: 1.5em;
3197
+ --font-body-xsmall-letter-spacing: 0px;
3198
+ --font-body-xsmall-weight: 400;
3199
+ --font-body-xxsmall-size: 13px;
3200
+ --font-body-xxsmall-line-height: 1.5em;
3201
+ --font-body-xxsmall-letter-spacing: 0px;
3202
+ --font-body-xxsmall-weight: 400;
3203
+ --font-label-large-size: 16px;
3204
+ --font-label-large-line-height: 1.5em;
3205
+ --font-label-large-letter-spacing: 0px;
3206
+ --font-label-large-weight: 400;
3207
+ --font-label-medium-size: 14px;
3208
+ --font-label-medium-line-height: 1.5em;
3209
+ --font-label-medium-letter-spacing: 0px;
3210
+ --font-label-medium-weight: 400;
3211
+ --font-label-small-size: 13px;
3212
+ --font-label-small-line-height: 1.5em;
3213
+ --font-label-small-letter-spacing: 0px;
3214
+ --font-label-small-weight: 500;
3215
+ --font-caption-large-size: 12px;
3216
+ --font-caption-large-line-height: 1.5em;
3217
+ --font-caption-large-letter-spacing: 0px;
3218
+ --font-caption-large-weight: 600;
3219
+ --font-caption-medium-size: 11px;
3220
+ --font-caption-medium-line-height: 1.5em;
3221
+ --font-caption-medium-letter-spacing: 0px;
3222
+ --font-caption-medium-weight: 500;
3223
+ }
3393
3224
  }
3394
-
3395
- .tab-root:where([data-scale=medium]) {
3396
- --tab-label-font-size: var(--font-heading-xsmall-size, 17px);
3397
- --tab-label-font-weight: var(--font-heading-xsmall-weight, 600);
3398
- --tab-height: 48px;
3225
+ :where(.radix-themes, .theme-root, :root) {
3226
+ --uds-modal-overlay-bg: var(--dialog-overlay-bg, rgba(5, 6, 12, 0.55));
3227
+ --uds-modal-surface-bg: var(--color-bg-surface-static-white);
3228
+ --uds-modal-surface-radius: var(--theme-radius-large-1);
3229
+ --uds-modal-surface-shadow: 0px 18px 40px rgba(8, 11, 30, 0.18);
3230
+ --uds-modal-max-width: min(
3231
+ 360px,
3232
+ calc(100vw - var(--spacing-padding-10) * 2)
3233
+ );
3234
+ --uds-modal-max-height: calc(100vh - var(--spacing-padding-10) * 2);
3399
3235
  }
3400
3236
 
3401
- .tab-root:where([data-scale=large]) {
3402
- --tab-label-font-size: var(--font-heading-small-size, 19px);
3403
- --tab-label-font-weight: var(--font-heading-small-weight, 600);
3404
- --tab-height: 56px;
3405
- --tab-padding-x: var(--spacing-padding-8, 24px);
3237
+ .uds-modal-root {
3238
+ position: fixed;
3239
+ inset: 0;
3240
+ z-index: calc(400 + var(--uds-modal-index, 0));
3241
+ display: flex;
3242
+ align-items: center;
3243
+ justify-content: center;
3244
+ padding: var(--spacing-padding-6);
3245
+ pointer-events: none;
3406
3246
  }
3407
3247
 
3408
- .tab-list {
3248
+ .uds-modal-surface {
3249
+ position: relative;
3250
+ width: 100%;
3251
+ max-width: var(--uds-modal-max-width);
3252
+ max-height: var(--uds-modal-max-height);
3253
+ background-color: var(--uds-modal-surface-bg);
3254
+ border-radius: var(--uds-modal-surface-radius);
3255
+ box-shadow: var(--uds-modal-surface-shadow);
3256
+ pointer-events: auto;
3409
3257
  display: flex;
3410
- align-items: stretch;
3411
- gap: var(--tab-gap);
3412
- width: fit-content;
3413
- overflow-x: auto;
3414
- scrollbar-width: none;
3258
+ flex-direction: column;
3259
+ overflow: hidden;
3415
3260
  }
3416
3261
 
3417
- .tab-list::-webkit-scrollbar {
3418
- display: none;
3262
+ .uds-modal-dimmer {
3263
+ position: absolute;
3264
+ inset: 0;
3265
+ background-color: var(--uds-modal-overlay-bg);
3266
+ pointer-events: auto;
3419
3267
  }
3420
3268
 
3421
- .tab-list:where([data-full-width=true]) {
3422
- width: 100%;
3269
+ .uds-modal-root[data-state=init], .uds-modal-root[data-state=open] {
3270
+ pointer-events: auto;
3423
3271
  }
3424
-
3425
- .tab-trigger {
3426
- position: relative;
3427
- display: flex;
3428
- align-items: center;
3429
- justify-content: center;
3430
- gap: var(--tab-icon-gap);
3431
- min-height: var(--tab-height);
3432
- padding: var(--tab-padding-y) var(--tab-padding-x);
3433
- background: transparent;
3434
- border: none;
3435
- cursor: pointer;
3436
- transition: background-color 0.2s ease;
3272
+ .uds-modal-root[data-state=closed] {
3273
+ pointer-events: none;
3437
3274
  }
3438
3275
 
3439
- .tab-trigger:where(:focus-visible) {
3440
- outline: 2px solid var(--color-focus-ring, var(--color-primary-default));
3441
- outline-offset: 2px;
3276
+ .uds-modal-dimmer {
3277
+ opacity: 0;
3278
+ transition: opacity 0.2s ease;
3442
3279
  }
3443
-
3444
- .tab-trigger:where([data-disabled=true]) {
3445
- cursor: not-allowed;
3446
- opacity: var(--tab-disabled-opacity);
3280
+ .uds-modal-root[data-state=open] .uds-modal-dimmer {
3281
+ opacity: 1;
3447
3282
  }
3448
-
3449
- .tab-trigger-icon {
3450
- display: flex;
3451
- align-items: center;
3452
- justify-content: center;
3283
+ .uds-modal-root[data-state=closed] .uds-modal-dimmer {
3284
+ opacity: 0;
3453
3285
  }
3454
3286
 
3455
- .tab-trigger-label {
3287
+ .uds-modal-container {
3456
3288
  display: flex;
3457
- align-items: center;
3458
- justify-content: center;
3459
- font-size: var(--tab-label-font-size);
3460
- font-weight: var(--tab-label-font-weight);
3461
- line-height: var(--tab-label-line-height);
3462
- letter-spacing: var(--tab-label-letter-spacing);
3463
- color: var(--tab-inactive-color);
3464
- transition: color 0.2s ease;
3465
- }
3466
-
3467
- .tab-list:where([data-variant=line]) {
3468
- position: relative;
3289
+ flex-direction: column;
3469
3290
  width: 100%;
3470
3291
  }
3471
3292
 
3472
- .tab-list:where([data-variant=line])::before {
3473
- content: "";
3474
- position: absolute;
3475
- inset: auto 0 0;
3476
- height: var(--tab-line-track-height, 1px);
3477
- background: var(--tab-line-track-color);
3478
- z-index: 0;
3479
- }
3480
-
3481
- .tab-list:where([data-variant=line][data-full-width=true]) > .tab-trigger {
3482
- flex: 1;
3293
+ .uds-modal-header,
3294
+ .uds-modal-body {
3295
+ padding: 0;
3296
+ margin: 0;
3483
3297
  }
3484
3298
 
3485
- .tab-trigger:where([data-variant=line])::after {
3486
- content: "";
3487
- position: absolute;
3488
- left: 0;
3489
- right: 0;
3490
- bottom: -1px;
3491
- height: var(--tab-line-indicator-height, 2px);
3492
- background: transparent;
3493
- transform: scaleX(0);
3494
- transform-origin: center;
3495
- z-index: 1;
3496
- transition: transform 0.2s ease, background-color 0.2s ease;
3299
+ .uds-modal-footer {
3300
+ padding: 0;
3301
+ border-top: none;
3497
3302
  }
3498
3303
 
3499
- .tab-trigger:where([data-variant=line][data-state=active]) .tab-trigger-label {
3500
- color: var(--tab-color-active);
3304
+ .uds-modal-footer-buttons {
3305
+ display: flex;
3306
+ width: 100%;
3307
+ gap: var(--spacing-gap-4, 16px);
3308
+ padding: var(--spacing-padding-6, 16px);
3309
+ align-items: stretch;
3501
3310
  }
3502
-
3503
- .tab-trigger:where([data-variant=line][data-state=active])::after {
3504
- background: var(--tab-color-active);
3505
- transform: scaleX(1);
3311
+ .uds-modal-footer-buttons[data-count="1"] .uds-modal-footer-button {
3312
+ width: 100%;
3506
3313
  }
3507
-
3508
- .tab-trigger:where([data-variant=line]):where(:not([data-state=active])):hover .tab-trigger-label {
3509
- color: var(--tab-line-hover-color);
3314
+ .uds-modal-footer-buttons[data-count="2"] .uds-modal-footer-button {
3315
+ flex: 1 1 0;
3510
3316
  }
3511
-
3512
- .tab-list:where([data-variant=fill]) {
3513
- width: fit-content;
3514
- border: none;
3515
- background: transparent;
3516
- border-radius: 0;
3317
+ .uds-modal-footer-buttons[data-appearance=text] {
3318
+ padding: 0;
3517
3319
  gap: 0;
3320
+ min-height: var(--notice-dialog-action-height, 56px);
3321
+ border-top: 1px solid var(--uds-modal-footer-border-color, var(--dialog-border-color, var(--color-border-standard-cool-gray, #e4e5e7)));
3518
3322
  }
3519
-
3520
- .tab-list:where([data-variant=fill][data-full-width=true]) {
3521
- width: 100%;
3522
- }
3523
-
3524
- .tab-list:where([data-variant=fill][data-full-width=true]) > .tab-trigger {
3525
- flex: 1;
3526
- }
3527
-
3528
- .tab-trigger:where([data-variant=fill]) {
3529
- border-radius: 12px;
3530
- min-width: 0;
3323
+ .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-button {
3324
+ border-radius: 0;
3531
3325
  }
3532
-
3533
- .tab-trigger:where([data-variant=fill][data-state=active]) {
3534
- background: var(--tab-color-active);
3326
+ .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-button + .uds-modal-footer-button {
3327
+ border-left: 1px solid var(--uds-modal-footer-border-color, var(--dialog-border-color, var(--color-border-standard-cool-gray, #e4e5e7)));
3535
3328
  }
3536
3329
 
3537
- .tab-trigger:where([data-variant=fill][data-state=active]) .tab-trigger-label {
3538
- color: var(--tab-fill-active-color);
3330
+ .uds-modal-footer-button-solid {
3331
+ min-height: 48px;
3539
3332
  }
3540
3333
 
3541
- .tab-trigger:where([data-variant=fill]):where(:not([data-state=active])):hover {
3542
- background: var(--tab-fill-hover-bg);
3334
+ .uds-modal-footer-button-text {
3335
+ min-height: 56px;
3336
+ justify-content: center;
3337
+ border-radius: 0;
3543
3338
  }
3544
3339
 
3545
- .tab-content {
3546
- display: block;
3547
- padding: var(--spacing-padding-6) 0;
3340
+ .uds-modal-alert-message {
3341
+ padding: var(--spacing-padding-10, 32px) var(--spacing-padding-8, 24px);
3342
+ text-align: center;
3343
+ color: var(--dialog-body-color);
3344
+ word-break: keep-all;
3548
3345
  }
3549
-
3550
- /* TODO(table): 스타일을 SOT 토큰 값으로 정의한다. */
3551
- :root {
3552
- --divider-width: 1px;
3553
- --divider-height: 12px;
3554
- --divider-color: var(--color-border-standard-cool-gray, #e4e5e7);
3555
- --divider-margin: var(--spacing-gap-4, 8px);
3346
+ .uds-modal-alert-message > p,
3347
+ .uds-modal-alert-message > span,
3348
+ .uds-modal-alert-message > strong,
3349
+ .uds-modal-alert-message > em {
3350
+ margin: 0;
3351
+ font-size: var(--dialog-body-font-size);
3352
+ line-height: 1.5em;
3353
+ font-weight: var(--font-body-small-weight, 400);
3354
+ word-break: inherit;
3556
3355
  }
3557
-
3558
- .divider {
3559
- width: var(--divider-width);
3560
- height: var(--divider-height);
3561
- background-color: var(--divider-color);
3562
- margin: 0 var(--divider-margin);
3563
- vertical-align: middle;
3564
- align-self: center;
3565
- font-size: 0;
3356
+ .uds-modal-alert-message > * + * {
3357
+ margin-top: var(--spacing-gap-2, 8px);
3566
3358
  }
3567
3359
 
3568
- /* 템플릿 레벨 스타일을 통합해 서비스 앱이 단일 엔트리만 import하도록 구성한다. */
3569
- :root {
3570
- --frame-device-height: 812px;
3571
- --frame-device-width: 480px;
3572
- --frame-safe-area-top: env(safe-area-inset-top, 0px);
3573
- --frame-safe-area-bottom: env(safe-area-inset-bottom, 0px);
3574
- --page-frame-height: min(100svh, 100dvh, var(--frame-device-height, 812px));
3575
- --page-frame-header-padding-top: var(--frame-safe-area-top);
3576
- --page-frame-footer-safe-area: var(--frame-safe-area-bottom);
3577
- --page-frame-max-width: var(
3578
- --frame-device-width,
3579
- 480px
3580
- );
3360
+ .uds-modal-dialog-header,
3361
+ .uds-modal-dialog-body {
3362
+ padding: 0;
3363
+ margin: 0;
3581
3364
  }
3582
3365
 
3583
- .page-frame-container {
3584
- display: grid;
3585
- grid-template-rows: auto 1fr auto;
3586
- width: min(100%, var(--page-frame-max-width));
3587
- margin: 0 auto;
3588
- height: var(--page-frame-height);
3589
- background-color: var(--color-common-100, #ffffff);
3590
- color: inherit;
3366
+ .uds-modal-dialog-header-content {
3367
+ padding: var(--spacing-padding-7, 20px) var(--spacing-padding-6, 16px);
3368
+ text-align: center;
3591
3369
  }
3592
-
3593
- .page-frame-header,
3594
- .page-frame-body,
3595
- .page-frame-footer {
3596
- width: 100%;
3370
+ .uds-modal-dialog-header-content > h3 {
3371
+ margin: 0;
3372
+ color: var(--dialog-title-color);
3373
+ font-size: var(--dialog-title-font-size);
3374
+ line-height: var(--dialog-title-line-height);
3375
+ font-weight: var(--dialog-title-weight);
3597
3376
  }
3598
3377
 
3599
- .page-frame-header {
3600
- padding-top: var(--page-frame-header-padding-top);
3378
+ .uds-modal-dialog-body-content {
3379
+ padding: var(--spacing-padding-7, 20px) var(--spacing-padding-6, 16px);
3380
+ text-align: center;
3381
+ color: var(--dialog-body-color);
3382
+ word-break: keep-all;
3601
3383
  }
3602
-
3603
- .page-frame-body {
3604
- min-height: 0;
3605
- overflow-y: auto;
3384
+ .uds-modal-dialog-body-content > p,
3385
+ .uds-modal-dialog-body-content > span,
3386
+ .uds-modal-dialog-body-content > strong,
3387
+ .uds-modal-dialog-body-content > em {
3388
+ margin: 0;
3389
+ font-size: var(--dialog-body-font-size);
3390
+ line-height: 1.5em;
3391
+ font-weight: var(--font-body-small-weight, 400);
3392
+ word-break: inherit;
3606
3393
  }
3607
-
3608
- .page-frame-footer {
3609
- padding-bottom: var(--page-frame-footer-safe-area);
3394
+ .uds-modal-dialog-body-content > * + * {
3395
+ margin-top: var(--spacing-gap-2, 8px);
3610
3396
  }
3611
3397
 
3612
- .page-frame-mobile {
3613
- width: 100%;
3614
- height: 100%;
3615
- min-height: var(--page-frame-height, var(--frame-device-height, 812px));
3616
- max-height: 100dvh;
3617
- background-color: var(--color-common-100, #ffffff);
3398
+ .uds-modal-surface {
3399
+ opacity: 0;
3400
+ transform: translate3d(0, 12px, 0);
3401
+ transition: opacity 0.2s ease, transform 0.2s ease;
3618
3402
  }
3619
-
3620
- .page-frame-mobile-header,
3621
- .page-frame-mobile-body,
3622
- .page-frame-mobile-footer {
3623
- width: 100%;
3403
+ .uds-modal-root[data-state=open] .uds-modal-surface {
3404
+ opacity: 1;
3405
+ transform: translate3d(0, 0, 0);
3624
3406
  }
3625
-
3626
- .page-frame-mobile-body {
3627
- background-color: inherit;
3407
+ .uds-modal-root[data-state=closed] .uds-modal-surface {
3408
+ opacity: 0;
3409
+ transform: translate3d(0, 12px, 0);
3410
+ pointer-events: none;
3628
3411
  }
3629
3412
 
3630
- .page-frame-navigation {
3631
- width: 100%;
3413
+ @media (prefers-reduced-motion: reduce) {
3414
+ .uds-modal-surface {
3415
+ transition: none;
3416
+ }
3632
3417
  }