origam 2.18.17 → 2.18.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +981 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +212 -6
  4. package/dist/src/assets/css/tokens/light.css +106 -3
  5. package/dist/src/assets/scss/tokens/_dark.scss +212 -6
  6. package/dist/src/assets/scss/tokens/_light.scss +106 -3
  7. package/dist/src/components/Audio/OrigamAudio.vue +66 -2
  8. package/dist/src/components/Chip/OrigamChip.vue +34 -0
  9. package/dist/src/components/Field/OrigamField.vue +76 -3
  10. package/dist/src/components/List/OrigamList.vue +90 -3
  11. package/dist/src/components/Main/OrigamMain.vue +2 -2
  12. package/dist/src/components/Media/OrigamMediaScrubber.vue +11 -1
  13. package/dist/src/components/Pagination/OrigamPagination.vue +64 -2
  14. package/dist/src/components/SliderField/OrigamSliderField.vue +138 -3
  15. package/dist/src/components/SliderField/OrigamSliderFieldTrack.vue +12 -1
  16. package/dist/src/components/Snackbar/OrigamSnackbar.vue +2 -2
  17. package/dist/src/components/Switch/OrigamSwitch.vue +32 -0
  18. package/dist/src/components/TextField/OrigamTextField.vue +3 -1
  19. package/dist/src/components/Toolbar/OrigamToolbar.vue +58 -0
  20. package/dist/src/components/Video/OrigamVideo.vue +11 -1
  21. package/dist/src/composables/Commons/layout.composable.cjs +2 -2
  22. package/dist/src/composables/Commons/layout.composable.d.ts +16 -2
  23. package/dist/src/composables/Commons/layout.composable.js +1 -1
  24. package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +44 -9
  25. package/dist/src/composables/Commons/theme-props-resolver.composable.d.ts +33 -1
  26. package/dist/src/composables/Commons/theme-props-resolver.composable.js +42 -10
  27. package/dist/src/consts/Commons/variant-preset.const.cjs +8 -0
  28. package/dist/src/consts/Commons/variant-preset.const.d.ts +60 -0
  29. package/dist/src/consts/Commons/variant-preset.const.js +2 -0
  30. package/dist/src/consts/index.cjs +11 -0
  31. package/dist/src/consts/index.d.ts +1 -0
  32. package/dist/src/consts/index.js +1 -0
  33. package/dist/src/interfaces/Commons/theme.interface.d.ts +33 -0
  34. package/dist/src/interfaces/Masonry/masonry.interface.d.ts +2 -2
  35. package/dist/src/origam.cjs +2 -1
  36. package/dist/src/origam.js +8 -2
  37. package/dist/src/types/Commons/variant-preset.type.cjs +1 -0
  38. package/dist/src/types/Commons/variant-preset.type.d.ts +73 -0
  39. package/dist/src/types/Commons/variant-preset.type.js +0 -0
  40. package/dist/src/types/index.cjs +11 -0
  41. package/dist/src/types/index.d.ts +1 -0
  42. package/dist/src/types/index.js +1 -0
  43. package/dist/src/types/tokens.type.d.ts +1 -1
  44. package/package.json +1 -1
@@ -524,6 +524,15 @@
524
524
  --origam-chip__filter---transition-property: transform, opacity;
525
525
  --origam-chip__filter---transition-duration: var(--origam-motion__duration---normal);
526
526
  --origam-chip__filter---transition-timing-function: var(--origam-motion__easing---standard);
527
+ /* #595 — canaux C2 ouverts : lus par OrigamChip, declares par personne. Valeurs = le repli deja rendu. Les hauteurs ne passent PAS par l echelle `space` : 38px et 44px n y ont aucun barreau. */
528
+ --origam-chip---height-xs: 20px;
529
+ --origam-chip---height-sm: 24px;
530
+ --origam-chip---height-md: 32px;
531
+ --origam-chip---height-lg: 38px;
532
+ --origam-chip---height-xl: 44px;
533
+ --origam-chip---border-radius-rounded: var(--origam-radius---xl);
534
+ --origam-chip__close---margin-inline-start: 6px;
535
+ --origam-chip__close---margin-inline-end: -4px;
527
536
  --origam-avatar---background-color: var(--origam-color__surface---overlay);
528
537
  --origam-avatar---color: var(--origam-color__text---secondary);
529
538
  --origam-avatar---border-color: currentColor;
@@ -930,6 +939,18 @@
930
939
  --origam-toolbar__append---flex-basis: auto;
931
940
  --origam-toolbar__append---margin-inline-start: auto;
932
941
  --origam-toolbar__append---margin-inline-end: var(--origam-space---2);
942
+ /* Toolbar + AppBar — #596. Same rule: every value is the literal the SCSS
943
+ already fell back to, so nothing moves on screen.
944
+ --origam-toolbar---btn-background-color-{hover,active},
945
+ --origam-appbar---backdrop-filter and --origam-layout---position-{left,right}
946
+ stay UNDECLARED on purpose — see the comments at their read sites in
947
+ OrigamToolbar.vue. */
948
+ --origam-toolbar---padding-inline: var(--origam-space---4);
949
+ --origam-toolbar---btn-background-color: rgba(0, 0, 0, 0);
950
+ --origam-toolbar---btn-color: currentColor;
951
+ --origam-toolbar---btn-border-radius: var(--origam-radius---md);
952
+ --origam-toolbar__wrapper---gap: var(--origam-space---3);
953
+ --origam-toolbar__title---color: currentColor;
933
954
  --origam-app---background-color: var(--origam-color__surface---default);
934
955
  --origam-app---color: var(--origam-color__text---primary);
935
956
  --origam-app---min-height: 100vh;
@@ -1121,7 +1142,7 @@
1121
1142
  --origam-field---padding-top: var(--origam-space---2);
1122
1143
  --origam-field---padding-bottom: 6px;
1123
1144
  --origam-field---font-size: 16px;
1124
- --origam-field---letter-spacing: var(--origam-font__letterSpacing---wide);
1145
+ --origam-field---letter-spacing: 0.009375em; /* #595 — PAS `letterSpacing---wide` (0.0094em) : `.origam-field` et `.origam-field__input` livrent 0.009375em en dur depuis toujours. Le barreau de l echelle en differe de 0.000025em, assez pour deplacer la piste de tous les champs. Valeur reellement livree, barreau assume hors echelle — meme arbitrage que `--origam-input__details---padding-top: 6px` (#595). */
1125
1146
  --origam-field---border-radius: var(--origam-radius---sm);
1126
1147
  --origam-field---border-color: var(--origam-color__border---default);
1127
1148
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -1140,6 +1161,11 @@
1140
1161
  --origam-field---focus-ring-width: 0px;
1141
1162
  --origam-field---focus-ring-offset: 0px;
1142
1163
  --origam-field--variant-solo---box-shadow: var(--origam-shadow---sm);
