@open-press/core 0.3.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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/engine/chrome-pdf.d.mts +34 -0
  4. package/engine/chrome-pdf.mjs +344 -0
  5. package/engine/cli.mjs +93 -0
  6. package/engine/commands/_shared.mjs +170 -0
  7. package/engine/commands/deploy.mjs +31 -0
  8. package/engine/commands/dev.mjs +26 -0
  9. package/engine/commands/export.mjs +8 -0
  10. package/engine/commands/init.mjs +24 -0
  11. package/engine/commands/inspect.mjs +35 -0
  12. package/engine/commands/migrate-to-react.mjs +27 -0
  13. package/engine/commands/pdf.mjs +26 -0
  14. package/engine/commands/preview.mjs +26 -0
  15. package/engine/commands/render.mjs +17 -0
  16. package/engine/commands/replace.mjs +41 -0
  17. package/engine/commands/search.mjs +33 -0
  18. package/engine/commands/typecheck.mjs +5 -0
  19. package/engine/commands/validate.mjs +17 -0
  20. package/engine/config.d.mts +40 -0
  21. package/engine/config.mjs +160 -0
  22. package/engine/deploy-sync.mjs +15 -0
  23. package/engine/document-export.mjs +15 -0
  24. package/engine/file-utils.mjs +106 -0
  25. package/engine/fonts.mjs +62 -0
  26. package/engine/init.mjs +90 -0
  27. package/engine/inspection.mjs +348 -0
  28. package/engine/issue-report.mjs +44 -0
  29. package/engine/katex-assets.mjs +45 -0
  30. package/engine/page-block.mjs +30 -0
  31. package/engine/page-renderer.mjs +217 -0
  32. package/engine/pdf-media.mjs +45 -0
  33. package/engine/public-assets.mjs +19 -0
  34. package/engine/react/chapter-css.mjs +53 -0
  35. package/engine/react/comment-endpoint.d.mts +11 -0
  36. package/engine/react/comment-endpoint.mjs +128 -0
  37. package/engine/react/comment-marker.mjs +306 -0
  38. package/engine/react/document-entry.mjs +253 -0
  39. package/engine/react/document-export.mjs +392 -0
  40. package/engine/react/mdx-compile.mjs +295 -0
  41. package/engine/react/measurement-css.mjs +44 -0
  42. package/engine/react/migrate-to-react.mjs +355 -0
  43. package/engine/react/pagination-constants.mjs +3 -0
  44. package/engine/react/pagination.mjs +121 -0
  45. package/engine/react/project-asset-endpoint.d.mts +10 -0
  46. package/engine/react/project-asset-endpoint.mjs +379 -0
  47. package/engine/react/workspace-discovery.mjs +156 -0
  48. package/engine/source-text-tools.mjs +280 -0
  49. package/engine/source-workspace.mjs +76 -0
  50. package/engine/static-server.mjs +493 -0
  51. package/engine/validation.mjs +172 -0
  52. package/index.html +13 -0
  53. package/package.json +86 -0
  54. package/src/openpress/App.tsx +127 -0
  55. package/src/openpress/composerMentions.ts +188 -0
  56. package/src/openpress/core/basePages.tsx +87 -0
  57. package/src/openpress/core/index.tsx +20 -0
  58. package/src/openpress/core/types.ts +71 -0
  59. package/src/openpress/frameScheduler.ts +32 -0
  60. package/src/openpress/indexes.ts +329 -0
  61. package/src/openpress/inspector.ts +282 -0
  62. package/src/openpress/pageRoute.ts +21 -0
  63. package/src/openpress/pagination.ts +845 -0
  64. package/src/openpress/projectIdentity.ts +15 -0
  65. package/src/openpress/projectSources.ts +24 -0
  66. package/src/openpress/projectWorkspace.tsx +919 -0
  67. package/src/openpress/publicPage.tsx +469 -0
  68. package/src/openpress/reactDocumentMetadata.ts +41 -0
  69. package/src/openpress/readerPageRegistry.ts +41 -0
  70. package/src/openpress/readerRuntime.ts +230 -0
  71. package/src/openpress/readerScroll.ts +92 -0
  72. package/src/openpress/readerState.ts +15 -0
  73. package/src/openpress/renderer.tsx +91 -0
  74. package/src/openpress/runtimeMode.ts +22 -0
  75. package/src/openpress/types.ts +112 -0
  76. package/src/openpress/workbench.tsx +1299 -0
  77. package/src/openpress/workbenchPanels.tsx +122 -0
  78. package/src/openpress/workbenchTypes.ts +4 -0
  79. package/src/styles/openpress/app-shell.css +251 -0
  80. package/src/styles/openpress/media-workspace.css +230 -0
  81. package/src/styles/openpress/print-route.css +186 -0
  82. package/src/styles/openpress/project-workspace.css +1318 -0
  83. package/src/styles/openpress/public-viewer.css +983 -0
  84. package/src/styles/openpress/reader-runtime.css +792 -0
  85. package/src/styles/openpress/responsive.css +384 -0
  86. package/src/styles/openpress/workbench-panels.css +558 -0
  87. package/src/styles/openpress/workbench.css +720 -0
  88. package/src/styles/openpress.css +14 -0
  89. package/tsconfig.json +37 -0
  90. package/vite.config.ts +512 -0
