@refrakt-md/lumina 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/base.css +29 -29
  2. package/contracts/structures.json +58 -60
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/icons.d.ts.map +1 -1
  6. package/dist/icons.js +57 -57
  7. package/dist/icons.js.map +1 -1
  8. package/dist/presets/catppuccin.js.map +1 -1
  9. package/dist/presets/dracula.js.map +1 -1
  10. package/dist/presets/gruvbox.js.map +1 -1
  11. package/dist/presets/niwaki.js.map +1 -1
  12. package/dist/presets/nord.js.map +1 -1
  13. package/dist/presets/one-dark.js.map +1 -1
  14. package/dist/presets/solarized.js.map +1 -1
  15. package/dist/presets/tideline.d.ts.map +1 -1
  16. package/dist/presets/tideline.js +20 -4
  17. package/dist/presets/tideline.js.map +1 -1
  18. package/dist/presets/tokyo-night.js.map +1 -1
  19. package/dist/tokens.js.map +1 -1
  20. package/index.css +124 -124
  21. package/package.json +5 -5
  22. package/presets.json +61 -13
  23. package/styles/base/attributes.css +32 -13
  24. package/styles/dimensions/checklist.css +45 -46
  25. package/styles/dimensions/cover.css +71 -51
  26. package/styles/dimensions/density.css +69 -65
  27. package/styles/dimensions/frame.css +116 -57
  28. package/styles/dimensions/metadata.css +110 -103
  29. package/styles/dimensions/motion.css +42 -13
  30. package/styles/dimensions/reading.css +27 -27
  31. package/styles/dimensions/sections.css +44 -45
  32. package/styles/dimensions/sequence.css +56 -57
  33. package/styles/dimensions/state.css +8 -2
  34. package/styles/dimensions/substrate.css +82 -58
  35. package/styles/dimensions/surfaces.css +65 -62
  36. package/styles/elements/blockquote.css +24 -25
  37. package/styles/elements/code.css +72 -71
  38. package/styles/elements/table.css +36 -37
  39. package/styles/global.css +163 -121
  40. package/styles/layouts/blog.css +219 -218
  41. package/styles/layouts/default.css +168 -167
  42. package/styles/layouts/docs.css +121 -122
  43. package/styles/layouts/mobile.css +54 -55
  44. package/styles/layouts/on-this-page.css +46 -47
  45. package/styles/layouts/plan.css +248 -247
  46. package/styles/layouts/search.css +142 -140
  47. package/styles/layouts/split.css +45 -45
  48. package/styles/layouts/theme-toggle.css +33 -31
  49. package/styles/layouts/version-switcher.css +38 -37
  50. package/styles/runes/accordion.css +90 -81
  51. package/styles/runes/aggregate.css +50 -39
  52. package/styles/runes/annotate.css +46 -45
  53. package/styles/runes/api.css +22 -23
  54. package/styles/runes/audio.css +140 -141
  55. package/styles/runes/badge.css +12 -13
  56. package/styles/runes/bar.css +4 -5
  57. package/styles/runes/bento.css +73 -62
  58. package/styles/runes/bg.css +62 -47
  59. package/styles/runes/blog.css +89 -90
  60. package/styles/runes/bond.css +49 -50
  61. package/styles/runes/breadcrumb.css +34 -35
  62. package/styles/runes/budget.css +126 -127
  63. package/styles/runes/bug.css +28 -27
  64. package/styles/runes/card.css +63 -60
  65. package/styles/runes/carousel.css +15 -15
  66. package/styles/runes/cast.css +50 -51
  67. package/styles/runes/changelog.css +45 -46
  68. package/styles/runes/character.css +31 -32
  69. package/styles/runes/chart.css +194 -106
  70. package/styles/runes/codegroup.css +109 -100
  71. package/styles/runes/collection.css +87 -86
  72. package/styles/runes/compare.css +38 -39
  73. package/styles/runes/comparison.css +205 -179
  74. package/styles/runes/conversation.css +36 -33
  75. package/styles/runes/cta.css +135 -132
  76. package/styles/runes/datatable.css +84 -83
  77. package/styles/runes/decision.css +25 -26
  78. package/styles/runes/design-context.css +21 -23
  79. package/styles/runes/details.css +26 -27
  80. package/styles/runes/diagram.css +28 -29
  81. package/styles/runes/diff.css +75 -72
  82. package/styles/runes/drawer.css +276 -198
  83. package/styles/runes/embed.css +20 -21
  84. package/styles/runes/event.css +35 -36
  85. package/styles/runes/expand.css +43 -34
  86. package/styles/runes/faction.css +47 -48
  87. package/styles/runes/feature.css +119 -112
  88. package/styles/runes/figure.css +11 -12
  89. package/styles/runes/file-ref.css +11 -13
  90. package/styles/runes/form.css +155 -154
  91. package/styles/runes/gallery.css +59 -60
  92. package/styles/runes/grid.css +10 -7
  93. package/styles/runes/hero.css +189 -185
  94. package/styles/runes/hint.css +57 -58
  95. package/styles/runes/howto.css +62 -64
  96. package/styles/runes/itinerary.css +133 -134
  97. package/styles/runes/juxtapose.css +83 -82
  98. package/styles/runes/lore.css +32 -34
  99. package/styles/runes/map.css +106 -99
  100. package/styles/runes/mediatext.css +30 -27
  101. package/styles/runes/milestone.css +98 -97
  102. package/styles/runes/mockup.css +338 -335
  103. package/styles/runes/nav.css +465 -450
  104. package/styles/runes/organization.css +23 -20
  105. package/styles/runes/page-section.css +14 -15
  106. package/styles/runes/pagination.css +45 -44
  107. package/styles/runes/palette.css +78 -80
  108. package/styles/runes/placeholder.css +8 -9
  109. package/styles/runes/plan-history.css +160 -161
  110. package/styles/runes/plan-progress.css +15 -16
  111. package/styles/runes/plan-ref.css +32 -23
  112. package/styles/runes/playlist.css +106 -107
  113. package/styles/runes/plot.css +92 -91
  114. package/styles/runes/preview.css +152 -149
  115. package/styles/runes/pricing.css +133 -123
  116. package/styles/runes/progress.css +32 -27
  117. package/styles/runes/pullquote.css +89 -90
  118. package/styles/runes/realm.css +47 -48
  119. package/styles/runes/recipe.css +112 -114
  120. package/styles/runes/relationships.css +77 -76
  121. package/styles/runes/reveal.css +90 -79
  122. package/styles/runes/sandbox.css +59 -60
  123. package/styles/runes/section.css +57 -50
  124. package/styles/runes/showcase.css +35 -16
  125. package/styles/runes/sidenote.css +30 -27
  126. package/styles/runes/snippet.css +8 -9
  127. package/styles/runes/spacing.css +86 -88
  128. package/styles/runes/spec.css +24 -25
  129. package/styles/runes/steps.css +89 -80
  130. package/styles/runes/storyboard.css +46 -45
  131. package/styles/runes/swatch.css +22 -23
  132. package/styles/runes/symbol.css +117 -118
  133. package/styles/runes/tabs.css +88 -79
  134. package/styles/runes/testimonial.css +43 -44
  135. package/styles/runes/textblock.css +32 -28
  136. package/styles/runes/timeline.css +63 -64
  137. package/styles/runes/tint.css +214 -215
  138. package/styles/runes/toc.css +40 -41
  139. package/styles/runes/track.css +89 -90
  140. package/styles/runes/typography.css +89 -91
  141. package/styles/runes/work.css +47 -36
  142. package/styles/runes/xref.css +21 -22
