@janga/norna 0.7.22 → 0.7.24

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 (88) hide show
  1. package/README.md +14 -18
  2. package/astro.config.mjs +15 -0
  3. package/bin/norna-cli.mjs +8 -2
  4. package/package.json +28 -3
  5. package/schemas/category.schema.json +2 -2
  6. package/schemas/config.schema.json +52 -24
  7. package/schemas/content-frontmatter.schema.json +25 -5
  8. package/schemas/page-theme.schema.json +53 -25
  9. package/schemas/sitewide-content.schema.json +19 -18
  10. package/schemas/theme.schema.json +385 -252
  11. package/scripts/build-site.mjs +1 -0
  12. package/scripts/check-config.mjs +36 -5
  13. package/scripts/deploy-site.mjs +0 -1
  14. package/scripts/dev-local.mjs +175 -112
  15. package/scripts/generate-search-index.mjs +57 -0
  16. package/scripts/init-site.mjs +1 -0
  17. package/scripts/lib/code-fence-metadata.mjs +223 -0
  18. package/scripts/lib/content-sync-apply.mjs +34 -0
  19. package/scripts/lib/content-sync-plan.mjs +179 -0
  20. package/scripts/lib/edit-source-link.mjs +49 -0
  21. package/scripts/lib/editor-language-service.mjs +160 -12
  22. package/scripts/lib/heading-ids.mjs +1 -1
  23. package/scripts/lib/image-presentation.mjs +6 -0
  24. package/scripts/lib/markdown-links.mjs +182 -0
  25. package/scripts/lib/navigation-model.mjs +44 -12
  26. package/scripts/lib/navigation-review.mjs +396 -0
  27. package/scripts/lib/norna-markdown-blocks.mjs +74 -26
  28. package/scripts/lib/norna-markdown-render-plugin.mjs +64 -1
  29. package/scripts/lib/page-aliases.mjs +184 -0
  30. package/scripts/lib/page-markdown.mjs +88 -7
  31. package/scripts/lib/page-move-plan.mjs +659 -0
  32. package/scripts/lib/presentation-palette-metadata.mjs +1 -1
  33. package/scripts/lib/presentation.mjs +10 -37
  34. package/scripts/lib/project-config.mjs +146 -19
  35. package/scripts/lib/public-asset-conventions.mjs +36 -2
  36. package/scripts/lib/schema-definitions.mjs +43 -15
  37. package/scripts/lib/schema-editor-metadata.mjs +60 -32
  38. package/scripts/lib/schema-value-definitions.mjs +6 -2
  39. package/scripts/lib/semantic-callouts.mjs +128 -0
  40. package/scripts/lib/site-content.mjs +28 -5
  41. package/scripts/lib/site-link-graph.mjs +357 -0
  42. package/scripts/lib/site-navigation-tree.mjs +85 -0
  43. package/scripts/lib/site-page-urls.mjs +10 -0
  44. package/scripts/lib/sitemap.mjs +34 -0
  45. package/scripts/lib/social-image-assets.mjs +30 -0
  46. package/scripts/lib/theme-presets.mjs +53 -25
  47. package/scripts/lib/theme-profiles.mjs +6 -8
  48. package/scripts/lib/yaml-config.mjs +6 -2
  49. package/scripts/move-site-page.mjs +256 -0
  50. package/scripts/review-navigation.mjs +32 -0
  51. package/scripts/sync-content-sections.mjs +182 -216
  52. package/scripts/sync-site-public.mjs +43 -3
  53. package/src/components/CodeBlockCopyScript.astro +97 -0
  54. package/src/components/DisplaySettings.astro +4 -4
  55. package/src/components/EditSourceLink.astro +17 -0
  56. package/src/components/ImageCarousel.astro +6 -3
  57. package/src/components/NavigationPageTree.astro +81 -86
  58. package/src/components/NavigationTreeControls.astro +77 -0
  59. package/src/components/PageAliasRedirect.astro +49 -0
  60. package/src/components/PageContentsNavigation.astro +21 -0
  61. package/src/components/PageList.astro +33 -0
  62. package/src/components/PageSequenceNavigation.astro +37 -0
  63. package/src/components/SearchPage.astro +151 -0
  64. package/src/components/SectionNavigationScript.astro +62 -6
  65. package/src/components/SiteNavigation.astro +50 -11
  66. package/src/components/SitePage.astro +113 -20
  67. package/src/components/SiteSection.astro +16 -3
  68. package/src/components/SiteTreeNavigation.astro +8 -2
  69. package/src/components/TreeNavigationScript.astro +207 -26
  70. package/src/content.config.ts +5 -2
  71. package/src/layouts/BaseLayout.astro +71 -10
  72. package/src/lib/readerPreferencesScript.mjs +2 -2
  73. package/src/lib/sectionContent.ts +32 -3
  74. package/src/lib/siteNavigation.ts +31 -52
  75. package/src/lib/sitePages.ts +3 -2
  76. package/src/lib/sitePublicAssets.ts +1 -0
  77. package/src/pages/404.astro +110 -0
  78. package/src/pages/[...slug].astro +45 -8
  79. package/src/styles/content.css +718 -0
  80. package/src/styles/foundations.css +284 -0
  81. package/src/styles/global.css +6 -2510
  82. package/src/styles/media.css +518 -0
  83. package/src/styles/navigation.css +526 -0
  84. package/src/styles/page-layout.css +786 -0
  85. package/src/styles/responsive.css +594 -0
  86. package/starters/basic/README.md +6 -19
  87. package/starters/basic/package.json +1 -0
  88. package/starters/basic/site/pages/000-home/content.md +13 -50
