@stn-uiux/pub-ui 0.1.73 → 0.1.75

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 (49) hide show
  1. package/dist/{chunk-KLIYAEJA.js → chunk-2LRCGTKQ.js} +7 -17
  2. package/dist/chunk-2LRCGTKQ.js.map +1 -0
  3. package/dist/{chunk-WN7FYFIO.js → chunk-AJLP3Y53.js} +3 -1
  4. package/dist/chunk-AJLP3Y53.js.map +1 -0
  5. package/dist/chunk-M4MX76BY.js +9 -0
  6. package/dist/chunk-M4MX76BY.js.map +1 -0
  7. package/dist/{chunk-NB4NJQYE.js → chunk-YJLOIDKY.js} +24 -24
  8. package/dist/chunk-YJLOIDKY.js.map +1 -0
  9. package/dist/cli.js +1 -1
  10. package/dist/data/index.d.ts +1 -1
  11. package/dist/data/index.js +6 -4
  12. package/dist/data/stnCard.d.ts +3 -1
  13. package/dist/data/stnCard.js +3 -1
  14. package/dist/data/stnChip.d.ts +2 -3
  15. package/dist/data/stnChip.js +1 -1
  16. package/dist/data/stnPackageVersion.d.ts +2 -2
  17. package/dist/data/stnPackageVersion.js +1 -1
  18. package/dist/data/stnTextField.d.ts +2 -2
  19. package/dist/data/stnTextField.js +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +6 -4
  22. package/package.json +1 -1
  23. package/styles/components/stn-breadcrumb.css +37 -34
  24. package/styles/components/stn-card.css +24 -3
  25. package/styles/components/stn-date-picker.css +1 -1
  26. package/styles/components/stn-drawer.css +182 -0
  27. package/styles/components/stn-event-banner.css +18 -18
  28. package/styles/components/stn-pagination.css +9 -8
  29. package/styles/components/stn-progress-bar.css +5 -5
  30. package/styles/components/stn-side-nav.css +55 -31
  31. package/styles/components/stn-status.css +22 -22
  32. package/styles/components/stn-table.css +42 -0
  33. package/styles/components/stn-tabs.css +3 -3
  34. package/styles/components/stn-tooltip.css +1 -1
  35. package/styles/components/stn-widget.css +3 -3
  36. package/styles/patterns/stn-alert-center.css +6 -6
  37. package/styles/patterns/stn-header.css +7 -7
  38. package/styles/style-pub.css +1 -0
  39. package/styles/tokens/stn-breakpoint.css +0 -12
  40. package/styles/tokens/stn-colors-semantic.css +15 -13
  41. package/styles/tokens/stn-elevation.css +5 -1
  42. package/styles/tokens/stn-radius-semantic.css +1 -1
  43. package/styles/tokens/stn-size-semantic.css +8 -0
  44. package/styles/tokens/stn-spacing-semantic.css +25 -0
  45. package/dist/chunk-KLIYAEJA.js.map +0 -1
  46. package/dist/chunk-NB4NJQYE.js.map +0 -1
  47. package/dist/chunk-Q363EBGR.js +0 -9
  48. package/dist/chunk-Q363EBGR.js.map +0 -1
  49. package/dist/chunk-WN7FYFIO.js.map +0 -1