1164
+ /* #595 — canaux C2 ouverts : lus par OrigamField, declares par personne. Valeurs = le repli deja rendu. `16px` et `4px` coincident EXACTEMENT avec `radius---xl` et `space---1` (verifie sur primitive.css), donc routes par leurs barreaux ; `0.42` n a aucun barreau (l echelle opacity va 0/12/26/32/50/60/70/87/100), litteral assume ; le `color-mix` est recopie VERBATIM — `currentColor` doit rester substitue sur l element consommateur, pas ici. */
1165
+ --origam-field---border-radius-rounded: var(--origam-radius---xl);
1166
+ --origam-field--inline---padding-inline: var(--origam-space---1);
1167
+ --origam-field--variant-filled---background-color: color-mix(in srgb, currentColor 12%, transparent);
1168
+ --origam-field--variant-filled---border-opacity: 0.42;
1143
1169
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
1144
1170
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
1145
1171
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -1653,6 +1679,12 @@
1653
1679
  --origam-pagination---input-width: var(--origam-space---10);
1654
1680
  --origam-pagination---input-padding-inline: var(--origam-space---2);
1655
1681
  --origam-pagination---label-gap: var(--origam-space---2);
1682
+ /* Pagination — #596. rgba(0, 0, 0, 0) is the computed equivalent of the
1683
+ `transparent` literal the SCSS already fell back to for the active item's
1684
+ border, so nothing moves on screen. The three other --item--is-active
1685
+ channels and --origam-pagination---color-hover stay UNDECLARED on purpose
1686
+ — see the comments at their read sites in OrigamPagination.vue. */
1687
+ --origam-pagination__item--is-active---border-color: rgba(0, 0, 0, 0);
1656
1688
  --origam-table---background-color: var(--origam-color__surface---default);
1657
1689
  --origam-table---color: var(--origam-color__text---primary);
1658
1690
  --origam-table---font-size: var(--origam-font__size---md);
@@ -1801,8 +1833,10 @@
1801
1833
  --origam-list---pointer-events: auto;
1802
1834
  --origam-list---user-select: auto;
1803
1835
  --origam-list---indent-padding: 0px;
1836
+ --origam-list--nav---item-gap: 2px;
1837
+ --origam-list--nav---item-min-height: 44px;
1838
+ --origam-list--nav---item-padding-block: 6px;
1804
1839
  --origam-list---density: 0px;
1805
- --origam-list---indent-padding-nav: -8px;
1806
1840
  --origam-list---slim-prepend-width: 28px;
1807
1841
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
1808
1842
  --origam-list__overlay---border-radius: inherit;
@@ -2260,6 +2294,16 @@
2260
2294
  --origam-switch__label---font-size: var(--origam-font__size---md);
2261
2295
  --origam-switch__label---padding-inline: var(--origam-space---2);
2262
2296
  --origam-switch__input---opacity: 0;
2297
+ /* #595 — canaux C2 ouverts : ces neuf noms etaient lus par OrigamSwitch / OrigamSwitchTrack et declares par personne. Chaque valeur est le repli deja rendu, recopie a l identique. */
2298
+ --origam-switch__thumb---border-color: rgba(0, 0, 0, 0.18);
2299
+ --origam-switch__thumb---color: currentColor;
2300
+ --origam-switch__selection-control---min-height: 56px;
2301
+ --origam-switch__skeleton---width: 52px;
2302
+ --origam-switch__skeleton---height: 32px;
2303
+ --origam-switch__skeleton-track---background-color: color-mix(in srgb, currentColor 14%, transparent);
2304
+ --origam-switch__skeleton-thumb---background-color: color-mix(in srgb, currentColor 28%, transparent);
2305
+ --origam-switch__track--inset---height: 32px;
2306
+ --origam-switch__track--inset---width: 52px;
2263
2307
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
2264
2308
  --origam-slider-field---padding-block: var(--origam-space---2);
2265
2309
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -2282,11 +2326,24 @@
2282
2326
  --origam-slider-field__tick---size: 4px;
2283
2327
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
2284
2328
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
2285
- --origam-slider-field__tick---border-radius: var(--origam-radius---full);
2329
+ --origam-slider-field__tick---border-radius: 2px; /* #595 — PAS `radius---full` (9999px) : `.origam-slider-field-track__tick` livre `border-radius: 2px` en dur. Valeur reellement livree. */
2286
2330
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
2287
2331
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
2288
2332
  --origam-slider-field__label---padding: var(--origam-space---1);
2289
2333
  --origam-slider-field---opacity-disabled: var(--origam-opacity---32);
2334
+ /* #595 — canaux C2 ouverts : lus par OrigamSliderField / OrigamSliderFieldTrack, declares par personne. Valeurs = le repli deja rendu ; les `var()` internes sont recopies VERBATIM pour ne pas fermer le canal `--origam-color__*--inverse---*`, encore non declare. */
2335
+ --origam-slider-field-thumb__surface---border-color: rgba(0, 0, 0, 0.18);
2336
+ --origam-slider-field__buffered---background-color: color-mix(in srgb, currentColor 40%, transparent);
2337
+ --origam-slider-field__buffered---opacity: 0.5;
2338
+ --origam-slider-field__buffered--bare---background-color: color-mix(in srgb, currentColor 40%, transparent);
2339
+ --origam-slider-field__track---transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
2340
+ --origam-slider-field__hover-tooltip---background-color: var(--origam-color__surface---inverse);
2341
+ --origam-slider-field__hover-tooltip---color: var(--origam-color__text---inverse);
2342
+ --origam-slider-field--bare---accent-color: var(--origam-color__action--primary---bg);
2343
+ --origam-slider-field--bare---thumb-size: 12px;
2344
+ --origam-slider-field--bare---track-background-color: color-mix(in srgb, currentColor 25%, transparent);
2345
+ --origam-slider-field--bare---track-thickness: 2px;
2346
+ --origam-slider-field--bare---track-thickness-active: 4px;
2290
2347
  --origam-icon---color: currentColor;
2291
2348
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
2292
2349
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -2545,6 +2602,32 @@
2545
2602
  --origam-tabs__item---transition-easing: var(--origam-motion__easing---standard);
2546
2603
  --origam-tabs__indicator---color: var(--origam-color__action--primary---bg);
2547
2604
  --origam-tabs__indicator---height: var(--origam-border__width---2);
