@refrakt-md/lumina 0.8.5 → 0.9.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 (80) hide show
  1. package/base.css +10 -0
  2. package/contracts/structures.json +92 -47
  3. package/index.css +20 -0
  4. package/package.json +6 -6
  5. package/styles/dimensions/checklist.css +81 -0
  6. package/styles/dimensions/density.css +51 -0
  7. package/styles/dimensions/media.css +62 -0
  8. package/styles/dimensions/metadata.css +161 -0
  9. package/styles/dimensions/sections.css +77 -0
  10. package/styles/dimensions/sequence.css +129 -0
  11. package/styles/dimensions/state.css +57 -0
  12. package/styles/dimensions/surfaces.css +88 -0
  13. package/styles/global.css +1 -1
  14. package/styles/layouts/docs.css +28 -2
  15. package/styles/layouts/split.css +159 -3
  16. package/styles/runes/accordion.css +1 -2
  17. package/styles/runes/annotate.css +0 -3
  18. package/styles/runes/api.css +0 -4
  19. package/styles/runes/audio.css +0 -3
  20. package/styles/runes/backlog.css +61 -0
  21. package/styles/runes/bento.css +4 -5
  22. package/styles/runes/blog.css +3 -7
  23. package/styles/runes/budget.css +3 -19
  24. package/styles/runes/bug.css +25 -0
  25. package/styles/runes/cast.css +0 -3
  26. package/styles/runes/character.css +5 -43
  27. package/styles/runes/chart.css +0 -2
  28. package/styles/runes/codegroup.css +2 -2
  29. package/styles/runes/compare.css +0 -1
  30. package/styles/runes/conversation.css +0 -1
  31. package/styles/runes/cta.css +6 -3
  32. package/styles/runes/datatable.css +0 -3
  33. package/styles/runes/decision-log.css +46 -0
  34. package/styles/runes/decision.css +21 -0
  35. package/styles/runes/design-context.css +0 -1
  36. package/styles/runes/details.css +0 -1
  37. package/styles/runes/diagram.css +0 -1
  38. package/styles/runes/diff.css +0 -1
  39. package/styles/runes/embed.css +0 -1
  40. package/styles/runes/event.css +0 -3
  41. package/styles/runes/faction.css +79 -48
  42. package/styles/runes/feature.css +10 -10
  43. package/styles/runes/figure.css +0 -3
  44. package/styles/runes/form.css +0 -1
  45. package/styles/runes/gallery.css +0 -1
  46. package/styles/runes/grid.css +0 -3
  47. package/styles/runes/hero.css +13 -4
  48. package/styles/runes/hint.css +0 -7
  49. package/styles/runes/howto.css +7 -18
  50. package/styles/runes/itinerary.css +0 -2
  51. package/styles/runes/juxtapose.css +0 -4
  52. package/styles/runes/lore.css +0 -20
  53. package/styles/runes/mediatext.css +0 -3
  54. package/styles/runes/milestone.css +106 -0
  55. package/styles/runes/mockup.css +0 -1
  56. package/styles/runes/organization.css +0 -3
  57. package/styles/runes/palette.css +0 -3
  58. package/styles/runes/plan-activity.css +87 -0
  59. package/styles/runes/plan-progress.css +69 -0
  60. package/styles/runes/playlist.css +101 -83
  61. package/styles/runes/plot.css +0 -23
  62. package/styles/runes/preview.css +9 -17
  63. package/styles/runes/pricing.css +4 -1
  64. package/styles/runes/realm.css +80 -46
  65. package/styles/runes/recipe.css +7 -89
  66. package/styles/runes/reveal.css +1 -4
  67. package/styles/runes/sandbox.css +0 -1
  68. package/styles/runes/spacing.css +0 -3
  69. package/styles/runes/spec.css +20 -0
  70. package/styles/runes/steps.css +4 -2
  71. package/styles/runes/storyboard.css +0 -3
  72. package/styles/runes/symbol.css +0 -39
  73. package/styles/runes/tabs.css +1 -4
  74. package/styles/runes/testimonial.css +0 -2
  75. package/styles/runes/textblock.css +0 -3
  76. package/styles/runes/toc.css +0 -1
  77. package/styles/runes/track.css +16 -5
  78. package/styles/runes/typography.css +0 -3
  79. package/styles/runes/work.css +35 -0
  80. package/styles/runes/xref.css +12 -0
