@stn-uiux/pub-ui 0.1.76 → 0.1.78

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 (50) hide show
  1. package/dist/{chunk-2ZYBBVBT.js → chunk-36QC3ZAD.js} +2 -2
  2. package/dist/{chunk-2ZYBBVBT.js.map → chunk-36QC3ZAD.js.map} +1 -1
  3. package/dist/{chunk-VC72NQIU.js → chunk-EKPLU5KT.js} +33 -10
  4. package/dist/chunk-EKPLU5KT.js.map +1 -0
  5. package/dist/{chunk-75GHU6VI.js → chunk-G4SOYIHZ.js} +11 -7
  6. package/dist/chunk-G4SOYIHZ.js.map +1 -0
  7. package/dist/chunk-GYPBZAB2.js +9 -0
  8. package/dist/chunk-GYPBZAB2.js.map +1 -0
  9. package/dist/{chunk-3CYSR7V4.js → chunk-QGC3IK52.js} +2 -2
  10. package/dist/{chunk-3CYSR7V4.js.map → chunk-QGC3IK52.js.map} +1 -1
  11. package/dist/{chunk-7YKAIENZ.js → chunk-RVYQ7WL3.js} +2 -7
  12. package/dist/{chunk-7YKAIENZ.js.map → chunk-RVYQ7WL3.js.map} +1 -1
  13. package/dist/{chunk-FSSMH6VS.js → chunk-TEK632EJ.js} +9 -46
  14. package/dist/chunk-TEK632EJ.js.map +1 -0
  15. package/dist/cli.js +3 -3
  16. package/dist/data/index.d.ts +2 -2
  17. package/dist/data/index.js +9 -9
  18. package/dist/data/stnLayer0Background.d.ts +9 -43
  19. package/dist/data/stnLayer0Background.js +1 -3
  20. package/dist/data/stnLayout.d.ts +1 -1
  21. package/dist/data/stnLayout.js +1 -1
  22. package/dist/data/stnLogin.d.ts +1 -1
  23. package/dist/data/stnLogin.js +1 -1
  24. package/dist/data/stnPackageVersion.d.ts +2 -2
  25. package/dist/data/stnPackageVersion.js +1 -1
  26. package/dist/data/stnPopup.d.ts +8 -8
  27. package/dist/data/stnPopup.js +1 -1
  28. package/dist/data/stnSectionSide.d.ts +1 -5
  29. package/dist/data/stnSectionSide.js +1 -1
  30. package/dist/data/stnTypeScale.d.ts +6 -1
  31. package/dist/data/stnTypeScale.js +3 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +9 -9
  34. package/package.json +1 -1
  35. package/styles/components/stn-label-prefix.css +4 -2
  36. package/styles/components/stn-popup.css +44 -104
  37. package/styles/foundations/stn-typography.css +166 -0
  38. package/styles/layouts/stn-layer0-bg.css +92 -26
  39. package/styles/patterns/stn-section-side.css +1 -9
  40. package/styles/style-pub.css +1 -0
  41. package/styles/tokens/stn-colors-semantic.css +8 -1
  42. package/styles/tokens/stn-size-semantic.css +5 -0
  43. package/styles/tokens/stn-spacing-semantic.css +12 -0
  44. package/styles/tokens/stn-typography-semantic.css +7 -3
  45. package/styles/tokens/stn-typography.css +3 -3
  46. package/dist/chunk-75GHU6VI.js.map +0 -1
  47. package/dist/chunk-FSSMH6VS.js.map +0 -1
  48. package/dist/chunk-RY53LLWK.js +0 -9
  49. package/dist/chunk-RY53LLWK.js.map +0 -1
  50. package/dist/chunk-VC72NQIU.js.map +0 -1
@@ -17,8 +17,8 @@
17
17
  box-sizing: border-box;
18
18
  }
19
19
 
20
- .stn-pop--open {
21
- display: flex !important;
20
+ .stn-pop.stn-pop--open {
21
+ display: flex;
22
22
  align-items: center;
23
23
  justify-content: center;
24
24
  }
@@ -41,8 +41,8 @@
41
41
  overflow: hidden;
42
42
  box-sizing: border-box;
43
43
  background-color: var(--stn-pop-surface);
44
- border: 1px solid var(--stn-pop-border);
45
- border-radius: var(--stn-radius-pop-wrap, var(--stn-radius-8));
44
+ border: var(--stn-pop-border-width) solid var(--stn-pop-border);
45
+ border-radius: var(--stn-radius-pop-wrap);
46
46
  box-shadow: var(--stn-pop-shadow);
47
47
  }