@@ -1,96 +1,95 @@
1
1
  @layer skin {
2
- /* Blog — post listing with filtering and sorting */
3
- .rf-blog {
4
- --rf-title-size: var(--rf-text-3xl);
5
- padding: 2rem 0;
6
- }
7
- .rf-blog__preamble {
8
- margin-bottom: 2rem;
9
- }
10
- .rf-blog__headline {
11
- /* WORK-538 — read the prominence override first; the fallback is this rune's
2
+ /* Blog — post listing with filtering and sorting */
3
+ .rf-blog {
4
+ --rf-title-size: var(--rf-text-3xl);
5
+ padding: 2rem 0;
6
+ }
7
+ .rf-blog__preamble {
8
+ margin-bottom: 2rem;
9
+ }
10
+ .rf-blog__headline {
11
+ /* WORK-538 — read the prominence override first; the fallback is this rune's
12
12
  * resting size, stated as --rf-title-size on the root so the prominence ramp
13
13
  * can compute from it. */
14
- font-size: var(--rf-prominence-size, var(--rf-title-size));
15
- font-weight: var(--rf-weight-bold);
16
- letter-spacing: var(--rf-tracking-tight);
17
- margin: 0 0 0.5rem;
18
- line-height: var(--rf-leading-tight);
19
- color: var(--rf-color-text);
20
- }
21
- .rf-blog__blurb {
22
- font-size: var(--rf-text-lg);
23
- color: var(--rf-color-muted);
24
- margin: 0 0 1rem;
25
- line-height: var(--rf-leading-relaxed);
26
- max-width: 640px;
27
- }
28
- .rf-blog__posts {
29
- gap: 1.5rem;
30
- }
31
- .rf-blog__post {
32
- padding: 1.25rem 1.5rem;
33
- border-radius: var(--rf-radius-md);
34
- background: var(--rf-color-surface);
35
- transition: box-shadow 200ms ease;
36
- }
37
- .rf-blog__post:hover {
38
- box-shadow: var(--rf-shadow-md);
39
- }
40
- .rf-blog__post h3 {
41
- font-size: var(--rf-text-xl);
42
- font-weight: var(--rf-weight-semibold);
43
- margin: 0 0 0.375rem;
44
- line-height: var(--rf-leading-snug);
45
- }
46
- .rf-blog__post h3 a {
47
- color: var(--rf-color-text);
48
- text-decoration: none;
49
- }
50
- .rf-blog__post h3 a:hover {
51
- color: var(--rf-color-primary);
52
- }
53
- .rf-blog__post time {
54
- font-size: var(--rf-text-sm);
55
- color: var(--rf-color-muted);
56
- margin-bottom: 0.5rem;
57
- }
58
- .rf-blog__post p {
59
- font-size: var(--rf-text);
60
- color: var(--rf-color-muted);
61
- margin: 0;
62
- line-height: var(--rf-leading-relaxed);
63
- }
64
-
65
- /* Grid layout */
66
- .rf-blog--grid .rf-blog__posts {
67
- gap: 1.25rem;
68
- }
14
+ font-size: var(--rf-prominence-size, var(--rf-title-size));
15
+ font-weight: var(--rf-weight-bold);
16
+ letter-spacing: var(--rf-tracking-tight);
17
+ margin: 0 0 0.5rem;
18
+ line-height: var(--rf-leading-tight);
19
+ color: var(--rf-color-text);
20
+ }
21
+ .rf-blog__blurb {
22
+ font-size: var(--rf-text-lg);
23
+ color: var(--rf-color-muted);
24
+ margin: 0 0 1rem;
25
+ line-height: var(--rf-leading-relaxed);
26
+ max-width: 640px;
27
+ }
28
+ .rf-blog__posts {
29
+ gap: 1.5rem;
30
+ }
31
+ .rf-blog__post {
32
+ padding: 1.25rem 1.5rem;
33
+ border-radius: var(--rf-radius-md);
34
+ background: var(--rf-color-surface);
35
+ transition: box-shadow 200ms ease;
36
+ }
37
+ .rf-blog__post:hover {
38
+ box-shadow: var(--rf-shadow-md);
39
+ }
40
+ .rf-blog__post h3 {
41
+ font-size: var(--rf-text-xl);
42
+ font-weight: var(--rf-weight-semibold);
43
+ margin: 0 0 0.375rem;
44
+ line-height: var(--rf-leading-snug);
45
+ }
46
+ .rf-blog__post h3 a {
47
+ color: var(--rf-color-text);
48
+ text-decoration: none;
49
+ }
50
+ .rf-blog__post h3 a:hover {
51
+ color: var(--rf-color-primary);
52
+ }
53
+ .rf-blog__post time {
54
+ font-size: var(--rf-text-sm);
55
+ color: var(--rf-color-muted);
56
+ margin-bottom: 0.5rem;
57
+ }
58
+ .rf-blog__post p {
59
+ font-size: var(--rf-text);
60
+ color: var(--rf-color-muted);
61
+ margin: 0;
62
+ line-height: var(--rf-leading-relaxed);
63
+ }
69
64
 
70
- /* Compact layout */
71
- .rf-blog--compact .rf-blog__posts {
72
- gap: 0;
73
- }
74
- .rf-blog--compact .rf-blog__post {
75
- border-radius: 0;
76
- padding: 1rem 1.25rem;
77
- }
78
- .rf-blog--compact .rf-blog__post:first-child {
79
- border-radius: var(--rf-radius-md) var(--rf-radius-md) 0 0;
80
- }
81
- .rf-blog--compact .rf-blog__post:last-child {
82
- border-radius: 0 0 var(--rf-radius-md) var(--rf-radius-md);
83
- }
84
- .rf-blog--compact .rf-blog__post h3 {
85
- font-size: var(--rf-text-lg);
86
- margin-bottom: 0.125rem;
87
- }
88
- .rf-blog--compact .rf-blog__post p {
89
- font-size: var(--rf-text-sm);
90
- }
91
- .rf-blog--compact .rf-blog__post time {
92
- font-size: var(--rf-text-xs);
93
- margin-bottom: 0.25rem;
94
- }
65
+ /* Grid layout */
66
+ .rf-blog--grid .rf-blog__posts {
67
+ gap: 1.25rem;
68
+ }
95
69
 
70
+ /* Compact layout */
71
+ .rf-blog--compact .rf-blog__posts {
72
+ gap: 0;
73
+ }
74
+ .rf-blog--compact .rf-blog__post {
75
+ border-radius: 0;
76
+ padding: 1rem 1.25rem;
77
+ }
78
+ .rf-blog--compact .rf-blog__post:first-child {
79
+ border-radius: var(--rf-radius-md) var(--rf-radius-md) 0 0;
80
+ }
81
+ .rf-blog--compact .rf-blog__post:last-child {
82
+ border-radius: 0 0 var(--rf-radius-md) var(--rf-radius-md);
83
+ }
84
+ .rf-blog--compact .rf-blog__post h3 {
85
+ font-size: var(--rf-text-lg);
86
+ margin-bottom: 0.125rem;
87
+ }
88
+ .rf-blog--compact .rf-blog__post p {
89
+ font-size: var(--rf-text-sm);
90
+ }
91
+ .rf-blog--compact .rf-blog__post time {
92
+ font-size: var(--rf-text-xs);
93
+ margin-bottom: 0.25rem;
94
+ }
96
95
  }
