@stn-uiux/pub-ui 0.1.82 → 0.1.85

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 (103) hide show
  1. package/dist/{chunk-6FEWLKVE.js → chunk-2TRZNWCA.js} +32 -2
  2. package/dist/chunk-2TRZNWCA.js.map +1 -0
  3. package/dist/{chunk-AJLP3Y53.js → chunk-2VSSPMZ3.js} +2 -2
  4. package/dist/{chunk-AJLP3Y53.js.map → chunk-2VSSPMZ3.js.map} +1 -1
  5. package/dist/chunk-5QPBSOJ6.js +9 -0
  6. package/dist/chunk-5QPBSOJ6.js.map +1 -0
  7. package/dist/{chunk-AOS3IX4T.js → chunk-65B7YUTE.js} +2 -1
  8. package/dist/{chunk-AOS3IX4T.js.map → chunk-65B7YUTE.js.map} +1 -1
  9. package/dist/chunk-APXT43OG.js +232 -0
  10. package/dist/chunk-APXT43OG.js.map +1 -0
  11. package/dist/chunk-ERZPIKPF.js +1 -0
  12. package/dist/chunk-FLKGJJD5.js +45 -0
  13. package/dist/chunk-FLKGJJD5.js.map +1 -0
  14. package/dist/{chunk-N46UQH6L.js → chunk-K6TWXWIO.js} +11 -2
  15. package/dist/chunk-K6TWXWIO.js.map +1 -0
  16. package/dist/chunk-N4PVFFKV.js +38 -0
  17. package/dist/chunk-N4PVFFKV.js.map +1 -0
  18. package/dist/chunk-NYZMUDVK.js +12 -0
  19. package/dist/chunk-NYZMUDVK.js.map +1 -0
  20. package/dist/chunk-QJN2Z6RG.js +160 -0
  21. package/dist/chunk-QJN2Z6RG.js.map +1 -0
  22. package/dist/chunk-W7K3FSAX.js +24 -0
  23. package/dist/chunk-W7K3FSAX.js.map +1 -0
  24. package/dist/cli.js +17 -17
  25. package/dist/components.d.ts +1 -1
  26. package/dist/components.js +1 -1
  27. package/dist/data/index.d.ts +7 -2
  28. package/dist/data/index.js +142 -92
  29. package/dist/data/stnCard.d.ts +1 -1
  30. package/dist/data/stnCard.js +1 -1
  31. package/dist/data/stnDatePicker.d.ts +41 -10
  32. package/dist/data/stnDatePicker.js +9 -3
  33. package/dist/data/stnEmptyState.d.ts +35 -0
  34. package/dist/data/stnEmptyState.js +19 -0
  35. package/dist/data/stnEmptyState.js.map +1 -0
  36. package/dist/data/stnPackageVersion.d.ts +2 -2
  37. package/dist/data/stnPackageVersion.js +1 -1
  38. package/dist/data/stnPopover.d.ts +18 -0
  39. package/dist/data/stnPopover.js +9 -0
  40. package/dist/data/stnPopover.js.map +1 -0
  41. package/dist/data/stnSplitView.d.ts +16 -0
  42. package/dist/data/stnSplitView.js +11 -0
  43. package/dist/data/stnSplitView.js.map +1 -0
  44. package/dist/data/stnStepCards.d.ts +32 -0
  45. package/dist/data/stnStepCards.js +7 -0
  46. package/dist/data/stnStepCards.js.map +1 -0
  47. package/dist/data/stnStepper.d.ts +78 -0
  48. package/dist/data/stnStepper.js +7 -0
  49. package/dist/data/stnStepper.js.map +1 -0
  50. package/dist/data/stnTree.d.ts +3 -0
  51. package/dist/data/stnTree.js +1 -1
  52. package/dist/data/stnTypography.d.ts +17 -1
  53. package/dist/data/stnTypography.js +7 -1
  54. package/dist/index.d.ts +7 -2
  55. package/dist/index.js +143 -93
  56. package/package.json +1 -1
  57. package/styles/@assets/images/empty-state/forbidden.png +0 -0
  58. package/styles/@assets/images/empty-state/load-failed.png +0 -0
  59. package/styles/@assets/images/empty-state/maintenance.png +0 -0
  60. package/styles/@assets/images/empty-state/network.png +0 -0
  61. package/styles/@assets/images/empty-state/no-data.png +0 -0
  62. package/styles/@assets/images/empty-state/not-found.png +0 -0
  63. package/styles/@assets/images/empty-state/search-empty.png +0 -0
  64. package/styles/@assets/images/empty-state/server-error.png +0 -0
  65. package/styles/@assets/images/empty-state/timeout.png +0 -0
  66. package/styles/@assets/images/empty-state/unauthorized.png +0 -0
  67. package/styles/components/stn-card.css +49 -13
  68. package/styles/components/stn-checkbox.css +1 -1
  69. package/styles/components/stn-date-picker.css +252 -45
  70. package/styles/components/stn-date-range-field.css +2 -2
  71. package/styles/components/stn-drawer.css +2 -2
  72. package/styles/components/stn-dropdown.css +2 -2
  73. package/styles/components/stn-empty-state.css +238 -0
  74. package/styles/components/stn-popover.css +52 -0
  75. package/styles/components/stn-radio.css +1 -1
  76. package/styles/components/stn-slider.css +1 -1
  77. package/styles/components/stn-stepper.css +570 -0
  78. package/styles/components/stn-switch.css +1 -1
  79. package/styles/components/stn-table.css +39 -1
  80. package/styles/components/stn-text-field.css +5 -1
  81. package/styles/components/stn-tooltip.css +1 -1
  82. package/styles/layouts/stn-container.css +8 -0
  83. package/styles/layouts/stn-layer0-bg.css +18 -17
  84. package/styles/patterns/stn-login-card.css +6 -0
  85. package/styles/patterns/stn-split-view.css +130 -0
  86. package/styles/patterns/stn-step-cards.css +60 -0
  87. package/styles/patterns/stn-tree.css +9 -0
  88. package/styles/style-pub.css +5 -0
  89. package/styles/tokens/stn-colors-semantic.css +54 -0
  90. package/styles/tokens/stn-elevation.css +1 -0
  91. package/styles/tokens/stn-size-semantic.css +37 -0
  92. package/styles/tokens/stn-size.css +1 -0
  93. package/styles/tokens/stn-spacing-semantic.css +11 -0
  94. package/styles/tokens/stn-typography-semantic.css +7 -1
  95. package/styles/tokens/stn-typography.css +16 -0
  96. package/dist/chunk-6FEWLKVE.js.map +0 -1
  97. package/dist/chunk-N46UQH6L.js.map +0 -1
  98. package/dist/chunk-THTVXGTK.js +0 -9
  99. package/dist/chunk-THTVXGTK.js.map +0 -1
  100. package/dist/chunk-WKQLAHIG.js +0 -1
  101. package/dist/chunk-YBNEQ5LB.js +0 -75
  102. package/dist/chunk-YBNEQ5LB.js.map +0 -1
  103. /package/dist/{chunk-WKQLAHIG.js.map → chunk-ERZPIKPF.js.map} +0 -0
