@atlashub/smartstack-cli 3.6.0 → 3.8.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 (40) hide show
  1. package/package.json +3 -2
  2. package/templates/skills/business-analyse/SKILL.md +6 -12
  3. package/templates/skills/business-analyse/_architecture.md +1 -1
  4. package/templates/skills/business-analyse/html/ba-interactive.html +3058 -2252
  5. package/templates/skills/business-analyse/html/build-html.js +77 -0
  6. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +129 -0
  7. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +22 -0
  8. package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +208 -0
  9. package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +211 -0
  10. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +542 -0
  11. package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +105 -0
  12. package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +90 -0
  13. package/templates/skills/business-analyse/html/src/scripts/08-editing.js +45 -0
  14. package/templates/skills/business-analyse/html/src/scripts/09-export.js +65 -0
  15. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +165 -0
  16. package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +139 -0
  17. package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -0
  18. package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -0
  19. package/templates/skills/business-analyse/html/src/styles/03-navigation.css +62 -0
  20. package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -0
  21. package/templates/skills/business-analyse/html/src/styles/05-modules.css +325 -0
  22. package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +230 -0
  23. package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -0
  24. package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +229 -0
  25. package/templates/skills/business-analyse/html/src/template.html +622 -0
  26. package/templates/skills/business-analyse/react/components.md +1 -1
  27. package/templates/skills/business-analyse/react/schema.md +1 -1
  28. package/templates/skills/business-analyse/references/html-data-mapping.md +2 -2
  29. package/templates/skills/business-analyse/schemas/feature-schema.json +1 -1
  30. package/templates/skills/business-analyse/steps/step-00-init.md +8 -1
  31. package/templates/skills/business-analyse/steps/step-03d-validate.md +1 -1
  32. package/templates/skills/business-analyse/steps/step-04-consolidation.md +21 -0
  33. package/templates/skills/business-analyse/steps/step-05a-handoff.md +273 -10
  34. package/templates/skills/business-analyse/steps/{step-05d-html.md → step-05b-deploy.md} +262 -63
  35. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +1 -1
  36. package/templates/skills/business-analyse/templates/tpl-progress.md +1 -1
  37. package/templates/skills/ralph-loop/SKILL.md +3 -3
  38. package/templates/skills/ralph-loop/steps/step-00-init.md +77 -1
  39. package/templates/skills/business-analyse/steps/step-05b-mapping.md +0 -302
  40. package/templates/skills/business-analyse/steps/step-05c-deploy.md +0 -296
