@stn-uiux/pub-ui 0.1.73 → 0.1.76

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 (55) 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-3CYSR7V4.js +149 -0
  4. package/dist/chunk-3CYSR7V4.js.map +1 -0
  5. package/dist/{chunk-WN7FYFIO.js → chunk-AJLP3Y53.js} +3 -1
  6. package/dist/chunk-AJLP3Y53.js.map +1 -0
  7. package/dist/chunk-RY53LLWK.js +9 -0
  8. package/dist/chunk-RY53LLWK.js.map +1 -0
  9. package/dist/{chunk-NB4NJQYE.js → chunk-YJLOIDKY.js} +24 -24
  10. package/dist/chunk-YJLOIDKY.js.map +1 -0
  11. package/dist/cli.js +1 -1
  12. package/dist/data/index.d.ts +1 -1
  13. package/dist/data/index.js +7 -5
  14. package/dist/data/stnCard.d.ts +3 -1
  15. package/dist/data/stnCard.js +3 -1
  16. package/dist/data/stnChip.d.ts +2 -3
  17. package/dist/data/stnChip.js +1 -1
  18. package/dist/data/stnLogin.d.ts +2 -2
  19. package/dist/data/stnLogin.js +2 -1
  20. package/dist/data/stnPackageVersion.d.ts +2 -2
  21. package/dist/data/stnPackageVersion.js +1 -1
  22. package/dist/data/stnTextField.d.ts +2 -2
  23. package/dist/data/stnTextField.js +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +7 -5
  26. package/package.json +1 -1
  27. package/styles/components/stn-breadcrumb.css +37 -34
  28. package/styles/components/stn-card.css +24 -3
  29. package/styles/components/stn-date-picker.css +1 -1
  30. package/styles/components/stn-drawer.css +182 -0
  31. package/styles/components/stn-event-banner.css +18 -18
  32. package/styles/components/stn-pagination.css +9 -8
  33. package/styles/components/stn-progress-bar.css +5 -5
  34. package/styles/components/stn-side-nav.css +55 -31
  35. package/styles/components/stn-status.css +22 -22
  36. package/styles/components/stn-table.css +42 -0
  37. package/styles/components/stn-tabs.css +3 -3
  38. package/styles/components/stn-tooltip.css +1 -1
  39. package/styles/components/stn-widget.css +3 -3
  40. package/styles/patterns/stn-alert-center.css +6 -6
  41. package/styles/patterns/stn-header.css +7 -7
  42. package/styles/style-pub.css +1 -0
  43. package/styles/tokens/stn-breakpoint.css +0 -12
  44. package/styles/tokens/stn-colors-semantic.css +15 -13
  45. package/styles/tokens/stn-elevation.css +5 -1
  46. package/styles/tokens/stn-radius-semantic.css +1 -1
  47. package/styles/tokens/stn-size-semantic.css +8 -0
  48. package/styles/tokens/stn-spacing-semantic.css +25 -0
  49. package/dist/chunk-AWJXDCX2.js +0 -151
  50. package/dist/chunk-AWJXDCX2.js.map +0 -1
  51. package/dist/chunk-KLIYAEJA.js.map +0 -1
  52. package/dist/chunk-NB4NJQYE.js.map +0 -1
  53. package/dist/chunk-Q363EBGR.js +0 -9
  54. package/dist/chunk-Q363EBGR.js.map +0 -1
  55. package/dist/chunk-WN7FYFIO.js.map +0 -1
@@ -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;
@@ -19,7 +19,7 @@
19
19
  align-items: center;
20
20
  gap: var(--stn-space-6, 6px);
21
21
  font-family: var(--stn-font-body);
22
- font-size: var(--stn-font-size-13, 13px);
22
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
23
23
  font-weight: var(--stn-font-weight-medium, 500);
24
24
  line-height: 1;
25
25
  color: var(--stn-text-primary);
@@ -50,12 +50,12 @@
50
50
  padding: 0 var(--stn-space-6, 6px);
51
51
  }
52
52
  .stn-status-dot.xs .stn-status-dot__count {
53
- font-size: var(--stn-font-size-10, 10px);
53
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
54
54
  }
55
55
 
56
56
  /* sm — 24px (bordered: 버튼 sm과 1:1 일치) */
