origam 2.18.18 → 2.18.20

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 (81) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +124 -6
  4. package/dist/src/assets/css/tokens/light.css +62 -3
  5. package/dist/src/assets/css/tokens/origam-utilities.css +30 -0
  6. package/dist/src/assets/css/tokens/primitive.css +5 -0
  7. package/dist/src/assets/scss/tokens/_dark.scss +124 -6
  8. package/dist/src/assets/scss/tokens/_light.scss +62 -3
  9. package/dist/src/assets/scss/tokens/_origam-utilities.scss +30 -0
  10. package/dist/src/assets/scss/tokens/_primitive.scss +5 -0
  11. package/dist/src/components/Audio/OrigamAudio.vue +66 -2
  12. package/dist/src/components/Chip/OrigamChip.vue +34 -0
  13. package/dist/src/components/Field/OrigamField.vue +76 -3
  14. package/dist/src/components/List/OrigamList.vue +90 -3
  15. package/dist/src/components/Main/OrigamMain.vue +2 -2
  16. package/dist/src/components/Media/OrigamMediaScrubber.vue +11 -1
  17. package/dist/src/components/SliderField/OrigamSliderField.vue +138 -3
  18. package/dist/src/components/SliderField/OrigamSliderFieldTrack.vue +12 -1
  19. package/dist/src/components/Snackbar/OrigamSnackbar.vue +2 -2
  20. package/dist/src/components/Switch/OrigamSwitch.vue +32 -0
  21. package/dist/src/components/TextField/OrigamTextField.vue +3 -1
  22. package/dist/src/components/Video/OrigamVideo.vue +11 -1
  23. package/dist/src/composables/Commons/backdrop.composable.cjs +50 -0
  24. package/dist/src/composables/Commons/backdrop.composable.d.ts +32 -0
  25. package/dist/src/composables/Commons/backdrop.composable.js +33 -0
  26. package/dist/src/composables/Commons/layout.composable.cjs +2 -2
  27. package/dist/src/composables/Commons/layout.composable.d.ts +16 -2
  28. package/dist/src/composables/Commons/layout.composable.js +1 -1
  29. package/dist/src/composables/Commons/opacity.composable.cjs +50 -0
  30. package/dist/src/composables/Commons/opacity.composable.d.ts +33 -0
  31. package/dist/src/composables/Commons/opacity.composable.js +34 -0
  32. package/dist/src/composables/Commons/stateEffect.composable.cjs +17 -2
  33. package/dist/src/composables/Commons/stateEffect.composable.d.ts +7 -2
  34. package/dist/src/composables/Commons/stateEffect.composable.js +23 -2
  35. package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +44 -9
  36. package/dist/src/composables/Commons/theme-props-resolver.composable.d.ts +33 -1
  37. package/dist/src/composables/Commons/theme-props-resolver.composable.js +42 -10
  38. package/dist/src/composables/index.cjs +24 -0
  39. package/dist/src/composables/index.d.ts +2 -0
  40. package/dist/src/composables/index.js +2 -0
  41. package/dist/src/consts/Commons/backdrop.const.cjs +15 -0
  42. package/dist/src/consts/Commons/backdrop.const.d.ts +47 -0
  43. package/dist/src/consts/Commons/backdrop.const.js +9 -0
  44. package/dist/src/consts/Commons/opacity.const.cjs +20 -0
  45. package/dist/src/consts/Commons/opacity.const.d.ts +58 -0
  46. package/dist/src/consts/Commons/opacity.const.js +14 -0
  47. package/dist/src/consts/Commons/variant-preset.const.cjs +8 -0
  48. package/dist/src/consts/Commons/variant-preset.const.d.ts +60 -0
  49. package/dist/src/consts/Commons/variant-preset.const.js +2 -0
  50. package/dist/src/consts/index.cjs +33 -0
  51. package/dist/src/consts/index.d.ts +3 -0
  52. package/dist/src/consts/index.js +3 -0
  53. package/dist/src/interfaces/Commons/backdrop.interface.cjs +1 -0
  54. package/dist/src/interfaces/Commons/backdrop.interface.d.ts +49 -0
  55. package/dist/src/interfaces/Commons/backdrop.interface.js +0 -0
  56. package/dist/src/interfaces/Commons/opacity.interface.cjs +1 -0
  57. package/dist/src/interfaces/Commons/opacity.interface.d.ts +37 -0
  58. package/dist/src/interfaces/Commons/opacity.interface.js +0 -0
  59. package/dist/src/interfaces/Commons/state-effect.interface.d.ts +31 -0
  60. package/dist/src/interfaces/Commons/theme.interface.d.ts +33 -0
  61. package/dist/src/interfaces/Masonry/masonry.interface.d.ts +2 -2
  62. package/dist/src/interfaces/index.cjs +22 -0
  63. package/dist/src/interfaces/index.d.ts +2 -0
  64. package/dist/src/interfaces/index.js +2 -0
  65. package/dist/src/origam.cjs +2 -1
  66. package/dist/src/origam.js +8 -2
  67. package/dist/src/types/Commons/backdrop.type.cjs +1 -0
  68. package/dist/src/types/Commons/backdrop.type.d.ts +23 -0
  69. package/dist/src/types/Commons/backdrop.type.js +0 -0
  70. package/dist/src/types/Commons/opacity.type.cjs +1 -0
  71. package/dist/src/types/Commons/opacity.type.d.ts +36 -0
  72. package/dist/src/types/Commons/opacity.type.js +0 -0
  73. package/dist/src/types/Commons/state-effect.type.d.ts +2 -1
  74. package/dist/src/types/Commons/variant-preset.type.cjs +1 -0
  75. package/dist/src/types/Commons/variant-preset.type.d.ts +73 -0
  76. package/dist/src/types/Commons/variant-preset.type.js +0 -0
  77. package/dist/src/types/index.cjs +33 -0
  78. package/dist/src/types/index.d.ts +3 -0
  79. package/dist/src/types/index.js +3 -0
  80. package/dist/src/types/tokens.type.d.ts +1 -1
  81. 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;
