@refrakt-md/lumina 0.33.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 (141) hide show
  1. package/base.css +29 -29
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/icons.d.ts.map +1 -1
  5. package/dist/icons.js +57 -57
  6. package/dist/icons.js.map +1 -1
  7. package/dist/presets/catppuccin.js.map +1 -1
  8. package/dist/presets/dracula.js.map +1 -1
  9. package/dist/presets/gruvbox.js.map +1 -1
  10. package/dist/presets/niwaki.js.map +1 -1
  11. package/dist/presets/nord.js.map +1 -1
  12. package/dist/presets/one-dark.js.map +1 -1
  13. package/dist/presets/solarized.js.map +1 -1
  14. package/dist/presets/tideline.d.ts.map +1 -1
  15. package/dist/presets/tideline.js +20 -4
  16. package/dist/presets/tideline.js.map +1 -1
  17. package/dist/presets/tokyo-night.js.map +1 -1
  18. package/dist/tokens.js.map +1 -1
  19. package/index.css +124 -124
  20. package/package.json +5 -5
  21. package/presets.json +61 -13
  22. package/styles/base/attributes.css +32 -13
  23. package/styles/dimensions/checklist.css +45 -46
  24. package/styles/dimensions/cover.css +71 -51
  25. package/styles/dimensions/density.css +69 -65
  26. package/styles/dimensions/frame.css +116 -57
  27. package/styles/dimensions/metadata.css +110 -103
  28. package/styles/dimensions/motion.css +42 -13
  29. package/styles/dimensions/reading.css +27 -27
  30. package/styles/dimensions/sections.css +44 -45
  31. package/styles/dimensions/sequence.css +56 -57
  32. package/styles/dimensions/state.css +8 -2
  33. package/styles/dimensions/substrate.css +82 -58
  34. package/styles/dimensions/surfaces.css +65 -62
  35. package/styles/elements/blockquote.css +24 -25
  36. package/styles/elements/code.css +72 -71
  37. package/styles/elements/table.css +36 -37
  38. package/styles/global.css +163 -121
  39. package/styles/layouts/blog.css +219 -218
  40. package/styles/layouts/default.css +168 -167
  41. package/styles/layouts/docs.css +121 -122
  42. package/styles/layouts/mobile.css +54 -55
  43. package/styles/layouts/on-this-page.css +46 -47
  44. package/styles/layouts/plan.css +248 -247
  45. package/styles/layouts/search.css +142 -140
  46. package/styles/layouts/split.css +45 -45
  47. package/styles/layouts/theme-toggle.css +33 -31
  48. package/styles/layouts/version-switcher.css +38 -37
  49. package/styles/runes/accordion.css +90 -81
  50. package/styles/runes/aggregate.css +50 -39
  51. package/styles/runes/annotate.css +46 -45
  52. package/styles/runes/api.css +22 -23
  53. package/styles/runes/audio.css +140 -141
  54. package/styles/runes/badge.css +12 -13
  55. package/styles/runes/bar.css +4 -5
  56. package/styles/runes/bento.css +73 -62
  57. package/styles/runes/bg.css +62 -47
  58. package/styles/runes/blog.css +89 -90
  59. package/styles/runes/bond.css +49 -50
  60. package/styles/runes/breadcrumb.css +34 -35
  61. package/styles/runes/budget.css +126 -127
  62. package/styles/runes/bug.css +28 -27
  63. package/styles/runes/card.css +63 -60
  64. package/styles/runes/carousel.css +15 -15
  65. package/styles/runes/cast.css +50 -51
  66. package/styles/runes/changelog.css +45 -46
  67. package/styles/runes/character.css +31 -32
  68. package/styles/runes/chart.css +194 -106
  69. package/styles/runes/codegroup.css +109 -100
  70. package/styles/runes/collection.css +87 -86
  71. package/styles/runes/compare.css +38 -39
  72. package/styles/runes/comparison.css +205 -179
  73. package/styles/runes/conversation.css +36 -33
  74. package/styles/runes/cta.css +135 -132
  75. package/styles/runes/datatable.css +84 -83
  76. package/styles/runes/decision.css +25 -26
  77. package/styles/runes/design-context.css +21 -23
  78. package/styles/runes/details.css +26 -27
  79. package/styles/runes/diagram.css +28 -29
  80. package/styles/runes/diff.css +75 -72
  81. package/styles/runes/drawer.css +276 -198
  82. package/styles/runes/embed.css +20 -21
  83. package/styles/runes/event.css +35 -36
  84. package/styles/runes/expand.css +43 -34
  85. package/styles/runes/faction.css +47 -48
  86. package/styles/runes/feature.css +119 -112
  87. package/styles/runes/figure.css +11 -12
  88. package/styles/runes/file-ref.css +11 -13
  89. package/styles/runes/form.css +155 -154
  90. package/styles/runes/gallery.css +59 -60
  91. package/styles/runes/grid.css +10 -7
  92. package/styles/runes/hero.css +189 -185
  93. package/styles/runes/hint.css +57 -58
  94. package/styles/runes/howto.css +62 -64
  95. package/styles/runes/itinerary.css +133 -134
  96. package/styles/runes/juxtapose.css +83 -82
  97. package/styles/runes/lore.css +32 -34
  98. package/styles/runes/map.css +106 -99
  99. package/styles/runes/mediatext.css +30 -27
  100. package/styles/runes/milestone.css +98 -97
  101. package/styles/runes/mockup.css +338 -335
  102. package/styles/runes/nav.css +465 -450
  103. package/styles/runes/organization.css +23 -20
  104. package/styles/runes/page-section.css +14 -15
  105. package/styles/runes/pagination.css +45 -44
  106. package/styles/runes/palette.css +78 -80
  107. package/styles/runes/placeholder.css +8 -9
  108. package/styles/runes/plan-history.css +160 -161
  109. package/styles/runes/plan-progress.css +15 -16
  110. package/styles/runes/plan-ref.css +32 -23
  111. package/styles/runes/playlist.css +106 -107
  112. package/styles/runes/plot.css +92 -91
  113. package/styles/runes/preview.css +152 -149
  114. package/styles/runes/pricing.css +133 -123
  115. package/styles/runes/progress.css +32 -27
  116. package/styles/runes/pullquote.css +89 -90
  117. package/styles/runes/realm.css +47 -48
  118. package/styles/runes/recipe.css +112 -114
  119. package/styles/runes/relationships.css +77 -76
  120. package/styles/runes/reveal.css +90 -79
  121. package/styles/runes/sandbox.css +59 -60
  122. package/styles/runes/section.css +57 -50
  123. package/styles/runes/showcase.css +35 -16
  124. package/styles/runes/sidenote.css +30 -27
  125. package/styles/runes/snippet.css +8 -9
  126. package/styles/runes/spacing.css +86 -88
  127. package/styles/runes/spec.css +24 -25
  128. package/styles/runes/steps.css +89 -80
  129. package/styles/runes/storyboard.css +46 -45
  130. package/styles/runes/swatch.css +22 -23
  131. package/styles/runes/symbol.css +117 -118
  132. package/styles/runes/tabs.css +88 -79
  133. package/styles/runes/testimonial.css +43 -44
  134. package/styles/runes/textblock.css +32 -28
  135. package/styles/runes/timeline.css +63 -64
  136. package/styles/runes/tint.css +214 -215
  137. package/styles/runes/toc.css +40 -41
  138. package/styles/runes/track.css +89 -90
  139. package/styles/runes/typography.css +89 -91
  140. package/styles/runes/work.css +47 -36
  141. 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
  }