48
48
 
@@ -50,19 +50,28 @@
50
50
  .stn-pop__head {
51
51
  box-sizing: border-box;
52
52
  display: flex;
53
- flex-direction: column;
54
- justify-content: center;
55
- min-height: var(--stn-pop-header-height, var(--stn-size-56));
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ gap: var(--stn-pop-head-gap);
56
+ min-height: var(--stn-pop-header-height);
56
57
  height: auto;
57
- padding: 12px 48px 12px 20px;
58
+ padding: var(--stn-pop-head-padding-y) var(--stn-pop-head-padding-x);
58
59
  margin: 0;
59
- border-bottom: 1px solid var(--stn-pop-divider);
60
+ border-bottom: var(--stn-pop-border-width) solid var(--stn-pop-divider);
61
+ }
62
+
63
+ .stn-pop__head-start {
64
+ display: flex;
65
+ flex-direction: column;
66
+ justify-content: center;
67
+ min-width: 0;
68
+ flex: 1 1 auto;
60
69
  }
61
70
 
62
71
  .stn-pop__head-row {
63
72
  display: flex;
64
73
  align-items: center;
65
- gap: var(--stn-space-8, 8px);
74
+ gap: var(--stn-pop-head-row-gap);
66
75
  flex-wrap: wrap;
67
76
  }
68
77
 
@@ -71,24 +80,24 @@
71
80
  color: var(--stn-pop-title);
72
81
  font-family: var(--stn-font-body);
73
82
  font-size: var(--stn-text-title-medium-size);
74
- line-height: var(--stn-line-height-tight, 1.25);
83
+ line-height: var(--stn-line-height-tight);
75
84
  font-weight: var(--stn-font-weight-semibold);
76
85
  letter-spacing: 0;
77
86
  }
78
87
 
79
88
  .stn-pop__subtitle {
80
- margin: 4px 0 0 0;
89
+ margin: var(--stn-pop-subtitle-margin-top) 0 0 0;
81
90
  font-family: var(--stn-font-body);
82
91
  font-size: var(--stn-text-body-small-size);
83
92
  color: var(--stn-text-subtle);
84
- line-height: var(--stn-line-height-normal, 1.5);
93
+ line-height: var(--stn-line-height-normal);
85
94
  }
86
95
 
87
96
  /* Body */
88
97
  .stn-pop__body {
89
98
  flex: 1 1 auto;
90
99
  min-height: 0;
91
- padding: var(--stn-space-20, 20px);
100
+ padding: var(--stn-pop-body-padding);
92
101
  overflow: auto;
93
102
  -webkit-overflow-scrolling: touch;
94
103
  background: transparent;
@@ -103,75 +112,8 @@
103
112
  /* 본문 레이아웃 — 배경은 .stn-pop__panel 만 (내부 투명) */
104
113
  .stn-pop__body .box_area,
105
114
  .stn-pop__body .box_area .box {
106
- background: transparent !important;
107
- background-color: transparent !important;
108
- background-image: none !important;
109
- box-shadow: none !important;
110
- }
111
-
112
- /* Close button — centered vertically in 56px header (top 14, right 16) */
113
- .stn-pop__close {
114
- position: absolute;
115
- top: 14px;
116
- right: 16px;
117
- box-sizing: border-box;
118
- width: var(--stn-pop-close-size) !important;
119
- height: var(--stn-pop-close-size) !important;
120
- min-width: var(--stn-pop-close-size);
121
- min-height: var(--stn-pop-close-size);
122
- padding: 0;
123
- border: none;
124
- border-radius: var(--stn-radius-sm);
125
- background-color: transparent;
126
- background-image: none;
127
- opacity: 1;
128
- color: var(--stn-pop-title);
129
- transition: background-color 0.15s ease, color 0.15s ease;
130
- }
131
-
132
- .stn-pop__close::before,
133
- .stn-pop__close::after {
134
- content: none;
135
- display: none;
136
- }
137
-
138
- /* Legacy HTML close (no React glyph) — Figma icon/line/x mask */
139
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph) {
140
- background-color: transparent;
141
- background-image: none;
142
- -webkit-mask: none;
143
- mask: none;
144
- color: var(--stn-pop-title);
145
- }
146
-
147
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph)::before {
148
- content: '';
149
- display: block;
150
- position: absolute;
151
- top: 50%;
152
- left: 50%;
153
- width: var(--stn-pop-close-icon);
154
- height: var(--stn-pop-close-icon);
155
- margin: calc(var(--stn-pop-close-icon) / -2) 0 0 calc(var(--stn-pop-close-icon) / -2);
156
- background-color: currentColor;
157
- mask-image: url('../@assets/svg/system/line/x.svg');
158
- mask-position: center;
159
- mask-size: contain;
160
- mask-repeat: no-repeat;
161
- -webkit-mask-image: url('../@assets/svg/system/line/x.svg');
162
- -webkit-mask-position: center;
163
- -webkit-mask-size: contain;
164
- -webkit-mask-repeat: no-repeat;
165
- }
166
-
167
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph)::after {
168
- content: none;
169
- display: none;
170
- }
171
-
172
- .stn-pop__close:hover {
173
- background-color: var(--stn-pop-close-hover-bg);
174
- color: var(--stn-pop-close-hover-fg);
115
+ background: transparent;
116
+ box-shadow: none;
175
117
  }
