@nurihaus/web-design-system 3.0.0 → 3.0.3

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 (124) hide show
  1. package/README.md +104 -5
  2. package/dist/.storybook/story-kit.d.ts +18 -0
  3. package/dist/ai/components.md +742 -0
  4. package/dist/ai/tokens.md +319 -0
  5. package/dist/avatar.js +336 -0
  6. package/dist/check-box.js +379 -0
  7. package/dist/chunk-149.js +57 -0
  8. package/dist/chunk-298.js +34 -0
  9. package/dist/chunk-302.js +105 -0
  10. package/dist/chunk-309.js +36 -0
  11. package/dist/chunk-364.js +126 -0
  12. package/dist/chunk-387.js +37 -0
  13. package/dist/chunk-558.js +200 -0
  14. package/dist/chunk-563.js +181 -0
  15. package/dist/chunk-739.js +68 -0
  16. package/dist/chunk-777.js +117 -0
  17. package/dist/chunk-917.js +35 -0
  18. package/dist/chunk-933.js +70 -0
  19. package/dist/chunk-976.js +29 -0
  20. package/dist/collapsible-menu.js +394 -0
  21. package/dist/components/avatar/avatar-props.d.ts +2 -6
  22. package/dist/components/avatar/avatar-type.d.ts +4 -5
  23. package/dist/components/avatar/avatar.d.ts +1 -0
  24. package/dist/components/avatar/avatar.stories.d.ts +17 -1
  25. package/dist/components/badge/badge-props.d.ts +17 -80
  26. package/dist/components/badge/badge-type.d.ts +38 -2
  27. package/dist/components/badge/badge.stories.d.ts +25 -2
  28. package/dist/components/badge/base-badge.d.ts +2 -1
  29. package/dist/components/badge/icon-text-badge.d.ts +3 -21
  30. package/dist/components/badge/icon-text-option-badge.d.ts +2 -15
  31. package/dist/components/badge/option-badge.d.ts +3 -20
  32. package/dist/components/button/button-props.d.ts +2 -7
  33. package/dist/components/button/button-type.d.ts +11 -3
  34. package/dist/components/button/button.stories.d.ts +13 -10
  35. package/dist/components/button/cta-button.d.ts +3 -12
  36. package/dist/components/check-box/base-check-box.d.ts +9 -5
  37. package/dist/components/check-box/check-box-props.d.ts +2 -7
  38. package/dist/components/check-box/check-box-type.d.ts +11 -4
  39. package/dist/components/check-box/check-box.d.ts +3 -10
  40. package/dist/components/check-box/check-box.stories.d.ts +19 -4
  41. package/dist/components/collapsible-menu/base-collapsible-menu.d.ts +9 -5
  42. package/dist/components/collapsible-menu/collapsible-menu-props.d.ts +3 -12
  43. package/dist/components/collapsible-menu/collapsible-menu-type.d.ts +33 -9
  44. package/dist/components/collapsible-menu/collapsible-menu.d.ts +3 -23
  45. package/dist/components/collapsible-menu/collapsible-menu.stories.d.ts +20 -4
  46. package/dist/components/drop-down/base-drop-down.d.ts +11 -3
  47. package/dist/components/drop-down/drop-down-props.d.ts +3 -12
  48. package/dist/components/drop-down/drop-down-type.d.ts +34 -15
  49. package/dist/components/drop-down/drop-down.d.ts +3 -32
  50. package/dist/components/drop-down/drop-down.stories.d.ts +23 -4
  51. package/dist/components/elements/text/base-text.d.ts +3 -0
  52. package/dist/components/elements/text/text-props.d.ts +16 -0
  53. package/dist/components/elements/text/text-type.d.ts +6 -2
  54. package/dist/components/elements/text/text.d.ts +2 -1
  55. package/dist/components/elements/text/text.stories.d.ts +43 -3
  56. package/dist/components/loading/index.d.ts +6 -6
  57. package/dist/components/loading/inline-loading/base-inline-loading.d.ts +3 -0
  58. package/dist/components/loading/inline-loading/inline-loading-props.d.ts +9 -0
  59. package/dist/components/loading/inline-loading/inline-loading-type.d.ts +8 -6
  60. package/dist/components/loading/inline-loading/inline-loading.d.ts +3 -2
  61. package/dist/components/loading/inline-loading/inline-loading.stories.d.ts +5 -9
  62. package/dist/components/loading/overlay-loading/base-overlay-loading.d.ts +3 -0
  63. package/dist/components/loading/overlay-loading/overlay-loading-props.d.ts +7 -0
  64. package/dist/components/loading/overlay-loading/overlay-loading-type.d.ts +6 -3
  65. package/dist/components/loading/overlay-loading/overlay-loading.d.ts +3 -3
  66. package/dist/components/loading/overlay-loading/overlay-loading.stories.d.ts +8 -8
  67. package/dist/components/loading/spinner/base-spinner.d.ts +4 -0
  68. package/dist/components/loading/spinner/spinner-props.d.ts +1 -0
  69. package/dist/components/loading/spinner/spinner-type.d.ts +4 -4
  70. package/dist/components/loading/spinner/spinner.d.ts +2 -2
  71. package/dist/components/loading/spinner/spinner.stories.d.ts +5 -12
  72. package/dist/components/modal/base-modal.d.ts +17 -5
  73. package/dist/components/modal/modal-props.d.ts +2 -7
  74. package/dist/components/modal/modal-type.d.ts +20 -10
  75. package/dist/components/modal/modal-with-double-button.d.ts +4 -16
  76. package/dist/components/modal/modal.stories.d.ts +15 -2
  77. package/dist/components/radio/base-radio.d.ts +9 -5
  78. package/dist/components/radio/radio-props.d.ts +1 -0
  79. package/dist/components/radio/radio-type.d.ts +6 -8
  80. package/dist/components/radio/radio.d.ts +2 -2
  81. package/dist/components/radio/radio.stories.d.ts +13 -4
  82. package/dist/components/table/base-table.d.ts +4 -5
  83. package/dist/components/table/data-table.d.ts +5 -22
  84. package/dist/components/table/table-type.d.ts +22 -1
  85. package/dist/components/table/table.stories.d.ts +19 -3
  86. package/dist/components/tabs/base-tabs.d.ts +7 -7
  87. package/dist/components/tabs/tabs-props.d.ts +1 -1
  88. package/dist/components/tabs/tabs-type.d.ts +9 -13
  89. package/dist/components/tabs/tabs.d.ts +3 -3
  90. package/dist/components/tabs/tabs.stories.d.ts +16 -10
  91. package/dist/components/text-field/base-text-field.d.ts +5 -3
  92. package/dist/components/text-field/text-field-props.d.ts +3 -12
  93. package/dist/components/text-field/text-field-type.d.ts +14 -0
  94. package/dist/components/text-field/text-field.d.ts +3 -16
  95. package/dist/components/text-field/text-field.stories.d.ts +24 -0
  96. package/dist/components/tooltip/base-tooltip.d.ts +13 -3
  97. package/dist/components/tooltip/tooltip-props.d.ts +3 -2
  98. package/dist/components/tooltip/tooltip-type.d.ts +17 -5
  99. package/dist/components/tooltip/tooltip.d.ts +4 -7
  100. package/dist/components/tooltip/tooltip.stories.d.ts +21 -4
  101. package/dist/components.css +1984 -0
  102. package/dist/cta-button.js +236 -0
  103. package/dist/data-table.js +386 -0
  104. package/dist/drop-down.js +433 -0
  105. package/dist/helpers/props/common-props.d.ts +7 -0
  106. package/dist/helpers/types/common-props.d.ts +8 -0
  107. package/dist/icon-text-badge.js +294 -0
  108. package/dist/icon-text-option-badge.js +270 -0
  109. package/dist/index.d.ts +17 -1
  110. package/dist/index.js +3021 -10637
  111. package/dist/loading.js +383 -0
  112. package/dist/modal-with-double-button.js +527 -0
  113. package/dist/option-badge.js +293 -0
  114. package/dist/radio.js +363 -0
  115. package/dist/reset.css +45 -0
  116. package/dist/styles.css +785 -559
  117. package/dist/tabs.js +421 -0
  118. package/dist/text-field.js +369 -0
  119. package/dist/text.js +233 -0
  120. package/dist/tokens.css +73 -0
  121. package/dist/tokens.js +4 -6
  122. package/dist/tooltip.js +360 -0
  123. package/package.json +91 -14
  124. package/dist/components/text-field/text-filed.stories.d.ts +0 -8
