@screenbook/ui 1.0.0 → 1.1.1

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 (93) hide show
  1. package/README.md +28 -0
  2. package/dist/client/_astro/MockFormEditor.0L29BkPy.js +9 -0
  3. package/dist/client/_astro/MockFormEditor.OiYzJAtR.css +1 -0
  4. package/dist/client/_astro/{_baseUniq.BGai4mcc.js → _baseUniq.D9ouiLRJ.js} +1 -1
  5. package/dist/client/_astro/_id_.BqQf-JH6.css +1 -0
  6. package/dist/client/_astro/{arc.DUp0dfXj.js → arc.CLU0JlVT.js} +1 -1
  7. package/dist/client/_astro/{architectureDiagram-VXUJARFQ.De_Gt-YC.js → architectureDiagram-VXUJARFQ.BF0V2v9-.js} +1 -1
  8. package/dist/client/_astro/{blockDiagram-VD42YOAC.BBt_VNhR.js → blockDiagram-VD42YOAC.6LO7yu7m.js} +1 -1
  9. package/dist/client/_astro/{c4Diagram-YG6GDRKO.DfgUlHvt.js → c4Diagram-YG6GDRKO.BqntXNsZ.js} +1 -1
  10. package/dist/client/_astro/channel._8es88oH.js +1 -0
  11. package/dist/client/_astro/{chunk-4BX2VUAB.BL0ar6du.js → chunk-4BX2VUAB.b97OIY94.js} +1 -1
  12. package/dist/client/_astro/{chunk-55IACEB6.CI6SkZkY.js → chunk-55IACEB6.Cf9hglsl.js} +1 -1
  13. package/dist/client/_astro/{chunk-B4BG7PRW.Z25N80K6.js → chunk-B4BG7PRW.vDfM6vb1.js} +1 -1
  14. package/dist/client/_astro/{chunk-DI55MBZ5.BqjPVmi1.js → chunk-DI55MBZ5.8pHdnkw9.js} +1 -1
  15. package/dist/client/_astro/{chunk-FMBD7UC4.bZ9DWnFm.js → chunk-FMBD7UC4.l_Ue7ZYJ.js} +1 -1
  16. package/dist/client/_astro/{chunk-QN33PNHL.BkzuUgWB.js → chunk-QN33PNHL.CyBZ7SCx.js} +1 -1
  17. package/dist/client/_astro/{chunk-QZHKN3VN.C__d68N_.js → chunk-QZHKN3VN.BC5tI2Vw.js} +1 -1
  18. package/dist/client/_astro/{chunk-TZMSLE5B.BIpu8bMn.js → chunk-TZMSLE5B.DxkkbOL4.js} +1 -1
  19. package/dist/client/_astro/classDiagram-2ON5EDUG.DMv55r4w.js +1 -0
  20. package/dist/client/_astro/classDiagram-v2-WZHVMYZB.DMv55r4w.js +1 -0
  21. package/dist/client/_astro/client.9unXo8s5.js +33 -0
  22. package/dist/client/_astro/clone.COAvtnt5.js +1 -0
  23. package/dist/client/_astro/{cose-bilkent-S5V4N54A.D48yfMll.js → cose-bilkent-S5V4N54A.DlRxGhCG.js} +1 -1
  24. package/dist/client/_astro/coverage.DLKSOM4m.css +1 -0
  25. package/dist/client/_astro/{dagre-6UL2VRFP.LKVH7b30.js → dagre-6UL2VRFP.tCLd0f1c.js} +1 -1
  26. package/dist/client/_astro/{diagram-PSM6KHXK.AHgUjH56.js → diagram-PSM6KHXK.CJA_rnN3.js} +1 -1
  27. package/dist/client/_astro/{diagram-QEK2KX5R.DvS33xWZ.js → diagram-QEK2KX5R.BoqLvsuS.js} +1 -1
  28. package/dist/client/_astro/{diagram-S2PKOQOG.BWisaYrQ.js → diagram-S2PKOQOG.T8h5wODN.js} +1 -1
  29. package/dist/client/_astro/{erDiagram-Q2GNP2WA.B7oID6oT.js → erDiagram-Q2GNP2WA.B4hpr69H.js} +1 -1
  30. package/dist/client/_astro/{flowDiagram-NV44I4VS.Bb1qJLxr.js → flowDiagram-NV44I4VS.CV4Oenkb.js} +1 -1
  31. package/dist/client/_astro/{ganttDiagram-JELNMOA3.3vGHETyo.js → ganttDiagram-JELNMOA3.DdpXJeX3.js} +1 -1
  32. package/dist/client/_astro/{gitGraphDiagram-NY62KEGX.Co2SKcif.js → gitGraphDiagram-NY62KEGX.BeY3JZYI.js} +1 -1
  33. package/dist/client/_astro/{graph.B5fevUwB.js → graph.CO6LxWoK.js} +1 -1
  34. package/dist/client/_astro/graph.astro_astro_type_script_index_0_lang.BxaPom9e.js +1 -0
  35. package/dist/client/_astro/{impact.astro_astro_type_script_index_0_lang.D4cAR9AL.js → impact.astro_astro_type_script_index_0_lang.VjeLQGe6.js} +1 -1
  36. package/dist/client/_astro/index.WFquGv8Z.js +9 -0
  37. package/dist/client/_astro/{infoDiagram-WHAUD3N6.B6ULtps1.js → infoDiagram-WHAUD3N6.D2_J_fR6.js} +1 -1
  38. package/dist/client/_astro/{journeyDiagram-XKPGCS4Q.BSOCzWmw.js → journeyDiagram-XKPGCS4Q.7c4ngVDw.js} +1 -1
  39. package/dist/client/_astro/{kanban-definition-3W4ZIXB7.D8KKGc1o.js → kanban-definition-3W4ZIXB7.D_eWex6x.js} +1 -1
  40. package/dist/client/_astro/{layout.8vv24qEg.js → layout.Cn9EjNLq.js} +1 -1
  41. package/dist/client/_astro/{linear.B6O9ymuK.js → linear.BlE_mLsy.js} +1 -1
  42. package/dist/client/_astro/{mermaid.core.CReXU7YN.js → mermaid.core.CgCLOZ6t.js} +5 -5
  43. package/dist/client/_astro/{min.CdGMGVU0.js → min.OtQS-qlD.js} +1 -1
  44. package/dist/client/_astro/{mindmap-definition-VGOIOE7T.G14HgtDw.js → mindmap-definition-VGOIOE7T.CjNYt18e.js} +1 -1
  45. package/dist/client/_astro/{pieDiagram-ADFJNKIX.bC2VkyoW.js → pieDiagram-ADFJNKIX.D18DPyo6.js} +1 -1
  46. package/dist/client/_astro/{quadrantDiagram-AYHSOK5B.BlLaQQxO.js → quadrantDiagram-AYHSOK5B.Cma08fPv.js} +1 -1
  47. package/dist/client/_astro/{requirementDiagram-UZGBJVZJ.DHRnMofO.js → requirementDiagram-UZGBJVZJ.BlhVOrX0.js} +1 -1
  48. package/dist/client/_astro/{sankeyDiagram-TZEHDZUN.BMuaJBmt.js → sankeyDiagram-TZEHDZUN.HRsqw4ej.js} +1 -1
  49. package/dist/client/_astro/{sequenceDiagram-WL72ISMW.CnU62wqy.js → sequenceDiagram-WL72ISMW.3cZYkaSP.js} +1 -1
  50. package/dist/client/_astro/{stateDiagram-FKZM4ZOC.CewI55YO.js → stateDiagram-FKZM4ZOC.DdlRd9N7.js} +1 -1
  51. package/dist/client/_astro/stateDiagram-v2-4FDKWEC3.DCPDjwi7.js +1 -0
  52. package/dist/client/_astro/{timeline-definition-IT6M3QCI.D1PLRwss.js → timeline-definition-IT6M3QCI.BshW8mMW.js} +1 -1
  53. package/dist/client/_astro/{treemap-KMMF4GRG.D3VNVvXF.js → treemap-KMMF4GRG.BxXN_YfK.js} +1 -1
  54. package/dist/client/_astro/{xychartDiagram-PRI3JC2R.CQex0-ul.js → xychartDiagram-PRI3JC2R.Mg5_s08f.js} +1 -1
  55. package/dist/server/entry.mjs +15 -11
  56. package/dist/server/manifest_Dq3NMG4p.mjs +101 -0
  57. package/dist/server/pages/api/save-mock.astro.mjs +142 -0
  58. package/dist/server/pages/coverage.astro.mjs +1 -1
  59. package/dist/server/pages/editor.astro.mjs +30 -0
  60. package/dist/server/pages/graph.astro.mjs +18 -3
  61. package/dist/server/pages/impact.astro.mjs +1 -1
  62. package/dist/server/pages/index.astro.mjs +1 -1
  63. package/dist/server/pages/screen/_id_.astro.mjs +126 -3
  64. package/dist/server/renderers.mjs +200 -1
  65. package/package.json +12 -2
  66. package/.astro/content-assets.mjs +0 -1
  67. package/.astro/content-modules.mjs +0 -1
  68. package/.astro/content.d.ts +0 -199
  69. package/.astro/types.d.ts +0 -2
  70. package/.prettierrc +0 -15
  71. package/CHANGELOG.md +0 -66
  72. package/astro.config.mjs +0 -18
  73. package/dist/client/_astro/channel.CNyr52v1.js +0 -1
  74. package/dist/client/_astro/classDiagram-2ON5EDUG.CxT3aW-h.js +0 -1
  75. package/dist/client/_astro/classDiagram-v2-WZHVMYZB.CxT3aW-h.js +0 -1
  76. package/dist/client/_astro/clone.U_lSZ6fe.js +0 -1
  77. package/dist/client/_astro/coverage.BnE2oGo8.css +0 -1
  78. package/dist/client/_astro/graph.astro_astro_type_script_index_0_lang.B0fEnVdy.js +0 -1
  79. package/dist/client/_astro/stateDiagram-v2-4FDKWEC3.7xUQqoNr.js +0 -1
  80. package/dist/server/manifest_C21e-QyV.mjs +0 -101
  81. package/public/logo.svg +0 -5
  82. package/src/layouts/Layout.astro +0 -77
  83. package/src/pages/coverage.astro +0 -399
  84. package/src/pages/graph.astro +0 -334
  85. package/src/pages/impact.astro +0 -462
  86. package/src/pages/index.astro +0 -176
  87. package/src/pages/screen/[id].astro +0 -186
  88. package/src/styles/global.css +0 -904
  89. package/src/utils/impactAnalysis.ts +0 -304
  90. package/src/utils/loadCoverage.ts +0 -30
  91. package/src/utils/loadScreens.ts +0 -18
  92. package/tsconfig.json +0 -9
  93. /package/dist/server/chunks/{loadScreens_JhK3F9tC.mjs → loadScreens_CkCqdbH2.mjs} +0 -0
