@sentropic/design-system-vue 0.36.45 → 0.36.46

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.
package/dist/styles.css CHANGED
@@ -417,6 +417,33 @@
417
417
  text-transform: var(--st-component-badge-textTransform, none);
418
418
  }
419
419
 
420
+ /* Shape variants (additive). `pill` is the UNTOUCHED base `.st-badge` above — no
421
+ `--pill` rule exists, so a `shape="pill"` (or unset) badge renders
422
+ byte-identically. `--circle` overlays an equal-sided round bubble ON TOP of
423
+ the base rules: equal min-width/min-height, equal inline/block padding,
424
+ centered, tabular-nums for stable digit width. 3+ digit content degrades to a
425
+ rounded-rect (the box grows past the diameter, never clips), so large counts
426
+ stay legible. Every leaf falls back to a base literal so a theme that emits no
427
+ `--st-component-badge-circle-*` renders the variant identically. */
428
+ .st-badge--circle {
429
+ border-radius: var(--st-component-badge-circle-radius, 50%);
430
+ box-sizing: border-box;
431
+ font-variant-numeric: tabular-nums;
432
+ justify-content: center;
433
+ min-width: var(--st-component-badge-circle-size, 1.25rem);
434
+ min-height: var(--st-component-badge-circle-size, 1.25rem);
435
+ /* Equal inline/block padding keeps 1–2 digits round; the inline padding lets
436
+ 3+ digits grow the box into a rounded-rect instead of clipping. */
437
+ padding: var(--st-component-badge-circle-padding, 0.125rem);
438
+ text-align: center;
439
+ }
440
+
441
+ /* Density variant (additive). `md` is the UNTOUCHED base font-size; `--sm`
442
+ reuses the Tag `sm` scale for cross-house consistency. */
443
+ .st-badge--sm {
444
+ font-size: var(--st-component-badge-sm-fontSize, 0.6875rem);
445
+ }
446
+
420
447
  .st-badge--neutral {
421
448
  background: var(--st-semantic-surface-subtle);
422
449
  color: var(--st-semantic-text-secondary);
@@ -445,31 +472,6 @@
445
472
  color: var(--st-component-badge-infoText, var(--st-semantic-feedback-info));
446
473
  }
447
474
 
448
- /* Shape variants (additive). `pill` is the UNTOUCHED base `.st-badge` above —
449
- no `--pill` rule exists, so a `shape="pill"` (or unset) badge renders
450
- byte-identically. `--circle` overlays an equal-sided round bubble: equal
451
- min-width/min-height, equal inline/block padding, centered, tabular-nums for
452
- stable digit width. 3+ digit content degrades to a rounded-rect (the box
453
- grows past the diameter, never clips). Every leaf falls back to a base
454
- literal so a theme that emits no `--st-component-badge-circle-*` renders the
455
- variant identically. */
456
- .st-badge--circle {
457
- border-radius: var(--st-component-badge-circle-radius, 50%);
458
- box-sizing: border-box;
459
- font-variant-numeric: tabular-nums;
460
- justify-content: center;
461
- min-width: var(--st-component-badge-circle-size, 1.25rem);
462
- min-height: var(--st-component-badge-circle-size, 1.25rem);
463
- padding: var(--st-component-badge-circle-padding, 0.125rem);
464
- text-align: center;
465
- }
466
-
467
- /* Density variant (additive). `md` is the UNTOUCHED base font-size; `--sm`
468
- reuses the Tag `sm` scale for cross-house consistency. */
469
- .st-badge--sm {
470
- font-size: var(--st-component-badge-sm-fontSize, 0.6875rem);
471
- }
472
-
473
475
  .st-barChart {
474
476
  color: var(--st-semantic-text-secondary);
475
477
  display: block;
@@ -2778,15 +2780,27 @@
2778
2780
 
2779
2781
  .st-forceGraph__edge--weak {
2780
2782
  stroke: var(--st-semantic-border-subtle);
2781
- stroke-dasharray: 3 3;
2782
2783
  opacity: 0.5;
2783
2784
  }
2784
2785
 
2786
+ /* Emphasised edge (e.g. reconciliation match): thicker, fully opaque, on top. */
2787
+ .st-forceGraph__edge--emphasis {
2788
+ stroke: var(--st-semantic-border-interactive, var(--st-semantic-border-strong));
2789
+ opacity: 0.95;
2790
+ }
2791
+
2792
+ /* Hover: match the node hover (fully visible) so the edge is never paler
2793
+ than the two nodes it connects. */
2785
2794
  .st-forceGraph__edge--hovered {
2786
- opacity: 0.9;
2795
+ opacity: 1;
2787
2796
  stroke-width: 2;
2788
2797
  }
2789
2798
 
2799
+ /* Dimmed by an active selection (edge touches no selected/focused node). */
2800
+ .st-forceGraph__edge--dim {
2801
+ opacity: 0.12;
2802
+ }
2803
+
2790
2804
  /* Invisible wide hit target for edge hover */
2791
2805
  .st-forceGraph__edgeHit {
2792
2806
  stroke: transparent;
@@ -2970,8 +2984,7 @@
2970
2984
  .st-forceGraph__resetBtn { transition: none; }
2971
2985
  }
2972
2986
 
2973
- /* GraphLegend standalone component */
2974
- .st-graphLegend {
2987
+ .st-graphLegend {
2975
2988
  background: var(--st-semantic-surface-overlay, rgba(0,0,0,0.45));
2976
2989
  border-radius: var(--st-radius-sm, 0.25rem);
2977
2990
  color: var(--st-semantic-text-inverse);
@@ -7573,7 +7586,14 @@
7573
7586
  gap: 0.5rem;
7574
7587
  }
7575
7588
 
7576
- /* Layout system — Flex / Stack / Inline / Container / Row / Col / Hidden / Divider */
7589
+
7590
+ /* ==========================================================================
7591
+ Layout system (Flex / Stack / Inline / Container / Row / Col / Hidden /
7592
+ Divider) — ported from components-svelte scoped styles. Dynamic values
7593
+ (gap / align / justify / span / offset) are applied inline via style props.
7594
+ ========================================================================== */
7595
+
7596
+ /* Flex / Stack / Inline */
7577
7597
  .st-flex {
7578
7598
  box-sizing: border-box;
7579
7599
  min-width: 0;
@@ -7763,7 +7783,6 @@
7763
7783
  white-space: nowrap;
7764
7784
  }
7765
7785
 
7766
-
7767
7786
  /* ===========================================================================
7768
7787
  Avatar — ported from components-svelte/src/lib/Avatar.svelte
7769
7788
  =========================================================================== */
@@ -9069,6 +9088,8 @@
9069
9088
  .st-selectableRow__content--stacked {
9070
9089
  display: flex;
9071
9090
  flex-direction: column;
9091
+ /* The column stack drops the inline ellipsis/nowrap (each line truncates on
9092
+ its own child); keep min-width:0 so the column can shrink and ellipsize. */
9072
9093
  overflow: visible;
9073
9094
  white-space: normal;
9074
9095
  gap: var(--st-component-selectableRow-captionGap, 0.125rem);
@@ -9105,7 +9126,7 @@
9105
9126
  }
9106
9127
 
9107
9128
  /* ---------------------------------------------------------------------------
9108
- KpiCard — single metric card with optional delta + sparkline.
9129
+ KpiCard — indicateur chiffré avec delta, tendance et sparkline optionnels.
9109
9130
  --------------------------------------------------------------------------- */
9110
9131
  .st-kpiCard {
9111
9132
  background: var(--st-component-card-background, var(--st-semantic-surface-raised));
@@ -9131,28 +9152,17 @@
9131
9152
  padding: var(--st-spacing-6, 1.5rem);
9132
9153
  }
9133
9154
 
9134
- /* Accent catégoriel : pastille inline discrète devant l'étiquette.
9135
- (Pas de liseré gauche sur un conteneur arrondi — anti-pattern proscrit.) */
9136
9155
  .st-kpiCard__label {
9137
9156
  align-items: center;
9138
9157
  color: var(--st-semantic-text-secondary);
9139
9158
  display: flex;
9140
9159
  font-size: 0.8125rem;
9141
9160
  font-weight: 500;
9142
- gap: var(--st-spacing-2, 0.5rem);
9161
+ gap: var(--st-spacing-1, 0.25rem);
9143
9162
  line-height: 1.25;
9144
9163
  margin: 0;
9145
9164
  }
9146
9165
 
9147
- .st-kpiCard__swatch {
9148
- background: var(--st-kpiCard-accent, var(--st-semantic-data-category1));
9149
- border-radius: var(--st-radius-full, 9999px);
9150
- display: inline-block;
9151
- flex: 0 0 auto;
9152
- height: 0.5rem;
9153
- width: 0.5rem;
9154
- }
9155
-
9156
9166
  .st-kpiCard--lg .st-kpiCard__label {
9157
9167
  font-size: 0.875rem;
9158
9168
  }
@@ -9235,17 +9245,44 @@
9235
9245
  color: var(--st-semantic-text-secondary);
9236
9246
  }
9237
9247
 
9238
- .st-kpiCard--category1 { --st-kpiCard-accent: var(--st-semantic-data-category1); }
9239
- .st-kpiCard--category2 { --st-kpiCard-accent: var(--st-semantic-data-category2); }
9240
- .st-kpiCard--category3 { --st-kpiCard-accent: var(--st-semantic-data-category3); }
9241
- .st-kpiCard--category4 { --st-kpiCard-accent: var(--st-semantic-data-category4); }
9242
- .st-kpiCard--category5 { --st-kpiCard-accent: var(--st-semantic-data-category5); }
9243
- .st-kpiCard--category6 { --st-kpiCard-accent: var(--st-semantic-data-category6); }
9244
- .st-kpiCard--category7 { --st-kpiCard-accent: var(--st-semantic-data-category7); }
9245
- .st-kpiCard--category8 { --st-kpiCard-accent: var(--st-semantic-data-category8); }
9248
+ /* Accent catégoriel discret : pastille inline près de l'étiquette
9249
+ (remplace l'ancien liseré gauche, anti-pattern sur conteneur arrondi). */
9250
+ .st-kpiCard__swatch {
9251
+ background: var(--st-semantic-border-subtle);
9252
+ border-radius: 50%;
9253
+ display: inline-block;
9254
+ flex: 0 0 auto;
9255
+ height: 0.5rem;
9256
+ width: 0.5rem;
9257
+ }
9258
+
9259
+ .st-kpiCard--category1 .st-kpiCard__swatch {
9260
+ background: var(--st-semantic-data-category1);
9261
+ }
9262
+ .st-kpiCard--category2 .st-kpiCard__swatch {
9263
+ background: var(--st-semantic-data-category2);
9264
+ }
9265
+ .st-kpiCard--category3 .st-kpiCard__swatch {
9266
+ background: var(--st-semantic-data-category3);
9267
+ }
9268
+ .st-kpiCard--category4 .st-kpiCard__swatch {
9269
+ background: var(--st-semantic-data-category4);
9270
+ }
9271
+ .st-kpiCard--category5 .st-kpiCard__swatch {
9272
+ background: var(--st-semantic-data-category5);
9273
+ }
9274
+ .st-kpiCard--category6 .st-kpiCard__swatch {
9275
+ background: var(--st-semantic-data-category6);
9276
+ }
9277
+ .st-kpiCard--category7 .st-kpiCard__swatch {
9278
+ background: var(--st-semantic-data-category7);
9279
+ }
9280
+ .st-kpiCard--category8 .st-kpiCard__swatch {
9281
+ background: var(--st-semantic-data-category8);
9282
+ }
9246
9283
 
9247
9284
  /* ---------------------------------------------------------------------------
9248
- ComboChart — grouped bars on a left axis + lines on a right axis.
9285
+ ComboChart — barres groupées (axe gauche) + lignes (axe droit).
9249
9286
  --------------------------------------------------------------------------- */
9250
9287
  .st-comboChart {
9251
9288
  color: var(--st-semantic-text-secondary);
@@ -9495,7 +9532,7 @@
9495
9532
  }
9496
9533
 
9497
9534
  /* ---------------------------------------------------------------------------
9498
- GaugeChart — radial meter with optional threshold bands and a needle.
9535
+ GaugeChart — jauge en arc avec bandes de seuils, aiguille et valeur centrale.
9499
9536
  --------------------------------------------------------------------------- */
9500
9537
  .st-gaugeChart {
9501
9538
  color: var(--st-semantic-text-secondary);
@@ -9548,12 +9585,14 @@
9548
9585
  font-weight: 500;
9549
9586
  }
9550
9587
 
9551
- .st-gaugeChart__band--neutral { stroke: var(--st-semantic-surface-subtle, var(--st-semantic-border-subtle)); }
9588
+ /* Tons sémantiques de feedback */
9589
+ .st-gaugeChart__band--neutral { stroke: var(--st-semantic-border-strong, var(--st-semantic-surface-subtle)); }
9552
9590
  .st-gaugeChart__band--info { stroke: var(--st-semantic-feedback-info, var(--st-semantic-action-primary)); }
9553
9591
  .st-gaugeChart__band--success { stroke: var(--st-semantic-feedback-success); }
9554
9592
  .st-gaugeChart__band--warning { stroke: var(--st-semantic-feedback-warning); }
9555
9593
  .st-gaugeChart__band--error { stroke: var(--st-semantic-feedback-error); }
9556
9594
 
9595
+ /* Tons catégoriels data */
9557
9596
  .st-gaugeChart__band--category1 { stroke: var(--st-semantic-data-category1); }
9558
9597
  .st-gaugeChart__band--category2 { stroke: var(--st-semantic-data-category2); }
9559
9598
  .st-gaugeChart__band--category3 { stroke: var(--st-semantic-data-category3); }
@@ -10221,7 +10260,7 @@
10221
10260
  }
