@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,89 +1,90 @@
1
1
  @layer skin {
2
- /* Collection — skin. The list/grid arrangement, card flex column, and block-item
2
+ /* Collection — skin. The list/grid arrangement, card flex column, and block-item
3
3
  * display reset live in @refrakt-md/skeleton (styles/runes/collection.css). */
4
- .rf-collection {
5
- margin: var(--rf-spacing-md) 0;
6
- }
7
- .rf-collection__preamble > :first-child { margin-top: 0; }
8
- .rf-collection__empty {
9
- color: var(--rf-color-muted);
10
- font-size: 0.9375em;
11
- }
12
- .rf-collection__items {
13
- gap: var(--rf-spacing-sm);
14
- }
15
- .rf-collection[data-layout='grid'] .rf-collection__items {
16
- gap: var(--rf-spacing-md);
17
- }
18
- .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-collection__group),
19
- .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-accordion) {
20
- gap: var(--rf-spacing-md);
21
- }
22
- .rf-collection[data-layout='grid'] .rf-collection__group {
23
- gap: var(--rf-spacing-md);
24
- }
25
- .rf-collection__card {
26
- gap: var(--rf-spacing-xs);
27
- padding: var(--rf-spacing-md);
28
- border: 1px solid var(--rf-color-border);
29
- border-radius: var(--rf-radius-md);
30
- background: var(--rf-color-surface);
31
- }
32
- .rf-collection__card:hover {
33
- background: var(--rf-color-surface-hover);
34
- }
35
- .rf-collection__title {
36
- font-weight: var(--rf-weight-semibold);
37
- color: var(--rf-color-text);
38
- text-decoration: none;
39
- }
40
- .rf-collection__title:hover {
41
- color: var(--rf-color-primary);
42
- }
43
- .rf-collection__field {
44
- font-size: 0.875em;
45
- color: var(--rf-color-muted);
46
- }
47
- .rf-collection__group {
48
- margin-top: var(--rf-spacing-md);
49
- /* Tight default for short item rows (the built-in title link, no body). */
50
- gap: var(--rf-spacing-xs);
51
- }
52
- .rf-collection__group:has(.rf-collection__item[data-block]) {
53
- gap: var(--rf-spacing-sm);
54
- }
55
- .rf-collection__item[data-block] > :first-child {
56
- margin-top: 0;
57
- }
58
- .rf-collection__item[data-block] > :last-child {
59
- margin-bottom: 0;
60
- }
61
- .rf-collection__group-title {
62
- margin: 0 0 var(--rf-spacing-sm);
63
- font-size: 0.875em;
64
- text-transform: uppercase;
65
- letter-spacing: var(--rf-tracking-wider);
66
- color: var(--rf-color-muted);
67
- }
68
- /* table layout */
69
- .rf-collection__table {
70
- width: 100%;
71
- border-collapse: collapse;
72
- }
73
- .rf-collection__table th,
74
- .rf-collection__table td {
75
- padding: var(--rf-spacing-sm);
76
- text-align: left;
77
- border-bottom: 1px solid var(--rf-color-border);
78
- }
79
- .rf-collection__table th {
80
- font-size: 0.875em;
81
- text-transform: uppercase;
82
- letter-spacing: var(--rf-tracking-wider);
83
- color: var(--rf-color-muted);
84
- }
85
- .rf-collection__table td p {
86
- margin: 0;
87
- }
88
-
4
+ .rf-collection {
5
+ margin: var(--rf-spacing-md) 0;
6
+ }
7
+ .rf-collection__preamble > :first-child {
8
+ margin-top: 0;
9
+ }
10
+ .rf-collection__empty {
11
+ color: var(--rf-color-muted);
12
+ font-size: 0.9375em;
13
+ }
14
+ .rf-collection__items {
15
+ gap: var(--rf-spacing-sm);
16
+ }
17
+ .rf-collection[data-layout="grid"] .rf-collection__items {
18
+ gap: var(--rf-spacing-md);
19
+ }
20
+ .rf-collection[data-layout="grid"] .rf-collection__items:has(.rf-collection__group),
21
+ .rf-collection[data-layout="grid"] .rf-collection__items:has(.rf-accordion) {
22
+ gap: var(--rf-spacing-md);
23
+ }
24
+ .rf-collection[data-layout="grid"] .rf-collection__group {
25
+ gap: var(--rf-spacing-md);
26
+ }
27
+ .rf-collection__card {
28
+ gap: var(--rf-spacing-xs);
29
+ padding: var(--rf-spacing-md);
30
+ border: 1px solid var(--rf-color-border);
31
+ border-radius: var(--rf-radius-md);
32
+ background: var(--rf-color-surface);
33
+ }
34
+ .rf-collection__card:hover {
35
+ background: var(--rf-color-surface-hover);
36
+ }
37
+ .rf-collection__title {
38
+ font-weight: var(--rf-weight-semibold);
39
+ color: var(--rf-color-text);
40
+ text-decoration: none;
41
+ }
42
+ .rf-collection__title:hover {
43
+ color: var(--rf-color-primary);
44
+ }
45
+ .rf-collection__field {
46
+ font-size: 0.875em;
47
+ color: var(--rf-color-muted);
48
+ }
49
+ .rf-collection__group {
50
+ margin-top: var(--rf-spacing-md);
51
+ /* Tight default for short item rows (the built-in title link, no body). */
52
+ gap: var(--rf-spacing-xs);
53
+ }
54
+ .rf-collection__group:has(.rf-collection__item[data-block]) {
55
+ gap: var(--rf-spacing-sm);
56
+ }
57
+ .rf-collection__item[data-block] > :first-child {
58
+ margin-top: 0;
59
+ }
60
+ .rf-collection__item[data-block] > :last-child {
61
+ margin-bottom: 0;
62
+ }
63
+ .rf-collection__group-title {
64
+ margin: 0 0 var(--rf-spacing-sm);
65
+ font-size: 0.875em;
66
+ text-transform: uppercase;
67
+ letter-spacing: var(--rf-tracking-wider);
68
+ color: var(--rf-color-muted);
69
+ }
70
+ /* table layout */
71
+ .rf-collection__table {
72
+ width: 100%;
73
+ border-collapse: collapse;
74
+ }
75
+ .rf-collection__table th,
76
+ .rf-collection__table td {
77
+ padding: var(--rf-spacing-sm);
78
+ text-align: left;
79
+ border-bottom: 1px solid var(--rf-color-border);
80
+ }
81
+ .rf-collection__table th {
82
+ font-size: 0.875em;
83
+ text-transform: uppercase;
84
+ letter-spacing: var(--rf-tracking-wider);
85
+ color: var(--rf-color-muted);
86
+ }
87
+ .rf-collection__table td p {
88
+ margin: 0;
89
+ }
89
90
  }
