@refrakt-md/lumina 0.21.0 → 0.23.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 (131) hide show
  1. package/base.css +2 -1
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/tokens.d.ts +5 -3
  6. package/dist/tokens.d.ts.map +1 -1
  7. package/dist/tokens.js +44 -3
  8. package/dist/tokens.js.map +1 -1
  9. package/index.css +11 -1
  10. package/package.json +7 -5
  11. package/styles/base/attributes.css +6 -7
  12. package/styles/dimensions/checklist.css +7 -36
  13. package/styles/dimensions/cover.css +13 -95
  14. package/styles/dimensions/density.css +6 -3
  15. package/styles/dimensions/frame.css +7 -4
  16. package/styles/dimensions/media.css +14 -61
  17. package/styles/dimensions/metadata.css +30 -80
  18. package/styles/dimensions/sections.css +16 -30
  19. package/styles/dimensions/sequence.css +17 -82
  20. package/styles/dimensions/state.css +39 -56
  21. package/styles/dimensions/substrate.css +3 -0
  22. package/styles/dimensions/surfaces.css +73 -113
  23. package/styles/elements/blockquote.css +3 -2
  24. package/styles/elements/code.css +3 -0
  25. package/styles/elements/table.css +3 -0
  26. package/styles/global.css +24 -63
  27. package/styles/layouts/blog.css +34 -95
  28. package/styles/layouts/default.css +12 -86
  29. package/styles/layouts/docs.css +9 -159
  30. package/styles/layouts/mobile.css +3 -52
  31. package/styles/layouts/on-this-page.css +8 -7
  32. package/styles/layouts/plan.css +27 -158
  33. package/styles/layouts/search.css +17 -82
  34. package/styles/layouts/split.css +24 -169
  35. package/styles/layouts/theme-toggle.css +3 -29
  36. package/styles/layouts/version-switcher.css +9 -10
  37. package/styles/runes/accordion.css +25 -68
  38. package/styles/runes/aggregate.css +4 -13
  39. package/styles/runes/annotate.css +11 -40
  40. package/styles/runes/api.css +4 -1
  41. package/styles/runes/audio.css +12 -50
  42. package/styles/runes/badge.css +5 -2
  43. package/styles/runes/bar.css +3 -0
  44. package/styles/runes/bento.css +18 -161
  45. package/styles/runes/bg.css +3 -37
  46. package/styles/runes/blog.css +18 -20
  47. package/styles/runes/bond.css +6 -26
  48. package/styles/runes/breadcrumb.css +7 -15
  49. package/styles/runes/budget.css +23 -45
  50. package/styles/runes/bug.css +5 -2
  51. package/styles/runes/card.css +27 -95
  52. package/styles/runes/cast.css +10 -27
  53. package/styles/runes/changelog.css +13 -17
  54. package/styles/runes/character.css +6 -20
  55. package/styles/runes/chart.css +15 -57
  56. package/styles/runes/codegroup.css +18 -26
  57. package/styles/runes/collection.css +8 -85
  58. package/styles/runes/compare.css +8 -19
  59. package/styles/runes/comparison.css +29 -56
  60. package/styles/runes/conversation.css +9 -31
  61. package/styles/runes/cta.css +17 -40
  62. package/styles/runes/datatable.css +33 -48
  63. package/styles/runes/decision.css +5 -2
  64. package/styles/runes/design-context.css +5 -4
  65. package/styles/runes/details.css +9 -17
  66. package/styles/runes/diagram.css +8 -16
  67. package/styles/runes/diff.css +11 -94
  68. package/styles/runes/drawer.css +9 -113
  69. package/styles/runes/embed.css +5 -13
  70. package/styles/runes/event.css +5 -3
  71. package/styles/runes/expand.css +10 -45
  72. package/styles/runes/faction.css +6 -12
  73. package/styles/runes/feature.css +15 -43
  74. package/styles/runes/figure.css +7 -26
  75. package/styles/runes/file-ref.css +3 -18
  76. package/styles/runes/form.css +19 -48
  77. package/styles/runes/gallery.css +8 -140
  78. package/styles/runes/grid.css +4 -56
  79. package/styles/runes/hero.css +28 -140
  80. package/styles/runes/hint.css +23 -48
  81. package/styles/runes/howto.css +9 -31
  82. package/styles/runes/itinerary.css +15 -44
  83. package/styles/runes/juxtapose.css +17 -92
  84. package/styles/runes/lore.css +7 -14
  85. package/styles/runes/map.css +9 -42
  86. package/styles/runes/mediatext.css +4 -45
  87. package/styles/runes/milestone.css +15 -28
  88. package/styles/runes/mockup.css +10 -115
  89. package/styles/runes/nav.css +37 -212
  90. package/styles/runes/organization.css +6 -5
  91. package/styles/runes/page-section.css +3 -4
  92. package/styles/runes/pagination.css +10 -42
  93. package/styles/runes/palette.css +16 -35
  94. package/styles/runes/placeholder.css +16 -0
  95. package/styles/runes/plan-history.css +23 -43
  96. package/styles/runes/plan-progress.css +6 -7
  97. package/styles/runes/plan-ref.css +4 -1
  98. package/styles/runes/playlist.css +10 -44
  99. package/styles/runes/plot.css +9 -25
  100. package/styles/runes/preview.css +9 -34
  101. package/styles/runes/pricing.css +23 -41
  102. package/styles/runes/progress.css +8 -27
  103. package/styles/runes/pullquote.css +9 -31
  104. package/styles/runes/realm.css +6 -12
  105. package/styles/runes/recipe.css +12 -36
  106. package/styles/runes/relationships.css +5 -36
  107. package/styles/runes/reveal.css +17 -22
  108. package/styles/runes/sandbox.css +9 -39
  109. package/styles/runes/section.css +10 -24
  110. package/styles/runes/showcase.css +3 -20
  111. package/styles/runes/sidenote.css +5 -4
  112. package/styles/runes/snippet.css +3 -0
  113. package/styles/runes/spacing.css +14 -33
  114. package/styles/runes/spec.css +5 -2
  115. package/styles/runes/steps.css +14 -46
  116. package/styles/runes/storyboard.css +4 -19
  117. package/styles/runes/swatch.css +4 -7
  118. package/styles/runes/symbol.css +16 -14
  119. package/styles/runes/tabs.css +15 -18
  120. package/styles/runes/testimonial.css +12 -13
  121. package/styles/runes/textblock.css +6 -24
  122. package/styles/runes/timeline.css +10 -28
  123. package/styles/runes/tint.css +3 -0
  124. package/styles/runes/toc.css +9 -7
  125. package/styles/runes/track.css +12 -41
  126. package/styles/runes/typography.css +15 -27
  127. package/styles/runes/work.css +5 -2
  128. package/styles/runes/xref.css +3 -1
  129. package/tokens/base.css +56 -66
  130. package/tokens/dark.css +79 -80
  131. package/styles/dimensions/guest-posture.css +0 -27