@@ -0,0 +1,182 @@
1
+ /**
2
+ * STN Drawer Component (L2 Side Sheet)
3
+ *
4
+ * - L1.8 Side Sheet 계층 (z-index: var(--stn-elevation-z-drawer))
5
+ * - non-dimming (dim={false}) 및 dimming (dim={true}) 두 가지 모드 완벽 지원
6
+ * - 표준 크기 스케일 (sm, md, lg, xl, full)
7
+ * - 방향 (right, left, bottom) 지원
8
+ */
9
+
10
+ /* ── 1. Drawer Stack Root ── */
11
+ .stn-drawer-stack {
12
+ position: fixed;
13
+ inset: 0;
14
+ z-index: var(--stn-elevation-z-drawer); /* L1.8 Side Sheet 계층 (z-180, Dropdown 150 초과 / Modal 200 미만) */
15
+ display: flex;
16
+ visibility: hidden;
17
+ pointer-events: none;
18
+ transition: visibility var(--stn-motion-duration-fast, 0.25s) ease;
19
+ }
20
+
21
+ .stn-drawer-stack.is-open {
22
+ visibility: visible;
23
+ }
24
+
25
+ /* Dim (Backdrop) 모드 */
26
+ .stn-drawer-stack--dim.is-open {
27
+ pointer-events: auto;
28
+ }
29
+
30
+ /* ── 2. Dim Scrim ── */
31
+ .stn-drawer-stack__dim {
32
+ position: absolute;
33
+ inset: 0;
34
+ background: var(--stn-dim-bg);
35
+ backdrop-filter: blur(var(--stn-dim-blur));
36
+ opacity: 0;
37
+ pointer-events: auto;
38
+ transition: opacity var(--stn-motion-duration-fast, 0.25s) ease;
39
+ }
40
+
41
+ .stn-drawer-stack.is-open .stn-drawer-stack__dim {
42
+ opacity: 1;
43
+ }
44
+
45
+ /* ── 3. Drawer Panel ── */
46
+ .stn-drawer {
47
+ position: absolute;
48
+ display: flex;
49
+ flex-direction: column;
50
+ background: var(--stn-drawer-bg);
51
+ border-color: var(--stn-border-subtle);
52
+ border-style: solid;
53
+ border-width: 0;
54
+ box-shadow: var(--stn-shadow-xl);
55
+ pointer-events: auto;
56
+ transition: transform var(--stn-motion-duration-fast, 0.25s) var(--stn-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1));
57
+ will-change: transform;
58
+ }
59
+
60
+ /* Drawer Panel Padding Scale (.padding-none, .padding-xs ~ .padding-xl) */
61
+ .stn-drawer.padding-none { padding: var(--stn-drawer-padding-none); }
62
+ .stn-drawer.padding-xs { padding: var(--stn-drawer-padding-xs); }
63
+ .stn-drawer.padding-sm { padding: var(--stn-drawer-padding-sm); }
64
+ .stn-drawer.padding-md { padding: var(--stn-drawer-padding-md); }
65
+ .stn-drawer.padding-lg { padding: var(--stn-drawer-padding-lg); }
66
+ .stn-drawer.padding-xl { padding: var(--stn-drawer-padding-xl); }
67
+
68
+ /* Drawer Panel Gap Scale (Header, Body, Footer 간격 조절) */
69
+ .stn-drawer.gap-none { gap: var(--stn-drawer-gap-none); }
70
+ .stn-drawer.gap-xs { gap: var(--stn-drawer-gap-xs); }
71
+ .stn-drawer.gap-sm { gap: var(--stn-drawer-gap-sm); }
72
+ .stn-drawer.gap-md { gap: var(--stn-drawer-gap-md); }
73
+ .stn-drawer.gap-lg { gap: var(--stn-drawer-gap-lg); }
74
+ .stn-drawer.gap-xl { gap: var(--stn-drawer-gap-xl); }
75
+
76
+ /* ── 4. Placement (방향) ── */
77
+ /* Right (기본) */
78
+ .stn-drawer--right {
79
+ top: 0;
80
+ bottom: 0;
81
+ right: 0;
82
+ height: 100%;
83
+ width: min(var(--stn-drawer-active-width, 480px), 100vw);
84
+ border-left-width: 1px;
85
+ transform: translateX(100%);
86
+ }
87
+
88
+ .stn-drawer-stack.is-open .stn-drawer--right {
89
+ transform: translateX(0);
90
+ }
91
+
92
+ /* Left */
93
+ .stn-drawer--left {
94
+ top: 0;
95
+ bottom: 0;
96
+ left: 0;
97
+ height: 100%;
98
+ width: min(var(--stn-drawer-active-width, 480px), 100vw);
99
+ border-right-width: 1px;
100
+ transform: translateX(-100%);
101
+ }
102
+
103
+ .stn-drawer-stack.is-open .stn-drawer--left {
104
+ transform: translateX(0);
105
+ }
106
+
107
+ /* Bottom */
108
+ .stn-drawer--bottom {
109
+ left: 0;
110
+ right: 0;
111
+ bottom: 0;
112
+ width: 100%;
113
+ height: min(var(--stn-drawer-active-height, 480px), 100vh);
114
+ border-top-width: 1px;
115
+ transform: translateY(100%);
116
+ }
117
+
118
+ .stn-drawer-stack.is-open .stn-drawer--bottom {
119
+ transform: translateY(0);
120
+ }
121
+
122
+ /* ── 5. Size Variants (표준 스케일) ── */
123
+ .stn-drawer--sm { --stn-drawer-active-width: var(--stn-drawer-width-sm, 360px); --stn-drawer-active-height: var(--stn-drawer-height-sm, 360px); }
124
+ .stn-drawer--md { --stn-drawer-active-width: var(--stn-drawer-width-md, 480px); --stn-drawer-active-height: var(--stn-drawer-height-md, 480px); }
125
+ .stn-drawer--lg { --stn-drawer-active-width: var(--stn-drawer-width-lg, 640px); --stn-drawer-active-height: var(--stn-drawer-height-lg, 640px); }
126
+ .stn-drawer--xl { --stn-drawer-active-width: var(--stn-drawer-width-xl, 800px); --stn-drawer-active-height: var(--stn-drawer-height-xl, 800px); }
127
+
128
+ /* ── 6. Header, Body, Footer Subcomponents ── */
129
+ .stn-drawer__head {
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: space-between;
133
+ padding: var(--stn-space-4) var(--stn-space-5);
134
+ background: var(--stn-drawer-bg);
135
+ }
136
+
137
+ .stn-drawer__head-title {
138
+ margin: 0;
139
+ font-size: var(--stn-text-h4-size);
140
+ font-weight: var(--stn-font-weight-semibold);
141
+ color: var(--stn-text-primary);
142
+ line-height: var(--stn-text-h4-line-height);
143
+ }
144
+
145
+ .stn-drawer__subtitle {
146
+ margin: var(--stn-space-1) 0 0;
147
+ font-size: var(--stn-text-body-small-size);
148
+ color: var(--stn-text-secondary);
149
+ }
150
+
151
+ .stn-drawer__close {
152
+ flex-shrink: 0;
153
+ }
154
+
155
+ .stn-drawer__body {
156
+ flex: 1;
157
+ overflow-y: auto;
158
+ padding: var(--stn-space-5);
159
+ color: var(--stn-text-primary);
160
+ display: flex;
161
+ flex-direction: column;
162
+ }
163
+
164
+ .stn-drawer__footer {
165
+ display: flex;
166
+ align-items: center;
167
+ gap: var(--stn-space-2);
168
+ padding: var(--stn-space-3) var(--stn-space-5);
169
+ background: var(--stn-elevation-surface-1);
170
+ }
171
+
172
+ .stn-drawer__footer--right {
173
+ justify-content: flex-end;
174
+ }
175
+
176
+ .stn-drawer__footer--center {
177
+ justify-content: center;
178
+ }
179
+
180
+ .stn-drawer__footer--between {
181
+ justify-content: space-between;
182
+ }
@@ -80,14 +80,14 @@
80
80
  padding: var(--stn-space-12, 12px) var(--stn-space-16, 16px);