176
118
 
177
119
  /* —— Size modifiers — active width on .stn-pop —— */
@@ -216,7 +158,7 @@
216
158
 
217
159
  /* 문서·패턴 프리뷰 — 인라인 시연 */
218
160
  .stn-pop-uc-inline.stn-pop {
219
- display: flex !important;
161
+ display: flex;
220
162
  position: relative;
221
163
  top: auto;
222
164
  right: auto;
@@ -230,7 +172,7 @@
230
172
  .stn-pop-stack {
231
173
  position: fixed;
232
174
  inset: 0;
233
- z-index: var(--stn-elevation-z-2, 200);
175
+ z-index: var(--stn-elevation-z-2);
234
176
  pointer-events: none;
235
177
  }
236
178
 
@@ -284,7 +226,7 @@
284
226
  .stn-pop-stack--inline {
285
227
  position: absolute;
286
228
  inset: 0;
287
- z-index: var(--stn-elevation-z-2, 200);
229
+ z-index: var(--stn-elevation-z-2);
288
230
  min-height: 0;
289
231
  pointer-events: auto;
290
232
  }
@@ -292,24 +234,24 @@
292
234
  .stn-pop-stack--inline > .stn-layer-dim {
293
235
  position: absolute;
294
236
  inset: 0;
295
- z-index: var(--stn-elevation-z-2, 200);
237
+ z-index: var(--stn-elevation-z-2);
296
238
  border-radius: inherit;
297
239
  }
298
240
 
299
241
  .stn-pop-stack--inline > .stn-layer-2 {
300
242
  position: absolute;
301
243
  inset: 0;
302
- z-index: calc(var(--stn-elevation-z-2, 200) + 1);
244
+ z-index: calc(var(--stn-elevation-z-2) + 1);
303
245
  display: flex;
304
246
  align-items: center;
305
247
  justify-content: center;
306
- padding: var(--stn-pop-gutter, 16px);
248
+ padding: var(--stn-pop-gutter);
307
249
  box-sizing: border-box;
308
250
  pointer-events: none;
309
251
  }
310
252
 
311
253
  .stn-pop-stack--inline > .stn-layer-2 > .stn-pop {
312
- display: flex !important;
254
+ display: flex;
313
255
  pointer-events: auto;
314
256
  }
315
257
 
@@ -319,12 +261,12 @@
319
261
  flex-wrap: wrap;
320
262
  align-items: center;
321
263
  justify-content: flex-end;
322
- gap: var(--stn-space-8, 8px);
264
+ gap: var(--stn-pop-actions-gap);
323
265
  box-sizing: border-box;
324
- min-height: var(--stn-pop-footer-height, var(--stn-size-56));
266
+ min-height: var(--stn-pop-footer-height);
325
267
  margin-top: 0;
326
- padding: 12px 20px;
327
- border-top: 1px solid var(--stn-pop-divider);
268
+ padding: var(--stn-pop-actions-padding-y) var(--stn-pop-actions-padding-x);
269
+ border-top: var(--stn-pop-border-width) solid var(--stn-pop-divider);
328
270
  background-color: var(--stn-pop-surface);
329
271
  }
330
272
 
@@ -343,19 +285,19 @@
343
285
  /* —— Master-Detail Split Layout (.stn-pop-split) —— */
344
286
  .stn-pop-split {
345
287
  display: flex;
346
- gap: var(--stn-space-20, 20px);
347
- min-height: 400px;
288
+ gap: var(--stn-pop-split-gap);
289
+ min-height: var(--stn-pop-split-min-height);
348
290
  height: 100%;
349
291
  box-sizing: border-box;
350
292
  }
