@stn-uiux/pub-ui 0.1.57 → 0.1.59

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 (130) hide show
  1. package/dist/{chunk-L7DYM4V7.js → chunk-2FHXIAM3.js} +10 -28
  2. package/dist/{chunk-L7DYM4V7.js.map → chunk-2FHXIAM3.js.map} +1 -1
  3. package/dist/chunk-2WKT7X65.js +407 -0
  4. package/dist/chunk-2WKT7X65.js.map +1 -0
  5. package/dist/{chunk-7ASY5YJ6.js → chunk-36BAGMYT.js} +3 -3
  6. package/dist/chunk-36BAGMYT.js.map +1 -0
  7. package/dist/{chunk-THCCTVUM.js → chunk-5F63CMM7.js} +11 -1
  8. package/dist/chunk-5F63CMM7.js.map +1 -0
  9. package/dist/{chunk-Q3W7QA7N.js → chunk-75GHU6VI.js} +24 -43
  10. package/dist/chunk-75GHU6VI.js.map +1 -0
  11. package/dist/chunk-A5KLX6NX.js +1 -0
  12. package/dist/{chunk-4C7ABT2K.js → chunk-AE4CKAEK.js} +3 -3
  13. package/dist/chunk-AE4CKAEK.js.map +1 -0
  14. package/dist/{chunk-UPXSNRIJ.js → chunk-AOS3IX4T.js} +2 -2
  15. package/dist/chunk-AOS3IX4T.js.map +1 -0
  16. package/dist/{chunk-XNGYRPZI.js → chunk-CHJATVOT.js} +4 -4
  17. package/dist/{chunk-XNGYRPZI.js.map → chunk-CHJATVOT.js.map} +1 -1
  18. package/dist/{chunk-XZ3JOUX2.js → chunk-EQTZA7I2.js} +2 -14
  19. package/dist/chunk-EQTZA7I2.js.map +1 -0
  20. package/dist/{chunk-P5V6SFR7.js → chunk-H4ZJQ5YW.js} +2 -2
  21. package/dist/{chunk-GR76L7M7.js → chunk-JPILTFLI.js} +5 -5
  22. package/dist/chunk-JPILTFLI.js.map +1 -0
  23. package/dist/{chunk-WRGBYWRV.js → chunk-LKVTW54X.js} +1 -1
  24. package/dist/chunk-LKVTW54X.js.map +1 -0
  25. package/dist/{chunk-OMCBVK57.js → chunk-SKZOEF3H.js} +2 -2
  26. package/dist/chunk-SQJPE6HH.js +12 -0
  27. package/dist/chunk-SQJPE6HH.js.map +1 -0
  28. package/dist/{chunk-V7HD6SBG.js → chunk-XEG4WDUD.js} +7 -18
  29. package/dist/chunk-XEG4WDUD.js.map +1 -0
  30. package/dist/chunk-XPARWRVD.js +9 -0
  31. package/dist/chunk-XPARWRVD.js.map +1 -0
  32. package/dist/{chunk-S4YA4H2S.js → chunk-YBNEQ5LB.js} +2 -2
  33. package/dist/cli.js +15 -15
  34. package/dist/data/index.d.ts +2 -1
  35. package/dist/data/index.js +31 -27
  36. package/dist/data/stnAlertCenter.d.ts +4 -3
  37. package/dist/data/stnAlertCenter.js +1 -1
  38. package/dist/data/stnBreadcrumb.js +3 -3
  39. package/dist/data/stnDatePicker.js +2 -2
  40. package/dist/data/stnDateRangeField.d.ts +1 -1
  41. package/dist/data/stnDateRangeField.js +1 -1
  42. package/dist/data/stnDropdown.d.ts +1 -1
  43. package/dist/data/stnDropdown.js +1 -1
  44. package/dist/data/stnHeader.d.ts +2 -2
  45. package/dist/data/stnHeader.js +3 -3
  46. package/dist/data/stnLayout.d.ts +1 -1
  47. package/dist/data/stnLayout.js +1 -1
  48. package/dist/data/stnPackageVersion.d.ts +2 -2
  49. package/dist/data/stnPackageVersion.js +1 -1
  50. package/dist/data/stnPopup.d.ts +19 -41
  51. package/dist/data/stnPopup.js +1 -1
  52. package/dist/data/stnScroll.d.ts +1 -1
  53. package/dist/data/stnScroll.js +1 -1
  54. package/dist/data/stnSearchRequirement.d.ts +4 -4
  55. package/dist/data/stnSearchRequirement.js +1 -1
  56. package/dist/data/stnSideNavItem.js +3 -3
  57. package/dist/data/stnSizeSemantic.js +1 -1
  58. package/dist/data/stnStatus.d.ts +11 -0
  59. package/dist/data/stnStatus.js +7 -0
  60. package/dist/data/stnStatus.js.map +1 -0
  61. package/dist/data/stnSystemIcons.d.ts +1 -1
  62. package/dist/data/stnSystemIcons.js +2 -2
  63. package/dist/data/stnSystemIconsData.generated.js +1 -1
  64. package/dist/data/stnTree.d.ts +1 -1
  65. package/dist/data/stnTree.js +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.js +31 -27
  68. package/package.json +1 -1
  69. package/styles/@assets/svg/system/line/eye-off.svg +5 -0
  70. package/styles/components/stn-btn.css +10 -1
  71. package/styles/components/stn-date-picker.css +13 -5
  72. package/styles/components/stn-date-range-field.css +153 -16
  73. package/styles/components/stn-dropdown.css +161 -42
  74. package/styles/components/stn-label-prefix.css +356 -0
  75. package/styles/components/stn-pagination.css +113 -5
  76. package/styles/components/stn-popup.css +78 -132
  77. package/styles/components/stn-scroll.css +51 -66
  78. package/styles/components/stn-search-requirement.css +27 -20
  79. package/styles/components/stn-segmented.css +3 -1
  80. package/styles/components/stn-status.css +853 -0
  81. package/styles/components/stn-table.css +32 -5
  82. package/styles/components/stn-text-field.css +396 -374
  83. package/styles/components/stn-toast.css +17 -0
  84. package/styles/components/stn-toggle-button.css +37 -0
  85. package/styles/layouts/stn-container.css +9 -0
  86. package/styles/layouts/stn-layer1-content.css +105 -0
  87. package/styles/patterns/stn-alert-center.css +114 -4
  88. package/styles/patterns/stn-header.css +7 -145
  89. package/styles/patterns/stn-section-side.css +64 -0
  90. package/styles/patterns/stn-tree.css +193 -2
  91. package/styles/style-pub.css +2 -1
  92. package/styles/tokens/stn-breakpoint.css +12 -0
  93. package/styles/tokens/stn-colors-semantic.css +13 -7
  94. package/styles/tokens/stn-radius-semantic.css +4 -3
  95. package/styles/tokens/stn-size-semantic.css +19 -6
  96. package/styles/tokens/stn-size.css +2 -0
  97. package/styles/tokens/stn-spacing-semantic.css +12 -0
  98. package/styles/tokens/stn-typography.css +1 -0
  99. package/dist/chunk-4C7ABT2K.js.map +0 -1
  100. package/dist/chunk-7ASY5YJ6.js.map +0 -1
  101. package/dist/chunk-GR76L7M7.js.map +0 -1
  102. package/dist/chunk-LHV26PEP.js +0 -1
  103. package/dist/chunk-Q3W7QA7N.js.map +0 -1
  104. package/dist/chunk-QT4HHVZH.js +0 -9
  105. package/dist/chunk-QT4HHVZH.js.map +0 -1
  106. package/dist/chunk-THCCTVUM.js.map +0 -1
  107. package/dist/chunk-UPXSNRIJ.js.map +0 -1
  108. package/dist/chunk-V7HD6SBG.js.map +0 -1
  109. package/dist/chunk-WRGBYWRV.js.map +0 -1
  110. package/dist/chunk-XZ3JOUX2.js.map +0 -1
  111. package/dist/chunk-ZI6EF4XD.js +0 -209
  112. package/dist/chunk-ZI6EF4XD.js.map +0 -1
  113. package/styles/@assets/svg/system/3d/print.png +0 -0
  114. package/styles/@assets/svg/system/3d/print_1.png +0 -0
  115. package/styles/@assets/svg/system/3d/server1.png +0 -0
  116. package/styles/@assets/svg/system/3d/server1_1.png +0 -0
  117. package/styles/@assets/svg/system/3d/server2.png +0 -0
  118. package/styles/@assets/svg/system/3d/server2_1.png +0 -0
  119. package/styles/@assets/svg/system/3d/signal.png +0 -0
  120. package/styles/@assets/svg/system/3d/signal_1.png +0 -0
  121. package/styles/@assets/svg/system/3d/wifi.png +0 -0
  122. package/styles/@assets/svg/system/3d/wifi_1.png +0 -0
  123. package/styles/@assets/svg/system/ai_agent.png +0 -0
  124. package/styles/@assets/svg/system/line/input.svg +0 -3
  125. package/styles/@assets/svg/system/line/radio.svg +0 -3
  126. package/styles/components/stn-severity-badge.css +0 -227
  127. /package/dist/{chunk-LHV26PEP.js.map → chunk-A5KLX6NX.js.map} +0 -0
  128. /package/dist/{chunk-P5V6SFR7.js.map → chunk-H4ZJQ5YW.js.map} +0 -0
  129. /package/dist/{chunk-OMCBVK57.js.map → chunk-SKZOEF3H.js.map} +0 -0
  130. /package/dist/{chunk-S4YA4H2S.js.map → chunk-YBNEQ5LB.js.map} +0 -0
