@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.
- package/base.css +29 -29
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +57 -57
- package/dist/icons.js.map +1 -1
- package/dist/presets/catppuccin.js.map +1 -1
- package/dist/presets/dracula.js.map +1 -1
- package/dist/presets/gruvbox.js.map +1 -1
- package/dist/presets/niwaki.js.map +1 -1
- package/dist/presets/nord.js.map +1 -1
- package/dist/presets/one-dark.js.map +1 -1
- package/dist/presets/solarized.js.map +1 -1
- package/dist/presets/tideline.d.ts.map +1 -1
- package/dist/presets/tideline.js +20 -4
- package/dist/presets/tideline.js.map +1 -1
- package/dist/presets/tokyo-night.js.map +1 -1
- package/dist/tokens.js.map +1 -1
- package/index.css +124 -124
- package/package.json +5 -5
- package/presets.json +61 -13
- package/styles/base/attributes.css +32 -13
- package/styles/dimensions/checklist.css +45 -46
- package/styles/dimensions/cover.css +71 -51
- package/styles/dimensions/density.css +69 -65
- package/styles/dimensions/frame.css +116 -57
- package/styles/dimensions/metadata.css +110 -103
- package/styles/dimensions/motion.css +42 -13
- package/styles/dimensions/reading.css +27 -27
- package/styles/dimensions/sections.css +44 -45
- package/styles/dimensions/sequence.css +56 -57
- package/styles/dimensions/state.css +8 -2
- package/styles/dimensions/substrate.css +82 -58
- package/styles/dimensions/surfaces.css +65 -62
- package/styles/elements/blockquote.css +24 -25
- package/styles/elements/code.css +72 -71
- package/styles/elements/table.css +36 -37
- package/styles/global.css +163 -121
- package/styles/layouts/blog.css +219 -218
- package/styles/layouts/default.css +168 -167
- package/styles/layouts/docs.css +121 -122
- package/styles/layouts/mobile.css +54 -55
- package/styles/layouts/on-this-page.css +46 -47
- package/styles/layouts/plan.css +248 -247
- package/styles/layouts/search.css +142 -140
- package/styles/layouts/split.css +45 -45
- package/styles/layouts/theme-toggle.css +33 -31
- package/styles/layouts/version-switcher.css +38 -37
- package/styles/runes/accordion.css +90 -81
- package/styles/runes/aggregate.css +50 -39
- package/styles/runes/annotate.css +46 -45
- package/styles/runes/api.css +22 -23
- package/styles/runes/audio.css +140 -141
- package/styles/runes/badge.css +12 -13
- package/styles/runes/bar.css +4 -5
- package/styles/runes/bento.css +73 -62
- package/styles/runes/bg.css +62 -47
- package/styles/runes/blog.css +89 -90
- package/styles/runes/bond.css +49 -50
- package/styles/runes/breadcrumb.css +34 -35
- package/styles/runes/budget.css +126 -127
- package/styles/runes/bug.css +28 -27
- package/styles/runes/card.css +63 -60
- package/styles/runes/carousel.css +15 -15
- package/styles/runes/cast.css +50 -51
- package/styles/runes/changelog.css +45 -46
- package/styles/runes/character.css +31 -32
- package/styles/runes/chart.css +194 -106
- package/styles/runes/codegroup.css +109 -100
- package/styles/runes/collection.css +87 -86
- package/styles/runes/compare.css +38 -39
- package/styles/runes/comparison.css +205 -179
- package/styles/runes/conversation.css +36 -33
- package/styles/runes/cta.css +135 -132
- package/styles/runes/datatable.css +84 -83
- package/styles/runes/decision.css +25 -26
- package/styles/runes/design-context.css +21 -23
- package/styles/runes/details.css +26 -27
- package/styles/runes/diagram.css +28 -29
- package/styles/runes/diff.css +75 -72
- package/styles/runes/drawer.css +276 -198
- package/styles/runes/embed.css +20 -21
- package/styles/runes/event.css +35 -36
- package/styles/runes/expand.css +43 -34
- package/styles/runes/faction.css +47 -48
- package/styles/runes/feature.css +119 -112
- package/styles/runes/figure.css +11 -12
- package/styles/runes/file-ref.css +11 -13
- package/styles/runes/form.css +155 -154
- package/styles/runes/gallery.css +59 -60
- package/styles/runes/grid.css +10 -7
- package/styles/runes/hero.css +189 -185
- package/styles/runes/hint.css +57 -58
- package/styles/runes/howto.css +62 -64
- package/styles/runes/itinerary.css +133 -134
- package/styles/runes/juxtapose.css +83 -82
- package/styles/runes/lore.css +32 -34
- package/styles/runes/map.css +106 -99
- package/styles/runes/mediatext.css +30 -27
- package/styles/runes/milestone.css +98 -97
- package/styles/runes/mockup.css +338 -335
- package/styles/runes/nav.css +465 -450
- package/styles/runes/organization.css +23 -20
- package/styles/runes/page-section.css +14 -15
- package/styles/runes/pagination.css +45 -44
- package/styles/runes/palette.css +78 -80
- package/styles/runes/placeholder.css +8 -9
- package/styles/runes/plan-history.css +160 -161
- package/styles/runes/plan-progress.css +15 -16
- package/styles/runes/plan-ref.css +32 -23
- package/styles/runes/playlist.css +106 -107
- package/styles/runes/plot.css +92 -91
- package/styles/runes/preview.css +152 -149
- package/styles/runes/pricing.css +133 -123
- package/styles/runes/progress.css +32 -27
- package/styles/runes/pullquote.css +89 -90
- package/styles/runes/realm.css +47 -48
- package/styles/runes/recipe.css +112 -114
- package/styles/runes/relationships.css +77 -76
- package/styles/runes/reveal.css +90 -79
- package/styles/runes/sandbox.css +59 -60
- package/styles/runes/section.css +57 -50
- package/styles/runes/showcase.css +35 -16
- package/styles/runes/sidenote.css +30 -27
- package/styles/runes/snippet.css +8 -9
- package/styles/runes/spacing.css +86 -88
- package/styles/runes/spec.css +24 -25
- package/styles/runes/steps.css +89 -80
- package/styles/runes/storyboard.css +46 -45
- package/styles/runes/swatch.css +22 -23
- package/styles/runes/symbol.css +117 -118
- package/styles/runes/tabs.css +88 -79
- package/styles/runes/testimonial.css +43 -44
- package/styles/runes/textblock.css +32 -28
- package/styles/runes/timeline.css +63 -64
- package/styles/runes/tint.css +214 -215
- package/styles/runes/toc.css +40 -41
- package/styles/runes/track.css +89 -90
- package/styles/runes/typography.css +89 -91
- package/styles/runes/work.css +47 -36
- package/styles/runes/xref.css +21 -22
|
@@ -13,8 +13,14 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@keyframes rf-expand {
|
|
16
|
-
from {
|
|
17
|
-
|
|
16
|
+
from {
|
|
17
|
+
opacity: 0;
|
|
18
|
+
transform: translateY(-0.5rem);
|
|
19
|
+
}
|
|
20
|
+
to {
|
|
21
|
+
opacity: 1;
|
|
22
|
+
transform: translateY(0);
|
|
23
|
+
}
|
|
18
24
|
}
|
|
19
25
|
|
|
20
26
|
/* Active/inactive selection indicators */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Substrate (SPEC-087) — generated surface pattern.
|
|
2
|
+
/* Substrate (SPEC-087) — generated surface pattern.
|
|
3
3
|
*
|
|
4
4
|
* The token-driven gradient recipes that realise each pattern ship here in the
|
|
5
5
|
* always-included base layer (not a theme's swappable CSS), so "dots = dots on
|
|
@@ -21,42 +21,59 @@
|
|
|
21
21
|
* and each pattern only feeds custom properties (which never collide with a
|
|
22
22
|
* rune's background). The rune's `background-color` still shows through. */
|
|
23
23
|
|
|
24
|
-
[data-substrate]:not([data-substrate="none"]) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
[data-substrate]:not([data-substrate="none"]) {
|
|
25
|
+
--substrate-cell: 16px;
|
|
26
|
+
--substrate-opacity: 0.5;
|
|
27
|
+
/* `--substrate-boost` (per-pattern) and `--substrate-mode-boost` (light/dark)
|
|
28
28
|
* are intentionally NOT set here — only referenced with a `1` fallback — so a
|
|
29
29
|
* lower-specificity pattern rule or an inherited dark-mode rule can drive them
|
|
30
30
|
* without losing to this (0,2,0) base. The product is clamped to 100% by
|
|
31
31
|
* color-mix. */
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
--substrate-ink: color-mix(
|
|
33
|
+
in oklab,
|
|
34
|
+
var(--rf-color-border)
|
|
35
|
+
calc(
|
|
36
|
+
var(--substrate-opacity) *
|
|
37
|
+
var(--substrate-boost, 1) *
|
|
38
|
+
var(--substrate-mode-boost, 1) *
|
|
39
|
+
100%
|
|
40
|
+
),
|
|
41
|
+
transparent
|
|
42
|
+
);
|
|
43
|
+
background-image: var(--substrate-image);
|
|
44
|
+
background-size: var(--substrate-tile, var(--substrate-cell) var(--substrate-cell));
|
|
45
|
+
background-position: var(--substrate-pos, 0 0);
|
|
46
|
+
background-repeat: repeat;
|
|
47
|
+
}
|
|
38
48
|
|
|
39
|
-
/* dots — one tiled radial-gradient. A small dot reads fainter than a 1px line,
|
|
49
|
+
/* dots — one tiled radial-gradient. A small dot reads fainter than a 1px line,
|
|
40
50
|
* so dots get a per-pattern ink boost. */
|
|
41
|
-
[data-substrate="dots"] {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
[data-substrate="dots"] {
|
|
52
|
+
--substrate-image: radial-gradient(
|
|
53
|
+
var(--substrate-ink) var(--substrate-dot, 1.5px),
|
|
54
|
+
transparent 0
|
|
55
|
+
);
|
|
56
|
+
--substrate-boost: 1.4;
|
|
57
|
+
}
|
|
45
58
|
|
|
46
|
-
/* grid — two tiled linear-gradients */
|
|
47
|
-
[data-substrate="grid"] {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
59
|
+
/* grid — two tiled linear-gradients */
|
|
60
|
+
[data-substrate="grid"] {
|
|
61
|
+
--substrate-image:
|
|
62
|
+
linear-gradient(var(--substrate-ink) 1px, transparent 1px),
|
|
63
|
+
linear-gradient(90deg, var(--substrate-ink) 1px, transparent 1px);
|
|
64
|
+
}
|
|
52
65
|
|
|
53
|
-
/* lines — diagonal hatching (the repeating gradient owns its own spacing) */
|
|
54
|
-
[data-substrate="lines"] {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
/* lines — diagonal hatching (the repeating gradient owns its own spacing) */
|
|
67
|
+
[data-substrate="lines"] {
|
|
68
|
+
--substrate-image: repeating-linear-gradient(
|
|
69
|
+
45deg,
|
|
70
|
+
var(--substrate-ink) 0 1px,
|
|
71
|
+
transparent 1px var(--substrate-cell)
|
|
72
|
+
);
|
|
73
|
+
--substrate-tile: auto;
|
|
74
|
+
}
|
|
58
75
|
|
|
59
|
-
/* cross — plus marks at the centre of each cell, drawn as two perpendicular
|
|
76
|
+
/* cross — plus marks at the centre of each cell, drawn as two perpendicular
|
|
60
77
|
* thin ellipses (no `mask` — an element-level `mask` would clip the rune's
|
|
61
78
|
* own text content along with the pattern, which is what we don't want). A
|
|
62
79
|
* small plus reads fainter than a 1px line at the same ink opacity, so the
|
|
@@ -67,45 +84,52 @@
|
|
|
67
84
|
* transparent for a zero-length transition, beats the `ink 100%, transparent
|
|
68
85
|
* 100%` form which some renderers collapse to nothing). Ellipse radii at
|
|
69
86
|
* 1px (rather than sub-pixel 0.5px) so the stroke survives DPR rounding. */
|
|
70
|
-
[data-substrate="cross"] {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
87
|
+
[data-substrate="cross"] {
|
|
88
|
+
--substrate-image:
|
|
89
|
+
radial-gradient(ellipse 3px 1px at center, var(--substrate-ink) 100%, transparent 0),
|
|
90
|
+
radial-gradient(ellipse 1px 3px at center, var(--substrate-ink) 100%, transparent 0);
|
|
91
|
+
--substrate-pos: center;
|
|
92
|
+
--substrate-boost: 1.6;
|
|
93
|
+
}
|
|
77
94
|
|
|
78
|
-
/* checker — alternating filled cells */
|
|
79
|
-
[data-substrate="checker"] {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
/* checker — alternating filled cells */
|
|
96
|
+
[data-substrate="checker"] {
|
|
97
|
+
--substrate-image: conic-gradient(
|
|
98
|
+
var(--substrate-ink) 0 25%,
|
|
99
|
+
transparent 0 50%,
|
|
100
|
+
var(--substrate-ink) 0 75%,
|
|
101
|
+
transparent 0
|
|
102
|
+
);
|
|
103
|
+
}
|
|
83
104
|
|
|
84
|
-
[data-substrate="none"] {
|
|
105
|
+
[data-substrate="none"] {
|
|
106
|
+
background-image: none;
|
|
107
|
+
}
|
|
85
108
|
|
|
86
|
-
/* substrate-fill="inset" — paint the pattern over the recessed inset fill
|
|
109
|
+
/* substrate-fill="inset" — paint the pattern over the recessed inset fill
|
|
87
110
|
* (SPEC-087 inset surface) instead of the inherited surface colour. */
|
|
88
|
-
[data-substrate][data-substrate-fill="inset"] {
|
|
89
|
-
|
|
90
|
-
|
|
111
|
+
[data-substrate][data-substrate-fill="inset"] {
|
|
112
|
+
background-color: oklch(
|
|
113
|
+
from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h
|
|
114
|
+
);
|
|
115
|
+
}
|
|
91
116
|
|
|
92
|
-
/* Dark mode — the border ink sits close to the dark surface, so patterns need
|
|
117
|
+
/* Dark mode — the border ink sits close to the dark surface, so patterns need
|
|
93
118
|
* more presence across the board (dots compound their per-pattern boost on top,
|
|
94
119
|
* landing near full strength). Set the multiplier on the dark root so it
|
|
95
120
|
* inherits into every substrate element; mirrors how dark.css triggers dark. */
|
|
96
|
-
[data-theme="dark"],
|
|
97
|
-
[data-color-scheme="dark"] {
|
|
98
|
-
--substrate-mode-boost: 1.6;
|
|
99
|
-
}
|
|
100
|
-
@media (prefers-color-scheme: dark) {
|
|
101
|
-
:root:not([data-theme="light"]) {
|
|
121
|
+
[data-theme="dark"],
|
|
122
|
+
[data-color-scheme="dark"] {
|
|
102
123
|
--substrate-mode-boost: 1.6;
|
|
103
124
|
}
|
|
104
|
-
|
|
105
|
-
|
|
125
|
+
@media (prefers-color-scheme: dark) {
|
|
126
|
+
:root:not([data-theme="light"]) {
|
|
127
|
+
--substrate-mode-boost: 1.6;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/* A tint-locked light subtree resets to the light intensity (nearest ancestor
|
|
106
131
|
* wins via inheritance), even when nested inside dark mode. */
|
|
107
|
-
[data-color-scheme="light"] {
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
132
|
+
[data-color-scheme="light"] {
|
|
133
|
+
--substrate-mode-boost: 1;
|
|
134
|
+
}
|
|
111
135
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* ─── Surface Assignments (SPEC-107) ───────────────────────────────────
|
|
2
|
+
/* ─── Surface Assignments (SPEC-107) ───────────────────────────────────
|
|
3
3
|
* Surface chrome is selected by the `data-elevation` depth-ladder axis, not by
|
|
4
4
|
* rune name. Each rung maps to a chrome bundle (fill / border / radius /
|
|
5
5
|
* padding / resting shadow); `data-prominence` maps the page-section-header
|
|
@@ -8,33 +8,37 @@
|
|
|
8
8
|
* preserved while a theme can re-point any rune to a different rung.
|
|
9
9
|
* ────────────────────────────────────────────────────────────────────── */
|
|
10
10
|
|
|
11
|
-
/* Semantic surface/media aliases over the raw token scale (these reference
|
|
11
|
+
/* Semantic surface/media aliases over the raw token scale (these reference
|
|
12
12
|
* tokens rather than holding raw values, so they live in the styles layer, not
|
|
13
13
|
* the generated token contract). Outer surfaces round at --rf-radius-container;
|
|
14
14
|
* media guests nested inside them round at the smaller --rf-radius-media so they
|
|
15
15
|
* never read as more rounded than their container. SPEC-086's `frame` will
|
|
16
16
|
* override these per-instance. */
|
|
17
|
-
:root {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
17
|
+
:root {
|
|
18
|
+
--rf-radius-container: var(--rf-radius-lg);
|
|
19
|
+
--rf-radius-media: var(--rf-radius-md);
|
|
20
|
+
}
|
|
21
21
|
|
|
22
|
-
/* ─── Rune Spacing ────────────────────────────────────────────────── */
|
|
23
|
-
/* Only top-level runes get vertical margin; child runes (nav items,
|
|
22
|
+
/* ─── Rune Spacing ────────────────────────────────────────────────── */
|
|
23
|
+
/* Only top-level runes get vertical margin; child runes (nav items,
|
|
24
24
|
accordion items, grid cells, etc.) inherit spacing from their parent.
|
|
25
25
|
Layout-chrome navs (menubar in header, columns in footer) are excluded
|
|
26
26
|
so they sit flush with the surrounding header/footer container. */
|
|
27
27
|
|
|
28
|
-
/* `:where(...)` zeros the selector specificity so per-rune CSS, the
|
|
28
|
+
/* `:where(...)` zeros the selector specificity so per-rune CSS, the
|
|
29
29
|
* `[data-rune][data-spacing="..."]` attribute rules, and per-instance overrides
|
|
30
30
|
* all win cleanly. Without `:where()` the `:not([data-rune] [data-rune])` clause
|
|
31
31
|
* inflates this default to (0,3,0) — beating the (0,2,0) spacing attribute and
|
|
32
32
|
* masking `spacing="flush"` on top-level runes like hero. */
|
|
33
|
-
:where(
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
:where(
|
|
34
|
+
[data-rune]:not([data-rune] [data-rune]):not([data-layout="menubar"]):not(
|
|
35
|
+
[data-layout="columns"]
|
|
36
|
+
)
|
|
37
|
+
) {
|
|
38
|
+
margin: var(--rf-spacing-md) 0;
|
|
39
|
+
}
|
|
36
40
|
|
|
37
|
-
/* ─── Elevation: depth-ladder chrome ──────────────────────────────────
|
|
41
|
+
/* ─── Elevation: depth-ladder chrome ──────────────────────────────────
|
|
38
42
|
* `flat` and the shadow rungs (`raised` / `floating` / `overlay`) carry a
|
|
39
43
|
* surface: fill, border, radius, and container padding. `sunken` adds the same
|
|
40
44
|
* chrome but recesses its fill below the page. `flush` has no surface boundary
|
|
@@ -42,47 +46,47 @@
|
|
|
42
46
|
* box-shadow on top of the flat chrome (kept distinct from `frame-shadow`'s
|
|
43
47
|
* per-guest drop-shadow, SPEC-107 §1). */
|
|
44
48
|
|
|
45
|
-
[data-elevation="flat"],
|
|
46
|
-
[data-elevation="sunken"],
|
|
47
|
-
[data-elevation="raised"],
|
|
48
|
-
[data-elevation="floating"],
|
|
49
|
-
[data-elevation="overlay"] {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
49
|
+
[data-elevation="flat"],
|
|
50
|
+
[data-elevation="sunken"],
|
|
51
|
+
[data-elevation="raised"],
|
|
52
|
+
[data-elevation="floating"],
|
|
53
|
+
[data-elevation="overlay"] {
|
|
54
|
+
background: var(--rf-color-surface);
|
|
55
|
+
border: 1px solid var(--rf-color-border);
|
|
56
|
+
border-radius: var(--rf-radius-container);
|
|
57
|
+
padding: var(--rune-padding, var(--rf-spacing-md));
|
|
58
|
+
}
|
|
55
59
|
|
|
56
|
-
/* Sunken — the recessed "darker surface" (e.g. chart / diagram). Derived at
|
|
60
|
+
/* Sunken — the recessed "darker surface" (e.g. chart / diagram). Derived at
|
|
57
61
|
* use-site via relative-color (lower L, keep C+H) so it recomputes from a
|
|
58
62
|
* tinted `--rf-color-surface` automatically (a static inset-colour token would
|
|
59
63
|
* freeze to the untinted :root). Writes `background` only — never re-bases
|
|
60
64
|
* `--rf-color-surface` — so insets don't compound under nesting; depth is
|
|
61
65
|
* conveyed by border + the darker fill. `--rf-surface-inset-shift: 0` flushes
|
|
62
66
|
* it back to the surface colour. */
|
|
63
|
-
[data-elevation="sunken"] {
|
|
64
|
-
|
|
65
|
-
}
|
|
67
|
+
[data-elevation="sunken"] {
|
|
68
|
+
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
69
|
+
}
|
|
66
70
|
|
|
67
|
-
/* Resting-shadow rungs — depth above the flat surface. */
|
|
68
|
-
[data-elevation="raised"] {
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
[data-elevation="floating"] {
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
[data-elevation="overlay"] {
|
|
75
|
-
|
|
76
|
-
}
|
|
71
|
+
/* Resting-shadow rungs — depth above the flat surface. */
|
|
72
|
+
[data-elevation="raised"] {
|
|
73
|
+
box-shadow: var(--rf-shadow-sm);
|
|
74
|
+
}
|
|
75
|
+
[data-elevation="floating"] {
|
|
76
|
+
box-shadow: var(--rf-shadow-md);
|
|
77
|
+
}
|
|
78
|
+
[data-elevation="overlay"] {
|
|
79
|
+
box-shadow: var(--rf-shadow-lg);
|
|
80
|
+
}
|
|
77
81
|
|
|
78
|
-
/* Flush — no surface boundary; only vertical rhythm (density-aware via
|
|
82
|
+
/* Flush — no surface boundary; only vertical rhythm (density-aware via
|
|
79
83
|
* --rune-padding). Replaces the old inline/banner padding buckets; banner runes
|
|
80
84
|
* that want a more generous band declare their own `padding-block`. */
|
|
81
|
-
[data-elevation="flush"] {
|
|
82
|
-
|
|
83
|
-
}
|
|
85
|
+
[data-elevation="flush"] {
|
|
86
|
+
padding-block: var(--rune-padding, var(--rf-spacing-sm));
|
|
87
|
+
}
|
|
84
88
|
|
|
85
|
-
/* ─── Prominence: page-section-header type register ───────────────────
|
|
89
|
+
/* ─── Prominence: page-section-header type register ───────────────────
|
|
86
90
|
* `data-prominence` re-points the section title size for page-section-header
|
|
87
91
|
* family runes (the engine only emits it where a header role exists). `normal`
|
|
88
92
|
* is the rune's resting size; the other steps ramp away from it, cascading down
|
|
@@ -103,17 +107,17 @@
|
|
|
103
107
|
* override. density.css clears the variable at every rune root, before these
|
|
104
108
|
* rules, so an ancestor's prominence cannot leak into a nested rune's title
|
|
105
109
|
* while a rune carrying both still keeps its own. */
|
|
106
|
-
[data-prominence="quiet"] {
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
[data-prominence="prominent"] {
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
[data-prominence="display"] {
|
|
113
|
-
|
|
114
|
-
}
|
|
110
|
+
[data-prominence="quiet"] {
|
|
111
|
+
--rf-prominence-size: calc(var(--rf-title-size, var(--rf-text-2xl)) * 5 / 6);
|
|
112
|
+
}
|
|
113
|
+
[data-prominence="prominent"] {
|
|
114
|
+
--rf-prominence-size: calc(var(--rf-title-size, var(--rf-text-2xl)) * 5 / 4);
|
|
115
|
+
}
|
|
116
|
+
[data-prominence="display"] {
|
|
117
|
+
--rf-prominence-size: calc(var(--rf-title-size, var(--rf-text-2xl)) * 5 / 3);
|
|
118
|
+
}
|
|
115
119
|
|
|
116
|
-
/* ─── Media slot shares the surface chrome ───────────────────────────
|
|
120
|
+
/* ─── Media slot shares the surface chrome ───────────────────────────
|
|
117
121
|
* When a `flat` surface wraps a cover `[data-section="media"]` slot, the slot
|
|
118
122
|
* shares the surface's 1px border and a recessed well fill so the framed media
|
|
119
123
|
* reads as part of the same surface. Scoped via `:where()` for zero specificity
|
|
@@ -121,17 +125,16 @@
|
|
|
121
125
|
* e.g. character / testimonial) opt out — they manage their own circular chrome.
|
|
122
126
|
* The hand-rolled `card` / `bento-cell` surfaces (which sit outside the
|
|
123
127
|
* elevation axis) carry the same media chrome from their own CSS files. */
|
|
124
|
-
:where([data-elevation="flat"]) [data-section="media"]:not([data-media="portrait"]) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
+
:where([data-elevation="flat"]) [data-section="media"]:not([data-media="portrait"]) {
|
|
129
|
+
border: 1px solid var(--rf-color-border);
|
|
130
|
+
background: oklch(from var(--rf-color-surface) calc(l - var(--rf-surface-inset-shift)) c h);
|
|
131
|
+
}
|
|
128
132
|
|
|
129
|
-
/* …but a sunken surface used as a media-zone guest already sits inside the
|
|
133
|
+
/* …but a sunken surface used as a media-zone guest already sits inside the
|
|
130
134
|
* slot's recessed well, so its own chrome would just double up. Drop it; keep
|
|
131
135
|
* padding so axis labels / SVG keep breathing room. */
|
|
132
|
-
[data-section="media"] > [data-elevation="sunken"] {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
136
|
+
[data-section="media"] > [data-elevation="sunken"] {
|
|
137
|
+
background: transparent;
|
|
138
|
+
border: 0;
|
|
139
|
+
}
|
|
137
140
|
}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Blockquote */
|
|
3
|
-
blockquote {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
blockquote::before {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
blockquote p:last-child {
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
2
|
+
/* Blockquote */
|
|
3
|
+
blockquote {
|
|
4
|
+
position: relative;
|
|
5
|
+
border-left: 3px solid var(--rf-color-primary);
|
|
6
|
+
margin: 1.5rem 0;
|
|
7
|
+
padding: 1rem 1.25rem 1rem 3.25rem;
|
|
8
|
+
color: var(--rf-color-muted);
|
|
9
|
+
}
|
|
10
|
+
blockquote::before {
|
|
11
|
+
content: "";
|
|
12
|
+
position: absolute;
|
|
13
|
+
left: 0.75rem;
|
|
14
|
+
top: 1rem;
|
|
15
|
+
width: 18px;
|
|
16
|
+
height: 18px;
|
|
17
|
+
background: var(--rf-color-primary);
|
|
18
|
+
opacity: 0.4;
|
|
19
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 8C10 5.79 8.21 4 6 4C3.79 4 2 5.79 2 8C2 10.21 3.79 12 6 12C6.67 12 7.31 11.83 7.88 11.54C7.63 14.08 5.55 16.09 3 16.34V18.36C6.68 18.09 9.64 15.13 9.93 11.45C9.98 10.99 10 10.5 10 10V8ZM22 8C22 5.79 20.21 4 18 4C15.79 4 14 5.79 14 8C14 10.21 15.79 12 18 12C18.67 12 19.31 11.83 19.88 11.54C19.63 14.08 17.55 16.09 15 16.34V18.36C18.68 18.09 21.64 15.13 21.93 11.45C21.98 10.99 22 10.5 22 10V8Z'/%3E%3C/svg%3E");
|
|
20
|
+
mask-size: contain;
|
|
21
|
+
mask-repeat: no-repeat;
|
|
22
|
+
}
|
|
23
|
+
blockquote p:last-child {
|
|
24
|
+
margin-bottom: 0;
|
|
25
|
+
}
|
|
27
26
|
}
|
package/styles/elements/code.css
CHANGED
|
@@ -1,50 +1,52 @@
|
|
|
1
1
|
@layer skin {
|
|
2
|
-
/* Code block wrapper — the rf-codeblock div comes from the Markdoc fence node
|
|
2
|
+
/* Code block wrapper — the rf-codeblock div comes from the Markdoc fence node
|
|
3
3
|
schema at build time. Inside codegroup the margin is removed by
|
|
4
4
|
.rf-codegroup .rf-codeblock. */
|
|
5
|
-
.rf-codeblock {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
5
|
+
.rf-codeblock {
|
|
6
|
+
position: relative;
|
|
7
|
+
margin: 1.5rem 0;
|
|
8
|
+
}
|
|
9
9
|
|
|
10
|
-
.rf-codeblock > pre {
|
|
11
|
-
|
|
12
|
-
}
|
|
10
|
+
.rf-codeblock > pre {
|
|
11
|
+
margin: 0;
|
|
12
|
+
}
|
|
13
13
|
|
|
14
|
-
/* Copy button — injected by the copy behavior at runtime */
|
|
15
|
-
.rf-codeblock__copy {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
14
|
+
/* Copy button — injected by the copy behavior at runtime */
|
|
15
|
+
.rf-codeblock__copy {
|
|
16
|
+
position: absolute;
|
|
17
|
+
top: 0.5rem;
|
|
18
|
+
right: 0.5rem;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
width: 2rem;
|
|
23
|
+
height: 2rem;
|
|
24
|
+
border: none;
|
|
25
|
+
border-radius: var(--rf-radius-sm);
|
|
26
|
+
background: transparent;
|
|
27
|
+
color: var(--rf-color-code-text, #e2e8f0);
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
opacity: 0;
|
|
30
|
+
transition:
|
|
31
|
+
opacity 150ms ease,
|
|
32
|
+
background-color 150ms ease;
|
|
33
|
+
}
|
|
32
34
|
|
|
33
|
-
.rf-codeblock:hover .rf-codeblock__copy {
|
|
34
|
-
|
|
35
|
-
}
|
|
35
|
+
.rf-codeblock:hover .rf-codeblock__copy {
|
|
36
|
+
opacity: 0.6;
|
|
37
|
+
}
|
|
36
38
|
|
|
37
|
-
.rf-codeblock__copy:hover {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
39
|
+
.rf-codeblock__copy:hover {
|
|
40
|
+
opacity: 1 !important;
|
|
41
|
+
background: rgba(255, 255, 255, 0.1);
|
|
42
|
+
}
|
|
41
43
|
|
|
42
|
-
.rf-codeblock__copy--copied {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
44
|
+
.rf-codeblock__copy--copied {
|
|
45
|
+
opacity: 1 !important;
|
|
46
|
+
color: var(--rf-color-success, #4ade80);
|
|
47
|
+
}
|
|
46
48
|
|
|
47
|
-
/* WORK-304 — fence-level annotations: line numbers + line highlight.
|
|
49
|
+
/* WORK-304 — fence-level annotations: line numbers + line highlight.
|
|
48
50
|
*
|
|
49
51
|
* Shiki renders each line as `<span class="line">…</span>`. The fence
|
|
50
52
|
* schema forwards `data-linenumbers` / `data-highlight-lines` /
|
|
@@ -71,49 +73,48 @@
|
|
|
71
73
|
* consistent across highlighted and plain rows — matches the diff row
|
|
72
74
|
* primitive at `runes/diff.css`. Highlighted rows just colour the
|
|
73
75
|
* border + add the surface tint. */
|
|
74
|
-
.rf-codeblock pre code {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
76
|
+
.rf-codeblock pre code {
|
|
77
|
+
display: grid;
|
|
78
|
+
min-width: max-content;
|
|
79
|
+
}
|
|
78
80
|
|
|
79
|
-
.rf-codeblock pre code .line {
|
|
80
|
-
|
|
81
|
-
}
|
|
81
|
+
.rf-codeblock pre code .line {
|
|
82
|
+
border-left: 3px solid transparent;
|
|
83
|
+
}
|
|
82
84
|
|
|
83
|
-
/* Line numbers — gutter::before owns the left column. Strip the pre's
|
|
85
|
+
/* Line numbers — gutter::before owns the left column. Strip the pre's
|
|
84
86
|
* horizontal padding when linenumbers are on so the gutter sits flush
|
|
85
87
|
* against the codeblock edge; the gutter's own padding + right border
|
|
86
88
|
* provides the visual separation from the code body. */
|
|
87
|
-
.rf-codeblock pre[data-linenumbers] {
|
|
88
|
-
|
|
89
|
-
}
|
|
89
|
+
.rf-codeblock pre[data-linenumbers] {
|
|
90
|
+
padding-left: 0;
|
|
91
|
+
}
|
|
90
92
|
|
|
91
|
-
.rf-codeblock pre[data-linenumbers] code {
|
|
92
|
-
|
|
93
|
-
}
|
|
93
|
+
.rf-codeblock pre[data-linenumbers] code {
|
|
94
|
+
counter-reset: rf-line var(--rf-start-line, 0);
|
|
95
|
+
}
|
|
94
96
|
|
|
95
|
-
.rf-codeblock pre[data-linenumbers] code .line::before {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
97
|
+
.rf-codeblock pre[data-linenumbers] code .line::before {
|
|
98
|
+
counter-increment: rf-line;
|
|
99
|
+
content: counter(rf-line);
|
|
100
|
+
display: inline-block;
|
|
101
|
+
width: 3em;
|
|
102
|
+
padding-inline: 0.75rem 0.5rem;
|
|
103
|
+
margin-right: 0.75rem;
|
|
104
|
+
text-align: right;
|
|
105
|
+
color: var(--rf-color-line-number);
|
|
106
|
+
font-variant-numeric: tabular-nums;
|
|
107
|
+
user-select: none;
|
|
108
|
+
border-right: 1px solid var(--rf-color-border);
|
|
109
|
+
}
|
|
108
110
|
|
|
109
|
-
/* Highlighted lines share diff's row template — neutral surface tint
|
|
111
|
+
/* Highlighted lines share diff's row template — neutral surface tint
|
|
110
112
|
* + primary-coloured left rail, no `+`/`-` sigil. The grid layout on
|
|
111
113
|
* `<code>` above keeps consecutive highlighted rows continuous (no
|
|
112
114
|
* subpixel gaps between the rails). Border is on every `.line` (above)
|
|
113
115
|
* so the content alignment doesn't jump when highlighting a row. */
|
|
114
|
-
.rf-codeblock pre code .line[data-line-status="highlight"] {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
116
|
+
.rf-codeblock pre code .line[data-line-status="highlight"] {
|
|
117
|
+
background: var(--rf-color-line-highlight);
|
|
118
|
+
border-left-color: var(--rf-color-line-highlight-rail);
|
|
119
|
+
}
|
|
119
120
|
}
|