@refrakt-md/lumina 0.32.0 → 0.34.0

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 (142) hide show
  1. package/base.css +29 -29
  2. package/contracts/structures.json +58 -60
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/icons.d.ts.map +1 -1
  6. package/dist/icons.js +57 -57
  7. package/dist/icons.js.map +1 -1
  8. package/dist/presets/catppuccin.js.map +1 -1
  9. package/dist/presets/dracula.js.map +1 -1
  10. package/dist/presets/gruvbox.js.map +1 -1
  11. package/dist/presets/niwaki.js.map +1 -1
  12. package/dist/presets/nord.js.map +1 -1
  13. package/dist/presets/one-dark.js.map +1 -1
  14. package/dist/presets/solarized.js.map +1 -1
  15. package/dist/presets/tideline.d.ts.map +1 -1
  16. package/dist/presets/tideline.js +20 -4
  17. package/dist/presets/tideline.js.map +1 -1
  18. package/dist/presets/tokyo-night.js.map +1 -1
  19. package/dist/tokens.js.map +1 -1
  20. package/index.css +124 -124
  21. package/package.json +5 -5
  22. package/presets.json +61 -13
  23. package/styles/base/attributes.css +32 -13
  24. package/styles/dimensions/checklist.css +45 -46
  25. package/styles/dimensions/cover.css +71 -51
  26. package/styles/dimensions/density.css +69 -65
  27. package/styles/dimensions/frame.css +116 -57
  28. package/styles/dimensions/metadata.css +110 -103
  29. package/styles/dimensions/motion.css +42 -13
  30. package/styles/dimensions/reading.css +27 -27
  31. package/styles/dimensions/sections.css +44 -45
  32. package/styles/dimensions/sequence.css +56 -57
  33. package/styles/dimensions/state.css +8 -2
  34. package/styles/dimensions/substrate.css +82 -58
  35. package/styles/dimensions/surfaces.css +65 -62
  36. package/styles/elements/blockquote.css +24 -25
  37. package/styles/elements/code.css +72 -71
  38. package/styles/elements/table.css +36 -37
  39. package/styles/global.css +163 -121
  40. package/styles/layouts/blog.css +219 -218
  41. package/styles/layouts/default.css +168 -167
  42. package/styles/layouts/docs.css +121 -122
  43. package/styles/layouts/mobile.css +54 -55
  44. package/styles/layouts/on-this-page.css +46 -47
  45. package/styles/layouts/plan.css +248 -247
  46. package/styles/layouts/search.css +142 -140
  47. package/styles/layouts/split.css +45 -45
  48. package/styles/layouts/theme-toggle.css +33 -31
  49. package/styles/layouts/version-switcher.css +38 -37
  50. package/styles/runes/accordion.css +90 -81
  51. package/styles/runes/aggregate.css +50 -39
  52. package/styles/runes/annotate.css +46 -45
  53. package/styles/runes/api.css +22 -23
  54. package/styles/runes/audio.css +140 -141
  55. package/styles/runes/badge.css +12 -13
  56. package/styles/runes/bar.css +4 -5
  57. package/styles/runes/bento.css +73 -62
  58. package/styles/runes/bg.css +62 -47
  59. package/styles/runes/blog.css +89 -90
  60. package/styles/runes/bond.css +49 -50
  61. package/styles/runes/breadcrumb.css +34 -35
  62. package/styles/runes/budget.css +126 -127
  63. package/styles/runes/bug.css +28 -27
  64. package/styles/runes/card.css +63 -60
  65. package/styles/runes/carousel.css +15 -15
  66. package/styles/runes/cast.css +50 -51
  67. package/styles/runes/changelog.css +45 -46
  68. package/styles/runes/character.css +31 -32
  69. package/styles/runes/chart.css +194 -106
  70. package/styles/runes/codegroup.css +109 -100
  71. package/styles/runes/collection.css +87 -86
  72. package/styles/runes/compare.css +38 -39
  73. package/styles/runes/comparison.css +205 -179
  74. package/styles/runes/conversation.css +36 -33
  75. package/styles/runes/cta.css +135 -132
  76. package/styles/runes/datatable.css +84 -83
  77. package/styles/runes/decision.css +25 -26
  78. package/styles/runes/design-context.css +21 -23
  79. package/styles/runes/details.css +26 -27
  80. package/styles/runes/diagram.css +28 -29
  81. package/styles/runes/diff.css +75 -72
  82. package/styles/runes/drawer.css +276 -198
  83. package/styles/runes/embed.css +20 -21
  84. package/styles/runes/event.css +35 -36
  85. package/styles/runes/expand.css +43 -34
  86. package/styles/runes/faction.css +47 -48
  87. package/styles/runes/feature.css +119 -112
  88. package/styles/runes/figure.css +11 -12
  89. package/styles/runes/file-ref.css +11 -13
  90. package/styles/runes/form.css +155 -154
  91. package/styles/runes/gallery.css +59 -60
  92. package/styles/runes/grid.css +10 -7
  93. package/styles/runes/hero.css +189 -185
  94. package/styles/runes/hint.css +57 -58
  95. package/styles/runes/howto.css +62 -64
  96. package/styles/runes/itinerary.css +133 -134
  97. package/styles/runes/juxtapose.css +83 -82
  98. package/styles/runes/lore.css +32 -34
  99. package/styles/runes/map.css +106 -99
  100. package/styles/runes/mediatext.css +30 -27
  101. package/styles/runes/milestone.css +98 -97
  102. package/styles/runes/mockup.css +338 -335
  103. package/styles/runes/nav.css +465 -450
  104. package/styles/runes/organization.css +23 -20
  105. package/styles/runes/page-section.css +14 -15
  106. package/styles/runes/pagination.css +45 -44
  107. package/styles/runes/palette.css +78 -80
  108. package/styles/runes/placeholder.css +8 -9
  109. package/styles/runes/plan-history.css +160 -161
  110. package/styles/runes/plan-progress.css +15 -16
  111. package/styles/runes/plan-ref.css +32 -23
  112. package/styles/runes/playlist.css +106 -107
  113. package/styles/runes/plot.css +92 -91
  114. package/styles/runes/preview.css +152 -149
  115. package/styles/runes/pricing.css +133 -123
  116. package/styles/runes/progress.css +32 -27
  117. package/styles/runes/pullquote.css +89 -90
  118. package/styles/runes/realm.css +47 -48
  119. package/styles/runes/recipe.css +112 -114
  120. package/styles/runes/relationships.css +77 -76
  121. package/styles/runes/reveal.css +90 -79
  122. package/styles/runes/sandbox.css +59 -60
  123. package/styles/runes/section.css +57 -50
  124. package/styles/runes/showcase.css +35 -16
  125. package/styles/runes/sidenote.css +30 -27
  126. package/styles/runes/snippet.css +8 -9
  127. package/styles/runes/spacing.css +86 -88
  128. package/styles/runes/spec.css +24 -25
  129. package/styles/runes/steps.css +89 -80
  130. package/styles/runes/storyboard.css +46 -45
  131. package/styles/runes/swatch.css +22 -23
  132. package/styles/runes/symbol.css +117 -118
  133. package/styles/runes/tabs.css +88 -79
  134. package/styles/runes/testimonial.css +43 -44
  135. package/styles/runes/textblock.css +32 -28
  136. package/styles/runes/timeline.css +63 -64
  137. package/styles/runes/tint.css +214 -215
  138. package/styles/runes/toc.css +40 -41
  139. package/styles/runes/track.css +89 -90
  140. package/styles/runes/typography.css +89 -91
  141. package/styles/runes/work.css +47 -36
  142. package/styles/runes/xref.css +21 -22