351
293
 
352
294
  .stn-pop-split__aside {
353
- width: var(--stn-pop-split-aside-width, 280px);
354
- min-width: var(--stn-pop-split-aside-width, 280px);
355
- max-width: 320px;
295
+ width: var(--stn-pop-split-aside-width);
296
+ min-width: var(--stn-pop-split-aside-width);
297
+ max-width: var(--stn-pop-split-aside-max-width);
356
298
  flex-shrink: 0;
357
- border-right: 1px solid var(--stn-pop-divider);
358
- padding-right: var(--stn-space-16, 16px);
299
+ border-right: var(--stn-pop-border-width) solid var(--stn-pop-divider);
300
+ padding-right: var(--stn-pop-split-aside-padding-right);
359
301
  display: flex;
360
302
  flex-direction: column;
361
303
  overflow-y: auto;
@@ -367,9 +309,7 @@
367
309
  min-width: 0;
368
310
  display: flex;
369
311
  flex-direction: column;
370
- gap: var(--stn-space-16, 16px);
312
+ gap: var(--stn-pop-split-main-gap);
371
313
  overflow-y: auto;
372
314
  box-sizing: border-box;
373
315
  }
374
-
375
-
@@ -0,0 +1,166 @@
1
+ @charset "utf-8";
2
+ /**
3
+ * STN Design System — Typography Utilities (Type Scale)
4
+ * Foundation › Typography 문서의 Type Scale 이름을 그대로 클래스화합니다.
5
+ * 모든 값은 --stn-text-* / --stn-font-* 시맨틱 토큰만 사용합니다.
6
+ *
7
+ * 사용: <h1 class="stn-text-heading-1">페이지 제목</h1>
8
+ * 수정자: .stn-text-weight-*, .stn-text-color-*, .stn-text-truncate
9
+ */
10
+
11
+ /* ── Display ───────────────────────────────────────────── */
12
+ .stn-text-display-1 {
13
+ font-family: var(--stn-font-display);
14
+ font-size: var(--stn-text-display-xlarge-size);
15
+ font-weight: var(--stn-text-display-xlarge-weight);
16
+ line-height: var(--stn-text-display-xlarge-line-height);
17
+ }
18
+ .stn-text-display-2 {
19
+ font-family: var(--stn-font-display);
20
+ font-size: var(--stn-text-display-large-size);
21
+ font-weight: var(--stn-text-display-large-weight);
22
+ line-height: var(--stn-text-display-large-line-height);
23
+ }
24
+ .stn-text-display-3 {
25
+ font-family: var(--stn-font-display);
26
+ font-size: var(--stn-text-display-medium-size);
27
+ font-weight: var(--stn-text-display-medium-weight);
28
+ line-height: var(--stn-text-display-medium-line-height);
29
+ }
30
+
31
+ /* ── Heading ───────────────────────────────────────────── */
32
+ .stn-text-heading-1 {
33
+ font-family: var(--stn-font-display);
34
+ font-size: var(--stn-text-heading-large-size);
35
+ font-weight: var(--stn-text-heading-large-weight);
36
+ line-height: var(--stn-text-heading-large-line-height);
37
+ }
38
+ .stn-text-heading-2 {
39
+ font-family: var(--stn-font-display);
40
+ font-size: var(--stn-text-heading-medium-size);
41
+ font-weight: var(--stn-text-heading-medium-weight);
42
+ line-height: var(--stn-text-heading-medium-line-height);
43
+ }
44
+ .stn-text-heading-3 {
45
+ font-family: var(--stn-font-display);
46
+ font-size: var(--stn-text-heading-small-size);
47
+ font-weight: var(--stn-text-heading-small-weight);
48
+ line-height: var(--stn-text-heading-small-line-height);
49
+ }
50
+
51
+ /* ── Title ─────────────────────────────────────────────── */
52
+ .stn-text-title-1 {
53
+ font-family: var(--stn-font-body);
54
+ font-size: var(--stn-text-title-large-size);
55
+ font-weight: var(--stn-text-title-large-weight);
56
+ line-height: var(--stn-text-title-large-line-height);
57
+ }
58
+ .stn-text-title-2 {
59
+ font-family: var(--stn-font-body);
60
+ font-size: var(--stn-text-title-medium-size);
61
+ font-weight: var(--stn-text-title-medium-weight);
62
+ line-height: var(--stn-text-title-medium-line-height);
63
+ }
64
+ .stn-text-title-3 {
65
+ font-family: var(--stn-font-body);
66
+ font-size: var(--stn-text-title-small-size);
67
+ font-weight: var(--stn-text-title-small-weight);
68
+ line-height: var(--stn-text-title-small-line-height);
69
+ }
70
+
71
+ /* ── Body ──────────────────────────────────────────────── */
72
+ .stn-text-body-1 {
73
+ font-family: var(--stn-font-body);
74
+ font-size: var(--stn-text-body-large-size);
75
+ font-weight: var(--stn-text-body-large-weight);
76
+ line-height: var(--stn-text-body-large-line-height);
77
+ }
78
+ .stn-text-body-2 {
79
+ font-family: var(--stn-font-body);
80
+ font-size: var(--stn-text-body-medium-large-size);
81
+ font-weight: var(--stn-text-body-medium-large-weight);
82
+ line-height: var(--stn-text-body-medium-large-line-height);
83
+ }
84
+ .stn-text-body-3 {
85
+ font-family: var(--stn-font-body);
86
+ font-size: var(--stn-text-body-medium-size);
87
+ font-weight: var(--stn-text-body-medium-weight);
88
+ line-height: var(--stn-text-body-medium-line-height);
89
+ }
90
+ .stn-text-body-small {
91
+ font-family: var(--stn-font-body);
92
+ font-size: var(--stn-text-body-small-size);
93
+ font-weight: var(--stn-text-body-small-weight);
94
+ line-height: var(--stn-text-body-small-line-height);
95
+ }
96
+
97
+ /* ── Label ─────────────────────────────────────────────── */
98
+ .stn-text-label-1 {
99
+ font-family: var(--stn-font-body);
100
+ font-size: var(--stn-text-label-large-size);
101
+ font-weight: var(--stn-text-label-large-weight);
102
+ line-height: var(--stn-text-label-large-line-height);
103
+ }
104
+ .stn-text-label-2 {
105
+ font-family: var(--stn-font-body);
106
+ font-size: var(--stn-text-label-medium-size);
107
+ font-weight: var(--stn-text-label-medium-weight);
108
+ line-height: var(--stn-text-label-medium-line-height);
109
+ }
110
+ .stn-text-label-3 {
111
+ font-family: var(--stn-font-body);
112
+ font-size: var(--stn-text-label-small-size);
113
+ font-weight: var(--stn-text-label-small-weight);
114
+ line-height: var(--stn-text-label-small-line-height);
115
+ }
116
+ .stn-text-label-4 {
117
+ font-family: var(--stn-font-body);
118
+ font-size: var(--stn-text-label-xsmall-size);
119
+ font-weight: var(--stn-text-label-xsmall-weight);
120
+ line-height: var(--stn-text-label-xsmall-line-height);
121
+ }
122
+
123
+ /* ── Caption ───────────────────────────────────────────── */
124
+ .stn-text-caption-large {
125
+ font-family: var(--stn-font-body);
126
+ font-size: var(--stn-text-caption-large-size);
127
+ font-weight: var(--stn-text-caption-large-weight);
128
+ line-height: var(--stn-text-caption-large-line-height);
129
+ }
130
+ .stn-text-caption {
131
+ font-family: var(--stn-font-body);
132
+ font-size: var(--stn-text-caption-medium-size);
133
+ font-weight: var(--stn-text-caption-medium-weight);
134
+ line-height: var(--stn-text-caption-medium-line-height);
135
+ }
136
+
137
+ /* ── Weight modifiers ──────────────────────────────────── */
138
+ .stn-text-weight-regular { font-weight: var(--stn-font-weight-regular); }
139
+ .stn-text-weight-medium { font-weight: var(--stn-font-weight-medium); }
140
+ .stn-text-weight-semibold { font-weight: var(--stn-font-weight-semibold); }
141
+ .stn-text-weight-bold { font-weight: var(--stn-font-weight-bold); }
142
+
143
+ /* ── Color modifiers ───────────────────────────────────── */
144
+ .stn-text-color-primary { color: var(--stn-text-primary); }
145
+ .stn-text-color-secondary { color: var(--stn-text-secondary); }
146
+ .stn-text-color-tertiary { color: var(--stn-text-tertiary); }
147
+ .stn-text-color-muted { color: var(--stn-text-muted); }
148
+ .stn-text-color-success { color: var(--stn-feedback-success); }
149
+ .stn-text-color-error { color: var(--stn-feedback-error); }
150
+ .stn-text-color-info { color: var(--stn-feedback-info); }
151
+ .stn-text-color-critical { color: var(--stn-grade-critical); }
152
+ .stn-text-color-major { color: var(--stn-grade-major); }
153
+ .stn-text-color-minor { color: var(--stn-grade-minor); }
154
+ .stn-text-color-warning { color: var(--stn-grade-warning); }
155
+
156
+ /* ── Layout helpers ────────────────────────────────────── */
157
+ .stn-text-truncate {
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ white-space: nowrap;
161
+ }
162
+ .stn-text-reset-margin { margin: 0; }
163
+ .stn-text-numeric {
164
+ font-family: var(--stn-font-number);
165
+ font-variant-numeric: tabular-nums;
166
+ }
@@ -1,10 +1,56 @@
1
1
  @charset "utf-8";
