@stn-uiux/pub-ui 0.1.81 → 0.1.82

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.
@@ -0,0 +1,394 @@
1
+ @charset "utf-8";
2
+
3
+ /**
4
+ * STN Design System — Bar Chart Component (.stn-chart-bar)
5
+ * Vertical and Horizontal bar charts with multi-series support.
6
+ * 100% strictly tokenized via STN semantic design tokens (--stn-chart-*).
7
+ */
8
+
9
+ /* ==========================================================================
10
+ 1. Vertical Bar Chart Layout & Elements
11
+ ========================================================================== */
12
+ .stn-chart-bar {
13
+ display: flex;
14
+ flex-direction: column;
15
+ width: 100%;
16
+ height: 100%;
17
+ position: relative;
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ .stn-chart-bar__body {
22
+ position: relative;
23
+ flex: 1 0 0;
24
+ width: 100%;
25
+ min-height: var(--stn-chart-body-min-height);
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ /* Y-Axis Grid Lines Container */
30
+ .stn-chart-bar__grid {
31
+ position: absolute;
32
+ inset: var(--stn-chart-grid-inset-top) 0 var(--stn-chart-grid-inset-bottom) 0;
33
+ display: flex;
34
+ flex-direction: column;
35
+ justify-content: space-between;
36
+ pointer-events: none;
37
+ }
38
+
39
+ .stn-chart-bar__grid-row {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: var(--stn-chart-grid-row-gap);
43
+ height: 0;
44
+ }
45
+
46
+ .stn-chart-bar__axis-label {
47
+ font-family: var(--stn-font-body);
48
+ font-size: var(--stn-font-size-10);
49
+ line-height: var(--stn-line-height-tight);
50
+ color: var(--stn-chart-axis-text);
51
+ width: var(--stn-chart-axis-y-width);
52
+ text-align: right;
53
+ flex-shrink: 0;
54
+ user-select: none;
55
+ }
56
+
57
+ .stn-chart-bar__grid-line {
58
+ flex: 1;
59
+ border-bottom: var(--stn-chart-border-width) dashed var(--stn-chart-grid-line);
60
+ }
61
+
62
+ .stn-chart-bar__grid-line--zero {
63
+ border-bottom: var(--stn-chart-border-width) solid var(--stn-chart-zero-line);
64
+ }
65
+
66
+ /* Columns Container */
67
+ .stn-chart-bar__columns {
68
+ position: absolute;
69
+ inset: var(--stn-chart-grid-inset-top) var(--stn-chart-col-padding-x) var(--stn-chart-grid-inset-bottom) var(--stn-chart-axis-y-offset);
70
+ display: flex;
71
+ align-items: flex-end;
72
+ justify-content: space-around;
73
+ z-index: 1;
74
+ }
75
+
76
+ /* Individual Column */
77
+ .stn-chart-bar__col {
78
+ min-width: var(--stn-chart-col-min-width);
79
+ width: auto;
80
+ max-width: var(--stn-chart-col-max-width);
81
+ height: 100%;
82
+ display: flex;
83
+ justify-content: center;
84
+ align-items: flex-end;
85
+ position: relative;
86
+ cursor: pointer;
87
+ background: transparent;
88
+ border: none;
89
+ padding: 0 var(--stn-chart-col-padding-x);
90
+ }
91
+
92
+ /* Highlight Box (on hover or active) */
93
+ .stn-chart-bar__highlight {
94
+ display: none;
95
+ position: absolute;
96
+ bottom: 0;
97
+ left: calc(-1 * var(--stn-chart-col-padding-x));
98
+ right: calc(-1 * var(--stn-chart-col-padding-x));
99
+ height: 100%;
100
+ background: var(--stn-chart-highlight-bg);
101
+ border: var(--stn-chart-border-width) solid var(--stn-chart-highlight-border);
102
+ border-bottom: none;
103
+ border-radius: var(--stn-radius-8) var(--stn-radius-8) 0 0;
104
+ z-index: 1;
105
+ pointer-events: none;
106
+ }
107
+
108
+ .stn-chart-bar__col:hover .stn-chart-bar__highlight,
109
+ .stn-chart-bar__col.is-active .stn-chart-bar__highlight {
110
+ display: block;
111
+ }
112
+
113
+ /* Bars Wrap inside Column */
114
+ .stn-chart-bar__bars-wrap {
115
+ display: flex;
116
+ align-items: flex-end;
117
+ justify-content: center;
118
+ gap: var(--stn-chart-col-bars-gap);
119
+ width: 100%;
120
+ height: 100%;
121
+ z-index: 1;
122
+ }
123
+
124
+ /* Bar Item */
125
+ .stn-chart-bar__item {
126
+ width: var(--stn-chart-bar-width, var(--stn-chart-bar-width-md));
127
+ min-width: var(--stn-chart-bar-min-width);
128
+ border-radius: var(--stn-radius-2) var(--stn-radius-2) 0 0;
129
+ transition: height 0.25s cubic-bezier(0.4, 0, 0.2, 1);
130
+ }
131
+
132
+ /* Bar Chart Size Modifiers (sm / md / lg) */
133
+ .stn-chart-bar--sm {
134
+ --stn-chart-bar-width: var(--stn-chart-bar-width-sm);
135
+ }
136
+
137
+ .stn-chart-bar--md {
138
+ --stn-chart-bar-width: var(--stn-chart-bar-width-md);
139
+ }
140
+
141
+ .stn-chart-bar--lg {
142
+ --stn-chart-bar-width: var(--stn-chart-bar-width-lg);
143
+ }
144
+
145
+ .stn-chart-bar__col--compact .stn-chart-bar__item {
146
+ width: var(--stn-chart-bar-width-sm);
147
+ }
148
+
149
+ /* X-Axis Rotated Label (-36deg) */
150
+ .stn-chart-bar__label {
151
+ font-family: var(--stn-font-body);
152
+ font-size: var(--stn-font-size-10);
153
+ font-weight: var(--stn-font-weight-regular);
154
+ color: var(--stn-chart-bar-label);
155
+ transform: rotate(-36deg);
156
+ transform-origin: 100% 0;
157
+ white-space: nowrap;
158
+ position: absolute;
159
+ top: calc(100% + var(--stn-chart-label-offset-top));
160
+ right: 50%;
161
+ text-align: right;
162
+ z-index: 2;
163
+ pointer-events: none;
164
+ }
165
+
166
+ .stn-chart-bar__col.is-active .stn-chart-bar__label,
167
+ .stn-chart-bar__col:hover .stn-chart-bar__label {
168
+ font-weight: var(--stn-font-weight-semibold);
169
+ color: var(--stn-text-primary);
170
+ }
171
+
172
+ /* ==========================================================================
173
+ 2. Horizontal Bar Chart (.stn-chart-bar--horizontal)
174
+ ========================================================================== */
175
+ .stn-chart-bar--horizontal {
176
+ display: flex;
177
+ flex-direction: column;
178
+ width: 100%;
179
+ height: 100%;
180
+ box-sizing: border-box;
181
+ }
182
+
183
+ .stn-chart-bar--horizontal .stn-chart-bar__body {
184
+ position: relative;
185
+ flex: 1 1 0%;
186
+ width: 100%;
187
+ min-height: var(--stn-chart-body-min-height);
188
+ display: flex;
189
+ flex-direction: column;
190
+ box-sizing: border-box;
191
+ }
192
+
193
+ /* Vertical Grid Lines for Horizontal Bar Scale */
194
+ .stn-chart-bar__grid-v {
195
+ position: absolute;
196
+ inset: var(--stn-chart-grid-inset-top) var(--stn-chart-line-axis-y-bottom) var(--stn-chart-grid-inset-bottom-horizontal) calc(var(--stn-chart-row-label-width) + var(--stn-chart-label-offset-top));
197
+ display: flex;
198
+ justify-content: space-between;
199
+ pointer-events: none;
200
+ z-index: 0;
201
+ }
202
+
203
+ .stn-chart-bar--no-y-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v,
204
+ .hide-y-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v,
205
+ .stn-chart-bar--horizontal.stn-chart-bar--no-y-axis .stn-chart-bar__grid-v {
206
+ left: var(--stn-chart-line-axis-y-bottom);
207
+ }
208
+
209
+ .stn-chart-bar--no-x-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v,
210
+ .hide-x-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v,
211
+ .stn-chart-bar--horizontal.stn-chart-bar--no-x-axis .stn-chart-bar__grid-v {
212
+ bottom: var(--stn-chart-grid-inset-bottom-compact);
213
+ }
214
+
215
+ .stn-chart-bar__grid-v-col {
216
+ display: flex;
217
+ flex-direction: column;
218
+ align-items: center;
219
+ height: 100%;
220
+ width: 0;
221
+ position: relative;
222
+ }
223
+
224
+ .stn-chart-bar__grid-v-line {
225
+ flex: 1;
226
+ border-left: var(--stn-chart-border-width) dashed var(--stn-chart-grid-line);
227
+ }
228
+
229
+ .stn-chart-bar__grid-v-line--zero {
230
+ border-left: var(--stn-chart-border-width) solid var(--stn-chart-zero-line);
231
+ }
232
+
233
+ .stn-chart-bar__grid-v-label {
234
+ position: absolute;
235
+ top: calc(100% + var(--stn-chart-label-offset-top));
236
+ transform: translateX(-50%);
237
+ font-family: var(--stn-font-body);
238
+ font-size: var(--stn-font-size-10);
239
+ color: var(--stn-chart-axis-text);
240
+ line-height: var(--stn-line-height-tight);
241
+ white-space: nowrap;
242
+ }
243
+
244
+ .stn-chart-bar--no-x-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v-label,
245
+ .hide-x-axis.stn-chart-bar--horizontal .stn-chart-bar__grid-v-label,
246
+ .stn-chart-bar--horizontal.stn-chart-bar--no-x-axis .stn-chart-bar__grid-v-label {
247
+ display: none;
248
+ }
249
+
250
+ /* Bottom Numeric Scale for Horizontal Bar */
251
+ .stn-chart-bar__axis-scale-x {
252
+ position: absolute;
253
+ left: calc(var(--stn-chart-row-label-width) + var(--stn-chart-label-offset-top));
254
+ right: var(--stn-chart-line-axis-y-bottom);
255
+ bottom: var(--stn-chart-label-offset-top);
256
+ display: flex;
257
+ justify-content: space-between;
258
+ pointer-events: none;
259
+ font-family: var(--stn-font-body);
260
+ font-size: var(--stn-font-size-10);
261
+ color: var(--stn-chart-axis-text);
262
+ line-height: var(--stn-line-height-tight);
263
+ }
264
+
265
+ .stn-chart-bar--no-y-axis.stn-chart-bar--horizontal .stn-chart-bar__axis-scale-x,
266
+ .hide-y-axis.stn-chart-bar--horizontal .stn-chart-bar__axis-scale-x,
267
+ .stn-chart-bar--horizontal.stn-chart-bar--no-y-axis .stn-chart-bar__axis-scale-x {
268
+ left: var(--stn-chart-line-axis-y-bottom);
269
+ }
270
+
271
+ .stn-chart-bar--no-x-axis.stn-chart-bar--horizontal .stn-chart-bar__axis-scale-x,
272
+ .hide-x-axis.stn-chart-bar--horizontal .stn-chart-bar__axis-scale-x,
273
+ .stn-chart-bar--horizontal.stn-chart-bar--no-x-axis .stn-chart-bar__axis-scale-x {
274
+ display: none;
275
+ }
276
+
277
+ /* Rows Container for Horizontal Bars */
278
+ .stn-chart-bar__rows {
279
+ position: absolute;
280
+ inset: var(--stn-chart-grid-inset-top) var(--stn-chart-grid-inset-top) var(--stn-chart-grid-inset-bottom-horizontal) 0;
281
+ display: flex;
282
+ flex-direction: column;
283
+ justify-content: space-around;
284
+ gap: var(--stn-chart-col-bars-gap);
285
+ z-index: 1;
286
+ }
287
+
288
+ .stn-chart-bar--no-x-axis.stn-chart-bar--horizontal .stn-chart-bar__rows,
289
+ .hide-x-axis.stn-chart-bar--horizontal .stn-chart-bar__rows,
290
+ .stn-chart-bar--horizontal.stn-chart-bar--no-x-axis .stn-chart-bar__rows {
291
+ bottom: var(--stn-chart-grid-inset-bottom-compact);
292
+ }
293
+
294
+ /* Individual Row */
295
+ .stn-chart-bar__row {
296
+ display: flex;
297
+ align-items: center;
298
+ width: 100%;
299
+ min-height: var(--stn-chart-row-min-height);
300
+ background: transparent;
301
+ border: none;
302
+ padding: var(--stn-chart-row-padding-y) var(--stn-chart-row-padding-x);
303
+ cursor: pointer;
304
+ position: relative;
305
+ border-radius: var(--stn-radius-4);
306
+ box-sizing: border-box;
307
+ text-align: left;
308
+ transition: background-color 0.15s ease;
309
+ }
310
+
311
+ .stn-chart-bar__row:hover,
312
+ .stn-chart-bar__row.is-active {
313
+ background-color: var(--stn-chart-highlight-bg);
314
+ }
315
+
316
+ .stn-chart-bar__row--compact {
317
+ min-height: var(--stn-chart-row-min-height-compact);
318
+ padding: var(--stn-chart-row-padding-compact-y) var(--stn-chart-row-padding-x);
319
+ }
320
+
321
+ .stn-chart-bar__row-label {
322
+ width: var(--stn-chart-row-label-width);
323
+ flex-shrink: 0;
324
+ font-family: var(--stn-font-body);
325
+ font-size: var(--stn-font-size-11);
326
+ font-weight: var(--stn-font-weight-regular);
327
+ color: var(--stn-chart-bar-label);
328
+ text-align: right;
329
+ padding-right: var(--stn-chart-row-label-padding-right);
330
+ box-sizing: border-box;
331
+ white-space: nowrap;
332
+ overflow: hidden;
333
+ text-overflow: ellipsis;
334
+ }
335
+
336
+ .stn-chart-bar--no-y-axis.stn-chart-bar--horizontal .stn-chart-bar__row-label,
337
+ .hide-y-axis.stn-chart-bar--horizontal .stn-chart-bar__row-label,
338
+ .stn-chart-bar--horizontal.stn-chart-bar--no-y-axis .stn-chart-bar__row-label {
339
+ display: none;
340
+ }
341
+
342
+ .stn-chart-bar__row:hover .stn-chart-bar__row-label,
343
+ .stn-chart-bar__row.is-active .stn-chart-bar__row-label {
344
+ font-weight: var(--stn-font-weight-semibold);
345
+ color: var(--stn-text-primary);
346
+ }
347
+
348
+ /* Row Track & Bars */
349
+ .stn-chart-bar__row-track {
350
+ flex: 1;
351
+ display: flex;
352
+ flex-direction: column;
353
+ justify-content: center;
354
+ gap: var(--stn-chart-row-track-gap);
355
+ height: 100%;
356
+ position: relative;
357
+ min-width: 0;
358
+ }
359
+
360
+ .stn-chart-bar__row-val {
361
+ margin-left: var(--stn-chart-row-val-margin-left);
362
+ font-family: var(--stn-font-body);
363
+ font-size: var(--stn-font-size-10);
364
+ font-weight: var(--stn-font-weight-medium);
365
+ color: var(--stn-text-secondary);
366
+ font-variant-numeric: tabular-nums;
367
+ white-space: nowrap;
368
+ }
369
+
370
+ .stn-chart-bar--horizontal .stn-chart-bar__item {
371
+ width: 0%;
372
+ height: var(--stn-chart-bar-width, var(--stn-chart-bar-width-md));
373
+ min-height: var(--stn-chart-bar-min-width);
374
+ border-radius: 0 var(--stn-radius-2) var(--stn-radius-2) 0;
375
+ transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
376
+ }
377
+
378
+ /* ==========================================================================
379
+ 3. Axis Show/Hide Modifiers (Class Based)
380
+ ========================================================================== */
381
+ .stn-chart-bar--no-x-axis .stn-chart-bar__label,
382
+ .hide-x-axis .stn-chart-bar__label {
383
+ display: none;
384
+ }
385
+
386
+ .stn-chart-bar--no-y-axis .stn-chart-bar__grid,
387
+ .hide-y-axis .stn-chart-bar__grid {
388
+ display: none;
389
+ }
390
+
391
+ .stn-chart-bar--no-y-axis .stn-chart-bar__columns,
392
+ .hide-y-axis .stn-chart-bar__columns {
393
+ inset: var(--stn-chart-grid-inset-top) var(--stn-chart-col-padding-x) var(--stn-chart-grid-inset-bottom) var(--stn-chart-grid-row-gap);
394
+ }
@@ -0,0 +1,243 @@
1
+ @charset "utf-8";
2
+
3
+ /**
4
+ * STN Design System — Chart Common Foundations
5
+ * Global chart variables, interactive hover tooltips, and shared legend components.
6
+ * 100% strictly tokenized via STN semantic design tokens (--stn-chart-*).
7
+ */
8
+
9
+ :root {
10
+ --stn-chart-bar-width: var(--stn-chart-bar-width-md);
11
+ --stn-chart-combo-bar-width: var(--stn-chart-combo-bar-width-md);
12
+ }
13
+
14
+ /* ==========================================================================
15
+ 1. Shared Legend Pill (.stn-chart-legend-pill)
16
+ ========================================================================== */
17
+ .stn-chart-legend-pill {
18
+ display: inline-flex;
19
+ padding: var(--stn-chart-legend-padding-y) var(--stn-chart-legend-padding-x);
20
+ align-items: center;
21
+ gap: var(--stn-chart-legend-gap);
22
+ border-radius: var(--stn-radius-circle);
23
+ border: var(--stn-chart-border-width) solid var(--stn-chart-legend-pill-border);
24
+ background: var(--stn-chart-legend-pill-bg);
25
+ margin: var(--stn-chart-legend-margin-top) auto 0;
26
+ }
27
+
28
+ .stn-chart-legend-pill__item {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: var(--stn-chart-legend-item-gap);
32
+ }
33
+
34
+ .stn-chart-legend-pill__bar {
35
+ width: var(--stn-chart-legend-bar-width);
36
+ height: var(--stn-chart-legend-bar-height);
37
+ border-radius: var(--stn-radius-4);
38
+ }
39
+
40
+ .stn-chart-legend-pill__label {
41
+ font-family: var(--stn-font-body);
42
+ font-size: var(--stn-font-size-12);
43
+ font-weight: var(--stn-font-weight-regular);
44
+ color: var(--stn-chart-legend-text);
45
+ white-space: nowrap;
46
+ }
47
+
48
+ /* ==========================================================================
49
+ 2. Interactive Hover Tooltip (.stn-chart-tooltip)
50
+ ========================================================================== */
51
+ .stn-chart-tooltip {
52
+ position: absolute;
53
+ z-index: 30;
54
+ pointer-events: none;
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: var(--stn-chart-tooltip-gap);
58
+ padding: var(--stn-chart-tooltip-padding-y) var(--stn-chart-tooltip-padding-x);
59
+ background: var(--stn-chart-tooltip-bg);
60
+ border: var(--stn-chart-border-width) solid var(--stn-chart-tooltip-border);
61
+ border-radius: var(--stn-radius-6);
62
+ box-shadow: var(--stn-shadow-3);
63
+ font-family: var(--stn-font-body);
64
+ font-size: var(--stn-font-size-11);
65
+ line-height: var(--stn-line-height-reading-3);
66
+ color: var(--stn-text-primary);
67
+ white-space: nowrap;
68
+ transform: translate(-50%, -100%);
69
+ margin-top: calc(-1 * var(--stn-chart-tooltip-offset-y));
70
+ transition: opacity 0.15s ease, transform 0.15s ease;
71
+ }
72
+
73
+ [data-mode='light'] .stn-chart-tooltip {
74
+ box-shadow: var(--stn-shadow-2);
75
+ }
76
+
77
+ .stn-chart-tooltip__header {
78
+ font-size: var(--stn-font-size-10);
79
+ font-weight: var(--stn-font-weight-semibold);
80
+ color: var(--stn-chart-tooltip-header-color);
81
+ border-bottom: var(--stn-chart-border-width) solid var(--stn-chart-tooltip-divider);
82
+ padding-bottom: var(--stn-chart-tooltip-gap);
83
+ margin-bottom: var(--stn-chart-col-padding-x);
84
+ }
85
+
86
+ .stn-chart-tooltip__row {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: var(--stn-chart-tooltip-row-gap);
90
+ justify-content: space-between;
91
+ }
92
+
93
+ .stn-chart-tooltip__group {
94
+ display: flex;
95
+ align-items: center;
96
+ gap: var(--stn-chart-tooltip-group-gap);
97
+ }
98
+
99
+ .stn-chart-tooltip__dot {
100
+ width: var(--stn-chart-tooltip-dot-size);
101
+ height: var(--stn-chart-tooltip-dot-size);
102
+ border-radius: var(--stn-radius-circle);
103
+ flex-shrink: 0;
104
+ }
105
+
106
+ .stn-chart-tooltip__bar-mark {
107
+ width: var(--stn-chart-tooltip-bar-width);
108
+ height: var(--stn-chart-tooltip-bar-height);
109
+ border-radius: var(--stn-radius-2);
110
+ flex-shrink: 0;
111
+ }
112
+
113
+ .stn-chart-tooltip__label {
114
+ font-family: var(--stn-font-body);
115
+ font-size: var(--stn-font-size-10);
116
+ color: var(--stn-chart-bar-label);
117
+ font-weight: var(--stn-font-weight-regular);
118
+ }
119
+
120
+ .stn-chart-tooltip__value {
121
+ font-family: var(--stn-font-body);
122
+ font-size: var(--stn-font-size-11);
123
+ font-weight: var(--stn-font-weight-semibold);
124
+ color: var(--stn-text-primary);
125
+ margin-left: var(--stn-chart-tooltip-val-margin-left);
126
+ font-variant-numeric: tabular-nums;
127
+ }
128
+
129
+ /* Tooltip Disable Modifiers */
130
+ .stn-chart--no-tooltip .stn-chart-tooltip,
131
+ .hide-tooltip .stn-chart-tooltip {
132
+ display: none;
133
+ }
134
+
135
+ /* Tooltip Smart Boundary Alignment */
136
+ .stn-chart-tooltip--flip-x {
137
+ transform: translate(-100%, -100%);
138
+ }
139
+
140
+ .stn-chart-tooltip--align-left {
141
+ transform: translate(0%, -100%);
142
+ }
143
+
144
+ /* ==========================================================================
145
+ 3. Chart State Overlays: Empty State & Loading Skeleton
146
+ ========================================================================== */
147
+ .stn-chart-empty {
148
+ display: flex;
149
+ flex-direction: column;
150
+ align-items: center;
151
+ justify-content: center;
152
+ width: 100%;
153
+ height: 100%;
154
+ min-height: var(--stn-size-120);
155
+ gap: var(--stn-space-8);
156
+ color: var(--stn-text-muted);
157
+ font-family: var(--stn-font-body);
158
+ font-size: var(--stn-font-size-12);
159
+ text-align: center;
160
+ pointer-events: none;
161
+ user-select: none;
162
+ }
163
+
164
+ .stn-chart-empty__icon {
165
+ width: var(--stn-size-24);
166
+ height: var(--stn-size-24);
167
+ opacity: 0.45;
168
+ }
169
+
170
+ .stn-chart-skeleton {
171
+ width: 100%;
172
+ height: 100%;
173
+ min-height: var(--stn-size-120);
174
+ display: flex;
175
+ flex-direction: column;
176
+ justify-content: flex-end;
177
+ gap: var(--stn-space-8);
178
+ padding: var(--stn-space-12);
179
+ box-sizing: border-box;
180
+ }
181
+
182
+ .stn-chart-skeleton__bars {
183
+ display: flex;
184
+ align-items: flex-end;
185
+ justify-content: space-between;
186
+ width: 100%;
187
+ height: 70%;
188
+ gap: var(--stn-space-8);
189
+ }
190
+
191
+ .stn-chart-skeleton__bar {
192
+ flex: 1;
193
+ border-radius: var(--stn-radius-2) var(--stn-radius-2) 0 0;
194
+ background: var(--stn-elevation-surface-2);
195
+ animation: stn-chart-skeleton-pulse 1.5s ease-in-out infinite;
196
+ }
197
+
198
+ .stn-chart-skeleton__axis {
199
+ height: var(--stn-size-1);
200
+ background: var(--stn-border);
201
+ width: 100%;
202
+ }
203
+
204
+ @keyframes stn-chart-skeleton-pulse {
205
+ 0%, 100% {
206
+ opacity: 0.35;
207
+ }
208
+ 50% {
209
+ opacity: 0.75;
210
+ }
211
+ }
212
+
213
+ /* ==========================================================================
214
+ 4. Chart Status / Severity Semantic Modifier Utilities
215
+ ========================================================================== */
216
+ .stn-chart-status--critical {
217
+ --stn-chart-item-color: var(--stn-chart-status-critical);
218
+ }
219
+
220
+ .stn-chart-status--major {
221
+ --stn-chart-item-color: var(--stn-chart-status-major);
222
+ }
223
+
224
+ .stn-chart-status--minor {
225
+ --stn-chart-item-color: var(--stn-chart-status-minor);
226
+ }
227
+
228
+ .stn-chart-status--warning {
229
+ --stn-chart-item-color: var(--stn-chart-status-warning);
230
+ }
231
+
232
+ .stn-chart-status--success {
233
+ --stn-chart-item-color: var(--stn-chart-status-success);
234
+ }
235
+
236
+ .stn-chart-status--info {
237
+ --stn-chart-item-color: var(--stn-chart-status-info);
238
+ }
239
+
240
+ .stn-chart-status--neutral {
241
+ --stn-chart-item-color: var(--stn-chart-status-neutral);
242
+ }
243
+
@@ -0,0 +1,20 @@
1
+ @charset "utf-8";
2
+
3
+ /**
4
+ * STN Design System — Chart Components (Master Entry)
5
+ * Pure CSS & SVG charts without external library dependencies.
6
+ * 100% strictly tokenized via STN semantic design tokens (--stn-chart-*).
7
+ *
8
+ * Modular architecture:
9
+ * - stn-chart-common.css : Variables, tooltips, shared legend
10
+ * - stn-bar-chart.css : Vertical and horizontal bar charts
11
+ * - stn-line-chart.css : Line and area charts with dots
12
+ * - stn-pie-chart.css : Donut, gauge, and pie charts
13
+ * - stn-combo-chart.css : Bar + line composite charts
14
+ */
15
+
16
+ @import './stn-chart-common.css';
17
+ @import './stn-bar-chart.css';
18
+ @import './stn-line-chart.css';
19
+ @import './stn-pie-chart.css';
20
+ @import './stn-combo-chart.css';