@refrakt-md/lumina 0.20.2 → 0.22.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/contracts/structures.json +154 -5
- package/dist/tokens.d.ts +5 -3
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +42 -3
- package/dist/tokens.js.map +1 -1
- package/index.css +2 -0
- package/package.json +6 -5
- package/styles/dimensions/checklist.css +1 -1
- package/styles/dimensions/cover.css +18 -0
- package/styles/dimensions/density.css +3 -0
- package/styles/dimensions/frame.css +4 -4
- package/styles/dimensions/metadata.css +6 -6
- package/styles/dimensions/sections.css +12 -15
- package/styles/dimensions/sequence.css +3 -3
- package/styles/global.css +15 -15
- package/styles/layouts/blog.css +31 -31
- package/styles/layouts/default.css +9 -9
- package/styles/layouts/docs.css +6 -6
- package/styles/layouts/mobile.css +2 -2
- package/styles/layouts/on-this-page.css +5 -5
- package/styles/layouts/plan.css +24 -24
- package/styles/layouts/search.css +14 -14
- package/styles/layouts/version-switcher.css +6 -6
- package/styles/runes/accordion.css +10 -10
- package/styles/runes/aggregate.css +1 -1
- package/styles/runes/annotate.css +5 -5
- package/styles/runes/api.css +1 -1
- package/styles/runes/audio.css +9 -9
- package/styles/runes/badge.css +2 -2
- package/styles/runes/bento.css +2 -2
- package/styles/runes/blog.css +15 -15
- package/styles/runes/bond.css +3 -3
- package/styles/runes/breadcrumb.css +2 -2
- package/styles/runes/budget.css +20 -20
- package/styles/runes/bug.css +2 -2
- package/styles/runes/card.css +3 -3
- package/styles/runes/cast.css +5 -5
- package/styles/runes/changelog.css +8 -8
- package/styles/runes/character.css +3 -3
- package/styles/runes/chart.css +5 -5
- package/styles/runes/codegroup.css +3 -3
- package/styles/runes/collection.css +3 -3
- package/styles/runes/compare.css +5 -5
- package/styles/runes/comparison.css +22 -22
- package/styles/runes/conversation.css +4 -4
- package/styles/runes/cta.css +14 -14
- package/styles/runes/datatable.css +8 -8
- package/styles/runes/decision.css +2 -2
- package/styles/runes/design-context.css +2 -2
- package/styles/runes/details.css +4 -4
- package/styles/runes/diagram.css +3 -3
- package/styles/runes/diff.css +6 -6
- package/styles/runes/drawer.css +8 -8
- package/styles/runes/embed.css +1 -1
- package/styles/runes/event.css +2 -2
- package/styles/runes/expand.css +5 -5
- package/styles/runes/faction.css +3 -3
- package/styles/runes/feature.css +23 -11
- package/styles/runes/figure.css +3 -3
- package/styles/runes/form.css +16 -16
- package/styles/runes/gallery.css +7 -7
- package/styles/runes/hero.css +116 -14
- package/styles/runes/hint.css +7 -7
- package/styles/runes/howto.css +6 -6
- package/styles/runes/itinerary.css +12 -12
- package/styles/runes/juxtapose.css +6 -6
- package/styles/runes/lore.css +4 -4
- package/styles/runes/map.css +6 -6
- package/styles/runes/mediatext.css +1 -1
- package/styles/runes/milestone.css +12 -12
- package/styles/runes/mockup.css +7 -7
- package/styles/runes/nav.css +34 -34
- package/styles/runes/organization.css +3 -3
- package/styles/runes/pagination.css +5 -5
- package/styles/runes/palette.css +13 -13
- package/styles/runes/placeholder.css +16 -0
- package/styles/runes/plan-history.css +20 -20
- package/styles/runes/plan-progress.css +3 -3
- package/styles/runes/plan-ref.css +1 -1
- package/styles/runes/playlist.css +8 -8
- package/styles/runes/plot.css +6 -6
- package/styles/runes/preview.css +6 -6
- package/styles/runes/pricing.css +16 -16
- package/styles/runes/progress.css +2 -2
- package/styles/runes/pullquote.css +6 -5
- package/styles/runes/realm.css +3 -3
- package/styles/runes/recipe.css +9 -9
- package/styles/runes/relationships.css +2 -2
- package/styles/runes/reveal.css +10 -10
- package/styles/runes/sandbox.css +52 -2
- package/styles/runes/section.css +70 -0
- package/styles/runes/sidenote.css +2 -2
- package/styles/runes/spacing.css +11 -11
- package/styles/runes/spec.css +2 -2
- package/styles/runes/steps.css +22 -10
- package/styles/runes/storyboard.css +2 -2
- package/styles/runes/swatch.css +1 -1
- package/styles/runes/symbol.css +10 -10
- package/styles/runes/tabs.css +9 -9
- package/styles/runes/testimonial.css +7 -7
- package/styles/runes/textblock.css +4 -4
- package/styles/runes/timeline.css +7 -7
- package/styles/runes/toc.css +4 -4
- package/styles/runes/track.css +10 -10
- package/styles/runes/typography.css +12 -12
- package/styles/runes/work.css +2 -2
- package/tokens/base.css +43 -66
- package/tokens/dark.css +76 -80
|
@@ -1162,6 +1162,49 @@
|
|
|
1162
1162
|
"{content}"
|
|
1163
1163
|
]
|
|
1164
1164
|
},
|
|
1165
|
+
"Section": {
|
|
1166
|
+
"block": "section",
|
|
1167
|
+
"root": ".rf-section",
|
|
1168
|
+
"dataRune": "section",
|
|
1169
|
+
"childOrder": [
|
|
1170
|
+
"{content}"
|
|
1171
|
+
],
|
|
1172
|
+
"modifiers": {
|
|
1173
|
+
"align": {
|
|
1174
|
+
"source": "meta",
|
|
1175
|
+
"default": "start",
|
|
1176
|
+
"classPattern": ".rf-section--{value}",
|
|
1177
|
+
"dataAttribute": "data-align"
|
|
1178
|
+
}
|
|
1179
|
+
},
|
|
1180
|
+
"elements": {
|
|
1181
|
+
"preamble": {
|
|
1182
|
+
"tag": "header",
|
|
1183
|
+
"selector": ".rf-section__preamble",
|
|
1184
|
+
"source": "autoLabel"
|
|
1185
|
+
},
|
|
1186
|
+
"eyebrow": {
|
|
1187
|
+
"tag": "eyebrow",
|
|
1188
|
+
"selector": ".rf-section__eyebrow",
|
|
1189
|
+
"source": "autoLabel"
|
|
1190
|
+
},
|
|
1191
|
+
"headline": {
|
|
1192
|
+
"tag": "headline",
|
|
1193
|
+
"selector": ".rf-section__headline",
|
|
1194
|
+
"source": "autoLabel"
|
|
1195
|
+
},
|
|
1196
|
+
"blurb": {
|
|
1197
|
+
"tag": "blurb",
|
|
1198
|
+
"selector": ".rf-section__blurb",
|
|
1199
|
+
"source": "autoLabel"
|
|
1200
|
+
},
|
|
1201
|
+
"image": {
|
|
1202
|
+
"tag": "image",
|
|
1203
|
+
"selector": ".rf-section__image",
|
|
1204
|
+
"source": "autoLabel"
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
},
|
|
1165
1208
|
"Juxtapose": {
|
|
1166
1209
|
"block": "juxtapose",
|
|
1167
1210
|
"root": ".rf-juxtapose",
|
|
@@ -1266,7 +1309,7 @@
|
|
|
1266
1309
|
"modifiers": {
|
|
1267
1310
|
"media-position": {
|
|
1268
1311
|
"source": "meta",
|
|
1269
|
-
"default": "
|
|
1312
|
+
"default": "bottom",
|
|
1270
1313
|
"dataAttribute": "data-media-position"
|
|
1271
1314
|
},
|
|
1272
1315
|
"align": {
|
|
@@ -1286,6 +1329,18 @@
|
|
|
1286
1329
|
"collapse": {
|
|
1287
1330
|
"source": "meta",
|
|
1288
1331
|
"dataAttribute": "data-collapse"
|
|
1332
|
+
},
|
|
1333
|
+
"content-place": {
|
|
1334
|
+
"source": "meta",
|
|
1335
|
+
"dataAttribute": "data-content-place"
|
|
1336
|
+
},
|
|
1337
|
+
"height": {
|
|
1338
|
+
"source": "meta",
|
|
1339
|
+
"dataAttribute": "data-height"
|
|
1340
|
+
},
|
|
1341
|
+
"aspect": {
|
|
1342
|
+
"source": "meta",
|
|
1343
|
+
"dataAttribute": "data-aspect"
|
|
1289
1344
|
}
|
|
1290
1345
|
},
|
|
1291
1346
|
"elements": {
|
|
@@ -1323,6 +1378,100 @@
|
|
|
1323
1378
|
"inlineStyles": {
|
|
1324
1379
|
"valign": {
|
|
1325
1380
|
"prop": "--split-valign"
|
|
1381
|
+
},
|
|
1382
|
+
"aspect": "aspect-ratio"
|
|
1383
|
+
},
|
|
1384
|
+
"variants": {
|
|
1385
|
+
"media-position": {
|
|
1386
|
+
"cover": {
|
|
1387
|
+
"block": "hero",
|
|
1388
|
+
"root": ".rf-hero",
|
|
1389
|
+
"dataRune": "hero",
|
|
1390
|
+
"childOrder": [
|
|
1391
|
+
"{content}"
|
|
1392
|
+
],
|
|
1393
|
+
"modifiers": {
|
|
1394
|
+
"media-position": {
|
|
1395
|
+
"source": "meta",
|
|
1396
|
+
"default": "bottom",
|
|
1397
|
+
"dataAttribute": "data-media-position"
|
|
1398
|
+
},
|
|
1399
|
+
"align": {
|
|
1400
|
+
"source": "meta",
|
|
1401
|
+
"default": "center",
|
|
1402
|
+
"classPattern": ".rf-hero--{value}",
|
|
1403
|
+
"dataAttribute": "data-align"
|
|
1404
|
+
},
|
|
1405
|
+
"media-ratio": {
|
|
1406
|
+
"source": "meta",
|
|
1407
|
+
"dataAttribute": "data-media-ratio"
|
|
1408
|
+
},
|
|
1409
|
+
"valign": {
|
|
1410
|
+
"source": "meta",
|
|
1411
|
+
"dataAttribute": "data-valign"
|
|
1412
|
+
},
|
|
1413
|
+
"collapse": {
|
|
1414
|
+
"source": "meta",
|
|
1415
|
+
"dataAttribute": "data-collapse"
|
|
1416
|
+
},
|
|
1417
|
+
"content-place": {
|
|
1418
|
+
"source": "meta",
|
|
1419
|
+
"dataAttribute": "data-content-place"
|
|
1420
|
+
},
|
|
1421
|
+
"height": {
|
|
1422
|
+
"source": "meta",
|
|
1423
|
+
"dataAttribute": "data-height"
|
|
1424
|
+
},
|
|
1425
|
+
"aspect": {
|
|
1426
|
+
"source": "meta",
|
|
1427
|
+
"dataAttribute": "data-aspect"
|
|
1428
|
+
}
|
|
1429
|
+
},
|
|
1430
|
+
"staticModifiers": [
|
|
1431
|
+
{
|
|
1432
|
+
"name": "cover",
|
|
1433
|
+
"selector": ".rf-hero--cover"
|
|
1434
|
+
}
|
|
1435
|
+
],
|
|
1436
|
+
"elements": {
|
|
1437
|
+
"preamble": {
|
|
1438
|
+
"tag": "header",
|
|
1439
|
+
"selector": ".rf-hero__preamble",
|
|
1440
|
+
"source": "autoLabel"
|
|
1441
|
+
},
|
|
1442
|
+
"eyebrow": {
|
|
1443
|
+
"tag": "eyebrow",
|
|
1444
|
+
"selector": ".rf-hero__eyebrow",
|
|
1445
|
+
"source": "autoLabel"
|
|
1446
|
+
},
|
|
1447
|
+
"headline": {
|
|
1448
|
+
"tag": "headline",
|
|
1449
|
+
"selector": ".rf-hero__headline",
|
|
1450
|
+
"source": "autoLabel"
|
|
1451
|
+
},
|
|
1452
|
+
"blurb": {
|
|
1453
|
+
"tag": "blurb",
|
|
1454
|
+
"selector": ".rf-hero__blurb",
|
|
1455
|
+
"source": "autoLabel"
|
|
1456
|
+
},
|
|
1457
|
+
"image": {
|
|
1458
|
+
"tag": "image",
|
|
1459
|
+
"selector": ".rf-hero__image",
|
|
1460
|
+
"source": "autoLabel"
|
|
1461
|
+
},
|
|
1462
|
+
"media": {
|
|
1463
|
+
"tag": "media",
|
|
1464
|
+
"selector": ".rf-hero__media",
|
|
1465
|
+
"source": "autoLabel"
|
|
1466
|
+
}
|
|
1467
|
+
},
|
|
1468
|
+
"inlineStyles": {
|
|
1469
|
+
"valign": {
|
|
1470
|
+
"prop": "--split-valign"
|
|
1471
|
+
},
|
|
1472
|
+
"aspect": "aspect-ratio"
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1326
1475
|
}
|
|
1327
1476
|
}
|
|
1328
1477
|
},
|
|
@@ -1472,7 +1621,7 @@
|
|
|
1472
1621
|
"modifiers": {
|
|
1473
1622
|
"media-position": {
|
|
1474
1623
|
"source": "meta",
|
|
1475
|
-
"default": "
|
|
1624
|
+
"default": "bottom",
|
|
1476
1625
|
"dataAttribute": "data-media-position"
|
|
1477
1626
|
},
|
|
1478
1627
|
"align": {
|
|
@@ -1553,7 +1702,7 @@
|
|
|
1553
1702
|
"modifiers": {
|
|
1554
1703
|
"media-position": {
|
|
1555
1704
|
"source": "meta",
|
|
1556
|
-
"default": "
|
|
1705
|
+
"default": "bottom",
|
|
1557
1706
|
"dataAttribute": "data-media-position"
|
|
1558
1707
|
},
|
|
1559
1708
|
"align": {
|
|
@@ -1639,7 +1788,7 @@
|
|
|
1639
1788
|
"modifiers": {
|
|
1640
1789
|
"media-position": {
|
|
1641
1790
|
"source": "meta",
|
|
1642
|
-
"default": "
|
|
1791
|
+
"default": "bottom",
|
|
1643
1792
|
"dataAttribute": "data-media-position"
|
|
1644
1793
|
},
|
|
1645
1794
|
"align": {
|
|
@@ -1773,7 +1922,7 @@
|
|
|
1773
1922
|
"modifiers": {
|
|
1774
1923
|
"media-position": {
|
|
1775
1924
|
"source": "meta",
|
|
1776
|
-
"default": "
|
|
1925
|
+
"default": "bottom",
|
|
1777
1926
|
"dataAttribute": "data-media-position"
|
|
1778
1927
|
},
|
|
1779
1928
|
"media-ratio": {
|
package/dist/tokens.d.ts
CHANGED
|
@@ -5,9 +5,11 @@ import type { ThemeTokensConfig } from '@refrakt-md/types';
|
|
|
5
5
|
* "quiet spectrum walk" syntax palette (teal / violet / rust / ochre /
|
|
6
6
|
* sage), and the four muted-earthy status colours.
|
|
7
7
|
*
|
|
8
|
-
* This is the *source of truth* for Lumina's runtime CSS values
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* This is the *source of truth* for Lumina's runtime CSS values. The
|
|
9
|
+
* `tokens/base.css` and `tokens/dark.css` files are **generated** from this
|
|
10
|
+
* export by `scripts/generate-tokens.mjs` (run as part of the package build via
|
|
11
|
+
* `generateThemeStylesheet`); a drift test (`test/token-generation.test.ts`)
|
|
12
|
+
* fails CI if the committed CSS diverges. Edit this file, never the CSS.
|
|
11
13
|
*
|
|
12
14
|
* Sites that want the previous cream-and-navy appearance opt into the
|
|
13
15
|
* `tideline` preset shipping alongside this default (see
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,EAAE,iBAkO1B,CAAC"}
|
package/dist/tokens.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* "quiet spectrum walk" syntax palette (teal / violet / rust / ochre /
|
|
5
5
|
* sage), and the four muted-earthy status colours.
|
|
6
6
|
*
|
|
7
|
-
* This is the *source of truth* for Lumina's runtime CSS values
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* This is the *source of truth* for Lumina's runtime CSS values. The
|
|
8
|
+
* `tokens/base.css` and `tokens/dark.css` files are **generated** from this
|
|
9
|
+
* export by `scripts/generate-tokens.mjs` (run as part of the package build via
|
|
10
|
+
* `generateThemeStylesheet`); a drift test (`test/token-generation.test.ts`)
|
|
11
|
+
* fails CI if the committed CSS diverges. Edit this file, never the CSS.
|
|
10
12
|
*
|
|
11
13
|
* Sites that want the previous cream-and-navy appearance opt into the
|
|
12
14
|
* `tideline` preset shipping alongside this default (see
|
|
@@ -19,6 +21,43 @@ export const luminaTokens = {
|
|
|
19
21
|
font: {
|
|
20
22
|
sans: "'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
|
|
21
23
|
mono: "'JetBrains Mono', 'Fira Code', ui-monospace, 'Cascadia Code', monospace",
|
|
24
|
+
// Lumina is a unified-neutral theme: its headings use the same sans as
|
|
25
|
+
// body. The slot exists so an editorial theme can swap in a serif/display
|
|
26
|
+
// family without touching rune CSS.
|
|
27
|
+
display: "'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
|
|
28
|
+
},
|
|
29
|
+
// SPEC-094 — typographic scale. A roughly-1.2 modular scale anchored at a
|
|
30
|
+
// 1rem body. Nothing consumes these yet (WORK-405 migrates Lumina's
|
|
31
|
+
// hardcoded sizes onto them); values match Lumina's current type feel.
|
|
32
|
+
text: {
|
|
33
|
+
xs: '0.75rem',
|
|
34
|
+
sm: '0.875rem',
|
|
35
|
+
base: '1rem',
|
|
36
|
+
lg: '1.125rem',
|
|
37
|
+
xl: '1.25rem',
|
|
38
|
+
'2xl': '1.5rem',
|
|
39
|
+
'3xl': '1.875rem',
|
|
40
|
+
'4xl': '2.5rem',
|
|
41
|
+
},
|
|
42
|
+
weight: {
|
|
43
|
+
light: '300',
|
|
44
|
+
normal: '400',
|
|
45
|
+
medium: '500',
|
|
46
|
+
semibold: '600',
|
|
47
|
+
bold: '700',
|
|
48
|
+
},
|
|
49
|
+
leading: {
|
|
50
|
+
tight: '1.2',
|
|
51
|
+
snug: '1.35',
|
|
52
|
+
normal: '1.5',
|
|
53
|
+
relaxed: '1.65',
|
|
54
|
+
loose: '2',
|
|
55
|
+
},
|
|
56
|
+
tracking: {
|
|
57
|
+
tight: '-0.01em',
|
|
58
|
+
normal: '0',
|
|
59
|
+
wide: '0.03em',
|
|
60
|
+
wider: '0.06em',
|
|
22
61
|
},
|
|
23
62
|
color: {
|
|
24
63
|
text: '#1c1a17',
|
package/dist/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
|
package/index.css
CHANGED
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
@import './styles/runes/faction.css';
|
|
81
81
|
@import './styles/runes/feature.css';
|
|
82
82
|
@import './styles/runes/figure.css';
|
|
83
|
+
@import './styles/runes/placeholder.css';
|
|
83
84
|
@import './styles/runes/gallery.css';
|
|
84
85
|
@import './styles/runes/form.css';
|
|
85
86
|
@import './styles/runes/grid.css';
|
|
@@ -103,6 +104,7 @@
|
|
|
103
104
|
@import './styles/runes/realm.css';
|
|
104
105
|
@import './styles/runes/recipe.css';
|
|
105
106
|
@import './styles/runes/reveal.css';
|
|
107
|
+
@import './styles/runes/section.css';
|
|
106
108
|
@import './styles/runes/sidenote.css';
|
|
107
109
|
@import './styles/runes/steps.css';
|
|
108
110
|
@import './styles/runes/storyboard.css';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/lumina",
|
|
3
3
|
"description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and layout configs",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.22.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -80,12 +80,13 @@
|
|
|
80
80
|
"assets"
|
|
81
81
|
],
|
|
82
82
|
"scripts": {
|
|
83
|
-
"build": "tsc"
|
|
83
|
+
"build": "tsc && node scripts/generate-tokens.mjs",
|
|
84
|
+
"generate-tokens": "node scripts/generate-tokens.mjs"
|
|
84
85
|
},
|
|
85
86
|
"dependencies": {
|
|
86
|
-
"@refrakt-md/runes": "0.
|
|
87
|
-
"@refrakt-md/transform": "0.
|
|
88
|
-
"@refrakt-md/types": "0.
|
|
87
|
+
"@refrakt-md/runes": "0.22.0",
|
|
88
|
+
"@refrakt-md/transform": "0.22.0",
|
|
89
|
+
"@refrakt-md/types": "0.22.0"
|
|
89
90
|
},
|
|
90
91
|
"devDependencies": {
|
|
91
92
|
"postcss": "^8.4.0"
|
|
@@ -63,6 +63,24 @@
|
|
|
63
63
|
height: 100%;
|
|
64
64
|
object-fit: cover;
|
|
65
65
|
}
|
|
66
|
+
/* SPEC-101 — non-img/video guests (a sandbox, an embed) fill the well too.
|
|
67
|
+
* They can't be object-fit-cropped, so they get the well's box outright;
|
|
68
|
+
* display:block covers undefined custom elements (inline by default). */
|
|
69
|
+
[data-media-position="cover"] [data-section="media"] > :not(img, video) {
|
|
70
|
+
display: block;
|
|
71
|
+
width: 100%;
|
|
72
|
+
height: 100%;
|
|
73
|
+
}
|
|
74
|
+
/* A backdrop sandbox sits flush in the well — the well's own radius/overflow
|
|
75
|
+
* does the clipping. The iframe height is pinned inline by the element in
|
|
76
|
+
* `fill` mode; this carries the fixed-height case visually until then. */
|
|
77
|
+
[data-media-position="cover"] [data-section="media"] .rf-sandbox {
|
|
78
|
+
margin: 0;
|
|
79
|
+
border-radius: 0;
|
|
80
|
+
}
|
|
81
|
+
[data-media-position="cover"] [data-section="media"] .rf-sandbox iframe {
|
|
82
|
+
height: 100%;
|
|
83
|
+
}
|
|
66
84
|
/* The overlaid box (full: content; header: preamble) anchors via content-place. */
|
|
67
85
|
[data-media-position="cover"]:not([data-cover-scope="header"]) > [data-name="content"],
|
|
68
86
|
[data-cover-scope="header"] > [data-name="cover-band"] > [data-name="preamble"] {
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
|
|
10
10
|
[data-density="full"] {
|
|
11
11
|
--rune-padding: var(--rf-spacing-md);
|
|
12
|
+
--rf-title-size: var(--rf-text-2xl);
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
/* ─── Compact: truncated descriptions, tight spacing ──────────────── */
|
|
15
16
|
|
|
16
17
|
[data-density="compact"] {
|
|
17
18
|
--rune-padding: var(--rf-spacing-sm);
|
|
19
|
+
--rf-title-size: var(--rf-text-xl);
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
[data-density="compact"] [data-section="description"] {
|
|
@@ -32,6 +34,7 @@
|
|
|
32
34
|
|
|
33
35
|
[data-density="minimal"] {
|
|
34
36
|
--rune-padding: var(--rf-spacing-xs);
|
|
37
|
+
--rf-title-size: var(--rf-text);
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
[data-density="minimal"] [data-section="description"] {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* guest so a displaced image's shadow falls into the slot's exposed
|
|
43
43
|
* interior (clipped at the slot's `overflow: hidden` boundary like any
|
|
44
44
|
* other in-slot content). */
|
|
45
|
-
[data-section="media"][data-frame-shadow] > :is(img, video, [data-rune]) {
|
|
45
|
+
[data-section="media"][data-frame-shadow] > :is(img, video, .rf-placeholder, [data-rune]) {
|
|
46
46
|
filter: var(--frame-shadow);
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
[style*="--frame-aspect"] { aspect-ratio: var(--frame-aspect); }
|
|
51
51
|
|
|
52
52
|
/* ── Crop anchor — focal point when the guest is cut ─────────────────── */
|
|
53
|
-
[style*="--frame-anchor"] > :is(img, video) { object-position: var(--frame-anchor); }
|
|
53
|
+
[style*="--frame-anchor"] > :is(img, video, .rf-placeholder) { object-position: var(--frame-anchor); }
|
|
54
54
|
|
|
55
55
|
/* ── Placement of the framed box within its slot ─────────────────────── */
|
|
56
56
|
[style*="--frame-place-x"] { justify-self: var(--frame-place-x, auto); align-self: var(--frame-place-y, auto); }
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
/* `[data-rune]` extends the rule to nested rune guests (codegroup, mockup,
|
|
60
60
|
* chart, etc.), so frame chrome stays guest-agnostic — the same selector
|
|
61
61
|
* pattern the displace rule uses. */
|
|
62
|
-
[style*="--frame-oversize"] > :is(img, video, [data-rune]) { width: calc(100% * var(--frame-oversize, 1)); max-width: none; }
|
|
62
|
+
[style*="--frame-oversize"] > :is(img, video, .rf-placeholder, [data-rune]) { width: calc(100% * var(--frame-oversize, 1)); max-width: none; }
|
|
63
63
|
|
|
64
64
|
/* ── Displacement (peek / spill) — move the guest toward an edge/corner.
|
|
65
65
|
* The host decides whether the guest is cropped or spills; this only moves it.
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
* parent's edge for a true breakout. */
|
|
81
81
|
|
|
82
82
|
/* — Case 1: media-zone displace → translate the inner guest, zone clips. */
|
|
83
|
-
[data-section="media"][data-displace] > :is(img, video, [data-rune]) {
|
|
83
|
+
[data-section="media"][data-displace] > :is(img, video, .rf-placeholder, [data-rune]) {
|
|
84
84
|
transform: translate(var(--displace-x, 0), var(--displace-y, 0));
|
|
85
85
|
}
|
|
86
86
|
[data-section="media"][data-displace="top"] { --displace-y: calc(-1 * var(--frame-offset, var(--rf-spacing-lg))); }
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
[data-meta-type="id"],
|
|
23
23
|
[data-meta-type="code"] {
|
|
24
24
|
font-family: var(--rf-font-mono, monospace);
|
|
25
|
-
font-size: var(--meta-font-size,
|
|
25
|
+
font-size: var(--meta-font-size, var(--rf-text-sm));
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/* IDs read as primary-coloured references wherever they appear (eyebrow
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* not a per-layout one. `code` (e.g. API paths) stays neutral monospace. */
|
|
31
31
|
[data-meta-type="id"] {
|
|
32
32
|
color: var(--rf-color-primary);
|
|
33
|
-
font-weight:
|
|
33
|
+
font-weight: var(--rf-weight-medium);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
[data-meta-type="quantity"] {
|
|
@@ -123,14 +123,14 @@
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
[data-zone-layout="definition-list"] dt {
|
|
126
|
-
font-size:
|
|
127
|
-
font-weight:
|
|
126
|
+
font-size: var(--rf-text-xs);
|
|
127
|
+
font-weight: var(--rf-weight-medium);
|
|
128
128
|
color: var(--rf-color-muted);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
[data-zone-layout="definition-list"] dd {
|
|
132
132
|
margin: 0;
|
|
133
|
-
font-size:
|
|
133
|
+
font-size: var(--rf-text-sm);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
/* Multi-value dd (fields with `splitOn`) renders a row of chips
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
|
|
146
146
|
/* Label element within a chip — thin, muted; pairs visually with the value */
|
|
147
147
|
[data-meta-label] {
|
|
148
|
-
font-weight:
|
|
148
|
+
font-weight: var(--rf-weight-normal);
|
|
149
149
|
opacity: 0.65;
|
|
150
150
|
}
|
|
151
151
|
|
|
@@ -25,29 +25,26 @@
|
|
|
25
25
|
|
|
26
26
|
/* ─── Title: primary heading ──────────────────────────────────────── */
|
|
27
27
|
|
|
28
|
+
/* The size rides --rf-title-size (set per density root in density.css) so a
|
|
29
|
+
* nested rune's own density re-declares it — a full-density hero inside a
|
|
30
|
+
* compact preview keeps its full-size title — and a rune's own title CSS
|
|
31
|
+
* (e.g. .rf-hero__headline) outranks the bare attribute selector. The old
|
|
32
|
+
* `[data-density="compact"] [data-section="title"]` descendant rule leaked
|
|
33
|
+
* through nested densities AND beat per-rune title sizes. */
|
|
28
34
|
[data-section="title"] {
|
|
29
35
|
font-family: var(--rf-font-sans);
|
|
30
|
-
font-size:
|
|
31
|
-
font-weight:
|
|
32
|
-
line-height:
|
|
36
|
+
font-size: var(--rf-title-size, var(--rf-text-2xl));
|
|
37
|
+
font-weight: var(--rf-weight-bold);
|
|
38
|
+
line-height: var(--rf-leading-tight);
|
|
33
39
|
color: var(--rf-color-text);
|
|
34
40
|
margin: 0;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
/* Scale title with density */
|
|
38
|
-
[data-density="compact"] [data-section="title"] {
|
|
39
|
-
font-size: 1.25rem;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
[data-density="minimal"] [data-section="title"] {
|
|
43
|
-
font-size: 1rem;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
43
|
/* ─── Description: secondary text ─────────────────────────────────── */
|
|
47
44
|
|
|
48
45
|
[data-section="description"] {
|
|
49
|
-
font-size:
|
|
50
|
-
line-height:
|
|
46
|
+
font-size: var(--rf-text);
|
|
47
|
+
line-height: var(--rf-leading-normal);
|
|
51
48
|
color: var(--rf-color-muted);
|
|
52
49
|
margin: var(--rf-spacing-xs) 0 var(--rf-spacing-md);
|
|
53
50
|
}
|
|
@@ -55,7 +52,7 @@
|
|
|
55
52
|
/* ─── Body: main content ──────────────────────────────────────────── */
|
|
56
53
|
|
|
57
54
|
[data-section="body"] {
|
|
58
|
-
line-height:
|
|
55
|
+
line-height: var(--rf-leading-relaxed);
|
|
59
56
|
color: var(--rf-color-text);
|
|
60
57
|
}
|
|
61
58
|
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
display: flex;
|
|
24
24
|
align-items: center;
|
|
25
25
|
justify-content: center;
|
|
26
|
-
font-size:
|
|
27
|
-
font-weight:
|
|
26
|
+
font-size: var(--rf-text-xs);
|
|
27
|
+
font-weight: var(--rf-weight-bold);
|
|
28
28
|
font-variant-numeric: tabular-nums;
|
|
29
29
|
color: var(--rf-color-primary);
|
|
30
30
|
background: var(--rf-color-surface-active);
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
[data-density="compact"] [data-sequence="numbered"] > li::before {
|
|
111
111
|
width: 1.25rem;
|
|
112
112
|
height: 1.25rem;
|
|
113
|
-
font-size:
|
|
113
|
+
font-size: var(--rf-text-xs);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
[data-density="compact"] [data-sequence="connected"] > li {
|
package/styles/global.css
CHANGED
|
@@ -9,7 +9,7 @@ html {
|
|
|
9
9
|
font-family: var(--rf-font-sans);
|
|
10
10
|
color: var(--rf-color-text);
|
|
11
11
|
background: var(--rf-color-bg);
|
|
12
|
-
line-height:
|
|
12
|
+
line-height: var(--rf-leading-relaxed);
|
|
13
13
|
-webkit-font-smoothing: antialiased;
|
|
14
14
|
-moz-osx-font-smoothing: grayscale;
|
|
15
15
|
-webkit-text-size-adjust: 100%;
|
|
@@ -97,17 +97,17 @@ body {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
h1, h2, h3, h4, h5, h6 {
|
|
100
|
-
line-height:
|
|
100
|
+
line-height: var(--rf-leading-tight);
|
|
101
101
|
margin-top: 2em;
|
|
102
102
|
margin-bottom: 0.5em;
|
|
103
|
-
font-weight:
|
|
104
|
-
letter-spacing: -
|
|
103
|
+
font-weight: var(--rf-weight-semibold);
|
|
104
|
+
letter-spacing: var(--rf-tracking-tight);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
h1 { font-size:
|
|
108
|
-
h2 { font-size:
|
|
109
|
-
h3 { font-size:
|
|
110
|
-
h4 { font-size:
|
|
107
|
+
h1 { font-size: var(--rf-text-3xl); font-weight: var(--rf-weight-bold); letter-spacing: var(--rf-tracking-tight); }
|
|
108
|
+
h2 { font-size: var(--rf-text-2xl); }
|
|
109
|
+
h3 { font-size: var(--rf-text-xl); }
|
|
110
|
+
h4 { font-size: var(--rf-text); }
|
|
111
111
|
|
|
112
112
|
p {
|
|
113
113
|
margin-top: 0;
|
|
@@ -124,7 +124,7 @@ a:hover {
|
|
|
124
124
|
text-decoration: underline;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
strong { font-weight:
|
|
127
|
+
strong { font-weight: var(--rf-weight-semibold); }
|
|
128
128
|
|
|
129
129
|
code {
|
|
130
130
|
font-family: var(--rf-font-mono);
|
|
@@ -142,8 +142,8 @@ pre {
|
|
|
142
142
|
border-radius: var(--rf-radius-md);
|
|
143
143
|
overflow-x: auto;
|
|
144
144
|
margin: 1.5rem 0;
|
|
145
|
-
font-size:
|
|
146
|
-
line-height:
|
|
145
|
+
font-size: var(--rf-text-sm);
|
|
146
|
+
line-height: var(--rf-leading-relaxed);
|
|
147
147
|
border: 1px solid var(--rf-color-border);
|
|
148
148
|
}
|
|
149
149
|
|
|
@@ -183,17 +183,17 @@ table {
|
|
|
183
183
|
width: 100%;
|
|
184
184
|
border-collapse: collapse;
|
|
185
185
|
margin: 1.5rem 0;
|
|
186
|
-
font-size:
|
|
186
|
+
font-size: var(--rf-text-sm);
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
th {
|
|
190
190
|
text-align: left;
|
|
191
|
-
font-weight:
|
|
191
|
+
font-weight: var(--rf-weight-semibold);
|
|
192
192
|
padding: 0.625rem 1rem;
|
|
193
193
|
border-bottom: 1px solid var(--rf-color-border);
|
|
194
|
-
font-size:
|
|
194
|
+
font-size: var(--rf-text-xs);
|
|
195
195
|
text-transform: uppercase;
|
|
196
|
-
letter-spacing:
|
|
196
|
+
letter-spacing: var(--rf-tracking-wide);
|
|
197
197
|
color: var(--rf-color-muted);
|
|
198
198
|
}
|
|
199
199
|
|