57
57
  .stn-status-dot.sm {
58
- font-size: var(--stn-font-size-12, 12px);
58
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
59
59
  gap: var(--stn-space-4, 4px);
60
60
  }
61
61
  .stn-status-dot.sm .stn-status-dot__point {
@@ -72,7 +72,7 @@
72
72
 
73
73
  /* md — 32px (기본 · bordered: 버튼 md와 1:1 일치) */
74
74
  .stn-status-dot.md {
75
- font-size: var(--stn-font-size-13, 13px);
75
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
76
76
  gap: var(--stn-space-6, 6px);
77
77
  }
78
78
  .stn-status-dot.md .stn-status-dot__point {
@@ -84,12 +84,12 @@
84
84
  padding: 0 var(--stn-space-10, 10px);
85
85
  }
86
86
  .stn-status-dot.md .stn-status-dot__count {
87
- font-size: var(--stn-font-size-12, 12px);
87
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
88
88
  }
89
89
 
90
90
  /* lg — 40px (bordered: 버튼 lg와 1:1 일치) */
91
91
  .stn-status-dot.lg {
92
- font-size: var(--stn-font-size-14, 14px);
92
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
93
93
  gap: var(--stn-space-8, 8px);
94
94
  }
95
95
  .stn-status-dot.lg .stn-status-dot__point {
@@ -101,12 +101,12 @@
101
101
  padding: 0 var(--stn-space-12, 12px);
102
102
  }
103
103
  .stn-status-dot.lg .stn-status-dot__count {
104
- font-size: var(--stn-font-size-13, 13px);
104
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
105
105
  }
106
106
 
107
107
  /* xl — 48px (bordered) */
108
108
  .stn-status-dot.xl {
109
- font-size: var(--stn-font-size-15, 15px);
109
+ font-size: var(--stn-text-label-medium-size, var(--stn-font-size-15, 15px));
110
110
  gap: var(--stn-space-8, 8px);
111
111
  }
112
112
  .stn-status-dot.xl .stn-status-dot__point {
@@ -118,7 +118,7 @@
118
118
  padding: 0 var(--stn-space-14, 14px);
119
119
  }
120
120
  .stn-status-dot.xl .stn-status-dot__count {
121
- font-size: var(--stn-font-size-14, 14px);
121
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
122
122
  }
123
123
 
124
124
  /* 여백(Gap) 조절 */
@@ -153,7 +153,7 @@
153
153
  display: inline-flex;
154
154
  align-items: center;
155
155
  font-family: var(--stn-font-number, var(--stn-font-body));
156
- font-size: var(--stn-font-size-12, 12px);
156
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
157
157
  font-weight: var(--stn-font-weight-bold, 700);
158
158
  line-height: 1;
159
159
  color: var(--stn-text-primary);
@@ -259,7 +259,7 @@
259
259
  height: 100%;
260
260
  box-sizing: border-box;
261
261
  font-family: var(--stn-font-body);
262
- font-size: var(--stn-font-size-12, 12px);
262
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
263
263
  font-weight: var(--stn-font-weight-medium, 500);
264
264
  color: var(--stn-text-primary);
265
265
  user-select: none;
@@ -302,7 +302,7 @@
302
302
  background-color: var(--_switch-bg);
303
303
  color: var(--_switch-color);
304
304
  font-family: var(--stn-font-body);
305
- font-size: var(--stn-font-size-12, 12px);
305
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
306
306
  font-weight: var(--stn-font-weight-medium, 500);
307
307
  cursor: pointer;
308
308
  user-select: none;
@@ -475,7 +475,7 @@
475
475
  .stn-status-flow.sm .stn-status-flow__badge {
476
476
  width: var(--stn-size-16, 16px);
477
477
  height: var(--stn-size-16, 16px);
478
- font-size: var(--stn-font-size-10, 10px);
478
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
479
479
  border-radius: var(--stn-radius-3, 3px);
480
480
  }
481
481
  .stn-status-flow.sm .stn-status-flow__badge .stn-icon {
@@ -486,7 +486,7 @@
486
486
  /* md — 26px (기본) */
487
487
  .stn-status-flow.md .stn-status-flow__step {
488
488
  height: var(--stn-size-26, 26px);
489
- font-size: var(--stn-font-size-12, 12px);
489
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
490
490
  padding: 0 var(--stn-space-10, 10px) 0 var(--stn-space-4, 4px);
491
491
  gap: var(--stn-space-6, 6px);
492
492
  }
@@ -500,14 +500,14 @@
500
500
  /* lg — 32px */
501
501
  .stn-status-flow.lg .stn-status-flow__step {
502
502
  height: var(--stn-size-32, 32px);
503
- font-size: var(--stn-font-size-13, 13px);
503
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
504
504
  padding: 0 var(--stn-space-12, 12px) 0 var(--stn-space-5, 5px);
505
505
  gap: var(--stn-space-8, 8px);
506
506
  }
507
507
  .stn-status-flow.lg .stn-status-flow__badge {
508
508
  width: var(--stn-size-22, 22px);
509
509
  height: var(--stn-size-22, 22px);
510
- font-size: var(--stn-font-size-12, 12px);
510
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
511
511
  border-radius: var(--stn-radius-4, 4px);
512
512
  }
513
513
  .stn-status-flow.lg .stn-status-flow__badge .stn-icon {
@@ -518,14 +518,14 @@
518
518
  /* xl — 36px */
519
519
  .stn-status-flow.xl .stn-status-flow__step {
520
520
  height: var(--stn-size-36, 36px);
521
- font-size: var(--stn-font-size-14, 14px);
521
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
522
522
  padding: 0 var(--stn-space-14, 14px) 0 var(--stn-space-6, 6px);
523
523
  gap: var(--stn-space-10, 10px);
524
524
  }
525
525
  .stn-status-flow.xl .stn-status-flow__badge {
526
526
  width: var(--stn-size-26, 26px);
527
527
  height: var(--stn-size-26, 26px);
528
- font-size: var(--stn-font-size-13, 13px);
528
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
529
529
  border-radius: var(--stn-radius-6, 6px);
530
530
  }
531
531
  .stn-status-flow.xl .stn-status-flow__badge .stn-icon {
@@ -550,7 +550,7 @@
550
550
  align-items: center;
551
551
  color: var(--stn-status-flow-connector-color);
552
552
  opacity: var(--stn-status-flow-connector-opacity);
553
- font-size: var(--stn-font-size-12, 12px);
553
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
554
554
  user-select: none;
555
555
  }
556
556
 
@@ -617,7 +617,7 @@
617
617
  .stn-status-severity.sm {
618
618
  height: var(--stn-severity-badge-height-sm, var(--stn-size-18, 18px));
619
619
  padding: var(--stn-severity-badge-padding-sm, var(--stn-space-2, 2px) var(--stn-space-4, 4px));
620
- font-size: var(--stn-font-size-10, 10px);
620
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
621
621
  gap: var(--stn-severity-badge-gap-sm, var(--stn-space-2, 2px));
622
622
  }
623
623
 
@@ -643,7 +643,7 @@
643
643
  .stn-status-severity.lg {
644
644
  height: var(--stn-severity-badge-height-lg, var(--stn-size-24, 24px));
645
645
  padding: var(--stn-severity-badge-padding-lg, var(--stn-space-4, 4px) var(--stn-space-10, 10px));
646
- font-size: var(--stn-font-size-12, 12px);
646
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
647
647
  gap: var(--stn-severity-badge-gap-lg, var(--stn-space-4, 4px));
648
648
  }
649
649
 
@@ -688,7 +688,7 @@
688
688
  width: var(--stn-severity-filter-width, var(--stn-size-52, 52px));
689
689
  height: var(--stn-severity-filter-height, var(--stn-size-26, 26px));
690
690
  padding: var(--stn-space-4, 4px);
691
- font-size: var(--stn-font-size-14, 14px);
691
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
692
692
  font-weight: var(--stn-font-weight-bold, 700);
693
693
  cursor: pointer;
694
694
  background: transparent;
@@ -354,6 +354,48 @@ td.stn-table__col-check .stn-checkbox {
354
354
  white-space: nowrap;
355
355
  }
356
356
 
357
+ /* Density Modifiers — 인라인 padding 지정 없이 토큰 기반 조절 */
358
+ .stn-table.stn-table--compact,
359
+ .stn-table--compact .stn-table__grid {
360
+ --stn-table-cell-padding: var(--stn-space-1) var(--stn-space-2);
361
+ --stn-table-row-height: var(--stn-size-32);
362
+ }
363
+
364
+ .stn-table.stn-table--comfortable,
365
+ .stn-table--comfortable .stn-table__grid {
366
+ --stn-table-cell-padding: var(--stn-space-3) var(--stn-space-4);
367
+ --stn-table-row-height: var(--stn-size-44);
368
+ }
369
+
370
+ /* Cell Helper Classes */
371
+ .stn-table__font-number,
372
+ .stn-table td.stn-table__font-number {
373
+ font-family: var(--stn-font-number);
374
+ }
375
+
376
+ .stn-table__cell-sub {
377
+ color: var(--stn-text-secondary);
378
+ }
379
+
380
+ .stn-table__cell-muted {
381
+ color: var(--stn-text-tertiary);
382
+ font-size: var(--stn-text-caption-size);
383
+ }
384
+
385
+ .stn-table__cell-primary {
386
+ color: var(--stn-text-primary);
387
+ }
388
+
389
+ .stn-table__cell-critical {
390
+ color: var(--stn-critical);
391
+ font-weight: var(--stn-font-weight-bold);
392
+ }
393
+
394
+ .stn-table__divider {
395
+ color: var(--stn-text-tertiary);
396
+ margin-inline: var(--stn-space-1);
397
+ }
398
+
357
399
  /* align variant — Th/Td `align="left" | "center" | "right"` (기본 center) */
358
400
  .stn-table th.stn-table__th--align-left,
359
401
  .stn-table td.stn-table__td--align-left {
@@ -118,7 +118,7 @@
118
118
  .stn-tabs.sm .stn-tab {
119
119
  height: var(--stn-size-32, 32px);
120
120
  padding: 0 var(--stn-space-12, 12px);
121
- font-size: var(--stn-font-size-12, 12px);
121
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
122
122
  border-radius: var(--stn-radius-sm, 6px);
123
123
  }
124
124
 
@@ -127,7 +127,7 @@
127
127
  .stn-tabs:not(.sm):not(.lg) .stn-tab {
128
128
  height: var(--stn-size-38, 38px);
129
129
  padding: 0 var(--stn-space-16, 16px);
130
- font-size: var(--stn-font-size-13, 13px);
130
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
131
131
  border-radius: var(--stn-radius-md, 8px);
132
132
  }
133
133
 
@@ -135,7 +135,7 @@
135
135
  .stn-tabs.lg .stn-tab {
136
136
  height: var(--stn-size-44, 44px);
137
137
  padding: 0 var(--stn-space-20, 20px);
138
- font-size: var(--stn-font-size-14, 14px);
138
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
139
139
  border-radius: var(--stn-radius-md, 8px);
140
140
  }
141
141
 
@@ -203,7 +203,7 @@
203
203
 
204
204
  /* SM: 소형 (높이 20px, 폰트 11px) */
205
205
  .stn-tooltip.sm {
206
- --stn-tooltip-font-size: var(--stn-font-size-11);
206
+ --stn-tooltip-font-size: var(--stn-text-caption-small-size, var(--stn-font-size-11, 11px));
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);
@@ -268,9 +268,9 @@
268
268
  }
269
269
 
270
270
  /* Widget title size modifiers */
271
- .stn-widget .stn-widget__title.sm { font-size: var(--stn-font-size-14, 14px); }
272
- .stn-widget .stn-widget__title.md { font-size: var(--stn-font-size-16, 16px); }
273
- .stn-widget .stn-widget__title.lg { font-size: var(--stn-font-size-18, 18px); }
271
+ .stn-widget .stn-widget__title.sm { font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px)); }
272
+ .stn-widget .stn-widget__title.md { font-size: var(--stn-text-title-small-size, var(--stn-font-size-16, 16px)); }
273
+ .stn-widget .stn-widget__title.lg { font-size: var(--stn-text-title-medium-size, var(--stn-font-size-18, 18px)); }
274
274
 
275
275
  /* Widget title weight modifiers */
276
276
  .stn-widget .stn-widget__title.regular { font-weight: var(--stn-font-weight-regular, 400); }
@@ -148,7 +148,7 @@
148
148
  border: var(--stn-size-1) solid transparent;
149
149
  background: transparent;
150
150
  color: var(--stn-text-secondary);
151
- font-size: var(--stn-font-size-13);
151
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
152
152
  font-weight: var(--stn-font-weight-medium);
153
153
  cursor: pointer;
154
154
  transition: color 0.15s ease;
@@ -294,7 +294,7 @@
294
294
  .stn-alert-card__title {
295
295
  flex: 1;
296
296
  min-width: 0;
297
- font-size: var(--stn-font-size-15);
297
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-15, 15px));
298
298
  font-weight: var(--stn-font-weight-bold);