2605
+ /* Tabs — #596. Each value is exactly the literal (or token reference) the
2606
+ component SCSS already fell back to, so nothing moves on screen: the
2607
+ variant (--default / --pills / --underline) and item-state channels were
2608
+ simply never declared, so every theme edit to them was a no-op.
2609
+ --item--disabled---color and --item--hover---background-color keep their
2610
+ legacy hardcoded rgba(0, 0, 0, …) — that is what the DS renders today in
2611
+ BOTH themes, and swapping them for a semantic token would move the dark
2612
+ rendering, which is a design decision and not a token-wiring one.
2613
+ Declaring them here is what finally lets a theme fix that. */
2614
+ --origam-tabs--default---border-block-end-width: var(--origam-border__width---thin);
2615
+ --origam-tabs--default---border-block-end-color: var(--origam-color__border---subtle);
2616
+ --origam-tabs--underline---border-block-end-width: var(--origam-border__width---thin);
2617
+ --origam-tabs--underline---border-block-end-color: var(--origam-color__border---subtle);
2618
+ --origam-tabs--pills---background-color: rgba(0, 0, 0, 0);
2619
+ --origam-tabs--pills---gap: var(--origam-space---2);
2620
+ --origam-tabs--pills---padding: var(--origam-space---1);
2621
+ --origam-tabs__item--hover---color: currentColor;
2622
+ --origam-tabs__item--hover---background-color: rgba(0, 0, 0, 0.04);
2623
+ --origam-tabs__item--active---color: currentColor;
2624
+ --origam-tabs__item--active---background-color: rgba(0, 0, 0, 0);
2625
+ --origam-tabs__item--active---font-weight: var(--origam-font__weight---semibold);
2626
+ --origam-tabs__item--disabled---color: rgba(0, 0, 0, 0.38);
2627
+ --origam-tabs__item--disabled---background-color: rgba(0, 0, 0, 0);
2628
+ --origam-tabs__item--focus---outline-color: currentColor;
2629
+ --origam-tabs__item--pills--active---background-color: var(--origam-color__action--primary---bg);
2630
+ --origam-tabs__item--pills--active---color: var(--origam-color__action--primary---fg);
2548
2631
  --origam-tab-panels__panel---padding-block: var(--origam-space---4);
2549
2632
  --origam-tab-panels__panel---padding-inline: var(--origam-space---0);
2550
2633
  --origam-tabs__panel---transition-duration: var(--origam-motion__duration---fast);
@@ -2731,6 +2814,26 @@
2731
2814
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
2732
2815
  --origam-audio--error---gap: var(--origam-space---2);
2733
2816
  --origam-audio--error---icon-font-size: var(--origam-font__size---lg);
2817
+ /* #594 — canaux C2 ouverts : lus par OrigamAudio depuis des selecteurs VIVANTS, declares par personne. Valeurs = le repli deja rendu. */
2818
+ --origam-audio__header---margin-bottom: 12px;
2819
+ --origam-audio__btn---size: 28px;
2820
+ --origam-audio__btn---icon-size: 16px;
2821
+ --origam-audio__meta-separator---content: "\00B7"; /* #594 — U+00B7 ECHAPPE, et il DOIT le rester. Ecrit en litteral, ce seul caractere non-ASCII faisait emettre a dart-sass un BOM en tete de main.css (`--style=compressed` pose un BOM la ou le mode etendu poserait `@charset`). Un BOM n est PAS retire a l interieur d un `<style>` : il se collait au premier selecteur, qui ne matchait alors plus rien — les 156 declarations primitives mortes, tous les tokens semantiques et derives a vide. Mesure le 2026-09-30 : 7 echecs sur derived-tokens-subtree.spec.ts. L echappement rend le MEME glyphe (verifie en Chromium) et garde la feuille compilee en ASCII pur. Regle : aucune valeur de token ne doit contenir de caractere non-ASCII — utiliser la forme \XXXX. */
2822
+ --origam-audio__playlist---max-height: 220px;
2823
+ --origam-audio__playlist---padding-top: 8px;
2824
+ --origam-audio__playlist---margin-top: 12px;
2825
+ --origam-audio__playlist---border-color: color-mix(in srgb, currentColor 8%, transparent);
2826
+ /* Les deux lignes de meta de la playlist resolvaient `var(--origam-color__text---secondary)` par repli — exactement ce que `--origam-audio---secondary-color` declare deja. Les brancher dessus ouvre les deux canaux ET rend ce token atteignable, a valeur rendue identique. */
2827
+ --origam-audio__playlist-subtitle---color: var(--origam-audio---secondary-color);
2828
+ --origam-audio__playlist-duration---color: var(--origam-audio---secondary-color);
2829
+ --origam-audio__playlist-item__prepend---margin-inline-end: 12px;
2830
+ --origam-audio--compact---padding: 8px 12px;
2831
+ --origam-audio--compact__header---gap: 12px;
2832
+ --origam-audio--compact__btn---size: 24px;
2833
+ --origam-audio--compact__btn---icon-size: 14px;
2834
+ --origam-audio--compact__play-btn---size: 56px;
2835
+ --origam-audio--compact__play-btn---icon-size: 40px;
2836
+ --origam-audio--compact__progress---height: 3px;
2734
2837
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
2735
2838
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
2736
2839
  --origam-media-scrubber---track-background-color: var(--origam-color__surface---overlay);
@@ -3442,6 +3545,15 @@
3442
3545
  --origam-chip__filter---transition-property: transform, opacity;
3443
3546
  --origam-chip__filter---transition-duration: var(--origam-motion__duration---normal);
3444
3547
  --origam-chip__filter---transition-timing-function: var(--origam-motion__easing---standard);
3548
+ /* #595 — canaux C2 ouverts : lus par OrigamChip, declares par personne. Valeurs = le repli deja rendu. Les hauteurs ne passent PAS par l echelle `space` : 38px et 44px n y ont aucun barreau. */
3549
+ --origam-chip---height-xs: 20px;
3550
+ --origam-chip---height-sm: 24px;
3551
+ --origam-chip---height-md: 32px;
3552
+ --origam-chip---height-lg: 38px;
3553
+ --origam-chip---height-xl: 44px;
3554
+ --origam-chip---border-radius-rounded: var(--origam-radius---xl);
3555
+ --origam-chip__close---margin-inline-start: 6px;
3556
+ --origam-chip__close---margin-inline-end: -4px;
3445
3557
  --origam-avatar---background-color: var(--origam-color__surface---overlay);
3446
3558
  --origam-avatar---color: var(--origam-color__text---secondary);
3447
3559
  --origam-avatar---border-color: currentColor;
@@ -3848,6 +3960,18 @@
3848
3960
  --origam-toolbar__append---flex-basis: auto;
3849
3961
  --origam-toolbar__append---margin-inline-start: auto;
3850
3962
  --origam-toolbar__append---margin-inline-end: var(--origam-space---2);
3963
+ /* Toolbar + AppBar — #596. Same rule: every value is the literal the SCSS
3964
+ already fell back to, so nothing moves on screen.
3965
+ --origam-toolbar---btn-background-color-{hover,active},
3966
+ --origam-appbar---backdrop-filter and --origam-layout---position-{left,right}
3967
+ stay UNDECLARED on purpose — see the comments at their read sites in
3968
+ OrigamToolbar.vue. */
3969
+ --origam-toolbar---padding-inline: var(--origam-space---4);
3970
+ --origam-toolbar---btn-background-color: rgba(0, 0, 0, 0);
3971
+ --origam-toolbar---btn-color: currentColor;
3972
+ --origam-toolbar---btn-border-radius: var(--origam-radius---md);
3973
+ --origam-toolbar__wrapper---gap: var(--origam-space---3);
3974
+ --origam-toolbar__title---color: currentColor;
3851
3975
  --origam-app---background-color: var(--origam-color__surface---default);