10222
10261
 
10223
10262
  /* ---------------------------------------------------------------------------
10224
- FunnelChart — decreasing trapezoid stages, vertical or horizontal.
10263
+ FunnelChart — entonnoir de trapèzes décroissants (vertical/horizontal).
10225
10264
  --------------------------------------------------------------------------- */
10226
10265
  .st-funnelChart {
10227
10266
  color: var(--st-semantic-text-secondary);
@@ -10257,15 +10296,15 @@
10257
10296
  .st-funnelChart__segment--category7 { fill: var(--st-semantic-data-category7); }
10258
10297
  .st-funnelChart__segment--category8 { fill: var(--st-semantic-data-category8); }
10259
10298
 
10260
- /* Couleur de texte fixée inline par le composant selon la luminance du fill
10261
- (contraste WCAG garanti) ; ces règles ne portent que la typo. */
10262
10299
  .st-funnelChart__label {
10300
+ fill: var(--st-component-funnelChart-labelColor, var(--st-semantic-text-inverse));
10263
10301
  font-size: 0.75rem;
10264
10302
  font-weight: 600;
10265
10303
  pointer-events: none;
10266
10304
  }
10267
10305
 
10268
10306
  .st-funnelChart__value {
10307
+ fill: var(--st-component-funnelChart-valueColor, var(--st-semantic-text-inverse));
10269
10308
  font-size: 0.6875rem;
10270
10309
  pointer-events: none;
10271
10310
  }
@@ -10329,7 +10368,7 @@
10329
10368
  }
10330
10369
 
10331
10370
  /* ---------------------------------------------------------------------------
10332
- WaterfallChart — floating bars tracing a running cumulative total.
10371
+ WaterfallChart — barres flottantes cumulatives (hausse/baisse/total).
10333
10372
  --------------------------------------------------------------------------- */
10334
10373
  .st-waterfallChart {
10335
10374
  color: var(--st-semantic-text-secondary);
@@ -10463,7 +10502,7 @@
10463
10502
  }
10464
10503
 
10465
10504
  /* ---------------------------------------------------------------------------
10466
- TreemapChart — squarified hierarchical rectangles (1 or 2 levels).
10505
+ TreemapChart — pavage squarified hiérarchique (1 ou 2 niveaux).
10467
10506
  --------------------------------------------------------------------------- */
