agent-reader 1.0.0 → 1.0.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.
package/README.md CHANGED
@@ -93,7 +93,6 @@ agent-reader render 你的文件.md
93
93
  ```bash
94
94
  agent-reader render 你的文件.md --theme light # 亮色(默认)
95
95
  agent-reader render 你的文件.md --theme dark # 暗色
96
- agent-reader render 你的文件.md --theme print # 打印友好
97
96
  ```
98
97
 
99
98
  ### 导出 Word
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-reader",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "AI Agent 的文档美化引擎 — 一键把 Markdown 变成漂亮网页、Word、PDF 和幻灯片",
5
5
  "main": "index.js",
6
6
  "directories": {
@@ -13,7 +13,8 @@ const THEME_DIR = path.join(__dirname, 'themes');
13
13
  const TEMPLATE_PATH = path.resolve(__dirname, '../templates/document.html');
14
14
 
15
15
  const GITHUB_MARKDOWN_CSS_PATH = require.resolve('github-markdown-css/github-markdown.css');
16
- const HIGHLIGHT_CSS_PATH = require.resolve('highlight.js/styles/github.css');
16
+ const HIGHLIGHT_CSS_LIGHT = require.resolve('highlight.js/styles/github.css');
17
+ const HIGHLIGHT_CSS_DARK = require.resolve('highlight.js/styles/github-dark.css');
17
18
 
18
19
  const TOC_BASE_CSS = `
19
20
  .markdown-body :is(h1, h2, h3, h4, h5, h6) {
@@ -165,18 +166,18 @@ async function loadStyles(theme) {
165
166
  const builtInThemePath =
166
167
  themeName === 'dark'
167
168
  ? path.join(THEME_DIR, 'dark.css')
168
- : themeName === 'print'
169
- ? path.join(THEME_DIR, 'print.css')
170
- : path.join(THEME_DIR, 'light.css');
169
+ : path.join(THEME_DIR, 'light.css');
171
170
  const customThemePath =
172
- themeName === 'light' || themeName === 'dark' || themeName === 'print'
171
+ themeName === 'light' || themeName === 'dark'
173
172
  ? null
174
173
  : path.resolve(themeName);
175
174
 
175
+ const highlightCssPath = themeName === 'dark' ? HIGHLIGHT_CSS_DARK : HIGHLIGHT_CSS_LIGHT;
176
+
176
177
  const [builtInTheme, githubCss, highlightCss, customTheme = ''] = await Promise.all([
177
178
  fs.readFile(builtInThemePath, 'utf8'),
178
179
  fs.readFile(GITHUB_MARKDOWN_CSS_PATH, 'utf8'),
179
- fs.readFile(HIGHLIGHT_CSS_PATH, 'utf8'),
180
+ fs.readFile(highlightCssPath, 'utf8'),
180
181
  customThemePath ? fs.readFile(customThemePath, 'utf8') : Promise.resolve(''),
181
182
  ]);
182
183
 
@@ -1,256 +1,396 @@
1
+ /* ================= Dark Theme — GitHub/Notion/Vercel 风格 ================= */
1
2
  :root {
2
- color-scheme: dark;
3
- --bg: #0a1323;
4
- --text: #dbe5f3;
5
- --text-muted: #afbdd3;
6
- --card: #0f1d33;
7
- --border: #263852;
8
- --heading: #f5f8ff;
9
- --link: #88c7ff;
10
- --link-hover: #b6dcff;
11
- --code-bg: #1c2f4c;
12
- --code-text: #dbe7ff;
13
- --blockquote-bg: rgba(33, 50, 76, 0.68);
14
- --blockquote-border: #5f84bd;
15
- --table-head: #1d2d46;
16
- --table-stripe: rgba(255, 255, 255, 0.02);
17
- --toc-card-bg: rgba(14, 27, 46, 0.92);
18
- --toc-border: #2a3f5f;
19
- --toc-shadow: 0 26px 50px -34px rgba(1, 6, 16, 0.88);
20
- --toc-hover-bg: rgba(136, 199, 255, 0.13);
21
- --toc-active-bg: rgba(136, 199, 255, 0.2);
22
- --toc-active-border: #7ec2ff;
23
- --toc-active-text: #cde8ff;
24
- --toc-header-text: #f2f7ff;
25
- --toc-muted: rgba(210, 226, 248, 0.72);
26
- --toc-toggle-bg: rgba(11, 22, 38, 0.84);
27
- --toc-toggle-hover-bg: rgba(16, 33, 56, 0.95);
28
- --toc-toggle-border: #324966;
29
- --toc-toggle-text: #d6e5fa;
30
- }
31
-
32
- html,
33
- body {
34
- margin: 0;
35
- padding: 0;
36
- min-height: 100%;
3
+ color-scheme: dark;
4
+ --bg-color: #0d1117;
5
+ --sidebar-bg: #161b22;
6
+ --text-main: #c9d1d9;
7
+ --text-muted: #8b949e;
8
+ --heading-color: #f0f6fc;
9
+ --border-color: #30363d;
10
+ --border-subtle: rgba(255, 255, 255, 0.08);
11
+ --accent-color: #7c8aff;
12
+ --hover-bg: rgba(255, 255, 255, 0.06);
37
13
  }
38
14
 
39
15
  body {
40
- background:
41
- radial-gradient(circle at 0% 0%, rgba(13, 110, 189, 0.22), transparent 34%),
42
- radial-gradient(circle at 88% 2%, rgba(14, 165, 233, 0.12), transparent 36%),
43
- linear-gradient(180deg, #081221 0%, #0a1528 46%, #0b182c 100%);
44
- color: var(--text);
45
- font-family: "Source Han Serif SC", "Noto Serif SC", "Songti SC", "STSong", Georgia, serif;
46
- font-size: 18px;
47
- line-height: 1.82;
48
- text-rendering: optimizeLegibility;
16
+ margin: 0;
17
+ padding: 0;
18
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "PingFang SC", "Helvetica Neue", Arial, sans-serif;
19
+ color: var(--text-main);
20
+ background-color: var(--bg-color);
21
+ display: flex;
22
+ height: 100vh;
23
+ overflow: hidden;
24
+ -webkit-font-smoothing: antialiased;
49
25
  }
50
26
 
51
- .page {
52
- max-width: 1360px;
53
- margin: 0 auto;
54
- padding: 32px 24px 72px;
55
- box-sizing: border-box;
27
+ /* ================= 侧边栏 ================= */
28
+ #sidebar {
29
+ width: 280px;
30
+ background-color: var(--sidebar-bg);
31
+ border-right: 1px solid var(--border-subtle);
32
+ display: flex;
33
+ flex-direction: column;
34
+ transition: margin-left 0.3s ease;
56
35
  }
57
36
 
58
- .doc-panel {
59
- min-width: 0;
37
+ #sidebar.hidden {
38
+ margin-left: -280px;
39
+ }
40
+
41
+ #main-content {
42
+ flex: 1;
43
+ overflow-y: auto;
44
+ scroll-behavior: smooth;
45
+ position: relative;
46
+ background-color: var(--bg-color);
60
47
  }
61
48
 
62
- .markdown-body {
63
- background: linear-gradient(180deg, #12233d 0%, #0f1d33 100%);
64
- border: 1px solid var(--border);
65
- border-radius: 24px;
66
- padding: 46px 56px 52px;
67
- box-sizing: border-box;
68
- color: var(--text);
69
- box-shadow: 0 30px 62px -50px rgba(1, 6, 16, 0.9);
70
- overflow-wrap: anywhere;
49
+ /* ================= 工具栏 ================= */
50
+ .doc-toolbar {
51
+ position: sticky;
52
+ top: 0;
53
+ background: rgba(13, 17, 23, 0.85);
54
+ backdrop-filter: blur(12px);
55
+ -webkit-backdrop-filter: blur(12px);
56
+ padding: 16px 40px;
57
+ display: flex;
58
+ justify-content: space-between;
59
+ align-items: center;
60
+ border-bottom: 1px solid var(--border-subtle);
61
+ z-index: 100;
62
+ }
63
+
64
+ .toolbar-right {
65
+ display: flex;
66
+ gap: 12px;
67
+ }
68
+
69
+ .action-btn {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 6px;
73
+ padding: 8px 16px;
74
+ border-radius: 8px;
75
+ border: 1px solid rgba(255, 255, 255, 0.1);
76
+ background: rgba(255, 255, 255, 0.05);
77
+ color: var(--text-main);
78
+ font-size: 14px;
79
+ font-weight: 500;
80
+ cursor: pointer;
81
+ transition: all 0.2s;
82
+ }
83
+
84
+ .action-btn:hover {
85
+ background: rgba(255, 255, 255, 0.1);
86
+ color: #f0f6fc;
87
+ transform: translateY(-1px);
88
+ }
89
+
90
+ .action-btn.primary {
91
+ color: var(--accent-color);
92
+ border-color: rgba(124, 138, 255, 0.25);
93
+ background: rgba(124, 138, 255, 0.08);
94
+ }
95
+
96
+ .action-btn.primary:hover {
97
+ background: rgba(124, 138, 255, 0.15);
98
+ color: #a5b4ff;
99
+ }
100
+
101
+ /* ================= 侧边栏内容 ================= */
102
+ .sidebar-header {
103
+ padding: 24px 20px 12px;
104
+ font-weight: 600;
105
+ font-size: 14px;
106
+ color: var(--text-muted);
107
+ }
108
+
109
+ .logo {
110
+ font-weight: 600;
111
+ font-size: 14px;
112
+ color: var(--text-muted);
71
113
  }
72
114
 
73
- .markdown-body > :first-child {
74
- margin-top: 0 !important;
115
+ #toc-container {
116
+ padding: 0 12px 24px;
117
+ overflow-y: auto;
118
+ flex: 1;
75
119
  }
76
120
 
77
- .markdown-body > :last-child {
78
- margin-bottom: 0 !important;
121
+ #toc-container ul {
122
+ list-style: none;
123
+ padding-left: 0;
124
+ margin: 0;
79
125
  }
80
126
 
81
- .markdown-body :is(h1, h2, h3, h4, h5, h6) {
82
- font-family: "Source Han Sans SC", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
83
- color: var(--heading);
84
- letter-spacing: 0.01em;
85
- line-height: 1.32;
86
- margin-top: 1.7em;
87
- margin-bottom: 0.62em;
127
+ #toc-container li {
128
+ margin: 4px 0;
129
+ position: relative;
130
+ }
131
+
132
+ #toc-container a {
133
+ display: block;
134
+ padding: 6px 12px;
135
+ color: var(--text-muted);
136
+ text-decoration: none;
137
+ font-size: 14px;
138
+ border-radius: 6px;
139
+ line-height: 1.5;
140
+ transition: color 0.2s, background 0.2s;
141
+ }
142
+
143
+ #toc-container a:hover {
144
+ background-color: var(--hover-bg);
145
+ color: #f0f6fc;
146
+ }
147
+
148
+ #toc-container ul ul {
149
+ padding-left: 16px;
150
+ }
151
+
152
+ .toc-toggle-arrow {
153
+ position: absolute;
154
+ left: -10px;
155
+ top: 8px;
156
+ cursor: pointer;
157
+ font-size: 10px;
158
+ color: var(--text-muted);
159
+ user-select: none;
160
+ padding: 2px;
161
+ }
162
+
163
+ #toc-container li.has-children.collapsed > ul {
164
+ display: none;
165
+ }
166
+
167
+ /* ================= 内容区(覆盖 github-markdown-css) ================= */
168
+ .markdown-body {
169
+ max-width: 700px;
170
+ margin: 0 auto;
171
+ padding: 40px 0 100px;
172
+ line-height: 1.8;
173
+ font-size: 16px;
174
+ color: var(--text-main) !important;
175
+ background-color: transparent !important;
176
+ text-align: justify;
177
+ word-break: break-word;
88
178
  }
89
179
 
90
180
  .markdown-body h1 {
91
- font-size: clamp(2rem, 1.35rem + 1.7vw, 2.5rem);
92
- border-bottom: 1px solid var(--border);
93
- padding-bottom: 0.34em;
94
- margin-top: 0.2em;
181
+ font-size: 2.4em;
182
+ font-weight: 800;
183
+ margin-bottom: 1.5em;
184
+ letter-spacing: -0.03em;
185
+ color: var(--heading-color) !important;
186
+ line-height: 1.3;
187
+ text-align: left;
188
+ word-break: keep-all;
189
+ border-bottom: 1px solid var(--border-color) !important;
190
+ padding-bottom: 0.3em;
95
191
  }
96
192
 
97
193
  .markdown-body h2 {
98
- font-size: clamp(1.45rem, 1.2rem + 0.9vw, 1.9rem);
99
- border-bottom: 1px solid color-mix(in srgb, var(--border) 86%, transparent);
100
- padding-bottom: 0.24em;
194
+ font-size: 1.6em;
195
+ font-weight: 700;
196
+ margin-top: 2.2em;
197
+ margin-bottom: 0.8em;
198
+ border-bottom: none !important;
199
+ color: var(--heading-color) !important;
200
+ text-align: left;
101
201
  }
102
202
 
103
203
  .markdown-body h3 {
104
- font-size: clamp(1.2rem, 1.1rem + 0.45vw, 1.46rem);
204
+ font-size: 1.3em;
205
+ font-weight: 600;
206
+ margin-top: 1.8em;
207
+ color: #e0e6ed !important;
208
+ text-align: left;
105
209
  }
106
210
 
107
211
  .markdown-body h4,
108
212
  .markdown-body h5,
109
213
  .markdown-body h6 {
110
- font-size: 1.05rem;
214
+ color: #c9d1d9 !important;
111
215
  }
112
216
 
113
- .markdown-body p,
114
- .markdown-body li,
115
- .markdown-body td,
116
- .markdown-body th,
117
- .markdown-body dd,
118
- .markdown-body dt {
119
- color: var(--text);
120
- font-size: 1.02rem;
217
+ .markdown-body p {
218
+ margin-bottom: 1.2em;
121
219
  }
122
220
 
123
- .markdown-body p {
124
- margin: 0.74em 0;
221
+ .markdown-body strong {
222
+ font-weight: 600;
223
+ color: var(--heading-color) !important;
125
224
  }
126
225
 
127
- .markdown-body a {
128
- color: var(--link);
129
- text-decoration-thickness: 0.08em;
130
- text-underline-offset: 0.18em;
226
+ .markdown-body mark {
227
+ background-color: rgba(124, 138, 255, 0.15);
228
+ padding: 0.2em 0.4em;
229
+ border-radius: 4px;
230
+ font-weight: 500;
231
+ color: var(--heading-color);
131
232
  }
132
233
 
133
- .markdown-body a:hover {
134
- color: var(--link-hover);
234
+ /* ================= 引用块 ================= */
235
+ .markdown-body blockquote {
236
+ margin: 2em 0;
237
+ padding: 20px 24px;
238
+ background: rgba(255, 255, 255, 0.03) !important;
239
+ border-left: 3px solid var(--border-color) !important;
240
+ border-radius: 0 8px 8px 0;
241
+ color: var(--text-muted) !important;
242
+ font-size: 1.05em;
135
243
  }
136
244
 
137
- .markdown-body ul,
138
- .markdown-body ol {
139
- margin: 0.75em 0 1em;
140
- padding-left: 1.5em;
245
+ .markdown-body blockquote p:last-child {
246
+ margin-bottom: 0;
141
247
  }
142
248
 
143
- .markdown-body li {
144
- margin: 0.35em 0;
249
+ .markdown-body blockquote strong {
250
+ color: var(--text-main) !important;
145
251
  }
146
252
 
147
- .markdown-body blockquote {
148
- margin: 1.1em 0;
149
- border-left: 4px solid var(--blockquote-border);
150
- background: var(--blockquote-bg);
151
- color: var(--text-muted);
152
- padding: 0.85em 1em;
153
- border-radius: 0 10px 10px 0;
253
+ /* ================= 代码块 ================= */
254
+ .markdown-body pre {
255
+ background-color: #161b22 !important;
256
+ border-radius: 8px;
257
+ padding: 20px;
258
+ overflow-x: auto;
259
+ border: 1px solid rgba(255, 255, 255, 0.05) !important;
154
260
  }
155
261
 
156
262
  .markdown-body code {
157
- background: var(--code-bg);
158
- color: var(--code-text);
159
- border-radius: 6px;
160
- padding: 0.14em 0.4em;
161
- font-size: 0.9em;
263
+ font-family: "SFMono-Regular", Menlo, monospace;
264
+ font-size: 0.85em;
265
+ background-color: rgba(255, 255, 255, 0.06) !important;
266
+ padding: 0.2em 0.4em;
267
+ border-radius: 4px;
268
+ color: #79c0ff !important;
162
269
  }
163
270
 
164
- .markdown-body pre {
165
- margin: 1.05em 0;
166
- border-radius: 14px;
167
- padding: 16px 18px;
168
- overflow: auto;
169
- border: 1px solid #31496d;
170
- background: #081324;
171
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
271
+ .markdown-body pre code {
272
+ background-color: transparent !important;
273
+ padding: 0;
274
+ color: #c9d1d9 !important;
172
275
  }
173
276
 
174
- .markdown-body pre code {
175
- background: transparent;
176
- color: #dbe7ff;
177
- padding: 0;
178
- border-radius: 0;
277
+ /* ================= 链接 ================= */
278
+ .markdown-body a {
279
+ color: #58a6ff !important;
280
+ text-decoration-thickness: 0.08em;
281
+ text-underline-offset: 0.18em;
179
282
  }
180
283
 
181
- .markdown-body table {
182
- width: 100%;
183
- margin: 1.15em 0;
184
- border-collapse: separate;
185
- border-spacing: 0;
186
- border: 1px solid var(--border);
187
- border-radius: 12px;
188
- overflow: hidden;
284
+ .markdown-body a:hover {
285
+ color: #79c0ff !important;
189
286
  }
190
287
 
191
- .markdown-body table th,
192
- .markdown-body table td {
193
- border: 0;
194
- border-bottom: 1px solid var(--border);
195
- border-right: 1px solid var(--border);
196
- padding: 0.7em 0.78em;
288
+ /* ================= 列表 ================= */
289
+ .markdown-body ul,
290
+ .markdown-body ol {
291
+ margin: 0.75em 0 1em;
292
+ padding-left: 1.5em;
197
293
  }
198
294
 
199
- .markdown-body table th:last-child,
200
- .markdown-body table td:last-child {
201
- border-right: 0;
295
+ .markdown-body li {
296
+ margin: 0.35em 0;
202
297
  }
203
298
 
204
- .markdown-body table tr:last-child td {
205
- border-bottom: 0;
299
+ /* ================= 表格 ================= */
300
+ .markdown-body table {
301
+ display: table !important;
302
+ width: 100% !important;
303
+ border-collapse: separate;
304
+ border-spacing: 0;
305
+ margin: 2.5em 0;
306
+ border-radius: 8px;
307
+ overflow: hidden;
308
+ border: 1px solid var(--border-color) !important;
206
309
  }
207
310
 
208
- .markdown-body table th {
209
- background: var(--table-head);
210
- color: var(--heading);
211
- font-family: "Source Han Sans SC", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
212
- font-size: 0.95rem;
311
+ .markdown-body thead tr,
312
+ .markdown-body tbody tr,
313
+ .markdown-body tr {
314
+ background-color: transparent !important;
213
315
  }
214
316
 
215
- .markdown-body table tr:nth-child(2n) td {
216
- background: var(--table-stripe);
317
+ .markdown-body th,
318
+ .markdown-body td {
319
+ padding: 12px 16px;
320
+ border-bottom: 1px solid var(--border-color) !important;
321
+ border-right: 1px solid var(--border-color) !important;
322
+ font-size: 0.95em;
323
+ text-align: left;
324
+ word-break: normal;
325
+ white-space: normal;
326
+ color: var(--text-main) !important;
327
+ background-color: var(--bg-color) !important;
217
328
  }
218
329
 
219
- .markdown-body hr {
220
- height: 1px;
221
- border: 0;
222
- background: color-mix(in srgb, var(--border) 82%, transparent);
223
- margin: 1.8em 0;
330
+ .markdown-body th {
331
+ background: var(--sidebar-bg) !important;
332
+ font-weight: 600;
333
+ color: var(--heading-color) !important;
334
+ text-align: center;
224
335
  }
225
336
 
226
- .markdown-body img {
227
- display: block;
228
- max-width: 100%;
229
- height: auto;
230
- margin: 1.1em auto;
231
- border-radius: 14px;
232
- border: 1px solid color-mix(in srgb, var(--border) 92%, transparent);
233
- box-shadow: 0 12px 24px -22px rgba(0, 0, 0, 0.85);
337
+ .markdown-body th:last-child,
338
+ .markdown-body td:last-child {
339
+ border-right: none !important;
234
340
  }
235
341
 
236
- @media (max-width: 1120px) {
237
- .page {
238
- padding: 74px 14px 38px;
239
- }
342
+ .markdown-body tr:last-child td {
343
+ border-bottom: none !important;
344
+ }
240
345
 
241
- .markdown-body {
242
- padding: 34px 24px 38px;
243
- border-radius: 18px;
244
- }
346
+ .markdown-body tr:nth-child(2n) td,
347
+ .markdown-body tr:nth-child(even) td {
348
+ background: rgba(255, 255, 255, 0.03) !important;
245
349
  }
246
350
 
247
- @media (max-width: 720px) {
248
- body {
249
- font-size: 16px;
250
- line-height: 1.75;
251
- }
351
+ .markdown-body tr:nth-child(odd) td {
352
+ background-color: var(--bg-color) !important;
353
+ }
354
+
355
+ .markdown-body tbody tr:hover td {
356
+ background: rgba(255, 255, 255, 0.06) !important;
357
+ }
252
358
 
253
- .markdown-body {
254
- padding: 28px 18px 30px;
255
- }
359
+ /* ================= 分割线 & 图片 ================= */
360
+ .markdown-body hr {
361
+ height: 1px;
362
+ border: 0;
363
+ background: var(--border-color) !important;
364
+ margin: 1.8em 0;
365
+ }
366
+
367
+ .markdown-body img {
368
+ display: block;
369
+ max-width: 100%;
370
+ height: auto;
371
+ margin: 1.1em auto;
372
+ border-radius: 8px;
373
+ border: 1px solid var(--border-color);
374
+ }
375
+
376
+ /* ================= 目录层级 ================= */
377
+ #toc-container > ul > li > a {
378
+ font-weight: 600;
379
+ color: #e0e6ed;
380
+ font-size: 14.5px;
381
+ margin-top: 8px;
382
+ padding-top: 8px;
383
+ padding-bottom: 8px;
384
+ }
385
+
386
+ #toc-container > ul > li > a:hover {
387
+ background-color: var(--hover-bg);
388
+ }
389
+
390
+ #toc-container ul ul a {
391
+ font-weight: 400;
392
+ color: var(--text-muted);
393
+ font-size: 13.5px;
394
+ padding-top: 4px;
395
+ padding-bottom: 4px;
256
396
  }
@@ -1,54 +0,0 @@
1
- :root {
2
- color-scheme: light;
3
- }
4
-
5
- html,
6
- body {
7
- margin: 0;
8
- padding: 0;
9
- color: #111;
10
- background: #fff;
11
- font-family: "Noto Serif SC", "Songti SC", "SimSun", Georgia, serif;
12
- }
13
-
14
- .page {
15
- max-width: 100%;
16
- margin: 0;
17
- padding: 0;
18
- }
19
-
20
- .markdown-body {
21
- border: none;
22
- border-radius: 0;
23
- padding: 0;
24
- box-shadow: none;
25
- }
26
-
27
- .markdown-body pre,
28
- .markdown-body code {
29
- background: #f5f5f5;
30
- color: #1f2937;
31
- }
32
-
33
- @media print {
34
- #sidebar,
35
- .doc-toolbar {
36
- display: none !important;
37
- }
38
-
39
- body {
40
- display: block !important;
41
- height: auto !important;
42
- overflow: visible !important;
43
- }
44
-
45
- #content-wrapper {
46
- padding: 0 !important;
47
- overflow: visible !important;
48
- }
49
-
50
- .doc-inner {
51
- max-width: none !important;
52
- padding: 0 !important;
53
- }
54
- }