3852
3976
  --origam-app---color: var(--origam-color__text---primary);
3853
3977
  --origam-app---min-height: 100vh;
@@ -4039,7 +4163,7 @@
4039
4163
  --origam-field---padding-top: var(--origam-space---2);
4040
4164
  --origam-field---padding-bottom: 6px;
4041
4165
  --origam-field---font-size: 16px;
4042
- --origam-field---letter-spacing: var(--origam-font__letterSpacing---wide);
4166
+ --origam-field---letter-spacing: 0.009375em; /* #595 — PAS `letterSpacing---wide` (0.0094em) : `.origam-field` et `.origam-field__input` livrent 0.009375em en dur depuis toujours. Le barreau de l echelle en differe de 0.000025em, assez pour deplacer la piste de tous les champs. Valeur reellement livree, barreau assume hors echelle — meme arbitrage que `--origam-input__details---padding-top: 6px` (#595). */
4043
4167
  --origam-field---border-radius: var(--origam-radius---sm);
4044
4168
  --origam-field---border-color: var(--origam-color__border---default);
4045
4169
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -4058,6 +4182,11 @@
4058
4182
  --origam-field---focus-ring-width: 0px;
4059
4183
  --origam-field---focus-ring-offset: 0px;
4060
4184
  --origam-field--variant-solo---box-shadow: var(--origam-shadow---sm);
4185
+ /* #595 — canaux C2 ouverts : lus par OrigamField, declares par personne. Valeurs = le repli deja rendu. `16px` et `4px` coincident EXACTEMENT avec `radius---xl` et `space---1` (verifie sur primitive.css), donc routes par leurs barreaux ; `0.42` n a aucun barreau (l echelle opacity va 0/12/26/32/50/60/70/87/100), litteral assume ; le `color-mix` est recopie VERBATIM — `currentColor` doit rester substitue sur l element consommateur, pas ici. */
4186
+ --origam-field---border-radius-rounded: var(--origam-radius---xl);
4187
+ --origam-field--inline---padding-inline: var(--origam-space---1);
4188
+ --origam-field--variant-filled---background-color: color-mix(in srgb, currentColor 12%, transparent);
4189
+ --origam-field--variant-filled---border-opacity: 0.42;
4061
4190
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
4062
4191
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
4063
4192
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -4571,6 +4700,12 @@
4571
4700
  --origam-pagination---input-width: var(--origam-space---10);
4572
4701
  --origam-pagination---input-padding-inline: var(--origam-space---2);
4573
4702
  --origam-pagination---label-gap: var(--origam-space---2);
4703
+ /* Pagination — #596. rgba(0, 0, 0, 0) is the computed equivalent of the
4704
+ `transparent` literal the SCSS already fell back to for the active item's
4705
+ border, so nothing moves on screen. The three other --item--is-active
4706
+ channels and --origam-pagination---color-hover stay UNDECLARED on purpose
4707
+ — see the comments at their read sites in OrigamPagination.vue. */
4708
+ --origam-pagination__item--is-active---border-color: rgba(0, 0, 0, 0);
4574
4709
  --origam-table---background-color: var(--origam-color__surface---default);
4575
4710
  --origam-table---color: var(--origam-color__text---primary);
4576
4711
  --origam-table---font-size: var(--origam-font__size---md);
@@ -4719,8 +4854,10 @@
4719
4854
  --origam-list---pointer-events: auto;
4720
4855
  --origam-list---user-select: auto;
4721
4856
  --origam-list---indent-padding: 0px;
4857
+ --origam-list--nav---item-gap: 2px;
4858
+ --origam-list--nav---item-min-height: 44px;
4859
+ --origam-list--nav---item-padding-block: 6px;
4722
4860
  --origam-list---density: 0px;
4723
- --origam-list---indent-padding-nav: -8px;
4724
4861
  --origam-list---slim-prepend-width: 28px;
4725
4862
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
4726
4863
  --origam-list__overlay---border-radius: inherit;
@@ -5177,6 +5314,16 @@
5177
5314
  --origam-switch__label---font-size: var(--origam-font__size---md);
5178
5315
  --origam-switch__label---padding-inline: var(--origam-space---2);
5179
5316
  --origam-switch__input---opacity: 0;
5317
+ /* #595 — canaux C2 ouverts : ces neuf noms etaient lus par OrigamSwitch / OrigamSwitchTrack et declares par personne. Chaque valeur est le repli deja rendu, recopie a l identique. */
5318
+ --origam-switch__thumb---border-color: rgba(0, 0, 0, 0.18);
5319
+ --origam-switch__thumb---color: currentColor;
5320
+ --origam-switch__selection-control---min-height: 56px;
5321
+ --origam-switch__skeleton---width: 52px;
5322
+ --origam-switch__skeleton---height: 32px;
5323
+ --origam-switch__skeleton-track---background-color: color-mix(in srgb, currentColor 14%, transparent);
5324
+ --origam-switch__skeleton-thumb---background-color: color-mix(in srgb, currentColor 28%, transparent);
5325
+ --origam-switch__track--inset---height: 32px;
5326
+ --origam-switch__track--inset---width: 52px;
5180
5327
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
5181
5328
  --origam-slider-field---padding-block: var(--origam-space---2);
5182
5329
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -5199,11 +5346,24 @@
5199
5346
  --origam-slider-field__tick---size: 4px;
5200
5347
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
5201
5348
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
5202
- --origam-slider-field__tick---border-radius: var(--origam-radius---full);
5349
+ --origam-slider-field__tick---border-radius: 2px; /* #595 — PAS `radius---full` (9999px) : `.origam-slider-field-track__tick` livre `border-radius: 2px` en dur. Valeur reellement livree. */
5203
5350
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
5204
5351
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
5205
5352
  --origam-slider-field__label---padding: var(--origam-space---1);
5206
5353
  --origam-slider-field---opacity-disabled: var(--origam-opacity---32);
5354
+ /* #595 — canaux C2 ouverts : lus par OrigamSliderField / OrigamSliderFieldTrack, declares par personne. Valeurs = le repli deja rendu ; les `var()` internes sont recopies VERBATIM pour ne pas fermer le canal `--origam-color__*--inverse---*`, encore non declare. */
5355
+ --origam-slider-field-thumb__surface---border-color: rgba(0, 0, 0, 0.18);
5356
+ --origam-slider-field__buffered---background-color: color-mix(in srgb, currentColor 40%, transparent);
5357
+ --origam-slider-field__buffered---opacity: 0.5;
5358
+ --origam-slider-field__buffered--bare---background-color: color-mix(in srgb, currentColor 40%, transparent);
5359
+ --origam-slider-field__track---transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
5360
+ --origam-slider-field__hover-tooltip---background-color: var(--origam-color__surface---inverse);
5361
+ --origam-slider-field__hover-tooltip---color: var(--origam-color__text---inverse);
5362
+ --origam-slider-field--bare---accent-color: var(--origam-color__action--primary---bg);
5363
+ --origam-slider-field--bare---thumb-size: 12px;
5364
+ --origam-slider-field--bare---track-background-color: color-mix(in srgb, currentColor 25%, transparent);
5365
+ --origam-slider-field--bare---track-thickness: 2px;
5366
+ --origam-slider-field--bare---track-thickness-active: 4px;
5207
5367
  --origam-icon---color: currentColor;