299
299
  color: var(--stn-text-primary);
300
300
  letter-spacing: -0.01em;
@@ -302,7 +302,7 @@
302
302
 
303
303
  /* 작업/공사 타입 라벨 공통 */
304
304
  .stn-alert-card__type-label {
305
- font-size: var(--stn-font-size-14);
305
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
306
306
  font-weight: var(--stn-font-weight-bold);
307
307
  color: var(--stn-text-primary);
308
308
  }
@@ -329,7 +329,7 @@
329
329
  .stn-alert-card__desc {
330
330
  flex: 1;
331
331
  min-width: 0;
332
- font-size: var(--stn-font-size-13);
332
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
333
333
  color: var(--stn-text-secondary);
334
334
  line-height: var(--stn-line-height-reading);
335
335
  }
@@ -429,7 +429,7 @@
429
429
 
430
430
  /* 시간 텍스트 */
431
431
  .stn-alert-card__time {
432
- font-size: var(--stn-font-size-13);
432
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-13, 13px));
433
433
  color: var(--stn-text-secondary);
434
434
  white-space: nowrap;
435
435
  }
@@ -446,7 +446,7 @@
446
446
  align-items: center;
447
447
  gap: var(--stn-space-4);
448
448
  color: var(--stn-text-secondary);
449
- font-size: var(--stn-font-size-13);
449
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
450
450
  font-weight: var(--stn-font-weight-medium);