@@ -1,153 +1,152 @@
1
1
  @layer skin {
2
- .rf-audio__description {
3
- padding: 0.75rem 1rem;
4
- font-size: var(--rf-text-sm);
5
- color: var(--rf-color-muted);
6
- line-height: var(--rf-leading-normal);
7
- }
8
- .rf-audio__description p {
9
- margin: 0;
10
- }
11
- .rf-audio__description p + p {
12
- margin-top: 0.5rem;
13
- }
2
+ .rf-audio__description {
3
+ padding: 0.75rem 1rem;
4
+ font-size: var(--rf-text-sm);
5
+ color: var(--rf-color-muted);
6
+ line-height: var(--rf-leading-normal);
7
+ }
8
+ .rf-audio__description p {
9
+ margin: 0;
10
+ }
11
+ .rf-audio__description p + p {
12
+ margin-top: 0.5rem;
13
+ }
14
14
 
15
- /* ── Audio Player (web component internals) ── */
15
+ /* ── Audio Player (web component internals) ── */
16
16
 
17
- .rf-audio-player {
18
- padding: 1rem 1.25rem;
19
- gap: 0.625rem;
20
- }
17
+ .rf-audio-player {
18
+ padding: 1rem 1.25rem;
19
+ gap: 0.625rem;
20
+ }
21
21
 
22
- /* Track info */
23
- .rf-audio-player__info {
24
- gap: 0.125rem;
25
- }
26
- .rf-audio-player__name {
27
- font-size: var(--rf-text);
28
- font-weight: var(--rf-weight-semibold);
29
- color: var(--rf-color-text);
30
- text-overflow: ellipsis;
31
- white-space: nowrap;
32
- }
33
- .rf-audio-player__artist {
34
- font-size: var(--rf-text-sm);
35
- color: var(--rf-color-muted);
36
- }
22
+ /* Track info */
23
+ .rf-audio-player__info {
24
+ gap: 0.125rem;
25
+ }
26
+ .rf-audio-player__name {
27
+ font-size: var(--rf-text);
28
+ font-weight: var(--rf-weight-semibold);
29
+ color: var(--rf-color-text);
30
+ text-overflow: ellipsis;
31
+ white-space: nowrap;
32
+ }
33
+ .rf-audio-player__artist {
34
+ font-size: var(--rf-text-sm);
35
+ color: var(--rf-color-muted);
36
+ }
37
37
 
38
- /* Controls row */
39
- .rf-audio-player__controls {
40
- gap: 0.625rem;
41
- }
38
+ /* Controls row */
39
+ .rf-audio-player__controls {
40
+ gap: 0.625rem;
41
+ }
42
42
 
43
- /* Play / pause button */
44
- .rf-audio-player__play {
45
- border-radius: var(--rf-radius-full, 9999px);
46
- border: none;
47
- background: var(--rf-color-primary);
48
- color: var(--rf-color-on-primary);
49
- cursor: pointer;
50
- transition: opacity 0.15s ease;
51
- padding: 0;
52
- }
53
- .rf-audio-player__play:hover {
54
- opacity: 0.85;
55
- }
56
- .rf-audio-player__play:focus-visible {
57
- outline: 2px solid var(--rf-color-primary);
58
- outline-offset: 2px;
59
- }
60
- .rf-audio-player__play:disabled {
61
- opacity: 0.4;
62
- cursor: not-allowed;
63
- }
64
- .rf-audio-player__play svg {
65
- fill: currentColor;
66
- }
43
+ /* Play / pause button */
44
+ .rf-audio-player__play {
45
+ border-radius: var(--rf-radius-full, 9999px);
46
+ border: none;
47
+ background: var(--rf-color-primary);
48
+ color: var(--rf-color-on-primary);
49
+ cursor: pointer;
50
+ transition: opacity 0.15s ease;
51
+ padding: 0;
52
+ }
53
+ .rf-audio-player__play:hover {
54
+ opacity: 0.85;
55
+ }
56
+ .rf-audio-player__play:focus-visible {
57
+ outline: 2px solid var(--rf-color-primary);
58
+ outline-offset: 2px;
59
+ }
60
+ .rf-audio-player__play:disabled {
61
+ opacity: 0.4;
62
+ cursor: not-allowed;
63
+ }
64
+ .rf-audio-player__play svg {
65
+ fill: currentColor;
66
+ }
67
67
 
68
- /* Time displays */
69
- .rf-audio-player__time {
70
- font-size: var(--rf-text-xs);
71
- font-variant-numeric: tabular-nums;
72
- color: var(--rf-color-muted);
73
- user-select: none;
74
- }
75
- .rf-audio-player__time--current {
76
- text-align: right;
77
- }
78
- .rf-audio-player__time--duration {
79
- text-align: left;
80
- }
68
+ /* Time displays */
69
+ .rf-audio-player__time {
70
+ font-size: var(--rf-text-xs);
71
+ font-variant-numeric: tabular-nums;
72
+ color: var(--rf-color-muted);
73
+ user-select: none;
74
+ }
75
+ .rf-audio-player__time--current {
76
+ text-align: right;
77
+ }
78
+ .rf-audio-player__time--duration {
79
+ text-align: left;
80
+ }
81
81
 
82
- /* Progress bar */
83
- .rf-audio-player__progress {
84
- background: var(--rf-color-surface-active, #e5e7eb);
85
- border-radius: var(--rf-radius-full, 9999px);
86
- cursor: pointer;
87
- }
88
- .rf-audio-player__progress:focus-visible {
89
- outline: 2px solid var(--rf-color-primary);
90
- outline-offset: 2px;
91
- }
92
- .rf-audio-player__progress-bar {
93
- background: var(--rf-color-primary);
94
- border-radius: var(--rf-radius-full, 9999px);
95
- transition: width 0.1s linear;
96
- }
82
+ /* Progress bar */
83
+ .rf-audio-player__progress {
84
+ background: var(--rf-color-surface-active, #e5e7eb);
85
+ border-radius: var(--rf-radius-full, 9999px);
86
+ cursor: pointer;
87
+ }
88
+ .rf-audio-player__progress:focus-visible {
89
+ outline: 2px solid var(--rf-color-primary);
90
+ outline-offset: 2px;
91
+ }
92
+ .rf-audio-player__progress-bar {
93
+ background: var(--rf-color-primary);
94
+ border-radius: var(--rf-radius-full, 9999px);
95
+ transition: width 0.1s linear;
96
+ }
97
97
 
98
- /* Waveform container */
99
- .rf-audio-player__waveform {
100
- border-radius: var(--rf-radius-sm, 4px);
101
- }
98
+ /* Waveform container */
99
+ .rf-audio-player__waveform {
100
+ border-radius: var(--rf-radius-sm, 4px);
101
+ }
102
102
 
103
- /* Chapter list */
104
- .rf-audio-player__chapters {
105
- padding: 0;
106
- margin: 0.75rem 0 0;
107
- padding-top: 0;
108
- }
109
- .rf-audio-player__chapter {
110
- gap: 0.75rem;
111
- padding: 0.375rem 0.5rem;
112
- border: none;
113
- background: none;
114
- cursor: pointer;
115
- border-radius: var(--rf-radius-sm, 4px);
116
- transition: background 0.15s ease;
117
- text-align: left;
118
- font-family: inherit;
119
- }
120
- .rf-audio-player__chapter:hover {
121
- background: var(--rf-color-surface-hover, rgba(0, 0, 0, 0.04));
122
- }
123
- .rf-audio-player__chapter:focus-visible {
124
- outline: 2px solid var(--rf-color-primary);
125
- outline-offset: -2px;
126
- }
127
- .rf-audio-player__chapter--active {
128
- background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
129
- }
130
- .rf-audio-player__chapter--active .rf-audio-player__chapter-name {
131
- color: var(--rf-color-primary);
132
- }
133
- .rf-audio-player__chapter-name {
134
- font-size: var(--rf-text-sm);
135
- font-weight: var(--rf-weight-medium);
136
- color: var(--rf-color-text);
137
- }
138
- .rf-audio-player__chapter-time {
139
- font-size: var(--rf-text-xs);
140
- font-variant-numeric: tabular-nums;
141
- color: var(--rf-color-muted);
142
- }
143
-
144
- /* Active track highlight when connected to audio player */
145
- .rf-track--active {
146
- background: color-mix(in srgb, var(--rf-color-primary) 6%, transparent);
147
- border-radius: var(--rf-radius-sm, 4px);
148
- }
149
- .rf-track--active .rf-track__track-name {
150
- color: var(--rf-color-primary);
151
- }
103
+ /* Chapter list */
104
+ .rf-audio-player__chapters {
105
+ padding: 0;
106
+ margin: 0.75rem 0 0;
107
+ padding-top: 0;
108
+ }
109
+ .rf-audio-player__chapter {
110
+ gap: 0.75rem;
111
+ padding: 0.375rem 0.5rem;
112
+ border: none;
113
+ background: none;
114
+ cursor: pointer;
115
+ border-radius: var(--rf-radius-sm, 4px);
116
+ transition: background 0.15s ease;
117
+ text-align: left;
118
+ font-family: inherit;
119
+ }
120
+ .rf-audio-player__chapter:hover {
121
+ background: var(--rf-color-surface-hover, rgba(0, 0, 0, 0.04));
122
+ }
123
+ .rf-audio-player__chapter:focus-visible {
124
+ outline: 2px solid var(--rf-color-primary);
125
+ outline-offset: -2px;
126
+ }
127
+ .rf-audio-player__chapter--active {
128
+ background: color-mix(in srgb, var(--rf-color-primary) 8%, transparent);
129
+ }
130
+ .rf-audio-player__chapter--active .rf-audio-player__chapter-name {
131
+ color: var(--rf-color-primary);
132
+ }
133
+ .rf-audio-player__chapter-name {
134
+ font-size: var(--rf-text-sm);
135
+ font-weight: var(--rf-weight-medium);
136
+ color: var(--rf-color-text);
137
+ }
138
+ .rf-audio-player__chapter-time {
139
+ font-size: var(--rf-text-xs);
140
+ font-variant-numeric: tabular-nums;
141
+ color: var(--rf-color-muted);
142
+ }
152
143
 
144
+ /* Active track highlight when connected to audio player */
145
+ .rf-track--active {
146
+ background: color-mix(in srgb, var(--rf-color-primary) 6%, transparent);
147
+ border-radius: var(--rf-radius-sm, 4px);
148
+ }
149
+ .rf-track--active .rf-track__track-name {
150
+ color: var(--rf-color-primary);
151
+ }
153
152
  }
@@ -1,5 +1,5 @@
1
1
  @layer skin {
2
- /* Badge rune — standalone inline chip.
2
+ /* Badge rune — standalone inline chip.
3
3
  *
4
4
  * The universal chip primitive emitted by `{% badge %}` AND by every
5
5
  * chip-type field a block renders (`bar` chips, `definition-list` `<dd>`
@@ -11,16 +11,15 @@
11
11
  * gives `--meta-color` works without per-status selectors.
12
12
  */
13
13
 
14
- .rf-badge {
15
- vertical-align: baseline;
16
- border: none;
17
- background: color-mix(in srgb, var(--meta-color, var(--rf-color-muted)) 10%, transparent);
18
- color: var(--meta-color, var(--rf-color-muted));
19
- font-size: var(--rf-text-xs);
20
- font-weight: var(--rf-weight-medium);
21
- padding: 0.125rem 0.5rem;
22
- border-radius: var(--rf-radius-sm);
23
- white-space: nowrap;
24
- }
25
-
14
+ .rf-badge {
15
+ vertical-align: baseline;
16
+ border: none;
17
+ background: color-mix(in srgb, var(--meta-color, var(--rf-color-muted)) 10%, transparent);
18
+ color: var(--meta-color, var(--rf-color-muted));
19
+ font-size: var(--rf-text-xs);
20
+ font-weight: var(--rf-weight-medium);
21
+ padding: 0.125rem 0.5rem;
22
+ border-radius: var(--rf-radius-sm);
23
+ white-space: nowrap;
24
+ }
26
25
  }
@@ -1,13 +1,12 @@
1
1
  @layer skin {
2
- /* Bar rune — composable handle for the SPEC-080 `bar` layout.
2
+ /* Bar rune — composable handle for the SPEC-080 `bar` layout.
3
3
  *
4
4
  * Geometry comes from `[data-zone-layout="bar"]` in
5
5
  * `dimensions/metadata.css` (flex row, wrap, `[data-align="end"]`
6
6
  * right-push). This file only carries the minimum class hook so the rune
7
7
  * participates in CSS tree-shaking. */
8
8
 
9
- .rf-bar {
10
- margin: 0.5rem 0;
11
- }
12
-
9
+ .rf-bar {
10
+ margin: 0.5rem 0;
11
+ }
13
12
  }
@@ -1,81 +1,92 @@
1
1
  @layer skin {
2
- /* Bento — skin. A grid of cells, each a card-in-a-grid-track (SPEC-085). The
2
+ /* Bento — skin. A grid of cells, each a card-in-a-grid-track (SPEC-085). The
3
3
  * container-query grid system, cell flex layout, media placement, sizing knobs,
4
4
  * collapse queries, and the stretched link live in @refrakt-md/skeleton
5
5
  * (styles/runes/bento.css). What remains here is skin: the grid gap, the cell
6
6
  * surface chrome + spacing vars, the media-well chrome, type, and bleed resets. */
7
7
 
8
- .rf-bento__grid {
9
- gap: var(--bento-gap, 1rem);
10
- }
8
+ .rf-bento__grid {
9
+ gap: var(--bento-gap, 1rem);
10
+ }
11
11
 
12
- /* The cell. `:where()` keeps the background at zero specificity so a per-cell
12
+ /* The cell. `:where()` keeps the background at zero specificity so a per-cell
13
13
  * `{% tint %}` can repaint it (tint-deferrable). */
14
- :where(.rf-bento-cell) {
15
- background: var(--rf-color-surface);
16
- }
17
- .rf-bento-cell {
18
- --rf-title-size: var(--rf-text-lg);
19
- border-radius: var(--rf-radius-container);
20
- /* Thin-edge inset model: the cell hugs its media with a thin edge; the content
14
+ :where(.rf-bento-cell) {
15
+ background: var(--rf-color-surface);
16
+ }
17
+ .rf-bento-cell {
18
+ --rf-title-size: var(--rf-text-lg);
19
+ border-radius: var(--rf-radius-container);
20
+ /* Thin-edge inset model: the cell hugs its media with a thin edge; the content
21
21
  * zone adds the remaining inset back (below). */
22
- --container-padding: 1.25rem;
23
- --bento-cell-edge: 0.5rem;
24
- --bento-media-gap: var(--rf-spacing-md);
25
- padding: var(--bento-cell-edge);
26
- border: 1px solid var(--rf-color-border);
27
- gap: var(--bento-media-gap);
28
- }
22
+ --container-padding: 1.25rem;
23
+ --bento-cell-edge: 0.5rem;
24
+ --bento-media-gap: var(--rf-spacing-md);
25
+ padding: var(--bento-cell-edge);
26
+ border: 1px solid var(--rf-color-border);
27
+ gap: var(--bento-media-gap);
28
+ }
29
29
 
30
- /* Media slot shares the cell surface chrome (1px border + recessed well). */
31
- :where(.rf-bento-cell) [data-section="media"] {
32
- border: 1px solid var(--rf-color-border);
33
- background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
34
- }
30
+ /* Media slot shares the cell surface chrome (1px border + recessed well). */
31
+ :where(.rf-bento-cell) [data-section="media"] {
32
+ border: 1px solid var(--rf-color-border);
33
+ background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
34
+ }
35
35
 
36
- .rf-bento-cell[data-media-position="start"] > .rf-bento-cell__media,
37
- .rf-bento-cell[data-media-position="end"] > .rf-bento-cell__media {
38
- margin-bottom: 0;
39
- }
36
+ .rf-bento-cell[data-media-position="start"] > .rf-bento-cell__media,
37
+ .rf-bento-cell[data-media-position="end"] > .rf-bento-cell__media {
38
+ margin-bottom: 0;
39
+ }
40
40
 
41
- .rf-bento-cell__media { margin-bottom: 0; }
41
+ .rf-bento-cell__media {
42
+ margin-bottom: 0;
43
+ }
42
44
 
43
- /* Add the remaining inset back on top of the cell's thin edge, so text sits at
45
+ /* Add the remaining inset back on top of the cell's thin edge, so text sits at
44
46
  * the full `--container-padding`. */
45
- .rf-bento-cell__content {
46
- padding: calc(var(--container-padding) - var(--bento-cell-edge));
47
- }
48
- .rf-bento-cell__title {
49
- /* WORK-538 — read the prominence override first; the fallback is this rune's
47
+ .rf-bento-cell__content {
48
+ padding: calc(var(--container-padding) - var(--bento-cell-edge));
49
+ }
50
+ .rf-bento-cell__title {
51
+ /* WORK-538 — read the prominence override first; the fallback is this rune's
50
52
  * resting size, stated as --rf-title-size on the root so the prominence ramp
51
53
  * can compute from it. */
52
- font-size: var(--rf-prominence-size, var(--rf-title-size));
53
- font-weight: var(--rf-weight-semibold);
54
- margin: 0 0 0.5rem;
55
- }
56
- .rf-bento-cell__body > :first-child { margin-top: 0; }
57
- .rf-bento-cell__body p:last-child { margin-bottom: 0; }
58
- .rf-bento-cell__footer {
59
- padding-top: 0.5rem;
60
- border-top: 1px solid var(--rf-color-border);
61
- font-size: 0.8125em;
62
- color: var(--rf-color-muted);
63
- }
64
- .rf-bento-cell__body img {
65
- border-radius: var(--rf-radius-sm);
66
- margin-bottom: 0.75rem;
67
- }
54
+ font-size: var(--rf-prominence-size, var(--rf-title-size));
55
+ font-weight: var(--rf-weight-semibold);
56
+ margin: 0 0 0.5rem;
57
+ }
58
+ .rf-bento-cell__body > :first-child {
59
+ margin-top: 0;
60
+ }
61
+ .rf-bento-cell__body p:last-child {
62
+ margin-bottom: 0;
63
+ }
64
+ .rf-bento-cell__footer {
65
+ padding-top: 0.5rem;
66
+ border-top: 1px solid var(--rf-color-border);
67
+ font-size: 0.8125em;
68
+ color: var(--rf-color-muted);
69
+ }
70
+ .rf-bento-cell__body img {
71
+ border-radius: var(--rf-radius-sm);
72
+ margin-bottom: 0.75rem;
73
+ }
68
74
 
69
- /* Drop padding on bleed edges when a showcase bleeds (clipped to a peek by
75
+ /* Drop padding on bleed edges when a showcase bleeds (clipped to a peek by
70
76
  * the media-zone + cell overflow). */
71
- .rf-bento-cell:has(.rf-showcase[data-bleed="bottom"]),
72
- .rf-bento-cell:has(.rf-showcase[data-bleed="both"]),
73
- .rf-bento-cell:has(.rf-showcase[data-bleed="bottom-end"]) { padding-bottom: 0; }
74
- .rf-bento-cell:has(.rf-showcase[data-bleed="end"]),
75
- .rf-bento-cell:has(.rf-showcase[data-bleed="bottom-end"]),
76
- .rf-bento-cell:has(.rf-showcase[data-bleed="top-end"]) { padding-inline-end: 0; }
77
- .rf-bento-cell:has(.rf-showcase[data-bleed="top"]),
78
- .rf-bento-cell:has(.rf-showcase[data-bleed="both"]),
79
- .rf-bento-cell:has(.rf-showcase[data-bleed="top-end"]) { padding-top: 0; }
80
-
77
+ .rf-bento-cell:has(.rf-showcase[data-bleed="bottom"]),
78
+ .rf-bento-cell:has(.rf-showcase[data-bleed="both"]),
79
+ .rf-bento-cell:has(.rf-showcase[data-bleed="bottom-end"]) {
80
+ padding-bottom: 0;
81
+ }
82
+ .rf-bento-cell:has(.rf-showcase[data-bleed="end"]),
83
+ .rf-bento-cell:has(.rf-showcase[data-bleed="bottom-end"]),
84
+ .rf-bento-cell:has(.rf-showcase[data-bleed="top-end"]) {
85
+ padding-inline-end: 0;
86
+ }
87
+ .rf-bento-cell:has(.rf-showcase[data-bleed="top"]),
88
+ .rf-bento-cell:has(.rf-showcase[data-bleed="both"]),
89
+ .rf-bento-cell:has(.rf-showcase[data-bleed="top-end"]) {
90
+ padding-top: 0;
91
+ }
81
92
  }