@@ -176,6 +176,23 @@
176
176
  display: block;
177
177
  }
178
178
 
179
+ /* --- Metric / Extra Info Box Slot --- */
180
+ .stn-toast__metric-box {
181
+ background-color: var(--stn-surface-subtle, rgba(0, 0, 0, 0.25));
182
+ border: 1px solid var(--stn-border-subtle);
183
+ border-radius: var(--stn-radius-4, 4px);
184
+ padding: var(--stn-space-8, 8px) var(--stn-space-10, 10px);
185
+ font-size: var(--stn-text-body-small-size, 12px);
186
+ color: var(--stn-text-primary);
187
+ box-sizing: border-box;
188
+ }
189
+
190
+ .stn-toast__metric-grid {
191
+ display: grid;
192
+ grid-template-columns: repeat(2, 1fr);
193
+ gap: var(--stn-space-8, 8px);
194
+ }
195
+
179
196
  /* --- Close Button Slot --- */
180
197
  .stn-toast .stn-toast-close,
181
198
  .stn-toast > .stn-btn.icon {
@@ -232,6 +232,43 @@
232
232
  outline-offset: 2px;
233
233
  }
234
234
 
235
+ /* ==========================================================================
236
+ Size Scale — 표준 통일 스케일: sm(24px) · md(32px, 기본값) · lg(40px) · xl(56px)
237
+ 8px 그리드 — TextField / Button / Dropdown과 완벽 정렬
238
+ ========================================================================== */
239
+
240
+ /* sm (24px) */
241
+ .stn-toggle-btn.sm {
242
+ --stn-toggle-height: var(--stn-btn-height-sm);
243
+ --stn-toggle-font-size: var(--stn-btn-font-size-sm);
244
+ --stn-toggle-icon-size: var(--stn-icon-size-sm, 14px);
245
+ --stn-toggle-padding: 0 var(--stn-btn-padding-x-sm);
246
+ }
247
+
248
+ /* md (32px) — 기본값, 별도 클래스 없이 베이스 스타일 적용 */
249
+ .stn-toggle-btn.md {
250
+ --stn-toggle-height: var(--stn-btn-height-md);
251
+ --stn-toggle-font-size: var(--stn-btn-font-size-md);
252
+ --stn-toggle-icon-size: var(--stn-icon-size-md, 16px);
253
+ --stn-toggle-padding: 0 var(--stn-btn-padding-x-md);
254
+ }
255
+
256
+ /* lg (40px) */
257
+ .stn-toggle-btn.lg {
258
+ --stn-toggle-height: var(--stn-btn-height-lg);
259
+ --stn-toggle-font-size: var(--stn-btn-font-size-lg);
260
+ --stn-toggle-icon-size: var(--stn-icon-size-lg, 18px);
261
+ --stn-toggle-padding: 0 var(--stn-btn-padding-x-lg);
262
+ }
263
+
264
+ /* xl (56px) */
265
+ .stn-toggle-btn.xl {
266
+ --stn-toggle-height: var(--stn-btn-height-xl);
267
+ --stn-toggle-font-size: var(--stn-btn-font-size-xl);
268
+ --stn-toggle-icon-size: var(--stn-icon-size-xl, 20px);
269
+ --stn-toggle-padding: 0 var(--stn-btn-padding-x-xl);
270
+ }
271
+
235
272
  /* ==========================================================================
236
273
  Width Presets (.w80 ~ .w200 / .full)
237
274
  토글 버튼은 버튼 특성상 '최소 고정 너비(min-width)'로 작용하여,
@@ -7,6 +7,7 @@
7
7
  :root {
8
8
  --stn-container-xs: 444px;
9
9
  --stn-container-gutter-mobile: var(--stn-space-16, 16px);
10
+ --stn-container-gutter-tablet: var(--stn-space-16, 16px);
10
11
  --stn-container-gutter-desktop: var(--stn-space-24, 24px);
11
12
  }
12
13
 
@@ -25,6 +26,14 @@
25
26
  }
26
27
 
27
28
  @media (min-width: 768px) {
29
+ .stn-container--gutters,
30
+ .stn-container:not(.stn-container--disable-gutters) {
31
+ padding-left: var(--stn-container-gutter-tablet);
32
+ padding-right: var(--stn-container-gutter-tablet);
33
+ }
34
+ }
35
+
36
+ @media (min-width: 1024px) {
28
37
  .stn-container--gutters,
29
38
  .stn-container:not(.stn-container--disable-gutters) {
30
39
  padding-left: var(--stn-container-gutter-desktop);
@@ -314,3 +314,108 @@
314
314
  min-height: 0;
315
315
  flex: 1 1 0%;
316
316
  }
317
+
318
+ /* ==========================================================================
319
+ 6. List View Layout (StnContainer + StnStack)
320
+ ========================================================================== */
321
+ .stn-list-page-container,
322
+ .stn-list-view-layout__body {
323
+ flex: 1 1 0%;
324
+ min-height: 0;
325
+ height: 100%;
326
+ padding: var(--stn-space-16);
327
+ box-sizing: border-box;
328
+ overflow: hidden;
329
+ container-type: inline-size;
330
+ container-name: stn-list-container;
331
+ }
332
+
333
+ .stn-list-page-main,
334
+ .stn-list-view__main {
335
+ flex: 1 1 0%;
336
+ min-height: 0;
337
+ height: 100%;
338
+ width: 100%;
339
+ }
340
+
341
+ .stn-list-page-main > .stn-page-scaffold__lnb,
342
+ .stn-list-view__main > .stn-page-scaffold__lnb {
343
+ width: var(--stn-list-lnb-width);
344
+ flex-shrink: 0;
345
+ align-self: stretch;
346
+ height: 100%;
347
+ min-height: 0;
348
+ display: flex;
349
+ flex-direction: column;
350
+ }
351
+
352
+ .stn-list-page-content-stack,
353
+ .stn-list-view__content-stack {
354
+ flex: 1 1 0%;
355
+ min-width: 0;
356
+ min-height: 0;
357
+ height: 100%;
358
+ display: flex;
359
+ flex-direction: column;
360
+ }
361
+
362
+ .stn-list-page-content-stack > .search_area,
363
+ .stn-list-view__content-stack > .search_area {
364
+ flex-shrink: 0;
365
+ width: 100%;
366
+ }
367
+
368
+ .stn-list-page-content-stack > .content_box,
369
+ .stn-list-view__content-stack > .content_box {
370
+ flex: 1 1 0%;
371
+ min-height: 0;
372
+ display: flex;
373
+ flex-direction: column;
374
+ overflow: hidden;
375
+ }
376
+
377
+ /* ─────────────────────────────────────────────────────────────
378
+ * 반응형: 사이드 네비 펼침/접힘 또는 뷰포트 축소로 너비 협소 시 (<= 1024px)
379
+ * Tree(LNB Aside)를 좌측에서 상단(Top) 전체 너비로 전환
380
+ * 부모 컨테이너 선택자로 상세도를 확보하여 !important 없이 깔끔하게 재정의
381
+ * ───────────────────────────────────────────────────────────── */
382
+ @container stn-list-container (max-width: 1024px) {
383
+ .stn-list-page-container .stn-list-page-main,
384
+ .stn-list-view-layout__body .stn-list-view__main {
385
+ flex-direction: column;
386
+ gap: var(--stn-spacing-list-lnb-gap, var(--stn-space-16));
387
+ overflow: hidden;
388
+ }
389
+
390
+ .stn-list-page-container .stn-list-page-main > .stn-page-scaffold__lnb,
391
+ .stn-list-view-layout__body .stn-list-view__main > .stn-page-scaffold__lnb {
392
+ width: 100%;
393
+ max-width: 100%;
394
+ height: auto;
395
+ max-height: var(--stn-layout-list-tree-top-max-height);
396
+ flex-shrink: 0;
397
+ align-self: stretch;
398
+ overflow: hidden;
399
+ }
400
+
401
+ .stn-list-page-container .stn-page-scaffold__lnb .stn-section-side,
402
+ .stn-list-view-layout__body .stn-page-scaffold__lnb .stn-section-side {
403
+ height: auto;
404
+ max-height: var(--stn-layout-list-tree-top-max-height);
405
+ }
406
+
407
+ .stn-list-page-container .stn-page-scaffold__lnb .stn-section-side__body,
408
+ .stn-list-view-layout__body .stn-page-scaffold__lnb .stn-section-side__body {
409
+ flex: 1 1 auto;
410
+ min-height: 0;
411
+ overflow-y: auto;
412
+ }
413
+
414
+ .stn-list-page-container .stn-list-page-content-stack,
415
+ .stn-list-view-layout__body .stn-list-view__content-stack {
416
+ flex: 1 1 0%;
417
+ min-height: 0;
418
+ width: 100%;
419
+ }
420
+ }
421
+
@@ -270,8 +270,23 @@
270
270
  min-width: 0;