@@ -1133,7 +1142,7 @@
1133
1142
  --origam-field---padding-top: var(--origam-space---2);
1134
1143
  --origam-field---padding-bottom: 6px;
1135
1144
  --origam-field---font-size: 16px;
1136
- --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). */
1137
1146
  --origam-field---border-radius: var(--origam-radius---sm);
1138
1147
  --origam-field---border-color: var(--origam-color__border---default);
1139
1148
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -1152,6 +1161,11 @@
1152
1161
  --origam-field---focus-ring-width: 0px;
1153
1162
  --origam-field---focus-ring-offset: 0px;
1154
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;
1155
1169
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
1156
1170
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
1157
1171
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -1819,8 +1833,10 @@
1819
1833
  --origam-list---pointer-events: auto;
1820
1834
  --origam-list---user-select: auto;
1821
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;
1822
1839
  --origam-list---density: 0px;
1823
- --origam-list---indent-padding-nav: -8px;
1824
1840
  --origam-list---slim-prepend-width: 28px;
1825
1841
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
1826
1842
  --origam-list__overlay---border-radius: inherit;
@@ -2278,6 +2294,16 @@
2278
2294
  --origam-switch__label---font-size: var(--origam-font__size---md);
2279
2295
  --origam-switch__label---padding-inline: var(--origam-space---2);
2280
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;
2281
2307
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
2282
2308
  --origam-slider-field---padding-block: var(--origam-space---2);
2283
2309
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -2300,11 +2326,24 @@
2300
2326
  --origam-slider-field__tick---size: 4px;
2301
2327
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
2302
2328
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
2303
- --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. */
2304
2330
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
2305
2331
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
2306
2332
  --origam-slider-field__label---padding: var(--origam-space---1);
2307
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;
2308
2347
  --origam-icon---color: currentColor;
2309
2348
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
2310
2349
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -2775,6 +2814,26 @@
2775
2814
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
2776
2815
  --origam-audio--error---gap: var(--origam-space---2);
2777
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;
2778
2837
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
2779
2838
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
2780
2839
  --origam-media-scrubber---track-background-color: var(--origam-color__surface---overlay);
@@ -3486,6 +3545,15 @@
3486
3545
  --origam-chip__filter---transition-property: transform, opacity;
3487
3546
  --origam-chip__filter---transition-duration: var(--origam-motion__duration---normal);
3488
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;
3489
3557
  --origam-avatar---background-color: var(--origam-color__surface---overlay);
3490
3558
  --origam-avatar---color: var(--origam-color__text---secondary);
3491
3559
  --origam-avatar---border-color: currentColor;
@@ -4095,7 +4163,7 @@
4095
4163
  --origam-field---padding-top: var(--origam-space---2);