@@ -1,54 +1,53 @@
1
1
  @layer skin {
2
- /* Bond */
3
- .rf-bond {
4
- gap: 0.75rem;
5
- }
6
- .rf-bond > span[property="from"],
7
- .rf-bond > span[property="to"] {
8
- font-weight: var(--rf-weight-semibold);
9
- font-size: var(--rf-text);
10
- color: var(--rf-color-text);
11
- white-space: nowrap;
12
- }
13
- .rf-bond__arrow {
14
- background: var(--rf-color-border);
15
- }
16
- .rf-bond__arrow::after {
17
- border: 4px solid transparent;
18
- border-left: 6px solid var(--rf-color-border);
19
- }
20
- .rf-bond[data-bidirectional="true"] .rf-bond__arrow::before {
21
- border: 4px solid transparent;
22
- border-right: 6px solid var(--rf-color-border);
23
- }
24
- .rf-bond__body {
25
- font-size: var(--rf-text-sm);
26
- color: var(--rf-color-muted);
27
- }
2
+ /* Bond */
3
+ .rf-bond {
4
+ gap: 0.75rem;
5
+ }
6
+ .rf-bond > span[property="from"],
7
+ .rf-bond > span[property="to"] {
8
+ font-weight: var(--rf-weight-semibold);
9
+ font-size: var(--rf-text);
10
+ color: var(--rf-color-text);
11
+ white-space: nowrap;
12
+ }
13
+ .rf-bond__arrow {
14
+ background: var(--rf-color-border);
15
+ }
16
+ .rf-bond__arrow::after {
17
+ border: 4px solid transparent;
18
+ border-left: 6px solid var(--rf-color-border);
19
+ }
20
+ .rf-bond[data-bidirectional="true"] .rf-bond__arrow::before {
21
+ border: 4px solid transparent;
22
+ border-right: 6px solid var(--rf-color-border);
23
+ }
24
+ .rf-bond__body {
25
+ font-size: var(--rf-text-sm);
26
+ color: var(--rf-color-muted);
27
+ }
28
28
 
29
- /* Status variants */
30
- .rf-bond--active .rf-bond__arrow,
31
- .rf-bond--active .rf-bond__arrow::after {
32
- border-left-color: var(--rf-color-primary);
33
- }
34
- .rf-bond--active .rf-bond__arrow {
35
- background: var(--rf-color-primary);
36
- }
37
- .rf-bond--active[data-bidirectional="true"] .rf-bond__arrow::before {
38
- border-right-color: var(--rf-color-primary);
39
- }
40
-
41
- .rf-bond[data-status="broken"] .rf-bond__arrow {
42
- background: repeating-linear-gradient(
43
- 90deg,
44
- var(--rf-color-muted) 0,
45
- var(--rf-color-muted) 4px,
46
- transparent 4px,
47
- transparent 8px
48
- );
49
- }
50
- .rf-bond[data-status="broken"] {
51
- opacity: 0.6;
52
- }
29
+ /* Status variants */
30
+ .rf-bond--active .rf-bond__arrow,
31
+ .rf-bond--active .rf-bond__arrow::after {
32
+ border-left-color: var(--rf-color-primary);
33
+ }
34
+ .rf-bond--active .rf-bond__arrow {
35
+ background: var(--rf-color-primary);
36
+ }
37
+ .rf-bond--active[data-bidirectional="true"] .rf-bond__arrow::before {
38
+ border-right-color: var(--rf-color-primary);
39
+ }
53
40
 
41
+ .rf-bond[data-status="broken"] .rf-bond__arrow {
42
+ background: repeating-linear-gradient(
43
+ 90deg,
44
+ var(--rf-color-muted) 0,
45
+ var(--rf-color-muted) 4px,
46
+ transparent 4px,
47
+ transparent 8px
48
+ );
49
+ }
50
+ .rf-bond[data-status="broken"] {
51
+ opacity: 0.6;
52
+ }
54
53
  }