@@ -1,54 +1,69 @@
1
1
  @layer skin {
2
- /* Background — Directive rune for background images, video, overlays, blur */
2
+ /* Background — Directive rune for background images, video, overlays, blur */
3
3
 
4
- /* Background layer — absolute positioned behind content. `border-radius:
4
+ /* Background layer — absolute positioned behind content. `border-radius:
5
5
  * inherit` rounds the gradient/image to whatever shape the parent surface has,
6
6
  * so a card / bento-cell / any rounded host clips the bg to its own corners
7
7
  * without needing `overflow: hidden` (though hosts with thin-edge padding
8
8
  * still need it so the bg can't poke past the rounded outer edge). */
9
- [data-name="bg"] {
10
- border-radius: inherit;
11
- background-image: var(--bg-image);
12
- background-size: var(--bg-fit, cover);
13
- background-position: var(--bg-position, center);
14
- background-repeat: no-repeat;
15
- }
16
- /* Blur and opacity applied when set via custom properties */
17
- [data-name="bg"][style*="--bg-blur"] {
18
- filter: blur(var(--bg-blur));
19
- }
20
- [data-name="bg"][style*="--bg-opacity"] {
21
- opacity: var(--bg-opacity);
22
- }
23
- /* Fixed (parallax) background */
24
- [data-name="bg"][data-bg-fixed] {
25
- background-attachment: fixed;
26
- }
27
- [data-name="bg-video"][style*="--bg-blur"] {
28
- filter: blur(var(--bg-blur));
29
- }
30
- [data-name="bg-video"][style*="--bg-opacity"] {
31
- opacity: var(--bg-opacity);
32
- }
33
- [data-name="bg-overlay"][data-bg-overlay="dark"] {
34
- background: rgba(0, 0, 0, 0.5);
35
- }
36
- [data-name="bg-overlay"][data-bg-overlay="light"] {
37
- background: rgba(255, 255, 255, 0.6);
38
- }
39
- [data-name="scrim"][data-scrim-tone="dark"] { --scrim-color: 0 0 0; }
40
- [data-name="scrim"][data-scrim-tone="light"] { --scrim-color: 255 255 255; }
41
- [data-name="scrim"][data-scrim-dir="top"] { --scrim-grad-dir: to top; }
42
- [data-name="scrim"][data-scrim-dir="bottom"] { --scrim-grad-dir: to bottom; }
43
- [data-name="scrim"][data-scrim-dir="left"] { --scrim-grad-dir: to left; }
44
- [data-name="scrim"][data-scrim-dir="right"] { --scrim-grad-dir: to right; }
45
- [data-name="scrim"][data-scrim="gradient"] {
46
- background-image: linear-gradient(var(--scrim-grad-dir, to top), transparent, rgb(var(--scrim-color, 0 0 0) / var(--scrim-strength, 0.55)));
47
- }
48
- [data-name="scrim"][data-scrim="frost"] {
49
- -webkit-backdrop-filter: blur(var(--scrim-blur, 8px));
50
- backdrop-filter: blur(var(--scrim-blur, 8px));
51
- background: rgb(var(--scrim-color, 0 0 0) / 0.18);
52
- }
53
-
9
+ [data-name="bg"] {
10
+ border-radius: inherit;
11
+ background-image: var(--bg-image);
12
+ background-size: var(--bg-fit, cover);
13
+ background-position: var(--bg-position, center);
14
+ background-repeat: no-repeat;
15
+ }
16
+ /* Blur and opacity applied when set via custom properties */
17
+ [data-name="bg"][style*="--bg-blur"] {
18
+ filter: blur(var(--bg-blur));
19
+ }
20
+ [data-name="bg"][style*="--bg-opacity"] {
21
+ opacity: var(--bg-opacity);
22
+ }
23
+ /* Fixed (parallax) background */
24
+ [data-name="bg"][data-bg-fixed] {
25
+ background-attachment: fixed;
26
+ }
27
+ [data-name="bg-video"][style*="--bg-blur"] {
28
+ filter: blur(var(--bg-blur));
29
+ }
30
+ [data-name="bg-video"][style*="--bg-opacity"] {
31
+ opacity: var(--bg-opacity);
32
+ }
33
+ [data-name="bg-overlay"][data-bg-overlay="dark"] {
34
+ background: rgba(0, 0, 0, 0.5);
35
+ }
36
+ [data-name="bg-overlay"][data-bg-overlay="light"] {
37
+ background: rgba(255, 255, 255, 0.6);
38
+ }
39
+ [data-name="scrim"][data-scrim-tone="dark"] {
40
+ --scrim-color: 0 0 0;
41
+ }
42
+ [data-name="scrim"][data-scrim-tone="light"] {
43
+ --scrim-color: 255 255 255;
44
+ }
45
+ [data-name="scrim"][data-scrim-dir="top"] {
46
+ --scrim-grad-dir: to top;
47
+ }
48
+ [data-name="scrim"][data-scrim-dir="bottom"] {
49
+ --scrim-grad-dir: to bottom;
50
+ }
51
+ [data-name="scrim"][data-scrim-dir="left"] {
52
+ --scrim-grad-dir: to left;
53
+ }
54
+ [data-name="scrim"][data-scrim-dir="right"] {
55
+ --scrim-grad-dir: to right;
56
+ }
57
+ [data-name="scrim"][data-scrim="gradient"] {
58
+ background-image: linear-gradient(
59
+ var(--scrim-grad-dir, to top),
60
+ transparent,
61
+ rgb(var(--scrim-color, 0 0 0) / var(--scrim-strength, 0.55))
62
+ );
63
+ }
64
+ [data-name="scrim"][data-scrim="frost"] {
65
+ -webkit-backdrop-filter: blur(var(--scrim-blur, 8px));
66
+ backdrop-filter: blur(var(--scrim-blur, 8px));
67
+ background: rgb(var(--scrim-color, 0 0 0) / 0.18);
68
+ }
54
69
  }