81
81
  border-radius: var(--stn-radius-8, 8px);
82
82
  background: var(--stn-event-banner-bg);
83
- backdrop-filter: blur(24px);
84
- -webkit-backdrop-filter: blur(24px);
83
+ backdrop-filter: blur(var(--stn-dim-blur, 8px));
84
+ -webkit-backdrop-filter: blur(var(--stn-dim-blur, 8px));
85
85
  isolation: isolate;
86
86
  transform: translateZ(0);
87
87
  overflow: hidden;
88
- z-index: 1000;
89
- font-family: var(--stn-font-family-pretendard, var(--Typography-font-family-pretendard, sans-serif));
90
- gap: var(--stn-space-12, 12px);
88
+ z-index: var(--stn-elevation-z-banner);
89
+ font-family: var(--stn-font-body);
90
+ gap: var(--stn-space-12);
91
91
  border: 1px solid var(--stn-event-banner-cr-border);
92
92
  border-left: 2px solid var(--stn-event-banner-cr-accent);
93
93
  box-shadow: var(--stn-event-banner-cr-shadow);
@@ -286,8 +286,8 @@
286
286
 
287
287
  /* Alert Icon */
288
288
  .stn-event-banner__icon-wrap {
289
- width: 24px;
290
- height: 24px;
289
+ width: var(--stn-event-banner-icon-size, var(--stn-size-24, 24px));
290
+ height: var(--stn-event-banner-icon-size, var(--stn-size-24, 24px));
291
291
  display: flex;
292
292
  align-items: center;
293
293
  justify-content: center;
@@ -298,7 +298,7 @@
298
298
  .stn-event-banner__text {
299
299
  display: flex;
300
300
  flex-direction: column;
301
- gap: 3px;
301
+ gap: var(--stn-event-banner-text-gap, var(--stn-space-4, 4px));
302
302
  align-items: stretch;
303
303
  min-width: 0;
304
304
  flex: 1 1 auto;
@@ -317,24 +317,24 @@
317
317
  }
318
318
 
319
319
  .stn-event-banner__title {
320
- font-size: var(--stn-font-size-14, 14px);
320
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
321
321
  font-weight: var(--stn-font-weight-semibold, 600);
322
322
  color: var(--stn-event-banner-title);
323
- line-height: 1.2;
323
+ line-height: var(--stn-line-height-tight, 1.2);
324
324
  }
325
325
 
326
326
  .stn-event-banner__time {
327
- font-size: var(--stn-font-size-12, 12px);
327
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
328
328
  font-weight: var(--stn-font-weight-regular, 400);
329
329
  color: var(--stn-event-banner-time);
330
- line-height: 1.2;
330
+ line-height: var(--stn-line-height-tight, 1.2);
331
331
  }
332
332
 
333
333
  /* Action Group */
334
334
  .stn-event-banner__actions {
335
335
  display: flex;
336
336
  align-items: center;
337
- gap: 8px;
337
+ gap: var(--stn-event-banner-actions-gap, var(--stn-space-8, 8px));
338
338
  flex-shrink: 0;
339
339
  }
340
340
 
@@ -344,11 +344,11 @@
344
344
  display: inline-flex;
345
345
  align-items: center;
346
346
  justify-content: center;
347
- height: 30px;
348
- padding: 4px 14px;
349
- border-radius: var(--stn-radius-circle, 9999px);
350
- font-family: var(--stn-font-family-pretendard, var(--Typography-font-family-pretendard, sans-serif));
351
- font-size: 13px;
347
+ height: var(--stn-event-banner-btn-height, var(--stn-size-28, 28px));
348
+ padding: var(--stn-event-banner-btn-padding-block, var(--stn-space-4, 4px)) var(--stn-event-banner-btn-padding-inline, var(--stn-space-14, 14px));
349
+ border-radius: var(--stn-radius-chip-pill, var(--stn-radius-circle, 9999px));
350
+ font-family: var(--stn-font-body);
351
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
352
352
  font-weight: var(--stn-font-weight-semibold, 600);
353
353
  line-height: 1;
354
354
  white-space: nowrap;
@@ -68,7 +68,7 @@
68
68
  cursor: pointer;
69
69
  appearance: none;
70
70
  -webkit-appearance: none;
71
- box-shadow: none !important;
71
+ box-shadow: none;
72
72
  vertical-align: middle;
73
73
  transition: all 0.15s ease;
74
74
  }