2
2
  /**
3
3
  * STN Layout — L0 Background Layer (z-index: 0)
4
- * HTML: `class="stn-layer0-bg color default"` · `class="stn-layer0-bg image"`
5
- * modifier는 `.stn-layer0-bg.color` / `.stn-layer0-bg.image`로만 매칭
4
+ *
5
+ * 순수 CSS 토큰(Token-driven) 아키텍처:
6
+ * 테마(Default/Blue) 및 모드(Light/Dark)에 따른 배경 이미지를 CSS 변수(--stn-l0-*-bg)로 선언하여,
7
+ * 컴포넌트는 단 한 줄의 background-image: var(...) 만으로 테마 전환을 자동 처리합니다.
6
8
  */
7
9
 
10
+ /* ==========================================================================
11
+ 1. L0 Background Image Tokens (CDN)
12
+ ========================================================================== */
13
+
14
+ /* 1-1. Default Theme — Light Mode */
15
+ [data-mode='light'],
16
+ [data-theme='default'][data-mode='light'] {
17
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/dashboard-light.png');
18
+ --stn-l0-list-bg: var(--stn-gradient-l0-background);
19
+ --stn-l0-showroom-a-bg: url('https://stn-design.vercel.app/images/layer0/showroom-a-light.png');
20
+ --stn-l0-showroom-b-bg: url('https://stn-design.vercel.app/images/layer0/showroom-b-light.png');
21
+ --stn-l0-map-light-bg: url('https://stn-design.vercel.app/images/layer0/map-light.png');
22
+ --stn-l0-login-bg: url('https://stn-design.vercel.app/images/layer0/login-light.png');
23
+ }
24
+
25
+ /* 1-2. Default Theme — Dark Mode */
26
+ :root,
27
+ [data-mode='dark'],
28
+ [data-theme='default'][data-mode='dark'] {
29
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/dashboard-dark.png');
30
+ --stn-l0-list-bg: var(--stn-gradient-l0-background);
31
+ --stn-l0-showroom-a-bg: url('https://stn-design.vercel.app/images/layer0/showroom-a-dark.png');
32
+ --stn-l0-showroom-b-bg: url('https://stn-design.vercel.app/images/layer0/showroom-b-dark.png');
33
+ --stn-l0-map-light-bg: url('https://stn-design.vercel.app/images/layer0/map-dark.png');
34
+ --stn-l0-login-bg: url('https://stn-design.vercel.app/images/layer0/login-dark.png');
35
+ }
36
+
37
+ /* 1-3. Blue Theme — Light Mode */
38
+ [data-theme='blue'][data-mode='light'] {
39
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/infomap-light.png');
40
+ --stn-l0-list-bg: url('https://stn-design.vercel.app/images/layer0/infomap-light-none.png');
41
+ }
42
+
43
+ /* 1-4. Blue Theme — Dark Mode */
44
+ [data-theme='blue'][data-mode='dark'] {
45
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/infomap-dark.png');
46
+ --stn-l0-list-bg: url('https://stn-design.vercel.app/images/layer0/infomap-dark-none.png');
47
+ }
48
+
49
+
50
+ /* ==========================================================================
51
+ 2. Base Layer 0 Shell
52
+ ========================================================================== */
53
+
8
54
  .stn-layer0-bg {
9
55
  position: absolute;
10
56
  inset: 0;
@@ -13,30 +59,63 @@
13
59
  z-index: var(--stn-elevation-z-0, 0);
14
60
  overflow: hidden;
15
61
  pointer-events: none;
62
+ background-size: cover;
63
+ background-position: center;
64
+ background-repeat: no-repeat;
16
65
  }