@@ -1,399 +0,0 @@
1
- ---
2
- import Layout from "@/layouts/Layout.astro"
3
- import { loadCoverage } from "@/utils/loadCoverage"
4
- import { loadScreens } from "@/utils/loadScreens"
5
-
6
- const coverage = loadCoverage()
7
- const screens = loadScreens()
8
-
9
- // Calculate color based on percentage
10
- function getPercentageColor(percentage: number): string {
11
- if (percentage >= 80) return "text-green-400"
12
- if (percentage >= 50) return "text-yellow-400"
13
- return "text-red-400"
14
- }
15
-
16
- function getPercentageBg(percentage: number): string {
17
- if (percentage >= 80) return "bg-green-500/20 border-green-500/30"
18
- if (percentage >= 50) return "bg-yellow-500/20 border-yellow-500/30"
19
- return "bg-red-500/20 border-red-500/30"
20
- }
21
- ---
22
-
23
- <Layout title="Coverage" currentPage="coverage">
24
- <div class="container">
25
- <div class="page-header">
26
- <h1 class="page-title">Coverage Dashboard</h1>
27
- <p class="page-description">
28
- Track documentation coverage across your screens.
29
- </p>
30
- </div>
31
-
32
- {!coverage ? (
33
- <div class="empty-state">
34
- <svg class="empty-state-icon" aria-hidden="true" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
35
- <path stroke-linecap="round" stroke-linejoin="round" d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z" />
36
- </svg>
37
- <h2 class="empty-state-title">No coverage data</h2>
38
- <p class="empty-state-description">
39
- Run the build command to generate coverage data.
40
- </p>
41
- <code class="empty-state-code">
42
- <span class="prompt">$</span> screenbook build
43
- </code>
44
- </div>
45
- ) : (
46
- <>
47
- {/* Main Stats */}
48
- <div class="coverage-hero">
49
- <div class={`coverage-percentage ${getPercentageBg(coverage.percentage)}`}>
50
- <span class={`percentage-value ${getPercentageColor(coverage.percentage)}`}>
51
- {coverage.percentage}%
52
- </span>
53
- <span class="percentage-label">Coverage</span>
54
- </div>
55
- <div class="coverage-stats">
56
- <div class="stat-card">
57
- <div class="stat-value">{coverage.covered}</div>
58
- <div class="stat-label">Documented</div>
59
- </div>
60
- <div class="stat-card">
61
- <div class="stat-value">{coverage.total}</div>
62
- <div class="stat-label">Total Routes</div>
63
- </div>
64
- <div class="stat-card">
65
- <div class="stat-value">{coverage.missing.length}</div>
66
- <div class="stat-label">Missing</div>
67
- </div>
68
- </div>
69
- </div>
70
-
71
- <div class="coverage-grid">
72
- {/* By Owner */}
73
- <div class="coverage-section">
74
- <h2 class="section-title">
75
- <svg aria-hidden="true" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
76
- <path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" />
77
- </svg>
78
- By Owner
79
- </h2>
80
- <div class="owner-list">
81
- {Object.entries(coverage.byOwner).map(([owner, data]) => (
82
- <div class="owner-item">
83
- <div class="owner-info">
84
- <span class="owner-name">{owner}</span>
85
- <span class="owner-count">{data.count} screen{data.count > 1 ? "s" : ""}</span>
86
- </div>
87
- <div class="owner-bar">
88
- <div
89
- class="owner-bar-fill"
90
- style={`width: ${Math.round((data.count / coverage.covered) * 100)}%`}
91
- ></div>
92
- </div>
93
- </div>
94
- ))}
95
- </div>
96
- </div>
97
-
98
- {/* By Tag */}
99
- <div class="coverage-section">
100
- <h2 class="section-title">
101
- <svg aria-hidden="true" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
102
- <path stroke-linecap="round" stroke-linejoin="round" d="M9.568 3H5.25A2.25 2.25 0 003 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 005.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 009.568 3z" />
103
- <path stroke-linecap="round" stroke-linejoin="round" d="M6 6h.008v.008H6V6z" />
104
- </svg>
105
- By Tag
106
- </h2>
107
- <div class="tags-grid">
108
- {Object.entries(coverage.byTag)
109
- .sort(([, a], [, b]) => b - a)
110
- .map(([tag, count]) => (
111
- <a href={`/?tag=${encodeURIComponent(tag)}`} class="tag-card">
112
- <span class="tag-name">{tag}</span>
113
- <span class="tag-count">{count}</span>
114
- </a>
115
- ))}
116
- </div>
117
- </div>
118
- </div>
119
-
120
- {/* Missing Routes */}
121
- {coverage.missing.length > 0 && (
122
- <div class="coverage-section missing-section">
123
- <h2 class="section-title">
124
- <svg aria-hidden="true" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
125
- <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" />
126
- </svg>
127
- Missing Documentation ({coverage.missing.length})
128
- </h2>
129
- <p class="section-description">
130
- These routes don't have a <code>screen.meta.ts</code> file yet.
131
- </p>
132
- <div class="missing-list">
133
- {coverage.missing.map((item) => (
134
- <div class="missing-item">
135
- <div class="missing-route">
136
- <svg aria-hidden="true" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
137
- <path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
138
- </svg>
139
- <span>{item.route}</span>
140
- </div>
141
- <div class="missing-action">
142
- <code class="suggested-path">{item.suggestedPath}</code>
143
- </div>
144
- </div>
145
- ))}
146
- </div>
147
- </div>
148
- )}
149
-
150
- <div class="coverage-footer">
151
- <p class="timestamp">
152
- Last updated: {new Date(coverage.timestamp).toLocaleString()}
153
- </p>
154
- </div>
155
- </>
156
- )}
157
- </div>
158
- </Layout>
159
-
160
- <style>
161
- .coverage-hero {
162
- display: flex;
163
- gap: 32px;
164
- align-items: center;
165
- margin-bottom: 48px;
166
- }
167
-
168
- .coverage-percentage {
169
- display: flex;
170
- flex-direction: column;
171
- align-items: center;
172
- justify-content: center;
173
- width: 180px;
174
- height: 180px;
175
- border-radius: 50%;
176
- border: 3px solid;
177
- flex-shrink: 0;
178
- }
179
-
180
- .percentage-value {
181
- font-size: 3.5rem;
182
- font-weight: 700;
183
- line-height: 1;
184
- }
185
-
186
- .percentage-label {
187
- font-size: var(--text-sm);
188
- color: var(--color-text-secondary);
189
- margin-top: 4px;
190
- }
191
-
192
- .coverage-stats {
193
- display: flex;
194
- gap: 24px;
195
- flex-wrap: wrap;
196
- }
197
-
198
- .stat-card {
199
- background: var(--color-surface);
200
- border: 1px solid var(--color-border);
201
- border-radius: var(--radius-lg);
202
- padding: 24px 32px;
203
- text-align: center;
204
- min-width: 120px;
205
- }
206
-
207
- .stat-value {
208
- font-size: var(--text-3xl);
209
- font-weight: 700;
210
- color: var(--color-text);
211
- }
212
-
213
- .stat-label {
214
- font-size: var(--text-sm);
215
- color: var(--color-text-muted);
216
- margin-top: 4px;
217
- }
218
-
219
- .coverage-grid {
220
- display: grid;
221
- grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
222
- gap: 32px;
223
- margin-bottom: 48px;
224
- }
225
-
226
- .coverage-section {
227
- background: var(--color-surface);
228
- border: 1px solid var(--color-border);
229
- border-radius: var(--radius-lg);
230
- padding: 24px;
231
- }
232
-
233
- .section-title {
234
- display: flex;
235
- align-items: center;
236
- gap: 10px;
237
- font-size: var(--text-lg);
238
- font-weight: 600;
239
- margin-bottom: 20px;
240
- color: var(--color-text);
241
- }
242
-
243
- .section-title svg {
244
- width: 20px;
245
- height: 20px;
246
- color: var(--color-accent);
247
- }
248
-
249
- .section-description {
250
- font-size: var(--text-sm);
251
- color: var(--color-text-muted);
252
- margin-bottom: 16px;
253
- }
254
-
255
- .owner-list {
256
- display: flex;
257
- flex-direction: column;
258
- gap: 16px;
259
- }
260
-
261
- .owner-item {
262
- display: flex;
263
- flex-direction: column;
264
- gap: 8px;
265
- }
266
-
267
- .owner-info {
268
- display: flex;
269
- justify-content: space-between;
270
- align-items: center;
271
- }
272
-
273
- .owner-name {
274
- font-size: var(--text-sm);
275
- font-weight: 500;
276
- color: var(--color-text);
277
- }
278
-
279
- .owner-count {
280
- font-size: var(--text-xs);
281
- color: var(--color-text-muted);
282
- }
283
-
284
- .owner-bar {
285
- height: 8px;
286
- background: var(--color-bg-muted);
287
- border-radius: 4px;
288
- overflow: hidden;
289
- }
290
-
291
- .owner-bar-fill {
292
- height: 100%;
293
- background: var(--color-accent);
294
- border-radius: 4px;
295
- transition: width 0.3s ease;
296
- }
297
-
298
- .tags-grid {
299
- display: flex;
300
- flex-wrap: wrap;
301
- gap: 8px;
302
- }
303
-
304
- .tag-card {
305
- display: flex;
306
- align-items: center;
307
- gap: 8px;
308
- padding: 8px 12px;
309
- background: var(--color-bg-muted);
310
- border-radius: var(--radius-md);
311
- text-decoration: none;
312
- transition: background 0.15s ease;
313
- }
314
-
315
- .tag-card:hover {
316
- background: var(--color-surface-hover);
317
- }
318
-
319
- .tag-name {
320
- font-size: var(--text-sm);
321
- color: var(--color-text);
322
- }
323
-
324
- .tag-count {
325
- font-size: var(--text-xs);
326
- color: var(--color-accent);
327
- font-weight: 600;
328
- background: var(--color-accent-bg);
329
- padding: 2px 6px;
330
- border-radius: 4px;
331
- }
332
-
333
- .missing-section {
334
- grid-column: 1 / -1;
335
- }
336
-
337
- .missing-list {
338
- display: flex;
339
- flex-direction: column;
340
- gap: 12px;
341
- }
342
-
343
- .missing-item {
344
- display: flex;
345
- justify-content: space-between;
346
- align-items: center;
347
- padding: 12px 16px;
348
- background: var(--color-bg-muted);
349
- border-radius: var(--radius-md);
350
- border-left: 3px solid var(--color-warning);
351
- }
352
-
353
- .missing-route {
354
- display: flex;
355
- align-items: center;
356
- gap: 10px;
357
- font-size: var(--text-sm);
358
- color: var(--color-text);
359
- }
360
-
361
- .missing-route svg {
362
- width: 16px;
363
- height: 16px;
364
- color: var(--color-text-muted);
365
- }
366
-
367
- .suggested-path {
368
- font-size: var(--text-xs);
369
- color: var(--color-text-muted);
370
- }
371
-
372
- .coverage-footer {
373
- text-align: center;
374
- padding-top: 24px;
375
- border-top: 1px solid var(--color-border);
376
- }
377
-
378
- .timestamp {
379
- font-size: var(--text-xs);
380
- color: var(--color-text-muted);
381
- }
382
-
383
- @media (max-width: 768px) {
384
- .coverage-hero {
385
- flex-direction: column;
386
- text-align: center;
387
- }
388
-
389
- .coverage-stats {
390
- justify-content: center;
391
- }
392
-
393
- .missing-item {
394
- flex-direction: column;
395
- align-items: flex-start;
396
- gap: 8px;
397
- }
398
- }
399
- </style>