@@ -0,0 +1,792 @@
1
+ .openpress-reader-app .reader-pages {
2
+ padding: 30px 24px 56px;
3
+ }
4
+
5
+ .openpress-reader-app .reader-page {
6
+ scroll-margin-top: 32px;
7
+ }
8
+
9
+ .openpress-html-page {
10
+ width: fit-content;
11
+ max-width: 100%;
12
+ margin: 0 auto 12px;
13
+ scroll-margin-top: 72px;
14
+ }
15
+
16
+ /* Snap alignment only in paged mode. Reading mode lets pages grow to
17
+ natural height; snap-stop would yank long sections back to the page top. */
18
+ [data-openpress-view-mode="paged"] .openpress-html-page,
19
+ .openpress-reader-app:not([data-openpress-view-mode]) .openpress-html-page {
20
+ scroll-snap-align: start;
21
+ scroll-snap-stop: always;
22
+ }
23
+
24
+ .openpress-html-page__toolbar {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: space-between;
28
+ gap: 16px;
29
+ margin-bottom: 10px;
30
+ color: #90969d;
31
+ font-size: 12px;
32
+ }
33
+
34
+ .openpress-html-page__toolbar code {
35
+ overflow: hidden;
36
+ max-width: 520px;
37
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
38
+ text-overflow: ellipsis;
39
+ white-space: nowrap;
40
+ }
41
+
42
+ .openpress-reader-app[data-openpress-inspector-mode="on"] .openpress-html-page__html [data-openpress-block-id] {
43
+ cursor: crosshair;
44
+ }
45
+
46
+ .openpress-reader-app[data-openpress-inspector-mode="on"] .openpress-html-page__html [data-openpress-block-id]:hover {
47
+ outline: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 70%, transparent);
48
+ outline-offset: 4px;
49
+ }
50
+
51
+ .openpress-reader-app[data-openpress-inspector-mode="on"] .openpress-html-page__html [data-openpress-inspector-selected="true"] {
52
+ outline: 2px solid var(--openpress-accent, #df4b21);
53
+ outline-offset: 5px;
54
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 16%, transparent);
55
+ }
56
+
57
+ .openpress-inline-inspector-layer {
58
+ position: fixed;
59
+ inset: 0;
60
+ z-index: 90;
61
+ pointer-events: none;
62
+ }
63
+
64
+ .openpress-inline-insert-target {
65
+ position: fixed;
66
+ z-index: 91;
67
+ border: 0;
68
+ border-radius: 999px;
69
+ padding: 0;
70
+ background: transparent;
71
+ color: var(--openpress-accent, #df4b21);
72
+ cursor: cell;
73
+ opacity: 0;
74
+ pointer-events: auto;
75
+ transition: opacity 140ms ease, transform 140ms ease;
76
+ }
77
+
78
+ .openpress-inline-insert-target::before {
79
+ position: absolute;
80
+ right: 0;
81
+ left: 0;
82
+ top: 50%;
83
+ border-top: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 82%, transparent);
84
+ content: "";
85
+ }
86
+
87
+ .openpress-inline-insert-target:hover,
88
+ .openpress-inline-insert-target.is-selected {
89
+ opacity: 1;
90
+ }
91
+
92
+ .openpress-inline-insert-target.is-selected {
93
+ transform: scaleY(1.12);
94
+ }
95
+
96
+ .openpress-inline-comment-marker {
97
+ position: fixed;
98
+ z-index: 132;
99
+ display: grid;
100
+ width: 32px;
101
+ height: 32px;
102
+ place-items: center;
103
+ border: 3px solid #f8fbff;
104
+ border-radius: 999px;
105
+ padding: 0;
106
+ background: var(--openpress-accent, #df4b21);
107
+ color: white;
108
+ font: inherit;
109
+ font-size: 14px;
110
+ font-weight: 800;
111
+ line-height: 1;
112
+ cursor: pointer;
113
+ pointer-events: auto;
114
+ box-shadow: 0 10px 26px rgb(0 0 0 / 24%);
115
+ transition: transform 160ms ease, box-shadow 160ms ease, background-color 160ms ease;
116
+ }
117
+
118
+ .openpress-inline-comment-marker:hover,
119
+ .openpress-inline-comment-marker:focus-visible {
120
+ transform: translateY(-1px);
121
+ outline: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 64%, white);
122
+ outline-offset: 2px;
123
+ box-shadow: 0 14px 32px rgb(0 0 0 / 30%);
124
+ }
125
+
126
+ .openpress-inline-comment-marker[data-openpress-marker-state="saved"] {
127
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 92%, #5f2a16);
128
+ }
129
+
130
+ .openpress-inline-comment-composer {
131
+ position: fixed;
132
+ z-index: 131;
133
+ display: grid;
134
+ gap: 8px;
135
+ border: 1px solid rgb(255 255 255 / 10%);
136
+ border-radius: 26px;
137
+ padding: 8px 10px 10px;
138
+ background: #292929;
139
+ color: rgb(248 250 252 / 94%);
140
+ box-shadow: 0 18px 48px rgb(0 0 0 / 30%);
141
+ pointer-events: auto;
142
+ }
143
+
144
+ .openpress-inline-comment-composer[data-openpress-composer-open="false"] {
145
+ gap: 0;
146
+ border-radius: 999px;
147
+ padding: 8px;
148
+ }
149
+
150
+ .openpress-inline-comment-composer__intents {
151
+ display: flex;
152
+ gap: 6px;
153
+ padding: 0 4px;
154
+ }
155
+
156
+ .openpress-inline-comment-composer__intents button {
157
+ display: grid;
158
+ width: 30px;
159
+ height: 30px;
160
+ place-items: center;
161
+ border: 1px solid rgb(255 255 255 / 10%);
162
+ border-radius: 999px;
163
+ padding: 0;
164
+ background: rgb(255 255 255 / 6%);
165
+ color: rgb(238 242 246 / 72%);
166
+ font: inherit;
167
+ cursor: pointer;
168
+ }
169
+
170
+ .openpress-inline-comment-composer__intents button:hover,
171
+ .openpress-inline-comment-composer__intents button.is-active {
172
+ border-color: color-mix(in srgb, var(--openpress-accent, #df4b21) 68%, transparent);
173
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 22%, transparent);
174
+ color: #fff;
175
+ }
176
+
177
+ .openpress-inline-comment-composer__intents button svg {
178
+ width: 15px;
179
+ height: 15px;
180
+ stroke-width: 2.2;
181
+ }
182
+
183
+ .openpress-inline-comment-composer__body {
184
+ display: grid;
185
+ grid-template-columns: minmax(0, 1fr) 34px;
186
+ gap: 8px;
187
+ align-items: end;
188
+ }
189
+
190
+ .openpress-inline-comment-composer textarea {
191
+ width: 100%;
192
+ min-height: 82px;
193
+ max-height: 128px;
194
+ resize: vertical;
195
+ border: 0;
196
+ border-radius: 16px;
197
+ padding: 9px 11px;
198
+ background: rgb(255 255 255 / 5%);
199
+ color: rgb(248 250 252 / 94%);
200
+ font: inherit;
201
+ font-size: 14px;
202
+ line-height: 1.35;
203
+ }
204
+
205
+ .openpress-inline-comment-composer textarea::placeholder {
206
+ color: rgb(248 250 252 / 42%);
207
+ }
208
+
209
+ .openpress-inline-comment-composer textarea:focus {
210
+ outline: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 72%, transparent);
211
+ outline-offset: 2px;
212
+ }
213
+
214
+ .openpress-inline-comment-composer__body > button {
215
+ display: grid;
216
+ width: 34px;
217
+ height: 34px;
218
+ place-items: center;
219
+ border: 0;
220
+ border-radius: 999px;
221
+ background: var(--openpress-accent, #df4b21);
222
+ color: white;
223
+ cursor: pointer;
224
+ }
225
+
226
+ .openpress-inline-comment-composer__body > button:disabled {
227
+ cursor: not-allowed;
228
+ opacity: 0.42;
229
+ }
230
+
231
+ .openpress-inline-comment-composer__body > button svg {
232
+ width: 16px;
233
+ height: 16px;
234
+ }
235
+
236
+ .openpress-inline-comment-composer__suggestions {
237
+ display: grid;
238
+ gap: 4px;
239
+ margin-top: 10px;
240
+ overflow: hidden;
241
+ border: 1px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 28%, transparent);
242
+ border-radius: 12px;
243
+ padding: 6px;
244
+ background: rgb(36 36 34 / 96%);
245
+ }
246
+
247
+ .openpress-inline-comment-composer__suggestions button {
248
+ display: flex;
249
+ align-items: baseline;
250
+ justify-content: space-between;
251
+ gap: 14px;
252
+ min-width: 0;
253
+ border: 0;
254
+ border-radius: 8px;
255
+ padding: 8px 10px;
256
+ background: transparent;
257
+ color: rgb(244 241 235 / 90%);
258
+ cursor: pointer;
259
+ font: inherit;
260
+ text-align: left;
261
+ }
262
+
263
+ .openpress-inline-comment-composer__suggestions button:hover,
264
+ .openpress-inline-comment-composer__suggestions button:focus-visible,
265
+ .openpress-inline-comment-composer__suggestions button[data-highlighted="true"] {
266
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 18%, transparent);
267
+ outline: 0;
268
+ }
269
+
270
+ .openpress-inline-comment-composer__suggestions span {
271
+ min-width: 0;
272
+ overflow: hidden;
273
+ font-family: var(--openpress-font-mono);
274
+ font-size: 12px;
275
+ line-height: 1.2;
276
+ text-overflow: ellipsis;
277
+ white-space: nowrap;
278
+ }
279
+
280
+ .openpress-inline-comment-composer__suggestions small {
281
+ flex: 0 0 auto;
282
+ color: rgb(218 161 123 / 78%);
283
+ font-size: 10px;
284
+ line-height: 1.2;
285
+ }
286
+
287
+ .openpress-inline-comment-composer p {
288
+ min-height: 13px;
289
+ margin: -2px 8px 0;
290
+ color: rgb(203 213 225 / 68%);
291
+ font-size: 11px;
292
+ line-height: 1.25;
293
+ }
294
+
295
+ .openpress-inline-comment-composer p[data-openpress-inspector-comment-status="failed"],
296
+ .openpress-dev-inspector-status[data-openpress-inspector-comment-status="failed"] {
297
+ color: rgb(248 113 113 / 92%);
298
+ }
299
+
300
+ .openpress-inline-comment-composer p[data-openpress-inspector-comment-status="saved"],
301
+ .openpress-dev-inspector-status[data-openpress-inspector-comment-status="saved"] {
302
+ color: rgb(134 239 172 / 88%);
303
+ }
304
+
305
+ .openpress-public-action-entry[data-openpress-inspector-active="true"] {
306
+ border-color: color-mix(in srgb, var(--openpress-accent, #df4b21) 60%, transparent);
307
+ color: var(--openpress-accent, #df4b21);
308
+ }
309
+
310
+ .openpress-dev-inspector-status {
311
+ display: block;
312
+ overflow: hidden;
313
+ max-width: 100%;
314
+ color: currentColor;
315
+ font-size: 11px;
316
+ opacity: 0.72;
317
+ text-overflow: ellipsis;
318
+ white-space: nowrap;
319
+ }
320
+
321
+ .openpress-dev-inspector-comment {
322
+ display: grid;
323
+ gap: 8px;
324
+ padding: 12px 0;
325
+ border-bottom: 1px solid rgb(255 255 255 / 7%);
326
+ }
327
+
328
+ .openpress-dev-inspector-comment label {
329
+ color: rgb(198 204 210 / 76%);
330
+ font-size: 11px;
331
+ font-weight: 600;
332
+ line-height: 1.2;
333
+ }
334
+
335
+ .openpress-dev-inspector-comment textarea {
336
+ width: 100%;
337
+ min-height: 74px;
338
+ resize: vertical;
339
+ border: 1px solid rgb(255 255 255 / 11%);
340
+ border-radius: 6px;
341
+ padding: 9px 10px;
342
+ background: rgb(255 255 255 / 5%);
343
+ color: rgb(242 242 240 / 92%);
344
+ font: inherit;
345
+ font-size: 12px;
346
+ line-height: 1.45;
347
+ }
348
+
349
+ .openpress-dev-inspector-comment textarea:disabled {
350
+ cursor: not-allowed;
351
+ opacity: 0.58;
352
+ }
353
+
354
+ .openpress-dev-inspector-comment textarea:focus {
355
+ outline: 2px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 58%, transparent);
356
+ outline-offset: 2px;
357
+ }
358
+
359
+ .openpress-dev-inspector-comment button {
360
+ display: inline-flex;
361
+ align-items: center;
362
+ justify-content: center;
363
+ gap: 7px;
364
+ min-height: 34px;
365
+ border: 1px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 42%, transparent);
366
+ border-radius: 6px;
367
+ padding: 7px 10px;
368
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 16%, transparent);
369
+ color: rgb(242 242 240 / 92%);
370
+ font: inherit;
371
+ font-size: 11px;
372
+ font-weight: 700;
373
+ cursor: pointer;
374
+ }
375
+
376
+ .openpress-dev-inspector-comment button:disabled {
377
+ cursor: not-allowed;
378
+ opacity: 0.48;
379
+ }
380
+
381
+ .openpress-dev-inspector-comment button svg {
382
+ width: 13px;
383
+ height: 13px;
384
+ }
385
+
386
+ .openpress-dev-inspector-comment p {
387
+ min-height: 14px;
388
+ margin: 0;
389
+ color: rgb(198 204 210 / 70%);
390
+ font-size: 11px;
391
+ line-height: 1.25;
392
+ }
393
+
394
+ .openpress-dev-inspector-comment p[data-openpress-inspector-comment-status="failed"] {
395
+ color: rgb(241 107 98 / 90%);
396
+ }
397
+
398
+ .openpress-dev-inspector-comment p[data-openpress-inspector-comment-status="saved"] {
399
+ color: rgb(132 211 164 / 88%);
400
+ }
401
+
402
+ .openpress-comments-workspace {
403
+ min-height: 100%;
404
+ padding: 34px clamp(22px, 4vw, 56px) 56px;
405
+ background: #111312;
406
+ color: #e8e8e4;
407
+ }
408
+
409
+ .openpress-comments-workspace__header {
410
+ display: flex;
411
+ align-items: flex-end;
412
+ justify-content: space-between;
413
+ gap: 20px;
414
+ padding-bottom: 22px;
415
+ border-bottom: 1px solid rgb(255 255 255 / 9%);
416
+ }
417
+
418
+ .openpress-comments-workspace__header h1 {
419
+ margin: 4px 0 6px;
420
+ color: rgb(242 242 240 / 94%);
421
+ font-family: var(--openpress-font-serif);
422
+ font-size: clamp(30px, 4vw, 52px);
423
+ font-weight: 520;
424
+ line-height: 1.05;
425
+ letter-spacing: 0;
426
+ }
427
+
428
+ .openpress-comments-workspace__header p,
429
+ .openpress-comments-workspace__eyebrow {
430
+ margin: 0;
431
+ color: rgb(160 166 173 / 72%);
432
+ font-size: 12px;
433
+ line-height: 1.4;
434
+ }
435
+
436
+ .openpress-comments-workspace__eyebrow {
437
+ display: block;
438
+ font-weight: 700;
439
+ letter-spacing: 0.06em;
440
+ text-transform: uppercase;
441
+ }
442
+
443
+ .openpress-comments-workspace__actions {
444
+ display: flex;
445
+ flex-wrap: wrap;
446
+ gap: 8px;
447
+ justify-content: flex-end;
448
+ }
449
+
450
+ .openpress-comments-workspace button {
451
+ display: inline-flex;
452
+ min-height: 34px;
453
+ align-items: center;
454
+ justify-content: center;
455
+ gap: 7px;
456
+ border: 1px solid rgb(255 255 255 / 12%);
457
+ border-radius: 6px;
458
+ padding: 7px 10px;
459
+ background: rgb(255 255 255 / 5%);
460
+ color: rgb(242 242 240 / 90%);
461
+ font: inherit;
462
+ font-size: 12px;
463
+ font-weight: 700;
464
+ cursor: pointer;
465
+ }
466
+
467
+ .openpress-comments-workspace button:hover:not(:disabled) {
468
+ border-color: rgb(255 255 255 / 20%);
469
+ background: rgb(255 255 255 / 8%);
470
+ }
471
+
472
+ .openpress-comments-workspace button:disabled {
473
+ cursor: not-allowed;
474
+ opacity: 0.46;
475
+ }
476
+
477
+ .openpress-comments-workspace button svg {
478
+ width: 14px;
479
+ height: 14px;
480
+ }
481
+
482
+ .openpress-comments-workspace__error {
483
+ margin: 18px 0 0;
484
+ border-left: 3px solid rgb(248 113 113 / 76%);
485
+ padding: 8px 0 8px 12px;
486
+ color: rgb(248 113 113 / 88%);
487
+ font-size: 13px;
488
+ line-height: 1.45;
489
+ }
490
+
491
+ .openpress-comments-workspace__empty {
492
+ margin-top: 22px;
493
+ border: 1px dashed rgb(255 255 255 / 13%);
494
+ border-radius: 8px;
495
+ padding: 24px;
496
+ color: rgb(160 166 173 / 72%);
497
+ font-size: 14px;
498
+ }
499
+
500
+ .openpress-comments-list {
501
+ display: grid;
502
+ gap: 12px;
503
+ margin: 22px 0 0;
504
+ padding: 0;
505
+ list-style: none;
506
+ }
507
+
508
+ .openpress-comment-entry {
509
+ display: grid;
510
+ grid-template-columns: minmax(0, 1fr) auto;
511
+ gap: 12px;
512
+ align-items: start;
513
+ border: 1px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 18%, rgb(255 255 255 / 8%));
514
+ border-radius: 10px;
515
+ padding: 14px;
516
+ background:
517
+ linear-gradient(90deg, color-mix(in srgb, var(--openpress-accent, #df4b21) 14%, transparent), transparent 34%),
518
+ rgb(255 255 255 / 3.5%);
519
+ }
520
+
521
+ .openpress-comment-entry__body {
522
+ min-width: 0;
523
+ }
524
+
525
+ .openpress-comment-entry__topline {
526
+ display: grid;
527
+ grid-template-columns: minmax(0, 1fr) auto;
528
+ gap: 10px;
529
+ align-items: start;
530
+ }
531
+
532
+ .openpress-comment-entry__note {
533
+ margin: 0;
534
+ color: rgb(242 242 240 / 92%);
535
+ font-size: 14px;
536
+ font-weight: 650;
537
+ line-height: 1.55;
538
+ }
539
+
540
+ .openpress-comment-entry__intent {
541
+ display: inline-flex;
542
+ align-items: center;
543
+ min-height: 22px;
544
+ border: 1px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 45%, transparent);
545
+ border-radius: 999px;
546
+ padding: 3px 8px;
547
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 16%, transparent);
548
+ color: color-mix(in srgb, var(--openpress-accent, #df4b21) 80%, white);
549
+ font-size: 10px;
550
+ font-weight: 800;
551
+ line-height: 1;
552
+ letter-spacing: 0.04em;
553
+ text-transform: uppercase;
554
+ }
555
+
556
+ .openpress-comment-entry__meta {
557
+ display: flex;
558
+ min-width: 0;
559
+ flex-wrap: wrap;
560
+ gap: 8px 10px;
561
+ margin: 9px 0 0;
562
+ color: rgb(160 166 173 / 68%);
563
+ font-size: 11px;
564
+ line-height: 1.45;
565
+ }
566
+
567
+ .openpress-comment-entry__meta code {
568
+ overflow-wrap: anywhere;
569
+ border: 1px solid rgb(255 255 255 / 8%);
570
+ border-radius: 6px;
571
+ padding: 2px 5px;
572
+ background: rgb(0 0 0 / 16%);
573
+ color: rgb(215 222 230 / 82%);
574
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
575
+ }
576
+
577
+ .openpress-comment-entry__hint {
578
+ display: inline-flex;
579
+ width: fit-content;
580
+ margin: 8px 0 0;
581
+ border: 1px solid color-mix(in srgb, var(--openpress-accent, #df4b21) 18%, transparent);
582
+ border-radius: 999px;
583
+ padding: 3px 8px;
584
+ background: color-mix(in srgb, var(--openpress-accent, #df4b21) 8%, rgb(255 255 255 / 4%));
585
+ color: rgb(190 184 178 / 78%);
586
+ font-size: 11px;
587
+ line-height: 1.2;
588
+ }
589
+
590
+ .openpress-comments-workspace--panel {
591
+ min-height: 0;
592
+ overflow: auto;
593
+ padding: 6px 22px 18px;
594
+ background: transparent;
595
+ }
596
+
597
+ .openpress-comments-workspace--panel .openpress-comments-workspace__header {
598
+ display: grid;
599
+ gap: 10px;
600
+ align-items: start;
601
+ padding-bottom: 12px;
602
+ }
603
+
604
+ .openpress-comments-workspace--panel .openpress-comments-workspace__header h1 {
605
+ margin: 2px 0 3px;
606
+ font-family: inherit;
607
+ font-size: 14px;
608
+ font-weight: 700;
609
+ line-height: 1.35;
610
+ }
611
+
612
+ .openpress-comments-workspace--panel .openpress-comments-workspace__header p,
613
+ .openpress-comments-workspace--panel .openpress-comments-workspace__eyebrow {
614
+ font-size: 11px;
615
+ }
616
+
617
+ .openpress-comments-workspace--panel .openpress-comments-workspace__actions {
618
+ justify-content: flex-start;
619
+ }
620
+
621
+ .openpress-comments-workspace--panel .openpress-comments-workspace__actions button {
622
+ width: 34px;
623
+ min-height: 30px;
624
+ padding: 0;
625
+ font-size: 11px;
626
+ }
627
+
628
+ .openpress-comments-workspace--panel .openpress-comments-workspace__actions button span {
629
+ position: absolute;
630
+ width: 1px;
631
+ height: 1px;
632
+ overflow: hidden;
633
+ clip: rect(0 0 0 0);
634
+ white-space: nowrap;
635
+ }
636
+
637
+ .openpress-comments-workspace--panel .openpress-comments-list {
638
+ gap: 10px;
639
+ margin-top: 10px;
640
+ }
641
+
642
+ .openpress-comments-workspace--panel .openpress-comment-entry {
643
+ grid-template-columns: minmax(0, 1fr);
644
+ gap: 10px;
645
+ padding: 12px;
646
+ }
647
+
648
+ .openpress-comments-workspace--panel .openpress-comment-entry__note {
649
+ font-size: 12px;
650
+ line-height: 1.45;
651
+ }
652
+
653
+ .openpress-comments-workspace--panel .openpress-comment-entry button {
654
+ width: fit-content;
655
+ min-height: 30px;
656
+ padding: 6px 8px;
657
+ font-size: 11px;
658
+ }
659
+
660
+ .openpress-comments-workspace--panel .openpress-comments-workspace__empty {
661
+ margin-top: 10px;
662
+ padding: 14px;
663
+ font-size: 12px;
664
+ }
665
+
666
+ .openpress-html-page__html .reader-page {
667
+ display: block;
668
+ width: min(var(--openpress-page-width), calc(100cqw - 48px));
669
+ height: calc(min(var(--openpress-page-width), calc(100cqw - 48px)) * var(--openpress-page-height-ratio, 1.4142857143));
670
+ aspect-ratio: var(--openpress-page-aspect-ratio, 210 / 297);
671
+ margin: 0;
672
+ box-shadow: 0 16px 48px rgb(0 0 0 / 24%);
673
+ }
674
+
675
+ .openpress-html-page__html .reader-page--cover,
676
+ .openpress-html-page__html .reader-page--back-cover {
677
+ display: flex;
678
+ }
679
+
680
+ .openpress-html-page__html .reader-page--content figure.openpress-component-frame,
681
+ .openpress-print-document .reader-page--content figure.openpress-component-frame {
682
+ width: min(100%, 168mm);
683
+ max-width: 100%;
684
+ margin: var(--openpress-space-4) auto;
685
+ overflow: visible;
686
+ box-sizing: border-box;
687
+ break-inside: avoid;
688
+ }
689
+
690
+ .openpress-html-page__html .reader-page--content figure.openpress-component-frame > .openpress-component-frame__body,
691
+ .openpress-print-document .reader-page--content figure.openpress-component-frame > .openpress-component-frame__body {
692
+ width: 100%;
693
+ max-width: 100%;
694
+ margin: 0;
695
+ box-sizing: border-box;
696
+ }
697
+
698
+ .openpress-html-page__html .reader-page--content figure.openpress-component-frame > figcaption,
699
+ .openpress-print-document .reader-page--content figure.openpress-component-frame > figcaption {
700
+ display: block;
701
+ width: 100%;
702
+ margin-top: 2.6mm;
703
+ }
704
+
705
+ .openpress-print-document {
706
+ width: var(--openpress-page-width);
707
+ min-height: 100vh;
708
+ margin: 0;
709
+ background: #fff;
710
+ color: var(--openpress-text);
711
+ }
712
+
713
+ .openpress-print-document,
714
+ .openpress-print-document *,
715
+ .openpress-print-document *::before,
716
+ .openpress-print-document *::after {
717
+ -webkit-print-color-adjust: exact;
718
+ print-color-adjust: exact;
719
+ }
720
+
721
+ .openpress-print-document .reader-pages {
722
+ display: block;
723
+ width: var(--openpress-page-width);
724
+ min-height: 0;
725
+ padding: 0;
726
+ margin: 0;
727
+ background: #fff;
728
+ --reader-page-width: var(--openpress-page-width);
729
+ }
730
+
731
+ .openpress-print-document .openpress-html-page {
732
+ display: block;
733
+ width: var(--openpress-page-width);
734
+ max-width: none;
735
+ height: var(--openpress-page-height);
736
+ min-height: var(--openpress-page-height);
737
+ margin: 0;
738
+ overflow: hidden;
739
+ background: #fff;
740
+ break-after: page;
741
+ break-inside: avoid;
742
+ page-break-after: always;
743
+ page-break-inside: avoid;
744
+ scroll-margin-top: 0;
745
+ }
746
+
747
+ .openpress-print-document .openpress-html-page:last-child {
748
+ break-after: auto;
749
+ page-break-after: auto;
750
+ }
751
+
752
+ .openpress-print-document .openpress-html-page__html {
753
+ display: block;
754
+ width: var(--openpress-page-width);
755
+ max-width: none;
756
+ height: var(--openpress-page-height);
757
+ min-height: var(--openpress-page-height);
758
+ max-height: none;
759
+ margin: 0;
760
+ overflow: hidden;
761
+ background: #fff;
762
+ box-shadow: none;
763
+ outline: 0;
764
+ transform: none;
765
+ animation: none;
766
+ transition: none;
767
+ }
768
+
769
+ .openpress-print-document .openpress-html-page__html .reader-page,
770
+ .openpress-print-document .openpress-html-page__html .reader-page--cover,
771
+ .openpress-print-document .openpress-html-page__html .reader-page--back-cover {
772
+ display: block;
773
+ width: var(--openpress-page-width);
774
+ max-width: none;
775
+ height: var(--openpress-page-height);
776
+ aspect-ratio: var(--openpress-page-aspect-ratio, 210 / 297);
777
+ min-height: var(--openpress-page-height);
778
+ max-height: none;
779
+ margin: 0;
780
+ overflow: hidden;
781
+ box-shadow: none;
782
+ outline: 0;
783
+ transform: none;
784
+ animation: none;
785
+ transition: none;
786
+ }
787
+
788
+ .openpress-print-document .openpress-html-page__html .reader-page--cover,
789
+ .openpress-print-document .openpress-html-page__html .reader-page--back-cover {
790
+ display: flex;
791
+ padding: clamp(28px, 5cqw, 48px) clamp(24px, 4.5cqw, 42px);
792
+ }