17
66
 
18
- /* 1. Color preset — named look은 `.default` (다크/라이트 모두 순수 단색 바닥면) */
67
+ /* Color preset */
19
68
  .stn-layer0-bg.color,
20
69
  .stn-layer0-bg.color.default {
21
70
  background-color: var(--stn-elevation-surface-0);
22
71
  background-image: none;
23
72
  }
24
73
 
25
- /* 2. Gradient preset — 공식 앰비언트 그라데이션 바닥면 (다크/라이트 자동 전환) */
74
+ /* Gradient preset */
26
75
  .stn-layer0-bg.gradient {
27
76
  background-color: var(--stn-elevation-surface-0);
28
77
  background-image: var(--stn-gradient-l0-background);
29
- background-size: cover;
30
- background-position: center;
31
- background-repeat: no-repeat;
32
78
  }
33
79
 
34
- /* Image preset */
35
- .stn-layer0-bg.image {
80
+ /* List preset — 테마 반응형 바닥면 (Default: 그라데이션, Blue: 3D infomap-none) */
81
+ .stn-layer0-bg.list {
82
+ background-color: var(--stn-elevation-surface-0);
83
+ background-image: var(--stn-l0-list-bg);
84
+ }
85
+
86
+ /* Dashboard preset — 테마 반응형 바닥면 (Default: 웨이브, Blue: 3D infomap) */
87
+ .stn-layer0-bg.dashboard {
36
88
  background-color: var(--stn-elevation-surface-0);
89
+ background-image: var(--stn-l0-dashboard-bg);
37
90
  }
38
91
 
92
+ /* 기타 이미지 프리셋 */
93
+ .stn-layer0-bg.showroom-a {
94
+ background-image: var(--stn-l0-showroom-a-bg);
95
+ }
96
+
97
+ .stn-layer0-bg.showroom-b {
98
+ background-image: var(--stn-l0-showroom-b-bg);
99
+ }
100
+
101
+ .stn-layer0-bg.map-light {
102
+ background-image: var(--stn-l0-map-light-bg);
103
+ }
104
+
105
+ .stn-layer0-bg.login {
106
+ background-image: var(--stn-l0-login-bg);
107
+ }
108
+
109
+ /* 레거시/호환용 프리셋 */
110
+ .stn-layer0-bg.infomap {
111
+ background-image: var(--stn-l0-dashboard-bg);
112
+ }
113
+
114
+ .stn-layer0-bg.infomap-none {
115
+ background-image: var(--stn-l0-list-bg);
116
+ }
39
117
 
118
+ /* 커스텀 이미지 URL을 src로 직접 전달한 경우 호환용 미디어 영역 */
40
119
  .stn-layer0-bg__media {
41
120
  position: absolute;
42
121
  inset: 0;
@@ -51,15 +130,6 @@
51
130
  object-position: center;
52
131
  }
53
132
 
54
- /* Dark/Light image switching */
55
- .stn-layer0-bg__img.light {
56
- display: none;
57
- }
58
-
59
- .stn-layer0-bg__img.dark {
60
- display: block;
61
- }
62
-
63
133
  [data-mode='dark'] .stn-layer0-bg__img.light {
64
134
  display: none;
65
135
  }
@@ -92,15 +162,11 @@
92
162
  display: block;
93
163
  }