@@ -0,0 +1,518 @@
1
+ /* Cards, managed images, captions, and carousels. */
2
+
3
+ .card-list {
4
+ display: grid;
5
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
6
+ gap: var(--card-list-gap, clamp(0.9rem, 2vw, 1.25rem));
7
+ width: var(--layout-card-list-width);
8
+ margin-block: 0;
9
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
10
+ text-align: left;
11
+ --card-list-width: min(56rem, var(--page-width));
12
+ --layout-card-list-width: min(100%, var(--card-list-width));
13
+ --card-list-gap: clamp(0.9rem, 2vw, 1.25rem);
14
+ --card-list-item-gap: 0.85rem;
15
+ --card-list-padding: clamp(0.9rem, 2vw, 1.15rem);
16
+ --card-list-media-width: 32%;
17
+ --card-list-media-min-width: 7rem;
18
+ --card-list-top-media-width: 20rem;
19
+ --card-list-title-scale: 1;
20
+ --card-list-text-scale: 1;
21
+ }
22
+
23
+ .section-body > .section-markdown:not(:last-child),
24
+ .section-body > :is(.image-stack, .managed-images):not(:last-child) {
25
+ margin-bottom: var(--space-content-block-gap);
26
+ }
27
+
28
+ .section-body > :is(.image-stack, .managed-images, .card-list) {
29
+ clear: both;
30
+ }
31
+
32
+ .section-body > .card-list:not(:last-child) {
33
+ margin-bottom: calc(var(--space-content-block-gap) + var(--space-card-list-after));
34
+ }
35
+
36
+ .section-body > .card-list:last-child {
37
+ margin-bottom: var(--space-card-list-after);
38
+ }
39
+
40
+ .card-list-width-text {
41
+ --card-list-width: var(--reader-text-width, var(--text-width));
42
+ }
43
+
44
+ .card-list-width-narrow {
45
+ --card-list-width: min(48rem, var(--page-width));
46
+ }
47
+
48
+ .card-list-width-wide {
49
+ --card-list-width: var(--page-width);
50
+ }
51
+
52
+ .card-list-size-s {
53
+ --card-list-gap: 0.75rem;
54
+ --card-list-item-gap: 0.65rem;
55
+ --card-list-padding: 0.8rem;
56
+ --card-list-media-width: 26%;
57
+ --card-list-media-min-width: 5.5rem;
58
+ --card-list-top-media-width: 14rem;
59
+ --card-list-title-scale: 0.92;
60
+ --card-list-text-scale: 0.92;
61
+ }
62
+
63
+ .card-list-size-l {
64
+ --card-list-gap: clamp(1rem, 2.4vw, 1.5rem);
65
+ --card-list-item-gap: 1rem;
66
+ --card-list-padding: clamp(1.1rem, 2.4vw, 1.45rem);
67
+ --card-list-media-width: 36%;
68
+ --card-list-media-min-width: 8.5rem;
69
+ --card-list-top-media-width: 24rem;
70
+ --card-list-title-scale: 1.08;
71
+ --card-list-text-scale: 1.02;
72
+ }
73
+
74
+ .card-list-size-xl {
75
+ --card-list-gap: clamp(1.15rem, 2.8vw, 1.8rem);
76
+ --card-list-item-gap: 1.1rem;
77
+ --card-list-padding: clamp(1.25rem, 3vw, 1.75rem);
78
+ --card-list-media-width: 40%;
79
+ --card-list-media-min-width: 10rem;
80
+ --card-list-top-media-width: 28rem;
81
+ --card-list-title-scale: 1.18;
82
+ --card-list-text-scale: 1.06;
83
+ }
84
+
85
+ .card-list-flow-stack {
86
+ grid-template-columns: 1fr;
87
+ }
88
+
89
+ .card-list-item {
90
+ display: grid;
91
+ gap: var(--card-list-item-gap);
92
+ align-content: start;
93
+ margin: 0;
94
+ border: 1px solid color-mix(in srgb, currentColor 18%, transparent);
95
+ border-radius: var(--corner-radius-large, 8px);
96
+ padding: var(--card-list-padding);
97
+ background: var(--color-surface);
98
+ color: inherit;
99
+ }
100
+
101
+ .card-list-layout-image-left .card-list-item-has-image,
102
+ .card-list-layout-image-right .card-list-item-has-image {
103
+ grid-template-columns: minmax(var(--card-list-media-min-width), var(--card-list-media-width)) minmax(0, 1fr);
104
+ align-items: center;
105
+ }
106
+
107
+ .card-list-layout-image-right .card-list-item-has-image {
108
+ grid-template-columns: minmax(0, 1fr) minmax(var(--card-list-media-min-width), var(--card-list-media-width));
109
+ }
110
+
111
+ .card-list-layout-image-left .card-list-item-linked,
112
+ .card-list-layout-image-right .card-list-item-linked {
113
+ grid-template-columns: 1fr;
114
+ }
115
+
116
+ .card-list-layout-image-right .card-list-image-frame {
117
+ order: 2;
118
+ }
119
+
120
+ .card-list-link {
121
+ display: grid;
122
+ gap: var(--card-list-item-gap);
123
+ width: 100%;
124
+ color: inherit;
125
+ text-decoration: none;
126
+ }
127
+
128
+ .card-list-layout-image-left .card-list-item-has-image .card-list-link,
129
+ .card-list-layout-image-right .card-list-item-has-image .card-list-link {
130
+ grid-template-columns: minmax(var(--card-list-media-min-width), var(--card-list-media-width)) minmax(0, 1fr);
131
+ align-items: center;
132
+ }
133
+
134
+ .card-list-layout-image-right .card-list-item-has-image .card-list-link {
135
+ grid-template-columns: minmax(0, 1fr) minmax(var(--card-list-media-min-width), var(--card-list-media-width));
136
+ }
137
+
138
+ .card-list-link:hover .card-list-title,
139
+ .card-list-link:focus-visible .card-list-title {
140
+ text-decoration: underline;
141
+ text-underline-offset: 0.18em;
142
+ }
143
+
144
+ .card-list-image-frame {
145
+ display: grid;
146
+ width: 100%;
147
+ aspect-ratio: 16 / 10;
148
+ place-items: center;
149
+ overflow: hidden;
150
+ }
151
+
152
+ .card-list-flow-stack.card-list-layout-image-top .card-list-image-frame {
153
+ width: min(100%, var(--card-list-top-media-width));
154
+ }
155
+
156
+ .card-list-image {
157
+ display: block;
158
+ width: 100%;
159
+ height: 100%;
160
+ object-fit: contain;
161
+ }
162
+
163
+ .card-list-content {
164
+ display: grid;
165
+ gap: 0.4rem;
166
+ }
167
+
168
+ .card-list-badge {
169
+ justify-self: start;
170
+ margin: 0 0 0.15rem;
171
+ border: 1px solid color-mix(in srgb, currentColor 28%, transparent);
172
+ border-radius: 999px;
173
+ padding: 0.18rem 0.48rem;
174
+ background: color-mix(in srgb, currentColor 9%, transparent);
175
+ color: inherit;
176
+ font-size: calc(var(--section-body-font-size-desktop, 1rem) * 0.72);
177
+ font-weight: 700;
178
+ letter-spacing: 0;
179
+ line-height: 1.2;
180
+ }
181
+
182
+ .card-list-title {
183
+ margin: 0;
184
+ color: inherit;
185
+ font-size: calc(var(--section-markdown-h3-font-size-desktop, 1.1rem) * var(--card-list-title-scale));
186
+ font-weight: 700;
187
+ letter-spacing: 0;
188
+ line-height: var(--section-markdown-h3-line-height, 1.35);
189
+ text-transform: none;
190
+ }
191
+
192
+ .card-list-content p:not(.card-list-badge) {
193
+ margin: 0;
194
+ font-size: calc(var(--section-body-font-size-desktop, 1rem) * var(--card-list-text-scale));
195
+ line-height: var(--section-body-line-height, 1.5);
196
+ }
197
+
198
+ :is(.image-stack, .managed-images) {
199
+ display: grid;
200
+ gap: var(--space-image-item);
201
+ margin-top: 0;
202
+ }
203
+
204
+ :root[data-image-presentation='prose-aligned'] .section-body {
205
+ display: grid;
206
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--layout-reading-width)) minmax(0, 1fr);
207
+ }
208
+
209
+ :root[data-image-presentation='prose-aligned'] .section-body > * {
210
+ grid-column: 1 / -1;
211
+ }
212
+
213
+ :root[data-image-presentation='prose-aligned'] .section-body > :is(.image-stack, .managed-images) {
214
+ grid-column: 2 / -1;
215
+ min-width: 0;
216
+ }
217
+
218
+ @media (min-width: 701px) {
219
+ :root[data-image-presentation='prose-aligned'] .site-page-layout-tree .section-body {
220
+ grid-template-columns: minmax(0, var(--layout-reading-width)) minmax(0, 1fr);
221
+ }
222
+
223
+ :root[data-image-presentation='prose-aligned'] .site-page-layout-tree .section-body > :is(.image-stack, .managed-images) {
224
+ grid-column: 1 / -1;
225
+ }
226
+ }
227
+
228
+ .managed-image-item {
229
+ display: grid;
230
+ gap: 0.55rem;
231
+ align-content: start;
232
+ margin: 0;
233
+ }
234
+
235
+ .image-stack .managed-image-item {
236
+ width: var(--layout-stack-item-width);
237
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
238
+ }
239
+
240
+ .managed-image-frame {
241
+ display: grid;
242
+ width: var(--layout-media-width);
243
+ margin-block: 0;
244
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
245
+ background: transparent;
246
+ place-items: center;
247
+ }
248
+
249
+ .managed-image {
250
+ display: block;
251
+ width: auto;
252
+ margin: 0 auto;
253
+ background: transparent;
254
+ height: auto;
255
+ max-width: 100%;
256
+ max-height: var(--image-max-height);
257
+ object-fit: contain;
258
+ }
259
+
260
+ .managed-image.managed-image-landscape {
261
+ width: 100%;
262
+ max-height: none;
263
+ }
264
+
265
+ :root[data-image-presentation='prose-aligned'] .managed-image-frame {
266
+ margin-inline: 0 auto;
267
+ place-items: start;
268
+ }
269
+
270
+ :root[data-image-presentation='prose-aligned'] .managed-image {
271
+ margin-inline: 0 auto;
272
+ max-height: none;
273
+ }
274
+
275
+ :root[data-image-presentation='centered-fit'] .image-stack .managed-image-item,
276
+ :root[data-image-presentation='centered-fit'] .managed-image-frame {
277
+ margin-inline: auto;
278
+ }
279
+
280
+ .image-carousel {
281
+ position: relative;
282
+ --image-carousel-width-from-height: var(--image-carousel-width-from-height-desktop, var(--image-layout-width));
283
+ --layout-carousel-width: min(
284
+ 100%,
285
+ var(--layout-media-width),
286
+ var(--image-carousel-width-from-height, var(--image-layout-width))
287
+ );
288
+ --image-carousel-control-background: var(--color-control-background);
289
+ --image-carousel-control-background-active: var(--color-control-background-active);
290
+ --image-carousel-control-color: var(--color-control-text);
291
+ outline: none;
292
+ }
293
+
294
+ .image-carousel:focus-visible {
295
+ outline: var(--focus-indicator-width) solid var(--color-focus-ring);
296
+ outline-offset: 0.5rem;
297
+ }
298
+
299
+ .image-carousel-slide {
300
+ flex: 0 0 100%;
301
+ min-width: 0;
302
+ margin: 0;
303
+ }
304
+
305
+ .image-carousel-stage {
306
+ position: relative;
307
+ display: grid;
308
+ width: var(--layout-carousel-width);
309
+ max-height: var(--image-max-height);
310
+ margin-block: 0;
311
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
312
+ aspect-ratio: var(--image-carousel-aspect-ratio, auto);
313
+ }
314
+
315
+ :root[data-image-presentation='prose-aligned'] .image-carousel-stage {
316
+ margin-inline: 0 auto;
317
+ }
318
+
319
+ :root[data-image-presentation='centered-fit'] .image-carousel-stage {
320
+ margin-inline: auto;
321
+ }
322
+
323
+ .image-carousel-viewport {
324
+ height: 100%;
325
+ }
326
+
327
+ .image-carousel-frame {
328
+ display: grid;
329
+ width: 100%;
330
+ height: 100%;
331
+ min-height: 0;
332
+ place-items: center;
333
+ }
334
+
335
+ .image-carousel[data-carousel-ready='true'] .image-carousel-viewport {
336
+ overflow: hidden;
337
+ }
338
+
339
+ .image-carousel[data-carousel-ready='true'] .image-carousel-slides {
340
+ display: flex;
341
+ height: 100%;
342
+ touch-action: pan-y pinch-zoom;
343
+ }
344
+
345
+ .image-carousel[data-carousel-ready='true'] .image-carousel-slide {
346
+ display: grid;
347
+ height: 100%;
348
+ min-height: 0;
349
+ align-content: start;
350
+ }
351
+
352
+ .image-carousel-frame .managed-image {
353
+ width: 100%;
354
+ height: 100%;
355
+ min-width: 0;
356
+ min-height: 0;
357
+ max-width: 100%;
358
+ max-height: 100%;
359
+ object-fit: contain;
360
+ }
361
+
362
+ .image-carousel-button,
363
+ .image-carousel-position {
364
+ display: none;
365
+ }
366
+
367
+ .image-carousel[data-carousel-ready='true'] .image-carousel-button,
368
+ .image-carousel[data-carousel-ready='true'] .image-carousel-position {
369
+ display: grid;
370
+ }
371
+
372
+ .image-carousel-button {
373
+ position: absolute;
374
+ top: 50%;
375
+ z-index: 2;
376
+ width: 2.75rem;
377
+ height: 2.75rem;
378
+ padding: 0;
379
+ place-items: center;
380
+ border: 0;
381
+ border-radius: 999px;
382
+ background: var(--image-carousel-control-background);
383
+ box-shadow: 0 0.125rem 0.5rem rgb(0 0 0 / 18%);
384
+ color: var(--image-carousel-control-color);
385
+ cursor: pointer;
386
+ transform: translateY(-50%);
387
+ }
388
+
389
+ .image-carousel-button svg {
390
+ width: 1.5rem;
391
+ height: 1.5rem;
392
+ fill: none;
393
+ stroke: currentColor;
394
+ stroke-linecap: round;
395
+ stroke-linejoin: round;
396
+ stroke-width: 2;
397
+ }
398
+
399
+ .image-carousel-button:hover:not(:disabled),
400
+ .image-carousel-button:focus-visible:not(:disabled) {
401
+ background: var(--image-carousel-control-background-active);
402
+ }
403
+
404
+ .image-carousel-button:focus-visible:not(:disabled) {
405
+ outline: var(--focus-indicator-width) solid var(--image-carousel-control-color);
406
+ outline-offset: 2px;
407
+ box-shadow:
408
+ 0 0 0 4px var(--image-carousel-control-background-active),
409
+ 0 0 0 6px var(--color-focus-ring);
410
+ }
411
+
412
+ .image-carousel-button:disabled {
413
+ cursor: default;
414
+ opacity: 0;
415
+ pointer-events: none;
416
+ }
417
+
418
+ .image-carousel-button-previous {
419
+ left: 0.75rem;
420
+ }
421
+
422
+ .image-carousel-button-next {
423
+ right: 0.75rem;
424
+ }
425
+
426
+ .image-carousel-position {
427
+ position: absolute;
428
+ right: 0.75rem;
429
+ bottom: 0.75rem;
430
+ z-index: 2;
431
+ min-width: 3rem;
432
+ min-height: 1.875rem;
433
+ padding: 0.35rem 0.65rem;
434
+ place-items: center;
435
+ border: 0;
436
+ border-radius: 999px;
437
+ background: var(--image-carousel-control-background);
438
+ box-shadow: 0 0.125rem 0.5rem rgb(0 0 0 / 18%);
439
+ color: var(--image-carousel-control-color);
440
+ font-size: 0.8125rem;
441
+ font-variant-numeric: tabular-nums;
442
+ font-weight: 600;
443
+ line-height: 1;
444
+ text-align: center;
445
+ }
446
+
447
+ .image-carousel-captions {
448
+ width: min(var(--layout-carousel-width), 72ch);
449
+ margin-block: 0;
450
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
451
+ }
452
+
453
+ :root[data-image-presentation='prose-aligned'] .image-carousel-captions {
454
+ margin-inline: 0 auto;
455
+ }
456
+
457
+ :root[data-image-presentation='centered-fit'] .image-carousel-captions {
458
+ margin-inline: auto;
459
+ text-align: center;
460
+ }
461
+
462
+ :root[data-image-presentation='centered-fit'] .image-carousel-captions .image-details {
463
+ justify-content: center;
464
+ }
465
+
466
+ .image-carousel-caption {
467
+ margin-bottom: 0;
468
+ }
469
+
470
+ .image-carousel[data-carousel-ready='true'] .image-carousel-captions {
471
+ display: grid;
472
+ }
473
+
474
+ .image-carousel[data-carousel-ready='true'] .image-carousel-caption {
475
+ grid-area: 1 / 1;
476
+ visibility: hidden;
477
+ pointer-events: none;
478
+ }
479
+
480
+ .image-carousel[data-carousel-ready='true'] .image-carousel-caption.is-active {
481
+ visibility: visible;
482
+ pointer-events: auto;
483
+ }
484
+
485
+ .image-meta {
486
+ width: min(var(--layout-media-width), 72ch);
487
+ margin-block: var(--section-caption-spacing-before, 0.5em) 0;
488
+ margin-inline: var(--layout-inline-start-margin) var(--layout-inline-end-margin);
489
+ font-size: var(--section-caption-font-size-desktop, 0.95rem);
490
+ text-align: var(--section-caption-align-desktop, center);
491
+ }
492
+
493
+ :root[data-image-presentation='prose-aligned'] .image-stack .image-meta {
494
+ margin-inline: 0 auto;
495
+ }
496
+
497
+ :root[data-image-presentation='centered-fit'] .image-stack .image-meta {
498
+ margin-inline: auto;
499
+ text-align: center;
500
+ }
501
+
502
+ :root[data-image-presentation='centered-fit'] .image-stack .image-details {
503
+ justify-content: center;
504
+ }
505
+
506
+ .image-details {
507
+ display: flex;
508
+ flex-wrap: wrap;
509
+ align-items: baseline;
510
+ justify-content: var(--section-caption-justify-desktop, center);
511
+ gap: 0.5rem;
512
+ margin-bottom: 0;
513
+ color: var(--section-secondary-text-color, var(--color-secondary-text));
514
+ font-size: inherit;
515
+ font-family: var(--font-sans);
516
+ letter-spacing: 0;
517
+ line-height: var(--section-caption-line-height, 1.5);
518
+ }