4096
4164
  --origam-field---padding-bottom: 6px;
4097
4165
  --origam-field---font-size: 16px;
4098
- --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). */
4099
4167
  --origam-field---border-radius: var(--origam-radius---sm);
4100
4168
  --origam-field---border-color: var(--origam-color__border---default);
4101
4169
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -4114,6 +4182,11 @@
4114
4182
  --origam-field---focus-ring-width: 0px;
4115
4183
  --origam-field---focus-ring-offset: 0px;
4116
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;
4117
4190
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
4118
4191
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
4119
4192
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -4781,8 +4854,10 @@
4781
4854
  --origam-list---pointer-events: auto;
4782
4855
  --origam-list---user-select: auto;
4783
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;
4784
4860
  --origam-list---density: 0px;
4785
- --origam-list---indent-padding-nav: -8px;
4786
4861
  --origam-list---slim-prepend-width: 28px;
4787
4862
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
4788
4863
  --origam-list__overlay---border-radius: inherit;
@@ -5239,6 +5314,16 @@
5239
5314
  --origam-switch__label---font-size: var(--origam-font__size---md);
5240
5315
  --origam-switch__label---padding-inline: var(--origam-space---2);
5241
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;
5242
5327
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
5243
5328
  --origam-slider-field---padding-block: var(--origam-space---2);
5244
5329
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -5261,11 +5346,24 @@
5261
5346
  --origam-slider-field__tick---size: 4px;
5262
5347
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
5263
5348
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
5264
- --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. */
5265
5350
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
5266
5351
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
5267
5352
  --origam-slider-field__label---padding: var(--origam-space---1);
5268
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;
5269
5367
  --origam-icon---color: currentColor;
5270
5368
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
5271
5369
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -5736,6 +5834,26 @@
5736
5834
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
5737
5835
  --origam-audio--error---gap: var(--origam-space---2);
5738
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;
5739
5857
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
5740
5858
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
5741
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;
@@ -1035,7 +1044,7 @@
1035
1044
  --origam-field---padding-top: var(--origam-space---2);
1036
1045
  --origam-field---padding-bottom: 6px;
1037
1046
  --origam-field---font-size: 16px;
1038
- --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). */
1039
1048
  --origam-field---border-radius: var(--origam-radius---sm);
1040
1049
  --origam-field---border-color: var(--origam-color__border---default);
1041
1050
  --origam-field---border-width: var(--origam-border__width---thin);
@@ -1054,6 +1063,11 @@
1054
1063
  --origam-field---focus-ring-width: 0px;
1055
1064
  --origam-field---focus-ring-offset: 0px;
1056
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;
1057
1071
  --origam-field---variant-outlined-background-color: rgba(0, 0, 0, 0);
1058
1072
  --origam-field__overlay---background-color: var(--origam-color__overlay---scrim);
1059
1073
  --origam-field__overlay---opacity: var(--origam-opacity---0);
@@ -1723,8 +1737,10 @@
1723
1737
  --origam-list---pointer-events: auto;
1724
1738
  --origam-list---user-select: auto;
1725
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;
1726
1743
  --origam-list---density: 0px;
1727
- --origam-list---indent-padding-nav: -8px;
1728
1744
  --origam-list---slim-prepend-width: 28px;
1729
1745
  --origam-list__overlay---background-color: var(--origam-color__overlay---scrim);
1730
1746
  --origam-list__overlay---border-radius: inherit;
@@ -2194,6 +2210,16 @@
2194
2210
  --origam-switch__label---font-size: var(--origam-font__size---md);
2195
2211
  --origam-switch__label---padding-inline: var(--origam-space---2);
2196
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;
2197
2223
  --origam-switch---opacity-disabled: var(--origam-opacity---32);
2198
2224
  --origam-slider-field---padding-block: var(--origam-space---2);
2199
2225
  --origam-slider-field---transition-duration: var(--origam-motion__duration---fast);
@@ -2216,11 +2242,24 @@
2216
2242
  --origam-slider-field__tick---size: 4px;
2217
2243
  --origam-slider-field__tick---background-color: var(--origam-color__text---disabled);
2218
2244
  --origam-slider-field__tick---background-color-active: var(--origam-color__action--primary---fg);
2219
- --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. */
2220
2246
  --origam-slider-field__label---color: var(--origam-color__text---secondary);