@@ -1,30 +1,31 @@
1
- /* Reveal */
1
+ @layer skin {
2
+ /* Reveal — skin. The eyebrow stretched-link, steps flex, hidden-step collapse,
3
+ * metadata hide, and control flex live in @refrakt-md/skeleton
4
+ * (styles/runes/reveal.css). */
2
5
  .rf-reveal__preamble {
3
6
  margin-bottom: 1.5rem;
4
7
  }
5
8
  .rf-reveal__eyebrow {
6
- font-size: 0.8125rem;
7
- font-weight: 600;
8
- letter-spacing: 0.05em;
9
+ font-size: var(--rf-text-sm);
10
+ font-weight: var(--rf-weight-semibold);
11
+ letter-spacing: var(--rf-tracking-wider);
9
12
  text-transform: uppercase;
10
13
  color: var(--rf-color-primary);
11
14
  margin: 0 0 0.5rem;
12
15
  }
13
16
  .rf-reveal__eyebrow:has(a) {
14
- display: inline-block;
15
- position: relative;
16
17
  padding: 0.25rem 0.875rem;
17
18
  border: 1px solid var(--rf-color-border);
18
19
  border-radius: var(--rf-radius-full);
19
20
  color: var(--rf-color-text);
20
- font-weight: 400;
21
+ font-weight: var(--rf-weight-normal);
21
22
  text-transform: none;
22
- letter-spacing: 0;
23
+ letter-spacing: var(--rf-tracking-normal);
23
24
  transition: border-color 150ms ease;
24
25
  }
25
26
  .rf-reveal__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
26
- .rf-reveal__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: 600; text-decoration: none; }
27
- .rf-reveal__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
27
+ .rf-reveal__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
28
+ .rf-reveal__eyebrow:has(a) a::before { border-radius: inherit; }
28
29
  .rf-reveal__headline {
29
30
  margin-top: 0;
30
31
  }