@@ -1,41 +1,40 @@
1
1
  @layer skin {
2
- /* Compare */
3
- .rf-compare {
4
- border: 1px solid var(--rf-color-border);
5
- border-radius: var(--rf-radius-md);
6
- }
7
- .rf-compare__header {
8
- padding: 0.5rem 1rem;
9
- font-family: var(--rf-font-sans);
10
- font-size: var(--rf-text-xs);
11
- font-weight: var(--rf-weight-semibold);
12
- color: var(--rf-color-muted);
13
- background: var(--rf-color-surface);
14
- border-bottom: 1px solid var(--rf-color-border);
15
- }
16
- .rf-compare--side-by-side [data-panel] + [data-panel] {
17
- border-left: 1px solid var(--rf-color-border);
18
- }
19
- .rf-compare--stacked [data-panel] + [data-panel] {
20
- border-top: 1px solid var(--rf-color-border);
21
- }
22
- .rf-compare [data-label] {
23
- padding: 0.5rem 1rem;
24
- font-size: var(--rf-text-xs);
25
- font-weight: var(--rf-weight-semibold);
26
- text-transform: uppercase;
27
- letter-spacing: var(--rf-tracking-wider);
28
- color: var(--rf-color-muted);
29
- background: var(--rf-color-surface);
30
- border-bottom: 1px solid var(--rf-color-border);
31
- }
32
- .rf-compare .rf-codeblock {
33
- margin: 0;
34
- }
35
- .rf-compare pre {
36
- margin: 0;
37
- border: none;
38
- border-radius: 0;
39
- }
40
-
2
+ /* Compare */
3
+ .rf-compare {
4
+ border: 1px solid var(--rf-color-border);
5
+ border-radius: var(--rf-radius-md);
6
+ }
7
+ .rf-compare__header {
8
+ padding: 0.5rem 1rem;
9
+ font-family: var(--rf-font-sans);
10
+ font-size: var(--rf-text-xs);
11
+ font-weight: var(--rf-weight-semibold);
12
+ color: var(--rf-color-muted);
13
+ background: var(--rf-color-surface);
14
+ border-bottom: 1px solid var(--rf-color-border);
15
+ }
16
+ .rf-compare--side-by-side [data-panel] + [data-panel] {
17
+ border-left: 1px solid var(--rf-color-border);
18
+ }
19
+ .rf-compare--stacked [data-panel] + [data-panel] {
20
+ border-top: 1px solid var(--rf-color-border);
21
+ }
22
+ .rf-compare [data-label] {
23
+ padding: 0.5rem 1rem;
24
+ font-size: var(--rf-text-xs);
25
+ font-weight: var(--rf-weight-semibold);
26
+ text-transform: uppercase;
27
+ letter-spacing: var(--rf-tracking-wider);
28
+ color: var(--rf-color-muted);
29
+ background: var(--rf-color-surface);
30
+ border-bottom: 1px solid var(--rf-color-border);
31
+ }
32
+ .rf-compare .rf-codeblock {
33
+ margin: 0;
34
+ }
35
+ .rf-compare pre {
36
+ margin: 0;
37
+ border: none;
38
+ border-radius: 0;
39
+ }
41
40
  }