451
451
  text-decoration: none;
452
452
  cursor: pointer;
@@ -83,7 +83,7 @@
83
83
  justify-self: start;
84
84
  width: max-content;
85
85
  max-width: 100%;
86
- overflow: hidden;
86
+ overflow: visible;
87
87
  }
88
88
 
89
89
  .stn-header__right {
@@ -287,8 +287,8 @@
287
287
  flex-shrink: 0;
288
288
  }
289
289
 
290
- /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
291
- .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
290
+ /* Center(시계/타이틀)가 있는 경우 햄버거 버튼을 제외한 Left 서브 텍스트만 숨겨 중앙 공간 확보 */
291
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left > *:not(.stn-side-nav__mobile-trigger) {
292
292
  display: none;
293
293
  }
294
294
 
@@ -303,7 +303,7 @@
303
303
  width: auto;
304
304
  min-width: 0;
305
305
  max-width: 100%;
306
- overflow: hidden;
306
+ overflow: visible;
307
307
  flex: 1 1 auto;
308
308
  }
309
309
 
@@ -381,8 +381,8 @@
381
381
  flex-shrink: 0;
382
382
  }
383
383
 
384
- /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
385
- .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
384
+ /* Center(시계/타이틀)가 있는 경우 햄버거 버튼을 제외한 Left 서브 텍스트만 숨겨 중앙 공간 확보 */
385
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left > *:not(.stn-side-nav__mobile-trigger) {
386
386
  display: none !important;
387
387
  }