@@ -1,38 +1,37 @@
1
1
  @layer skin {
2
- /* Breadcrumb — skin. The contents passthroughs + the flex trail live in
2
+ /* Breadcrumb — skin. The contents passthroughs + the flex trail live in
3
3
  * @refrakt-md/skeleton (styles/runes/breadcrumb.css). */
4
- .rf-breadcrumb {
5
- font-size: var(--rf-text-sm);
6
- margin: 0 0 1.5rem;
7
- }
8
- .rf-breadcrumb ol {
9
- gap: 0.25rem;
10
- padding: 0;
11
- margin: 0;
12
- }
13
- .rf-breadcrumb li {
14
- gap: 0.25rem;
15
- padding: 0;
16
- margin: 0;
17
- }
18
- .rf-breadcrumb li + li::before {
19
- content: var(--separator);
20
- color: var(--rf-color-muted);
21
- opacity: 0.5;
22
- margin-right: 0.125rem;
23
- }
24
- .rf-breadcrumb a {
25
- color: var(--rf-color-muted);
26
- text-decoration: none;
27
- transition: color 150ms ease;
28
- }
29
- .rf-breadcrumb a:hover {
30
- color: var(--rf-color-primary);
31
- text-decoration: none;
32
- }
33
- .rf-breadcrumb li:last-child span {
34
- color: var(--rf-color-text);
35
- font-weight: var(--rf-weight-medium);
36
- }
37
-
4
+ .rf-breadcrumb {
5
+ font-size: var(--rf-text-sm);
6
+ margin: 0 0 1.5rem;
7
+ }
8
+ .rf-breadcrumb ol {
9
+ gap: 0.25rem;
10
+ padding: 0;
11
+ margin: 0;
12
+ }
13
+ .rf-breadcrumb li {
14
+ gap: 0.25rem;
15
+ padding: 0;
16
+ margin: 0;
17
+ }
18
+ .rf-breadcrumb li + li::before {
19
+ content: var(--separator);
20
+ color: var(--rf-color-muted);
21
+ opacity: 0.5;
22
+ margin-right: 0.125rem;
23
+ }
24
+ .rf-breadcrumb a {
25
+ color: var(--rf-color-muted);
26
+ text-decoration: none;
27
+ transition: color 150ms ease;
28
+ }
29
+ .rf-breadcrumb a:hover {
30
+ color: var(--rf-color-primary);
31
+ text-decoration: none;
32
+ }
33
+ .rf-breadcrumb li:last-child span {
34
+ color: var(--rf-color-text);
35
+ font-weight: var(--rf-weight-medium);
36
+ }
38
37
  }