5208
5368
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
5209
5369
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -5462,6 +5622,32 @@
5462
5622
  --origam-tabs__item---transition-easing: var(--origam-motion__easing---standard);
5463
5623
  --origam-tabs__indicator---color: var(--origam-color__action--primary---bg);
5464
5624
  --origam-tabs__indicator---height: var(--origam-border__width---2);
5625
+ /* Tabs — #596. Each value is exactly the literal (or token reference) the
5626
+ component SCSS already fell back to, so nothing moves on screen: the
5627
+ variant (--default / --pills / --underline) and item-state channels were
5628
+ simply never declared, so every theme edit to them was a no-op.
5629
+ --item--disabled---color and --item--hover---background-color keep their
5630
+ legacy hardcoded rgba(0, 0, 0, …) — that is what the DS renders today in
5631
+ BOTH themes, and swapping them for a semantic token would move the dark
5632
+ rendering, which is a design decision and not a token-wiring one.
5633
+ Declaring them here is what finally lets a theme fix that. */
5634
+ --origam-tabs--default---border-block-end-width: var(--origam-border__width---thin);
5635
+ --origam-tabs--default---border-block-end-color: var(--origam-color__border---subtle);
5636
+ --origam-tabs--underline---border-block-end-width: var(--origam-border__width---thin);
5637
+ --origam-tabs--underline---border-block-end-color: var(--origam-color__border---subtle);
5638
+ --origam-tabs--pills---background-color: rgba(0, 0, 0, 0);
5639
+ --origam-tabs--pills---gap: var(--origam-space---2);
5640
+ --origam-tabs--pills---padding: var(--origam-space---1);
5641
+ --origam-tabs__item--hover---color: currentColor;
5642
+ --origam-tabs__item--hover---background-color: rgba(0, 0, 0, 0.04);
5643
+ --origam-tabs__item--active---color: currentColor;
5644
+ --origam-tabs__item--active---background-color: rgba(0, 0, 0, 0);
5645
+ --origam-tabs__item--active---font-weight: var(--origam-font__weight---semibold);
5646
+ --origam-tabs__item--disabled---color: rgba(0, 0, 0, 0.38);
5647
+ --origam-tabs__item--disabled---background-color: rgba(0, 0, 0, 0);
5648
+ --origam-tabs__item--focus---outline-color: currentColor;
5649
+ --origam-tabs__item--pills--active---background-color: var(--origam-color__action--primary---bg);
5650
+ --origam-tabs__item--pills--active---color: var(--origam-color__action--primary---fg);
5465
5651
  --origam-tab-panels__panel---padding-block: var(--origam-space---4);
5466
5652
  --origam-tab-panels__panel---padding-inline: var(--origam-space---0);
5467
5653
  --origam-tabs__panel---transition-duration: var(--origam-motion__duration---fast);
@@ -5648,6 +5834,26 @@
5648
5834
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
5649
5835
  --origam-audio--error---gap: var(--origam-space---2);
5650
5836
  --origam-audio--error---icon-font-size: var(--origam-font__size---lg);
5837
+ /* #594 — canaux C2 ouverts : lus par OrigamAudio depuis des selecteurs VIVANTS, declares par personne. Valeurs = le repli deja rendu. */
5838
+ --origam-audio__header---margin-bottom: 12px;
5839
+ --origam-audio__btn---size: 28px;
5840
+ --origam-audio__btn---icon-size: 16px;
5841
+ --origam-audio__meta-separator---content: "\00B7"; /* #594 — U+00B7 ECHAPPE, et il DOIT le rester. Ecrit en litteral, ce seul caractere non-ASCII faisait emettre a dart-sass un BOM en tete de main.css (`--style=compressed` pose un BOM la ou le mode etendu poserait `@charset`). Un BOM n est PAS retire a l interieur d un `<style>` : il se collait au premier selecteur, qui ne matchait alors plus rien — les 156 declarations primitives mortes, tous les tokens semantiques et derives a vide. Mesure le 2026-09-30 : 7 echecs sur derived-tokens-subtree.spec.ts. L echappement rend le MEME glyphe (verifie en Chromium) et garde la feuille compilee en ASCII pur. Regle : aucune valeur de token ne doit contenir de caractere non-ASCII — utiliser la forme \XXXX. */
5842
+ --origam-audio__playlist---max-height: 220px;
5843
+ --origam-audio__playlist---padding-top: 8px;
5844
+ --origam-audio__playlist---margin-top: 12px;
5845
+ --origam-audio__playlist---border-color: color-mix(in srgb, currentColor 8%, transparent);
5846
+ /* Les deux lignes de meta de la playlist resolvaient `var(--origam-color__text---secondary)` par repli — exactement ce que `--origam-audio---secondary-color` declare deja. Les brancher dessus ouvre les deux canaux ET rend ce token atteignable, a valeur rendue identique. */
5847
+ --origam-audio__playlist-subtitle---color: var(--origam-audio---secondary-color);
5848
+ --origam-audio__playlist-duration---color: var(--origam-audio---secondary-color);
5849
+ --origam-audio__playlist-item__prepend---margin-inline-end: 12px;
5850
+ --origam-audio--compact---padding: 8px 12px;
5851
+ --origam-audio--compact__header---gap: 12px;
5852
+ --origam-audio--compact__btn---size: 24px;
5853
+ --origam-audio--compact__btn---icon-size: 14px;
5854
+ --origam-audio--compact__play-btn---size: 56px;
5855
+ --origam-audio--compact__play-btn---icon-size: 40px;
5856
+ --origam-audio--compact__progress---height: 3px;
5651
5857
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
5652
5858
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
5653
5859
  --origam-media-scrubber---track-background-color: var(--origam-color__surface---overlay);
@@ -426,6 +426,15 @@
426
426
  --origam-chip__filter---transition-property: transform, opacity;
427
427
  --origam-chip__filter---transition-duration: var(--origam-motion__duration---normal);
428
428
  --origam-chip__filter---transition-timing-function: var(--origam-motion__easing---standard);
429
+ /* #595 — canaux C2 ouverts : lus par OrigamChip, declares par personne. Valeurs = le repli deja rendu. Les hauteurs ne passent PAS par l echelle `space` : 38px et 44px n y ont aucun barreau. */
430
+ --origam-chip---height-xs: 20px;
431
+ --origam-chip---height-sm: 24px;
432
+ --origam-chip---height-md: 32px;
433
+ --origam-chip---height-lg: 38px;
434
+ --origam-chip---height-xl: 44px;
435
+ --origam-chip---border-radius-rounded: var(--origam-radius---xl);
436
+ --origam-chip__close---margin-inline-start: 6px;
437
+ --origam-chip__close---margin-inline-end: -4px;
429
438
  --origam-avatar---background-color: var(--origam-color__surface---overlay);