@@ -0,0 +1,230 @@
1
+ /* ============================================
2
+ MOCKUP FRAME
3
+ ============================================ */
4
+ .mockup-frame {
5
+ background: var(--bg-card);
6
+ border: 1px solid var(--border);
7
+ border-radius: 12px;
8
+ overflow: hidden;
9
+ margin: 1rem 0;
10
+ }
11
+ .mockup-toolbar {
12
+ background: var(--bg-hover);
13
+ padding: 0.5rem 1rem;
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 0.5rem;
17
+ border-bottom: 1px solid var(--border);
18
+ }
19
+ .mockup-dot { width: 8px; height: 8px; border-radius: 50%; }
20
+ .mockup-dot-red { background: #ef4444; }
21
+ .mockup-dot-yellow { background: #eab308; }
22
+ .mockup-dot-green { background: #22c55e; }
23
+ .mockup-title {
24
+ font-size: 0.75rem; color: var(--text-muted);
25
+ margin-left: 0.5rem;
26
+ }
27
+
28
+ .mockup-content {
29
+ padding: 1.5rem;
30
+ min-height: 200px;
31
+ }
32
+
33
+ .wireframe-comment {
34
+ padding: 0.75rem 1.5rem 1rem;
35
+ border-top: 1px solid var(--border);
36
+ background: var(--bg-input);
37
+ border-radius: 0 0 10px 10px;
38
+ }
39
+
40
+ /* Wireframe rendering */
41
+ .ascii-wireframe {
42
+ font-family: 'Courier New', 'Consolas', monospace;
43
+ font-size: 0.7rem;
44
+ line-height: 1.3;
45
+ color: var(--primary-light);
46
+ background: var(--bg-dark);
47
+ padding: 1rem;
48
+ border-radius: 6px;
49
+ overflow-x: auto;
50
+ white-space: pre;
51
+ margin: 0;
52
+ }
53
+
54
+ .svg-wireframe {
55
+ background: var(--bg-dark);
56
+ padding: 1rem;
57
+ border-radius: 6px;
58
+ overflow-x: auto;
59
+ }
60
+
61
+ .svg-wireframe svg {
62
+ max-width: 100%;
63
+ height: auto;
64
+ }
65
+
66
+ .wireframe-description {
67
+ padding: 0.75rem 1rem;
68
+ font-size: 0.85rem;
69
+ color: var(--text);
70
+ border-top: 1px solid var(--border);
71
+ background: var(--bg-input);
72
+ }
73
+
74
+ .wireframe-metadata {
75
+ padding: 0.75rem 1rem;
76
+ font-size: 0.8rem;
77
+ color: var(--text-muted);
78
+ border-top: 1px solid var(--border);
79
+ }
80
+
81
+ .wireframe-details {
82
+ padding: 0.75rem 1rem;
83
+ border-top: 1px solid var(--border);
84
+ background: var(--bg-input);
85
+ }
86
+
87
+ .wireframe-details summary {
88
+ cursor: pointer;
89
+ font-size: 0.85rem;
90
+ color: var(--primary-light);
91
+ font-weight: 500;
92
+ user-select: none;
93
+ }
94
+
95
+ .wireframe-details summary:hover {
96
+ color: var(--primary);
97
+ }
98
+
99
+ .mapping-table {
100
+ width: 100%;
101
+ margin-top: 0.75rem;
102
+ border-collapse: collapse;
103
+ font-size: 0.8rem;
104
+ }
105
+
106
+ .mapping-table th {
107
+ background: var(--bg-hover);
108
+ padding: 0.5rem;
109
+ text-align: left;
110
+ font-weight: 500;
111
+ color: var(--text-bright);
112
+ border: 1px solid var(--border);
113
+ }
114
+
115
+ .mapping-table td {
116
+ padding: 0.5rem;
117
+ border: 1px solid var(--border);
118
+ color: var(--text);
119
+ }
120
+
121
+ .mapping-table code {
122
+ background: var(--bg-dark);
123
+ padding: 0.2rem 0.4rem;
124
+ border-radius: 3px;
125
+ font-size: 0.75rem;
126
+ color: var(--accent);
127
+ }
128
+
129
+ /* Mockup components */
130
+ .mock-header {
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: space-between;
134
+ margin-bottom: 1rem;
135
+ padding-bottom: 0.75rem;
136
+ border-bottom: 1px solid var(--border);
137
+ }
138
+ .mock-title { font-size: 1.1rem; font-weight: 600; color: var(--text-bright); }
139
+ .mock-btn {
140
+ padding: 0.35rem 0.8rem;
141
+ background: var(--primary);
142
+ color: #fff;
143
+ border-radius: 6px;
144
+ font-size: 0.8rem;
145
+ font-weight: 500;
146
+ }
147
+ .mock-search {
148
+ display: flex; align-items: center; gap: 0.5rem;
149
+ padding: 0.4rem 0.8rem;
150
+ background: var(--bg-input);
151
+ border: 1px solid var(--border);
152
+ border-radius: 6px;
153
+ margin-bottom: 1rem;
154
+ color: var(--text-muted);
155
+ font-size: 0.8rem;
156
+ }
157
+ .mock-table {
158
+ width: 100%;
159
+ border-collapse: collapse;
160
+ }
161
+ .mock-table th {
162
+ text-align: left;
163
+ font-size: 0.7rem;
164
+ text-transform: uppercase;
165
+ letter-spacing: 0.05em;
166
+ color: var(--text-muted);
167
+ padding: 0.5rem 0.75rem;
168
+ border-bottom: 1px solid var(--border);
169
+ font-weight: 600;
170
+ }
171
+ .mock-table td {
172
+ padding: 0.6rem 0.75rem;
173
+ font-size: 0.85rem;
174
+ border-bottom: 1px solid rgba(51,65,85,0.5);
175
+ }
176
+ .mock-table tr:hover td { background: rgba(99,102,241,0.05); }
177
+
178
+ .mock-status {
179
+ display: inline-flex; align-items: center; gap: 0.3rem;
180
+ padding: 0.15rem 0.5rem; border-radius: 10px; font-size: 0.75rem;
181
+ }
182
+ .mock-status-active { background: rgba(34,197,94,0.15); color: #4ade80; }
183
+ .mock-status-pending { background: rgba(234,179,8,0.15); color: #facc15; }
184
+ .mock-status-draft { background: rgba(100,116,139,0.15); color: #94a3b8; }
185
+
186
+ .mock-form-group { margin-bottom: 1rem; }
187
+ .mock-label {
188
+ display: block;
189
+ font-size: 0.75rem;
190
+ color: var(--text-muted);
191
+ margin-bottom: 0.3rem;
192
+ font-weight: 500;
193
+ }
194
+ .mock-input {
195
+ width: 100%;
196
+ padding: 0.5rem 0.75rem;
197
+ background: var(--bg-input);
198
+ border: 1px solid var(--border);
199
+ border-radius: 6px;
200
+ color: var(--text);
201
+ font-size: 0.85rem;
202
+ }
203
+ .mock-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
204
+ .mock-form-actions {
205
+ display: flex; gap: 0.5rem; justify-content: flex-end;
206
+ padding-top: 1rem; border-top: 1px solid var(--border);
207
+ }
208
+
209
+ /* Dashboard mockup */
210
+ .mock-kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.75rem; margin-bottom: 1.5rem; }
211
+ .mock-kpi {
212
+ background: var(--bg-hover);
213
+ border-radius: 8px;
214
+ padding: 0.75rem;
215
+ text-align: center;
216
+ }
217
+ .mock-kpi-value { font-size: 1.3rem; font-weight: 700; color: var(--text-bright); }
218
+ .mock-kpi-label { font-size: 0.7rem; color: var(--text-muted); margin-top: 0.2rem; }
219
+ .mock-chart-placeholder {
220
+ height: 150px;
221
+ background: linear-gradient(135deg, rgba(99,102,241,0.05), rgba(6,182,212,0.05));
222
+ border: 1px dashed var(--border);
223
+ border-radius: 8px;
224
+ display: flex; align-items: center; justify-content: center;
225
+ color: var(--text-muted); font-size: 0.85rem;
226
+ }
227
+
228
+ @media (max-width: 768px) {
229
+ .mock-kpi-grid { grid-template-columns: repeat(2, 1fr); }
230
+ }
@@ -0,0 +1,184 @@
1
+ /* ============================================
2
+ INLINE COMMENTS
3
+ ============================================ */
4
+ .comment-btn-container {
5
+ margin-top: 0.75rem;
6
+ padding-top: 0.5rem;
7
+ border-top: 1px solid var(--border);
8
+ }
9
+
10
+ .comment-toggle-btn {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ gap: 0.4rem;
14
+ padding: 0.3rem 0.7rem;
15
+ border: 1px solid var(--border);
16
+ border-radius: 6px;
17
+ background: transparent;
18
+ color: var(--text-muted);
19
+ font-size: 0.75rem;
20
+ cursor: pointer;
21
+ transition: all var(--transition-fast);
22
+ font-family: inherit;
23
+ }
24
+ .comment-toggle-btn:hover {
25
+ border-color: var(--primary);
26
+ color: var(--primary-light);
27
+ background: rgba(99,102,241,0.05);
28
+ }
29
+ .comment-toggle-btn .comment-count {
30
+ background: var(--primary);
31
+ color: #fff;
32
+ padding: 0.05rem 0.35rem;
33
+ border-radius: 8px;
34
+ font-size: 0.65rem;
35
+ font-weight: 700;
36
+ min-width: 16px;
37
+ text-align: center;
38
+ }
39
+ .comment-toggle-btn .comment-count.empty {
40
+ background: var(--bg-hover);
41
+ color: var(--text-muted);
42
+ }
43
+
44
+ /* Comment thread under a card */
45
+ .comment-thread {
46
+ margin-top: 0.5rem;
47
+ display: none;
48
+ }
49
+ .comment-thread.visible { display: block; }
50
+
51
+ .comment-item {
52
+ display: flex;
53
+ gap: 0.75rem;
54
+ padding: 0.6rem 0.75rem;
55
+ background: var(--bg-input);
56
+ border: 1px solid var(--border);
57
+ border-radius: 8px;
58
+ margin-bottom: 0.4rem;
59
+ font-size: 0.8rem;
60
+ align-items: flex-start;
61
+ }
62
+
63
+ .comment-avatar {
64
+ width: 28px; height: 28px;
65
+ border-radius: 50%;
66
+ background: var(--primary);
67
+ display: flex; align-items: center; justify-content: center;
68
+ color: #fff; font-size: 0.65rem; font-weight: 700;
69
+ flex-shrink: 0;
70
+ }
71
+
72
+ .comment-body { flex: 1; min-width: 0; }
73
+
74
+ .comment-meta {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 0.5rem;
78
+ margin-bottom: 0.2rem;
79
+ }
80
+
81
+ .comment-author {
82
+ font-weight: 600;
83
+ color: var(--text-bright);
84
+ font-size: 0.75rem;
85
+ }
86
+
87
+ .comment-date {
88
+ font-size: 0.65rem;
89
+ color: var(--text-muted);
90
+ }
91
+
92
+ .comment-category {
93
+ font-size: 0.6rem;
94
+ text-transform: uppercase;
95
+ letter-spacing: 0.05em;
96
+ padding: 0.1rem 0.35rem;
97
+ border-radius: 4px;
98
+ font-weight: 600;
99
+ }
100
+ .comment-category-clarification { background: rgba(59,130,246,0.15); color: var(--info); }
101
+ .comment-category-correction { background: rgba(239,68,68,0.15); color: #f87171; }
102
+ .comment-category-suggestion { background: rgba(34,197,94,0.15); color: #4ade80; }
103
+
104
+ .comment-status {
105
+ font-size: 0.6rem;
106
+ padding: 0.1rem 0.35rem;
107
+ border-radius: 4px;
108
+ font-weight: 600;
109
+ margin-left: auto;
110
+ }
111
+ .comment-status-to-review { background: rgba(234,179,8,0.15); color: #facc15; }
112
+ .comment-status-validated { background: rgba(34,197,94,0.15); color: #4ade80; }
113
+
114
+ .comment-text {
115
+ color: var(--text);
116
+ line-height: 1.5;
117
+ word-wrap: break-word;
118
+ }
119
+
120
+ .comment-actions {
121
+ display: flex;
122
+ gap: 0.3rem;
123
+ margin-top: 0.3rem;
124
+ }
125
+
126
+ .comment-action-btn {
127
+ padding: 0.15rem 0.4rem;
128
+ border: none;
129
+ background: none;
130
+ color: var(--text-muted);
131
+ font-size: 0.7rem;
132
+ cursor: pointer;
133
+ border-radius: 4px;
134
+ font-family: inherit;
135
+ }
136
+ .comment-action-btn:hover { background: var(--bg-hover); color: var(--text-bright); }
137
+
138
+ /* Add comment form */
139
+ .comment-add-form {
140
+ display: flex;
141
+ gap: 0.5rem;
142
+ margin-top: 0.4rem;
143
+ align-items: flex-start;
144
+ }
145
+
146
+ .comment-add-form textarea {
147
+ flex: 1;
148
+ padding: 0.4rem 0.6rem;
149
+ background: var(--bg-input);
150
+ border: 1px solid var(--border);
151
+ border-radius: 6px;
152
+ color: var(--text);
153
+ font-size: 0.8rem;
154
+ font-family: inherit;
155
+ min-height: 36px;
156
+ resize: vertical;
157
+ }
158
+ .comment-add-form textarea:focus {
159
+ outline: none;
160
+ border-color: var(--primary);
161
+ }
162
+
163
+ .comment-add-form select {
164
+ padding: 0.4rem 0.5rem;
165
+ background: var(--bg-input);
166
+ border: 1px solid var(--border);
167
+ border-radius: 6px;
168
+ color: var(--text);
169
+ font-size: 0.75rem;
170
+ font-family: inherit;
171
+ }
172
+
173
+ .comment-add-form button {
174
+ padding: 0.4rem 0.7rem;
175
+ background: var(--primary);
176
+ border: none;
177
+ border-radius: 6px;
178
+ color: #fff;
179
+ font-size: 0.75rem;
180
+ cursor: pointer;
181
+ font-family: inherit;
182
+ white-space: nowrap;
183
+ }
184
+ .comment-add-form button:hover { background: var(--primary-dark); }
@@ -0,0 +1,229 @@
1
+ /* ============================================
2
+ REVIEW PANEL - Right sidebar
3
+ ============================================ */
4
+
5
+ /* Toggle button in header */
6
+ .review-toggle-btn {
7
+ position: relative;
8
+ padding: 0.4rem 0.9rem;
9
+ border-radius: 6px;
10
+ border: 1px solid var(--border);
11
+ background: var(--bg-hover);
12
+ color: var(--text);
13
+ font-size: 0.8rem;
14
+ cursor: pointer;
15
+ transition: all var(--transition-fast);
16
+ font-family: inherit;
17
+ }
18
+ .review-toggle-btn:hover { border-color: var(--primary); color: var(--text-bright); }
19
+ .review-toggle-btn.active {
20
+ background: var(--primary);
21
+ border-color: var(--primary);
22
+ color: #fff;
23
+ }
24
+
25
+ .review-badge {
26
+ position: absolute;
27
+ top: -6px; right: -6px;
28
+ background: var(--error);
29
+ color: #fff;
30
+ font-size: 0.6rem;
31
+ font-weight: 700;
32
+ padding: 0.1rem 0.35rem;
33
+ border-radius: 8px;
34
+ min-width: 16px;
35
+ text-align: center;
36
+ }
37
+ .review-badge.hidden { display: none; }
38
+
39
+ /* Layout adaptation when panel is open */
40
+ .body.review-open {
41
+ display: grid;
42
+ grid-template-columns: var(--sidebar-width) 1fr 340px;
43
+ }
44
+
45
+ .body.review-open .main {
46
+ overflow-y: auto;
47
+ }
48
+
49
+ /* Panel itself */
50
+ .review-panel {
51
+ display: none;
52
+ width: 340px;
53
+ background: var(--bg-card);
54
+ border-left: 1px solid var(--border);
55
+ height: calc(100vh - var(--header-height));
56
+ position: sticky;
57
+ top: var(--header-height);
58
+ overflow-y: auto;
59
+ flex-shrink: 0;
60
+ }
61
+
62
+ .review-panel.visible { display: flex; flex-direction: column; }
63
+
64
+ .review-panel-header {
65
+ padding: 1rem;
66
+ border-bottom: 1px solid var(--border);
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ }
71
+
72
+ .review-panel-title {
73
+ font-size: 0.9rem;
74
+ font-weight: 600;
75
+ color: var(--text-bright);
76
+ }
77
+
78
+ .review-panel-close {
79
+ background: none;
80
+ border: none;
81
+ color: var(--text-muted);
82
+ cursor: pointer;
83
+ font-size: 1.1rem;
84
+ padding: 0.2rem;
85
+ }
86
+ .review-panel-close:hover { color: var(--text-bright); }
87
+
88
+ /* Filters */
89
+ .review-filters {
90
+ display: flex;
91
+ gap: 0.3rem;
92
+ padding: 0.75rem 1rem;
93
+ border-bottom: 1px solid var(--border);
94
+ }
95
+
96
+ .review-filter-btn {
97
+ padding: 0.25rem 0.6rem;
98
+ border: 1px solid var(--border);
99
+ border-radius: 12px;
100
+ background: transparent;
101
+ color: var(--text-muted);
102
+ font-size: 0.7rem;
103
+ cursor: pointer;
104
+ font-family: inherit;
105
+ transition: all var(--transition-fast);
106
+ }
107
+ .review-filter-btn:hover { border-color: var(--primary); color: var(--text-bright); }
108
+ .review-filter-btn.active {
109
+ background: rgba(99,102,241,0.15);
110
+ border-color: var(--primary);
111
+ color: var(--primary-light);
112
+ font-weight: 500;
113
+ }
114
+
115
+ /* Comment list in panel */
116
+ .review-comments {
117
+ flex: 1;
118
+ overflow-y: auto;
119
+ padding: 0.75rem;
120
+ }
121
+
122
+ .review-comment-item {
123
+ padding: 0.75rem;
124
+ background: var(--bg-dark);
125
+ border: 1px solid var(--border);
126
+ border-radius: 8px;
127
+ margin-bottom: 0.5rem;
128
+ cursor: pointer;
129
+ transition: all var(--transition-fast);
130
+ }
131
+ .review-comment-item:hover { border-color: var(--primary); }
132
+
133
+ .review-comment-section {
134
+ font-size: 0.65rem;
135
+ color: var(--accent);
136
+ text-transform: uppercase;
137
+ letter-spacing: 0.05em;
138
+ margin-bottom: 0.3rem;
139
+ }
140
+
141
+ .review-comment-text {
142
+ font-size: 0.8rem;
143
+ color: var(--text);
144
+ margin-bottom: 0.4rem;
145
+ line-height: 1.4;
146
+ display: -webkit-box;
147
+ -webkit-line-clamp: 3;
148
+ -webkit-box-orient: vertical;
149
+ overflow: hidden;
150
+ }
151
+
152
+ .review-comment-footer {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ gap: 0.5rem;
157
+ }
158
+
159
+ .review-comment-author {
160
+ font-size: 0.7rem;
161
+ color: var(--text-muted);
162
+ }
163
+
164
+ .review-comment-actions {
165
+ display: flex;
166
+ gap: 0.2rem;
167
+ }
168
+
169
+ .review-action-btn {
170
+ padding: 0.2rem 0.4rem;
171
+ border: 1px solid var(--border);
172
+ border-radius: 4px;
173
+ background: transparent;
174
+ color: var(--text-muted);
175
+ font-size: 0.65rem;
176
+ cursor: pointer;
177
+ font-family: inherit;
178
+ transition: all var(--transition-fast);
179
+ }
180
+ .review-action-btn:hover { border-color: var(--primary); color: var(--text-bright); }
181
+ .review-action-btn.validate { border-color: rgba(34,197,94,0.3); color: var(--success); }
182
+ .review-action-btn.validate:hover { background: rgba(34,197,94,0.1); }
183
+ .review-action-btn.reject { border-color: rgba(234,179,8,0.3); color: var(--warning); }
184
+ .review-action-btn.reject:hover { background: rgba(234,179,8,0.1); }
185
+ .review-action-btn.delete { border-color: rgba(239,68,68,0.3); color: var(--error); }
186
+ .review-action-btn.delete:hover { background: rgba(239,68,68,0.1); }
187
+
188
+ /* Empty state */
189
+ .review-empty {
190
+ text-align: center;
191
+ padding: 2rem 1rem;
192
+ color: var(--text-muted);
193
+ font-size: 0.85rem;
194
+ }
195
+
196
+ /* Stats summary */
197
+ .review-stats {
198
+ padding: 0.75rem 1rem;
199
+ border-top: 1px solid var(--border);
200
+ display: flex;
201
+ justify-content: space-around;
202
+ font-size: 0.75rem;
203
+ }
204
+
205
+ .review-stat {
206
+ text-align: center;
207
+ }
208
+ .review-stat-value {
209
+ font-weight: 700;
210
+ color: var(--text-bright);
211
+ font-size: 1.1rem;
212
+ }
213
+ .review-stat-label {
214
+ color: var(--text-muted);
215
+ font-size: 0.65rem;
216
+ }
217
+
218
+ @media (max-width: 768px) {
219
+ .body.review-open {
220
+ grid-template-columns: 1fr;
221
+ }
222
+ .review-panel {
223
+ position: fixed;
224
+ right: 0;
225
+ top: var(--header-height);
226
+ z-index: 90;
227
+ box-shadow: -4px 0 20px rgba(0,0,0,0.3);
228
+ }
229
+ }