@@ -1,7 +1,4 @@
1
1
  /* Event */
2
- .rf-event {
3
- margin: 1.5rem 0;
4
- }
5
2
  .rf-event__details {
6
3
  display: flex;
7
4
  flex-wrap: wrap;
@@ -1,43 +1,12 @@
1
1
  /* Faction */
2
2
  .rf-faction {
3
- margin: 1.5rem 0;
4
3
  display: flex;
5
4
  flex-direction: column;
6
5
  }
7
6
 
8
- /* Badge barsurface strip */
9
- .rf-faction__badge {
10
- display: flex;
11
- flex-wrap: wrap;
12
- gap: 0.75rem 1.25rem;
13
- align-items: center;
14
- background: var(--rf-color-surface);
15
- border-radius: var(--rf-radius-md);
16
- padding: 0.625rem 1rem;
17
- margin-bottom: 1rem;
18
- }
19
- .rf-faction__type-badge,
20
- .rf-faction__alignment-badge,
21
- .rf-faction__size-badge {
22
- font-size: 0.8125rem;
23
- font-weight: 500;
24
- text-transform: capitalize;
25
- color: var(--rf-color-muted);
26
- }
27
- .rf-faction__type-badge::before { content: 'Type: '; font-weight: 400; opacity: 0.65; }
28
- .rf-faction__alignment-badge::before { content: 'Alignment: '; font-weight: 400; opacity: 0.65; }
29
- .rf-faction__size-badge::before { content: 'Size: '; font-weight: 400; opacity: 0.65; }
30
-
31
- /* Scene image */
7
+ /* Scene imagebase styles deferred to shared [data-section="media"] in split.css */
32
8
  .rf-faction__scene {
33
- border-radius: var(--rf-radius-lg);
34
- overflow: hidden;
35
- }
36
- .rf-faction__scene img {
37
- display: block;
38
- width: 100%;
39
- height: auto;
40
- border-radius: var(--rf-radius-lg);
9
+ margin-bottom: var(--rf-spacing-md);
41
10
  }
42
11
 
43
12
  /* Content */
@@ -56,7 +25,6 @@
56
25
  font-weight: 700;
57
26
  margin-bottom: 0.5rem;
58
27
  color: var(--rf-color-heading);
59
- order: -1;
60
28
  }
61
29
 
62
30
  /* Faction Section */
@@ -64,9 +32,11 @@
64
32
  padding: 0.75rem 0;
65
33
  border-top: 1px solid var(--rf-color-border);
66
34
  }
