origam 2.18.13 → 2.18.14

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.
@@ -322,14 +322,23 @@ defineExpose({
322
322
  overflow: hidden;
323
323
  position: var(--origam-alert---position);
324
324
 
325
- padding-block-start: calc(var(--origam-alert---padding-block-start) - var(--origam-alert---density));
326
- padding-block-end: calc(var(--origam-alert---padding-block-end) - var(--origam-alert---density));
327
- padding-inline-start: calc(var(--origam-alert---padding-inline-start) - var(--origam-alert---density));
328
- padding-inline-end: calc(var(--origam-alert---padding-inline-end) - var(--origam-alert---density));
329
- margin-block-start: var(--origam-alert---margin-block-start);
330
- margin-block-end: var(--origam-alert---margin-block-end);
331
- margin-inline-start: var(--origam-alert---margin-inline-start);
332
- margin-inline-end: var(--origam-alert---margin-inline-end);
325
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
326
+ // `:where(.origam-alert[data-v-hash])` = (0,0,0), so the scale-driven
327
+ // utility classes (`.origam--p-6` from `padding="6"`, `.origam--m-6`
328
+ // from `margin="6"`) win the cascade. Without it the scoped compiler
329
+ // pushes this rule to (0,2,0), beats the utility's (0,1,0), and the
330
+ // scale form of both props goes silently inert. Only the DEFAULT is
331
+ // lowered — modifier / state rules keep their (0,2,0) and still win.
332
+ :where(&) {
333
+ padding-block-start: calc(var(--origam-alert---padding-block-start) - var(--origam-alert---density));
334
+ padding-block-end: calc(var(--origam-alert---padding-block-end) - var(--origam-alert---density));
335
+ padding-inline-start: calc(var(--origam-alert---padding-inline-start) - var(--origam-alert---density));
336
+ padding-inline-end: calc(var(--origam-alert---padding-inline-end) - var(--origam-alert---density));
337
+ margin-block-start: var(--origam-alert---margin-block-start);
338
+ margin-block-end: var(--origam-alert---margin-block-end);
339
+ margin-inline-start: var(--origam-alert---margin-inline-start);
340
+ margin-inline-end: var(--origam-alert---margin-inline-end);
341
+ }
333
342
 
334
343
  border-top-width: var(--origam-alert---border-top-width, var(--origam-alert---border-width, 0));
335
344
  border-right-width: var(--origam-alert---border-right-width, var(--origam-alert---border-width, 0));
@@ -756,7 +756,19 @@ defineExpose({
756
756
  display: flex;
757
757
  flex-direction: column;
758
758
  position: var(--origam-audio---position, static);
759
- padding: var(--origam-audio---padding, 16px);
759
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
760
+ // `:where(.origam-audio[data-v-hash])` = (0,0,0), so the
761
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
762
+ // wins the cascade. Without it the scoped compiler pushes this
763
+ // rule to (0,2,0) and beats the utility's (0,1,0).
764
+ // Only the DEFAULT is lowered: `&--compact` below still declares
765
+ // `padding` at (0,2,0) and therefore still wins whenever the
766
+ // compact variant is active — which is the point of #950's
767
+ // decision (modifiers must never lose to a utility class).
768
+ :where(&) {
769
+ padding: var(--origam-audio---padding, 16px);
770
+ }
771
+
760
772
  border-radius: var(--origam-audio---border-radius, var(--origam-radius---lg, 12px));
761
773
  color: var(--origam-audio---color, var(--origam-color__text---primary));
762
774
  background-color: var(--origam-audio---background-color, var(--origam-color__surface---raised));
@@ -231,9 +231,27 @@ defineExpose({
231
231
  --origam-blockquote---resolved-author-color: var(--origam-blockquote__author---color, var(--origam-color__text---secondary, #525252));
232
232
 
233
233
  position: relative;
234
- margin: 0;
235
- padding-block: var(--origam-blockquote---resolved-padding-block);
236
- padding-inline: var(--origam-blockquote---resolved-padding-inline);
234
+
235
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
236
+ // `:where(.origam-blockquote[data-v-hash])` = (0,0,0), so the
237
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
238
+ // win the cascade. Without it the scoped compiler pushes this rule
239
+ // to (0,2,0) and beats the utility's (0,1,0).
240
+ //
241
+ // ⚠️ Deliberately PARTIAL. The `--variant-*` rules further down are
242
+ // modifiers and keep their (0,2,0) per #950's decision — and
243
+ // `variant` defaults to `'default'`, so
244
+ // `.origam-blockquote--variant-default` is ALWAYS present and owns
245
+ // `padding-inline-start`. After this change `padding-block-*` and
246
+ // `padding-inline-end` answer the utility; `padding-inline-start`
247
+ // stays held by the active variant. That is the intended trade:
248
+ // the variant's accent-bar offset must not lose to a utility.
249
+ :where(&) {
250
+ margin: 0;
251
+ padding-block: var(--origam-blockquote---resolved-padding-block);
252
+ padding-inline: var(--origam-blockquote---resolved-padding-inline);
253
+ }
254
+
237
255
  font-family: var(--origam-blockquote---resolved-font-family);
238
256
  font-size: var(--origam-blockquote---resolved-font-size);
239
257
  font-style: var(--origam-blockquote---resolved-font-style);
@@ -727,8 +727,17 @@ defineExpose({
727
727
  position: relative;
728
728
  color: var(--origam-bracket---color, currentColor);
729
729
  background-color: var(--origam-bracket---background-color, transparent);
730
- padding-block: var(--origam-bracket---padding-block, 16px);
731
- padding-inline: var(--origam-bracket---padding-inline, 16px);
730
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
731
+ // `:where(.origam-bracket[data-v-hash])` = (0,0,0), so the
732
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
733
+ // wins the cascade. Without it the scoped compiler pushes this
734
+ // rule to (0,2,0) and beats the utility's (0,1,0). Only the
735
+ // DEFAULT is lowered — modifier / state rules keep their (0,2,0).
736
+ :where(&) {
737
+ padding-block: var(--origam-bracket---padding-block, 16px);
738
+ padding-inline: var(--origam-bracket---padding-inline, 16px);
739
+ }
740
+
732
741
  overflow: auto;
733
742
 
734
743
  &__tree {
@@ -221,15 +221,24 @@ defineExpose({
221
221
  border-width: var(--origam-breadcrumb---border-width);
222
222
  border-radius: var(--origam-breadcrumb---border-radius);
223
223
 
224
- padding-block-start: calc(var(--origam-breadcrumb---padding-block-start) - var(--origam-breadcrumb---density));
225
- padding-block-end: calc(var(--origam-breadcrumb---padding-block-end) - var(--origam-breadcrumb---density));
226
- padding-inline-start: calc(var(--origam-breadcrumb---padding-inline-start) - var(--origam-breadcrumb---density));
227
- padding-inline-end: calc(var(--origam-breadcrumb---padding-inline-end) - var(--origam-breadcrumb---density));
224
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
225
+ // `:where(.origam-breadcrumb[data-v-hash])` = (0,0,0), so the
226
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
227
+ // win the cascade. Without it the scoped compiler pushes this rule
228
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
229
+ // both props goes silently inert. Only the DEFAULT is lowered —
230
+ // modifier / state rules keep their (0,2,0) and still win.
231
+ :where(&) {
232
+ padding-block-start: calc(var(--origam-breadcrumb---padding-block-start) - var(--origam-breadcrumb---density));
233
+ padding-block-end: calc(var(--origam-breadcrumb---padding-block-end) - var(--origam-breadcrumb---density));
234
+ padding-inline-start: calc(var(--origam-breadcrumb---padding-inline-start) - var(--origam-breadcrumb---density));
235
+ padding-inline-end: calc(var(--origam-breadcrumb---padding-inline-end) - var(--origam-breadcrumb---density));
228
236
 
229
- margin-block-start: var(--origam-breadcrumb---margin-block-start);
230
- margin-block-end: var(--origam-breadcrumb---margin-block-end);
231
- margin-inline-start: var(--origam-breadcrumb---margin-inline-start);
232
- margin-inline-end: var(--origam-breadcrumb---margin-inline-end);
237
+ margin-block-start: var(--origam-breadcrumb---margin-block-start);
238
+ margin-block-end: var(--origam-breadcrumb---margin-block-end);
239
+ margin-inline-start: var(--origam-breadcrumb---margin-inline-start);
240
+ margin-inline-end: var(--origam-breadcrumb---margin-inline-end);
241
+ }
233
242
 
234
243
  &__items {
235
244
  display: flex;
@@ -131,15 +131,24 @@ defineExpose({
131
131
  border-width: var(--origam-breadcrumb-divider---border-width);
132
132
  border-radius: var(--origam-breadcrumb-divider---border-radius);
133
133
 
134
- padding-block-start: calc(var(--origam-breadcrumb-divider---padding-block-start) - var(--origam-breadcrumb-divider---density));
135
- padding-block-end: calc(var(--origam-breadcrumb-divider---padding-block-end) - var(--origam-breadcrumb-divider---density));
136
- padding-inline-start: calc(var(--origam-breadcrumb-divider---padding-inline-start) - var(--origam-breadcrumb-divider---density));
137
- padding-inline-end: calc(var(--origam-breadcrumb-divider---padding-inline-end) - var(--origam-breadcrumb-divider---density));
134
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
135
+ // `:where(.origam-breadcrumb-divider[data-v-hash])` = (0,0,0), so
136
+ // the scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
137
+ // win the cascade. Without it the scoped compiler pushes this rule
138
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
139
+ // both props goes silently inert. Only the DEFAULT is lowered —
140
+ // `&--density-*` and other modifiers keep their (0,2,0).
141
+ :where(&) {
142
+ padding-block-start: calc(var(--origam-breadcrumb-divider---padding-block-start) - var(--origam-breadcrumb-divider---density));
143
+ padding-block-end: calc(var(--origam-breadcrumb-divider---padding-block-end) - var(--origam-breadcrumb-divider---density));
144
+ padding-inline-start: calc(var(--origam-breadcrumb-divider---padding-inline-start) - var(--origam-breadcrumb-divider---density));
145
+ padding-inline-end: calc(var(--origam-breadcrumb-divider---padding-inline-end) - var(--origam-breadcrumb-divider---density));
138
146
 
139
- margin-block-start: var(--origam-breadcrumb-divider---margin-block-start);
140
- margin-block-end: var(--origam-breadcrumb-divider---margin-block-end);
141
- margin-inline-start: var(--origam-breadcrumb-divider---margin-inline-start);
142
- margin-inline-end: var(--origam-breadcrumb-divider---margin-inline-end);
147
+ margin-block-start: var(--origam-breadcrumb-divider---margin-block-start);
148
+ margin-block-end: var(--origam-breadcrumb-divider---margin-block-end);
149
+ margin-inline-start: var(--origam-breadcrumb-divider---margin-inline-start);
150
+ margin-inline-end: var(--origam-breadcrumb-divider---margin-inline-end);
151
+ }
143
152
 
144
153
  &--density-comfortable {
145
154
  --origam-breadcrumb-divider---density: -8px;
@@ -252,15 +252,24 @@ defineExpose({
252
252
  border-width: var(--origam-breadcrumb-item---border-width);
253
253
  border-radius: var(--origam-breadcrumb-item---border-radius);
254
254
 
255
- padding-block-start: calc(var(--origam-breadcrumb-item---padding-block-start) - var(--origam-breadcrumb-item---density));
256
- padding-block-end: calc(var(--origam-breadcrumb-item---padding-block-end) - var(--origam-breadcrumb-item---density));
257
- padding-inline-start: calc(var(--origam-breadcrumb-item---padding-inline-start) - var(--origam-breadcrumb-item---density));
258
- padding-inline-end: calc(var(--origam-breadcrumb-item---padding-inline-end) - var(--origam-breadcrumb-item---density));
255
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
256
+ // `:where(.origam-breadcrumb-item[data-v-hash])` = (0,0,0), so the
257
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
258
+ // win the cascade. Without it the scoped compiler pushes this rule
259
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
260
+ // both props goes silently inert. Only the DEFAULT is lowered —
261
+ // `&--disabled`, `&--active` and the rest keep their (0,2,0).
262
+ :where(&) {
263
+ padding-block-start: calc(var(--origam-breadcrumb-item---padding-block-start) - var(--origam-breadcrumb-item---density));
264
+ padding-block-end: calc(var(--origam-breadcrumb-item---padding-block-end) - var(--origam-breadcrumb-item---density));
265
+ padding-inline-start: calc(var(--origam-breadcrumb-item---padding-inline-start) - var(--origam-breadcrumb-item---density));
266
+ padding-inline-end: calc(var(--origam-breadcrumb-item---padding-inline-end) - var(--origam-breadcrumb-item---density));
259
267
 
260
- margin-block-start: var(--origam-breadcrumb-item---margin-block-start);
261
- margin-block-end: var(--origam-breadcrumb-item---margin-block-end);
262
- margin-inline-start: var(--origam-breadcrumb-item---margin-inline-start);
263
- margin-inline-end: var(--origam-breadcrumb-item---margin-inline-end);
268
+ margin-block-start: var(--origam-breadcrumb-item---margin-block-start);
269
+ margin-block-end: var(--origam-breadcrumb-item---margin-block-end);
270
+ margin-inline-start: var(--origam-breadcrumb-item---margin-inline-start);
271
+ margin-inline-end: var(--origam-breadcrumb-item---margin-inline-end);
272
+ }
264
273
 
265
274
  &--disabled {
266
275
  --origam-breadcrumb-item---opacity: var(--origam-breadcrumb-item---opacity-disabled, 0.5);
@@ -988,7 +988,16 @@ defineExpose({
988
988
  flex-direction: column;
989
989
  gap: var(--origam-calendar---gap, 0);
990
990
  width: 100%;
991
- padding: var(--origam-calendar---padding, 0);
991
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
992
+ // `:where(.origam-calendar[data-v-hash])` = (0,0,0), so the
993
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`) wins
994
+ // the cascade. Without it the scoped compiler pushes this rule to
995
+ // (0,2,0) and beats the utility's (0,1,0). Only the DEFAULT is
996
+ // lowered — modifier / state rules keep their (0,2,0).
997
+ :where(&) {
998
+ padding: var(--origam-calendar---padding, 0);
999
+ }
1000
+
992
1001
  background-color: var(--origam-calendar---background-color, #ffffff);
993
1002
  color: var(--origam-calendar---color, inherit);
994
1003
  border: var(--origam-calendar---border-width, 1px) solid var(--origam-calendar---border-color, #e5e7eb);
@@ -421,15 +421,26 @@ defineExpose({
421
421
  box-shadow: var(--origam-card---box-shadow);
422
422
  color: var(--origam-card---color);
423
423
 
424
- padding-block-start: calc(var(--origam-card---padding-block-start) + var(--origam-card---density));
425
- padding-block-end: calc(var(--origam-card---padding-block-end) + var(--origam-card---density));
426
- padding-inline-start: calc(var(--origam-card---padding-inline-start) + var(--origam-card---density));
427
- padding-inline-end: calc(var(--origam-card---padding-inline-end) + var(--origam-card---density));
428
-
429
- margin-block-start: var(--origam-card---margin-block-start);
430
- margin-block-end: var(--origam-card---margin-block-end);
431
- margin-inline-start: var(--origam-card---margin-inline-start);
432
- margin-inline-end: var(--origam-card---margin-inline-end);
424
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
425
+ // `:where(.origam-card[data-v-hash])` = (0,0,0), so the
426
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
427
+ // win the cascade. Without it the scoped compiler pushes this rule
428
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
429
+ // both props goes silently inert. Only the DEFAULT is lowered —
430
+ // modifier / state rules keep their (0,2,0) and still win.
431
+ // (`useRounded` already carried this lesson naming Card as the
432
+ // victim; #950 is where it finally reached the padding channel.)
433
+ :where(&) {
434
+ padding-block-start: calc(var(--origam-card---padding-block-start) + var(--origam-card---density));
435
+ padding-block-end: calc(var(--origam-card---padding-block-end) + var(--origam-card---density));
436
+ padding-inline-start: calc(var(--origam-card---padding-inline-start) + var(--origam-card---density));
437
+ padding-inline-end: calc(var(--origam-card---padding-inline-end) + var(--origam-card---density));
438
+
439
+ margin-block-start: var(--origam-card---margin-block-start);
440
+ margin-block-end: var(--origam-card---margin-block-end);
441
+ margin-inline-start: var(--origam-card---margin-inline-start);
442
+ margin-inline-end: var(--origam-card---margin-inline-end);
443
+ }
433
444
 
434
445
  border-color: var(--origam-card---border-color);
435
446
  border-style: var(--origam-card---border-style);
@@ -333,7 +333,16 @@ defineExpose({
333
333
  background-color: var(--origam-data-list---background-color, transparent);
334
334
  color: var(--origam-data-list---color, inherit);
335
335
  border-radius: var(--origam-data-list---border-radius, 0);
336
- padding: var(--origam-data-list---padding, 0);
336
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
337
+ // `:where(.origam-data-list[data-v-hash])` = (0,0,0), so the
338
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
339
+ // wins the cascade. Without it the scoped compiler pushes this
340
+ // rule to (0,2,0) and beats the utility's (0,1,0). Only the
341
+ // DEFAULT is lowered — modifier / state rules keep their (0,2,0).
342
+ :where(&) {
343
+ padding: var(--origam-data-list---padding, 0);
344
+ }
345
+
337
346
  gap: var(--origam-data-list---gap, 0);
338
347
 
339
348
  &__title {
@@ -98,8 +98,25 @@ defineExpose({
98
98
  border-right-width: 0;
99
99
  border-bottom-width: 0;
100
100
  border-left-width: 0;
101
- margin: 0;
102
- margin-block: var(--origam-divider---margin-block, 0);
101
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
102
+ // `:where(.origam-divider[data-v-hash])` = (0,0,0), so the
103
+ // scale-driven utility class (`.origam--m-6` from `margin="6"`)
104
+ // wins the cascade. Without it the scoped compiler pushes this
105
+ // rule to (0,2,0) and beats the utility's (0,1,0) — and with
106
+ // `margin: 0` as the default the prop painted nothing at all.
107
+ // Only the DEFAULT is lowered: `&--vertical` (`margin-left`) and
108
+ // `&--inset` (`margin-inline-start`) below keep their (0,2,0) and
109
+ // still win when those modifiers are active.
110
+ //
111
+ // The `padding-*` defaults below are deliberately LEFT at (0,2,0):
112
+ // this component never calls `usePadding`, so it exposes no
113
+ // `padding` prop and there is no utility class to make room for.
114
+ // The census did not list Divider/padding as a suspect either.
115
+ :where(&) {
116
+ margin: 0;
117
+ margin-block: var(--origam-divider---margin-block, 0);
118
+ }
119
+
103
120
  padding-block-start: var(--origam-divider---padding-block-start, 0);
104
121
  padding-block-end: var(--origam-divider---padding-block-end, 0);
105
122
  padding-inline-start: var(--origam-divider---padding-inline-start, 0);
@@ -274,7 +274,19 @@ defineExpose({
274
274
  flex-wrap: wrap;
275
275
  justify-content: center;
276
276
  list-style-type: none;
277
- padding: 0;
277
+
278
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
279
+ // `:where(.origam-expansion-panels[data-v-hash])` = (0,0,0), so
280
+ // the scale-driven utility class (`.origam--p-6` from
281
+ // `padding="6"`) wins the cascade. Without it the scoped compiler
282
+ // pushes this rule to (0,2,0) and beats the utility's (0,1,0) —
283
+ // and since the default here is the UA list reset `padding: 0`,
284
+ // the prop was not merely overridden, it painted nothing at all.
285
+ // Only the DEFAULT is lowered — modifiers keep their (0,2,0).
286
+ :where(&) {
287
+ padding: 0;
288
+ }
289
+
278
290
  width: 100%;
279
291
  position: relative;
280
292
  z-index: 1;
@@ -114,15 +114,24 @@ defineExpose({
114
114
  max-height: var(--origam-container---max-height);
115
115
  min-height: var(--origam-container---min-height);
116
116
 
117
- padding-block-start: var(--origam-container---padding-block-start);
118
- padding-block-end: var(--origam-container---padding-block-end);
119
- padding-inline-start: var(--origam-container---padding-inline-start);
120
- padding-inline-end: var(--origam-container---padding-inline-end);
121
-
122
- margin-block-start: var(--origam-container---margin-block-start);
123
- margin-block-end: var(--origam-container---margin-block-end);
124
- margin-inline-start: var(--origam-container---margin-inline-start);
125
- margin-inline-end: var(--origam-container---margin-inline-end);
117
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
118
+ // `:where(.origam-container[data-v-hash])` = (0,0,0), so the
119
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
120
+ // win the cascade. Without it the scoped compiler pushes this rule
121
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
122
+ // both props goes silently inert. Only the DEFAULT is lowered —
123
+ // modifier / state rules keep their (0,2,0) and still win.
124
+ :where(&) {
125
+ padding-block-start: var(--origam-container---padding-block-start);
126
+ padding-block-end: var(--origam-container---padding-block-end);
127
+ padding-inline-start: var(--origam-container---padding-inline-start);
128
+ padding-inline-end: var(--origam-container---padding-inline-end);
129
+
130
+ margin-block-start: var(--origam-container---margin-block-start);
131
+ margin-block-end: var(--origam-container---margin-block-end);
132
+ margin-inline-start: var(--origam-container---margin-inline-start);
133
+ margin-inline-end: var(--origam-container---margin-inline-end);
134
+ }
126
135
 
127
136
  &--is-rtl {
128
137
  direction: rtl;
@@ -152,10 +152,18 @@ defineExpose({
152
152
  justify-content: var(--origam-row---justify-content);
153
153
  box-sizing: var(--origam-row---box-sizing);
154
154
 
155
- padding-block-start: var(--origam-row---padding-block-start);
156
- padding-block-end: var(--origam-row---padding-block-end);
157
- padding-inline-start: var(--origam-row---padding-inline-start);
158
- padding-inline-end: var(--origam-row---padding-inline-end);
155
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
156
+ // `:where(.origam-row[data-v-hash])` = (0,0,0), so the scale-driven
157
+ // utility class (`.origam--p-6` from `padding="6"`) wins the
158
+ // cascade. Without it the scoped compiler pushes this rule to
159
+ // (0,2,0) and beats the utility's (0,1,0). Only the DEFAULT is
160
+ // lowered — modifier / state rules keep their (0,2,0).
161
+ :where(&) {
162
+ padding-block-start: var(--origam-row---padding-block-start);
163
+ padding-block-end: var(--origam-row---padding-block-end);
164
+ padding-inline-start: var(--origam-row---padding-inline-start);
165
+ padding-inline-end: var(--origam-row---padding-inline-end);
166
+ }
159
167
 
160
168
  --origam-col---padding-block-start: calc(var(--origam-row---gutter) / 2);
161
169
  --origam-col---padding-block-end: calc(var(--origam-row---gutter) / 2);
@@ -167,10 +175,21 @@ defineExpose({
167
175
  --origam-row---margin-inline-start: calc(var(--origam-row---gutter) / -2);
168
176
  --origam-row---margin-inline-end: calc(var(--origam-row---gutter) / -2);
169
177
 
170
- margin-block-start: calc(var(--origam-row---margin-block-start) + var(--origam-row---density));
171
- margin-block-end: calc(var(--origam-row---margin-block-end) + var(--origam-row---density));
172
- margin-inline-start: calc(var(--origam-row---margin-inline-start) + var(--origam-row---density));
173
- margin-inline-end: calc(var(--origam-row---margin-inline-end) + var(--origam-row---density));
178
+ // ⛔ #950 — same reasoning for the gutter margin. The custom
179
+ // properties above stay at (0,2,0); only the declarations that
180
+ // CONSUME them drop to (0,0,0), so `.origam--m-6` can win.
181
+ // ⚠️ Deliberately PARTIAL: the `+ .origam-row` rule below is
182
+ // (0,3,0) and still overrides `margin-block-start` on every Row
183
+ // that follows another Row — that gutter collapse is the intended
184
+ // behaviour and #950 does not touch it. The utility therefore wins
185
+ // on all four sides of the FIRST Row, and on three sides of the
186
+ // next ones. (This is what the census read as `repos = -12px`.)
187
+ :where(&) {
188
+ margin-block-start: calc(var(--origam-row---margin-block-start) + var(--origam-row---density));
189
+ margin-block-end: calc(var(--origam-row---margin-block-end) + var(--origam-row---density));
190
+ margin-inline-start: calc(var(--origam-row---margin-inline-start) + var(--origam-row---density));
191
+ margin-inline-end: calc(var(--origam-row---margin-inline-end) + var(--origam-row---density));
192
+ }
174
193
 
175
194
  + .origam-row {
176
195
  margin-block-start: calc((var(--origam-row---margin-block-start) + var(--origam-row---density)) * -1);
@@ -323,10 +323,19 @@ defineExpose({
323
323
 
324
324
  <style lang="scss" scoped>
325
325
  .origam-list {
326
- padding-block-start: var(--origam-list---padding-block-start, 8px);
327
- padding-block-end: var(--origam-list---padding-block-end, 8px);
328
- padding-inline-start: var(--origam-list---padding-inline-start, 0);
329
- padding-inline-end: var(--origam-list---padding-inline-end, 0);
326
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
327
+ // `:where(.origam-list[data-v-hash])` = (0,0,0), so the
328
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
329
+ // wins the cascade. Without it the scoped compiler pushes this
330
+ // rule to (0,2,0), beats the utility's (0,1,0), and the scale
331
+ // form of `padding` goes silently inert. Only the DEFAULT is
332
+ // lowered — modifier / state rules keep their (0,2,0).
333
+ :where(&) {
334
+ padding-block-start: var(--origam-list---padding-block-start, 8px);
335
+ padding-block-end: var(--origam-list---padding-block-end, 8px);
336
+ padding-inline-start: var(--origam-list---padding-inline-start, 0);
337
+ padding-inline-end: var(--origam-list---padding-inline-end, 0);
338
+ }
330
339
 
331
340
  position: var(--origam-list---position, relative);
332
341
  overflow: var(--origam-list---overflow, auto);
@@ -450,15 +450,24 @@ defineExpose({
450
450
  outline: var(--origam-list-item---outline, none);
451
451
  position: var(--origam-list-item---position, relative);
452
452
 
453
- padding-block-start: var(--origam-list-item---padding-block-start, 8px);
454
- padding-block-end: var(--origam-list-item---padding-block-end, 8px);
455
- padding-inline-start: calc(var(--origam-list-item---padding-inline-start, 16px) + var(--origam-list---indent-padding, 0px) + var(--origam-list---density, 0px));
456
- padding-inline-end: calc(var(--origam-list-item---padding-inline-end, 16px) + var(--origam-list---density, 0px));
457
-
458
- margin-block-start: var(--origam-list-item---margin-block-start, 0);
459
- margin-block-end: var(--origam-list-item---margin-block-end, 0);
460
- margin-inline-start: var(--origam-list-item---margin-inline-start, 0);
461
- margin-inline-end: var(--origam-list-item---margin-inline-end, 0);
453
+ // ⛔ #950 — zero-specificity defaults. `:where(&)` compiles to
454
+ // `:where(.origam-list-item[data-v-hash])` = (0,0,0), so the
455
+ // scale-driven utility classes (`.origam--p-6`, `.origam--m-6`)
456
+ // win the cascade. Without it the scoped compiler pushes this rule
457
+ // to (0,2,0), beats the utility's (0,1,0), and the scale form of
458
+ // both props goes silently inert. Only the DEFAULT is lowered —
459
+ // `&--active`, `&:hover` and the rest keep their (0,2,0).
460
+ :where(&) {
461
+ padding-block-start: var(--origam-list-item---padding-block-start, 8px);
462
+ padding-block-end: var(--origam-list-item---padding-block-end, 8px);
463
+ padding-inline-start: calc(var(--origam-list-item---padding-inline-start, 16px) + var(--origam-list---indent-padding, 0px) + var(--origam-list---density, 0px));
464
+ padding-inline-end: calc(var(--origam-list-item---padding-inline-end, 16px) + var(--origam-list---density, 0px));
465
+
466
+ margin-block-start: var(--origam-list-item---margin-block-start, 0);
467
+ margin-block-end: var(--origam-list-item---margin-block-end, 0);
468
+ margin-inline-start: var(--origam-list-item---margin-inline-start, 0);
469
+ margin-inline-end: var(--origam-list-item---margin-inline-end, 0);
470
+ }
462
471
 
463
472
  border-color: var(--origam-list-item---border-color, var(--origam-color__text---primary));
464
473
  border-style: var(--origam-list-item---border-style, solid);
@@ -156,7 +156,16 @@ defineExpose({
156
156
  <style lang="scss" scoped>
157
157
  .origam-messages {
158
158
  color: var(--origam-messages---color, currentColor);
159
- padding: var(--origam-messages---padding, var(--origam-messages---density, 0));
159
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
160
+ // `:where(.origam-messages[data-v-hash])` = (0,0,0), so the
161
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
162
+ // wins the cascade. Without it the scoped compiler pushes this
163
+ // rule to (0,2,0) and beats the utility's (0,1,0). Only the
164
+ // DEFAULT is lowered — modifier / state rules keep their (0,2,0).
165
+ :where(&) {
166
+ padding: var(--origam-messages---padding, var(--origam-messages---density, 0));
167
+ }
168
+
160
169
  flex: var(--origam-messages---flex, 1 1 auto);
161
170
  font-size: var(--origam-messages---font-size, 12px);
162
171
  min-height: var(--origam-messages---min-height, 14px);
@@ -592,8 +592,20 @@ defineExpose({
592
592
  align-items: center;
593
593
  justify-content: center;
594
594
  gap: var(--origam-pagination---gap-info, 16px);
595
- padding-block: var(--origam-pagination---padding-block, 0);
596
- padding-inline: var(--origam-pagination---padding-inline, 0);
595
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
596
+ // `:where(.origam-pagination[data-v-hash])` = (0,0,0), so the
597
+ // scale-driven utility class (`.origam--p-6` from `padding="6"`)
598
+ // wins the cascade. Without it the scoped compiler pushes this
599
+ // rule to (0,2,0) and beats the utility's (0,1,0). Only the
600
+ // DEFAULT is lowered — `&--with-info` and the other modifiers
601
+ // keep their (0,2,0).
602
+ // NB — `margin` is NOT wrapped here: the census measured it ALIVE
603
+ // on this component (the root declares no margin at all), so
604
+ // there is nothing to lower.
605
+ :where(&) {
606
+ padding-block: var(--origam-pagination---padding-block, 0);
607
+ padding-inline: var(--origam-pagination---padding-inline, 0);
608
+ }
597
609
 
598
610
  &--with-info {
599
611
  justify-content: space-between;
@@ -203,10 +203,22 @@ defineExpose({
203
203
  position: relative;
204
204
  // Baseline inner spacing — matches the `gap` between title and
205
205
  // SVG so the wrapper has the same breathing room on every side
206
- // of the matrix. Overridden by the `padding` prop (via
207
- // `usePadding(props)` inline styles) when the consumer
208
- // provides one.
209
- padding: 8px;
206
+ // of the matrix.
207
+ //
208
+ // ⛔ #950 — this comment used to claim the `padding` prop simply
209
+ // overrode the default "via `usePadding(props)` inline styles".
210
+ // That was only HALF true, and the untrue half was silent: the
211
+ // inline path (`:padding="6"`, `padding="6px 8px"`) does win, but
212
+ // the tokenised SCALE path (`padding="6"`) emits ONLY the utility
213
+ // class `.origam--p-6` (0,1,0) with no inline companion — and the
214
+ // scoped compiler put this rule at (0,2,0), so it won and the prop
215
+ // was inert. `:where(&)` compiles to
216
+ // `:where(.origam-qr-code[data-v-hash])` = (0,0,0), which hands
217
+ // the cascade back to the utility. Only the DEFAULT is lowered —
218
+ // modifier / state rules keep their (0,2,0).
219
+ :where(&) {
220
+ padding: 8px;
221
+ }
210
222
  }
211
223
 
212
224
  .origam-qr-code__title {
@@ -279,15 +279,24 @@ defineExpose({
279
279
  max-height: var(--origam-sheet---max-height);
280
280
  min-height: var(--origam-sheet---min-height);
281
281
 
282
- padding-block-start: var(--origam-sheet---padding-block-start);
283
- padding-block-end: var(--origam-sheet---padding-block-end);
284
- padding-inline-start: var(--origam-sheet---padding-inline-start);
285
- padding-inline-end: var(--origam-sheet---padding-inline-end);
282
+ // ⛔ #950 — zero-specificity defaults so the scale-driven utility
283
+ // classes (`.origam--p-6` from `padding="6"`, `.origam--m-6` from
284
+ // `margin="6"`) win the cascade. Without `:where()`, Vue's scoped
285
+ // compiler appends `[data-v-hash]` here and pushes this rule to
286
+ // (0,2,0), beating the utility's (0,1,0) — and the scale form of
287
+ // both props goes silently inert. Only the DEFAULT is lowered:
288
+ // every modifier / state rule keeps its (0,2,0) and still wins.
289
+ :where(&) {
290
+ padding-block-start: var(--origam-sheet---padding-block-start);
291
+ padding-block-end: var(--origam-sheet---padding-block-end);
292
+ padding-inline-start: var(--origam-sheet---padding-inline-start);
293
+ padding-inline-end: var(--origam-sheet---padding-inline-end);
286
294
 
287
- margin-block-start: var(--origam-sheet---margin-block-start);
288
- margin-block-end: var(--origam-sheet---margin-block-end);
289
- margin-inline-start: var(--origam-sheet---margin-inline-start);
290
- margin-inline-end: var(--origam-sheet---margin-inline-end);
295
+ margin-block-start: var(--origam-sheet---margin-block-start);
296
+ margin-block-end: var(--origam-sheet---margin-block-end);
297
+ margin-inline-start: var(--origam-sheet---margin-inline-start);
298
+ margin-inline-end: var(--origam-sheet---margin-inline-end);
299
+ }
291
300
 
292
301
  background: var(--origam-sheet---background);
293
302
  backdrop-filter: var(--origam-sheet---backdrop-filter, none);
@@ -121,8 +121,17 @@ defineExpose({
121
121
  font-weight: var(--origam-title---font-weight);
122
122
  letter-spacing: var(--origam-title---letter-spacing);
123
123
  line-height: var(--origam-title---line-height);
124
- margin-block-start: var(--origam-title---margin-block-start);
125
- margin-block-end: var(--origam-title---margin-block-end);
124
+ // ⛔ #950 — zero-specificity default. `:where(&)` compiles to
125
+ // `:where(.origam-title[data-v-hash])` = (0,0,0), so the
126
+ // scale-driven utility class (`.origam--m-6` from `margin="6"`)
127
+ // wins the cascade. Without it the scoped compiler pushes this
128
+ // rule to (0,2,0), beats the utility's (0,1,0), and the scale
129
+ // form of `margin` goes silently inert. Only the DEFAULT is
130
+ // lowered — `&--density-*` and other modifiers keep their (0,2,0).
131
+ :where(&) {
132
+ margin-block-start: var(--origam-title---margin-block-start);
133
+ margin-block-end: var(--origam-title---margin-block-end);
134
+ }
126
135
 
127
136
  &--density-compact {
128
137
  font-size: var(--origam-title---font-size, var(--origam-title---font-size-xs));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "origam",
3
- "version": "2.18.13",
3
+ "version": "2.18.14",
4
4
  "type": "module",
5
5
  "description": "origam — a Vue 3 design system with multi-theme design tokens, CSS-first components and TypeScript types.",
6
6
  "keywords": [