430
439
  --origam-avatar---color: var(--origam-color__text---secondary);
431
440
  --origam-avatar---border-color: currentColor;
@@ -832,6 +841,18 @@
832
841
  --origam-toolbar__append---flex-basis: auto;
833
842
  --origam-toolbar__append---margin-inline-start: auto;
834
843
  --origam-toolbar__append---margin-inline-end: var(--origam-space---2);
844
+ /* Toolbar + AppBar — #596. Same rule: every value is the literal the SCSS
845
+ already fell back to, so nothing moves on screen.
846
+ --origam-toolbar---btn-background-color-{hover,active},
847
+ --origam-appbar---backdrop-filter and --origam-layout---position-{left,right}
848
+ stay UNDECLARED on purpose — see the comments at their read sites in
849
+ OrigamToolbar.vue. */
850
+ --origam-toolbar---padding-inline: var(--origam-space---4);
851
+ --origam-toolbar---btn-background-color: rgba(0, 0, 0, 0);
852
+ --origam-toolbar---btn-color: currentColor;
853
+ --origam-toolbar---btn-border-radius: var(--origam-radius---md);
854
+ --origam-toolbar__wrapper---gap: var(--origam-space---3);
855
+ --origam-toolbar__title---color: currentColor;
835
856
  --origam-app---background-color: var(--origam-color__surface---default);
836
857
  --origam-app---color: var(--origam-color__text---primary);
837
858
  --origam-app---min-height: 100vh;
@@ -1023,7 +1044,7 @@
1023
1044
  --origam-field---padding-top: var(--origam-space---2);
1024
1045
  --origam-field---padding-bottom: 6px;
1025
1046
  --origam-field---font-size: 16px;
1026
- --origam-field---letter-spacing: var(--origam-font__letterSpacing---wide);
1047
+ --origam-field---letter-spacing: 0.009375em; /* #595 — PAS `letterSpacing---wide` (0.0094em) : `.origam-field` et `.origam-field__input` livrent 0.009375em en dur depuis toujours. Le barreau de l echelle en differe de 0.000025em, assez pour deplacer la piste de tous les champs. Valeur reellement livree, barreau assume hors echelle — meme arbitrage que `--origam-input__details---padding-top: 6px` (#595). */
1027
1048
  --origam-field---border-radius: var(--origam-radius---sm);
1028
1049
  --origam-field---border-color: var(--origam-color__border---default);
1029
1050
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -1042,6 +1063,11 @@
1042
1063
  --origam-field---focus-ring-width: 0px;
1043
1064
  --origam-field---focus-ring-offset: 0px;
1044
1065
  --origam-field--variant-solo---box-shadow: var(--origam-shadow---sm);
1066
+ /* #595 — canaux C2 ouverts : lus par OrigamField, declares par personne. Valeurs = le repli deja rendu. `16px` et `4px` coincident EXACTEMENT avec `radius---xl` et `space---1` (verifie sur primitive.css), donc routes par leurs barreaux ; `0.42` n a aucun barreau (l echelle opacity va 0/12/26/32/50/60/70/87/100), litteral assume ; le `color-mix` est recopie VERBATIM — `currentColor` doit rester substitue sur l element consommateur, pas ici. */
1067
+ --origam-field---border-radius-rounded: var(--origam-radius---xl);
1068
+ --origam-field--inline---padding-inline: var(--origam-space---1);
1069
+ --origam-field--variant-filled---background-color: color-mix(in srgb, currentColor 12%, transparent);
1070
+ --origam-field--variant-filled---border-opacity: 0.42;
1045
1071
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
1046
1072
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
1047
1073
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -1555,6 +1581,12 @@
1555
1581
  --origam-pagination---input-width: var(--origam-space---10);
1556
1582
  --origam-pagination---input-padding-inline: var(--origam-space---2);
1557
1583
  --origam-pagination---label-gap: var(--origam-space---2);
1584
+ /* Pagination — #596. rgba(0, 0, 0, 0) is the computed equivalent of the
1585
+ `transparent` literal the SCSS already fell back to for the active item's
1586
+ border, so nothing moves on screen. The three other --item--is-active
1587
+ channels and --origam-pagination---color-hover stay UNDECLARED on purpose
1588
+ — see the comments at their read sites in OrigamPagination.vue. */
1589
+ --origam-pagination__item--is-active---border-color: rgba(0, 0, 0, 0);
1558
1590
  --origam-table---background-color: var(--origam-color__surface---default);
1559
1591
  --origam-table---color: var(--origam-color__text---primary);
1560
1592
  --origam-table---font-size: var(--origam-font__size---md);
@@ -1705,8 +1737,10 @@
1705
1737
  --origam-list---pointer-events: auto;
1706
1738
  --origam-list---user-select: auto;
1707
1739
  --origam-list---indent-padding: 0px;
1740
+ --origam-list--nav---item-gap: 2px;
1741
+ --origam-list--nav---item-min-height: 44px;
1742
+ --origam-list--nav---item-padding-block: 6px;
1708
1743
  --origam-list---density: 0px;
1709
- --origam-list---indent-padding-nav: -8px;
1710
1744
  --origam-list---slim-prepend-width: 28px;
1711
1745
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
1712
1746
  --origam-list__overlay---border-radius: inherit;
@@ -2176,6 +2210,16 @@
2176
2210
  --origam-switch__label---font-size: var(--origam-font__size---md);
2177
2211
  --origam-switch__label---padding-inline: var(--origam-space---2);
2178
2212
  --origam-switch__input---opacity: 0;
2213
+ /* #595 — canaux C2 ouverts : ces neuf noms etaient lus par OrigamSwitch / OrigamSwitchTrack et declares par personne. Chaque valeur est le repli deja rendu, recopie a l identique. */
2214
+ --origam-switch__thumb---border-color: rgba(0, 0, 0, 0.18);
2215
+ --origam-switch__thumb---color: currentColor;
2216
+ --origam-switch__selection-control---min-height: 56px;
2217
+ --origam-switch__skeleton---width: 52px;
2218
+ --origam-switch__skeleton---height: 32px;
2219
+ --origam-switch__skeleton-track---background-color: color-mix(in srgb, currentColor 14%, transparent);
2220
+ --origam-switch__skeleton-thumb---background-color: color-mix(in srgb, currentColor 28%, transparent);
2221
+ --origam-switch__track--inset---height: 32px;
2222
+ --origam-switch__track--inset---width: 52px;
2179
2223
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
2180
2224
  --origam-slider-field---padding-block: var(--origam-space---2);
2181
2225
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -2198,11 +2242,24 @@
2198
2242
  --origam-slider-field__tick---size: 4px;