67
- .rf-faction-section__header {
68
- font-size: 1.125rem;
69
- font-weight: 600;
35
+ .rf-faction-section__name {
36
+ display: block;
37
+ font-size: 1.25rem;
38
+ font-weight: 700;
39
+ line-height: 1.3;
70
40
  margin-bottom: 0.5rem;
71
41
  color: var(--rf-color-heading);
72
42
  }
@@ -80,41 +50,102 @@
80
50
  .rf-faction[data-layout="split-reverse"] {
81
51
  display: grid;
82
52
  grid-template-columns: var(--split-ratio, 1fr 1fr);
83
- gap: var(--split-gap, 2rem);
53
+ column-gap: var(--split-gap, 2rem);
84
54
  align-items: var(--split-valign, start);
85
55
  }
86
- /* Name and badge span full width at the top */
87
- .rf-faction[data-layout="split"] > span[property="name"],
88
- .rf-faction[data-layout="split-reverse"] > span[property="name"] {
89
- grid-column: 1 / -1;
56
+ /* Split: badge + name + content left (col 1), scene right (col 2) */
57
+ .rf-faction[data-layout="split"] > .rf-faction__badge {
58
+ grid-column: 1;
90
59
  grid-row: 1;
91
60
  }
92
- .rf-faction[data-layout="split"] > .rf-faction__badge,
93
- .rf-faction[data-layout="split-reverse"] > .rf-faction__badge {
94
- grid-column: 1 / -1;
61
+ .rf-faction[data-layout="split"] > span[property="name"] {
62
+ grid-column: 1;
95
63
  grid-row: 2;
96
64
  }
97
- /* Split: content left (col 1), scene right (col 2) */
98
65
  .rf-faction[data-layout="split"] > .rf-faction__content {
99
66
  grid-column: 1;
100
67
  grid-row: 3;
101
68
  }
102
69
  .rf-faction[data-layout="split"] > .rf-faction__scene {
70
+ grid-column: 2;
71
+ grid-row: 1 / 4;
72
+ }
73
+ /* Split-reverse: scene left (col 1), badge + name + content right (col 2) */
74
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__badge {
75
+ grid-column: 2;
76
+ grid-row: 1;
77
+ }
78
+ .rf-faction[data-layout="split-reverse"] > span[property="name"] {
79
+ grid-column: 2;
80
+ grid-row: 2;
81
+ }
82
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__content {
103
83
  grid-column: 2;
104
84
  grid-row: 3;
105
85
  }
106
- /* Split-reverse: scene left (col 1), content right (col 2) — matches DOM order */
86
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__scene {
87
+ grid-column: 1;
88
+ grid-row: 1 / 4;
89
+ margin: 0;
90
+ }
107
91
  /* Collapse to single column on small screens */
108
92
  @media (max-width: 640px) {
109
93
  .rf-faction[data-layout="split"],
110
94
  .rf-faction[data-layout="split-reverse"] {
111
95
  grid-template-columns: 1fr;
112
96
  }
97
+ .rf-faction[data-layout="split"] > .rf-faction__badge,
98
+ .rf-faction[data-layout="split"] > span[property="name"],
113
99
  .rf-faction[data-layout="split"] > .rf-faction__content,
114
- .rf-faction[data-layout="split"] > .rf-faction__scene {
100
+ .rf-faction[data-layout="split"] > .rf-faction__scene,
101
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__badge,
102
+ .rf-faction[data-layout="split-reverse"] > span[property="name"],
103
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__content,
104
+ .rf-faction[data-layout="split-reverse"] > .rf-faction__scene {
105
+ grid-column: auto;
106
+ grid-row: auto;
107
+ }
108
+ .rf-faction[data-layout="split"]:not([data-media-position="top"]) > .rf-faction__scene,
109
+ .rf-faction[data-layout="split-reverse"]:not([data-media-position="top"]) > .rf-faction__scene {
110
+ margin-bottom: var(--rf-spacing-md);
111
+ }
112
+ }
113
+ /* Reset grid placement when data-collapse triggers single-column from shared split.css */
114
+ @media (max-width: 640px) {
115
+ .rf-faction[data-collapse="sm"] > .rf-faction__badge,
116
+ .rf-faction[data-collapse="sm"] > span[property="name"],
117
+ .rf-faction[data-collapse="sm"] > .rf-faction__content,
118
+ .rf-faction[data-collapse="sm"] > .rf-faction__scene {
115
119
  grid-column: auto;
116
120
  grid-row: auto;
117
121
  }
122
+ .rf-faction[data-collapse="sm"]:not([data-media-position="top"]) > .rf-faction__scene {
123
+ margin-bottom: var(--rf-spacing-md);
124
+ }
125
+ }
126
+ @media (max-width: 768px) {
127
+ .rf-faction[data-collapse="md"] > .rf-faction__badge,
128
+ .rf-faction[data-collapse="md"] > span[property="name"],
129
+ .rf-faction[data-collapse="md"] > .rf-faction__content,
130
+ .rf-faction[data-collapse="md"] > .rf-faction__scene {
131
+ grid-column: auto;
132
+ grid-row: auto;
133
+ }
134
+ .rf-faction[data-collapse="md"]:not([data-media-position="top"]) > .rf-faction__scene {
135
+ margin-bottom: var(--rf-spacing-md);
136
+ }
137
+ }
138
+ @media (max-width: 1024px) {
139
+ .rf-faction[data-collapse="lg"] > .rf-faction__badge,
140
+ .rf-faction[data-collapse="lg"] > span[property="name"],
141
+ .rf-faction[data-collapse="lg"] > .rf-faction__content,
142
+ .rf-faction[data-collapse="lg"] > .rf-faction__scene {
143
+ grid-column: auto;
144
+ grid-row: auto;
145
+ }
146
+ .rf-faction[data-collapse="lg"]:not([data-media-position="top"]) > .rf-faction__scene {
147
+ margin-bottom: var(--rf-spacing-md);
148
+ }
118
149
  }
119
150
 
120
151
  /* Split layout scene gets subtle depth */
@@ -2,7 +2,10 @@
2
2
  .rf-feature {
3
3
  padding: 2.5rem 0 2rem;
4
4
  }
5
- .rf-feature__header {
5
+ .rf-feature__preamble {
6
+ flex-direction: column;
7
+ align-items: flex-start;
8
+ gap: 0.25rem;
6
9
  margin-bottom: 1.5rem;
7
10
  }
8
11
  .rf-feature__eyebrow {
@@ -45,15 +48,15 @@
45
48
  .rf-feature h2 {
46
49
  margin-bottom: 2rem;
47
50
  }
48
- .rf-feature[data-align="center"] .rf-feature__header,
51
+ .rf-feature[data-align="center"] .rf-feature__preamble,
49
52
  .rf-feature[data-align="center"] h2 {
50
53
  text-align: center;
51
54
  }
52
- .rf-feature[data-align="left"] .rf-feature__header,
55
+ .rf-feature[data-align="left"] .rf-feature__preamble,
53
56
  .rf-feature[data-align="left"] h2 {
54
57
  text-align: left;
55
58
  }
56
- .rf-feature[data-align="right"] .rf-feature__header,
59
+ .rf-feature[data-align="right"] .rf-feature__preamble,
57
60
  .rf-feature[data-align="right"] h2 {
58
61
  text-align: right;
59
62
  }
@@ -68,8 +71,8 @@
68
71
  .rf-feature[data-layout="split-reverse"] .rf-feature__content {
69
72
  display: block;
70
73
  }
71
- .rf-feature[data-layout="split"] .rf-feature__header,
72
- .rf-feature[data-layout="split-reverse"] .rf-feature__header,
74
+ .rf-feature[data-layout="split"] .rf-feature__preamble,
75
+ .rf-feature[data-layout="split-reverse"] .rf-feature__preamble,
73
76
  .rf-feature[data-layout="split"] h2,
74
77
  .rf-feature[data-layout="split-reverse"] h2 {
75
78
  text-align: left;
@@ -80,15 +83,13 @@
80
83
  }
81
84
  .rf-feature[data-layout="split"] .rf-feature__feature-item,
82
85
  .rf-feature[data-layout="split-reverse"] .rf-feature__feature-item {
83
- border: none;
84
86
  background: none;
85
87
  padding: 0.75rem 0;
86
88
  }
87
89
  .rf-feature__feature-item {
88
90
  padding: 1.75rem;
89
91
  border-radius: var(--rf-radius-md);
90
- border: 1px solid var(--rf-color-border);
91
- background: var(--rf-color-bg);
92
+ background: var(--rf-color-surface);
92
93
  }
93
94
  .rf-feature__feature-item dt {
94
95
  font-weight: 650;
@@ -120,7 +121,6 @@
120
121
  }
121
122
  .rf-feature--in-hero .rf-feature__feature-item {
122
123
  background: transparent;
123
- border-color: rgba(255, 255, 255, 0.15);
124
124
  }
125
125
 
126
126
  /* Context-aware: feature inside a grid — remove outer padding */
@@ -1,7 +1,4 @@
1
1
  /* Figure */
2
- .rf-figure {
3
- margin: 1.5rem 0;
4
- }
5
2
  .rf-figure img {
6
3
  max-width: 100%;
7
4
  height: auto;
@@ -1,6 +1,5 @@
1
1
  /* Form */
2
2
  .rf-form {
3
- margin: 1.5rem 0;
4
3
  display: flex;
5
4
  flex-direction: column;
6
5
  gap: 1.25rem;
@@ -1,6 +1,5 @@
1
1
  /* Gallery — Multi-image container with grid/carousel/masonry layout */
2
2
  .rf-gallery {
3
- margin: 1.5rem 0;
4
3
  position: relative;
5
4
  }
6
5
 
@@ -1,7 +1,4 @@
1
1
  /* Grid */
2
- .rf-grid {
3
- margin: 1.5rem 0;
4
- }
5
2
  .rf-grid [data-layout="grid"] {
6
3
  display: grid;
7
4
  grid-template-columns: var(--grid-ratio, repeat(auto-fit, minmax(250px, 1fr)));
@@ -5,7 +5,10 @@
5
5
  background-size: cover;
6
6
  background-position: center;
7
7
  }
8
- .rf-hero__header {
8
+ .rf-hero__preamble {
9
+ flex-direction: column;
10
+ align-items: center;
11
+ gap: 0.25rem;
9
12
  margin-bottom: 2rem;
10
13
  }
11
14
  /* Higher specificity needed to override .rf-hero p (0,1,1) */
@@ -56,7 +59,7 @@
56
59
  gap: 0.75rem;
57
60
  flex-wrap: wrap;
58
61
  }
59
- .rf-hero[data-align="center"] .rf-hero__header,
62
+ .rf-hero[data-align="center"] .rf-hero__preamble,
60
63
  .rf-hero[data-align="center"] > h1,
61
64
  .rf-hero[data-align="center"] > p {
62
65
  text-align: center;
@@ -65,19 +68,25 @@
65
68
  margin: 0 auto;
66
69
  justify-content: center;
67
70
  }
68
- .rf-hero[data-align="left"] .rf-hero__header,
71
+ .rf-hero[data-align="left"] .rf-hero__preamble,
69
72
  .rf-hero[data-align="left"] > h1,
70
73
  .rf-hero[data-align="left"] > p {
71
74
  text-align: left;
72
75
  }
76
+ .rf-hero[data-align="left"] .rf-hero__preamble {
77
+ align-items: flex-start;
78
+ }
73
79
  .rf-hero[data-align="left"] .rf-hero__actions {
74
80
  margin: 0;
75
81
  }
76
- .rf-hero[data-align="right"] .rf-hero__header,
82
+ .rf-hero[data-align="right"] .rf-hero__preamble,
77
83
  .rf-hero[data-align="right"] > h1,
78
84
  .rf-hero[data-align="right"] > p {
79
85
  text-align: right;
80
86
  }
87
+ .rf-hero[data-align="right"] .rf-hero__preamble {
88
+ align-items: flex-end;
89
+ }
81
90
  .rf-hero[data-align="right"] .rf-hero__actions {
82
91
  margin: 0 0 0 auto;
83
92
  }
@@ -4,16 +4,9 @@
4
4
  --hint-bg: var(--rf-color-info-bg);
5
5
  border-left: 3px solid var(--hint-color);
6
6
  padding: 0.875rem 1.25rem;
7
- margin: 1.5rem 0;
8
7
  border-radius: 0 var(--rf-radius-md) var(--rf-radius-md) 0;
9
8
  background: var(--hint-bg);
10
9
  }
11
- .rf-hint__header {
12
- display: flex;
13
- align-items: center;
14
- gap: 0.5rem;
15
- margin-bottom: 0.375rem;
16
- }
17
10
  .rf-hint__icon {
18
11
  display: flex;
19
12
  align-items: center;
@@ -1,30 +1,14 @@
1
1
  /* HowTo — matches recipe design */
2
2
 
3
- /* Root: no border box, just flow spacing */
4
- .rf-howto {
5
- margin: 1.5rem 0;
6
- }
7
-
8
- /* Meta bar — soft surface strip */
3
+ /* Meta bar extra bottom spacing beyond section header default */
9
4
  .rf-howto__meta {
10
- display: flex;
11
- flex-wrap: wrap;
12
- gap: 0.75rem 1.25rem;
13
- align-items: center;
14
- background: var(--rf-color-surface);
15
- border-radius: var(--rf-radius-md);
16
- padding: 0.625rem 1rem;
17
5
  margin-bottom: 1.5rem;
18
6
  }
19
- .rf-howto__meta-item {
20
- font-size: 0.8125rem;
21
- color: var(--rf-color-muted);
22
- font-weight: 400;
23
- }
24
7
 
25
8
  /* Tools/materials list — surfaced zone with primary markers */
26
9
  .rf-howto__content ul {
27
10
  background: var(--rf-color-surface);
11
+ border: 1px solid var(--rf-color-border);
28
12
  border-radius: var(--rf-radius-md);
29
13
  padding: 1.25rem 1.25rem 1.25rem 2.5rem;
30
14
  margin: 0 0 1.75rem;
@@ -72,6 +56,11 @@
72
56
  border-radius: var(--rf-radius-full);
73
57
  }
74
58
 
59
+ .rf-howto__content ol > li > p,
60
+ .rf-howto__content ul > li > p {
61
+ margin: 0;
62
+ }
63
+
75
64
  /* Tips — callout accent like hint */
76
65
  .rf-howto__content blockquote {
77
66
  border-left: 2px solid var(--rf-color-primary);
@@ -1,8 +1,6 @@
1
1
  /* Itinerary */
2
2
  .rf-itinerary {
3
3
  margin: 2rem 0;
4
- padding-left: 0.75rem;
5
- padding-right: 0.75rem;
6
4
  }
7
5
  .rf-itinerary > header {
8
6
  margin-bottom: 1.5rem;
@@ -1,9 +1,5 @@
1
1
  /* Juxtapose — interactive comparison between two panels */
2
2
 
3
- .rf-juxtapose {
4
- margin: 1.5rem 0;
5
- }
6
-
7
3
  /* ─── Variant modifiers (for static/no-JS layout) ─── */
8
4
  .rf-juxtapose--slider,
9
5
  .rf-juxtapose--auto,
@@ -1,28 +1,8 @@
1
1
  /* Lore */
2
2
  .rf-lore {
3
- margin: 1.5rem 0;
4
3
  position: relative;
5
4
  }
6
5
 
7
- /* Badge bar — surface strip */
8
- .rf-lore__badge {
9
- display: flex;
10
- flex-wrap: wrap;
11
- gap: 0.75rem 1.25rem;
12
- align-items: center;
13
- background: var(--rf-color-surface);
14
- border-radius: var(--rf-radius-md);
15
- padding: 0.625rem 1rem;
16
- margin-bottom: 1rem;
17
- }
18
- .rf-lore__category-badge {
19
- font-size: 0.8125rem;
20
- font-weight: 500;
21
- text-transform: capitalize;
22
- color: var(--rf-color-muted);
23
- }
24
- .rf-lore__category-badge::before { content: 'Category: '; font-weight: 400; opacity: 0.65; }
25
-
26
6
  /* Content */
27
7
  .rf-lore__content {
28
8
  transition: filter 0.3s ease;
@@ -1,7 +1,4 @@
1
1
  /* MediaText */
2
- .rf-mediatext {
3
- margin: 1.5rem 0;
4
- }
5
2
 
6
3
  /* Grid mode (default — no wrap) */
7
4
  .rf-mediatext:not([data-wrap="true"]) {
@@ -0,0 +1,106 @@
1
+ /* Milestone */
2
+ .rf-milestone__target-badge {
3
+ margin-left: auto;
4
+ }
5
+ .rf-milestone__body {
6
+ font-size: 0.925rem;
7
+ line-height: 1.65;
8
+ }
9
+ .rf-milestone__body > header {
10
+ margin-bottom: 0.75rem;
11
+ }
12
+ .rf-milestone__body > header h1,
13
+ .rf-milestone__body > header h2,
14
+ .rf-milestone__body > header h3 {
15
+ margin-top: 0;
16
+ }
17
+ .rf-milestone__body ul {
18
+ padding-left: 1.5rem;
19
+ }
20
+
21
+ /* Auto-backlog */
22
+ .rf-milestone__backlog {
23
+ margin-top: 1.25rem;
24
+ padding-top: 1rem;
25
+ border-top: 1px solid var(--rf-color-border);
26
+ }
27
+ .rf-milestone__backlog-group {
28
+ margin-bottom: 1rem;
29
+ }
30
+ .rf-milestone__backlog-group-label {
31
+ font-size: 0.75rem;
32
+ font-weight: 700;
33
+ text-transform: uppercase;
34
+ letter-spacing: 0.05em;
35
+ color: var(--rf-color-muted);
36
+ margin: 0 0 0.375rem;
37
+ }
38
+
39
+ /* Backlog tabs */
40
+ .rf-milestone__tabs {
41
+ display: flex;
42
+ border-bottom: 1px solid var(--rf-color-border);
43
+ overflow-x: auto;
44
+ overflow-y: hidden;
45
+ -webkit-overflow-scrolling: touch;
46
+ margin-bottom: 0;
47
+ }
48
+ .rf-milestone__tab {
49
+ flex: 0 0 auto;
50
+ padding: 0.5rem 1rem;
51
+ font-size: 0.8125rem;
52
+ font-weight: 500;
53
+ color: var(--rf-color-muted);
54
+ background: none;
55
+ border: none;
56
+ border-bottom: 2px solid transparent;
57
+ cursor: pointer;
58
+ transition: color 200ms ease, border-color 200ms ease;
59
+ white-space: nowrap;
60
+ font-family: inherit;
61
+ }
62
+ .rf-milestone__tab:hover {
63
+ color: var(--rf-color-text);
64
+ }
65
+ .rf-milestone__tab--active {
66
+ color: var(--rf-color-primary);
67
+ border-bottom-color: var(--rf-color-primary);
68
+ font-weight: 600;
69
+ }
70
+ .rf-milestone__panels {
71
+ padding: 0;
72
+ margin: 0;
73
+ }
74
+ .rf-milestone__panel {
75
+ padding-top: 0.75rem;
76
+ }
77
+
78
+ /* Aggregate progress */
79
+ .rf-milestone__progress {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 0.625rem;
83
+ margin-bottom: 1rem;
84
+ }
85
+ .rf-milestone__progress-label {
86
+ font-size: 0.75rem;
87
+ font-weight: 600;
88
+ color: var(--rf-color-muted);
89
+ white-space: nowrap;
90
+ }
91
+ .rf-milestone__progress-bar {
92
+ flex: 1;
93
+ height: 0.375rem;
94
+ border-radius: var(--rf-radius-sm);
95
+ background: var(--rf-color-surface-active);
96
+ overflow: hidden;
97
+ }
98
+ .rf-milestone__progress-bar::after {
99
+ content: '';
100
+ display: block;
101
+ height: 100%;
102
+ width: var(--rf-progress, 0%);
103
+ background: var(--rf-color-success);
104
+ border-radius: var(--rf-radius-sm);
105
+ transition: width 0.3s ease;
106
+ }
@@ -10,7 +10,6 @@
10
10
  display: block;
11
11
  width: 100%;
12
12
  container-type: inline-size;
13
- margin: 1.5rem 0;
14
13
  background-color: transparent;
15
14
  }
16
15
 
@@ -1,7 +1,4 @@
1
1
  /* Organization */
2
- .rf-organization {
3
- margin: 1.5rem 0;
4
- }
5
2
  .rf-organization__type {
6
3
  font-size: 0.75rem;
7
4
  font-weight: 400;
@@ -1,7 +1,4 @@
1
1
  /* Palette — color swatch grid */
2
- .rf-palette {
3
- margin: 1.5rem 0;
4
- }
5
2
  .rf-palette__title {
6
3
  font-size: 1.125rem;
7
4
  font-weight: 600;
@@ -0,0 +1,87 @@
1
+ /* Plan Activity */
2
+ .rf-plan-activity__list {
3
+ list-style: none;
4
+ padding: 0;
5
+ margin: 0;
6
+ }
7
+ .rf-plan-activity__entry {
8
+ display: flex;
9
+ align-items: baseline;
10
+ gap: 0.5rem;
11
+ padding: 0.25rem 0.5rem;
12
+ border-radius: var(--rf-radius-sm);
13
+ font-size: 0.8125rem;
14
+ }
15
+ .rf-plan-activity__entry:nth-child(odd) {
16
+ background: var(--rf-color-surface);
17
+ }
18
+ .rf-plan-activity__date {
19
+ font-family: var(--rf-font-mono);
20
+ font-size: 0.75rem;
21
+ color: var(--rf-color-muted);
22
+ white-space: nowrap;
23
+ }
24
+ .rf-plan-activity__type {
25
+ font-size: 0.75rem;
26
+ text-transform: uppercase;
27
+ letter-spacing: 0.05em;
28
+ color: var(--rf-color-muted);
29
+ min-width: 4rem;
30
+ }
31
+ .rf-plan-activity__id {
32
+ font-family: var(--rf-font-mono);
33
+ font-size: 0.75rem;
34
+ color: var(--rf-color-primary);
35
+ white-space: nowrap;
36
+ }
37
+ .rf-plan-activity__status {
38
+ font-size: 0.75rem;
39
+ padding: 0.0625rem 0.375rem;
40
+ border-radius: var(--rf-radius-sm);
41
+ white-space: nowrap;
42
+ }
43
+
44
+ /* Status badge colors */
45
+ .rf-plan-activity__status[data-status="done"],
46
+ .rf-plan-activity__status[data-status="fixed"],
47
+ .rf-plan-activity__status[data-status="accepted"] {
48
+ color: var(--rf-color-success);
49
+ background: var(--rf-color-success-bg);
50
+ }
51
+ .rf-plan-activity__status[data-status="in-progress"],
52
+ .rf-plan-activity__status[data-status="confirmed"],
53
+ .rf-plan-activity__status[data-status="review"] {
54
+ color: var(--rf-color-warning);
55
+ background: var(--rf-color-warning-bg);
56
+ }
57
+ .rf-plan-activity__status[data-status="ready"],
58
+ .rf-plan-activity__status[data-status="reported"],
59
+ .rf-plan-activity__status[data-status="proposed"] {
60
+ color: var(--rf-color-info);
61
+ background: var(--rf-color-info-bg);
62
+ }
63
+ .rf-plan-activity__status[data-status="blocked"] {
64
+ color: var(--rf-color-danger);
65
+ background: var(--rf-color-danger-bg);
66
+ }
67
+ .rf-plan-activity__status[data-status="draft"] {
68
+ color: var(--rf-color-muted);
69
+ background: var(--rf-color-surface-active);
70
+ }
71
+ .rf-plan-activity__title {
72
+ color: var(--rf-color-text);
73
+ overflow: hidden;
74
+ text-overflow: ellipsis;
75
+ white-space: nowrap;
76
+ }
77
+ .rf-plan-activity__link {
78
+ display: flex;
79
+ align-items: baseline;
80
+ gap: 0.5rem;
81
+ color: inherit;
82
+ text-decoration: none;
83
+ width: 100%;
84
+ }
85
+ .rf-plan-activity__link:hover .rf-plan-activity__title {
86
+ color: var(--rf-color-primary);
87
+ }