@liustack/pagepress 1.0.0 → 3.0.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.
@@ -0,0 +1,462 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>{{title}}</title>
8
+ <style>
9
+ /* ===== VOGUE/WIRED Premium Magazine Style ===== */
10
+ /* Fonts (Bebas Neue, Cormorant Garamond, Inter) are injected at runtime via Fontsource */
11
+
12
+ :root {
13
+ --black: #0a0a0a;
14
+ --white: #ffffff;
15
+ --cream: #faf8f5;
16
+ --accent: #dc2626;
17
+ --accent-dark: #b91c1c;
18
+ --gray-100: #f5f5f5;
19
+ --gray-200: #e5e5e5;
20
+ --gray-400: #a0a0a0;
21
+ --gray-600: #666666;
22
+ }
23
+
24
+ * {
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ body {
29
+ font-family: 'Inter', -apple-system, sans-serif;
30
+ font-size: 15px;
31
+ line-height: 1.9;
32
+ color: var(--black);
33
+ background: var(--white);
34
+ margin: 0;
35
+ font-weight: 400;
36
+ -webkit-print-color-adjust: exact;
37
+ print-color-adjust: exact;
38
+ }
39
+
40
+ .magazine {
41
+ max-width: 100%;
42
+ margin: 0;
43
+ padding: 0;
44
+ }
45
+
46
+ /* Body Content - Single Column */
47
+ .content {
48
+ max-width: 720px;
49
+ margin: 0 auto;
50
+ padding: 80px 60px 100px;
51
+ }
52
+
53
+ /* ===== Heading System ===== */
54
+ h1 {
55
+ font-family: 'Bebas Neue', Impact, sans-serif;
56
+ font-size: 5em;
57
+ font-weight: 400;
58
+ line-height: 0.95;
59
+ letter-spacing: 0.02em;
60
+ text-transform: uppercase;
61
+ margin: 0 0 0.2em;
62
+ color: var(--black);
63
+ }
64
+
65
+ h2 {
66
+ font-family: 'Bebas Neue', Impact, sans-serif;
67
+ font-size: 2.2em;
68
+ font-weight: 400;
69
+ letter-spacing: 0.02em;
70
+ text-transform: uppercase;
71
+ color: var(--black);
72
+ margin: 2em 0 0.5em;
73
+ position: relative;
74
+ padding-bottom: 0.4em;
75
+ }
76
+
77
+ h2::after {
78
+ content: '';
79
+ position: absolute;
80
+ bottom: 0;
81
+ left: 0;
82
+ width: 48px;
83
+ height: 2px;
84
+ background: var(--accent);
85
+ }
86
+
87
+ h3 {
88
+ font-family: 'Cormorant Garamond', Georgia, serif;
89
+ font-size: 1.4em;
90
+ font-weight: 600;
91
+ font-style: normal;
92
+ color: var(--gray-600);
93
+ margin: 1.8em 0 0.5em;
94
+ letter-spacing: 0.01em;
95
+ }
96
+
97
+ /* Subtitle/Lead */
98
+ .lead {
99
+ font-family: 'Cormorant Garamond', Georgia, serif;
100
+ font-size: 1.3em;
101
+ font-style: italic;
102
+ line-height: 1.7;
103
+ color: var(--gray-600);
104
+ margin-bottom: 2.5em;
105
+ border-left: 3px solid var(--accent);
106
+ padding-left: 1.2em;
107
+ }
108
+
109
+ /* Paragraph */
110
+ p {
111
+ margin: 0 0 1.4em;
112
+ text-align: justify;
113
+ hyphens: auto;
114
+ }
115
+
116
+ /* Drop Cap - Bold Style */
117
+ .content>p:first-of-type::first-letter {
118
+ font-family: 'Bebas Neue', Impact, sans-serif;
119
+ font-size: 4.5em;
120
+ float: left;
121
+ line-height: 0.8;
122
+ margin: 0.05em 0.1em 0 0;
123
+ color: var(--accent);
124
+ font-weight: 400;
125
+ }
126
+
127
+ /* Emphasis */
128
+ strong {
129
+ font-weight: 600;
130
+ color: var(--black);
131
+ }
132
+
133
+ em {
134
+ font-family: 'Cormorant Garamond', Georgia, serif;
135
+ font-style: italic;
136
+ }
137
+
138
+ /* Links */
139
+ a {
140
+ color: var(--accent-dark);
141
+ text-decoration: none;
142
+ border-bottom: 1px solid var(--accent);
143
+ transition: border-color 0.2s;
144
+ }
145
+
146
+ a:hover {
147
+ border-color: var(--accent-dark);
148
+ }
149
+
150
+ /* ===== Blockquote - Elegant Pull Quote ===== */
151
+ blockquote {
152
+ column-span: all;
153
+ margin: 3em 0;
154
+ padding: 2.5em 3em;
155
+ background: var(--cream);
156
+ border: none;
157
+ position: relative;
158
+ }
159
+
160
+ blockquote::before {
161
+ content: '"';
162
+ font-family: 'Bebas Neue', Impact, sans-serif;
163
+ font-size: 6em;
164
+ color: var(--accent);
165
+ position: absolute;
166
+ top: -0.1em;
167
+ left: 0.15em;
168
+ line-height: 1;
169
+ }
170
+
171
+ blockquote p {
172
+ font-family: 'Cormorant Garamond', Georgia, serif;
173
+ font-size: 1.5em;
174
+ font-style: italic;
175
+ font-weight: 400;
176
+ line-height: 1.5;
177
+ text-align: left;
178
+ color: var(--black);
179
+ margin: 0;
180
+ position: relative;
181
+ z-index: 1;
182
+ }
183
+
184
+ /* ===== Code ===== */
185
+ code {
186
+ font-family: 'JetBrains Mono', 'SF Mono', monospace;
187
+ font-size: 0.85em;
188
+ background: var(--gray-100);
189
+ padding: 0.2em 0.5em;
190
+ border-radius: 3px;
191
+ border: 1px solid var(--gray-200);
192
+ white-space: break-spaces;
193
+ overflow-wrap: anywhere;
194
+ word-break: break-word;
195
+ }
196
+
197
+ pre {
198
+ column-span: all;
199
+ font-family: 'JetBrains Mono', 'SF Mono', monospace;
200
+ font-size: 0.8em;
201
+ line-height: 1.7;
202
+ background: var(--black);
203
+ color: #e8e8e8;
204
+ padding: 28px 32px;
205
+ margin: 2.5em 0;
206
+ overflow-x: auto;
207
+ position: relative;
208
+ border-radius: 0;
209
+ white-space: pre-wrap;
210
+ overflow-wrap: anywhere;
211
+ word-break: break-word;
212
+ }
213
+
214
+ pre::before {
215
+ content: '';
216
+ position: absolute;
217
+ top: 0;
218
+ left: 0;
219
+ width: 4px;
220
+ height: 100%;
221
+ background: linear-gradient(180deg, var(--accent) 0%, var(--accent-dark) 100%);
222
+ }
223
+
224
+ pre code {
225
+ background: transparent;
226
+ padding: 0;
227
+ color: inherit;
228
+ border: none;
229
+ display: block;
230
+ white-space: inherit;
231
+ overflow-wrap: inherit;
232
+ word-break: inherit;
233
+ }
234
+
235
+ /* Syntax Highlighting - Warm Dark */
236
+ pre .comment,
237
+ pre .c,
238
+ pre .c1,
239
+ pre .ch,
240
+ pre .cm,
241
+ pre .cs {
242
+ color: #6b7280;
243
+ font-style: italic;
244
+ }
245
+
246
+ pre .keyword,
247
+ pre .k,
248
+ pre .kc,
249
+ pre .kd,
250
+ pre .kn,
251
+ pre .kp,
252
+ pre .kr,
253
+ pre .kt {
254
+ color: #f0abfc;
255
+ }
256
+
257
+ pre .string,
258
+ pre .s,
259
+ pre .s1,
260
+ pre .s2,
261
+ pre .sa,
262
+ pre .sb,
263
+ pre .sc,
264
+ pre .sd,
265
+ pre .se,
266
+ pre .sh,
267
+ pre .si,
268
+ pre .sr,
269
+ pre .ss,
270
+ pre .sx {
271
+ color: #86efac;
272
+ }
273
+
274
+ pre .function,
275
+ pre .nf,
276
+ pre .fm {
277
+ color: #93c5fd;
278
+ }
279
+
280
+ pre .number,
281
+ pre .mi,
282
+ pre .mf,
283
+ pre .mh,
284
+ pre .mo,
285
+ pre .mb,
286
+ pre .il {
287
+ color: #fcd34d;
288
+ }
289
+
290
+ pre .class,
291
+ pre .nc,
292
+ pre .nd,
293
+ pre .ne {
294
+ color: #67e8f9;
295
+ }
296
+
297
+ pre .operator,
298
+ pre .o,
299
+ pre .ow {
300
+ color: #f0abfc;
301
+ }
302
+
303
+ pre .builtin,
304
+ pre .bp {
305
+ color: #93c5fd;
306
+ }
307
+
308
+ /* ===== Table ===== */
309
+ table {
310
+ column-span: all;
311
+ width: 100%;
312
+ border-collapse: collapse;
313
+ margin: 2.5em 0;
314
+ font-size: 0.95em;
315
+ }
316
+
317
+ th {
318
+ font-family: 'Inter', sans-serif;
319
+ font-size: 0.75em;
320
+ font-weight: 600;
321
+ letter-spacing: 0.08em;
322
+ text-transform: uppercase;
323
+ text-align: left;
324
+ padding: 14px 18px;
325
+ background: var(--black);
326
+ color: var(--white);
327
+ }
328
+
329
+ th:first-child {
330
+ border-left: 3px solid var(--accent);
331
+ }
332
+
333
+ td {
334
+ padding: 14px 18px;
335
+ border-bottom: 1px solid var(--gray-200);
336
+ vertical-align: top;
337
+ }
338
+
339
+ tr:hover td {
340
+ background: var(--cream);
341
+ }
342
+
343
+ /* ===== Lists ===== */
344
+ ul,
345
+ ol {
346
+ margin: 1.4em 0;
347
+ padding-left: 1.5em;
348
+ }
349
+
350
+ li {
351
+ margin-bottom: 0.5em;
352
+ }
353
+
354
+ ul {
355
+ list-style: none;
356
+ }
357
+
358
+ ul li {
359
+ position: relative;
360
+ padding-left: 0.3em;
361
+ }
362
+
363
+ ul li::before {
364
+ content: '';
365
+ position: absolute;
366
+ left: -1.2em;
367
+ top: 0.65em;
368
+ width: 6px;
369
+ height: 6px;
370
+ background: var(--accent);
371
+ border-radius: 50%;
372
+ }
373
+
374
+ ol li::marker {
375
+ color: var(--accent-dark);
376
+ font-weight: 600;
377
+ }
378
+
379
+ /* ===== Divider ===== */
380
+ hr {
381
+ column-span: all;
382
+ border: none;
383
+ height: 3px;
384
+ background: var(--black);
385
+ margin: 3em 0;
386
+ opacity: 1;
387
+ }
388
+
389
+ /* ===== Images ===== */
390
+ figure {
391
+ column-span: all;
392
+ margin: 2.5em 0;
393
+ }
394
+
395
+ img {
396
+ width: 100%;
397
+ height: auto;
398
+ display: block;
399
+ }
400
+
401
+ figcaption {
402
+ font-size: 0.8em;
403
+ color: var(--gray-600);
404
+ font-style: italic;
405
+ margin-top: 12px;
406
+ padding-left: 12px;
407
+ border-left: 2px solid var(--accent);
408
+ }
409
+
410
+ /* ===== Print ===== */
411
+ @page {
412
+ size: A4;
413
+ margin: 24mm 20mm;
414
+ }
415
+
416
+ @media print {
417
+ body {
418
+ background: white;
419
+ }
420
+
421
+ .content {
422
+ max-width: 100%;
423
+ padding: 0;
424
+ }
425
+
426
+ pre,
427
+ th {
428
+ -webkit-print-color-adjust: exact;
429
+ print-color-adjust: exact;
430
+ }
431
+
432
+ h1,
433
+ h2 {
434
+ page-break-after: avoid;
435
+ }
436
+
437
+ pre,
438
+ blockquote,
439
+ table,
440
+ figure {
441
+ page-break-inside: avoid;
442
+ }
443
+ }
444
+
445
+ .content.single-column {
446
+ column-count: 1;
447
+ }
448
+ </style>
449
+ {{styles}}
450
+ </head>
451
+
452
+ <body>
453
+ <main class="magazine">
454
+ <div class="content">
455
+ {{body}}
456
+ </div>
457
+ </main>
458
+
459
+
460
+ </body>
461
+
462
+ </html>