@@ -118,21 +118,21 @@
118
118
  /* Size variations (STN 규격: sm · md · lg) */
119
119
  .stn-pagination--sm {
120
120
  --stn-pagination-size: var(--stn-size-28, 28px);
121
- --stn-pagination-font-size: var(--stn-font-size-12, 12px);
121
+ --stn-pagination-font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
122
122
  --stn-pagination-gap: var(--stn-space-4, 4px);
123
123
  --stn-pagination-arrow-gap: var(--stn-space-8, 8px);
124
124
  }
125
125
 
126
126
  .stn-pagination--md {
127
127
  --stn-pagination-size: var(--stn-size-32, 32px);
128
- --stn-pagination-font-size: var(--stn-font-size-13, 13px);
128
+ --stn-pagination-font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
129
129
  --stn-pagination-gap: var(--stn-space-8, 8px);
130
130
  --stn-pagination-arrow-gap: var(--stn-space-12, 12px);
131
131
  }
132
132
 
133
133
  .stn-pagination--lg {
134
134
  --stn-pagination-size: var(--stn-size-36, 36px);
135
- --stn-pagination-font-size: var(--stn-font-size-14, 14px);
135
+ --stn-pagination-font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
136
136
  --stn-pagination-gap: var(--stn-space-8, 8px);
137
137
  --stn-pagination-arrow-gap: var(--stn-space-16, 16px);
138
138
  }