94
164
 
95
- .stn-layer0-bg__overlay.radial {
165
+ [data-mode='dark'] .stn-layer0-bg__overlay.radial {
96
166
  display: block;
97
167
  background: radial-gradient(
98
- 50% 50% at 50% 50%,
99
- color-mix(in srgb, var(--stn-layer0-radial) 100%, transparent) 26.442%,
100
- color-mix(in srgb, var(--stn-layer0-radial) 30%, transparent) 100%
168
+ ellipse 70% 60% at 50% 45%,
169
+ transparent 0%,
170
+ color-mix(in srgb, var(--stn-static-black) 72%, transparent) 100%
101
171
  );
102
172
  }
103
-
104
- [data-mode='light'] .stn-layer0-bg__overlay.radial {
105
- display: none;
106
- }
@@ -21,15 +21,7 @@
21
21
  overflow: hidden;
22
22
  }
23
23
 
24
- /* translucent variant — 반투명 블러 글래스모피즘 외형 (테두리 및 그림자 없음) */
25
- .stn-section-side.translucent,
26
- .stn-section-side--translucent {
27
- background: var(--stn-section-side-bg-translucent);
28
- backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
29
- -webkit-backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
30
- border-color: var(--stn-section-side-border-translucent);
31
- box-shadow: none;
32
- }
24
+
33
25
 