2199
2243
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
2200
2244
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
2201
- --origam-slider-field__tick---border-radius: var(--origam-radius---full);
2245
+ --origam-slider-field__tick---border-radius: 2px; /* #595 — PAS `radius---full` (9999px) : `.origam-slider-field-track__tick` livre `border-radius: 2px` en dur. Valeur reellement livree. */
2202
2246
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
2203
2247
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
2204
2248
  --origam-slider-field__label---padding: var(--origam-space---1);
2205
2249
  --origam-slider-field---opacity-disabled: var(--origam-opacity---32);
2250
+ /* #595 — canaux C2 ouverts : lus par OrigamSliderField / OrigamSliderFieldTrack, declares par personne. Valeurs = le repli deja rendu ; les `var()` internes sont recopies VERBATIM pour ne pas fermer le canal `--origam-color__*--inverse---*`, encore non declare. */
2251
+ --origam-slider-field-thumb__surface---border-color: rgba(0, 0, 0, 0.18);
2252
+ --origam-slider-field__buffered---background-color: color-mix(in srgb, currentColor 40%, transparent);
2253
+ --origam-slider-field__buffered---opacity: 0.5;
2254
+ --origam-slider-field__buffered--bare---background-color: color-mix(in srgb, currentColor 40%, transparent);
2255
+ --origam-slider-field__track---transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
2256
+ --origam-slider-field__hover-tooltip---background-color: var(--origam-color__surface---inverse);
2257
+ --origam-slider-field__hover-tooltip---color: var(--origam-color__text---inverse);
2258
+ --origam-slider-field--bare---accent-color: var(--origam-color__action--primary---bg);
2259
+ --origam-slider-field--bare---thumb-size: 12px;
2260
+ --origam-slider-field--bare---track-background-color: color-mix(in srgb, currentColor 25%, transparent);
2261
+ --origam-slider-field--bare---track-thickness: 2px;
2262
+ --origam-slider-field--bare---track-thickness-active: 4px;
2206
2263
  --origam-icon---color: currentColor;
2207
2264
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
2208
2265
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -2461,6 +2518,32 @@
2461
2518
  --origam-tabs__item---transition-easing: var(--origam-motion__easing---standard);
2462
2519
  --origam-tabs__indicator---color: var(--origam-color__action--primary---bg);
2463
2520
  --origam-tabs__indicator---height: var(--origam-border__width---2);
2521
+ /* Tabs — #596. Each value is exactly the literal (or token reference) the
2522
+ component SCSS already fell back to, so nothing moves on screen: the
2523
+ variant (--default / --pills / --underline) and item-state channels were
2524
+ simply never declared, so every theme edit to them was a no-op.
2525
+ --item--disabled---color and --item--hover---background-color keep their
2526
+ legacy hardcoded rgba(0, 0, 0, …) — that is what the DS renders today in
2527
+ BOTH themes, and swapping them for a semantic token would move the dark
2528
+ rendering, which is a design decision and not a token-wiring one.
2529
+ Declaring them here is what finally lets a theme fix that. */
2530
+ --origam-tabs--default---border-block-end-width: var(--origam-border__width---thin);
2531
+ --origam-tabs--default---border-block-end-color: var(--origam-color__border---subtle);
2532
+ --origam-tabs--underline---border-block-end-width: var(--origam-border__width---thin);
2533
+ --origam-tabs--underline---border-block-end-color: var(--origam-color__border---subtle);
2534
+ --origam-tabs--pills---background-color: rgba(0, 0, 0, 0);
2535
+ --origam-tabs--pills---gap: var(--origam-space---2);
2536
+ --origam-tabs--pills---padding: var(--origam-space---1);
2537
+ --origam-tabs__item--hover---color: currentColor;
2538
+ --origam-tabs__item--hover---background-color: rgba(0, 0, 0, 0.04);
2539
+ --origam-tabs__item--active---color: currentColor;
2540
+ --origam-tabs__item--active---background-color: rgba(0, 0, 0, 0);
2541
+ --origam-tabs__item--active---font-weight: var(--origam-font__weight---semibold);
2542
+ --origam-tabs__item--disabled---color: rgba(0, 0, 0, 0.38);
2543
+ --origam-tabs__item--disabled---background-color: rgba(0, 0, 0, 0);
2544
+ --origam-tabs__item--focus---outline-color: currentColor;
2545
+ --origam-tabs__item--pills--active---background-color: var(--origam-color__action--primary---bg);
2546
+ --origam-tabs__item--pills--active---color: var(--origam-color__action--primary---fg);
2464
2547
  --origam-tab-panels__panel---padding-block: var(--origam-space---4);
2465
2548
  --origam-tab-panels__panel---padding-inline: var(--origam-space---0);
2466
2549
  --origam-tabs__panel---transition-duration: var(--origam-motion__duration---fast);
@@ -2647,6 +2730,26 @@
2647
2730
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
2648
2731
  --origam-audio--error---gap: var(--origam-space---2);
2649
2732
  --origam-audio--error---icon-font-size: var(--origam-font__size---lg);
2733
+ /* #594 — canaux C2 ouverts : lus par OrigamAudio depuis des selecteurs VIVANTS, declares par personne. Valeurs = le repli deja rendu. */
2734
+ --origam-audio__header---margin-bottom: 12px;
2735
+ --origam-audio__btn---size: 28px;
2736
+ --origam-audio__btn---icon-size: 16px;
2737
+ --origam-audio__meta-separator---content: "\00B7"; /* #594 — U+00B7 ECHAPPE, et il DOIT le rester. Ecrit en litteral, ce seul caractere non-ASCII faisait emettre a dart-sass un BOM en tete de main.css (`--style=compressed` pose un BOM la ou le mode etendu poserait `@charset`). Un BOM n est PAS retire a l interieur d un `<style>` : il se collait au premier selecteur, qui ne matchait alors plus rien — les 156 declarations primitives mortes, tous les tokens semantiques et derives a vide. Mesure le 2026-09-30 : 7 echecs sur derived-tokens-subtree.spec.ts. L echappement rend le MEME glyphe (verifie en Chromium) et garde la feuille compilee en ASCII pur. Regle : aucune valeur de token ne doit contenir de caractere non-ASCII — utiliser la forme \XXXX. */
2738
+ --origam-audio__playlist---max-height: 220px;
2739
+ --origam-audio__playlist---padding-top: 8px;
2740
+ --origam-audio__playlist---margin-top: 12px;
2741
+ --origam-audio__playlist---border-color: color-mix(in srgb, currentColor 8%, transparent);
2742
+ /* Les deux lignes de meta de la playlist resolvaient `var(--origam-color__text---secondary)` par repli — exactement ce que `--origam-audio---secondary-color` declare deja. Les brancher dessus ouvre les deux canaux ET rend ce token atteignable, a valeur rendue identique. */
2743
+ --origam-audio__playlist-subtitle---color: var(--origam-audio---secondary-color);
2744
+ --origam-audio__playlist-duration---color: var(--origam-audio---secondary-color);
2745
+ --origam-audio__playlist-item__prepend---margin-inline-end: 12px;
2746
+ --origam-audio--compact---padding: 8px 12px;
2747
+ --origam-audio--compact__header---gap: 12px;
2748
+ --origam-audio--compact__btn---size: 24px;
2749
+ --origam-audio--compact__btn---icon-size: 14px;
2750
+ --origam-audio--compact__play-btn---size: 56px;
2751
+ --origam-audio--compact__play-btn---icon-size: 40px;
2752
+ --origam-audio--compact__progress---height: 3px;
2650
2753
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
2651
2754
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
2652
2755
  --origam-media-scrubber---track-background-color: var(--origam-color__surface---overlay);