@@ -1,135 +1,134 @@
1
1
  @layer skin {
2
- /* Budget */
2
+ /* Budget */
3
3
 
4
- /* Duration + currency meta row — flex/gap from the shared
4
+ /* Duration + currency meta row — flex/gap from the shared
5
5
  * `[data-zone-layout=bar]` primitive; this block owns only its spacing. */
6
- .rf-budget__meta {
7
- margin-bottom: 0.75rem;
8
- }
9
- .rf-budget__preamble {
10
- margin-bottom: 1.5rem;
11
- }
12
- .rf-budget .rf-budget__eyebrow {
13
- font-size: var(--rf-text-xs);
14
- font-weight: var(--rf-weight-semibold);
15
- letter-spacing: var(--rf-tracking-wider);
16
- text-transform: uppercase;
17
- color: var(--rf-color-primary);
18
- margin: 0 0 0.375rem;
19
- }
20
- .rf-budget__headline {
21
- margin-top: 0;
22
- margin-bottom: 0.25rem;
23
- }
24
- .rf-budget .rf-budget__blurb {
25
- color: var(--rf-color-muted);
26
- margin-bottom: 0;
27
- max-width: 40rem;
28
- }
29
-
30
- /* Categories */
31
- .rf-budget__categories {
32
- gap: 1.5rem;
33
- }
6
+ .rf-budget__meta {
7
+ margin-bottom: 0.75rem;
8
+ }
9
+ .rf-budget__preamble {
10
+ margin-bottom: 1.5rem;
11
+ }
12
+ .rf-budget .rf-budget__eyebrow {
13
+ font-size: var(--rf-text-xs);
14
+ font-weight: var(--rf-weight-semibold);
15
+ letter-spacing: var(--rf-tracking-wider);
16
+ text-transform: uppercase;
17
+ color: var(--rf-color-primary);
18
+ margin: 0 0 0.375rem;
19
+ }
20
+ .rf-budget__headline {
21
+ margin-top: 0;
22
+ margin-bottom: 0.25rem;
23
+ }
24
+ .rf-budget .rf-budget__blurb {
25
+ color: var(--rf-color-muted);
26
+ margin-bottom: 0;
27
+ max-width: 40rem;
28
+ }
34
29
 
35
- /* Budget Category — no border box, spacing and typography create hierarchy */
36
- .rf-budget-category {
37
- padding: 0;
38
- }
39
- .rf-budget-category--estimate {
40
- border-left: 2px dashed var(--rf-color-warning);
41
- padding-left: 1rem;
42
- }
43
- .rf-budget-category__header {
44
- margin-bottom: 0.5rem;
45
- }
46
- .rf-budget-category--estimate .rf-budget-category__subtotal::before {
47
- content: 'est.';
48
- font-size: var(--rf-text-xs);
49
- font-weight: var(--rf-weight-semibold);
50
- text-transform: uppercase;
51
- letter-spacing: var(--rf-tracking-wider);
52
- color: var(--rf-color-warning);
53
- background: var(--rf-color-warning-bg);
54
- padding: 0.0625rem 0.375rem;
55
- border-radius: var(--rf-radius-full);
56
- margin-right: 0.5rem;
57
- vertical-align: middle;
58
- }
59
- .rf-budget-category__label {
60
- font-size: var(--rf-text);
61
- font-weight: var(--rf-weight-semibold);
62
- color: var(--rf-color-text);
63
- }
64
- .rf-budget-category__subtotal {
65
- font-size: var(--rf-text);
66
- font-weight: var(--rf-weight-semibold);
67
- color: var(--rf-color-text);
68
- white-space: nowrap;
69
- }
70
- .rf-budget-category__line-items {
71
- padding: 0;
72
- margin: 0;
73
- }
30
+ /* Categories */
31
+ .rf-budget__categories {
32
+ gap: 1.5rem;
33
+ }
74
34
 
75
- /* Budget Line Item */
76
- .rf-budget-line-item {
77
- padding: 0.3125rem 0;
78
- gap: 1rem;
79
- }
80
- .rf-budget-line-item + .rf-budget-line-item {
81
- border-top: 1px solid var(--rf-color-border);
82
- }
83
- .rf-budget-line-item__description {
84
- font-size: var(--rf-text-sm);
85
- color: var(--rf-color-muted);
86
- }
87
- .rf-budget-line-item__amount {
88
- font-size: var(--rf-text-sm);
89
- font-weight: var(--rf-weight-medium);
90
- color: var(--rf-color-text);
91
- white-space: nowrap;
92
- font-variant-numeric: tabular-nums;
93
- }
35
+ /* Budget Category — no border box, spacing and typography create hierarchy */
36
+ .rf-budget-category {
37
+ padding: 0;
38
+ }
39
+ .rf-budget-category--estimate {
40
+ border-left: 2px dashed var(--rf-color-warning);
41
+ padding-left: 1rem;
42
+ }
43
+ .rf-budget-category__header {
44
+ margin-bottom: 0.5rem;
45
+ }
46
+ .rf-budget-category--estimate .rf-budget-category__subtotal::before {
47
+ content: "est.";
48
+ font-size: var(--rf-text-xs);
49
+ font-weight: var(--rf-weight-semibold);
50
+ text-transform: uppercase;
51
+ letter-spacing: var(--rf-tracking-wider);
52
+ color: var(--rf-color-warning);
53
+ background: var(--rf-color-warning-bg);
54
+ padding: 0.0625rem 0.375rem;
55
+ border-radius: var(--rf-radius-full);
56
+ margin-right: 0.5rem;
57
+ vertical-align: middle;
58
+ }
59
+ .rf-budget-category__label {
60
+ font-size: var(--rf-text);
61
+ font-weight: var(--rf-weight-semibold);
62
+ color: var(--rf-color-text);
63
+ }
64
+ .rf-budget-category__subtotal {
65
+ font-size: var(--rf-text);
66
+ font-weight: var(--rf-weight-semibold);
67
+ color: var(--rf-color-text);
68
+ white-space: nowrap;
69
+ }
70
+ .rf-budget-category__line-items {
71
+ padding: 0;
72
+ margin: 0;
73
+ }
94
74
 
95
- /* Budget Footer — total line */
96
- .rf-budget__footer {
97
- margin-top: 1.5rem;
98
- padding-top: 1rem;
99
- border-top: 2px solid var(--rf-color-text);
100
- gap: 0.5rem;
101
- }
102
- .rf-budget__total {
103
- gap: 1rem;
104
- }
105
- .rf-budget__total-label {
106
- font-size: var(--rf-text);
107
- font-weight: var(--rf-weight-bold);
108
- color: var(--rf-color-text);
109
- }
110
- .rf-budget__total-amount {
111
- font-size: var(--rf-text-xl);
112
- font-weight: var(--rf-weight-bold);
113
- color: var(--rf-color-text);
114
- white-space: nowrap;
115
- font-variant-numeric: tabular-nums;
116
- }
117
- .rf-budget__per-day {
118
- gap: 1rem;
119
- }
120
- .rf-budget__per-day-label {
121
- font-size: var(--rf-text-sm);
122
- color: var(--rf-color-muted);
123
- }
124
- .rf-budget__per-day-amount {
125
- font-size: var(--rf-text);
126
- font-weight: var(--rf-weight-medium);
127
- color: var(--rf-color-muted);
128
- white-space: nowrap;
129
- font-variant-numeric: tabular-nums;
130
- }
131
- [data-variant="summary"] .rf-budget-category__header {
132
- margin-bottom: 0;
133
- }
75
+ /* Budget Line Item */
76
+ .rf-budget-line-item {
77
+ padding: 0.3125rem 0;
78
+ gap: 1rem;
79
+ }
80
+ .rf-budget-line-item + .rf-budget-line-item {
81
+ border-top: 1px solid var(--rf-color-border);
82
+ }
83
+ .rf-budget-line-item__description {
84
+ font-size: var(--rf-text-sm);
85
+ color: var(--rf-color-muted);
86
+ }
87
+ .rf-budget-line-item__amount {
88
+ font-size: var(--rf-text-sm);
89
+ font-weight: var(--rf-weight-medium);
90
+ color: var(--rf-color-text);
91
+ white-space: nowrap;
92
+ font-variant-numeric: tabular-nums;
93
+ }
134
94
 
95
+ /* Budget Footer — total line */
96
+ .rf-budget__footer {
97
+ margin-top: 1.5rem;
98
+ padding-top: 1rem;
99
+ border-top: 2px solid var(--rf-color-text);
100
+ gap: 0.5rem;
101
+ }
102
+ .rf-budget__total {
103
+ gap: 1rem;
104
+ }
105
+ .rf-budget__total-label {
106
+ font-size: var(--rf-text);
107
+ font-weight: var(--rf-weight-bold);
108
+ color: var(--rf-color-text);
109
+ }
110
+ .rf-budget__total-amount {
111
+ font-size: var(--rf-text-xl);
112
+ font-weight: var(--rf-weight-bold);
113
+ color: var(--rf-color-text);
114
+ white-space: nowrap;
115
+ font-variant-numeric: tabular-nums;
116
+ }
117
+ .rf-budget__per-day {
118
+ gap: 1rem;
119
+ }
120
+ .rf-budget__per-day-label {
121
+ font-size: var(--rf-text-sm);
122
+ color: var(--rf-color-muted);
123
+ }
124
+ .rf-budget__per-day-amount {
125
+ font-size: var(--rf-text);
126
+ font-weight: var(--rf-weight-medium);
127
+ color: var(--rf-color-muted);
128
+ white-space: nowrap;
129
+ font-variant-numeric: tabular-nums;
130
+ }
131
+ [data-variant="summary"] .rf-budget-category__header {
132
+ margin-bottom: 0;
133
+ }
135
134
  }