271
271
  }
272
272
 
273
+ /* 카드 헤더 라인 (등급 칩 + 타이틀) */
274
+ .stn-alert-card__header-line {
275
+ display: flex;
276
+ align-items: center;
277
+ width: 100%;
278
+ min-width: 0;
279
+ flex-wrap: nowrap;
280
+ }
281
+
282
+ .stn-alert-card__header-line > :first-child {
283
+ flex-shrink: 0;
284
+ }
285
+
273
286
  /* 장애 카드 타이틀 */
274
287
  .stn-alert-card__title {
288
+ flex: 1;
289
+ min-width: 0;
275
290
  font-size: var(--stn-font-size-15);
276
291
  font-weight: var(--stn-font-weight-bold);
277
292
  color: var(--stn-text-primary);
@@ -286,22 +301,117 @@
286
301
  }
287
302
 
288
303
  /* 작업 탭 — primary 색상 */
289
- .stn-alert-card__type-label--work {
290
- color: var(--stn-text-primary);
304
+ .stn-alert-card__type-label.work {
305
+ color: var(--stn-primary);
291
306
  }
292
307
 
293
308
  /* 공사 탭 — secondary(보라) 색상 */
294
- .stn-alert-card__type-label--deploy {
295
- color: var(--stn-text-primary);
309
+ .stn-alert-card__type-label.deploy {
310
+ color: var(--stn-secondary);
311
+ }
312
+
313
+ /* 카드 설명 라인 (설명 + 시간 칩) */
314
+ .stn-alert-card__desc-line {
315
+ display: flex;
316
+ align-items: center;
317
+ width: 100%;
318
+ min-width: 0;
296
319
  }
297
320
 
298
321
  /* 설명 텍스트 */
299
322
  .stn-alert-card__desc {
323
+ flex: 1;
324
+ min-width: 0;
300
325
  font-size: var(--stn-font-size-13);
301
326
  color: var(--stn-text-secondary);
302
327
  line-height: var(--stn-line-height-reading);
303
328
  }
304
329
 
330
+ /* ==========================================================================
331
+ 5-1. Text Overflow Modes (wrap · ellipsis · marquee)
332
+ ========================================================================== */
333
+
334
+ /* 공통: flex 컨테이너 오버플로우 축소 방지 */
335
+ .stn-alert-card__title,
336
+ .stn-alert-card__desc {
337
+ min-width: 0;
338
+ max-width: 100%;
339
+ }
340
+
341
+ /* 1) Wrap (줄바꿈) */
342
+ .stn-alert-card__title.wrap,
343
+ .stn-alert-card__desc.wrap,
344
+ :is(.stn-alert-center.wrap, .stn-alert-center.title-wrap) .stn-alert-card__title,
345
+ :is(.stn-alert-center.wrap, .stn-alert-center.desc-wrap) .stn-alert-card__desc {
346
+ white-space: normal;
347
+ word-break: break-all;
348
+ }
349
+
350
+ /* 2) Ellipsis (말줄임표 `...`) */
351
+ .stn-alert-card__title.ellipsis,
352
+ .stn-alert-card__desc.ellipsis,
353
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.title-ellipsis) .stn-alert-card__title,
354
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.desc-ellipsis) .stn-alert-card__desc {
355
+ display: block;
356
+ white-space: nowrap;
357
+ overflow: hidden;
358
+ text-overflow: ellipsis;
359
+ }
360
+
361
+ .stn-alert-card__title.ellipsis .stn-alert-card__text-inner,
362
+ .stn-alert-card__desc.ellipsis .stn-alert-card__text-inner,
363
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.title-ellipsis) .stn-alert-card__title .stn-alert-card__text-inner,
364
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.desc-ellipsis) .stn-alert-card__desc .stn-alert-card__text-inner {
365
+ display: inline;
366
+ }
367
+
368
+ /* 3) Marquee (전광판 롤링 흘러가기) */
369
+ .stn-alert-card__title.marquee,
370
+ .stn-alert-card__desc.marquee,
371
+ :is(.stn-alert-center.marquee, .stn-alert-center.title-marquee) .stn-alert-card__title,
372
+ :is(.stn-alert-center.marquee, .stn-alert-center.desc-marquee) .stn-alert-card__desc {
373
+ display: block;
374
+ white-space: nowrap;
375
+ overflow: hidden;
376
+ position: relative;
377
+ mask-image: linear-gradient(90deg, transparent 0%, #000 4%, #000 96%, transparent 100%);
378
+ -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 4%, #000 96%, transparent 100%);
379
+ }
380
+
381
+ :is(.stn-alert-card__title, .stn-alert-card__desc).marquee .stn-alert-card__text-inner,
382
+ :is(.stn-alert-center.marquee, .stn-alert-center.title-marquee) .stn-alert-card__title .stn-alert-card__text-inner,
383
+ :is(.stn-alert-center.marquee, .stn-alert-center.desc-marquee) .stn-alert-card__desc .stn-alert-card__text-inner {
384
+ display: inline-block;
385
+ white-space: nowrap;
386
+ will-change: transform;
387
+ animation: stn-alert-marquee 12s linear infinite alternate;
388
+ }
389
+
390
+ .stn-alert-card:hover :is(.stn-alert-card__title, .stn-alert-card__desc).marquee .stn-alert-card__text-inner,
391
+ :is(.stn-alert-center.marquee, .stn-alert-center.title-marquee) .stn-alert-card:hover .stn-alert-card__title .stn-alert-card__text-inner,
392
+ :is(.stn-alert-center.marquee, .stn-alert-center.desc-marquee) .stn-alert-card:hover .stn-alert-card__desc .stn-alert-card__text-inner {
393
+ animation-play-state: paused;
394
+ }
395
+
396
+ /* Single-line tweaks for description line */
397
+ .stn-alert-card__desc:is(.ellipsis, .marquee),
398
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.marquee, .stn-alert-center.desc-ellipsis, .stn-alert-center.desc-marquee) .stn-alert-card__body .stn-alert-card__desc-line {
399
+ flex-wrap: nowrap;
400
+ }
401
+
402
+ :is(.stn-alert-center.ellipsis, .stn-alert-center.marquee, .stn-alert-center.desc-ellipsis, .stn-alert-center.desc-marquee) .stn-alert-card__time-chip {
403
+ flex-shrink: 0;
404
+ }
405
+
406
+ @keyframes stn-alert-marquee {
407
+ 0%, 15% {
408
+ transform: translateX(0);
409
+ }
410
+ 85%, 100% {
411
+ transform: translateX(-40%);
412
+ }
413
+ }
414
+
305
415
  /* 시간 + 읽음 dot 묶음 */