@@ -0,0 +1,1984 @@
1
+ /* 유틸리티 + 컴포넌트 스타일. 토큰·글꼴·리셋은 없다.
2
+ 글꼴을 앱이 직접 관리할 때 tokens.css 와 함께 가져온다. 컴포넌트 글자는 앱의 글꼴을 물려받는다. */
3
+
4
+ /* 컴포넌트 글자는 앱의 글꼴을 물려받는다. <button> 처럼 브라우저가 글꼴을 따로 주는 요소도 포함한다.
5
+ :where 로 우선순위를 0 으로 둔다. styles.css 에서는 token/font-face.css 의 .nuri-theme 글꼴이 이긴다. */
6
+
7
+ :where(.nuri-theme) {
8
+ font-family: inherit;
9
+ }
10
+
11
+ /* Utility */
12
+
13
+ .nuri-display-flex {
14
+ display: flex;
15
+ }
16
+
17
+ .nuri-display-inline-flex {
18
+ display: inline-flex;
19
+ }
20
+
21
+ .nuri-display-block {
22
+ display: block;
23
+ }
24
+
25
+ .nuri-display-inline-block {
26
+ display: inline-block;
27
+ }
28
+
29
+ .nuri-display-grid {
30
+ display: grid;
31
+ }
32
+
33
+ .nuri-display-inline-grid {
34
+ display: inline-grid;
35
+ }
36
+
37
+ .nuri-display-contents {
38
+ display: contents;
39
+ }
40
+
41
+ .nuri-display-none {
42
+ display: none;
43
+ }
44
+
45
+ .nuri-position-static {
46
+ position: static;
47
+ }
48
+
49
+ .nuri-position-relative {
50
+ position: relative;
51
+ }
52
+
53
+ .nuri-position-absolute {
54
+ position: absolute;
55
+ }
56
+
57
+ .nuri-position-fixed {
58
+ position: fixed;
59
+ }
60
+
61
+ .nuri-position-sticky {
62
+ position: sticky;
63
+ }
64
+
65
+ .nuri-flex-row {
66
+ flex-direction: row;
67
+ }
68
+
69
+ .nuri-flex-row-reverse {
70
+ flex-direction: row-reverse;
71
+ }
72
+
73
+ .nuri-flex-column {
74
+ flex-direction: column;
75
+ }
76
+
77
+ .nuri-flex-column-reverse {
78
+ flex-direction: column-reverse;
79
+ }
80
+
81
+ .nuri-ai-start {
82
+ align-items: flex-start;
83
+ }
84
+
85
+ .nuri-ai-center {
86
+ align-items: center;
87
+ }
88
+
89
+ .nuri-ai-end {
90
+ align-items: flex-end;
91
+ }
92
+
93
+ .nuri-ai-stretch {
94
+ align-items: stretch;
95
+ }
96
+
97
+ .nuri-ai-baseline {
98
+ align-items: baseline;
99
+ }
100
+
101
+ .nuri-justify-content-start {
102
+ justify-content: flex-start;
103
+ }
104
+
105
+ .nuri-justify-content-center {
106
+ justify-content: center;
107
+ }
108
+
109
+ .nuri-justify-content-end {
110
+ justify-content: flex-end;
111
+ }
112
+
113
+ .nuri-justify-content-between {
114
+ justify-content: space-between;
115
+ }
116
+
117
+ .nuri-justify-content-around {
118
+ justify-content: space-around;
119
+ }
120
+
121
+ .nuri-justify-content-evenly {
122
+ justify-content: space-evenly;
123
+ }
124
+
125
+ .nuri-overflow-visible {
126
+ overflow: visible;
127
+ }
128
+
129
+ .nuri-overflow-hidden {
130
+ overflow: hidden;
131
+ }
132
+
133
+ .nuri-overflow-scroll {
134
+ overflow: scroll;
135
+ }
136
+
137
+ .nuri-overflow-auto {
138
+ overflow: auto;
139
+ }
140
+
141
+ .nuri-overflow-x-visible {
142
+ overflow-x: visible;
143
+ }
144
+
145
+ .nuri-overflow-x-hidden {
146
+ overflow-x: hidden;
147
+ }
148
+
149
+ .nuri-overflow-x-scroll {
150
+ overflow-x: scroll;
151
+ }
152
+
153
+ .nuri-overflow-x-auto {
154
+ overflow-x: auto;
155
+ }
156
+
157
+ .nuri-overflow-y-visible {
158
+ overflow-y: visible;
159
+ }
160
+
161
+ .nuri-overflow-y-hidden {
162
+ overflow-y: hidden;
163
+ }
164
+
165
+ .nuri-overflow-y-scroll {
166
+ overflow-y: scroll;
167
+ }
168
+
169
+ .nuri-overflow-y-auto {
170
+ overflow-y: auto;
171
+ }
172
+
173
+ /* Component */
174
+
175
+ .base-avatar {
176
+ border-radius: 50%;
177
+ width: -moz-fit-content;
178
+ width: fit-content;
179
+ height: -moz-fit-content;
180
+ height: fit-content;
181
+ overflow: hidden;
182
+ }
183
+
184
+ .base-avatar.avatar-image {
185
+ width: 100%;
186
+ height: 100%;
187
+ -o-object-fit: cover;
188
+ object-fit: cover;
189
+ }
190
+
191
+ .base-avatar .avatar-fallback {
192
+ display: block;
193
+ width: 100%;
194
+ height: 100%;
195
+ }
196
+
197
+ :is(.base-avatar .avatar-fallback) svg {
198
+ width: 100%;
199
+ height: 100%;
200
+ }
201
+
202
+ /***************************************************************************************************
203
+ * *
204
+ * avatar *
205
+ * *
206
+ ***************************************************************************************************/
207
+
208
+ .avatar-wrapper {
209
+ position: relative;
210
+ display: inline-block;
211
+ }
212
+
213
+ .avatar {
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ }
218
+
219
+ .avatar.size-xl {
220
+ width: var(--avatar-size-xl);
221
+ height: var(--avatar-size-xl);
222
+ border: var(--hairline) solid var(--color-grey-scale-200);
223
+ }
224
+
225
+ .avatar.size-l {
226
+ width: var(--avatar-size-l);
227
+ height: var(--avatar-size-l);
228
+ border: var(--hairline) solid var(--color-grey-scale-200);
229
+ }
230
+
231
+ .avatar.size-m {
232
+ width: var(--avatar-size-m);
233
+ height: var(--avatar-size-m);
234
+ border: var(--hairline) solid var(--color-grey-scale-200);
235
+ }
236
+
237
+ .avatar.size-s {
238
+ width: var(--avatar-size-s);
239
+ height: var(--avatar-size-s);
240
+ border: var(--hairline) solid var(--color-grey-scale-200);
241
+ }
242
+
243
+ .avatar-badge {
244
+ position: absolute;
245
+ right: 0;
246
+ bottom: 0;
247
+ display: flex;
248
+ align-items: center;
249
+ justify-content: center;
250
+ gap: var(--spacing-4);
251
+ border-radius: var(--radius-full);
252
+ border: var(--hairline) solid var(--color-grey-scale-200);
253
+ }
254
+
255
+ .avatar-badge.size-xl {
256
+ width: var(--avatar-badge-size-xl);
257
+ height: var(--avatar-badge-size-xl);
258
+ }
259
+
260
+ .avatar-badge.size-l {
261
+ width: var(--avatar-badge-size-l);
262
+ height: var(--avatar-badge-size-l);
263
+ }
264
+
265
+ .avatar-badge.size-m {
266
+ width: var(--avatar-badge-size-m);
267
+ height: var(--avatar-badge-size-m);
268
+ }
269
+
270
+ .avatar-badge.size-s {
271
+ width: var(--avatar-badge-size-s);
272
+ height: var(--avatar-badge-size-s);
273
+ }
274
+
275
+ .base-badge {
276
+ position: relative;
277
+ display: flex;
278
+ align-items: center;
279
+ gap: var(--spacing-4);
280
+ border-radius: var(--radius-full);
281
+ }
282
+
283
+ .base-badge.size-xl {
284
+ height: var(--label-height-xl);
285
+
286
+ font-size: var(--font-size-sm);
287
+ line-height: var(--line-height-sm);
288
+ font-weight: var(--font-weight-semibold);
289
+ }
290
+
291
+ .base-badge.size-l {
292
+ height: var(--label-height-l);
293
+
294
+ font-size: var(--font-size-sm);
295
+ line-height: var(--line-height-sm);
296
+ font-weight: var(--font-weight-semibold);
297
+ }
298
+
299
+ .base-badge.size-m {
300
+ height: var(--label-height-m);
301
+
302
+ font-size: var(--font-size-sm);
303
+ line-height: var(--line-height-sm);
304
+ font-weight: var(--font-weight-semibold);
305
+ }
306
+
307
+ .base-badge.size-s {
308
+ height: var(--label-height-s);
309
+
310
+ font-size: var(--font-size-sm);
311
+ line-height: var(--line-height-sm);
312
+ font-weight: var(--font-weight-bold);
313
+ }
314
+
315
+ .base-badge.size-xs {
316
+ height: var(--label-height-xs);
317
+
318
+ font-size: var(--font-size-xsm);
319
+ line-height: var(--line-height-xsm);
320
+ font-weight: var(--font-weight-bold);
321
+ }
322
+
323
+ .base-badge.icon-text-option {
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+
328
+ padding: 0 var(--spacing-20);
329
+ }
330
+
331
+ /***************************************************************************************************
332
+ * *
333
+ * option-badge *
334
+ * *
335
+ ***************************************************************************************************/
336
+
337
+ .option {
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: center;
341
+
342
+ border-width: var(--hairline);
343
+ border-style: solid;
344
+ }
345
+
346
+ /***************************************************************************************************
347
+ * *
348
+ * option-badge *
349
+ * *
350
+ ***************************************************************************************************/
351
+
352
+ .icon-text {
353
+ display: flex;
354
+ align-items: center;
355
+ justify-content: center;
356
+ gap: var(--spacing-4);
357
+
358
+ border-width: var(--hairline);
359
+ border-style: solid;
360
+ }
361
+
362
+ /***************************************************************************************************
363
+ * *
364
+ * icon-text-option-badge *
365
+ * *
366
+ ***************************************************************************************************/
367
+
368
+ .icon-text-option {
369
+ display: flex;
370
+ align-items: center;
371
+ justify-content: space-between;
372
+
373
+ padding: 0 var(--spacing-20);
374
+ }
375
+
376
+ .icon-text-option > span {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: var(--spacing-4);
380
+ }
381
+
382
+ /***************************************************************************************************
383
+ * *
384
+ * variant *
385
+ * *
386
+ ***************************************************************************************************/
387
+
388
+ .variant-neutral:is(.option,.icon-text,.icon-text-option) {
389
+ color: var(--color-black);
390
+ background-color: var(--color-white);
391
+ border-color: transparent;
392
+ }
393
+
394
+ .variant-primary:is(.option,.icon-text,.icon-text-option) {
395
+ color: var(--color-purple-900);
396
+ background-color: var(--color-purple-50);
397
+ border-color: transparent;
398
+ }
399
+
400
+ .variant-danger:is(.option,.icon-text,.icon-text-option) {
401
+ color: var(--color-accent-red-700);
402
+ background-color: var(--color-accent-red-50);
403
+ border-color: transparent;
404
+ }
405
+
406
+ /* icon-text-option 은 테두리가 없는 모양이라 두께·스타일까지 여기서 준다. */
407
+
408
+ .variant-outlined:is(.option,.icon-text,.icon-text-option) {
409
+ color: var(--color-black);
410
+ background-color: var(--color-white);
411
+ border: var(--hairline) solid var(--color-grey-scale-300);
412
+ }
413
+
414
+ .base-button {
415
+ display: flex;
416
+ justify-content: center;
417
+ align-items: center;
418
+ gap: var(--spacing-10);
419
+ border-radius: var(--radius-6);
420
+ border: none;
421
+ cursor: pointer;
422
+ }
423
+
424
+ .base-button:focus-visible {
425
+ outline: none;
426
+ box-shadow: none;
427
+ }
428
+
429
+ /***************************************************************************************************
430
+ * *
431
+ * cta-button *
432
+ * *
433
+ ***************************************************************************************************/
434
+
435
+ .cta-button {
436
+ border-radius: var(--radius-6);
437
+ }
438
+
439
+ .cta-button.variant-primary {
440
+ background-color: var(--color-purple-900);
441
+ border: var(--hairline) solid var(--color-purple-900);
442
+ color: var(--color-white);
443
+ }
444
+
445
+ .cta-button.variant-primary:not(:disabled):hover {
446
+ background-color: var(--color-purple-900);
447
+ border-color: var(--color-purple-900);
448
+ color: var(--color-white);
449
+ }
450
+
451
+ .cta-button.variant-secondary {
452
+ background-color: var(--color-purple-50);
453
+ color: var(--color-purple-900);
454
+ }
455
+
456
+ .cta-button.variant-secondary:not(:disabled):hover {
457
+ background-color: var(--color-purple-100);
458
+ border-color: var(--color-purple-100);
459
+ color: var(--color-purple-900);
460
+ }
461
+
462
+ .cta-button.variant-ghost {
463
+ background-color: var(--color-white);
464
+ border: var(--hairline) solid var(--color-grey-scale-300);
465
+ color: var(--color-purple-900);
466
+ }
467
+
468
+ .cta-button.variant-ghost:not(:disabled):hover {
469
+ background-color: var(--color-white);
470
+ border-color: var(--color-purple-900);
471
+ color: var(--color-purple-900);
472
+ }
473
+
474
+ .cta-button.variant-neutral {
475
+ background-color: var(--color-white);
476
+ color: var(--color-purple-900);
477
+ }
478
+
479
+ .cta-button.variant-neutral:not(:disabled):hover {
480
+ background-color: var(--color-grey-scale-100);
481
+ border: var(--hairline) solid var(--color-grey-scale-100);
482
+ color: var(--color-purple-900);
483
+ }
484
+
485
+ .cta-button.variant-confirm {
486
+ background-color: var(--color-accent-red-500);
487
+ border: var(--hairline) solid var(--color-accent-red-500);
488
+ color: var(--color-white);
489
+ }
490
+
491
+ .cta-button.variant-confirm:not(:disabled):hover {
492
+ background-color: var(--color-accent-red-700);
493
+ border-color: var(--color-accent-red-700);
494
+ color: var(--color-white);
495
+ }
496
+
497
+ .cta-button.variant-outlined {
498
+ background-color: var(--color-white);
499
+ border: var(--hairline) solid var(--color-accent-red-700);
500
+ color: var(--color-accent-red-700);
501
+ }
502
+
503
+ .cta-button.size-xl {
504
+ height: var(--control-height-xl);
505
+
506
+ font-size: var(--font-size-lg);
507
+ line-height: var(--line-height-lg);
508
+ font-weight: var(--font-weight-bold);
509
+ }
510
+
511
+ .cta-button.size-l {
512
+ height: var(--control-height-l);
513
+
514
+ font-size: var(--font-size-base);
515
+ line-height: var(--line-height-base);
516
+ font-weight: var(--font-weight-bold);
517
+ }
518
+
519
+ .cta-button.size-m {
520
+ height: var(--control-height-m);
521
+
522
+ font-size: var(--font-size-sm);
523
+ line-height: var(--line-height-sm);
524
+ font-weight: var(--font-weight-semibold);
525
+ }
526
+
527
+ .cta-button.size-s {
528
+ height: var(--control-height-s);
529
+
530
+ font-size: var(--font-size-xsm);
531
+ line-height: var(--line-height-xsm);
532
+ font-weight: var(--font-weight-semibold);
533
+ }
534
+
535
+ .cta-button.size-xs {
536
+ height: var(--control-height-xs);
537
+
538
+ font-size: var(--font-size-xsm);
539
+ line-height: var(--line-height-xsm);
540
+ font-weight: var(--font-weight-semibold);
541
+ }
542
+
543
+ .cta-button:disabled {
544
+ background-color: var(--color-grey-scale-200);
545
+ color: var(--color-white);
546
+ cursor: not-allowed;
547
+ border: none;
548
+ }
549
+
550
+ .base-check-box.label {
551
+ font-size: var(--font-size-sm);
552
+ font-weight: var(--font-weight-medium);
553
+ color: var(--color-black);
554
+ }
555
+
556
+ /***************************************************************************************************
557
+ * *
558
+ * check-box *
559
+ * *
560
+ ***************************************************************************************************/
561
+
562
+ .check-box {
563
+ display: flex;
564
+ align-items: center;
565
+ gap: var(--spacing-10);
566
+
567
+ background-color: transparent;
568
+ border: none;
569
+ }
570
+
571
+ .check-box-indicator.wrapper {
572
+ display: flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ border-radius: var(--radius-4);
576
+ border: var(--checkbox-border) solid var(--color-purple-900);
577
+ }
578
+
579
+ .check-box-indicator {
580
+
581
+ width: 100%;
582
+ height: 100%;
583
+ }
584
+
585
+ .check-box-indicator.size-l {
586
+ width: var(--checkbox-size-l);
587
+ height: var(--checkbox-size-l);
588
+ }
589
+
590
+ .check-box-indicator.size-m {
591
+ width: var(--checkbox-size-m);
592
+ height: var(--checkbox-size-m);
593
+ }
594
+
595
+ .check-box-indicator.size-s {
596
+ width: var(--checkbox-size-s);
597
+ height: var(--checkbox-size-s);
598
+ }
599
+
600
+ .check-box-indicator[data-state='unchecked'] {
601
+ background-color: var(--color-white);
602
+ }
603
+
604
+ .check-box-indicator[data-state='checked'] {
605
+ background-color: var(--color-purple-900);
606
+ }
607
+
608
+ .check-box-indicator[data-disabled='true'] {
609
+ border: none;
610
+ border-radius: var(--radius-4);
611
+ background-color: var(--color-grey-scale-300);
612
+ }
613
+
614
+ .base-collapsible-menu.trigger {
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: space-between;
618
+ gap: var(--spacing-10);
619
+ width: 100%;
620
+ }
621
+
622
+ /***************************************************************************************************
623
+ * *
624
+ * collapsible-menu *
625
+ * *
626
+ ***************************************************************************************************/
627
+
628
+ .collapsible-menu {
629
+ display: flex;
630
+ flex-direction: column;
631
+ gap: var(--spacing-4);
632
+ }
633
+
634
+ .collapsible-menu.size-s .collapsible-menu-row {
635
+ height: var(--menu-row-height-s);
636
+ }
637
+
638
+ .collapsible-menu.size-m .collapsible-menu-row {
639
+ height: var(--menu-row-height-m);
640
+ }
641
+
642
+ .collapsible-menu-row {
643
+ all: unset;
644
+ box-sizing: border-box;
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: space-between;
648
+ gap: var(--spacing-10);
649
+
650
+ width: 100%;
651
+ padding: 0 var(--spacing-12);
652
+ /* figma 토큰에 --radius-8 없음. 디자이너 확인 전까지 숫자 유지 */
653
+ border-radius: 8px; /* raw-px */
654
+ cursor: pointer;
655
+
656
+ font-size: var(--font-size-sm);
657
+ line-height: var(--line-height-sm);
658
+ font-weight: var(--font-weight-medium);
659
+ color: var(--collapsible-menu-text-color, var(--color-grey-scale-700));
660
+ }
661
+
662
+ .collapsible-menu-row:hover {
663
+ background-color: var(--collapsible-menu-hover-bg-color, var(--color-grey-scale-100));
664
+ }
665
+
666
+ .collapsible-menu-row.is-active {
667
+ background-color: var(--collapsible-menu-active-bg-color, var(--color-grey-scale-100));
668
+ color: var(--collapsible-menu-active-text-color, var(--color-purple-800));
669
+ font-weight: var(--collapsible-menu-active-font-weight, 600);
670
+ }
671
+
672
+ .collapsible-menu-row:disabled,.collapsible-menu-row[aria-disabled='true'] {
673
+ cursor: not-allowed;
674
+ color: var(--collapsible-menu-disabled-text-color, var(--color-grey-scale-400));
675
+ }
676
+
677
+ .collapsible-menu-left {
678
+ display: inline-flex;
679
+ align-items: center;
680
+ gap: var(--spacing-10);
681
+ min-width: 0;
682
+ }
683
+
684
+ .collapsible-menu-left > * {
685
+ min-width: 0;
686
+ }
687
+
688
+ .collapsible-menu-chevron {
689
+ width: var(--icon-size-s);
690
+ height: var(--icon-size-s);
691
+ color: var(--color-grey-scale-500);
692
+ transition: transform var(--motion-fast) var(--motion-ease);
693
+ }
694
+
695
+ .base-collapsible-menu.trigger[data-state='open'] .collapsible-menu-chevron {
696
+ transform: rotate(180deg);
697
+ }
698
+
699
+ .collapsible-menu-content {
700
+ display: flex;
701
+ flex-direction: column;
702
+ gap: var(--spacing-2);
703
+ margin-top: var(--spacing-2);
704
+ margin-bottom: var(--spacing-4);
705
+ }
706
+
707
+ /* placeholder 로 넘기는 span 의 색. base-drop-down 이 기본 placeholder 에 붙인다. */
708
+
709
+ .nuri-placeholder {
710
+ color: var(--color-grey-scale-400);
711
+ }
712
+
713
+ .base-drop-down.trigger {
714
+ display: flex;
715
+ align-items: center;
716
+ justify-content: space-between;
717
+ gap: var(--spacing-10);
718
+ }
719
+
720
+ /***************************************************************************************************
721
+ * *
722
+ * drop-down-single *
723
+ * *
724
+ ***************************************************************************************************/
725
+
726
+ .drop-down-single-trigger.size-s {
727
+ height: var(--control-height-s);
728
+ }
729
+
730
+ .drop-down-single-trigger.size-m {
731
+ height: var(--control-height-m);
732
+ }
733
+
734
+ .drop-down-single-trigger {
735
+
736
+ border: var(--hairline) solid var(--color-grey-scale-300);
737
+ border-radius: var(--radius-4);
738
+ width: -moz-fit-content;
739
+ width: fit-content;
740
+ padding: 0 var(--spacing-14);
741
+ background-color: var(--color-white);
742
+ }
743
+
744
+ .drop-down-single-trigger:focus {
745
+ border-color: var(--color-purple-900);
746
+ }
747
+
748
+ .drop-down-single-trigger[data-placeholder] .drop-down-single-icon {
749
+ color: var(--color-grey-scale-400);
750
+ }
751
+
752
+ .drop-down-single-trigger[data-placeholder] svg {
753
+ color: var(--color-grey-scale-400);
754
+ }
755
+
756
+ .drop-down-single-trigger:not([data-placeholder]) .drop-down-single-icon {
757
+ color: var(--color-black);
758
+ }
759
+
760
+ .drop-down-single-trigger:not([data-placeholder]) svg {
761
+ color: var(--color-black);
762
+ }
763
+
764
+ .drop-down-single-trigger[data-state='open'] .rotate {
765
+ transform: rotate(180deg);
766
+ transform-origin: 50% 50%;
767
+ transition: transform var(--motion-fast) var(--motion-ease);
768
+ will-change: transform;
769
+ }
770
+
771
+ .drop-down-single-label {
772
+ gap: var(--spacing-10);
773
+ }
774
+
775
+ .drop-down-single-value {
776
+ font-size: var(--font-size-sm);
777
+ line-height: var(--line-height-sm);
778
+ font-weight: var(--font-weight-medium);
779
+
780
+ text-align: left;
781
+ }
782
+
783
+ .drop-down-single-value ::-moz-placeholder {
784
+ color: var(--color-grey-scale-400);
785
+ }
786
+
787
+ .drop-down-single-value ::placeholder {
788
+ color: var(--color-grey-scale-400);
789
+ }
790
+
791
+ .drop-down-single-content {
792
+ z-index: var(--z-popover);
793
+ min-width: var(--radix-select-trigger-width);
794
+ overflow: hidden;
795
+ box-shadow: var(--shadow-popover);
796
+ border-radius: var(--radius-6);
797
+ }
798
+
799
+ .drop-down-single-item {
800
+ padding: var(--spacing-14);
801
+ background-color: var(--color-white);
802
+ outline: none;
803
+ height: var(--drop-down-item-height);
804
+
805
+ font-size: var(--font-size-sm);
806
+ line-height: var(--line-height-sm);
807
+ font-weight: var(--font-weight-medium);
808
+
809
+ cursor: pointer;
810
+ }
811
+
812
+ .drop-down-single-item[data-highlighted] {
813
+ background-color: var(--color-purple-50);
814
+ outline: none;
815
+ }
816
+
817
+ .drop-down-single-item:disabled {
818
+ background-color: var(--color-grey-scale-100);
819
+ color: var(--color-grey-scale-400);
820
+ cursor: not-allowed;
821
+ }
822
+
823
+ .base-text:where(.xsm) {
824
+ font-size: var(--font-size-xsm);
825
+ line-height: var(--line-height-xsm);
826
+ }
827
+
828
+ .base-text:where(.sm) {
829
+ font-size: var(--font-size-sm);
830
+ line-height: var(--line-height-sm);
831
+ }
832
+
833
+ .base-text:where(.base) {
834
+ font-size: var(--font-size-base);
835
+ line-height: var(--line-height-base);
836
+ }
837
+
838
+ .base-text:where(.lg) {
839
+ font-size: var(--font-size-lg);
840
+ line-height: var(--line-height-lg);
841
+ }
842
+
843
+ .base-text:where(.xl) {
844
+ font-size: var(--font-size-xl);
845
+ line-height: var(--line-height-xl);
846
+ }
847
+
848
+ .base-text:where(.t-2xl) {
849
+ font-size: var(--font-size-2xl);
850
+ line-height: var(--line-height-2xl);
851
+ }
852
+
853
+ .base-text:where(.t-3xl) {
854
+ font-size: var(--font-size-3xl);
855
+ line-height: var(--line-height-3xl);
856
+ }
857
+
858
+ .base-text:where(.t-4xl) {
859
+ font-size: var(--font-size-4xl);
860
+ line-height: var(--line-height-4xl);
861
+ }
862
+
863
+ .base-text:where(.t-5xl) {
864
+ font-size: var(--font-size-5xl);
865
+ line-height: var(--line-height-5xl);
866
+ }
867
+
868
+ .base-text:where(.t-6xl) {
869
+ font-size: var(--font-size-6xl);
870
+ line-height: var(--line-height-6xl);
871
+ }
872
+
873
+ .base-text:where(.regular) {
874
+ font-weight: var(--font-weight-regular);
875
+ }
876
+
877
+ .base-text:where(.medium) {
878
+ font-weight: var(--font-weight-medium);
879
+ }
880
+
881
+ .base-text:where(.semibold) {
882
+ font-weight: var(--font-weight-semibold);
883
+ }
884
+
885
+ .base-text:where(.bold) {
886
+ font-weight: var(--font-weight-bold);
887
+ }
888
+
889
+ .base-text:where(.extrabold) {
890
+ font-weight: var(--font-weight-extrabold);
891
+ }
892
+
893
+ .base-text.textAlign-left[class*='textAlign-'] {
894
+ text-align: left;
895
+ }
896
+
897
+ .base-text.textAlign-center[class*='textAlign-'] {
898
+ text-align: center;
899
+ }
900
+
901
+ .base-text.textDecoration-underline[class*='textDecoration-'] {
902
+ text-decoration: underline;
903
+ }
904
+
905
+ .base-text.textDecoration-none[class*='textDecoration-'] {
906
+ text-decoration: none;
907
+ }
908
+
909
+ .base-text.textDecoration-lineThrough[class*='textDecoration-'] {
910
+ text-decoration: line-through;
911
+ }
912
+
913
+ .base-text.textDecoration-overline[class*='textDecoration-'] {
914
+ text-decoration: overline;
915
+ }
916
+
917
+ .base-text.textDecoration-blink[class*='textDecoration-'] {
918
+ text-decoration: blink;
919
+ }
920
+
921
+ .base-text.wordBreak-normal[class*='wordBreak-'] {
922
+ word-break: normal;
923
+ }
924
+
925
+ .base-text.wordBreak-breakAll[class*='wordBreak-'] {
926
+ word-break: break-all;
927
+ }
928
+
929
+ .base-text.wordBreak-breakWord[class*='wordBreak-'] {
930
+ word-break: break-word;
931
+ }
932
+
933
+ .base-text.wordBreak-keepAll[class*='wordBreak-'] {
934
+ word-break: keep-all;
935
+ }
936
+
937
+ .base-text.wordBreak-keepWord[class*='wordBreak-'] {
938
+ word-break: keep-word;
939
+ }
940
+
941
+ .base-text.wordBreak-breakSpaces[class*='wordBreak-'] {
942
+ word-break: break-spaces;
943
+ }
944
+
945
+ .base-text.wordBreak-all[class*='wordBreak-'] {
946
+ word-break: all;
947
+ }
948
+
949
+ .base-text.whiteSpace-normal[class*='whiteSpace-'] {
950
+ white-space: normal;
951
+ }
952
+
953
+ .base-text.whiteSpace-nowrap[class*='whiteSpace-'] {
954
+ white-space: nowrap;
955
+ }
956
+
957
+ .base-text.whiteSpace-pre[class*='whiteSpace-'] {
958
+ white-space: pre;
959
+ }
960
+
961
+ .base-text.whiteSpace-preLine[class*='whiteSpace-'] {
962
+ white-space: pre-line;
963
+ }
964
+
965
+ .base-text.whiteSpace-preWrap[class*='whiteSpace-'] {
966
+ white-space: pre-wrap;
967
+ }
968
+
969
+ .base-text.color-black[class*='color-'] {
970
+ color: var(--color-black);
971
+ }
972
+
973
+ .base-text.color-white[class*='color-'] {
974
+ color: var(--color-white);
975
+ }
976
+
977
+ .base-text.color-grey-scale-50[class*='color-'] {
978
+ color: var(--color-grey-scale-50);
979
+ }
980
+
981
+ .base-text.color-grey-scale-100[class*='color-'] {
982
+ color: var(--color-grey-scale-100);
983
+ }
984
+
985
+ .base-text.color-grey-scale-200[class*='color-'] {
986
+ color: var(--color-grey-scale-200);
987
+ }
988
+
989
+ .base-text.color-grey-scale-300[class*='color-'] {
990
+ color: var(--color-grey-scale-300);
991
+ }
992
+
993
+ .base-text.color-grey-scale-400[class*='color-'] {
994
+ color: var(--color-grey-scale-400);
995
+ }
996
+
997
+ .base-text.color-grey-scale-500[class*='color-'] {
998
+ color: var(--color-grey-scale-500);
999
+ }
1000
+
1001
+ .base-text.color-grey-scale-600[class*='color-'] {
1002
+ color: var(--color-grey-scale-600);
1003
+ }
1004
+
1005
+ .base-text.color-grey-scale-700[class*='color-'] {
1006
+ color: var(--color-grey-scale-700);
1007
+ }
1008
+
1009
+ .base-text.color-grey-scale-800[class*='color-'] {
1010
+ color: var(--color-grey-scale-800);
1011
+ }
1012
+
1013
+ .base-text.color-grey-scale-900[class*='color-'] {
1014
+ color: var(--color-grey-scale-900);
1015
+ }
1016
+
1017
+ .base-text.color-purple-50[class*='color-'] {
1018
+ color: var(--color-purple-50);
1019
+ }
1020
+
1021
+ .base-text.color-purple-100[class*='color-'] {
1022
+ color: var(--color-purple-100);
1023
+ }
1024
+
1025
+ .base-text.color-purple-200[class*='color-'] {
1026
+ color: var(--color-purple-200);
1027
+ }
1028
+
1029
+ .base-text.color-purple-300[class*='color-'] {
1030
+ color: var(--color-purple-300);
1031
+ }
1032
+
1033
+ .base-text.color-purple-400[class*='color-'] {
1034
+ color: var(--color-purple-400);
1035
+ }
1036
+
1037
+ .base-text.color-purple-500[class*='color-'] {
1038
+ color: var(--color-purple-500);
1039
+ }
1040
+
1041
+ .base-text.color-purple-600[class*='color-'] {
1042
+ color: var(--color-purple-600);
1043
+ }
1044
+
1045
+ .base-text.color-purple-700[class*='color-'] {
1046
+ color: var(--color-purple-700);
1047
+ }
1048
+
1049
+ .base-text.color-purple-800[class*='color-'] {
1050
+ color: var(--color-purple-800);
1051
+ }
1052
+
1053
+ .base-text.color-purple-900[class*='color-'] {
1054
+ color: var(--color-purple-900);
1055
+ }
1056
+
1057
+ .base-text.color-accent-red-50[class*='color-'] {
1058
+ color: var(--color-accent-red-50);
1059
+ }
1060
+
1061
+ .base-text.color-accent-red-100[class*='color-'] {
1062
+ color: var(--color-accent-red-100);
1063
+ }
1064
+
1065
+ .base-text.color-accent-red-200[class*='color-'] {
1066
+ color: var(--color-accent-red-200);
1067
+ }
1068
+
1069
+ .base-text.color-accent-red-300[class*='color-'] {
1070
+ color: var(--color-accent-red-300);
1071
+ }
1072
+
1073
+ .base-text.color-accent-red-400[class*='color-'] {
1074
+ color: var(--color-accent-red-400);
1075
+ }
1076
+
1077
+ .base-text.color-accent-red-500[class*='color-'] {
1078
+ color: var(--color-accent-red-500);
1079
+ }
1080
+
1081
+ .base-text.color-accent-red-600[class*='color-'] {
1082
+ color: var(--color-accent-red-600);
1083
+ }
1084
+
1085
+ .base-text.color-accent-red-700[class*='color-'] {
1086
+ color: var(--color-accent-red-700);
1087
+ }
1088
+
1089
+ .base-text.color-accent-red-800[class*='color-'] {
1090
+ color: var(--color-accent-red-800);
1091
+ }
1092
+
1093
+ .base-text.color-accent-red-900[class*='color-'] {
1094
+ color: var(--color-accent-red-900);
1095
+ }
1096
+
1097
+ .base-text.color-accent-pink-50[class*='color-'] {
1098
+ color: var(--color-accent-pink-50);
1099
+ }
1100
+
1101
+ .base-text.color-accent-pink-100[class*='color-'] {
1102
+ color: var(--color-accent-pink-100);
1103
+ }
1104
+
1105
+ .base-text.color-accent-pink-200[class*='color-'] {
1106
+ color: var(--color-accent-pink-200);
1107
+ }
1108
+
1109
+ .base-text.color-accent-pink-300[class*='color-'] {
1110
+ color: var(--color-accent-pink-300);
1111
+ }
1112
+
1113
+ .base-text.color-accent-pink-400[class*='color-'] {
1114
+ color: var(--color-accent-pink-400);
1115
+ }
1116
+
1117
+ .base-text.color-accent-pink-500[class*='color-'] {
1118
+ color: var(--color-accent-pink-500);
1119
+ }
1120
+
1121
+ .base-text.color-accent-pink-600[class*='color-'] {
1122
+ color: var(--color-accent-pink-600);
1123
+ }
1124
+
1125
+ .base-text.color-accent-pink-700[class*='color-'] {
1126
+ color: var(--color-accent-pink-700);
1127
+ }
1128
+
1129
+ .base-text.color-accent-pink-800[class*='color-'] {
1130
+ color: var(--color-accent-pink-800);
1131
+ }
1132
+
1133
+ .base-text.color-accent-pink-900[class*='color-'] {
1134
+ color: var(--color-accent-pink-900);
1135
+ }
1136
+
1137
+ .base-text.color-accent-magenta-50[class*='color-'] {
1138
+ color: var(--color-accent-magenta-50);
1139
+ }
1140
+
1141
+ .base-text.color-accent-magenta-100[class*='color-'] {
1142
+ color: var(--color-accent-magenta-100);
1143
+ }
1144
+
1145
+ .base-text.color-accent-magenta-200[class*='color-'] {
1146
+ color: var(--color-accent-magenta-200);
1147
+ }
1148
+
1149
+ .base-text.color-accent-magenta-300[class*='color-'] {
1150
+ color: var(--color-accent-magenta-300);
1151
+ }
1152
+
1153
+ .base-text.color-accent-magenta-400[class*='color-'] {
1154
+ color: var(--color-accent-magenta-400);
1155
+ }
1156
+
1157
+ .base-text.color-accent-magenta-500[class*='color-'] {
1158
+ color: var(--color-accent-magenta-500);
1159
+ }
1160
+
1161
+ .base-text.color-accent-magenta-600[class*='color-'] {
1162
+ color: var(--color-accent-magenta-600);
1163
+ }
1164
+
1165
+ .base-text.color-accent-magenta-700[class*='color-'] {
1166
+ color: var(--color-accent-magenta-700);
1167
+ }
1168
+
1169
+ .base-text.color-accent-magenta-800[class*='color-'] {
1170
+ color: var(--color-accent-magenta-800);
1171
+ }
1172
+
1173
+ .base-text.color-accent-magenta-900[class*='color-'] {
1174
+ color: var(--color-accent-magenta-900);
1175
+ }
1176
+
1177
+ .base-text.color-accent-blue-50[class*='color-'] {
1178
+ color: var(--color-accent-blue-50);
1179
+ }
1180
+
1181
+ .base-text.color-accent-blue-100[class*='color-'] {
1182
+ color: var(--color-accent-blue-100);
1183
+ }
1184
+
1185
+ .base-text.color-accent-blue-200[class*='color-'] {
1186
+ color: var(--color-accent-blue-200);
1187
+ }
1188
+
1189
+ .base-text.color-accent-blue-300[class*='color-'] {
1190
+ color: var(--color-accent-blue-300);
1191
+ }
1192
+
1193
+ .base-text.color-accent-blue-400[class*='color-'] {
1194
+ color: var(--color-accent-blue-400);
1195
+ }
1196
+
1197
+ .base-text.color-accent-blue-500[class*='color-'] {
1198
+ color: var(--color-accent-blue-500);
1199
+ }
1200
+
1201
+ .base-text.color-accent-blue-600[class*='color-'] {
1202
+ color: var(--color-accent-blue-600);
1203
+ }
1204
+
1205
+ .base-text.color-accent-blue-700[class*='color-'] {
1206
+ color: var(--color-accent-blue-700);
1207
+ }
1208
+
1209
+ .base-text.color-accent-blue-800[class*='color-'] {
1210
+ color: var(--color-accent-blue-800);
1211
+ }
1212
+
1213
+ .base-text.color-accent-blue-900[class*='color-'] {
1214
+ color: var(--color-accent-blue-900);
1215
+ }
1216
+
1217
+ .base-text.color-accent-mint-50[class*='color-'] {
1218
+ color: var(--color-accent-mint-50);
1219
+ }
1220
+
1221
+ .base-text.color-accent-mint-100[class*='color-'] {
1222
+ color: var(--color-accent-mint-100);
1223
+ }
1224
+
1225
+ .base-text.color-accent-mint-200[class*='color-'] {
1226
+ color: var(--color-accent-mint-200);
1227
+ }
1228
+
1229
+ .base-text.color-accent-mint-300[class*='color-'] {
1230
+ color: var(--color-accent-mint-300);
1231
+ }
1232
+
1233
+ .base-text.color-accent-mint-400[class*='color-'] {
1234
+ color: var(--color-accent-mint-400);
1235
+ }
1236
+
1237
+ .base-text.color-accent-mint-500[class*='color-'] {
1238
+ color: var(--color-accent-mint-500);
1239
+ }
1240
+
1241
+ .base-text.color-accent-mint-600[class*='color-'] {
1242
+ color: var(--color-accent-mint-600);
1243
+ }
1244
+
1245
+ .base-text.color-accent-mint-700[class*='color-'] {
1246
+ color: var(--color-accent-mint-700);
1247
+ }
1248
+
1249
+ .base-text.color-accent-mint-800[class*='color-'] {
1250
+ color: var(--color-accent-mint-800);
1251
+ }
1252
+
1253
+ .base-text.color-accent-mint-900[class*='color-'] {
1254
+ color: var(--color-accent-mint-900);
1255
+ }
1256
+
1257
+ .base-text.color-accent-green-50[class*='color-'] {
1258
+ color: var(--color-accent-green-50);
1259
+ }
1260
+
1261
+ .base-text.color-accent-green-100[class*='color-'] {
1262
+ color: var(--color-accent-green-100);
1263
+ }
1264
+
1265
+ .base-text.color-accent-green-200[class*='color-'] {
1266
+ color: var(--color-accent-green-200);
1267
+ }
1268
+
1269
+ .base-text.color-accent-green-300[class*='color-'] {
1270
+ color: var(--color-accent-green-300);
1271
+ }
1272
+
1273
+ .base-text.color-accent-green-400[class*='color-'] {
1274
+ color: var(--color-accent-green-400);
1275
+ }
1276
+
1277
+ .base-text.color-accent-green-500[class*='color-'] {
1278
+ color: var(--color-accent-green-500);
1279
+ }
1280
+
1281
+ .base-text.color-accent-green-600[class*='color-'] {
1282
+ color: var(--color-accent-green-600);
1283
+ }
1284
+
1285
+ .base-text.color-accent-green-700[class*='color-'] {
1286
+ color: var(--color-accent-green-700);
1287
+ }
1288
+
1289
+ .base-text.color-accent-green-800[class*='color-'] {
1290
+ color: var(--color-accent-green-800);
1291
+ }
1292
+
1293
+ .base-text.color-accent-green-900[class*='color-'] {
1294
+ color: var(--color-accent-green-900);
1295
+ }
1296
+
1297
+ .base-text.color-accent-yellow-50[class*='color-'] {
1298
+ color: var(--color-accent-yellow-50);
1299
+ }
1300
+
1301
+ .base-text.color-accent-yellow-100[class*='color-'] {
1302
+ color: var(--color-accent-yellow-100);
1303
+ }
1304
+
1305
+ .base-text.color-accent-yellow-200[class*='color-'] {
1306
+ color: var(--color-accent-yellow-200);
1307
+ }
1308
+
1309
+ .base-text.color-accent-yellow-300[class*='color-'] {
1310
+ color: var(--color-accent-yellow-300);
1311
+ }
1312
+
1313
+ .base-text.color-accent-yellow-400[class*='color-'] {
1314
+ color: var(--color-accent-yellow-400);
1315
+ }
1316
+
1317
+ .base-text.color-accent-yellow-500[class*='color-'] {
1318
+ color: var(--color-accent-yellow-500);
1319
+ }
1320
+
1321
+ .base-text.color-accent-yellow-600[class*='color-'] {
1322
+ color: var(--color-accent-yellow-600);
1323
+ }
1324
+
1325
+ .base-text.color-accent-yellow-700[class*='color-'] {
1326
+ color: var(--color-accent-yellow-700);
1327
+ }
1328
+
1329
+ .base-text.color-accent-yellow-800[class*='color-'] {
1330
+ color: var(--color-accent-yellow-800);
1331
+ }
1332
+
1333
+ .base-text.color-accent-yellow-900[class*='color-'] {
1334
+ color: var(--color-accent-yellow-900);
1335
+ }
1336
+
1337
+ .base-text.color-accent-orange-50[class*='color-'] {
1338
+ color: var(--color-accent-orange-50);
1339
+ }
1340
+
1341
+ .base-text.color-accent-orange-100[class*='color-'] {
1342
+ color: var(--color-accent-orange-100);
1343
+ }
1344
+
1345
+ .base-text.color-accent-orange-200[class*='color-'] {
1346
+ color: var(--color-accent-orange-200);
1347
+ }
1348
+
1349
+ .base-text.color-accent-orange-300[class*='color-'] {
1350
+ color: var(--color-accent-orange-300);
1351
+ }
1352
+
1353
+ .base-text.color-accent-orange-400[class*='color-'] {
1354
+ color: var(--color-accent-orange-400);
1355
+ }
1356
+
1357
+ .base-text.color-accent-orange-500[class*='color-'] {
1358
+ color: var(--color-accent-orange-500);
1359
+ }
1360
+
1361
+ .base-text.color-accent-orange-600[class*='color-'] {
1362
+ color: var(--color-accent-orange-600);
1363
+ }
1364
+
1365
+ .base-text.color-accent-orange-700[class*='color-'] {
1366
+ color: var(--color-accent-orange-700);
1367
+ }
1368
+
1369
+ .base-text.color-accent-orange-800[class*='color-'] {
1370
+ color: var(--color-accent-orange-800);
1371
+ }
1372
+
1373
+ .base-text.color-accent-orange-900[class*='color-'] {
1374
+ color: var(--color-accent-orange-900);
1375
+ }
1376
+
1377
+ .base-inline-loading {
1378
+ display: flex;
1379
+ width: 100%;
1380
+ height: 100%;
1381
+ align-items: center;
1382
+ }
1383
+
1384
+ /* 링은 currentColor 다. 우선순위 0 이라 넘겨받은 className 이나 style 의 color 가 늘 이긴다. */
1385
+
1386
+ :where(.base-inline-loading) {
1387
+ color: var(--color-grey-scale-200);
1388
+ }
1389
+
1390
+ .base-overlay-loading {
1391
+ position: fixed;
1392
+ inset: 0;
1393
+ display: flex;
1394
+ align-items: center;
1395
+ justify-content: center;
1396
+ }
1397
+
1398
+ .page-loading-backdrop {
1399
+ position: absolute;
1400
+ inset: 0;
1401
+ }
1402
+
1403
+ .page-loading-content {
1404
+ position: relative;
1405
+ display: flex;
1406
+ flex-direction: column;
1407
+ align-items: center;
1408
+ gap: var(--spacing-16);
1409
+ }
1410
+
1411
+ /* 기본 스피너(20px)를 확대 */
1412
+
1413
+ .page-loading-indicator {
1414
+ transform: scale(3.2);
1415
+ transform-origin: center;
1416
+ }
1417
+
1418
+ .page-loading-text {
1419
+ position: relative;
1420
+ }
1421
+
1422
+ .base-spinner {
1423
+ display: flex;
1424
+ width: var(--icon-size-m);
1425
+ height: var(--icon-size-m);
1426
+ align-items: center;
1427
+ justify-content: center;
1428
+ }
1429
+
1430
+ /* 우선순위 0 이라 넘겨받은 className 이나 style 의 color 가 늘 이긴다. */
1431
+
1432
+ :where(.base-spinner) {
1433
+ color: var(--color-grey-scale-200);
1434
+ }
1435
+
1436
+ .loading-indicator-ring {
1437
+ position: relative;
1438
+ width: var(--icon-size-m);
1439
+ height: var(--icon-size-m);
1440
+ }
1441
+
1442
+ .loading-indicator-single-ring {
1443
+ box-sizing: border-box;
1444
+ display: block;
1445
+ position: absolute;
1446
+ width: 100%;
1447
+ height: 100%;
1448
+ border: var(--spinner-stroke) solid;
1449
+ border-radius: 50%;
1450
+ animation: lds-ring var(--spinner-duration) var(--spinner-ease) infinite;
1451
+ border-color: currentColor transparent transparent transparent;
1452
+ }
1453
+
1454
+ .loading-indicator-single-ring:nth-child(1) {
1455
+ animation-delay: calc(var(--spinner-duration) * -0.375);
1456
+ }
1457
+
1458
+ .loading-indicator-single-ring:nth-child(2) {
1459
+ animation-delay: calc(var(--spinner-duration) * -0.25);
1460
+ }
1461
+
1462
+ .loading-indicator-single-ring:nth-child(3) {
1463
+ animation-delay: calc(var(--spinner-duration) * -0.125);
1464
+ }
1465
+
1466
+ .loading-indicator-single-ring:nth-child(4) {
1467
+ animation-delay: 0s;
1468
+ }
1469
+
1470
+ @keyframes lds-ring {
1471
+ 0% {
1472
+ transform: rotate(0deg);
1473
+ }
1474
+ 100% {
1475
+ transform: rotate(360deg);
1476
+ }
1477
+ }
1478
+
1479
+ /* Title·Close 같은 조각도 base-modal 을 달므로 상자 스타일은 container·overlay 에만 건다. */
1480
+
1481
+ .base-modal:where(.modal-container, .modal-overlay) {
1482
+ display: flex;
1483
+ flex-direction: column;
1484
+ align-items: center;
1485
+
1486
+ padding: var(--spacing-30);
1487
+ border-radius: var(--radius-6);
1488
+ }
1489
+
1490
+ .base-modal.modal-container {
1491
+ position: fixed;
1492
+ top: 50%;
1493
+ left: 50%;
1494
+ transform: translate(-50%, -50%);
1495
+ z-index: var(--z-modal);
1496
+ background-color: var(--color-white);
1497
+ }
1498
+
1499
+ .base-modal.modal-overlay {
1500
+ position: fixed;
1501
+ top: 0;
1502
+ left: 0;
1503
+ right: 0;
1504
+ bottom: 0;
1505
+ background-color: rgba(0, 0, 0, 0.5);
1506
+ z-index: var(--z-overlay);
1507
+ }
1508
+
1509
+ /***************************************************************************************************
1510
+ * *
1511
+ * modal-with-double-button *
1512
+ * *
1513
+ ***************************************************************************************************/
1514
+
1515
+ .modal-with-double-button-close-button {
1516
+ display: flex;
1517
+ justify-content: flex-start;
1518
+ align-items: center;
1519
+ width: 100%;
1520
+ }
1521
+
1522
+ .modal-with-double-button-container.size-s {
1523
+ width: var(--modal-width-s);
1524
+ }
1525
+
1526
+ .modal-with-double-button-container.size-m {
1527
+ width: var(--modal-width-m);
1528
+ }
1529
+
1530
+ .modal-with-double-button-container.size-l {
1531
+ width: var(--modal-width-l);
1532
+ }
1533
+
1534
+ .modal-with-double-button-title-icon {
1535
+ margin-bottom: var(--spacing-20);
1536
+ }
1537
+
1538
+ .modal-with-double-button-title {
1539
+ margin-bottom: var(--spacing-4);
1540
+ }
1541
+
1542
+ .modal-with-double-button-content {
1543
+ margin-top: var(--spacing-20);
1544
+ }
1545
+
1546
+ .modal-with-double-button-close {
1547
+ display: flex;
1548
+ justify-content: space-between;
1549
+ align-items: center;
1550
+ gap: var(--spacing-16);
1551
+ width: 100%;
1552
+ margin-top: var(--spacing-30);
1553
+ }
1554
+
1555
+ .modal-with-double-button-close.row {
1556
+ display: flex;
1557
+ justify-content: center;
1558
+ align-items: center;
1559
+ gap: var(--spacing-16);
1560
+ }
1561
+
1562
+ .modal-with-double-button-close.row > * {
1563
+ flex: 1;
1564
+ }
1565
+
1566
+ .modal-with-double-button-close.column {
1567
+ display: flex;
1568
+ flex-direction: column;
1569
+ justify-content: center;
1570
+ align-items: center;
1571
+ gap: var(--spacing-10);
1572
+ }
1573
+
1574
+ .modal-with-double-button-close.column > * {
1575
+ width: 100%;
1576
+ }
1577
+
1578
+ .base-radio:where(.button) {
1579
+ padding: 0;
1580
+ }
1581
+
1582
+ /***************************************************************************************************
1583
+ * *
1584
+ * radio *
1585
+ * *
1586
+ ***************************************************************************************************/
1587
+
1588
+ .radio:where(.radio-group) {
1589
+ display: flex;
1590
+ flex-direction: column;
1591
+ gap: var(--spacing-16);
1592
+ }
1593
+
1594
+ .radio:where(.radio-option) {
1595
+ display: flex;
1596
+ align-items: center;
1597
+ gap: var(--spacing-6);
1598
+ }
1599
+
1600
+ .radio:where(.radio-button) {
1601
+ display: flex;
1602
+ align-items: center;
1603
+ justify-content: center;
1604
+ width: var(--radio-size);
1605
+ height: var(--radio-size);
1606
+ border-radius: 50%;
1607
+ background-color: var(--color-grey-scale-200);
1608
+ }
1609
+
1610
+ .radio:where(.radio-indicator) {
1611
+ width: var(--radio-dot-size);
1612
+ height: var(--radio-dot-size);
1613
+ border-radius: 50%;
1614
+ background-color: var(--color-purple-900);
1615
+ }
1616
+
1617
+ .radio:where(.radio-label) {
1618
+ font-size: var(--font-size-sm);
1619
+ font-weight: var(--font-weight-medium);
1620
+ color: var(--color-black);
1621
+ }
1622
+
1623
+ .base-table {
1624
+ width: -moz-fit-content;
1625
+ width: fit-content;
1626
+ }
1627
+
1628
+ .base-table .header {
1629
+ display: flex;
1630
+ align-items: center;
1631
+ width: 100%;
1632
+ }
1633
+
1634
+ .base-table .body {
1635
+ width: 100%;
1636
+ }
1637
+
1638
+ .base-table .row {
1639
+ display: flex;
1640
+ align-items: center;
1641
+ width: 100%;
1642
+ }
1643
+
1644
+ .base-table .cell {
1645
+ text-align: start;
1646
+ display: flex;
1647
+ flex-direction: column;
1648
+ justify-content: center;
1649
+ }
1650
+
1651
+ /***************************************************************************************************
1652
+ * *
1653
+ * data-table *
1654
+ * *
1655
+ ***************************************************************************************************/
1656
+
1657
+ .data-table {
1658
+ position: relative;
1659
+ width: 100%;
1660
+ }
1661
+
1662
+ .data-table-header {
1663
+ position: sticky;
1664
+ top: 0;
1665
+ background-color: var(--color-white);
1666
+ z-index: var(--z-sticky-header);
1667
+ border-bottom: var(--hairline) solid var(--color-grey-scale-200);
1668
+ }
1669
+
1670
+ .data-table-row {
1671
+ position: relative;
1672
+ border-bottom: var(--hairline) solid var(--color-grey-scale-200);
1673
+ }
1674
+
1675
+ .data-table-row .fixed {
1676
+ position: sticky;
1677
+ background-color: var(--color-white);
1678
+ z-index: var(--z-sticky);
1679
+ }
1680
+
1681
+ :is(.data-table-row .fixed) > * {
1682
+ position: relative;
1683
+ z-index: var(--z-raised);
1684
+ }
1685
+
1686
+ .body .data-table-row:hover {
1687
+ background-color: var(--color-grey-scale-100);
1688
+ }
1689
+
1690
+ :is(.body .data-table-row:hover) .fixed {
1691
+ background-color: var(--color-grey-scale-100);
1692
+ }
1693
+
1694
+ .fixed-cell {
1695
+ position: sticky;
1696
+ left: 0;
1697
+ }
1698
+
1699
+ .base-tabs:where(.root) {
1700
+ width: 100%;
1701
+ display: block;
1702
+ }
1703
+
1704
+ /***************************************************************************************************
1705
+ * *
1706
+ * tabs *
1707
+ * *
1708
+ ***************************************************************************************************/
1709
+
1710
+ .tabs-list {
1711
+ display: flex;
1712
+ align-items: center;
1713
+ position: relative;
1714
+ }
1715
+
1716
+ .tabs-list.variant-underline {
1717
+ border-bottom: var(--hairline) solid var(--color-grey-scale-200);
1718
+
1719
+ /* Scrollable logic */
1720
+ overflow-x: auto;
1721
+ scrollbar-width: none;
1722
+ }
1723
+
1724
+ .tabs-list.variant-underline::-webkit-scrollbar {
1725
+ display: none;
1726
+ }
1727
+
1728
+ .tabs-trigger {
1729
+ /* 1. 구조적 스타일 (Layout) */
1730
+ display: inline-flex;
1731
+ align-items: center;
1732
+ justify-content: center;
1733
+ cursor: pointer;
1734
+ background: transparent;
1735
+ border: 0;
1736
+ flex-shrink: 0;
1737
+
1738
+ /* 2. 테마 스타일 (Theme) */
1739
+ /* figma 토큰에 11px 없음. 디자이너 확인 전까지 숫자 유지 */
1740
+ padding: 10px 30px 11px 30px; /* raw-px */
1741
+ color: var(--color-grey-scale-400);
1742
+ font-size: var(--font-size-sm);
1743
+ font-weight: var(--font-weight-medium);
1744
+ border-bottom: var(--hairline) solid var(--color-grey-scale-200);
1745
+ transition: color var(--motion-base) var(--motion-ease);
1746
+ }
1747
+
1748
+ .tabs-trigger:hover {
1749
+ color: var(--color-purple-700);
1750
+ }
1751
+
1752
+ .tabs-trigger[data-state='active'] {
1753
+ color: var(--color-purple-700);
1754
+ font-weight: var(--font-weight-bold);
1755
+ }
1756
+
1757
+ .tabs-trigger.disabled {
1758
+ cursor: not-allowed;
1759
+ opacity: 0.5;
1760
+ }
1761
+
1762
+ /* 3. 변이 스타일 (Variants) */
1763
+
1764
+ .tabs-trigger.variant-underline {
1765
+ border-bottom: 0;
1766
+ }
1767
+
1768
+ .tabs-trigger.variant-underline[data-state='active'] {
1769
+ border-bottom-color: transparent;
1770
+ }
1771
+
1772
+ .tabs-trigger.variant-filled {
1773
+ flex: 1; /* full-width logic integrated */
1774
+ text-align: center;
1775
+ /* figma 토큰에 11px 없음. 디자이너 확인 전까지 숫자 유지 */
1776
+ padding: 11px 30px; /* raw-px */
1777
+ border-bottom: 0;
1778
+ z-index: var(--z-raised);
1779
+ }
1780
+
1781
+ .tabs-trigger.variant-filled:hover,.tabs-trigger.variant-filled[data-state='active'] {
1782
+ background-color: transparent;
1783
+ }
1784
+
1785
+ .tabs-indicator {
1786
+ /* 1. 구조적 스타일 (Layout) */
1787
+ position: absolute;
1788
+ pointer-events: none;
1789
+ z-index: var(--z-raised);
1790
+ transition:
1791
+ left var(--motion-base) var(--motion-ease),
1792
+ width var(--motion-base) var(--motion-ease);
1793
+
1794
+ /* 2. 변이 스타일 (Variants) */
1795
+ }
1796
+
1797
+ .tabs-indicator.variant-underline {
1798
+ bottom: 0;
1799
+ height: var(--tab-indicator-thickness);
1800
+ background-color: var(--color-purple-800);
1801
+ }
1802
+
1803
+ .tabs-indicator.variant-filled {
1804
+ top: 0;
1805
+ bottom: 0;
1806
+ background-color: var(--color-purple-50);
1807
+ z-index: var(--z-base);
1808
+ }
1809
+
1810
+ .base-text-field.input {
1811
+ border: none;
1812
+ outline: none;
1813
+ background-color: transparent;
1814
+
1815
+ font-size: var(--font-size-sm);
1816
+ line-height: var(--line-height-sm);
1817
+ font-weight: var(--font-weight-medium);
1818
+ }
1819
+
1820
+ .base-text-field.input::-moz-placeholder {
1821
+ color: var(--color-grey-scale-400);
1822
+ }
1823
+
1824
+ .base-text-field.input::placeholder {
1825
+ color: var(--color-grey-scale-400);
1826
+ }
1827
+
1828
+ .base-text-field.input:-webkit-autofill,.base-text-field.input:-webkit-autofill:hover,.base-text-field.input:-webkit-autofill:focus,.base-text-field.input:-webkit-autofill:active {
1829
+ /* 브라우저 자동완성 배경을 덮는 관용 해킹. 토큰이 아니라 고정값이다 */ /* raw-value */
1830
+ box-shadow: 0 0 0px 1000px transparent inset; /* raw-value */
1831
+ -webkit-transition: background-color 5000s ease-in-out 0s;
1832
+ transition: background-color 5000s ease-in-out 0s; /* raw-value */
1833
+ }
1834
+
1835
+ /***************************************************************************************************
1836
+ * *
1837
+ * base-text-field *
1838
+ * *
1839
+ ***************************************************************************************************/
1840
+
1841
+ .text-field {
1842
+ height: -moz-fit-content;
1843
+ height: fit-content;
1844
+ }
1845
+
1846
+ .text-field-title {
1847
+ margin-bottom: var(--spacing-8);
1848
+ }
1849
+
1850
+ .text-field-input-wrapper {
1851
+ display: flex;
1852
+ align-items: center;
1853
+ justify-content: space-between;
1854
+ gap: var(--spacing-10);
1855
+
1856
+ padding: 0 var(--spacing-14);
1857
+
1858
+ border-radius: var(--radius-4);
1859
+ border: var(--hairline) solid var(--color-grey-scale-300);
1860
+ }
1861
+
1862
+ .text-field-input-wrapper.size-s {
1863
+ height: var(--control-height-s);
1864
+ }
1865
+
1866
+ .text-field-input-wrapper.size-m {
1867
+ height: var(--control-height-m);
1868
+ }
1869
+
1870
+ .text-field-input-wrapper:has( > input[data-disabled='true']) {
1871
+ border-color: var(--color-grey-scale-300);
1872
+ background-color: var(--color-grey-scale-100);
1873
+ }
1874
+
1875
+ .text-field-input-wrapper:focus-within {
1876
+ border: var(--hairline) solid var(--color-purple-900);
1877
+ }
1878
+
1879
+ .text-field-input-wrapper > input {
1880
+ width: 100%;
1881
+ }
1882
+
1883
+ .text-field-helper-text {
1884
+ margin-top: var(--spacing-4);
1885
+ }
1886
+
1887
+ .text-field-helper-text.error {
1888
+ color: var(--color-accent-red-500);
1889
+ }
1890
+
1891
+ /* Trigger 도 base-tooltip 을 달므로 z-index 는 Content 에만 건다. */
1892
+
1893
+ .base-tooltip:where(.content) {
1894
+ z-index: var(--z-tooltip);
1895
+ }
1896
+
1897
+ .base-tooltip.content {
1898
+ text-align: center;
1899
+ }
1900
+
1901
+ .base-tooltip:where(.trigger) {
1902
+ width: -moz-fit-content;
1903
+ width: fit-content;
1904
+ }
1905
+
1906
+ /***************************************************************************************************
1907
+ * *
1908
+ * tooltip *
1909
+ * *
1910
+ ***************************************************************************************************/
1911
+
1912
+ .tooltip-content {
1913
+ display: flex;
1914
+ justify-content: space-around;
1915
+ align-items: center;
1916
+ gap: var(--spacing-10);
1917
+
1918
+ background-color: var(--color-purple-900);
1919
+ color: var(--color-white);
1920
+ border-radius: var(--radius-6);
1921
+ padding: var(--spacing-12);
1922
+
1923
+ font-size: var(--font-size-sm);
1924
+ line-height: var(--line-height-sm);
1925
+ font-weight: var(--font-weight-regular);
1926
+
1927
+ position: relative;
1928
+ }
1929
+
1930
+ .tooltip-content::before {
1931
+ content: '';
1932
+ position: absolute;
1933
+ width: 0;
1934
+ height: 0;
1935
+ border-style: solid;
1936
+ }
1937
+
1938
+ .tooltip-content.direction-top {
1939
+ transform: translateY(calc(-1 * var(--spacing-10)));
1940
+ }
1941
+
1942
+ .tooltip-content.direction-top::before {
1943
+ bottom: calc(-1 * var(--tooltip-arrow));
1944
+ left: 50%;
1945
+ transform: translateX(-50%);
1946
+ border-width: var(--tooltip-arrow) var(--tooltip-arrow) 0 var(--tooltip-arrow);
1947
+ border-color: var(--color-purple-900) transparent transparent transparent;
1948
+ }
1949
+
1950
+ .tooltip-content.direction-bottom {
1951
+ transform: translateY(var(--spacing-10));
1952
+ }
1953
+
1954
+ .tooltip-content.direction-bottom::before {
1955
+ top: calc(-1 * var(--tooltip-arrow));
1956
+ left: 50%;
1957
+ transform: translateX(-50%);
1958
+ border-width: 0 var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow);
1959
+ border-color: transparent transparent var(--color-purple-900) transparent;
1960
+ }
1961
+
1962
+ .tooltip-content.direction-left {
1963
+ transform: translateX(calc(-1 * var(--spacing-10)));
1964
+ }
1965
+
1966
+ .tooltip-content.direction-left::before {
1967
+ right: calc(-1 * var(--tooltip-arrow));
1968
+ top: 50%;
1969
+ transform: translateY(-50%);
1970
+ border-width: var(--tooltip-arrow) 0 var(--tooltip-arrow) var(--tooltip-arrow);
1971
+ border-color: transparent transparent transparent var(--color-purple-900);
1972
+ }
1973
+
1974
+ .tooltip-content.direction-right {
1975
+ transform: translateX(var(--spacing-10));
1976
+ }
1977
+
1978
+ .tooltip-content.direction-right::before {
1979
+ left: calc(-1 * var(--tooltip-arrow));
1980
+ top: 50%;
1981
+ transform: translateY(-50%);
1982
+ border-width: var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow) 0;
1983
+ border-color: transparent var(--color-purple-900) transparent transparent;
1984
+ }