@@ -0,0 +1,570 @@
1
+ @charset "utf-8";
2
+ /**
3
+ * STN Component — Stepper (.stn-stepper)
4
+ * Responsive Multi-Step Progress Indicator & Wizard Navigation
5
+ */
6
+
7
+ /* ==========================================================================
8
+ 1. Root & Size Scale (Strict Rule 1: xs · sm · md · lg · xl)
9
+ ========================================================================== */
10
+
11
+ .stn-stepper {
12
+ --stn-stepper-node-size: var(--stn-stepper-node-size-md);
13
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-md);
14
+ --stn-stepper-font-size: var(--stn-font-size-14);
15
+ --stn-stepper-caption-size: var(--stn-font-size-12);
16
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-md);
17
+ --stn-stepper-gap: var(--stn-space-12);
18
+
19
+ display: flex;
20
+ box-sizing: border-box;
21
+ width: 100%;
22
+ position: relative;
23
+ font-family: inherit;
24
+ }
25
+
26
+ .stn-stepper.xs {
27
+ --stn-stepper-node-size: var(--stn-stepper-node-size-xs);
28
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-xs);
29
+ --stn-stepper-font-size: var(--stn-font-size-11);
30
+ --stn-stepper-caption-size: var(--stn-font-size-10);
31
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-xs);
32
+ --stn-stepper-gap: var(--stn-space-8);
33
+ }
34
+
35
+ .stn-stepper.sm {
36
+ --stn-stepper-node-size: var(--stn-stepper-node-size-sm);
37
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-sm);
38
+ --stn-stepper-font-size: var(--stn-font-size-12);
39
+ --stn-stepper-caption-size: var(--stn-font-size-11);
40
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-sm);
41
+ --stn-stepper-gap: var(--stn-space-10);
42
+ }
43
+
44
+ .stn-stepper.md {
45
+ --stn-stepper-node-size: var(--stn-stepper-node-size-md);
46
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-md);
47
+ --stn-stepper-font-size: var(--stn-font-size-14);
48
+ --stn-stepper-caption-size: var(--stn-font-size-12);
49
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-md);
50
+ --stn-stepper-gap: var(--stn-space-12);
51
+ }
52
+
53
+ .stn-stepper.lg {
54
+ --stn-stepper-node-size: var(--stn-stepper-node-size-lg);
55
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-lg);
56
+ --stn-stepper-font-size: var(--stn-font-size-16);
57
+ --stn-stepper-caption-size: var(--stn-font-size-13);
58
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-lg);
59
+ --stn-stepper-gap: var(--stn-space-16);
60
+ }
61
+
62
+ .stn-stepper.xl {
63
+ --stn-stepper-node-size: var(--stn-stepper-node-size-xl);
64
+ --stn-stepper-icon-size: var(--stn-stepper-icon-size-xl);
65
+ --stn-stepper-font-size: var(--stn-font-size-18);
66
+ --stn-stepper-caption-size: var(--stn-font-size-14);
67
+ --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-xl);
68
+ --stn-stepper-gap: var(--stn-space-20);
69
+ }
70
+
71
+ /* ==========================================================================
72
+ 2. Horizontal Layout & Alternative Label
73
+ ========================================================================== */
74
+
75
+ .stn-stepper--horizontal {
76
+ flex-direction: row;
77
+ align-items: center;
78
+ justify-content: space-between;
79
+ }
80
+
81
+ .stn-stepper--horizontal:not(.stn-stepper--alternative-label) .stn-step {
82
+ display: flex;
83
+ align-items: center;
84
+ flex: 1 1 0%;
85
+ position: relative;
86
+ }
87
+
88
+ .stn-stepper--horizontal:not(.stn-stepper--alternative-label) .stn-step:last-child {
89
+ flex: 0 0 auto;
90
+ }
91
+
92
+ /* Horizontal Alternative Label (아이콘 상단, 텍스트 하단 중앙 정렬) */
93
+ .stn-stepper--horizontal.stn-stepper--alternative-label {
94
+ align-items: flex-start;
95
+ }
96
+
97
+ .stn-stepper--horizontal.stn-stepper--alternative-label .stn-step,
98
+ .stn-stepper--horizontal.stn-stepper--alternative-label .stn-step:last-child {
99
+ display: flex;
100
+ flex-direction: column;
101
+ align-items: center;
102
+ text-align: center;
103
+ flex: 1 1 0%;
104
+ width: 100%;
105
+ position: relative;
106
+ }
107
+
108
+ .stn-stepper--horizontal.stn-stepper--alternative-label .stn-step__header {
109
+ display: flex;
110
+ flex-direction: column;
111
+ align-items: center;
112
+ width: 100%;
113
+ position: relative;
114
+ z-index: 1;
115
+ }
116
+
117
+ .stn-stepper--horizontal.stn-stepper--alternative-label .stn-step__connector {
118
+ position: absolute;
119
+ top: calc(var(--stn-stepper-node-size) / 2);
120
+ left: calc(-50% + var(--stn-stepper-node-size) / 2 + var(--stn-space-6));
121
+ right: calc(50% + var(--stn-stepper-node-size) / 2 + var(--stn-space-6));
122
+ transform: translateY(-50%);
123
+ margin: 0;
124
+ z-index: 0;
125
+ height: var(--stn-stepper-line-thickness);
126
+ pointer-events: none;
127
+ }
128
+
129
+ .stn-stepper--horizontal.stn-stepper--alternative-label .stn-step:first-child .stn-step__connector {
130
+ display: none;
131
+ }
132
+
133
+ /* ==========================================================================
134
+ 3. Vertical Layout (Left / Right Positioning — Image 1 & 2)
135
+ ========================================================================== */
136
+
137
+ .stn-stepper--vertical {
138
+ flex-direction: column;
139
+ align-items: stretch;
140
+ }
141
+
142
+ .stn-stepper--vertical .stn-step {
143
+ display: flex;
144
+ flex-direction: column;
145
+ position: relative;
146
+ min-height: var(--stn-size-48);
147
+ }
148
+
149
+ /* Vertical Left (기본: 노드/선 왼쪽, 내용 오른쪽) */
150
+ .stn-stepper--vertical-left .stn-step__header {
151
+ display: flex;
152
+ flex-direction: row;
153
+ align-items: center;
154
+ align-self: flex-start;
155
+ }
156
+
157
+ .stn-stepper--vertical-left .stn-step__content {
158
+ margin-left: calc(var(--stn-stepper-node-size) / 2 - var(--stn-stepper-line-thickness) / 2);
159
+ padding-left: calc(var(--stn-stepper-node-size) / 2 + var(--stn-space-12));
160
+ padding-top: var(--stn-space-8);
161
+ padding-bottom: var(--stn-space-20);
162
+ border-left: var(--stn-stepper-line-thickness) solid var(--stn-stepper-line-color);
163
+ text-align: left;
164
+ }
165
+
166
+ .stn-stepper--vertical-left .stn-step:last-child .stn-step__content {
167
+ border-left-color: transparent;
168
+ }
169
+
170
+ .stn-stepper--vertical-left .stn-step--line-success .stn-step__content {
171
+ border-left-color: var(--stn-stepper-line-success-color);
172
+ }
173
+
174
+ .stn-stepper--vertical-left .stn-step--line-active .stn-step__content {
175
+ border-left-color: var(--stn-stepper-line-active-color);
176
+ }
177
+
178
+ .stn-stepper--vertical-left .stn-step--line-error .stn-step__content {
179
+ border-left-color: var(--stn-stepper-line-error-color);
180
+ }
181
+
182
+ .stn-stepper--vertical-left .stn-step--line-warning .stn-step__content {
183
+ border-left-color: var(--stn-stepper-line-warning-color);
184
+ }
185
+
186
+ /* Vertical Right (Image 2: 노드/선 오른쪽, 내용/텍스트 왼쪽) */
187
+ .stn-stepper--vertical-right {
188
+ text-align: right;
189
+ }
190
+
191
+ .stn-stepper--vertical-right .stn-step__header {
192
+ display: flex;
193
+ flex-direction: row-reverse;
194
+ align-items: center;
195
+ justify-content: flex-start;
196
+ align-self: flex-end;
197
+ }
198
+
199
+ .stn-stepper--vertical-right .stn-step__label-wrap {
200
+ text-align: right;
201
+ margin-right: var(--stn-stepper-gap);
202
+ margin-left: 0;
203
+ display: flex;
204
+ flex-direction: column;
205
+ align-items: flex-end;
206
+ }
207
+
208
+ .stn-stepper--vertical-right .stn-step__content {
209
+ margin-right: calc(var(--stn-stepper-node-size) / 2 - var(--stn-stepper-line-thickness) / 2);
210
+ padding-right: calc(var(--stn-stepper-node-size) / 2 + var(--stn-space-12));
211
+ padding-top: var(--stn-space-8);
212
+ padding-bottom: var(--stn-space-20);
213
+ border-right: var(--stn-stepper-line-thickness) solid var(--stn-stepper-line-color);
214
+ text-align: right;
215
+ }
216
+
217
+ .stn-stepper--vertical-right .stn-step:last-child .stn-step__content {
218
+ border-right-color: transparent;
219
+ }
220
+
221
+ .stn-stepper--vertical-right .stn-step--line-success .stn-step__content {
222
+ border-right-color: var(--stn-stepper-line-success-color);
223
+ }
224
+
225
+ .stn-stepper--vertical-right .stn-step--line-active .stn-step__content {
226
+ border-right-color: var(--stn-stepper-line-active-color);
227
+ }
228
+
229
+ .stn-stepper--vertical-right .stn-step--line-error .stn-step__content {
230
+ border-right-color: var(--stn-stepper-line-error-color);
231
+ }
232
+
233
+ .stn-stepper--vertical-right .stn-step--line-warning .stn-step__content {
234
+ border-right-color: var(--stn-stepper-line-warning-color);
235
+ }
236
+
237
+ .stn-stepper--vertical-right .stn-step__actions {
238
+ justify-content: flex-end;
239
+ }
240
+
241
+ .stn-stepper--vertical-right .stn-step__error-msg {
242
+ justify-content: flex-end;
243
+ }
244
+
245
+ /* Vertical 모드 접힌 스텝 간 연결선 */
246
+ .stn-step__connector--vertical {
247
+ width: var(--stn-stepper-node-size);
248
+ min-height: var(--stn-size-28);
249
+ display: flex;
250
+ align-items: stretch;
251
+ justify-content: center;
252
+ margin: 0;
253
+ padding: var(--stn-space-2) 0;
254
+ box-sizing: border-box;
255
+ }
256
+
257
+ .stn-step__connector--vertical .stn-step__connector-line {
258
+ width: var(--stn-stepper-line-thickness);
259
+ height: 100%;
260
+ min-height: var(--stn-size-24);
261
+ background-color: var(--stn-stepper-line-color);
262
+ border-radius: var(--stn-radius-circle);
263
+ }
264
+
265
+ .stn-step__connector--vertical .stn-step__connector-line--active {
266
+ background-color: var(--stn-stepper-line-active-color);
267
+ }
268
+
269
+ .stn-step__connector--vertical .stn-step__connector-line--success {
270
+ background-color: var(--stn-stepper-line-success-color);
271
+ }
272
+
273
+ .stn-step__connector--vertical .stn-step__connector-line--error {
274
+ background-color: var(--stn-stepper-line-error-color);
275
+ }
276
+
277
+ .stn-step__connector--vertical .stn-step__connector-line--warning {
278
+ background-color: var(--stn-stepper-line-warning-color);
279
+ }
280
+
281
+ .stn-stepper--vertical-left .stn-step__connector--vertical {
282
+ margin-left: 0;
283
+ align-self: flex-start;
284
+ }
285
+
286
+ .stn-stepper--vertical-right .stn-step__connector--vertical {
287
+ margin-right: 0;
288
+ align-self: flex-end;
289
+ }
290
+
291
+ /* ==========================================================================
292
+ 4. Step Header & Button (Non-linear Interactive Support)
293
+ ========================================================================== */
294
+
295
+ .stn-step__header {
296
+ display: flex;
297
+ align-items: center;
298
+ position: relative;
299
+ z-index: 1;
300
+ background: transparent;
301
+ border: none;
302
+ padding: 0;
303
+ margin: 0;
304
+ text-decoration: none;
305
+ font: inherit;
306
+ color: inherit;
307
+ flex-shrink: 0;
308
+ }
309
+
310
+ .stn-step__button {
311
+ cursor: pointer;
312
+ border-radius: var(--stn-radius-6);
313
+ transition: opacity 0.2s ease, background-color 0.2s ease;
314
+ padding: var(--stn-space-4);
315
+ margin: calc(var(--stn-space-4) * -1);
316
+ }
317
+
318
+ .stn-step__button:hover:not(:disabled) {
319
+ background-color: color-mix(in srgb, var(--stn-primary) 6%, transparent);
320
+ }
321
+
322
+ .stn-step__button:focus-visible {
323
+ outline: none;
324
+ box-shadow: var(--stn-focus-ring);
325
+ }
326
+
327
+ .stn-step__button:disabled {
328
+ cursor: not-allowed;
329
+ opacity: 0.6;
330
+ }
331
+
332
+ /* ==========================================================================
333
+ 5. Step Node (Circle, Dot, Icon, Spinner)
334
+ ========================================================================== */
335
+
336
+ .stn-step__node {
337
+ width: var(--stn-stepper-node-size);
338
+ height: var(--stn-stepper-node-size);
339
+ border-radius: var(--stn-radius-circle);
340
+ display: flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ flex-shrink: 0;
344
+ font-size: var(--stn-stepper-font-size);
345
+ font-weight: var(--stn-font-weight-bold, 700);
346
+ line-height: 1;
347
+ box-sizing: border-box;
348
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
349
+ position: relative;
350
+ }
351
+
352
+ /* --- 5대 상태 (Status) 표현 --- */
353
+
354
+ /* 1. Wait (대기) */
355
+ .stn-step--wait .stn-step__node {
356
+ background-color: var(--stn-stepper-node-wait-bg);
357
+ border: var(--stn-stepper-node-border-width) solid var(--stn-stepper-node-wait-border);
358
+ color: var(--stn-stepper-node-wait-fg);
359
+ }
360
+
361
+ /* 2. Running (진행 중 / 활성) */
362
+ .stn-step--running .stn-step__node,
363
+ .stn-step--active:not(.stn-step--error):not(.stn-step--warning):not(.stn-step--completed) .stn-step__node {
364
+ background-color: var(--stn-stepper-node-running-bg);
365
+ border: var(--stn-stepper-node-border-width-active) solid var(--stn-stepper-node-running-border);
366
+ color: var(--stn-stepper-node-running-fg);
367
+ box-shadow: 0 0 0 var(--stn-stepper-node-ring-width) var(--stn-stepper-node-running-ring);
368
+ }
369
+
370
+ .stn-step__spinner {
371
+ animation: stn-stepper-spin 1s linear infinite;
372
+ display: inline-flex;
373
+ }
374
+
375
+ @keyframes stn-stepper-spin {
376
+ from { transform: rotate(0deg); }
377
+ to { transform: rotate(360deg); }
378
+ }
379
+
380
+ /* 3. Success (완료) */
381
+ .stn-step--success .stn-step__node,
382
+ .stn-step--completed .stn-step__node {
383
+ background-color: var(--stn-stepper-node-success-bg);
384
+ border: var(--stn-stepper-node-border-width) solid var(--stn-stepper-node-success-border);
385
+ color: var(--stn-stepper-node-success-fg);
386
+ }
387
+
388
+ /* 4. Error (오류) */
389
+ .stn-step--error .stn-step__node {
390
+ background-color: var(--stn-stepper-node-error-bg);
391
+ border: var(--stn-stepper-node-border-width) solid var(--stn-stepper-node-error-border);
392
+ color: var(--stn-stepper-node-error-fg);
393
+ box-shadow: 0 0 0 var(--stn-stepper-node-ring-width) var(--stn-stepper-node-error-ring);
394
+ }
395
+
396
+ /* 5. Warning (경고) */
397
+ .stn-step--warning .stn-step__node {
398
+ background-color: var(--stn-stepper-node-warning-bg);
399
+ border: var(--stn-stepper-node-border-width) solid var(--stn-stepper-node-warning-border);
400
+ color: var(--stn-stepper-node-warning-fg);
401
+ box-shadow: 0 0 0 var(--stn-stepper-node-ring-width) var(--stn-stepper-node-warning-ring);
402
+ }
403
+
404
+ /* ==========================================================================
405
+ 6. Connectors (스텝 간 연결선)
406
+ ========================================================================== */
407
+
408
+ .stn-step__connector {
409
+ flex: 1 1 auto;
410
+ position: relative;
411
+ margin: 0 var(--stn-stepper-gap);
412
+ display: flex;
413
+ align-items: center;
414
+ }
415
+
416
+ .stn-step__connector-line {
417
+ display: block;
418
+ width: 100%;
419
+ height: var(--stn-stepper-line-thickness);
420
+ background-color: var(--stn-stepper-line-color);
421
+ transition: background-color 0.25s ease;
422
+ border-radius: var(--stn-radius-circle);
423
+ }
424
+
425
+ .stn-step__connector-line--active {
426
+ background-color: var(--stn-stepper-line-active-color);
427
+ }
428
+
429
+ .stn-step__connector-line--success {
430
+ background-color: var(--stn-stepper-line-success-color);
431
+ }
432
+
433
+ .stn-step__connector-line--error {
434
+ background-color: var(--stn-stepper-line-error-color);
435
+ }
436
+
437
+ .stn-step__connector-line--warning {
438
+ background-color: var(--stn-stepper-line-warning-color);
439
+ }
440
+
441
+ /* ==========================================================================
442
+ 7. Labels, Captions & Error Messages
443
+ ========================================================================== */
444
+
445
+ .stn-step__label-wrap {
446
+ display: flex;
447
+ flex-direction: column;
448
+ margin-left: var(--stn-stepper-gap);
449
+ text-align: left;
450
+ }
451
+
452
+ /* 라벨 숨김: 정적 HTML에서 문구 마크업이 남아 있어도 노드만 보이게 */
453
+ .stn-stepper--hide-label .stn-step__label-wrap {
454
+ position: absolute;
455
+ width: 1px;
456
+ height: 1px;
457
+ padding: 0;
458
+ margin: -1px;
459
+ overflow: hidden;
460
+ clip: rect(0, 0, 0, 0);
461
+ white-space: nowrap;
462
+ border: 0;
463
+ }
464
+
465
+ .stn-step__sr {
466
+ position: absolute;
467
+ width: 1px;
468
+ height: 1px;
469
+ padding: 0;
470
+ margin: -1px;
471
+ overflow: hidden;
472
+ clip: rect(0, 0, 0, 0);
473
+ white-space: nowrap;
474
+ border: 0;
475
+ }
476
+
477
+ .stn-stepper--alternative-label .stn-step__label-wrap {
478
+ margin-left: 0;
479
+ margin-top: var(--stn-space-8);
480
+ align-items: center;
481
+ text-align: center;
482
+ }
483
+
484
+ .stn-step__label {
485
+ font-size: var(--stn-stepper-font-size);
486
+ font-weight: var(--stn-font-weight-medium, 500);
487
+ color: var(--stn-text-secondary);
488
+ line-height: 1.35;
489
+ transition: color 0.2s ease;
490
+ }
491
+
492
+ .stn-step--active .stn-step__label {
493
+ font-weight: var(--stn-font-weight-bold, 700);
494
+ color: var(--stn-text-primary);
495
+ }
496
+
497
+ .stn-step--completed .stn-step__label {
498
+ color: var(--stn-text-primary);
499
+ }
500
+
501
+ .stn-step--error .stn-step__label {
502
+ color: var(--stn-feedback-error);
503
+ font-weight: var(--stn-font-weight-bold, 700);
504
+ }
505
+
506
+ .stn-step__caption {
507
+ font-size: var(--stn-stepper-caption-size);
508
+ color: var(--stn-text-tertiary);
509
+ margin-top: var(--stn-space-2);
510
+ }
511
+
512
+ .stn-step__error-msg {
513
+ font-size: var(--stn-stepper-caption-size);
514
+ color: var(--stn-feedback-error);
515
+ margin-top: var(--stn-space-2);
516
+ display: flex;
517
+ align-items: center;
518
+ gap: var(--stn-space-4);
519
+ }
520
+
521
+ .stn-step__optional {
522
+ font-size: var(--stn-stepper-caption-size);
523
+ color: var(--stn-text-tertiary);
524
+ margin-left: var(--stn-space-6);
525
+ }
526
+
527
+ /* ==========================================================================
528
+ 8. Vertical Content & Actions (Image 1, 2)
529
+ ========================================================================== */
530
+
531
+ .stn-step__content {
532
+ font-size: var(--stn-stepper-font-size);
533
+ color: var(--stn-text-primary);
534
+ line-height: 1.6;
535
+ }
536
+
537
+ .stn-step__actions {
538
+ display: flex;
539
+ align-items: center;
540
+ gap: var(--stn-space-8);
541
+ margin-top: var(--stn-space-16);
542
+ }
543
+
544
+ /* ==========================================================================
545
+ 9. No Line Modifier (showLine={false})
546
+ ========================================================================== */
547
+
548
+ .stn-stepper--no-line .stn-step__connector {
549
+ display: none !important;
550
+ }
551
+
552
+ .stn-stepper--no-line .stn-step__content {
553
+ border-left-color: transparent !important;
554
+ border-right-color: transparent !important;
555
+ }
556
+
557
+ /* ==========================================================================
558
+ 10. Line Thickness Modifiers (.stn-stepper--line-*)
559
+ ========================================================================== */
560
+
561
+ .stn-stepper.stn-stepper--line-1 { --stn-stepper-line-thickness: var(--stn-size-1) !important; }
562
+ .stn-stepper.stn-stepper--line-2 { --stn-stepper-line-thickness: var(--stn-size-2) !important; }
563
+ .stn-stepper.stn-stepper--line-3 { --stn-stepper-line-thickness: var(--stn-size-3) !important; }
564
+ .stn-stepper.stn-stepper--line-4 { --stn-stepper-line-thickness: var(--stn-size-4) !important; }
565
+
566
+ .stn-stepper.stn-stepper--line-xs { --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-xs) !important; }
567
+ .stn-stepper.stn-stepper--line-sm { --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-sm) !important; }
568
+ .stn-stepper.stn-stepper--line-md { --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-md) !important; }
569
+ .stn-stepper.stn-stepper--line-lg { --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-lg) !important; }
570
+ .stn-stepper.stn-stepper--line-xl { --stn-stepper-line-thickness: var(--stn-stepper-line-thickness-xl) !important; }
@@ -52,7 +52,7 @@
52
52
  --stn-switch-track-h: var(--stn-switch-track-h-lg, 24px);