2221
2247
  --origam-slider-field__label---font-size: var(--origam-font__size---sm);
2222
2248
  --origam-slider-field__label---padding: var(--origam-space---1);
2223
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;
2224
2263
  --origam-icon---color: currentColor;
2225
2264
  --origam-icon---transition-duration: var(--origam-motion__duration---fast);
2226
2265
  --origam-icon---transition-timing-function: var(--origam-motion__easing---standard);
@@ -2691,6 +2730,26 @@
2691
2730
  --origam-audio--error---padding: var(--origam-space---2) var(--origam-space---3);
2692
2731
  --origam-audio--error---gap: var(--origam-space---2);
2693
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;
2694
2753
  --origam-media-scrubber---color: var(--origam-color__action--primary---bg);
2695
2754
  --origam-media-scrubber---primary: var(--origam-color__action--primary---bg);
2696
2755
  --origam-media-scrubber---track-background-color: var(--origam-color__surface---overlay);
@@ -123,3 +123,33 @@
123
123
  .origam--text-lg { font-size: var(--origam-font__size---lg); }
124
124
  .origam--text-xl { font-size: var(--origam-font__size---xl); }
125
125
  .origam--text-2xl { font-size: var(--origam-font__size---2xl); }
126
+
127
+ /* --- Opacity --------------------------------------------- */
128
+ /* */
129
+ /* Emitted by `useOpacity` when the value lands on a rung of */
130
+ /* the primitive ladder. `useOpacity` ALSO emits the matching */
131
+ /* inline `opacity:` declaration (strategy A). That is not */
132
+ /* redundancy: a scoped component rule is (0,2,0) and beats */
133
+ /* this (0,1,0) class whatever the load order, and OrigamBtn */
134
+ /* already declares `opacity` in its own SCSS. See #514. */
135
+ .origam--opacity-0 { opacity: var(--origam-opacity---0); }
136
+ .origam--opacity-12 { opacity: var(--origam-opacity---12); }
137
+ .origam--opacity-26 { opacity: var(--origam-opacity---26); }
138
+ .origam--opacity-32 { opacity: var(--origam-opacity---32); }
139
+ .origam--opacity-50 { opacity: var(--origam-opacity---50); }
140
+ .origam--opacity-60 { opacity: var(--origam-opacity---60); }
141
+ .origam--opacity-70 { opacity: var(--origam-opacity---70); }
142
+ .origam--opacity-87 { opacity: var(--origam-opacity---87); }
143
+ .origam--opacity-100 { opacity: var(--origam-opacity---100); }
144
+
145
+ /* --- Backdrop blur --------------------------------------- */
146
+ /* */
147
+ /* Emitted by `useBackdrop`. The -webkit- twin is required: */
148
+ /* Safari still ships backdrop-filter prefixed only. Rung */
149
+ /* values follow the measured distribution of blur() literals */
150
+ /* in this repo, not a tidy doubling, hence sm = 6px. */
151
+ .origam--backdrop-blur-xs { backdrop-filter: blur(var(--origam-blur---xs)); -webkit-backdrop-filter: blur(var(--origam-blur---xs)); }
152
+ .origam--backdrop-blur-sm { backdrop-filter: blur(var(--origam-blur---sm)); -webkit-backdrop-filter: blur(var(--origam-blur---sm)); }
153
+ .origam--backdrop-blur-md { backdrop-filter: blur(var(--origam-blur---md)); -webkit-backdrop-filter: blur(var(--origam-blur---md)); }
154
+ .origam--backdrop-blur-lg { backdrop-filter: blur(var(--origam-blur---lg)); -webkit-backdrop-filter: blur(var(--origam-blur---lg)); }
155
+ .origam--backdrop-blur-xl { backdrop-filter: blur(var(--origam-blur---xl)); -webkit-backdrop-filter: blur(var(--origam-blur---xl)); }
@@ -162,6 +162,11 @@
162
162
  --origam-opacity---70: 0.7;
163
163
  --origam-opacity---87: 0.87;
164
164
  --origam-opacity---100: 1;
165
+ --origam-blur---xs: 4px;
166
+ --origam-blur---sm: 6px;
167
+ --origam-blur---md: 8px;
168
+ --origam-blur---lg: 16px;
169
+ --origam-blur---xl: 24px;
165
170
  --origam-border__width---0: 0px;
166
171
  --origam-border__width---2: 2px;
167
172
  --origam-border__width---4: 4px;