34
26
  /* fullWidth prop 또는 부모 LNB 컨테이너 안에서 가로 100% 확장 지원 */
35
27
  .stn-section-side.is-full-width,
@@ -26,6 +26,7 @@
26
26
 
27
27
  /* --- 2. Utils & Reset --- */
28
28
  @import './utils/reset.css';
29
+ @import './foundations/stn-typography.css';
29
30
 
30
31
  /* --- 3. Layouts (Pure Screen Skeletons) --- */
31
32
  @import './layouts/stn-layout.css';
@@ -51,7 +51,7 @@
51
51
  --stn-elevation-surface-1: var(--stn-opacity-black-0);
52
52
  --stn-elevation-surface-2: var(--stn-gray-800);
53
53
  --stn-elevation-surface-widget: var(--stn-gray-850);
54
- --stn-drawer-bg: var(--stn-gray-750);
54
+ --stn-drawer-bg: var(--stn-gray-850);
55
55
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-950) 50%, transparent);
56
56
  --stn-dim-blur: 4px;
57
57
  --stn-input-bg: var(--stn-gray-900);
@@ -1229,8 +1229,15 @@
1229
1229
 
1230
1230
  [data-theme='blue'][data-mode='dark'] {
1231
1231
  --stn-table-th-bg: var(--stn-blue-750);
1232
+ --stn-section-side-bg: var(--stn-opacity-black-25);
1233
+ --stn-section-side-border: var(--stn-border-subtle);
1234
+ --stn-input-border: var(--stn-gray-800);
1235
+ --stn-input-bg: var(--stn-opacity-black-25);
1236
+ --stn-search-requirement-bg: var(--stn-opacity-black-25);
1232
1237
  }
1233
1238
 
1234
1239
  [data-theme='blue'][data-mode='light'] {
1235
1240
  --stn-table-th-bg: var(--stn-blue-100);
1241
+ --stn-section-side-bg: var(--stn-opacity-white-25);
1242
+ --stn-section-side-border: var(--stn-border-subtle);
1236
1243
  }
@@ -62,6 +62,11 @@
62
62
  --stn-icon-box-size-xl: var(--stn-size-44);
63
63
  --stn-pop-header-height: var(--stn-size-56);
64
64
  --stn-pop-footer-height: var(--stn-size-56);
65
+ --stn-pop-border-width: var(--stn-size-1);
66
+ --stn-pop-split-min-height: var(--stn-size-400);
67
+ --stn-pop-split-aside-width: var(--stn-size-280);
68
+ --stn-pop-split-aside-max-width: var(--stn-size-320);
69
+ --stn-pop-max-height: calc(100vh - var(--stn-pop-gutter) * 2);
65
70
  --stn-segmented-item-height: var(--stn-size-32);
66
71
  --stn-segmented-item-height-sm: var(--stn-size-26);
67
72
  --stn-segmented-item-height-lg: var(--stn-size-40);
@@ -59,6 +59,18 @@
59
59
  --stn-chip-gap: var(--stn-space-4);
60
60
  --stn-chip-padding-y: var(--stn-space-0);
61
61
  --stn-pop-gutter: var(--stn-space-20);
62
+ --stn-pop-head-padding-y: var(--stn-space-12);
63
+ --stn-pop-head-padding-x: var(--stn-space-20);
64
+ --stn-pop-head-gap: var(--stn-space-12);
65
+ --stn-pop-head-row-gap: var(--stn-space-8);
66
+ --stn-pop-subtitle-margin-top: var(--stn-space-4);
67
+ --stn-pop-body-padding: var(--stn-space-20);
68
+ --stn-pop-actions-padding-y: var(--stn-space-12);
69
+ --stn-pop-actions-padding-x: var(--stn-space-20);
70
+ --stn-pop-actions-gap: var(--stn-space-8);
71
+ --stn-pop-split-gap: var(--stn-space-20);
72
+ --stn-pop-split-aside-padding-right: var(--stn-space-16);
73
+ --stn-pop-split-main-gap: var(--stn-space-16);
62
74
  --stn-text-field-padding-x-xl: var(--stn-space-16);
63
75
  --stn-text-field-padding-x-lg: var(--stn-space-12);
64
76
  --stn-text-field-padding-x-md: var(--stn-space-10);