306
416
  .stn-alert-card__meta {
307
417
  display: flex;
@@ -48,15 +48,11 @@
48
48
  .stn-header.gap-lg,
49
49
  .stn-header--gap-lg { column-gap: var(--stn-space-24, 24px); }
50
50
 
51
- /* Page Header 또는 Center가 없는 헤더 (Left 타이틀이 유연하게 확장되고 Right와 균형 유지) */
52
- .stn-header--page,
51
+ /* Center 슬롯이 없는 헤더 (Left 타이틀이 유연하게 확장되고 Right와 균형 유지) */
53
52
  .stn-header:not(:has(> .stn-header__center)) {
54
53
  grid-template-columns: minmax(0, 1fr) auto;
55
- padding-inline-start: var(--stn-spacing-header-padding-inline-start, var(--stn-space-8, 8px));
56
- padding-inline-end: var(--stn-spacing-header-padding-inline-end, var(--stn-space-24, 24px));
57
54
  }
58
55
 
59
- .stn-header--page .stn-header__left,
60
56
  .stn-header:not(:has(> .stn-header__center)) .stn-header__left {
61
57
  grid-column: 1;
62
58
  width: auto;
@@ -65,7 +61,6 @@
65
61
  flex: 1 1 auto;
66
62
  }
67
63
 
68
- .stn-header--page .stn-header__right,
69
64
  .stn-header:not(:has(> .stn-header__center)) .stn-header__right {
70
65
  grid-column: 2;
71
66
  width: auto;
@@ -125,10 +120,6 @@
125
120
  flex-shrink: 0;
126
121
  }
127
122
 
128
- .stn-header--page .stn-header__center {
129
- display: none;
130
- }
131
-
132
123
 
133
124
  .stn-header__page-title {
134
125
  margin: 0;
@@ -169,135 +160,7 @@
169
160
  flex: 0 1 auto;
170
161
  }
171
162
 
172
- /* System Chip — Figma light 43378 · dark 74893 */
173
- .stn-system-chip {
174
- display: inline-flex;
175
- align-items: center;
176
- height: var(--stn-size-32);
177
- border: var(--stn-size-1) solid var(--stn-system-chip-border);
178
- border-radius: var(--stn-radius-8);
179
- background: var(--stn-system-chip-bg);
180
- box-shadow: var(--stn-system-chip-shadow);
181
- box-sizing: border-box;
182
- }
183
-
184
- .stn-system-chip.no-border,
185
- .stn-system-chip.stn-system-chip--no-border {
186
- border: none;
187
- background: transparent;
188
- box-shadow: none;
189
- }
190
-
191
- .stn-system-chip.no-border .stn-system-chip__item,
192
- .stn-system-chip.stn-system-chip--no-border .stn-system-chip__item {
193
- border-right: none;
194
- }
195
-
196
- .stn-system-chip__item {
197
- display: inline-flex;
198
- align-items: center;
199
- gap: var(--stn-space-8);
200
- min-width: var(--stn-size-48);
201
- padding: 0 var(--stn-space-12);
202
- height: 100%;
203
- box-sizing: border-box;
204
- border-right: var(--stn-size-1) solid var(--stn-system-chip-divider);
205
- }
206
-
207
- .stn-system-chip__item:last-child {
208
- border-right: none;
209
- }
210
-
211
- /* 텍스트 위치: 왼쪽 정렬 (점은 우측에 위치) */
212
- .stn-system-chip--text-left .stn-system-chip__dot {
213
- order: 2;
214
- }
215
-
216
- .stn-system-chip--text-left .stn-system-chip__label {
217
- order: 0;
218
- }
219
-
220
- .stn-system-chip--text-left .stn-system-chip__count {
221
- order: 1;
222
- text-align: left;
223
- }
224
-
225
- .stn-system-chip__dot {
226
- flex-shrink: 0;
227
- width: var(--stn-size-8);
228
- height: var(--stn-size-8);
229
- border-radius: 50%;
230
- background-color: var(--stn-system-chip-dot-color, var(--stn-system-chip-dot));
231
- }
232
-
233
- .stn-system-chip__dot--cr,
234
- .stn-system-chip__dot--critical,
235
- .stn-system-chip__dot--red,
236
- .stn-system-chip__dot--error {
237
- background-color: var(--stn-system-chip-dot-critical);
238
- }
239
-
240
- .stn-system-chip__dot--mj,
241
- .stn-system-chip__dot--major,
242
- .stn-system-chip__dot--orange {
243
- background-color: var(--stn-system-chip-dot-major);
244
- }
245
-
246
- .stn-system-chip__dot--mn,
247
- .stn-system-chip__dot--minor,
248
- .stn-system-chip__dot--yellow,
249
- .stn-system-chip__dot--warn {
250
- background-color: var(--stn-system-chip-dot-minor);
251
- }
252
-
253
- .stn-system-chip__dot--info,
254
- .stn-system-chip__dot--blue {
255
- background-color: var(--stn-system-chip-dot-info);
256
- }
257
-
258
- .stn-system-chip__dot--wr,
259
- .stn-system-chip__dot--warning,
260
- .stn-system-chip__dot--teal {
261
- background-color: var(--stn-system-chip-dot-warning);
262
- }
263
-
264
- .stn-system-chip__dot--success,
265
- .stn-system-chip__dot--green {
266
- background-color: var(--stn-system-chip-dot-success);
267
- }
268
-
269
- .stn-system-chip__dot--purple {
270
- background-color: var(--stn-system-chip-dot-secondary);
271
- }
272
-
273
- .stn-system-chip__dot--neutral,
274
- .stn-system-chip__dot--gray {
275
- background-color: var(--stn-system-chip-dot-neutral);
276
- }
277
-
278
- .stn-system-chip__count {
279
- flex: 1;
280
- min-width: 0;
281
- color: var(--stn-system-chip-count);
282
- font-size: var(--stn-text-title-small-size);
283
- font-weight: var(--stn-text-title-small-weight);
284
- line-height: 1;
285
- text-align: right;
286
- font-family: var(--stn-font-body);
287
- }
288
163
 
289
- .stn-system-chip__label {
290
- flex-shrink: 0;
291
- color: var(--stn-system-chip-count);
292
- font-size: var(--stn-text-body-small-size);
293
- font-weight: var(--stn-font-weight-medium);
294
- line-height: 1;
295
- white-space: nowrap;
296
- }
297
-
298
- .stn-system-chip--labeled .stn-system-chip__item {
299
- min-width: var(--stn-size-80);
300
- }
301
164
 
302
165
  /* Header toolbar — Figma map dark 74959 · 212175 · actions 40000040:75034 */
303
166
  .stn-header-toolbar {
@@ -424,13 +287,12 @@
424
287
  flex-shrink: 0;
425
288
  }
426
289
 
427
- /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 */
428
- .stn-header:has(> .stn-header__center) > .stn-header__left {
290
+ /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
291
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
429
292
  display: none;
430
293
  }
431
294
 
432
- /* Page Header 또는 Center가 없는 헤더: 모바일에서도 Left(제목) 유지 및 말줄임표(...) 우선 축약 */
433
- .stn-header--page,
295
+ /* Center가 없는 헤더: 모바일에서도 Left(제목) 유지 및 말줄임표(...) 우선 축약 */
434
296
  .stn-header:not(:has(> .stn-header__center)) {
435
297
  grid-template-columns: minmax(0, 1fr) auto;
436
298
  }
@@ -519,12 +381,12 @@
519
381
  flex-shrink: 0;
520
382
  }