53
53
  --stn-switch-thumb: var(--stn-switch-thumb-size-lg, 16px);
54
54
  --stn-switch-pad: var(--stn-space-4, 4px);
55
- font-size: var(--stn-text-body-size, 15px);
55
+ font-size: var(--stn-text-body-medium-large-size);
56
56
  }
57
57
 
58
58
  /* Colors / Semantic Tones */
@@ -437,6 +437,36 @@ td.stn-table__col-check .stn-checkbox {
437
437
  background: var(--stn-table-row-hover);
438
438
  }
439
439
 
440
+ /* Table Empty State (StnEmptyState 연동 — important 제거 & 시멘틱 토큰 적용) */
441
+ .stn-table tbody td.stn-table__empty-cell,
442
+ .stn-table__tbody td.stn-table__empty-cell,
443
+ .stn-table tbody td[colspan]:has(> .stn-empty-state),
444
+ .stn-table__tbody td[colspan]:has(> .stn-empty-state) {
445
+ height: auto;
446
+ min-height: var(--stn-table-empty-min-height);
447
+ padding: var(--stn-table-empty-cell-padding-y) var(--stn-table-empty-cell-padding-x);
448
+ white-space: normal;
449
+ overflow: visible;
450
+ text-overflow: clip;
451
+ text-align: center;
452
+ vertical-align: middle;
453
+ background: transparent;
454
+ }
455
+
456
+ .stn-table__empty-cell .stn-empty-state,
457
+ .stn-table__grid td[colspan] > .stn-empty-state {
458
+ margin: 0 auto;
459
+ }
460
+
461
+ .stn-table__tbody tr.is-empty:hover,
462
+ .stn-table__tbody tr.is-empty:hover > td,
463
+ .stn-table__tbody tr:has(> td.stn-table__empty-cell):hover,
464
+ .stn-table__tbody tr:has(> td.stn-table__empty-cell):hover > td,
465
+ .stn-table__tbody tr:has(> td[colspan] > .stn-empty-state):hover,
466
+ .stn-table__tbody tr:has(> td[colspan] > .stn-empty-state):hover > td {
467
+ background: transparent;
468
+ }
469
+
440
470
  /* Row Actions (호버 시 우측 버튼 노출) */