@@ -1,36 +1,37 @@
1
1
  @layer skin {
2
- /* Bug */
2
+ /* Bug */
3
3
 
4
- /* SPEC-079: eyebrow + metadata zone names replace header-primary /
4
+ /* SPEC-079: eyebrow + metadata zone names replace header-primary /
5
5
  * header-secondary. Layout-level geometry lives on [data-zone-layout]
6
6
  * selectors; this file carries bug-specific spacing + assignee prefix. */
7
7
 
8
- .rf-bug__eyebrow {
9
- margin-bottom: 0.75rem;
10
- }
11
- .rf-bug__title h1,
12
- .rf-bug__title h2,
13
- .rf-bug__title h3 {
14
- margin-top: 0;
15
- }
16
-
17
- .rf-bug__metadata {
18
- margin-bottom: 1.5rem;
19
- }
8
+ .rf-bug__eyebrow {
9
+ margin-bottom: 0.75rem;
10
+ }
11
+ .rf-bug__title h1,
12
+ .rf-bug__title h2,
13
+ .rf-bug__title h3 {
14
+ margin-top: 0;
15
+ }
20
16
 
21
- .rf-bug__metadata [data-field="assignee"] dd .rf-badge::before { content: '@'; }
17
+ .rf-bug__metadata {
18
+ margin-bottom: 1.5rem;
19
+ }
22
20
 
23
- .rf-bug__body {
24
- font-size: var(--rf-text-sm);
25
- line-height: var(--rf-leading-relaxed);
26
- }
27
- .rf-bug__body > section {
28
- margin-top: 1rem;
29
- padding-top: 0.75rem;
30
- border-top: 1px solid var(--rf-color-border);
31
- }
32
- .rf-bug__body > section:first-child {
33
- margin-top: 0.75rem;
34
- }
21
+ .rf-bug__metadata [data-field="assignee"] dd .rf-badge::before {
22
+ content: "@";
23
+ }
35
24
 
25
+ .rf-bug__body {
26
+ font-size: var(--rf-text-sm);
27
+ line-height: var(--rf-leading-relaxed);
28
+ }
29
+ .rf-bug__body > section {
30
+ margin-top: 1rem;
31
+ padding-top: 0.75rem;
32
+ border-top: 1px solid var(--rf-color-border);
33
+ }
34
+ .rf-bug__body > section:first-child {
35
+ margin-top: 0.75rem;
36
+ }
36
37
  }