521
383
 
522
- .stn-header:has(> .stn-header__center) > .stn-header__left {
384
+ /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
385
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
523
386
  display: none !important;
524
387
  }
525
388
 
526
- /* Page Header 또는 Center가 없는 헤더: 모바일에서도 Left(제목) 유지 및 말줄임표(...) 우선 축약 */
527
- .stn-header--page,
389
+ /* Center가 없는 헤더: 모바일에서도 Left(제목) 유지 및 말줄임표(...) 우선 축약 */
528
390
  .stn-header:not(:has(> .stn-header__center)) {
529
391
  grid-template-columns: minmax(0, 1fr) auto !important;
530
392
  }
@@ -21,6 +21,13 @@
21
21
  overflow: hidden;
22
22
  }
23
23
 
24
+ /* fullWidth prop 또는 부모 LNB 컨테이너 안에서 가로 100% 확장 지원 */
25
+ .stn-section-side.is-full-width,
26
+ .stn-section-side--full,
27
+ .stn-page-scaffold__lnb > .stn-section-side {
28
+ width: 100%;
29
+ }
30
+
24
31
  /* list view — LNB 열(search+table) 높이에 맞춰 패널 세로 채움 · 하단 inset은 L1 .stn-container padding-bottom */
25
32
  .stn-section-side--fill {
26
33
  flex: 1 1 0%;
@@ -39,4 +46,61 @@
39
46
  max-height: 100%;
40
47
  overflow-x: hidden;
41
48
  overflow-y: scroll;
49
+ /* list/tree LNB 스크롤바: thin (4px) — table 스크롤 규격과 완전 일치 */
50
+ --stn-scroll-width: var(--stn-scroll-width-thin, 4px);
51
+ --stn-scroll-radius: var(--stn-scroll-radius-thin, 2px);
52
+ scrollbar-width: thin;
53
+ scrollbar-color: var(--stn-scroll-thumb) var(--stn-scroll-track);
54
+ }
55
+
56
+ .stn-section-side > .stn-section-side__body.stn-scroll::-webkit-scrollbar,
57
+ .stn-section-side > .stn-scroll::-webkit-scrollbar {
58
+ width: var(--stn-scroll-width-thin, 4px);
59
+ height: var(--stn-scroll-width-thin, 4px);
60
+ background: var(--stn-scroll-track);
61
+ }
62
+
63
+ .stn-section-side > .stn-section-side__body.stn-scroll::-webkit-scrollbar-track,
64
+ .stn-section-side > .stn-scroll::-webkit-scrollbar-track {
65
+ background: var(--stn-scroll-track);
66
+ }
67
+
68
+ .stn-section-side > .stn-section-side__body.stn-scroll::-webkit-scrollbar-thumb,
69
+ .stn-section-side > .stn-scroll::-webkit-scrollbar-thumb {
70
+ background: var(--stn-scroll-thumb);
71
+ border-radius: var(--stn-scroll-radius-thin, 2px);
72
+ }
73
+
74
+ .stn-section-side > .stn-section-side__body.stn-scroll::-webkit-scrollbar-thumb:hover,
75
+ .stn-section-side > .stn-scroll::-webkit-scrollbar-thumb:hover {
76
+ background: var(--stn-scroll-thumb-hover);
77
+ }
78
+
79
+ /* OS 기본 화살표 버튼(arrow) 완전 숨김 */
80
+ .stn-section-side > .stn-section-side__body.stn-scroll::-webkit-scrollbar-button,
81
+ .stn-section-side > .stn-scroll::-webkit-scrollbar-button {
82
+ display: none !important;
83
+ width: 0 !important;
84
+ height: 0 !important;
85
+ }
86
+
87
+
88
+ /* 상단 고정 헤더 (제목, 탭, 검색바 등) */
89
+ .stn-section-side__header {
90
+ flex-shrink: 0;
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: var(--stn-space-8, 8px);
94
+ margin-bottom: var(--stn-space-8, 8px);
95
+ }
96
+
97
+ /* 하단 고정 푸터 (옵션 스위치, 액션 등) */
98
+ .stn-section-side__footer {
99
+ flex-shrink: 0;
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: space-between;
103
+ margin-top: var(--stn-space-8, 8px);
104
+ padding-top: var(--stn-space-8, 8px);
105
+ border-top: 1px solid var(--stn-border-subtle, rgba(255, 255, 255, 0.08));
42
106
  }