388
388
 
@@ -397,7 +397,7 @@
397
397
  width: auto !important;
398
398
  min-width: 0 !important;
399
399
  max-width: 100% !important;
400
- overflow: hidden !important;
400
+ overflow: visible !important;
401
401
  flex: 1 1 auto !important;
402
402
  }
403
403
 
@@ -45,6 +45,7 @@
45
45
  @import './components/stn-side-nav.css';
46
46
  @import './components/stn-header-title.css';
47
47
  @import './components/stn-popup.css';
48
+ @import './components/stn-drawer.css';
48
49
  @import './components/stn-table.css';
49
50
  @import './components/stn-pagination.css';
50
51
  @import './components/stn-slider.css';
@@ -15,16 +15,4 @@
15
15
  --stn-bp-md: 1024px;
16
16
  --stn-bp-lg: 1280px;
17
17
  --stn-bp-xl: 1440px;
18
-
19
- /* Semantic Layout & Responsive Aliases */
20
- --stn-layout-list-split-breakpoint: var(--stn-bp-md);
21
- --stn-layout-list-tree-top-max-height: 240px;
22
- --stn-table-footer-collapse-breakpoint: var(--stn-bp-sm);
23
-
24
- /* Pagination — 좁은 화면 컴팩트 모드 (@media 480px 기준; CSS @media에서는 리터럴 사용) */
25
- --stn-pagination-compact-breakpoint: 480px;
26
- --stn-pagination-compact-size: var(--stn-size-28, 28px);
27
- --stn-pagination-compact-padding: var(--stn-space-6, 6px);
28
- --stn-pagination-compact-font-size: var(--stn-font-size-12, 12px);
29
- --stn-pagination-compact-gap: var(--stn-space-4, 4px);
30
18
  }