441
471
  .stn-table__grid td:has(> .stn-table__row-actions),
442
472
  .stn-table__grid th[aria-hidden]:last-child,
@@ -508,7 +538,10 @@ td.stn-table__col-check .stn-checkbox {
508
538
  .stn-table__thead th:active:has(.stn-table__sort),
509
539
  .stn-table__thead th:has(.stn-table__sort:active),
510
540
  .stn-table__thead th.is-pressed {
511
- background: var(--stn-table-th-pressed-bg, var(--stn-table-th-group-bg)) !important;
541
+ background:
542
+ linear-gradient(var(--stn-table-th-pressed-bg, var(--stn-table-th-group-bg)),
543
+ var(--stn-table-th-pressed-bg, var(--stn-table-th-group-bg))),
544
+ var(--stn-table-th-bg) !important;
512
545
  }
513
546
 
514
547
  /* Row Clickable Cursor */
@@ -794,6 +827,11 @@ th[colspan].stn-table__thead tr:not(:last-child) th::before {
794
827
  justify-content: center;
795
828
  }
796
829
 
830
+ .stn-table__grid thead tr > th:last-child .stn-table__resizer,
831
+ .stn-table__grid thead tr > th:nth-last-child(2):has(+ th[aria-hidden]:last-child) .stn-table__resizer {
832
+ right: 0;
833
+ }
834
+
797
835
  .stn-table__resizer::after {
798
836
  content: '';
799
837
  display: block;
@@ -32,6 +32,10 @@
32
32
  -webkit-appearance: none;
33
33
  }
34
34
 
35
+ .stn-text-field[list] {
36
+ line-height: normal;
37
+ }
38
+
35
39
  .stn-text-field::placeholder {
36
40
  color: var(--stn-input-placeholder);
37
41
  font-weight: var(--stn-font-weight-medium);
@@ -344,7 +348,7 @@
344
348
  font-size: var(--stn-text-field-label-size, var(--stn-text-field-font-size, var(--stn-text-body-small-size)));
345
349
  font-weight: var(--stn-text-field-label-weight, var(--stn-font-weight-medium));
346
350
  color: var(--stn-text-primary);
347
- line-height: var(--stn-text-field-label-line-height, var(--stn-line-height-default));
351
+ line-height: var(--stn-text-field-label-line-height, var(--stn-input-label-line-height, var(--stn-line-height-default)));
348
352
  white-space: nowrap;
349
353
  user-select: none;
350
354
  cursor: pointer;
@@ -203,7 +203,7 @@
203
203
 
204
204
  /* SM: 소형 (높이 20px, 폰트 11px) */
205
205
  .stn-tooltip.sm {
206
- --stn-tooltip-font-size: var(--stn-text-caption-small-size, var(--stn-font-size-11, 11px));
206
+ --stn-tooltip-font-size: var(--stn-text-caption-small-size);
207
207
  --stn-tooltip-pad-y: var(--stn-space-2);
208
208
  --stn-tooltip-pad-x: var(--stn-space-6);
209
209
  --stn-tooltip-min-height: var(--stn-size-20);
@@ -9,6 +9,7 @@
9
9
  --stn-container-gutter-mobile: var(--stn-space-16, 16px);
10
10
  --stn-container-gutter-tablet: var(--stn-space-16, 16px);
11
11
  --stn-container-gutter-desktop: var(--stn-space-24, 24px);
12
+ --stn-container-gutter-none: var(--stn-space-0);
12
13
  }
13
14
 
14
15
  .stn-container {
@@ -41,6 +42,13 @@
41
42
  }
42
43
  }
43
44
 
45
+ /* 컨테이너 자신의 좌우 패딩만 끈다.
46
+ !important를 쓰지 않아, .stn-layer-1__body > .stn-container 의 16px은 그대로 남는다. */
47
+ .stn-container--disable-gutters {
48
+ padding-left: var(--stn-container-gutter-none);
49
+ padding-right: var(--stn-container-gutter-none);
50
+ }
51
+
44
52
  /* Fluid max-width. width 100%라서 캡에 닿기 전까지 화면과 같이 늘어난다.
45
53
  xs는 breakpoint가 없어서 444px. sm–xl은 STN breakpoint 폭. */
46
54
  .stn-container--xs,