@@ -36,8 +37,6 @@
36
37
  margin-bottom: 1rem;
37
38
  }
38
39
  .rf-reveal__steps {
39
- display: flex;
40
- flex-direction: column;
41
40
  gap: 1rem;
42
41
  }
43
42
  .rf-reveal-step {
@@ -49,8 +48,6 @@
49
48
  }
50
49
  .rf-reveal-step--hidden {
51
50
  opacity: 0;
52
- height: 0;
53
- overflow: hidden;
54
51
  margin: 0;
55
52
  transform: translateY(0.5rem);
56
53
  }
@@ -59,17 +56,13 @@
59
56
  border-bottom: 1px solid var(--rf-color-border);
60
57
  }
61
58
  .rf-reveal-step__title {
62
- font-size: 1.125rem;
63
- font-weight: 600;
59
+ font-size: var(--rf-text-lg);
60
+ font-weight: var(--rf-weight-semibold);
64
61
  margin: 0 0 0.5rem;
65
62
  }
66
- .rf-reveal-step__body > span[property],
67
- .rf-reveal-step__body > meta { display: none; }
68
63
  .rf-reveal-step__body p:last-child { margin-bottom: 0; }
69
64
  .rf-reveal__next,
70
65
  .rf-reveal__reset {
71
- display: inline-flex;
72
- align-items: center;
73
66
  gap: 0.5rem;
74
67
  margin-top: 1rem;
75
68
  padding: 0.5rem 1.25rem;
@@ -77,8 +70,8 @@
77
70
  border-radius: var(--rf-radius-md);
78
71
  background: var(--rf-color-surface);
79
72
  color: var(--rf-color-text);
80
- font-size: 0.875rem;
81
- font-weight: 500;
73
+ font-size: var(--rf-text-sm);
74
+ font-weight: var(--rf-weight-medium);
82
75
  cursor: pointer;
83
76
  transition: background 0.15s;
84
77
  }
@@ -86,3 +79,5 @@
86
79
  .rf-reveal__reset:hover {
87
80
  background: var(--rf-color-border);
88
81
  }