@@ -1,184 +1,210 @@
1
1
  @layer skin {
2
- /* Comparison — skin. The grid passthroughs, scroll/sticky geometry, cards grid,
2
+ /* Comparison — skin. The grid passthroughs, scroll/sticky geometry, cards grid,
3
3
  * card flex + badge positioning, and metadata hiding live in @refrakt-md/skeleton
4
4
  * (styles/runes/comparison.css). */
5
- .rf-comparison {
6
- margin: 2rem 0;
7
- }
8
- .rf-comparison__title {
9
- text-align: center;
10
- margin: 0 0 1.5rem;
11
- font-size: var(--rf-text-2xl);
12
- font-weight: var(--rf-weight-bold);
13
- color: var(--rf-color-text);
14
- }
15
- /* Table layout */
16
- .rf-comparison__table-wrapper {
17
- margin: 0 -1rem;
18
- padding: 0 1rem;
19
- }
20
- .rf-comparison__table {
21
- width: 100%;
22
- border-collapse: collapse;
23
- font-size: var(--rf-text);
24
- }
25
- .rf-comparison__table th,
26
- .rf-comparison__table td {
27
- padding: 0.75rem 1rem;
28
- text-align: left;
29
- border-bottom: 1px solid var(--rf-color-border);
30
- }
31
- .rf-comparison__table thead th {
32
- background: var(--rf-color-bg);
33
- font-weight: var(--rf-weight-bold);
34
- font-size: var(--rf-text);
35
- color: var(--rf-color-text);
36
- border-bottom: 2px solid var(--rf-color-border);
37
- vertical-align: bottom;
38
- }
39
- .rf-comparison__col-header--highlighted {
40
- background: color-mix(in srgb, var(--rf-color-primary) 5%, var(--rf-color-bg));
41
- border-bottom-color: var(--rf-color-primary);
42
- }
43
- .rf-comparison__recommended-badge {
44
- font-size: var(--rf-text-xs);
45
- font-weight: var(--rf-weight-semibold);
46
- text-transform: uppercase;
47
- letter-spacing: var(--rf-tracking-wider);
48
- color: var(--rf-color-primary);
49
- margin-top: 0.25rem;
50
- }
51
- .rf-comparison__label-col {
52
- white-space: nowrap;
53
- }
54
- .rf-comparison__row-label {
55
- font-weight: var(--rf-weight-semibold);
56
- color: var(--rf-color-text);
57
- white-space: nowrap;
58
- background: var(--rf-color-bg);
59
- }
60
- .rf-comparison__cell {
61
- color: var(--rf-color-muted);
62
- vertical-align: middle;
63
- }
64
- .rf-comparison__cell--highlighted {
65
- background: color-mix(in srgb, var(--rf-color-primary) 3%, transparent);
66
- }
67
- .rf-comparison__cell p { margin: 0; font-size: var(--rf-text-sm); }
68
- .rf-comparison__cell em {
69
- font-style: italic;
70
- color: var(--rf-color-muted);
71
- }
72
- .rf-comparison__cell--empty {
73
- color: var(--rf-color-muted);
74
- }
75
- /* Row icons */
76
- .rf-comparison__row-icon {
77
- font-weight: var(--rf-weight-bold);
78
- font-size: var(--rf-text-lg);
79
- }
80
- .rf-comparison__row-icon--check {
81
- color: var(--rf-color-success);
82
- }
83
- .rf-comparison__row-icon--cross {
84
- color: var(--rf-color-danger);
85
- }
86
- /* Negative content */
87
- .rf-comparison__negative {
88
- color: var(--rf-color-danger);
89
- opacity: 0.85;
90
- }
91
- .rf-comparison__negative del,
92
- .rf-comparison__negative s {
93
- text-decoration: line-through;
94
- }
95
- /* Callout badge */
96
- .rf-comparison__callout-badge {
97
- background: color-mix(in srgb, var(--rf-color-primary) 10%, transparent);
98
- color: var(--rf-color-primary);
99
- font-size: var(--rf-text-xs);
100
- font-weight: var(--rf-weight-semibold);
101
- padding: 0.125rem 0.5rem;
102
- border-radius: 999px;
103
- }
104
- .rf-comparison__callout-badge p { margin: 0; font-size: inherit; }
105
- /* Cards layout */
106
- .rf-comparison__cards {
107
- gap: 1.5rem;
108
- }
109
- .rf-comparison-card {
110
- border: 1px solid var(--rf-color-border);
111
- border-radius: var(--rf-radius-md);
112
- padding: 1.5rem;
113
- background: var(--rf-color-bg);
114
- transition: box-shadow 200ms ease, transform 200ms ease;
115
- }
116
- .rf-comparison-card:hover {
117
- box-shadow: var(--rf-shadow-md);
118
- }
119
- .rf-comparison-card--highlighted {
120
- border-color: var(--rf-color-primary);
121
- box-shadow: var(--rf-shadow-lg);
122
- transform: scale(1.02);
123
- }
124
- .rf-comparison-card__badge {
125
- background: var(--rf-color-primary);
126
- color: white;
127
- font-size: var(--rf-text-xs);
128
- font-weight: var(--rf-weight-bold);
129
- text-transform: uppercase;
130
- letter-spacing: var(--rf-tracking-wider);
131
- padding: 0.125rem 0.75rem;
132
- border-radius: 999px;
133
- white-space: nowrap;
134
- }
135
- .rf-comparison-card__name {
136
- margin: 0 0 1rem;
137
- font-size: var(--rf-text-lg);
138
- font-weight: var(--rf-weight-bold);
139
- color: var(--rf-color-text);
140
- }
141
- .rf-comparison-card__rows {
142
- padding: 0;
143
- margin: 0;
144
- }
145
- .rf-comparison-card__row {
146
- padding: 0.5rem 0;
147
- font-size: var(--rf-text-sm);
148
- color: var(--rf-color-muted);
149
- border-bottom: 1px solid var(--rf-color-border);
150
- gap: 0.5rem;
151
- }
152
- .rf-comparison-card__row:last-child { border-bottom: none; }
153
- .rf-comparison-card__row strong { color: var(--rf-color-text); white-space: nowrap; }
154
- .rf-comparison-card__row p { margin: 0; }
155
- .rf-comparison-card__row--negative { opacity: 0.7; }
156
- .rf-comparison-card__row--callout {
157
- border-bottom: none;
158
- padding: 0.75rem 0 0.25rem;
159
- }
160
- /* Verdict */
161
- .rf-comparison__verdict {
162
- text-align: center;
163
- font-size: var(--rf-text);
164
- color: var(--rf-color-muted);
165
- font-style: italic;
166
- margin: 1.5rem auto 0;
167
- max-width: 48rem;
168
- }
169
- /* Fallback column/row */
170
- .rf-comparison-column { margin-bottom: 1rem; }
171
- .rf-comparison-column--highlighted {
172
- border-left: 3px solid var(--rf-color-primary);
173
- padding-left: 1rem;
174
- }
175
- .rf-comparison-row { padding: 0.25rem 0; }
176
- /* Responsive */
177
- @media (max-width: 640px) {
178
- .rf-comparison-card--highlighted { transform: none; }
179
- .rf-comparison__table { font-size: var(--rf-text-sm); }
5
+ .rf-comparison {
6
+ margin: 2rem 0;
7
+ }
8
+ .rf-comparison__title {
9
+ text-align: center;
10
+ margin: 0 0 1.5rem;
11
+ font-size: var(--rf-text-2xl);
12
+ font-weight: var(--rf-weight-bold);
13
+ color: var(--rf-color-text);
14
+ }
15
+ /* Table layout */
16
+ .rf-comparison__table-wrapper {
17
+ margin: 0 -1rem;
18
+ padding: 0 1rem;
19
+ }
20
+ .rf-comparison__table {
21
+ width: 100%;
22
+ border-collapse: collapse;
23
+ font-size: var(--rf-text);
24
+ }
180
25
  .rf-comparison__table th,
181
- .rf-comparison__table td { padding: 0.5rem 0.625rem; }
182
- }
183
-
26
+ .rf-comparison__table td {
27
+ padding: 0.75rem 1rem;
28
+ text-align: left;
29
+ border-bottom: 1px solid var(--rf-color-border);
30
+ }
31
+ .rf-comparison__table thead th {
32
+ background: var(--rf-color-bg);
33
+ font-weight: var(--rf-weight-bold);
34
+ font-size: var(--rf-text);
35
+ color: var(--rf-color-text);
36
+ border-bottom: 2px solid var(--rf-color-border);
37
+ vertical-align: bottom;
38
+ }
39
+ .rf-comparison__col-header--highlighted {
40
+ background: color-mix(in srgb, var(--rf-color-primary) 5%, var(--rf-color-bg));
41
+ border-bottom-color: var(--rf-color-primary);
42
+ }
43
+ .rf-comparison__recommended-badge {
44
+ font-size: var(--rf-text-xs);
45
+ font-weight: var(--rf-weight-semibold);
46
+ text-transform: uppercase;
47
+ letter-spacing: var(--rf-tracking-wider);
48
+ color: var(--rf-color-primary);
49
+ margin-top: 0.25rem;
50
+ }
51
+ .rf-comparison__label-col {
52
+ white-space: nowrap;
53
+ }
54
+ .rf-comparison__row-label {
55
+ font-weight: var(--rf-weight-semibold);
56
+ color: var(--rf-color-text);
57
+ white-space: nowrap;
58
+ background: var(--rf-color-bg);
59
+ }
60
+ .rf-comparison__cell {
61
+ color: var(--rf-color-muted);
62
+ vertical-align: middle;
63
+ }
64
+ .rf-comparison__cell--highlighted {
65
+ background: color-mix(in srgb, var(--rf-color-primary) 3%, transparent);
66
+ }
67
+ .rf-comparison__cell p {
68
+ margin: 0;
69
+ font-size: var(--rf-text-sm);
70
+ }
71
+ .rf-comparison__cell em {
72
+ font-style: italic;
73
+ color: var(--rf-color-muted);
74
+ }
75
+ .rf-comparison__cell--empty {
76
+ color: var(--rf-color-muted);
77
+ }
78
+ /* Row icons */
79
+ .rf-comparison__row-icon {
80
+ font-weight: var(--rf-weight-bold);
81
+ font-size: var(--rf-text-lg);
82
+ }
83
+ .rf-comparison__row-icon--check {
84
+ color: var(--rf-color-success);
85
+ }
86
+ .rf-comparison__row-icon--cross {
87
+ color: var(--rf-color-danger);
88
+ }
89
+ /* Negative content */
90
+ .rf-comparison__negative {
91
+ color: var(--rf-color-danger);
92
+ opacity: 0.85;
93
+ }
94
+ .rf-comparison__negative del,
95
+ .rf-comparison__negative s {
96
+ text-decoration: line-through;
97
+ }
98
+ /* Callout badge */
99
+ .rf-comparison__callout-badge {
100
+ background: color-mix(in srgb, var(--rf-color-primary) 10%, transparent);
101
+ color: var(--rf-color-primary);
102
+ font-size: var(--rf-text-xs);
103
+ font-weight: var(--rf-weight-semibold);
104
+ padding: 0.125rem 0.5rem;
105
+ border-radius: 999px;
106
+ }
107
+ .rf-comparison__callout-badge p {
108
+ margin: 0;
109
+ font-size: inherit;
110
+ }
111
+ /* Cards layout */
112
+ .rf-comparison__cards {
113
+ gap: 1.5rem;
114
+ }
115
+ .rf-comparison-card {
116
+ border: 1px solid var(--rf-color-border);
117
+ border-radius: var(--rf-radius-md);
118
+ padding: 1.5rem;
119
+ background: var(--rf-color-bg);
120
+ transition:
121
+ box-shadow 200ms ease,
122
+ transform 200ms ease;
123
+ }
124
+ .rf-comparison-card:hover {
125
+ box-shadow: var(--rf-shadow-md);
126
+ }
127
+ .rf-comparison-card--highlighted {
128
+ border-color: var(--rf-color-primary);
129
+ box-shadow: var(--rf-shadow-lg);
130
+ transform: scale(1.02);
131
+ }
132
+ .rf-comparison-card__badge {
133
+ background: var(--rf-color-primary);
134
+ color: white;
135
+ font-size: var(--rf-text-xs);
136
+ font-weight: var(--rf-weight-bold);
137
+ text-transform: uppercase;
138
+ letter-spacing: var(--rf-tracking-wider);
139
+ padding: 0.125rem 0.75rem;
140
+ border-radius: 999px;
141
+ white-space: nowrap;
142
+ }
143
+ .rf-comparison-card__name {
144
+ margin: 0 0 1rem;
145
+ font-size: var(--rf-text-lg);
146
+ font-weight: var(--rf-weight-bold);
147
+ color: var(--rf-color-text);
148
+ }
149
+ .rf-comparison-card__rows {
150
+ padding: 0;
151
+ margin: 0;
152
+ }
153
+ .rf-comparison-card__row {
154
+ padding: 0.5rem 0;
155
+ font-size: var(--rf-text-sm);
156
+ color: var(--rf-color-muted);
157
+ border-bottom: 1px solid var(--rf-color-border);
158
+ gap: 0.5rem;
159
+ }
160
+ .rf-comparison-card__row:last-child {
161
+ border-bottom: none;
162
+ }
163
+ .rf-comparison-card__row strong {
164
+ color: var(--rf-color-text);
165
+ white-space: nowrap;
166
+ }
167
+ .rf-comparison-card__row p {
168
+ margin: 0;
169
+ }
170
+ .rf-comparison-card__row--negative {
171
+ opacity: 0.7;
172
+ }
173
+ .rf-comparison-card__row--callout {
174
+ border-bottom: none;
175
+ padding: 0.75rem 0 0.25rem;
176
+ }
177
+ /* Verdict */
178
+ .rf-comparison__verdict {
179
+ text-align: center;
180
+ font-size: var(--rf-text);
181
+ color: var(--rf-color-muted);
182
+ font-style: italic;
183
+ margin: 1.5rem auto 0;
184
+ max-width: 48rem;
185
+ }
186
+ /* Fallback column/row */
187
+ .rf-comparison-column {
188
+ margin-bottom: 1rem;
189
+ }
190
+ .rf-comparison-column--highlighted {
191
+ border-left: 3px solid var(--rf-color-primary);
192
+ padding-left: 1rem;
193
+ }
194
+ .rf-comparison-row {
195
+ padding: 0.25rem 0;
196
+ }
197
+ /* Responsive */
198
+ @media (max-width: 640px) {
199
+ .rf-comparison-card--highlighted {
200
+ transform: none;
201
+ }
202
+ .rf-comparison__table {
203
+ font-size: var(--rf-text-sm);
204
+ }
205
+ .rf-comparison__table th,
206
+ .rf-comparison__table td {
207
+ padding: 0.5rem 0.625rem;
208
+ }
209
+ }
184
210
  }