@@ -215,12 +215,13 @@
215
215
  flex: 0 0 auto;
216
216
  }
217
217
 
218
- /* 모바일 좁은 화면 컴팩트 최적화
219
- * 브레이크포인트: --stn-pagination-compact-breakpoint (480px)
220
- * CSS @media에서 var() 사용 불가이므로 리터럴 유지; 치수는 시멘틱 토큰 참조.
221
- */
218
+ /* 모바일 좁은 화면 컴팩트 최적화 (max-width: 480px) */
222
219
  @media (max-width: 480px) {
223
220
  .stn-pagination {
221
+ --stn-pagination-compact-size: var(--stn-size-28, 28px);
222
+ --stn-pagination-compact-padding: var(--stn-space-6, 6px);
223
+ --stn-pagination-compact-font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
224
+ --stn-pagination-compact-gap: var(--stn-space-4, 4px);
224
225
  gap: var(--stn-pagination-compact-gap);
225
226
  }
226
227
 
@@ -198,7 +198,7 @@
198
198
  flex-shrink: 0;
199
199
  white-space: nowrap;
200
200
  font-family: var(--stn-font-body);
201
- font-size: var(--stn-font-size-12);
201
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
202
202
  font-weight: var(--stn-font-weight-medium);
203
203
  color: var(--stn-progress-title-color);
204
204
  }
@@ -207,7 +207,7 @@
207
207
  flex-shrink: 0;
208
208
  white-space: nowrap;
209
209
  font-family: var(--stn-font-body);
210
- font-size: var(--stn-font-size-12);
210
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
211
211
  font-weight: var(--stn-font-weight-medium);
212
212
  color: var(--stn-progress-value-color);
213
213
  }
@@ -217,7 +217,7 @@
217
217
  justify-content: space-between;
218
218
  align-items: center;
219
219
  font-family: var(--stn-font-body);
220
- font-size: var(--stn-font-size-12);
220
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
221
221
  color: var(--stn-progress-label-color);
222
222
  font-weight: var(--stn-font-weight-medium);
223
223
  }
@@ -253,7 +253,7 @@
253
253
  left: 50%;
254
254
  transform: translate(-50%, -50%);
255
255
  font-family: var(--stn-font-body);
256
- font-size: var(--stn-font-size-10);
256
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
257
257
  font-weight: var(--stn-font-weight-bold);
258
258
  color: var(--stn-progress-inside-color);
259
259
  line-height: 1;
@@ -415,7 +415,7 @@
415
415
 
416
416
  .stn-progress-circle-wrap__label {
417
417
  font-family: var(--stn-font-body);
418
- font-size: var(--stn-font-size-13);
418
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
419
419
  font-weight: var(--stn-font-weight-medium);
420
420
  color: var(--stn-progress-circle-label-color);
421
421
  line-height: 1.3;
@@ -142,6 +142,8 @@ width: auto;
142
142
  border-radius: var(--stn-radius-circle);
143
143
  background: var(--stn-side-nav-toggle-bg);
144
144
  border: var(--stn-side-nav-border-width, 1px) solid var(--stn-side-nav-toggle-border);
145
+ backdrop-filter: blur(8px);
146
+ -webkit-backdrop-filter: blur(8px);
145
147
  box-shadow: var(--stn-side-nav-toggle-shadow);
146
148
  color: var(--stn-side-nav-toggle-fg);
147
149
  }
@@ -877,7 +879,7 @@ justify-content: center;
877
879
 
878
880
  /* 1. Mobile Floating / Header Hamburger Trigger */