82
+
83
+ }
@@ -1,71 +1,42 @@
1
- /* Sandbox — Isolated HTML/CSS/JS rendering via iframe */
1
+ @layer skin {
2
+ /* Sandbox — skin. The iframe clip/fill + banner/poster/activate layout live in
3
+ * @refrakt-md/skeleton (styles/runes/sandbox.css). */
2
4
  .rf-sandbox {
3
5
  border-radius: var(--rf-radius-md);
4
- overflow: hidden;
5
6
  }
6
-
7
7
  .rf-sandbox iframe {
8
- display: block;
9
- width: 100%;
10
8
  border: none;
11
9
  }
12
-
13
10
  /* Static fallback (pre/code shown before hydration) */
14
11
  .rf-sandbox pre {
15
12
  margin: 0;
16
13
  }
17
-
18
14
  /* When inside preview, remove sandbox margin */
19
15
  .rf-preview .rf-sandbox {
20
16
  margin: 0;
21
17
  border-radius: 0;
22
18
  }
23
-
24
- /* Untrusted-mode affordance: persistent banner the iframe can't suppress.
25
- Rendered by the RfSandbox custom element when `data-security-mode="untrusted"`. */
19
+ /* Untrusted-mode affordance. */
26
20
  .rf-sandbox[data-security-mode="untrusted"] {
27
21
  border: 1px solid var(--rf-color-warning, #b45309);
28
22
  }
29
-
30
23
  .rf-sandbox__untrusted-banner {
31
- display: block;
32
24
  padding: 0.5rem 0.75rem;
33
- font-size: 0.8125rem;
25
+ font-size: var(--rf-text-sm);
34
26
  line-height: 1.25rem;
35
- font-weight: 600;
27
+ font-weight: var(--rf-weight-semibold);
36
28
  color: var(--rf-color-warning);
37
29
  background: var(--rf-color-warning-bg, #fef3c7);
38
30
  border-bottom: 1px solid var(--rf-color-warning, #b45309);
39
31
  }
40
-
41
- /* Deferred activation (WORK-381): poster shown until a non-eager sandbox
42
- mounts. Rendered by the RfSandbox custom element from `data-poster`. */
43
32
  .rf-sandbox__poster {
44
- position: relative;
45
- display: flex;
46
- align-items: center;
47
- justify-content: center;
48
- min-height: 150px;
49
33
  background: var(--rf-color-surface-2, var(--rf-color-surface, #f4f4f5));
50
34
  }
51
-
52
- .rf-sandbox__poster-image {
53
- position: absolute;
54
- inset: 0;
55
- width: 100%;
56
- height: 100%;
57
- object-fit: cover;
58
- }
59
-
60
35
  .rf-sandbox__activate {
61
- position: relative;
62
- z-index: 1;
63
- display: inline-flex;
64
- align-items: center;
65
36
  gap: 0.5ch;
66
37
  padding: 0.5rem 1rem;
67
38
  font: inherit;
68
- font-weight: 600;
39
+ font-weight: var(--rf-weight-semibold);
69
40
  color: var(--rf-color-on-accent, #fff);
70
41
  background: var(--rf-color-accent, #2563eb);
71
42
  border: none;
@@ -73,17 +44,16 @@
73
44
  cursor: pointer;
74
45
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
75
46
  }
76
-
77
47
  .rf-sandbox__activate::before {
78
48
  content: "▶";
79
49
  font-size: 0.85em;
80
50
  }
81
-
82
51
  .rf-sandbox__activate:hover {
83
52
  background: var(--rf-color-accent-hover, var(--rf-color-accent, #1d4ed8));
84
53
  }
85
-
86
54
  .rf-sandbox__activate:focus-visible {
87
55
  outline: 2px solid var(--rf-color-accent, #2563eb);
88
56
  outline-offset: 2px;
89
57
  }
58
+
59
+ }
@@ -1,43 +1,38 @@
1
+ @layer skin {
1
2
  /* Section — a generic page section: an eyebrow/headline/blurb header above
2
3
  arbitrary body content. Header styling mirrors the shared page-section look
3
4
  (reveal/feature); the body is content-agnostic and full width. */
4
5
  .rf-section {
5
- display: flex;
6
- flex-direction: column;
7
6
  gap: 1.5rem;
8
7
  }
9
8
 
10
9
  /* Header */
11
10
  .rf-section__preamble {
12
- display: flex;
13
- flex-direction: column;
14
11
  gap: 0.5rem;
15
12
  max-width: var(--rf-measure, 65ch);
16
13
  margin: 0;
17
14
  }
18
15
  .rf-section__eyebrow {
19
- font-size: 0.8125rem;
20
- font-weight: 600;
21
- letter-spacing: 0.05em;
16
+ font-size: var(--rf-text-sm);
17
+ font-weight: var(--rf-weight-semibold);
18
+ letter-spacing: var(--rf-tracking-wider);
22
19
  text-transform: uppercase;
23
20
  color: var(--rf-color-primary);
24
21
  margin: 0;
25
22
  }
26
23
  .rf-section__eyebrow:has(a) {
27
- display: inline-block;
28
- position: relative;
29
24
  padding: 0.25rem 0.875rem;
30
25
  border: 1px solid var(--rf-color-border);
31
26
  border-radius: var(--rf-radius-full);
32
27
  color: var(--rf-color-text);
33
- font-weight: 400;
28
+ font-weight: var(--rf-weight-normal);
34
29
  text-transform: none;
35
- letter-spacing: 0;
30
+ letter-spacing: var(--rf-tracking-normal);
36
31
  transition: border-color 150ms ease;
37
32
  }
38
33
  .rf-section__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
39
- .rf-section__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: 600; text-decoration: none; }
40
- .rf-section__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
34
+ .rf-section__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
35
+ .rf-section__eyebrow:has(a) a::before { border-radius: inherit; }
41
36
  .rf-section__headline {
42
37
  margin: 0;
43
38
  }
@@ -48,23 +43,14 @@
48
43
  .rf-section__image {
49
44
  margin: 0;
50
45
  border-radius: var(--rf-radius-md);
51
- max-width: 100%;
52
- height: auto;
53
- }
54
-
55
- /* Body — content-agnostic; fills the section width regardless of header align. */
56
- .rf-section__body {
57
- width: 100%;
58
46
  }
59
47
 
60
48
  /* Header alignment (the body stays full width). */
61
49
  .rf-section[data-align="center"] .rf-section__preamble {
62
- align-items: center;
63
50
  text-align: center;
64
- margin-inline: auto;
65
51
  }
66
52
  .rf-section[data-align="end"] .rf-section__preamble {
67
- align-items: flex-end;
68
53
  text-align: end;
69
- margin-inline-start: auto;
54
+ }
55
+
70
56
  }
@@ -1,23 +1,4 @@
1
- /* Showcase — `frameTarget: 'self'` media wrapper (SPEC-086). Shadow, aspect,
2
- * displacement, place, and crop anchor are now the shared `frame` chrome
3
- * (dimensions/frame.css), landing on the showcase root. This file keeps only
4
- * showcase's structural rules and its distinct value: breakout. */
5
- .rf-showcase {
6
- position: relative;
7
- }
8
- .rf-showcase__viewport {
9
- position: relative;
10
- }
11
- /* Breakout — a displaced showcase spills past a non-clipping ancestor; clipping
12
- * hosts (e.g. bento cells) keep it cropped (host-owned clip). */
13
- :has(> .rf-showcase[data-displace]:not(.rf-showcase--in-bento-cell)) {
14
- overflow: visible;
15
- }
16
- /* Bento cell context — showcase fills remaining space */
17
- .rf-showcase--in-bento-cell {
18
- flex: 1;
19
- min-height: 0;
20
- }
1
+ @layer skin {
21
2
  /* Spacing — vertical margin around the showcase */
22
3
  .rf-showcase[data-spacing="flush"] { margin-top: 0; margin-bottom: 0; }
23
4
  .rf-showcase[data-spacing="tight"] { margin-top: var(--rf-spacing-section-tight, 1.5rem); margin-bottom: var(--rf-spacing-section-tight, 1.5rem); }
@@ -36,3 +17,5 @@
36
17
  margin-inline-end: 0;
37
18
  }
38
19
  }
20
+
21
+ }
@@ -1,14 +1,13 @@
1
+ @layer skin {
1
2
  /* Sidenote */
2
3
  .rf-sidenote {
3
4
  margin: 1rem 0;
4
- font-size: 0.875rem;
5
- line-height: 1.6;
5
+ font-size: var(--rf-text-sm);
6
+ line-height: var(--rf-leading-relaxed);
6
7
  }
7
8
  .rf-sidenote--sidenote {
8
9
  border-left: 3px solid var(--rf-color-primary);
9
10
  padding: 0.75rem 1rem;
10
- background: var(--rf-color-info-bg);
11
- border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
12
11
  color: var(--rf-color-muted);
13
12
  }
14
13
  .rf-sidenote--footnote {
@@ -26,3 +25,5 @@
26
25
  }
27
26
  .rf-sidenote__body p { margin: 0; }
28
27
  .rf-sidenote__body p + p { margin-top: 0.5rem; }
28
+
29
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Snippet — file embedded as a code block.
2
3
  *
3
4
  * The standalone form is a `<figure class="rf-snippet">` wrapping the
@@ -25,3 +26,5 @@
25
26
  margin-inline-end: 0;
26
27
  padding: 0;
27
28
  }
29
+
30
+ }
@@ -1,7 +1,8 @@
1
+ @layer skin {
1
2
  /* Spacing — spacing scale, radii, and shadow display */
2
3
  .rf-spacing__title {
3
- font-size: 1.125rem;
4
- font-weight: 600;
4
+ font-size: var(--rf-text-lg);
5
+ font-weight: var(--rf-weight-semibold);
5
6
  margin-bottom: 1rem;
6
7
  }
7
8
  .rf-spacing__section {
@@ -11,38 +12,31 @@
11
12
  margin-bottom: 0;
12
13
  }
13
14
  .rf-spacing__section-title {
14
- font-size: 0.8rem;
15
- font-weight: 600;
15
+ font-size: var(--rf-text-xs);
16
+ font-weight: var(--rf-weight-semibold);
16
17
  text-transform: uppercase;
17
- letter-spacing: 0.05em;
18
+ letter-spacing: var(--rf-tracking-wider);
18
19
  color: var(--rf-color-muted);
19
20
  margin-bottom: 0.75rem;
20
21
  }
21
22
 
22
23
  /* Spacing scale — proportional bars */
23
24
  .rf-spacing__scale {
24
- display: flex;
25
- flex-direction: column;
26
25
  gap: 0.375rem;
27
26
  }
28
27
  .rf-spacing__scale-item {
29
- display: flex;
30
- align-items: center;
31
28
  gap: 0.75rem;
32
29
  }
33
30
  .rf-spacing__scale-bar {
34
- height: 1.25rem;
35
31
  background: var(--rf-color-primary);
36
32
  border-radius: var(--rf-radius-sm, 4px);
37
33
  opacity: 0.8;
38
- min-width: 4px;
39
34
  }
40
35
  .rf-spacing__scale-label {
41
- font-size: 0.75rem;
36
+ font-size: var(--rf-text-xs);
42
37
  font-family: var(--rf-font-mono, monospace);
43
38
  color: var(--rf-color-text, #1a1a2e);
44
39
  white-space: nowrap;
45
- flex-shrink: 0;
46
40
  }
47
41
  .rf-spacing__scale-multiplier {
48
42
  color: var(--rf-color-muted);
@@ -51,57 +45,44 @@
51
45
 
52
46
  /* Radius — rounded corner samples */
53
47
  .rf-spacing__radii {
54
- display: flex;
55
48
  gap: 1.25rem;
56
- flex-wrap: wrap;
57
- align-items: flex-end;
58
49
  }
59
50
  .rf-spacing__radius-item {
60
- display: flex;
61
- flex-direction: column;
62
- align-items: center;
63
51
  gap: 0.375rem;
64
52
  }
65
53
  .rf-spacing__radius-sample {
66
- width: 3.5rem;
67
- height: 3.5rem;
68
54
  border: 2px solid var(--rf-color-border, #e5e7eb);
69
55
  background: var(--rf-color-surface-raised, #f9fafb);
70
56
  }
71
57
  .rf-spacing__radius-label {
72
- font-weight: 500;
73
- font-size: 0.8rem;
58
+ font-weight: var(--rf-weight-medium);
59
+ font-size: var(--rf-text-xs);
74
60
  }
75
61
  .rf-spacing__radius-value {
76
- font-size: 0.7rem;
62
+ font-size: var(--rf-text-xs);
77
63
  font-family: var(--rf-font-mono, monospace);
78
64
  color: var(--rf-color-muted);
79
65
  }
80
66
 
81
67
  /* Shadows — sample cards */
82
68
  .rf-spacing__shadows {
83
- display: flex;
84
69
  gap: 1.5rem;
85
- flex-wrap: wrap;
86
70
  }
87
71
  .rf-spacing__shadow-item {
88
- display: flex;
89
- flex-direction: column;
90
- align-items: center;
91
72
  gap: 0.5rem;
92
73
  }
93
74
  .rf-spacing__shadow-sample {
94
- width: 5rem;
95
- height: 3.5rem;
96
75
  background: var(--rf-color-surface, #fff);
97
76
  border-radius: var(--rf-radius-md, 8px);
98
77
  }
99
78
  .rf-spacing__shadow-label {
100
- font-weight: 500;
101
- font-size: 0.8rem;
79
+ font-weight: var(--rf-weight-medium);
80
+ font-size: var(--rf-text-xs);
102
81
  }
103
82
 
104
83
  /* Context-aware: no outer margin when inside design-context */
105
84
  .rf-spacing--in-design-context {
106
85
  margin: 0;
107
86
  }
87
+
88
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Spec */
2
3
 
3
4
  /* SPEC-079: eyebrow + metadata zone names replace header-primary /
@@ -18,8 +19,8 @@
18
19
  }
19
20
 
20
21
  .rf-spec__body {
21
- font-size: 0.925rem;
22
- line-height: 1.65;
22
+ font-size: var(--rf-text-sm);
23
+ line-height: var(--rf-leading-relaxed);
23
24
  }
24
25
  .rf-spec__body blockquote {
25
26
  border-left: 3px solid var(--rf-color-border);
@@ -28,3 +29,5 @@
28
29
  font-style: italic;
29
30
  color: var(--rf-color-muted);
30
31
  }
32
+
33
+ }
@@ -1,36 +1,31 @@
1
- /* Steps */
2
- .rf-steps {
3
- counter-reset: step;
4
- }
1
+ @layer skin {
2
+ /* Steps — skin. The counter mechanism, step item layout, badge box placement, and
3
+ * media-position flip live in @refrakt-md/skeleton (styles/runes/steps.css). */
5
4
  .rf-steps__preamble {
6
- flex-direction: column;
7
- align-items: flex-start;
8
5
  gap: 0.25rem;
9
6
  margin-bottom: 1.5rem;
10
7
  }
11
8
  .rf-steps__eyebrow {
12
- font-size: 0.8125rem;
13
- font-weight: 600;
14
- letter-spacing: 0.05em;
9
+ font-size: var(--rf-text-sm);
10
+ font-weight: var(--rf-weight-semibold);
11
+ letter-spacing: var(--rf-tracking-wider);
15
12
  text-transform: uppercase;
16
13
  color: var(--rf-color-primary);
17
14
  margin: 0 0 0.5rem;
18
15
  }
19
16
  .rf-steps__eyebrow:has(a) {
20
- display: inline-block;
21
- position: relative;
22
17
  padding: 0.25rem 0.875rem;
23
18
  border: 1px solid var(--rf-color-border);
24
19
  border-radius: var(--rf-radius-full);
25
20
  color: var(--rf-color-text);
26
- font-weight: 400;
21
+ font-weight: var(--rf-weight-normal);
27
22
  text-transform: none;
28
- letter-spacing: 0;
23
+ letter-spacing: var(--rf-tracking-normal);
29
24
  transition: border-color 150ms ease;
30
25
  }
31
26
  .rf-steps__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
32
- .rf-steps__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: 600; text-decoration: none; }
33
- .rf-steps__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
27
+ .rf-steps__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
28
+ .rf-steps__eyebrow:has(a) a::before { border-radius: inherit; }
34
29
  .rf-steps__headline {
35
30
  margin-top: 0;
36
31
  }
@@ -42,38 +37,23 @@
42
37
  margin-bottom: 1rem;
43
38
  }
44
39
  .rf-steps ol {
45
- list-style: none;
46
40
  padding-left: 0;
47
41
  margin: 0;
48
42
  }
49
- .rf-step__content {
50
- display: contents;
51
- }
52
43
 
53
44
  /* Individual step — borderless, matching recipe */
54
45
  .rf-step {
55
- counter-increment: step;
56
- position: relative;
57
46
  padding: 0.625rem 0 0.625rem 2.25rem;
58
47
  }
59
48
  .rf-step + .rf-step {
60
49
  border-top: 1px solid var(--rf-color-border);
61
50
  }
62
51
  .rf-step::before {
63
- content: counter(step);
64
- position: absolute;
65
- left: 0;
66
- top: 0.625rem;
67
- width: 1.5rem;
68
- height: 1.5rem;
69
52
  background: var(--rf-color-surface);
70
53
  color: var(--rf-color-primary);
71
54
  border-radius: var(--rf-radius-full);
72
- display: flex;
73
- align-items: center;
74
- justify-content: center;
75
- font-weight: 700;
76
- font-size: 0.75rem;
55
+ font-weight: var(--rf-weight-bold);
56
+ font-size: var(--rf-text-xs);
77
57
  font-variant-numeric: tabular-nums;
78
58
  }
79
59
  .rf-step h1,
@@ -83,7 +63,6 @@
83
63
  .rf-step h5,
84
64
  .rf-step h6,
85
65
  .rf-step strong {
86
- display: block;
87
66
  margin-top: 0;
88
67
  margin-bottom: 0.375rem;
89
68
  }
@@ -94,22 +73,11 @@
94
73
  margin-top: 0;
95
74
  }
96
75
  .rf-step p {
97
- font-size: 0.925rem;
98
- line-height: 1.65;
76
+ font-size: var(--rf-text-sm);
77
+ line-height: var(--rf-leading-relaxed);
99
78
  }
100
79
  .rf-step__media {
101
80
  border-radius: var(--rf-radius-md);
102
- overflow: hidden;
103
81
  }
104
82
 
105
- /* BUG-001 — content-first DOM inverts the shared media-first stacked contract
106
- * (layouts/split.css): counter it so the labels are truthful. `bottom` (the
107
- * default) is plain block flow — media after the content, the historical
108
- * look; an explicit `top` flips the visual order without touching the DOM. */
109
- .rf-step[data-media-position="bottom"] {
110
- display: block;
111
- }
112
- .rf-step[data-media-position="top"] {
113
- display: flex;
114
- flex-direction: column-reverse;
115
83
  }
@@ -1,14 +1,12 @@
1
+ @layer skin {
1
2
  /* Storyboard */
2
3
  .rf-storyboard__panels {
3
- display: grid;
4
- grid-template-columns: repeat(var(--sb-columns, 3), 1fr);
5
4
  gap: 1rem;
6
5
  }
7
6
  /* Clean style */
8
7
  .rf-storyboard--clean .rf-storyboard-panel {
9
8
  border: 1px solid var(--rf-color-border);
10
9
  border-radius: var(--rf-radius-md);
11
- overflow: hidden;
12
10
  }
13
11
  .rf-storyboard--clean .rf-storyboard-panel__body {
14
12
  padding: 0.75rem;
@@ -17,7 +15,6 @@
17
15
  .rf-storyboard--comic .rf-storyboard-panel {
18
16
  border: 3px solid var(--rf-color-text);
19
17
  border-radius: 0.25rem;
20
- overflow: hidden;
21
18
  transform: rotate(-0.5deg);
22
19
  }
23
20
  .rf-storyboard--comic .rf-storyboard-panel:nth-child(even) {
@@ -28,7 +25,7 @@
28
25
  }
29
26
  .rf-storyboard--comic .rf-storyboard-panel__body p {
30
27
  font-family: 'Comic Sans MS', 'Chalkboard SE', cursive;
31
- font-size: 0.9375rem;
28
+ font-size: var(--rf-text);
32
29
  text-align: center;
33
30
  margin: 0.5rem 0 0;
34
31
  }
@@ -40,23 +37,11 @@
40
37
  border-radius: 2px;
41
38
  }
42
39
  .rf-storyboard--polaroid .rf-storyboard-panel__body p {
43
- font-size: 0.8125rem;
40
+ font-size: var(--rf-text-sm);
44
41
  text-align: center;
45
42
  color: var(--rf-color-muted);
46
43
  margin: 0.5rem 0 0;
47
44
  }
48
- /* Shared image styles */
49
- .rf-storyboard-panel img {
50
- width: 100%;
51
- height: auto;
52
- display: block;
53
- }
54
- .rf-storyboard-panel__body > span[property],
55
- .rf-storyboard-panel__body > meta { display: none; }
56
45
  .rf-storyboard-panel__body p:last-child { margin-bottom: 0; }
57
- @media (max-width: 768px) {
58
- .rf-storyboard__panels { grid-template-columns: repeat(2, 1fr) !important; }
59
- }
60
- @media (max-width: 480px) {
61
- .rf-storyboard__panels { grid-template-columns: 1fr !important; }
46
+
62
47
  }
@@ -1,7 +1,6 @@
1
+ @layer skin {
1
2
  /* Swatch — inline color chip */
2
3
  .rf-swatch {
3
- display: inline-flex;
4
- align-items: center;
5
4
  gap: 0.375rem;
6
5
  vertical-align: middle;
7
6
  border: 1px solid rgba(0, 0, 0, 0.12);
@@ -10,15 +9,11 @@
10
9
  margin: 0 0.15em;
11
10
  }
12
11
  .rf-swatch__chip {
13
- display: inline-block;
14
- width: 0.875em;
15
- height: 0.875em;
16
12
  border-radius: 50%;
17
13
  border: 1px solid rgba(0, 0, 0, 0.1);
18
- flex-shrink: 0;
19
14
  }
20
15
  .rf-swatch__label {
21
- font-weight: 500;
16
+ font-weight: var(--rf-weight-medium);
22
17
  }
23
18
  .rf-swatch__value {
24
19
  color: var(--rf-color-muted);
@@ -26,3 +21,5 @@
26
21
  font-family: var(--rf-font-mono, monospace);
27
22
  vertical-align: middle;
28
23
  }
24
+
25
+ }