@@ -51,6 +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
55
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-950) 50%, transparent);
55
56
  --stn-dim-blur: 4px;
56
57
  --stn-input-bg: var(--stn-gray-900);
@@ -146,7 +147,7 @@
146
147
  --stn-table-row-hover: var(--stn-gray-900);
147
148
  --stn-table-td-fg: var(--stn-gray-50);
148
149
  --stn-table-th-bg: var(--stn-gray-800);
149
- --stn-table-th-fg: var(--stn-gray-350);
150
+ --stn-table-th-fg: var(--stn-gray-250);
150
151
  --stn-table-th-radius: 8px;
151
152
  --stn-pagination-active-bg: var(--stn-opacity-white-10);
152
153
  --stn-pagination-active-color: var(--stn-gray-50);
@@ -187,7 +188,7 @@
187
188
  --stn-header-toolbar-icon: var(--stn-blue-250);
188
189
  --stn-header-toolbar-outline-border: var(--stn-blue-600);
189
190
  --stn-header-toolbar-outline-fg: var(--stn-gray-50);
190
- --stn-nav-menu-active-bg: color-mix(in srgb, var(--stn-static-black) 85%, transparent);
191
+ --stn-nav-menu-active-bg: var(--stn-opacity-black-10);
191
192
  --stn-nav-menu-active-border: var(--stn-blue-350);
192
193
  --stn-nav-menu-active-shadow-depth: color-mix(in srgb, var(--stn-static-black) 95%, transparent);
193
194
  --stn-nav-menu-active-shadow-highlight: color-mix(in srgb, var(--stn-static-white) 25%, transparent);
@@ -201,7 +202,7 @@
201
202
  --stn-side-nav-border: var(--stn-gray-800);
202
203
  --stn-side-nav-divider: var(--stn-gray-800);
203
204
  --stn-side-nav-shadow: 1px 1px 10px 0 var(--stn-gray-850);
204
- --stn-side-nav-toggle-bg: var(--stn-gray-950);
205
+ --stn-side-nav-toggle-bg: var(--stn-opacity-black-50);
205
206
  --stn-side-nav-toggle-border: var(--stn-gray-800);
206
207
  --stn-side-nav-toggle-fg: var(--stn-static-white);
207
208
  --stn-side-nav-toggle-shadow: -1px -1px 3px 0 color-mix(in srgb, var(--stn-static-white) 12%, transparent), 1px 1px 4px 0 color-mix(in srgb, var(--stn-static-black) 70%, transparent);
@@ -219,9 +220,9 @@
219
220
  --stn-side-nav-sub-btn-hover-border: var(--stn-opacity-white-20);
220
221
  --stn-btn-disabled-bg: var(--stn-gray-750);
221
222
  --stn-btn-disabled-fg: var(--stn-gray-400);
222
- --stn-btn-ghost-bg: color-mix(in srgb, var(--stn-static-white) 5%, transparent);
223
- --stn-btn-ghost-bg-hover: color-mix(in srgb, var(--stn-static-white) 10%, transparent);
224
- --stn-btn-ghost-bg-pressed: color-mix(in srgb, var(--stn-static-white) 15%, transparent);
223
+ --stn-btn-ghost-bg: var(--stn-opacity-white-5);
224
+ --stn-btn-ghost-bg-hover: var(--stn-opacity-white-10);
225
+ --stn-btn-ghost-bg-pressed: var(--stn-opacity-white-15);
225
226
  --stn-btn-ghost-fg: var(--stn-gray-100);
226
227
  --stn-btn-outlined-border: var(--stn-blue-250);