879
881
  .stn-side-nav__mobile-trigger {
880
- box-sizing: border-box;
882
+ box-sizing: border-box;
881
883
  display: inline-flex;
882
884
  align-items: center;
883
885
  justify-content: center;
@@ -885,52 +887,70 @@ box-sizing: border-box;
885
887
  height: var(--stn-side-nav-mobile-trigger-size);
886
888
  padding: 0;
887
889
  margin: 0;
888
- border-radius: var(--stn-side-nav-mobile-trigger-radius);
889
- background: var(--stn-side-nav-mobile-trigger-bg);
890
+ border-radius: var(--stn-side-nav-mobile-trigger-radius, var(--stn-radius-circle));
891
+ background: transparent;
890
892
  border: var(--stn-side-nav-border-width, 1px) solid var(--stn-side-nav-mobile-trigger-border);
891
- color: var(--stn-side-nav-mobile-trigger-color);
893
+ color: var(--stn-side-nav-mobile-trigger-fg, var(--stn-text-primary));
892
894
  box-shadow: var(--stn-side-nav-trigger-shadow);
895
+ backdrop-filter: blur(var(--stn-side-nav-glass-blur, 12px));
896
+ -webkit-backdrop-filter: blur(var(--stn-side-nav-glass-blur, 12px));
893
897
  cursor: pointer;
894
898
  outline: none;
895
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
899
+ transition: transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),
900
+ background 0.2s ease,
901
+ border-color 0.2s ease,
902
+ box-shadow 0.2s ease;
896
903
  z-index: 990;
897
904
  }
898
905
 
899
906
  .stn-side-nav__mobile-trigger:hover {
900
- transform: translateY(calc(-1 * var(--stn-side-nav-border-width, 1px)));
907
+ transform: scale(1.08);
908
+ background: var(--stn-nav-menu-hover-bg);
909
+ border-color: var(--stn-side-nav-mobile-trigger-border);
901
910
  box-shadow: var(--stn-side-nav-trigger-shadow-hover);
902
- border-color: var(--stn-nav-menu-active-border);
903
911
  }
904
912
 
905
913
  .stn-side-nav__mobile-trigger:active {
906
- transform: translateY(0);
914
+ transform: scale(0.95);
915
+ }
916
+
917
+ .stn-side-nav__mobile-trigger:focus-visible {
918
+ outline: var(--stn-focus-ring-width, 2px) solid var(--stn-focus-ring);
919
+ outline-offset: var(--stn-focus-ring-offset, 1px);
907
920
  }
908
921
 
909
922
  /* Floating mode: screens bottom-left */
910
- .stn-side-nav__mobile-trigger.floating,
911
923
  .stn-side-nav__mobile-trigger.floating {
912
924
  position: fixed;
913
925
  bottom: var(--stn-side-nav-mobile-trigger-floating-bottom);
914
926
  left: var(--stn-side-nav-mobile-trigger-floating-left);
927
+ background: var(--stn-side-nav-mobile-trigger-bg);
928
+ border-color: var(--stn-side-nav-mobile-trigger-border);
929
+ box-shadow: var(--stn-side-nav-trigger-shadow);
930
+ backdrop-filter: blur(var(--stn-side-nav-glass-blur, 12px));
931
+ -webkit-backdrop-filter: blur(var(--stn-side-nav-glass-blur, 12px));
915
932
  z-index: 995;
916
933
  }
917
934
 
918
935
  /* 데스크톱(> 1024px)에서는 햄버거 버튼 숨김 (사이드바 레일이 직접 표시됨) */