@@ -827,6 +827,27 @@ defineExpose({
827
827
  }
828
828
  }
829
829
 
830
+ /*
831
+ * ⛔ #594 — SEPT tokens `--origam-audio*` que les feuilles declarent et
832
+ * que ce SCSS ne lit pas. Ils restent en baseline
833
+ * `token-var-channels-dormant.json` :
834
+ *
835
+ * · `__cover---border-radius` (radius---md = 8px) — la pochette est un
836
+ * DISQUE : `border-radius: 50%` ci-dessous, sillons concentriques et
837
+ * trou de broche compris. Cabler par le nom transformerait le vinyle
838
+ * en carre arrondi. Exemple type du « ne jamais cabler un orphelin
839
+ * sur la foi de son nom » ;
840
+ * · `__artist---color`, `__album---color`, `__duration---color`
841
+ * (text---secondary) — les trois elements existent, mais leur
842
+ * couleur vient de `.origam-audio__meta`, en
843
+ * `color-mix(in srgb, currentColor 60%, transparent)`. La valeur
844
+ * declaree est une AUTRE couleur ;
845
+ * · `__body---gap` (space---3), `__compact---body-gap` (space---2) —
846
+ * aucune classe `.origam-audio__body` dans le template ;
847
+ * · `__transport---btn-icon-size` (20px) — la taille livree pour les
848
+ * boutons de la rangee est 16px (`__btn---icon-size`, cable), et le
849
+ * bloc `&__transport` est de toute facon un selecteur mort.
850
+ */
830
851
  &__cover {
831
852
  margin: 0;
832
853
  display: flex;
@@ -1028,6 +1049,27 @@ defineExpose({
1028
1049
  color: var(--origam-audio__waveform---color, color-mix(in srgb, currentColor 50%, transparent));
1029
1050
  }
1030
1051
 
1052
+ /*
1053
+ * ⛔ #594 — SELECTEURS MORTS, mesure du 2026-09-27. Ni
1054
+ * `.origam-audio__transport`, ni `__nav-btn`, ni `__play-btn`, ni
1055
+ * `__time`, ni `__spacer`, ni `__volume`, ni `__cast`, ni `__config`
1056
+ * n existent dans le template : la barre de transport a ete remplacee
1057
+ * par `OrigamMediaController` (`.origam-audio__controller`, ligne 65),
1058
+ * et ces blocs sont restes. Verifie sur les 45 variants de la story
1059
+ * dans Chromium — `document.querySelector` renvoie `null` partout.
1060
+ *
1061
+ * Consequence pour la campagne C2 : les tokens que ces regles lisent
1062
+ * (`__transport---min-height`, les quatre `__nav-btn---*`,
1063
+ * `__play-btn---color`, `__play-btn---icon-size`, `__time---color`)
1064
+ * sont LAISSES non declares a dessein. Les declarer ne deplacerait
1065
+ * aucun pixel — precisement parce que rien ne matche — mais graverait
1066
+ * dans le canal public des noms qu un theme pourrait regler sans
1067
+ * jamais rien voir changer. Ils restent en baseline
1068
+ * `token-var-channels.json` jusqu a ce que ces blocs soient soit
1069
+ * supprimes, soit recables sur le controleur (cf. #578).
1070
+ *
1071
+ * Meme cas une trentaine de lignes plus bas pour `&__playlist-artist`.
1072
+ */
1031
1073
  &__transport {
1032
1074
  display: flex;
1033
1075
  align-items: center;
@@ -1120,8 +1162,22 @@ defineExpose({
1120
1162
  align-items: center;
1121
1163
  gap: var(--origam-audio--error---gap, 6px);
1122
1164
  padding: var(--origam-audio--error---padding, 8px 12px);
1123
- background-color: var(--origam-audio--error---background-color, var(--origam-color__status--error--bg, transparent));
1124
- color: var(--origam-audio--error---color, var(--origam-color__status--error---color, inherit));
1165
+ /*
1166
+ * #594 — EFFONDREMENT de deux replis fantomes. Les deux lignes
1167
+ * lisaient `var(RUNG1, var(--origam-color__status--error---*, T))`.
1168
+ * Mesure : la famille `--origam-color__status--*` n est declaree
1169
+ * NULLE PART (zero occurrence en partie gauche dans
1170
+ * `assets/css/tokens/*` ni `assets/scss/tokens/*`) — c est une
1171
+ * grammaire fantome, et `--error--bg` y ecrivait meme `--bg` au
1172
+ * lieu de `---bg`. Les deux RUNG1 sont eux declares light ET dark
1173
+ * (`--origam-color__feedback--danger---bgSubtle` / `---fgSubtle`),
1174
+ * donc l echelon fantome etait INATTEIGNABLE par construction : il
1175
+ * ne peignait rien et ne pouvait rien peindre. Retire du site de
1176
+ * lecture — zero pixel deplace, deux canaux morts en moins, et pas
1177
+ * un nom faux grave dans le canal public.
1178
+ */
1179
+ background-color: var(--origam-audio--error---background-color, transparent);
1180
+ color: var(--origam-audio--error---color, inherit);
1125
1181
  border-radius: var(--origam-audio--error---border-radius, var(--origam-radius---sm, 4px));
1126
1182
  font-size: var(--origam-audio--error---font-size, 0.875rem);
1127
1183
  grid-column: 1 / -1;
@@ -1260,6 +1316,14 @@ defineExpose({
1260
1316
  }
1261
1317
  }
1262
1318
 
1319
+ /*
1320
+ * ⛔ #594 — SELECTEUR MORT : aucune `.origam-audio__playlist-artist`
1321
+ * dans le template (la ligne de playlist rend un `OrigamListItem`,
1322
+ * dont le sous-titre porte `.origam-list-item__subtitle`, cable juste
1323
+ * au-dessus). `--origam-audio__playlist-artist---color` reste donc non
1324
+ * declare, pour la meme raison que le bloc `&__transport` : un canal
1325
+ * qui ne peint rien ne doit pas entrer dans la feuille publique.
1326
+ */
1263
1327
  &__playlist-artist {
1264
1328
  color: var(--origam-audio__playlist-artist---color, var(--origam-color__text---secondary));
1265
1329
  font-size: 12px;