227
228
  --stn-btn-outlined-border-hover: var(--stn-blue-350);
@@ -390,7 +391,7 @@
390
391
  --stn-scroll-thumb-muted: var(--stn-gray-600);
391
392
  --stn-scroll-thumb-muted-hover: var(--stn-gray-500);
392
393
  --stn-chip-teal: var(--stn-teal-400);
393
- --stn-chip-neutral: var(--stn-gray-400);
394
+ --stn-chip-neutral: var(--stn-gray-200);
394
395
  --stn-chip-fg-contrast: var(--stn-gray-950);
395
396
  --stn-chip-accent-mint: var(--stn-teal-300);
396
397
  --stn-chip-accent-sky: var(--stn-blue-300);
@@ -443,9 +444,9 @@
443
444
  --stn-side-nav-glass-bg: var(--stn-opacity-black-25);
444
445
  --stn-side-nav-glass-shadow: 1px 1px 10px 0 var(--stn-gray-850);
445
446
  --stn-side-nav-glass-border: color-mix(in srgb, var(--stn-static-white) 6%, transparent);
446
- --stn-side-nav-mobile-trigger-bg: var(--stn-gray-900);
447
- --stn-side-nav-mobile-trigger-border: var(--stn-gray-700);
448
- --stn-side-nav-mobile-trigger-fg: var(--stn-static-white);
447
+ --stn-side-nav-mobile-trigger-bg: color-mix(in srgb, var(--stn-gray-900) 65%, transparent);
448
+ --stn-side-nav-mobile-trigger-border: color-mix(in srgb, var(--stn-static-white) 14%, transparent);
449
+ --stn-side-nav-mobile-trigger-fg: var(--stn-gray-100);
449
450
  --stn-side-nav-mobile-backdrop: var(--stn-opacity-black-65);
450
451
  --stn-side-nav-drawer-shadow: 8px 0 32px var(--stn-opacity-black-45);
451
452
  --stn-side-nav-trigger-shadow: 0 4px 16px var(--stn-opacity-black-30);
@@ -659,6 +660,7 @@
659
660
  --stn-elevation-surface-1: var(--stn-opacity-black-0);
660
661
  --stn-elevation-surface-2: var(--stn-static-white);
661
662
  --stn-elevation-surface-widget: var(--stn-static-white);
663
+ --stn-drawer-bg: var(--stn-static-white);
662
664
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-900) 20%, transparent);
663
665
  --stn-dim-blur: 2px;
664
666
  --stn-input-bg: var(--stn-static-white);
@@ -1000,7 +1002,7 @@
1000
1002
  --stn-scroll-thumb-muted: var(--stn-gray-600);
1001
1003
  --stn-scroll-thumb-muted-hover: var(--stn-gray-500);
1002
1004
  --stn-chip-teal: var(--stn-teal-500);
1003
- --stn-chip-neutral: var(--stn-gray-400);
1005
+ --stn-chip-neutral: var(--stn-gray-500);
1004
1006
  --stn-chip-fg-contrast: var(--stn-gray-950);
1005
1007
  --stn-chip-accent-mint: var(--stn-teal-300);
1006
1008
  --stn-chip-accent-sky: var(--stn-blue-300);
@@ -1053,8 +1055,8 @@
1053
1055
  --stn-side-nav-glass-bg: var(--stn-opacity-white-40);
1054
1056
  --stn-side-nav-glass-shadow: 1px 1px 10px 0 var(--stn-gray-150);
1055
1057
  --stn-side-nav-glass-border: var(--stn-gray-150);
1056
- --stn-side-nav-mobile-trigger-bg: var(--stn-static-white);
1057
- --stn-side-nav-mobile-trigger-border: var(--stn-gray-200);
1058
+ --stn-side-nav-mobile-trigger-bg: color-mix(in srgb, var(--stn-static-white) 75%, transparent);
1059
+ --stn-side-nav-mobile-trigger-border: color-mix(in srgb, var(--stn-gray-900) 12%, transparent);
1058
1060
  --stn-side-nav-mobile-trigger-fg: var(--stn-gray-900);
1059
1061
  --stn-side-nav-mobile-backdrop: var(--stn-opacity-white-65);
1060
1062
  --stn-side-nav-drawer-shadow: 8px 0 32px var(--stn-opacity-black-20);