919
936
  @media (min-width: 1025px) {
920
- .stn-side-nav__mobile-trigger.floating {
921
- display: none;
937
+ .stn-side-nav__mobile-trigger:not(.doc-force-visible) {
938
+ display: none !important;
922
939
  }
923
940
  }
924
941
 
925
- /* 모바일 & 태블릿 화면(<= 1024px): stn-wrap 내부에서 헤더 좌상단 햄버거 트리거로 배치 */
926
- @media (max-width: 1024px) {
927
- .stn-wrap .stn-side-nav__mobile-trigger.floating {
928
- position: fixed;
929
- top: var(--stn-side-nav-mobile-trigger-offset);
930
- left: var(--stn-side-nav-mobile-trigger-offset);
931
- bottom: auto;
932
- z-index: 995;
933
- }
942
+ /* 문서 플레이그라운드 및 .doc-force-visible 지정 시 데스크톱에서도 햄버거 버튼 표시 */
943
+ .stn-side-nav__mobile-trigger.doc-force-visible,
944
+ .doc-example .stn-side-nav__mobile-trigger {
945
+ display: inline-flex !important;
946
+ }
947
+
948
+ /* StnHeader 내부 통합용 햄버거 버튼 (floating=false 일 때 StnHeader.Left 또는 Right에 자동 정렬) */
949
+ .stn-header .stn-side-nav__mobile-trigger {
950
+ position: static;
951
+ flex-shrink: 0;
952
+ width: var(--stn-btn-height, 36px);
953
+ height: var(--stn-btn-height, 36px);
934
954
  }
935
955
 
936
956
  /* Hamburger 3-line Icon */
@@ -938,28 +958,32 @@ box-sizing: border-box;
938
958
  display: flex;
939
959
  flex-direction: column;
940
960
  justify-content: space-between;
941
- width: var(--stn-side-nav-hamburger-width);
942
- height: var(--stn-side-nav-hamburger-height);
961
+ width: var(--stn-side-nav-hamburger-width, 16px);
962
+ height: var(--stn-side-nav-hamburger-height, 12px);
943
963
  }
944
964
 
945
965
  .stn-side-nav__hamburger-bars span {
946
966
  display: block;
947
967
  width: 100%;
948
- height: var(--stn-side-nav-hamburger-bar);
968
+ height: var(--stn-side-nav-hamburger-bar, 2px);
949
969
  background-color: currentColor;
950
- border-radius: var(--stn-side-nav-hamburger-bar);
951
- transition: transform 0.2s ease,
952
- opacity 0.2s ease;
970
+ border-radius: var(--stn-radius-circle, 9999px);
971
+ transition: transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),
972
+ opacity 0.22s ease,
973
+ background-color 0.2s ease;
953
974
  }
954
975
 
955
976
  .stn-side-nav__mobile-trigger.is-open .stn-side-nav__hamburger-bars span:nth-child(1) {
956
- transform: translateY(var(--stn-side-nav-hamburger-bar-spacing)) rotate(45deg);
977
+ transform: translateY(calc(var(--stn-side-nav-hamburger-bar-spacing, 6px) - 1px)) rotate(45deg);
957
978
  }
979
+
958
980
  .stn-side-nav__mobile-trigger.is-open .stn-side-nav__hamburger-bars span:nth-child(2) {
959
981
  opacity: 0;
982
+ transform: scaleX(0);
960
983
  }
984
+
961
985
  .stn-side-nav__mobile-trigger.is-open .stn-side-nav__hamburger-bars span:nth-child(3) {
962
- transform: translateY(calc(var(--stn-side-nav-hamburger-bar-spacing) * -1)) rotate(-45deg);
986
+ transform: translateY(calc((var(--stn-side-nav-hamburger-bar-spacing, 6px) - 1px) * -1)) rotate(-45deg);
963
987
  }
964
988
  /* 2. Mobile Drawer Backdrop Overlay */
965
989
  .stn-side-nav__backdrop {
@@ -1037,8 +1061,8 @@ color 0.15s ease;
1037
1061
  color: var(--stn-text-primary);
1038
1062
  }
1039
1063
 
1040
- /* 5. Responsive Mobile Query: <= 768px */
1041
- @media (max-width: 768px) {
1064
+ /* 5. Responsive Mobile Query: <= 1024px */
1065
+ @media (max-width: 1024px) {
1042
1066
  /* 모바일: PC용 원형 접기 버튼 숨김 — open 시 닫기 버튼은 아래 규칙이 이김 */
1043
1067
  .stn-side-nav__collapse-btn,
1044
1068
  .stn-side-nav__toggle {
@@ -1088,7 +1112,7 @@ color 0.15s ease;
1088
1112
  }
1089
1113
  }
1090
1114
 
1091
- @container stn-list-demo (max-width: 768px) {
1115
+ @container stn-list-demo (max-width: 1024px) {
1092
1116
  .stn-side-nav__collapse-btn,
1093
1117
  .stn-side-nav__toggle {
1094
1118
  display: none;