10468
10507
  .st-treemapChart {
10469
10508
  color: var(--st-semantic-text-secondary);
@@ -10505,15 +10544,15 @@
10505
10544
  .st-treemapChart__rect--category7 { fill: var(--st-semantic-data-category7); }
10506
10545
  .st-treemapChart__rect--category8 { fill: var(--st-semantic-data-category8); }
10507
10546
 
10508
- /* Couleur de texte fixée inline par le composant selon la luminance du fill
10509
- (contraste WCAG garanti) ; ces règles ne portent que la typo. */
10510
10547
  .st-treemapChart__label {
10548
+ fill: var(--st-component-treemapChart-labelColor, #fff);
10511
10549
  font-size: 0.75rem;
10512
10550
  font-weight: 600;
10513
10551
  pointer-events: none;
10514
10552
  }
10515
10553
 
10516
10554
  .st-treemapChart__value {
10555
+ fill: var(--st-component-treemapChart-valueColor, #fff);
10517
10556
  font-size: 0.6875rem;
10518
10557
  opacity: 0.85;
10519
10558
  pointer-events: none;
@@ -10571,6 +10610,8 @@
10571
10610
  .st-treemapChart__legendSwatch--category7 { background: var(--st-semantic-data-category7); }
10572
10611
  .st-treemapChart__legendSwatch--category8 { background: var(--st-semantic-data-category8); }
10573
10612
 
10613
+ /* ── Lot 2 : Heatmap / Sankey / BoxPlot / Histogram / Radar / Sunburst ── */
10614
+
10574
10615
  .st-heatmapChart,
10575
10616
  .st-histogramChart,
10576
10617
  .st-boxPlotChart,
@@ -10580,71 +10621,171 @@
10580
10621
  color: var(--st-semantic-text-secondary);
10581
10622
  display: block;
10582
10623
  font-family: inherit;
10624
+ max-width: 100%;
10583
10625
  position: relative;
10584
10626
  width: 100%;
10585
10627
  }
10586
10628
 
10587
10629
  .st-heatmapChart svg,
10588
- .st-histogramChart svg,
10589
- .st-boxPlotChart svg,
10590
- .st-radarChart svg,
10591
- .st-sankeyChart svg,
10592
- .st-sunburstChart svg,
10593
10630
  .st-heatmapChart__visual,
10631
+ .st-histogramChart svg,
10594
10632
  .st-histogramChart__visual,
10633
+ .st-boxPlotChart svg,
10595
10634
  .st-boxPlotChart__visual,
10635
+ .st-radarChart svg,
10596
10636
  .st-radarChart__visual,
10637
+ .st-sankeyChart svg,
10597
10638
  .st-sankeyChart__visual,
10639
+ .st-sunburstChart svg,
10598
10640
  .st-sunburstChart__visual {
10599
10641
  display: block;
10600
10642
  overflow: visible;
10601
10643
  }
10602
10644
 
10645
+ /* ── Axis labels ── */
10603
10646
  .st-heatmapChart__axisLabel,
10604
- .st-histogramChart__tickLabel,
10605
- .st-histogramChart__categoryLabel,
10606
- .st-boxPlotChart__tickLabel,
10607
- .st-boxPlotChart__categoryLabel,
10647
+ .st-histogramChart__label,
10648
+ .st-boxPlotChart__label,
10608
10649
  .st-radarChart__axisLabel,
10609
- .st-radarChart__maxLabel,
10610
10650
  .st-sankeyChart__nodeLabel {
10611
10651
  fill: var(--st-semantic-text-secondary);
10612
- font-size: 0.6875rem;
10652
+ font-size: 0.75rem;
10613
10653
  }
10614
10654
 
10615
- .st-histogramChart__grid,
10616
- .st-boxPlotChart__grid,
10617
- .st-radarChart__grid {
10655
+ /* ── Axes / grids ── */
10656
+ .st-histogramChart__axis,
10657
+ .st-boxPlotChart__axis {
10618
10658
  stroke: var(--st-semantic-border-subtle);
10619
- stroke-dasharray: 2 3;
10620
10659
  stroke-width: 1;
10621
- opacity: 0.7;
10622
10660
  }
10623
10661
 
10624
- .st-histogramChart__axis,
10625
- .st-boxPlotChart__axis,
10662
+ .st-radarChart__ring,
10626
10663
  .st-radarChart__axis {
10627
10664
  stroke: var(--st-semantic-border-subtle);
10628
10665
  stroke-width: 1;
10629
10666
  }
10630
10667
 
10631
- .st-heatmapChart__cell,
10632
- .st-histogramChart__bar,
10633
- .st-boxPlotChart__box,
10634
- .st-sankeyChart__node,
10668
+ .st-radarChart__ring {
10669
+ fill: none;
10670
+ }
10671
+
10672
+ /* ── Heatmap ── */
10673
+ .st-heatmapChart__plot {
10674
+ fill: none;
10675
+ stroke: var(--st-semantic-border-subtle);
10676
+ stroke-width: 1;
10677
+ }
10678
+
10679
+ .st-heatmapChart__cell {
10680
+ cursor: pointer;
10681
+ stroke: var(--st-semantic-surface-default, Canvas);
10682
+ stroke-width: 1;
10683
+ transition: opacity 120ms ease;
10684
+ }
10685
+
10686
+ .st-heatmapChart__cell--dim {
10687
+ opacity: 0.45;
10688
+ }
10689
+
10690
+ /* ── Histogram ── */
10691
+ .st-histogramChart__bar {
10692
+ cursor: pointer;
10693
+ transition: opacity 120ms ease;
10694
+ }
10695
+
10696
+ .st-histogramChart__bar--dim {
10697
+ opacity: 0.45;
10698
+ }
10699
+
10700
+ /* ── BoxPlot ── */
10701
+ .st-boxPlotChart__axis,
10702
+ .st-boxPlotChart__whisker,
10703
+ .st-boxPlotChart__whiskerCap {
10704
+ stroke: var(--st-semantic-border-subtle);
10705
+ stroke-width: 1;
10706
+ }
10707
+
10708
+ .st-boxPlotChart__median {
10709
+ stroke: var(--st-semantic-text-primary);
10710
+ stroke-width: 2;
10711
+ }
10712
+
10713
+ .st-boxPlotChart__box {
10714
+ cursor: pointer;
10715
+ fill-opacity: 0.72;
10716
+ stroke: var(--st-semantic-surface-default, Canvas);
10717
+ stroke-width: 1;
10718
+ transition: opacity 120ms ease;
10719
+ }
10720
+
10721
+ .st-boxPlotChart__box--dim {
10722
+ opacity: 0.45;
10723
+ }
10724
+
10725
+ .st-boxPlotChart__outlier {
10726
+ fill: var(--st-semantic-surface-default, Canvas);
10727
+ stroke: var(--st-semantic-text-secondary);
10728
+ stroke-width: 1.5;
10729
+ }
10730
+
10731
+ /* ── Radar ── */
10732
+ .st-radarChart__polygon {
10733
+ cursor: pointer;
10734
+ fill-opacity: 0.16;
10735
+ stroke-width: 2;
10736
+ transition: opacity 120ms ease;
10737
+ }
10738
+
10739
+ .st-radarChart__polygon--dim {
10740
+ opacity: 0.35;
10741
+ }
10742
+
10743
+ .st-radarChart__point {
10744
+ stroke: var(--st-semantic-surface-default, Canvas);
10745
+ stroke-width: 1;
10746
+ }
10747
+
10748
+ /* ── Sankey ── */
10749
+ .st-sankeyChart__node {
10750
+ stroke: var(--st-semantic-surface-default, Canvas);
10751
+ stroke-width: 1;
10752
+ }
10753
+
10754
+ .st-sankeyChart__link {
10755
+ cursor: pointer;
10756
+ fill: none;
10757
+ opacity: 0.38;
10758
+ stroke-linecap: round;
10759
+ transition: opacity 120ms ease;
10760
+ }
10761
+
10762
+ .st-sankeyChart__link:hover {
10763
+ opacity: 0.62;
10764
+ }
10765
+
10766
+ .st-sankeyChart__link--dim {
10767
+ opacity: 0.16;
10768
+ }
10769
+
10770
+ /* ── Sunburst ── */
10635
10771
  .st-sunburstChart__arc {
10636
10772
  cursor: pointer;
10637
- transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
10773
+ stroke: var(--st-semantic-surface-default, Canvas);
10774
+ stroke-width: 1;
10775
+ transition: opacity 120ms ease;
10638
10776
  }
10639
10777
 
10640
- .st-heatmapChart__cell:hover,
10641
- .st-histogramChart__bar:hover,
10642
- .st-boxPlotChart__box:hover,
10643
- .st-sankeyChart__node:hover,
10644
- .st-sunburstChart__arc:hover {
10645
- opacity: 0.82;
10778
+ .st-sunburstChart__arc--dim {
10779
+ opacity: 0.4;
10780
+ }
10781
+
10782
+ .st-sunburstChart__label {
10783
+ font-size: 0.68rem;
10784
+ font-weight: 650;
10785
+ pointer-events: none;
10646
10786
  }
10647
10787
 
10788
+ /* ── Category fills — cells / bars / boxes / nodes / arcs ── */
10648
10789
  .st-heatmapChart__cell--category1,
10649
10790
  .st-histogramChart__bar--category1,
10650
10791
  .st-boxPlotChart__box--category1,
@@ -10686,76 +10827,133 @@
10686
10827
  .st-sankeyChart__node--category8,
10687
10828
  .st-sunburstChart__arc--category8 { fill: var(--st-semantic-data-category8); }
10688
10829
 
10689
- .st-boxPlotChart__box {
10690
- fill-opacity: 0.22;
10691
- stroke: currentColor;
10692
- stroke-width: 1.5;
10693
- }
10830
+ /* ── Radar polygon + point (fill + stroke) ── */
10831
+ .st-radarChart__polygon--category1,
10832
+ .st-radarChart__point--category1,
10833
+ .st-radarChart__legendSwatch--category1 { fill: var(--st-semantic-data-category1); stroke: var(--st-semantic-data-category1); background: var(--st-semantic-data-category1); }
10834
+ .st-radarChart__polygon--category2,
10835
+ .st-radarChart__point--category2,
10836
+ .st-radarChart__legendSwatch--category2 { fill: var(--st-semantic-data-category2); stroke: var(--st-semantic-data-category2); background: var(--st-semantic-data-category2); }
10837
+ .st-radarChart__polygon--category3,
10838
+ .st-radarChart__point--category3,
10839
+ .st-radarChart__legendSwatch--category3 { fill: var(--st-semantic-data-category3); stroke: var(--st-semantic-data-category3); background: var(--st-semantic-data-category3); }
10840
+ .st-radarChart__polygon--category4,
10841
+ .st-radarChart__point--category4,
10842
+ .st-radarChart__legendSwatch--category4 { fill: var(--st-semantic-data-category4); stroke: var(--st-semantic-data-category4); background: var(--st-semantic-data-category4); }
10843
+ .st-radarChart__polygon--category5,
10844
+ .st-radarChart__point--category5,
10845
+ .st-radarChart__legendSwatch--category5 { fill: var(--st-semantic-data-category5); stroke: var(--st-semantic-data-category5); background: var(--st-semantic-data-category5); }
10846
+ .st-radarChart__polygon--category6,
10847
+ .st-radarChart__point--category6,
10848
+ .st-radarChart__legendSwatch--category6 { fill: var(--st-semantic-data-category6); stroke: var(--st-semantic-data-category6); background: var(--st-semantic-data-category6); }
10849
+ .st-radarChart__polygon--category7,
10850
+ .st-radarChart__point--category7,
10851
+ .st-radarChart__legendSwatch--category7 { fill: var(--st-semantic-data-category7); stroke: var(--st-semantic-data-category7); background: var(--st-semantic-data-category7); }
10852
+ .st-radarChart__polygon--category8,
10853
+ .st-radarChart__point--category8,
10854
+ .st-radarChart__legendSwatch--category8 { fill: var(--st-semantic-data-category8); stroke: var(--st-semantic-data-category8); background: var(--st-semantic-data-category8); }
10855
+
10856
+ /* ── Sankey links (stroke seulement) ── */
10857
+ .st-sankeyChart__link--category1 { stroke: var(--st-semantic-data-category1); }
10858
+ .st-sankeyChart__link--category2 { stroke: var(--st-semantic-data-category2); }
10859
+ .st-sankeyChart__link--category3 { stroke: var(--st-semantic-data-category3); }
10860
+ .st-sankeyChart__link--category4 { stroke: var(--st-semantic-data-category4); }
10861
+ .st-sankeyChart__link--category5 { stroke: var(--st-semantic-data-category5); }
10862
+ .st-sankeyChart__link--category6 { stroke: var(--st-semantic-data-category6); }
10863
+ .st-sankeyChart__link--category7 { stroke: var(--st-semantic-data-category7); }
10864
+ .st-sankeyChart__link--category8 { stroke: var(--st-semantic-data-category8); }
10694
10865
 
10695
- .st-boxPlotChart__whisker,
10696
- .st-boxPlotChart__whiskerCap,
10697
- .st-boxPlotChart__median {
10698
- stroke: var(--st-semantic-text-secondary);
10699
- stroke-width: 1.5;
10866
+ /* ── Heatmap legend (gradient ramp) ── */
10867
+ .st-heatmapChart__legend {
10868
+ align-items: center;
10869
+ display: flex;
10870
+ gap: var(--st-spacing-2, 0.5rem);
10871
+ margin-top: var(--st-spacing-2, 0.5rem);
10700
10872
  }
10701
10873
 
10702
- .st-boxPlotChart__median {
10703
- stroke: var(--st-semantic-text-primary);
10704
- stroke-width: 2;
10874
+ .st-heatmapChart__legendRamp {
10875
+ display: inline-grid;
10876
+ grid-template-columns: repeat(8, minmax(0.75rem, 1fr));
10877
+ min-width: 8rem;
10705
10878
  }
10706
10879
 
10707
- .st-boxPlotChart__outlier {
10708
- fill: var(--st-semantic-surface-default);
10709
- stroke: var(--st-semantic-text-secondary);
10710
- stroke-width: 1.5;
10880
+ .st-heatmapChart__legendSwatch {
10881
+ display: block;
10882
+ height: 0.5rem;
10711
10883
  }
10712
10884
 
10713
- .st-radarChart__grid {
10714
- fill: none;
10885
+ .st-heatmapChart__legendText {
10886
+ color: var(--st-semantic-text-secondary);
10887
+ font-size: 0.75rem;
10715
10888
  }
10716
10889
 
10717
- .st-radarChart__polygon {
10718
- cursor: pointer;
10719
- fill: currentColor;
10720
- fill-opacity: 0.16;
10721
- stroke: currentColor;
10722
- stroke-width: 2;
10723
- transition: fill-opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
10890
+ .st-heatmapChart__legendSwatch--category1 { background: var(--st-semantic-data-category1); }
10891
+ .st-heatmapChart__legendSwatch--category2 { background: var(--st-semantic-data-category2); }
10892
+ .st-heatmapChart__legendSwatch--category3 { background: var(--st-semantic-data-category3); }
10893
+ .st-heatmapChart__legendSwatch--category4 { background: var(--st-semantic-data-category4); }
10894
+ .st-heatmapChart__legendSwatch--category5 { background: var(--st-semantic-data-category5); }
10895
+ .st-heatmapChart__legendSwatch--category6 { background: var(--st-semantic-data-category6); }
10896
+ .st-heatmapChart__legendSwatch--category7 { background: var(--st-semantic-data-category7); }
10897
+ .st-heatmapChart__legendSwatch--category8 { background: var(--st-semantic-data-category8); }
10898
+
10899
+ /* ── Radar legend ── */
10900
+ .st-radarChart__legend {
10901
+ display: flex;
10902
+ flex-wrap: wrap;
10903
+ gap: var(--st-spacing-2, 0.5rem) var(--st-spacing-4, 1rem);
10904
+ list-style: none;
10905
+ margin: var(--st-spacing-2, 0.5rem) 0 0;
10906
+ padding: 0;
10724
10907
  }
10725
10908
 
10726
- .st-radarChart__polygon:hover {
10727
- fill-opacity: 0.24;
10909
+ .st-radarChart__legendItem {
10910
+ align-items: center;
10911
+ color: var(--st-semantic-text-secondary);
10912
+ display: inline-flex;
10913
+ font-size: 0.75rem;
10914
+ gap: var(--st-spacing-2, 0.5rem);
10728
10915
  }
10729
10916
 
10730
- .st-radarChart__polygon--category1 { color: var(--st-semantic-data-category1); }
10731
- .st-radarChart__polygon--category2 { color: var(--st-semantic-data-category2); }
10732
- .st-radarChart__polygon--category3 { color: var(--st-semantic-data-category3); }
10733
- .st-radarChart__polygon--category4 { color: var(--st-semantic-data-category4); }
10734
- .st-radarChart__polygon--category5 { color: var(--st-semantic-data-category5); }
10735
- .st-radarChart__polygon--category6 { color: var(--st-semantic-data-category6); }
10736
- .st-radarChart__polygon--category7 { color: var(--st-semantic-data-category7); }
10737
- .st-radarChart__polygon--category8 { color: var(--st-semantic-data-category8); }
10917
+ .st-radarChart__legendSwatch {
10918
+ display: inline-block;
10919
+ height: 0.625rem;
10920
+ width: 0.625rem;
10921
+ }
10738
10922
 
10739
- .st-sankeyChart__link {
10740
- opacity: 0.34;
10741
- pointer-events: stroke;
10742
- stroke-linecap: round;
10743
- transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
10923
+ /* ── Sunburst legend ── */
10924
+ .st-sunburstChart__legend {
10925
+ display: flex;
10926
+ flex-wrap: wrap;
10927
+ gap: var(--st-spacing-2, 0.5rem) var(--st-spacing-4, 1rem);
10928
+ list-style: none;
10929
+ margin: var(--st-spacing-2, 0.5rem) 0 0;
10930
+ padding: 0;
10744
10931
  }
10745
10932
 
10746
- .st-sankeyChart__link:hover {
10747
- opacity: 0.58;
10933
+ .st-sunburstChart__legendItem {
10934
+ align-items: center;
10935
+ color: var(--st-semantic-text-secondary);
10936
+ display: inline-flex;
10937
+ font-size: 0.75rem;
10938
+ gap: var(--st-spacing-2, 0.5rem);
10748
10939
  }
10749
10940
 
10750
- .st-sankeyChart__link--category1 { stroke: var(--st-semantic-data-category1); }
10751
- .st-sankeyChart__link--category2 { stroke: var(--st-semantic-data-category2); }
10752
- .st-sankeyChart__link--category3 { stroke: var(--st-semantic-data-category3); }
10753
- .st-sankeyChart__link--category4 { stroke: var(--st-semantic-data-category4); }
10754
- .st-sankeyChart__link--category5 { stroke: var(--st-semantic-data-category5); }
10755
- .st-sankeyChart__link--category6 { stroke: var(--st-semantic-data-category6); }
10756
- .st-sankeyChart__link--category7 { stroke: var(--st-semantic-data-category7); }
10757
- .st-sankeyChart__link--category8 { stroke: var(--st-semantic-data-category8); }
10941
+ .st-sunburstChart__legendSwatch {
10942
+ display: inline-block;
10943
+ height: 0.625rem;
10944
+ width: 0.625rem;
10945
+ }
10758
10946
 
10947
+ .st-sunburstChart__legendSwatch--category1 { background: var(--st-semantic-data-category1); }
10948
+ .st-sunburstChart__legendSwatch--category2 { background: var(--st-semantic-data-category2); }
10949
+ .st-sunburstChart__legendSwatch--category3 { background: var(--st-semantic-data-category3); }
10950
+ .st-sunburstChart__legendSwatch--category4 { background: var(--st-semantic-data-category4); }
10951
+ .st-sunburstChart__legendSwatch--category5 { background: var(--st-semantic-data-category5); }
10952
+ .st-sunburstChart__legendSwatch--category6 { background: var(--st-semantic-data-category6); }
10953
+ .st-sunburstChart__legendSwatch--category7 { background: var(--st-semantic-data-category7); }
10954
+ .st-sunburstChart__legendSwatch--category8 { background: var(--st-semantic-data-category8); }
10955
+
10956
+ /* ── Tooltips communs ── */
10759
10957
  .st-heatmapChart__tooltip,
10760
10958
  .st-histogramChart__tooltip,
10761
10959
  .st-boxPlotChart__tooltip,
@@ -10773,11 +10971,17 @@
10773
10971
  padding: 0.375rem 0.5rem;
10774
10972
  pointer-events: none;
10775
10973
  position: absolute;
10776
- transform: translate(-50%, calc(-100% - 8px));
10974
+ transform: translate(-50%, -115%);
10777
10975
  white-space: nowrap;
10778
10976
  z-index: 1;
10779
10977
  }
10780
10978
 
10979
+ .st-radarChart__tooltip {
10980
+ left: 50%;
10981
+ top: 50%;
10982
+ transform: translate(-50%, -50%);
10983
+ }
10984
+
10781
10985
  .st-heatmapChart__tooltipLabel,
10782
10986
  .st-histogramChart__tooltipLabel,
10783
10987
  .st-boxPlotChart__tooltipLabel,
@@ -10790,184 +10994,211 @@
10790
10994
  .st-heatmapChart__tooltipValue,
10791
10995
  .st-histogramChart__tooltipValue,
10792
10996
  .st-boxPlotChart__tooltipValue,
10793
- .st-radarChart__tooltipValue,
10794
10997
  .st-sankeyChart__tooltipValue,
10795
10998
  .st-sunburstChart__tooltipValue {
10796
10999
  opacity: 0.85;
10797
11000
  }
10798
11001
 
10799
- .st-heatmapChart__legend,
10800
- .st-radarChart__legend,
10801
- .st-sunburstChart__legend {
10802
- display: flex;
10803
- flex-wrap: wrap;
10804
- gap: var(--st-spacing-3, 0.75rem);
10805
- list-style: none;
10806
- margin: var(--st-spacing-2, 0.5rem) 0 0;
10807
- padding: 0;
10808
- }
10809
-
10810
- .st-heatmapChart__legendItem,
10811
- .st-radarChart__legendItem,
10812
- .st-sunburstChart__legendItem {
10813
- align-items: center;
10814
- color: var(--st-semantic-text-secondary);
10815
- display: inline-flex;
10816
- font-size: 0.75rem;
10817
- gap: var(--st-spacing-1, 0.35rem);
10818
- }
10819
-
10820
- .st-heatmapChart__legendSwatch,
10821
- .st-radarChart__legendSwatch,
10822
- .st-sunburstChart__legendSwatch {
10823
- border-radius: 2px;
10824
- height: 0.7rem;
10825
- width: 0.7rem;
10826
- }
10827
-
10828
- .st-heatmapChart__legendSwatch--category1,
10829
- .st-radarChart__legendSwatch--category1,
10830
- .st-sunburstChart__legendSwatch--category1 { background: var(--st-semantic-data-category1); }
10831
- .st-heatmapChart__legendSwatch--category2,
10832
- .st-radarChart__legendSwatch--category2,
10833
- .st-sunburstChart__legendSwatch--category2 { background: var(--st-semantic-data-category2); }
10834
- .st-heatmapChart__legendSwatch--category3,
10835
- .st-radarChart__legendSwatch--category3,
10836
- .st-sunburstChart__legendSwatch--category3 { background: var(--st-semantic-data-category3); }
10837
- .st-heatmapChart__legendSwatch--category4,
10838
- .st-radarChart__legendSwatch--category4,
10839
- .st-sunburstChart__legendSwatch--category4 { background: var(--st-semantic-data-category4); }
10840
- .st-heatmapChart__legendSwatch--category5,
10841
- .st-radarChart__legendSwatch--category5,
10842
- .st-sunburstChart__legendSwatch--category5 { background: var(--st-semantic-data-category5); }
10843
- .st-heatmapChart__legendSwatch--category6,
10844
- .st-radarChart__legendSwatch--category6,
10845
- .st-sunburstChart__legendSwatch--category6 { background: var(--st-semantic-data-category6); }
10846
- .st-heatmapChart__legendSwatch--category7,
10847
- .st-radarChart__legendSwatch--category7,
10848
- .st-sunburstChart__legendSwatch--category7 { background: var(--st-semantic-data-category7); }
10849
- .st-heatmapChart__legendSwatch--category8,
10850
- .st-radarChart__legendSwatch--category8,
10851
- .st-sunburstChart__legendSwatch--category8 { background: var(--st-semantic-data-category8); }
10852
-
11002
+ /* ── reduced-motion ── */
10853
11003
  @media (prefers-reduced-motion: reduce) {
10854
11004
  .st-heatmapChart__cell,
10855
11005
  .st-histogramChart__bar,
10856
11006
  .st-boxPlotChart__box,
10857
11007
  .st-radarChart__polygon,
10858
- .st-sankeyChart__node,
10859
11008
  .st-sankeyChart__link,
10860
11009
  .st-sunburstChart__arc {
10861
11010
  transition: none;
10862
11011
  }
10863
11012
  }
10864
11013
 
10865
- /* ---- Bi-charts lot 2 – styles canoniques alignés sur Svelte ---- */
11014
+ /* ── BulletChart (lot-3) ── */
11015
+ .st-bulletChart {
11016
+ color: var(--st-semantic-text-secondary);
11017
+ display: block;
11018
+ font-family: inherit;
11019
+ position: relative;
11020
+ width: 100%;
11021
+ }
10866
11022
 
10867
- /* sankeyChart: le lien est un stroke, pas un fill */
10868
- .st-sankeyChart__link {
10869
- fill: none;
11023
+ .st-bulletChart svg {
11024
+ display: block;
11025
+ overflow: visible;
10870
11026
  }
10871
11027
 
10872
- /* Heatmap: bordure du plot */
10873
- .st-heatmapChart__plot {
10874
- fill: none;
11028
+ .st-bulletChart__visual {
11029
+ display: block;
11030
+ }
11031
+
11032
+ .st-bulletChart__axis {
10875
11033
  stroke: var(--st-semantic-border-subtle);
10876
11034
  stroke-width: 1;
10877
11035
  }
10878
11036
 
10879
- /* Heatmap: légende gradient Low→High */
10880
- .st-heatmapChart__legend {
10881
- align-items: center;
10882
- display: flex;
10883
- gap: var(--st-spacing-2, 0.5rem);
10884
- margin-top: var(--st-spacing-2, 0.5rem);
11037
+ .st-bulletChart__baseline {
11038
+ stroke: var(--st-semantic-border-subtle);
11039
+ stroke-width: 1.5;
10885
11040
  }
10886
11041
 
10887
- .st-heatmapChart__legendRamp {
10888
- display: inline-grid;
10889
- grid-template-columns: repeat(8, minmax(0.75rem, 1fr));
10890
- min-width: 8rem;
11042
+ .st-bulletChart__grid {
11043
+ stroke: var(--st-semantic-border-subtle);
11044
+ stroke-dasharray: 2 3;
11045
+ stroke-width: 1;
11046
+ opacity: 0.6;
10891
11047
  }
10892
11048
 
10893
- .st-heatmapChart__legendSwatch {
10894
- display: block;
10895
- height: 0.5rem;
11049
+ .st-bulletChart__range {
11050
+ fill: var(--st-semantic-data-category1);
10896
11051
  }
10897
11052
 
10898
- .st-heatmapChart__legendText {
10899
- color: var(--st-semantic-text-secondary);
10900
- font-size: 0.75rem;
11053
+ .st-bulletChart__bar {
11054
+ cursor: pointer;
11055
+ fill: var(--st-semantic-text-secondary);
11056
+ transition: opacity 120ms ease;
10901
11057
  }
10902
11058
 
10903
- /* Dim states (hover-based opacity) */
10904
- .st-heatmapChart__cell--dim,
10905
- .st-histogramChart__bar--dim,
10906
- .st-boxPlotChart__box--dim,
10907
- .st-radarChart__polygon--dim,
10908
- .st-sunburstChart__arc--dim {
10909
- opacity: 0.45;
11059
+ .st-bulletChart__bar:hover {
11060
+ opacity: 0.75;
10910
11061
  }
10911
11062
 
10912
- .st-sankeyChart__link--dim {
10913
- opacity: 0.16;
11063
+ @media (prefers-reduced-motion: reduce) {
11064
+ .st-bulletChart__bar {
11065
+ transition: none;
11066
+ }
10914
11067
  }
10915
11068
 
10916
- /* BoxPlot: x-axis label below each box */
10917
- .st-boxPlotChart__label {
11069
+ .st-bulletChart__target {
11070
+ stroke: var(--st-semantic-text-primary, currentColor);
11071
+ stroke-width: 2.5;
11072
+ }
11073
+
11074
+ .st-bulletChart__tickLabel,
11075
+ .st-bulletChart__categoryLabel {
10918
11076
  fill: var(--st-semantic-text-secondary);
11077
+ font-size: 0.6875rem;
11078
+ }
11079
+
11080
+ .st-bulletChart__tooltip {
11081
+ background: var(--st-semantic-surface-inverse);
11082
+ border-radius: var(--st-radius-sm, 0.25rem);
11083
+ color: var(--st-semantic-text-inverse);
11084
+ display: inline-flex;
11085
+ flex-direction: column;
10919
11086
  font-size: 0.75rem;
11087
+ gap: 0.125rem;
11088
+ line-height: 1.2;
11089
+ padding: 0.375rem 0.5rem;
11090
+ pointer-events: none;
11091
+ position: absolute;
11092
+ transform: translate(-50%, calc(-100% - 8px));
11093
+ white-space: nowrap;
11094
+ z-index: 1;
10920
11095
  }
10921
11096
 
10922
- /* BoxPlot: fill-opacity canonical value */
10923
- .st-boxPlotChart__box {
10924
- fill-opacity: 0.72;
11097
+ .st-bulletChart__tooltipLabel {
11098
+ font-weight: 600;
10925
11099
  }
10926
11100
 
10927
- /* BoxPlot: whisker/cap strokes */
10928
- .st-boxPlotChart__whisker,
10929
- .st-boxPlotChart__whiskerCap {
10930
- stroke: var(--st-semantic-border-subtle);
10931
- stroke-width: 1;
11101
+ .st-bulletChart__tooltipValue {
11102
+ opacity: 0.85;
10932
11103
  }
10933
11104
 
10934
- /* RadarChart: ring (polygon grid) */
10935
- .st-radarChart__ring {
10936
- fill: none;
10937
- stroke: var(--st-semantic-border-subtle);
10938
- stroke-width: 1;
11105
+ /* ── LollipopChart ── */
11106
+ .st-lollipopChart {
11107
+ color: var(--st-semantic-text-secondary);
11108
+ display: block;
11109
+ font-family: inherit;
11110
+ position: relative;
11111
+ width: 100%;
10939
11112
  }
10940
11113
 
10941
- /* RadarChart: axis spokes */
10942
- .st-radarChart__axis {
10943
- stroke: var(--st-semantic-border-subtle);
11114
+ .st-lollipopChart svg {
11115
+ display: block;
11116
+ overflow: visible;
11117
+ }
11118
+
11119
+ .st-lollipopChart__visual {
11120
+ display: block;
11121
+ }
11122
+
11123
+ .st-lollipopChart__grid {
11124
+ stroke: var(--st-component-lollipopChart-gridStroke, var(--st-semantic-border-subtle));
11125
+ stroke-dasharray: 2 3;
10944
11126
  stroke-width: 1;
11127
+ opacity: 0.7;
10945
11128
  }
10946
11129
 
10947
- /* RadarChart: data points */
10948
- .st-radarChart__point {
10949
- stroke: var(--st-semantic-surface-default, Canvas);
11130
+ .st-lollipopChart__axis {
11131
+ stroke: var(--st-component-lollipopChart-axisStroke, var(--st-semantic-border-subtle));
10950
11132
  stroke-width: 1;
10951
11133
  }
10952
11134
 
10953
- .st-radarChart__point--category1 { fill: var(--st-semantic-data-category1); }
10954
- .st-radarChart__point--category2 { fill: var(--st-semantic-data-category2); }
10955
- .st-radarChart__point--category3 { fill: var(--st-semantic-data-category3); }
10956
- .st-radarChart__point--category4 { fill: var(--st-semantic-data-category4); }
10957
- .st-radarChart__point--category5 { fill: var(--st-semantic-data-category5); }
10958
- .st-radarChart__point--category6 { fill: var(--st-semantic-data-category6); }
10959
- .st-radarChart__point--category7 { fill: var(--st-semantic-data-category7); }
10960
- .st-radarChart__point--category8 { fill: var(--st-semantic-data-category8); }
11135
+ .st-lollipopChart__tickLabel,
11136
+ .st-lollipopChart__categoryLabel {
11137
+ fill: var(--st-component-lollipopChart-labelColor, var(--st-semantic-text-secondary));
11138
+ font-size: 0.6875rem;
11139
+ }
10961
11140
 
10962
- /* SunburstChart: arc label (fill set inline by contrastTextForTone) */
10963
- .st-sunburstChart__label {
10964
- font-size: 0.68rem;
10965
- font-weight: 650;
11141
+ .st-lollipopChart__valueLabel {
11142
+ font-size: 0.625rem;
11143
+ font-weight: 600;
11144
+ }
11145
+
11146
+ .st-lollipopChart__stem {
11147
+ stroke: var(--st-semantic-border-interactive, var(--st-semantic-border-subtle));
11148
+ stroke-width: 1.5;
11149
+ }
11150
+
11151
+ .st-lollipopChart__dot {
11152
+ cursor: pointer;
11153
+ transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
11154
+ }
11155
+
11156
+ .st-lollipopChart__dot:hover {
11157
+ opacity: 0.82;
11158
+ }
11159
+
11160
+ .st-lollipopChart__dot--category1 { fill: var(--st-semantic-data-category1); }
11161
+ .st-lollipopChart__dot--category2 { fill: var(--st-semantic-data-category2); }
11162
+ .st-lollipopChart__dot--category3 { fill: var(--st-semantic-data-category3); }
11163
+ .st-lollipopChart__dot--category4 { fill: var(--st-semantic-data-category4); }
11164
+ .st-lollipopChart__dot--category5 { fill: var(--st-semantic-data-category5); }
11165
+ .st-lollipopChart__dot--category6 { fill: var(--st-semantic-data-category6); }
11166
+ .st-lollipopChart__dot--category7 { fill: var(--st-semantic-data-category7); }
11167
+ .st-lollipopChart__dot--category8 { fill: var(--st-semantic-data-category8); }
11168
+
11169
+ .st-lollipopChart__tooltip {
11170
+ background: var(--st-component-lollipopChart-tooltipBackground, var(--st-semantic-surface-inverse));
11171
+ border-radius: var(--st-radius-sm, 0.25rem);
11172
+ color: var(--st-component-lollipopChart-tooltipText, var(--st-semantic-text-inverse));
11173
+ display: inline-flex;
11174
+ flex-direction: column;
11175
+ font-size: 0.75rem;
11176
+ gap: 0.125rem;
11177
+ line-height: 1.2;
11178
+ padding: 0.375rem 0.5rem;
10966
11179
  pointer-events: none;
11180
+ position: absolute;
11181
+ transform: translate(-50%, calc(-100% - 8px));
11182
+ white-space: nowrap;
11183
+ z-index: 1;
10967
11184
  }
10968
11185
 
10969
- /* ── BulletChart (lot-3) ── */
10970
- .st-bulletChart {
11186
+ .st-lollipopChart__tooltipLabel {
11187
+ font-weight: 600;
11188
+ }
11189
+
11190
+ .st-lollipopChart__tooltipValue {
11191
+ opacity: 0.85;
11192
+ }
11193
+
11194
+ @media (prefers-reduced-motion: reduce) {
11195
+ .st-lollipopChart__dot {
11196
+ transition: none;
11197
+ }
11198
+ }
11199
+
11200
+ /* ── ParetoChart ── */
11201
+ .st-paretoChart {
10971
11202
  color: var(--st-semantic-text-secondary);
10972
11203
  display: block;
10973
11204
  font-family: inherit;
@@ -10975,67 +11206,71 @@
10975
11206
  width: 100%;
10976
11207
  }
10977
11208
 
10978
- .st-bulletChart svg {
11209
+ .st-paretoChart svg {
10979
11210
  display: block;
10980
11211
  overflow: visible;
10981
11212
  }
10982
11213
 
10983
- .st-bulletChart__visual {
11214
+ .st-paretoChart__visual {
10984
11215
  display: block;
10985
11216
  }
10986
11217
 
10987
- .st-bulletChart__axis {
10988
- stroke: var(--st-semantic-border-subtle);
11218
+ .st-paretoChart__grid {
11219
+ stroke: var(--st-component-paretoChart-gridStroke, var(--st-semantic-border-subtle));
11220
+ stroke-dasharray: 2 3;
10989
11221
  stroke-width: 1;
11222
+ opacity: 0.7;
10990
11223
  }
10991
11224
 
10992
- .st-bulletChart__baseline {
10993
- stroke: var(--st-semantic-border-subtle);
10994
- stroke-width: 1.5;
10995
- }
10996
-
10997
- .st-bulletChart__grid {
10998
- stroke: var(--st-semantic-border-subtle);
10999
- stroke-dasharray: 2 3;
11225
+ .st-paretoChart__axis {
11226
+ stroke: var(--st-component-paretoChart-axisStroke, var(--st-semantic-border-subtle));
11000
11227
  stroke-width: 1;
11001
- opacity: 0.6;
11002
11228
  }
11003
11229
 
11004
- .st-bulletChart__range {
11005
- fill: var(--st-semantic-data-category1);
11230
+ .st-paretoChart__tickLabel,
11231
+ .st-paretoChart__categoryLabel,
11232
+ .st-paretoChart__percentLabel {
11233
+ fill: var(--st-component-paretoChart-labelColor, var(--st-semantic-text-secondary));
11234
+ font-size: 0.6875rem;
11006
11235
  }
11007
11236
 
11008
- .st-bulletChart__bar {
11237
+ .st-paretoChart__bar {
11009
11238
  cursor: pointer;
11010
- fill: var(--st-semantic-text-secondary);
11011
- transition: opacity 120ms ease;
11239
+ transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
11012
11240
  }
11013
11241
 
11014
- .st-bulletChart__bar:hover {
11015
- opacity: 0.75;
11242
+ .st-paretoChart__bar:hover {
11243
+ opacity: 0.82;
11016
11244
  }
11017
11245
 
11018
- @media (prefers-reduced-motion: reduce) {
11019
- .st-bulletChart__bar {
11020
- transition: none;
11021
- }
11246
+ .st-paretoChart__bar--category1 { fill: var(--st-semantic-data-category1); }
11247
+ .st-paretoChart__bar--category2 { fill: var(--st-semantic-data-category2); }
11248
+ .st-paretoChart__bar--category3 { fill: var(--st-semantic-data-category3); }
11249
+ .st-paretoChart__bar--category4 { fill: var(--st-semantic-data-category4); }
11250
+ .st-paretoChart__bar--category5 { fill: var(--st-semantic-data-category5); }
11251
+ .st-paretoChart__bar--category6 { fill: var(--st-semantic-data-category6); }
11252
+ .st-paretoChart__bar--category7 { fill: var(--st-semantic-data-category7); }
11253
+ .st-paretoChart__bar--category8 { fill: var(--st-semantic-data-category8); }
11254
+
11255
+ .st-paretoChart__cumLine {
11256
+ stroke: var(--st-semantic-action-primary, var(--st-semantic-border-interactive));
11257
+ stroke-width: 2;
11022
11258
  }
11023
11259
 
11024
- .st-bulletChart__target {
11025
- stroke: var(--st-semantic-text-primary, currentColor);
11026
- stroke-width: 2.5;
11260
+ .st-paretoChart__cumDot {
11261
+ cursor: pointer;
11262
+ fill: var(--st-semantic-action-primary, var(--st-semantic-border-interactive));
11263
+ transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
11027
11264
  }
11028
11265
 
11029
- .st-bulletChart__tickLabel,
11030
- .st-bulletChart__categoryLabel {
11031
- fill: var(--st-semantic-text-secondary);
11032
- font-size: 0.6875rem;
11266
+ .st-paretoChart__cumDot:hover {
11267
+ opacity: 0.82;
11033
11268
  }
11034
11269
 
11035
- .st-bulletChart__tooltip {
11036
- background: var(--st-semantic-surface-inverse);
11270
+ .st-paretoChart__tooltip {
11271
+ background: var(--st-component-paretoChart-tooltipBackground, var(--st-semantic-surface-inverse));
11037
11272
  border-radius: var(--st-radius-sm, 0.25rem);
11038
- color: var(--st-semantic-text-inverse);
11273
+ color: var(--st-component-paretoChart-tooltipText, var(--st-semantic-text-inverse));
11039
11274
  display: inline-flex;
11040
11275
  flex-direction: column;
11041
11276
  font-size: 0.75rem;
@@ -11049,14 +11284,21 @@
11049
11284
  z-index: 1;
11050
11285
  }
11051
11286
 
11052
- .st-bulletChart__tooltipLabel {
11287
+ .st-paretoChart__tooltipLabel {
11053
11288
  font-weight: 600;
11054
11289
  }
11055
11290
 
11056
- .st-bulletChart__tooltipValue {
11291
+ .st-paretoChart__tooltipValue {
11057
11292
  opacity: 0.85;
11058
11293
  }
11059
11294
 
11295
+ @media (prefers-reduced-motion: reduce) {
11296
+ .st-paretoChart__bar,
11297
+ .st-paretoChart__cumDot {
11298
+ transition: none;
11299
+ }
11300
+ }
11301
+
11060
11302
  /* ── MarimekkoChart (lot-3) ── */
11061
11303
  .st-marimekkoChart {
11062
11304
  color: var(--st-semantic-text-secondary);
@@ -12197,269 +12439,72 @@
12197
12439
  }
12198
12440
 
12199
12441
  .st-selectionChip--neutral {
12200
- background: var(--st-semantic-surface-subtle, #f8fafc);
12201
- color: var(--st-semantic-text-secondary, #475569);
12202
- }
12203
-
12204
- .st-selectionChip--success {
12205
- background: color-mix(in srgb, var(--st-semantic-feedback-success, #16a34a) 14%, white);
12206
- color: var(--st-semantic-feedback-success, #16a34a);
12207
- }
12208
-
12209
- .st-selectionChip--warning {
12210
- background: color-mix(in srgb, var(--st-semantic-feedback-warning, #d97706) 14%, white);
12211
- color: var(--st-semantic-feedback-warning, #d97706);
12212
- }
12213
-
12214
- .st-selectionChip--error {
12215
- background: color-mix(in srgb, var(--st-semantic-feedback-error, #dc2626) 14%, white);
12216
- color: var(--st-semantic-feedback-error, #dc2626);
12217
- }
12218
-
12219
- .st-selectionChip--info {
12220
- background: color-mix(in srgb, var(--st-semantic-feedback-info, #2563eb) 14%, white);
12221
- color: var(--st-semantic-feedback-info, #2563eb);
12222
- }
12223
-
12224
- .st-selectionChip--disabled {
12225
- cursor: var(--st-cursor-disabled, not-allowed);
12226
- opacity: 0.55;
12227
- }
12228
-
12229
- .st-selectionChip__count {
12230
- color: inherit;
12231
- opacity: 0.75;
12232
- }
12233
-
12234
- .st-selectionChip__clear {
12235
- align-items: center;
12236
- background: transparent;
12237
- border: 0;
12238
- border-radius: 50%;
12239
- color: inherit;
12240
- cursor: pointer;
12241
- display: inline-flex;
12242
- font: inherit;
12243
- font-size: 1em;
12244
- height: 1.25em;
12245
- justify-content: center;
12246
- line-height: 1;
12247
- margin-inline-start: 0.0625rem;
12248
- padding: 0;
12249
- transition: background-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
12250
- width: 1.25em;
12251
- }
12252
-
12253
- .st-selectionChip__clear:hover:not(:disabled) {
12254
- background: var(--st-semantic-surface-subtle, #f1f5f9);
12255
- }
12256
-
12257
- .st-selectionChip__clear:focus-visible {
12258
- outline: 2px solid currentColor;
12259
- outline-offset: 1px;
12260
- }
12261
-
12262
- .st-selectionChip__clear:disabled { cursor: var(--st-cursor-disabled, not-allowed); }
12263
-
12264
- @media (prefers-reduced-motion: reduce) {
12265
- .st-selectionChip__clear { transition: none; }
12266
- }
12267
-
12268
- /* ── LollipopChart ── */
12269
- .st-lollipopChart {
12270
- color: var(--st-semantic-text-secondary);
12271
- display: block;
12272
- font-family: inherit;
12273
- position: relative;
12274
- width: 100%;
12275
- }
12276
-
12277
- .st-lollipopChart svg {
12278
- display: block;
12279
- overflow: visible;
12280
- }
12281
-
12282
- .st-lollipopChart__visual {
12283
- display: block;
12284
- }
12285
-
12286
- .st-lollipopChart__grid {
12287
- stroke: var(--st-component-lollipopChart-gridStroke, var(--st-semantic-border-subtle));
12288
- stroke-dasharray: 2 3;
12289
- stroke-width: 1;
12290
- opacity: 0.7;
12291
- }
12292
-
12293
- .st-lollipopChart__axis {
12294
- stroke: var(--st-component-lollipopChart-axisStroke, var(--st-semantic-border-subtle));
12295
- stroke-width: 1;
12296
- }
12297
-
12298
- .st-lollipopChart__tickLabel,
12299
- .st-lollipopChart__categoryLabel {
12300
- fill: var(--st-component-lollipopChart-labelColor, var(--st-semantic-text-secondary));
12301
- font-size: 0.6875rem;
12302
- }
12303
-
12304
- .st-lollipopChart__valueLabel {
12305
- font-size: 0.625rem;
12306
- font-weight: 600;
12307
- }
12308
-
12309
- .st-lollipopChart__stem {
12310
- stroke: var(--st-semantic-border-interactive, var(--st-semantic-border-subtle));
12311
- stroke-width: 1.5;
12312
- }
12313
-
12314
- .st-lollipopChart__dot {
12315
- cursor: pointer;
12316
- transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
12317
- }
12318
-
12319
- .st-lollipopChart__dot:hover {
12320
- opacity: 0.82;
12321
- }
12322
-
12323
- .st-lollipopChart__dot--category1 { fill: var(--st-semantic-data-category1); }
12324
- .st-lollipopChart__dot--category2 { fill: var(--st-semantic-data-category2); }
12325
- .st-lollipopChart__dot--category3 { fill: var(--st-semantic-data-category3); }
12326
- .st-lollipopChart__dot--category4 { fill: var(--st-semantic-data-category4); }
12327
- .st-lollipopChart__dot--category5 { fill: var(--st-semantic-data-category5); }
12328
- .st-lollipopChart__dot--category6 { fill: var(--st-semantic-data-category6); }
12329
- .st-lollipopChart__dot--category7 { fill: var(--st-semantic-data-category7); }
12330
- .st-lollipopChart__dot--category8 { fill: var(--st-semantic-data-category8); }
12331
-
12332
- .st-lollipopChart__tooltip {
12333
- background: var(--st-component-lollipopChart-tooltipBackground, var(--st-semantic-surface-inverse));
12334
- border-radius: var(--st-radius-sm, 0.25rem);
12335
- color: var(--st-component-lollipopChart-tooltipText, var(--st-semantic-text-inverse));
12336
- display: inline-flex;
12337
- flex-direction: column;
12338
- font-size: 0.75rem;
12339
- gap: 0.125rem;
12340
- line-height: 1.2;
12341
- padding: 0.375rem 0.5rem;
12342
- pointer-events: none;
12343
- position: absolute;
12344
- transform: translate(-50%, calc(-100% - 8px));
12345
- white-space: nowrap;
12346
- z-index: 1;
12347
- }
12348
-
12349
- .st-lollipopChart__tooltipLabel {
12350
- font-weight: 600;
12351
- }
12352
-
12353
- .st-lollipopChart__tooltipValue {
12354
- opacity: 0.85;
12355
- }
12356
-
12357
- @media (prefers-reduced-motion: reduce) {
12358
- .st-lollipopChart__dot {
12359
- transition: none;
12360
- }
12361
- }
12362
-
12363
- /* ── ParetoChart ── */
12364
- .st-paretoChart {
12365
- color: var(--st-semantic-text-secondary);
12366
- display: block;
12367
- font-family: inherit;
12368
- position: relative;
12369
- width: 100%;
12370
- }
12371
-
12372
- .st-paretoChart svg {
12373
- display: block;
12374
- overflow: visible;
12375
- }
12376
-
12377
- .st-paretoChart__visual {
12378
- display: block;
12379
- }
12380
-
12381
- .st-paretoChart__grid {
12382
- stroke: var(--st-component-paretoChart-gridStroke, var(--st-semantic-border-subtle));
12383
- stroke-dasharray: 2 3;
12384
- stroke-width: 1;
12385
- opacity: 0.7;
12386
- }
12387
-
12388
- .st-paretoChart__axis {
12389
- stroke: var(--st-component-paretoChart-axisStroke, var(--st-semantic-border-subtle));
12390
- stroke-width: 1;
12391
- }
12392
-
12393
- .st-paretoChart__tickLabel,
12394
- .st-paretoChart__categoryLabel,
12395
- .st-paretoChart__percentLabel {
12396
- fill: var(--st-component-paretoChart-labelColor, var(--st-semantic-text-secondary));
12397
- font-size: 0.6875rem;
12442
+ background: var(--st-semantic-surface-subtle, #f8fafc);
12443
+ color: var(--st-semantic-text-secondary, #475569);
12398
12444
  }
12399
12445
 
12400
- .st-paretoChart__bar {
12401
- cursor: pointer;
12402
- transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
12446
+ .st-selectionChip--success {
12447
+ background: color-mix(in srgb, var(--st-semantic-feedback-success, #16a34a) 14%, white);
12448
+ color: var(--st-semantic-feedback-success, #16a34a);
12403
12449
  }
12404
12450
 
12405
- .st-paretoChart__bar:hover {
12406
- opacity: 0.82;
12451
+ .st-selectionChip--warning {
12452
+ background: color-mix(in srgb, var(--st-semantic-feedback-warning, #d97706) 14%, white);
12453
+ color: var(--st-semantic-feedback-warning, #d97706);
12407
12454
  }
12408
12455
 
12409
- .st-paretoChart__bar--category1 { fill: var(--st-semantic-data-category1); }
12410
- .st-paretoChart__bar--category2 { fill: var(--st-semantic-data-category2); }
12411
- .st-paretoChart__bar--category3 { fill: var(--st-semantic-data-category3); }
12412
- .st-paretoChart__bar--category4 { fill: var(--st-semantic-data-category4); }
12413
- .st-paretoChart__bar--category5 { fill: var(--st-semantic-data-category5); }
12414
- .st-paretoChart__bar--category6 { fill: var(--st-semantic-data-category6); }
12415
- .st-paretoChart__bar--category7 { fill: var(--st-semantic-data-category7); }
12416
- .st-paretoChart__bar--category8 { fill: var(--st-semantic-data-category8); }
12456
+ .st-selectionChip--error {
12457
+ background: color-mix(in srgb, var(--st-semantic-feedback-error, #dc2626) 14%, white);
12458
+ color: var(--st-semantic-feedback-error, #dc2626);
12459
+ }
12417
12460
 
12418
- .st-paretoChart__cumLine {
12419
- stroke: var(--st-semantic-action-primary, var(--st-semantic-border-interactive));
12420
- stroke-width: 2;
12461
+ .st-selectionChip--info {
12462
+ background: color-mix(in srgb, var(--st-semantic-feedback-info, #2563eb) 14%, white);
12463
+ color: var(--st-semantic-feedback-info, #2563eb);
12421
12464
  }
12422
12465
 
12423
- .st-paretoChart__cumDot {
12424
- cursor: pointer;
12425
- fill: var(--st-semantic-action-primary, var(--st-semantic-border-interactive));
12426
- transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
12466
+ .st-selectionChip--disabled {
12467
+ cursor: var(--st-cursor-disabled, not-allowed);
12468
+ opacity: 0.55;
12427
12469
  }
12428
12470
 
12429
- .st-paretoChart__cumDot:hover {
12430
- opacity: 0.82;
12471
+ .st-selectionChip__count {
12472
+ color: inherit;
12473
+ opacity: 0.75;
12431
12474
  }
12432
12475
 
12433
- .st-paretoChart__tooltip {
12434
- background: var(--st-component-paretoChart-tooltipBackground, var(--st-semantic-surface-inverse));
12435
- border-radius: var(--st-radius-sm, 0.25rem);
12436
- color: var(--st-component-paretoChart-tooltipText, var(--st-semantic-text-inverse));
12476
+ .st-selectionChip__clear {
12477
+ align-items: center;
12478
+ background: transparent;
12479
+ border: 0;
12480
+ border-radius: 50%;
12481
+ color: inherit;
12482
+ cursor: pointer;
12437
12483
  display: inline-flex;
12438
- flex-direction: column;
12439
- font-size: 0.75rem;
12440
- gap: 0.125rem;
12441
- line-height: 1.2;
12442
- padding: 0.375rem 0.5rem;
12443
- pointer-events: none;
12444
- position: absolute;
12445
- transform: translate(-50%, calc(-100% - 8px));
12446
- white-space: nowrap;
12447
- z-index: 1;
12484
+ font: inherit;
12485
+ font-size: 1em;
12486
+ height: 1.25em;
12487
+ justify-content: center;
12488
+ line-height: 1;
12489
+ margin-inline-start: 0.0625rem;
12490
+ padding: 0;
12491
+ transition: background-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
12492
+ width: 1.25em;
12448
12493
  }
12449
12494
 
12450
- .st-paretoChart__tooltipLabel {
12451
- font-weight: 600;
12495
+ .st-selectionChip__clear:hover:not(:disabled) {
12496
+ background: var(--st-semantic-surface-subtle, #f1f5f9);
12452
12497
  }
12453
12498
 
12454
- .st-paretoChart__tooltipValue {
12455
- opacity: 0.85;
12499
+ .st-selectionChip__clear:focus-visible {
12500
+ outline: 2px solid currentColor;
12501
+ outline-offset: 1px;
12456
12502
  }
12457
12503
 
12504
+ .st-selectionChip__clear:disabled { cursor: var(--st-cursor-disabled, not-allowed); }
12505
+
12458
12506
  @media (prefers-reduced-motion: reduce) {
12459
- .st-paretoChart__bar,
12460
- .st-paretoChart__cumDot {
12461
- transition: none;
12462
- }
12507
+ .st-selectionChip__clear { transition: none; }
12463
12508
  }
12464
12509
 
12465
12510
  /* --- Shell : AppHeader / LanguageToggle / IdentityMenu (calque sentropic) --- */
@@ -17110,13 +17155,12 @@
17110
17155
  line-height: 1.4;
17111
17156
  }
17112
17157
 
17113
- /* ============================================================================
17114
- NavSystem wave 1 — Vue parity (Overline, StatusDot, NavActionStack) +
17115
- Checkbox (description/trailing) & Search (fluid) extensions.
17116
- Token-only, AUCUN hex en dur — chaque var retombe sur le littéral de base.
17117
- ========================================================================== */
17158
+ /* ===========================================================================
17159
+ Wave 1 NavSystem — Overline, StatusDot, NavActionStack + Checkbox/Search ext.
17160
+ Token-only (P-C : anatomie par thème). Aucun hex littéral.
17161
+ =========================================================================== */
17118
17162
 
17119
- /* Overline étiquette de section discrète en small-caps. */
17163
+ /* --- Overline ------------------------------------------------------------ */
17120
17164
  .st-overline {
17121
17165
  color: var(--st-component-overline-color, var(--st-semantic-text-secondary, inherit));
17122
17166
  display: var(--st-component-overline-display, inline-block);
@@ -17129,7 +17173,7 @@
17129
17173
  text-transform: var(--st-component-overline-textTransform, uppercase);
17130
17174
  }
17131
17175
 
17132
- /* StatusDot pastille de statut (point coloré + label optionnel). */
17176
+ /* --- StatusDot ----------------------------------------------------------- */
17133
17177
  .st-statusDot {
17134
17178
  align-items: center;
17135
17179
  color: var(--st-semantic-text-primary, inherit);
@@ -17147,6 +17191,8 @@
17147
17191
  flex: none;
17148
17192
  }
17149
17193
 
17194
+ /* Tone background + matching `color` so `currentColor` in the pulse keyframe
17195
+ follows the dot. */
17150
17196
  .st-statusDot__dot--neutral {
17151
17197
  background-color: var(--st-component-statusDot-neutral, var(--st-semantic-text-secondary));
17152
17198
  color: var(--st-component-statusDot-neutral, var(--st-semantic-text-secondary));
@@ -17198,7 +17244,7 @@
17198
17244
  }
17199
17245
  }
17200
17246
 
17201
- /* NavActionStack pile d'actions hiérarchisées + zone sensible. */
17247
+ /* --- NavActionStack ------------------------------------------------------ */
17202
17248
  .st-navActionStack {
17203
17249
  display: flex;
17204
17250
  flex-direction: column;
@@ -17222,6 +17268,7 @@
17222
17268
  align-items: center;
17223
17269
  }
17224
17270
 
17271
+ /* Pleine largeur en pile verticale ; largeur naturelle en rangée. */
17225
17272
  .st-navActionStack--vertical .st-navActionStack__item {
17226
17273
  inline-size: 100%;
17227
17274
  }
@@ -17242,11 +17289,15 @@
17242
17289
  text-transform: var(--st-component-overline-textTransform, uppercase);
17243
17290
  }
17244
17291
 
17292
+ /* La zone sensible est pleine largeur quelle que soit l'orientation. */
17245
17293
  .st-navActionStack .st-navActionStack__dangerAction {
17246
17294
  inline-size: 100%;
17247
17295
  }
17248
17296
 
17249
- /* Checkbox extension — secondary muted description + trailing slot. */
17297
+ /* --- Checkbox extensions (description + trailing) ------------------------- */
17298
+ /* SIGNAL filter row: input + content + trailing count, content fills, trailing
17299
+ pushed to the row end. Top-aligned so the box rides the first text line when a
17300
+ secondary description wraps below the label. */
17250
17301
  .st-choice:has(.st-choice__trailing) {
17251
17302
  align-items: start;
17252
17303
  grid-template-columns: auto 1fr auto;
@@ -17262,38 +17313,39 @@
17262
17313
  justify-content: flex-end;
17263
17314
  }
17264
17315
 
17316
+ /* Secondary muted description under the label (SIGNAL filter hint). */
17265
17317
  .st-choice__description {
17266
17318
  color: var(--st-semantic-text-secondary);
17267
17319
  font-size: 0.8125rem;
17268
17320
  line-height: 1.4;
17269
17321
  }
17270
17322
 
17271
- /* Search extension fluid lifts the field width cap. */
17272
- .st-search.st-search--fluid {
17323
+ /* --- Search extension (fluid) -------------------------------------------- */
17324
+ /* Fluid mode: lift the width cap so the field fills a narrow drawer/rail. */
17325
+ .st-search--fluid {
17273
17326
  max-width: none;
17274
17327
  width: 100%;
17275
17328
  }
17276
17329
 
17277
17330
  /* ===========================================================================
17278
- NavItem — anatomie de rangée canonique du système de navigation (vague 2).
17279
- Composé sur SelectableRow + ColorSwatch/StatusDot + Badge. Token-only, aucun
17280
- hex en dur ; chaque var retombe sur un littéral de base.
17331
+ NavItem — canonical nav-row anatomy (wave 2). Composes SelectableRow +
17332
+ ColorSwatch / StatusDot (head) + Badge (count). Token-only, no raw hex.
17281
17333
  =========================================================================== */
17282
17334
  .st-navItem {
17283
17335
  display: block;
17284
17336
  inline-size: 100%;
17285
17337
  }
17286
17338
 
17287
- /* Indentation de PROFONDEUR : décale la rangée SelectableRow (sa tête comprise)
17288
- par un padding inline-start ADDITIF à son padding de base (0.75rem). La var
17289
- --st-navItem-indent est posée sur le wrapper et héritée par cascade. */
17339
+ /* Depth INDENTATION: offset the composed SelectableRow (its head included) by an
17340
+ inline-start padding ADDITIVE to its base padding (0.75rem). The
17341
+ --st-navItem-indent var is set on the wrapper and inherited by the row. */
17290
17342
  .st-navItem .st-selectableRow {
17291
17343
  padding-inline-start: calc(0.75rem + var(--st-navItem-indent, 0rem));
17292
17344
  }
17293
17345
 
17294
- /* Échelle typographique : la graisse ET la taille DÉCROISSENT avec la
17295
- profondeur, pour que la hiérarchie se lise sans relief de couleur. Chaque
17296
- token retombe sur un littéral → thème silencieux = byte-identique. */
17346
+ /* Typographic scale: weight AND size DECREASE with depth so the hierarchy reads
17347
+ without a colour cue. Each token falls back to a literal → a silent theme
17348
+ renders byte-identically. */
17297
17349
  .st-navItem--depth0 .st-navItem__title {
17298
17350
  font-size: var(--st-component-navItem-depth0-fontSize, 0.875rem);
17299
17351
  font-weight: var(--st-component-navItem-depth0-fontWeight, 600);
@@ -17306,7 +17358,7 @@
17306
17358
  font-size: var(--st-component-navItem-depth2-fontSize, 0.8125rem);
17307
17359
  font-weight: var(--st-component-navItem-depth2-fontWeight, 400);
17308
17360
  }
17309
- /* L3 — muted : même métrique que L2, couleur atténuée. */
17361
+ /* L3 — muted: same metric as L2, dimmed colour. */
17310
17362
  .st-navItem--depth3 .st-navItem__title {
17311
17363
  font-size: var(--st-component-navItem-depth3-fontSize, 0.8125rem);
17312
17364
  font-weight: var(--st-component-navItem-depth3-fontWeight, 400);
@@ -17329,8 +17381,9 @@
17329
17381
  white-space: nowrap;
17330
17382
  }
17331
17383
 
17332
- /* Ton sémantique de la RANGÉE : teinte le titre par le feedback correspondant.
17333
- Un « HTTP 403 » error devient rouge sémantique réel. */
17384
+ /* Semantic ROW status: tints the title with the matching feedback. A "HTTP 403"
17385
+ error becomes a real semantic red. Each tone falls back to its
17386
+ --st-semantic-feedback-* token. */
17334
17387
  .st-navItem--status-info .st-navItem__title {
17335
17388
  color: var(--st-component-navItem-status-info, var(--st-semantic-feedback-info));
17336
17389
  }
@@ -17344,7 +17397,7 @@
17344
17397
  color: var(--st-component-navItem-status-error, var(--st-semantic-feedback-error));
17345
17398
  }
17346
17399
 
17347
- /* Séparateur token-only : une fine règle pleine largeur après la rangée. */
17400
+ /* Token-only divider: a fine full-width rule after the row. */
17348
17401
  .st-navItem__divider {
17349
17402
  border: 0;
17350
17403
  border-top: var(--st-border-width-thin, 1px) solid
@@ -17353,8 +17406,8 @@
17353
17406
  }
17354
17407
 
17355
17408
  /* ===========================================================================
17356
- NavSection — en-tête de groupe d'un rail / drawer. Composé sur Overline +
17357
- Collapsible + Badge. Token-only scopé.
17409
+ NavSection — group header of a rail / drawer. Composes Overline (label),
17410
+ Badge (count), Collapsible (disclosure). Token-only scoped.
17358
17411
  =========================================================================== */
17359
17412
  .st-navSection {
17360
17413
  inline-size: 100%;
@@ -17368,8 +17421,8 @@
17368
17421
  padding-block: var(--st-component-navSection-headerPaddingBlock, 0.375rem);
17369
17422
  }
17370
17423
 
17371
- /* Le libellé et son compteur forment un bloc ; le Badge circle s'aligne au
17372
- centre vertical du texte small-caps. */
17424
+ /* The label and its count form one block; the circle Badge aligns to the
17425
+ vertical centre of the small-caps text. */
17373
17426
  .st-navSection .st-navSection__label {
17374
17427
  align-items: center;
17375
17428
  display: inline-flex;
@@ -17380,7 +17433,7 @@
17380
17433
  flex: 0 0 auto;
17381
17434
  }
17382
17435
 
17383
- /* Foyer de l'action de section : ancré à droite, ne grandit pas. */
17436
+ /* Section-action focus: anchored right, does not grow. */
17384
17437
  .st-navSection__action {
17385
17438
  align-items: center;
17386
17439
  display: inline-flex;
@@ -17390,3 +17443,342 @@
17390
17443
  .st-navSection__body {
17391
17444
  display: block;
17392
17445
  }
17446
+
17447
+ /* NavSystem wave 3 primitives */
17448
+ .st-appShell {
17449
+ background: var(--st-component-appShell-surface, var(--st-semantic-surface-default));
17450
+ color: var(--st-semantic-text-primary);
17451
+ min-block-size: 100vh;
17452
+ }
17453
+
17454
+ .st-appShell--workspace {
17455
+ display: grid;
17456
+ grid-template-areas:
17457
+ "top top top top"
17458
+ "rail nav main context"
17459
+ "bottom bottom bottom bottom";
17460
+ grid-template-columns: auto minmax(0, var(--st-component-navShell-width, 18rem)) minmax(0, 1fr) minmax(0, var(--st-component-contextPanel-width, 20rem));
17461
+ grid-template-rows: auto minmax(0, 1fr) auto;
17462
+ position: relative;
17463
+ }
17464
+
17465
+ .st-appShell--workspace:has(.st-appShell__utilityPanel)[data-utility-mode="reserve"]:not([data-utility-side]),
17466
+ .st-appShell--workspace:has(.st-appShell__utilityPanel)[data-utility-mode="reserve"][data-utility-side="right"] {
17467
+ grid-template-areas:
17468
+ "top top top top top"
17469
+ "rail nav main context utility"
17470
+ "bottom bottom bottom bottom bottom";
17471
+ grid-template-columns: auto minmax(0, var(--st-component-navShell-width, 18rem)) minmax(0, 1fr) minmax(0, var(--st-component-contextPanel-width, 20rem)) minmax(0, var(--st-component-utilityPanel-width, 24rem));
17472
+ grid-template-rows: auto minmax(0, 1fr) auto;
17473
+ }
17474
+
17475
+ .st-appShell--workspace:has(.st-appShell__utilityPanel)[data-utility-mode="reserve"][data-utility-side="left"] {
17476
+ grid-template-areas:
17477
+ "top top top top top"
17478
+ "rail nav utility main context"
17479
+ "bottom bottom bottom bottom bottom";
17480
+ grid-template-columns: auto minmax(0, var(--st-component-navShell-width, 18rem)) minmax(0, var(--st-component-utilityPanel-width, 24rem)) minmax(0, 1fr) minmax(0, var(--st-component-contextPanel-width, 20rem));
17481
+ grid-template-rows: auto minmax(0, 1fr) auto;
17482
+ }
17483
+
17484
+ .st-appShell--workspace:has(.st-appShell__utilityPanel)[data-utility-mode="reserve"][data-utility-side="bottom"] {
17485
+ grid-template-areas:
17486
+ "top top top top"
17487
+ "rail nav main context"
17488
+ "rail nav utility utility"
17489
+ "bottom bottom bottom bottom";
17490
+ grid-template-columns: auto minmax(0, var(--st-component-navShell-width, 18rem)) minmax(0, 1fr) minmax(0, var(--st-component-contextPanel-width, 20rem));
17491
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
17492
+ }
17493
+
17494
+ .st-appShell__topChrome { grid-area: top; }
17495
+ .st-appShell__primaryRail { grid-area: rail; min-block-size: 0; }
17496
+ .st-appShell__navigationPanel { grid-area: nav; min-block-size: 0; overflow: hidden; }
17497
+ .st-appShell__main { grid-area: main; min-block-size: 0; min-inline-size: 0; overflow: auto; }
17498
+ .st-appShell__contextPanel { grid-area: context; min-block-size: 0; overflow: hidden; }
17499
+ .st-appShell__utilityPanel { grid-area: utility; inline-size: 100%; min-block-size: 0; overflow: hidden; }
17500
+ .st-appShell__bottomPanel { grid-area: bottom; }
17501
+
17502
+ .st-appShell[data-utility-mode="overlay"] .st-appShell__utilityPanel,
17503
+ .st-appShell[data-utility-mode="floating"] .st-appShell__utilityPanel {
17504
+ box-shadow: var(--st-component-appShell-utilityShadow, 0 18px 45px rgb(15 23 42 / 0.18));
17505
+ max-block-size: 100%;
17506
+ position: absolute;
17507
+ z-index: var(--st-component-appShell-utility-zIndex, 40);
17508
+ }
17509
+
17510
+ .st-appShell[data-utility-mode="overlay"][data-utility-side="right"] .st-appShell__utilityPanel,
17511
+ .st-appShell[data-utility-mode="floating"][data-utility-side="right"] .st-appShell__utilityPanel {
17512
+ block-size: 100%;
17513
+ inline-size: min(100%, var(--st-component-utilityPanel-width, 24rem));
17514
+ inset-block: 0;
17515
+ inset-inline-end: 0;
17516
+ }
17517
+
17518
+ .st-appShell[data-utility-mode="overlay"][data-utility-side="left"] .st-appShell__utilityPanel,
17519
+ .st-appShell[data-utility-mode="floating"][data-utility-side="left"] .st-appShell__utilityPanel {
17520
+ block-size: 100%;
17521
+ inline-size: min(100%, var(--st-component-utilityPanel-width, 24rem));
17522
+ inset-block: 0;
17523
+ inset-inline-start: 0;
17524
+ }
17525
+
17526
+ .st-appShell[data-utility-mode="overlay"][data-utility-side="bottom"] .st-appShell__utilityPanel,
17527
+ .st-appShell[data-utility-mode="floating"][data-utility-side="bottom"] .st-appShell__utilityPanel {
17528
+ block-size: var(--st-component-appShell-utilityBottomHeight, min(40%, 20rem));
17529
+ inline-size: auto;
17530
+ inset-block-end: 0;
17531
+ inset-inline: 0;
17532
+ }
17533
+
17534
+ .st-appShell[data-utility-mode="floating"] .st-appShell__utilityPanel {
17535
+ border: 1px solid var(--st-component-appShell-border, var(--st-semantic-border-subtle));
17536
+ border-radius: var(--st-radius-lg, 0.75rem);
17537
+ margin: var(--st-spacing-4, 1rem);
17538
+ }
17539
+
17540
+ .st-navRail {
17541
+ align-items: stretch;
17542
+ background: var(--st-component-navRail-surface, var(--st-semantic-surface-raised));
17543
+ color: var(--st-semantic-text-primary);
17544
+ display: grid;
17545
+ grid-template-rows: 1fr auto;
17546
+ block-size: 100%;
17547
+ inline-size: var(--st-component-navRail-width, 4.5rem);
17548
+ padding: var(--st-spacing-2, 0.5rem);
17549
+ }
17550
+
17551
+ .st-navRail__items,
17552
+ .st-navRail__footer {
17553
+ align-items: center;
17554
+ display: flex;
17555
+ flex-direction: column;
17556
+ gap: var(--st-spacing-2, 0.5rem);
17557
+ }
17558
+
17559
+ .st-navRail__items {
17560
+ min-block-size: 0;
17561
+ overflow-y: auto;
17562
+ }
17563
+
17564
+ .st-navRail__item {
17565
+ align-items: center;
17566
+ background: transparent;
17567
+ border: 1px solid transparent;
17568
+ border-radius: var(--st-radius-md, 0.375rem);
17569
+ color: var(--st-semantic-text-secondary);
17570
+ cursor: pointer;
17571
+ display: inline-flex;
17572
+ flex-direction: column;
17573
+ font: inherit;
17574
+ gap: var(--st-spacing-1, 0.25rem);
17575
+ inline-size: 100%;
17576
+ min-block-size: 3.25rem;
17577
+ padding: var(--st-spacing-2, 0.5rem);
17578
+ position: relative;
17579
+ text-align: center;
17580
+ text-decoration: none;
17581
+ }
17582
+
17583
+ .st-navRail__item:hover,
17584
+ .st-navRail__item--active {
17585
+ background: var(--st-component-navRail-activeBackground, var(--st-semantic-surface-subtle));
17586
+ color: var(--st-semantic-text-primary);
17587
+ }
17588
+
17589
+ .st-navRail__item--active {
17590
+ border-color: var(--st-component-navRail-activeBorder, var(--st-semantic-border-strong));
17591
+ }
17592
+
17593
+ .st-navRail__item:disabled {
17594
+ cursor: not-allowed;
17595
+ opacity: 0.5;
17596
+ }
17597
+
17598
+ .st-navRail__label {
17599
+ font-size: 0.6875rem;
17600
+ font-weight: 650;
17601
+ line-height: 1.1;
17602
+ }
17603
+
17604
+ .st-navRail__badge {
17605
+ background: var(--st-component-navRail-badgeBackground, var(--st-semantic-surface-inverse));
17606
+ border-radius: 999px;
17607
+ color: var(--st-semantic-text-inverse);
17608
+ font-size: 0.625rem;
17609
+ line-height: 1;
17610
+ padding: 0.125rem 0.3rem;
17611
+ position: absolute;
17612
+ right: 0.25rem;
17613
+ top: 0.25rem;
17614
+ }
17615
+
17616
+ .st-navShell {
17617
+ background: var(--st-component-navShell-surface, var(--st-semantic-surface-raised));
17618
+ border-inline-end: 1px solid var(--st-component-navShell-border, var(--st-semantic-border-subtle));
17619
+ color: var(--st-semantic-text-primary);
17620
+ display: grid;
17621
+ grid-template-rows: auto auto minmax(0, 1fr) auto;
17622
+ min-block-size: 0;
17623
+ }
17624
+
17625
+ .st-navShell--drawer {
17626
+ border-inline-end: 0;
17627
+ }
17628
+
17629
+ .st-navShell__header {
17630
+ align-items: start;
17631
+ border-block-end: 1px solid var(--st-component-navShell-border, var(--st-semantic-border-subtle));
17632
+ display: flex;
17633
+ gap: var(--st-spacing-2, 0.5rem);
17634
+ padding: var(--st-spacing-4, 1rem);
17635
+ }
17636
+
17637
+ .st-navShell__back {
17638
+ align-items: center;
17639
+ background: transparent;
17640
+ border: 1px solid var(--st-semantic-border-subtle);
17641
+ border-radius: 999px;
17642
+ color: inherit;
17643
+ cursor: pointer;
17644
+ display: inline-flex;
17645
+ block-size: 2rem;
17646
+ inline-size: 2rem;
17647
+ justify-content: center;
17648
+ }
17649
+
17650
+ .st-navShell__heading {
17651
+ display: grid;
17652
+ gap: var(--st-spacing-1, 0.25rem);
17653
+ }
17654
+
17655
+ .st-navShell__title,
17656
+ .st-navShell__subtitle {
17657
+ margin: 0;
17658
+ }
17659
+
17660
+ .st-navShell__title {
17661
+ font-weight: 700;
17662
+ }
17663
+
17664
+ .st-navShell__subtitle {
17665
+ color: var(--st-semantic-text-secondary);
17666
+ font-size: 0.875rem;
17667
+ }
17668
+
17669
+ .st-navShell__search {
17670
+ border-block-end: 1px solid var(--st-component-navShell-border, var(--st-semantic-border-subtle));
17671
+ padding: var(--st-spacing-3, 0.75rem) var(--st-spacing-4, 1rem);
17672
+ }
17673
+
17674
+ .st-navShell__body {
17675
+ min-block-size: 0;
17676
+ overflow: auto;
17677
+ padding: var(--st-spacing-3, 0.75rem);
17678
+ }
17679
+
17680
+ .st-navShell__footer {
17681
+ border-block-start: 1px solid var(--st-component-navShell-border, var(--st-semantic-border-subtle));
17682
+ padding: var(--st-spacing-3, 0.75rem) var(--st-spacing-4, 1rem);
17683
+ }
17684
+
17685
+ .st-contextPanel,
17686
+ .st-utilityPanel {
17687
+ background: var(--st-component-panel-surface, var(--st-semantic-surface-raised));
17688
+ color: var(--st-semantic-text-primary);
17689
+ display: grid;
17690
+ min-block-size: 0;
17691
+ }
17692
+
17693
+ .st-contextPanel {
17694
+ border-inline-start: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17695
+ grid-template-rows: auto minmax(0, 1fr) auto;
17696
+ }
17697
+
17698
+ .st-utilityPanel {
17699
+ border-block-start: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17700
+ grid-template-rows: auto minmax(0, 1fr);
17701
+ }
17702
+
17703
+ .st-contextPanel--left {
17704
+ border-inline-start: 0;
17705
+ border-inline-end: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17706
+ }
17707
+
17708
+ .st-contextPanel__header,
17709
+ .st-utilityPanel__header {
17710
+ align-items: center;
17711
+ border-block-end: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17712
+ display: flex;
17713
+ gap: var(--st-spacing-3, 0.75rem);
17714
+ justify-content: space-between;
17715
+ padding: var(--st-spacing-3, 0.75rem) var(--st-spacing-4, 1rem);
17716
+ }
17717
+
17718
+ .st-contextPanel__title,
17719
+ .st-utilityPanel__title {
17720
+ font-weight: 700;
17721
+ margin: 0;
17722
+ }
17723
+
17724
+ .st-contextPanel__body,
17725
+ .st-utilityPanel__body {
17726
+ min-block-size: 0;
17727
+ overflow: auto;
17728
+ padding: var(--st-spacing-4, 1rem);
17729
+ }
17730
+
17731
+ .st-contextPanel__footer {
17732
+ border-block-start: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17733
+ padding: var(--st-spacing-3, 0.75rem) var(--st-spacing-4, 1rem);
17734
+ }
17735
+
17736
+ .st-drawer--bottom {
17737
+ align-items: end;
17738
+ justify-content: stretch;
17739
+ }
17740
+
17741
+ .st-drawer--bottom .st-drawer__panel {
17742
+ block-size: min(70vh, var(--st-component-drawer-bottomHeight, 42rem));
17743
+ inline-size: 100%;
17744
+ max-inline-size: none;
17745
+ }
17746
+
17747
+ @media (max-width: 900px) {
17748
+ .st-appShell--workspace {
17749
+ grid-template-areas:
17750
+ "top"
17751
+ "rail"
17752
+ "nav"
17753
+ "main"
17754
+ "context"
17755
+ "utility"
17756
+ "bottom";
17757
+ grid-template-columns: minmax(0, 1fr);
17758
+ grid-template-rows: auto auto auto minmax(0, 1fr) auto auto auto;
17759
+ }
17760
+
17761
+ .st-navRail {
17762
+ block-size: auto;
17763
+ inline-size: 100%;
17764
+ }
17765
+
17766
+ .st-navRail__items,
17767
+ .st-navRail__footer {
17768
+ flex-direction: row;
17769
+ overflow-x: auto;
17770
+ overflow-y: hidden;
17771
+ }
17772
+
17773
+ .st-navRail__item {
17774
+ inline-size: auto;
17775
+ min-inline-size: 4rem;
17776
+ }
17777
+
17778
+ .st-navShell,
17779
+ .st-contextPanel {
17780
+ border-inline-end: 0;
17781
+ border-inline-start: 0;
17782
+ border-block-end: 1px solid var(--st-component-panel-border, var(--st-semantic-border-subtle));
17783
+ }
17784
+ }