@open-press/cli 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 (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/cli.js +365 -0
  4. package/package.json +57 -0
  5. package/template/core/.turbo/turbo-test.log +341 -0
  6. package/template/core/CHANGELOG.md +11 -0
  7. package/template/core/README.md +36 -0
  8. package/template/core/engine/chrome-pdf.d.mts +34 -0
  9. package/template/core/engine/chrome-pdf.mjs +344 -0
  10. package/template/core/engine/cli.mjs +93 -0
  11. package/template/core/engine/commands/_shared.mjs +170 -0
  12. package/template/core/engine/commands/deploy.mjs +31 -0
  13. package/template/core/engine/commands/dev.mjs +26 -0
  14. package/template/core/engine/commands/export.mjs +8 -0
  15. package/template/core/engine/commands/init.mjs +24 -0
  16. package/template/core/engine/commands/inspect.mjs +35 -0
  17. package/template/core/engine/commands/migrate-to-react.mjs +27 -0
  18. package/template/core/engine/commands/pdf.mjs +26 -0
  19. package/template/core/engine/commands/preview.mjs +26 -0
  20. package/template/core/engine/commands/render.mjs +17 -0
  21. package/template/core/engine/commands/replace.mjs +41 -0
  22. package/template/core/engine/commands/search.mjs +33 -0
  23. package/template/core/engine/commands/typecheck.mjs +5 -0
  24. package/template/core/engine/commands/validate.mjs +17 -0
  25. package/template/core/engine/config.d.mts +40 -0
  26. package/template/core/engine/config.mjs +160 -0
  27. package/template/core/engine/deploy-sync.mjs +15 -0
  28. package/template/core/engine/document-export.mjs +15 -0
  29. package/template/core/engine/file-utils.mjs +106 -0
  30. package/template/core/engine/fonts.mjs +62 -0
  31. package/template/core/engine/init.mjs +90 -0
  32. package/template/core/engine/inspection.mjs +348 -0
  33. package/template/core/engine/issue-report.mjs +44 -0
  34. package/template/core/engine/katex-assets.mjs +45 -0
  35. package/template/core/engine/page-block.mjs +30 -0
  36. package/template/core/engine/page-renderer.mjs +217 -0
  37. package/template/core/engine/pdf-media.mjs +45 -0
  38. package/template/core/engine/public-assets.mjs +19 -0
  39. package/template/core/engine/react/chapter-css.mjs +53 -0
  40. package/template/core/engine/react/comment-endpoint.d.mts +11 -0
  41. package/template/core/engine/react/comment-endpoint.mjs +128 -0
  42. package/template/core/engine/react/comment-marker.mjs +306 -0
  43. package/template/core/engine/react/document-entry.mjs +253 -0
  44. package/template/core/engine/react/document-export.mjs +392 -0
  45. package/template/core/engine/react/mdx-compile.mjs +295 -0
  46. package/template/core/engine/react/measurement-css.mjs +44 -0
  47. package/template/core/engine/react/migrate-to-react.mjs +355 -0
  48. package/template/core/engine/react/pagination-constants.mjs +3 -0
  49. package/template/core/engine/react/pagination.mjs +121 -0
  50. package/template/core/engine/react/project-asset-endpoint.d.mts +10 -0
  51. package/template/core/engine/react/project-asset-endpoint.mjs +379 -0
  52. package/template/core/engine/react/workspace-discovery.mjs +156 -0
  53. package/template/core/engine/source-text-tools.mjs +280 -0
  54. package/template/core/engine/source-workspace.mjs +76 -0
  55. package/template/core/engine/static-server.mjs +493 -0
  56. package/template/core/engine/validation.mjs +172 -0
  57. package/template/core/index.html +13 -0
  58. package/template/core/openpress.config.mjs +12 -0
  59. package/template/core/package.json +86 -0
  60. package/template/core/src/main.tsx +16 -0
  61. package/template/core/src/openpress/App.tsx +127 -0
  62. package/template/core/src/openpress/composerMentions.ts +188 -0
  63. package/template/core/src/openpress/core/basePages.tsx +87 -0
  64. package/template/core/src/openpress/core/index.tsx +20 -0
  65. package/template/core/src/openpress/core/types.ts +71 -0
  66. package/template/core/src/openpress/frameScheduler.ts +32 -0
  67. package/template/core/src/openpress/indexes.ts +329 -0
  68. package/template/core/src/openpress/inspector.ts +282 -0
  69. package/template/core/src/openpress/pageRoute.ts +21 -0
  70. package/template/core/src/openpress/pagination.ts +845 -0
  71. package/template/core/src/openpress/projectIdentity.ts +15 -0
  72. package/template/core/src/openpress/projectSources.ts +24 -0
  73. package/template/core/src/openpress/projectWorkspace.tsx +919 -0
  74. package/template/core/src/openpress/publicPage.tsx +469 -0
  75. package/template/core/src/openpress/reactDocumentMetadata.ts +41 -0
  76. package/template/core/src/openpress/readerPageRegistry.ts +41 -0
  77. package/template/core/src/openpress/readerRuntime.ts +230 -0
  78. package/template/core/src/openpress/readerScroll.ts +92 -0
  79. package/template/core/src/openpress/readerState.ts +15 -0
  80. package/template/core/src/openpress/renderer.tsx +91 -0
  81. package/template/core/src/openpress/runtimeMode.ts +22 -0
  82. package/template/core/src/openpress/types.ts +112 -0
  83. package/template/core/src/openpress/workbench.tsx +1299 -0
  84. package/template/core/src/openpress/workbenchPanels.tsx +122 -0
  85. package/template/core/src/openpress/workbenchTypes.ts +4 -0
  86. package/template/core/src/styles/openpress/app-shell.css +251 -0
  87. package/template/core/src/styles/openpress/media-workspace.css +230 -0
  88. package/template/core/src/styles/openpress/print-route.css +186 -0
  89. package/template/core/src/styles/openpress/project-workspace.css +1318 -0
  90. package/template/core/src/styles/openpress/public-viewer.css +983 -0
  91. package/template/core/src/styles/openpress/reader-runtime.css +792 -0
  92. package/template/core/src/styles/openpress/responsive.css +384 -0
  93. package/template/core/src/styles/openpress/workbench-panels.css +558 -0
  94. package/template/core/src/styles/openpress/workbench.css +720 -0
  95. package/template/core/src/styles/openpress.css +14 -0
  96. package/template/core/src/vite-env.d.ts +9 -0
  97. package/template/core/tsconfig.json +37 -0
  98. package/template/core/vite.config.ts +512 -0
  99. package/template/skills/chinese-ai-writing-polish/SKILL.md +195 -0
  100. package/template/skills/claude-document/SKILL.md +66 -0
  101. package/template/skills/claude-document/starter/document/chapters/01-document-shape/chapter.tsx +30 -0
  102. package/template/skills/claude-document/starter/document/chapters/01-document-shape/content/01-document-shape.mdx +51 -0
  103. package/template/skills/claude-document/starter/document/chapters/02-review-loop/chapter.tsx +30 -0
  104. package/template/skills/claude-document/starter/document/chapters/02-review-loop/content/01-review-loop.mdx +31 -0
  105. package/template/skills/claude-document/starter/document/components/ChapterOpenerVisual.tsx +96 -0
  106. package/template/skills/claude-document/starter/document/components/Page.tsx +27 -0
  107. package/template/skills/claude-document/starter/document/design.md +142 -0
  108. package/template/skills/claude-document/starter/document/index.tsx +89 -0
  109. package/template/skills/claude-document/starter/document/media/README.md +13 -0
  110. package/template/skills/claude-document/starter/document/openpress.config.mjs +26 -0
  111. package/template/skills/claude-document/starter/document/theme/README.md +15 -0
  112. package/template/skills/claude-document/starter/document/theme/base/page-contract.css +525 -0
  113. package/template/skills/claude-document/starter/document/theme/base/print.css +93 -0
  114. package/template/skills/claude-document/starter/document/theme/base/typography.css +612 -0
  115. package/template/skills/claude-document/starter/document/theme/fonts.css +4 -0
  116. package/template/skills/claude-document/starter/document/theme/page-surfaces/back-cover.css +72 -0
  117. package/template/skills/claude-document/starter/document/theme/page-surfaces/chapter-opener.css +236 -0
  118. package/template/skills/claude-document/starter/document/theme/page-surfaces/cover.css +309 -0
  119. package/template/skills/claude-document/starter/document/theme/page-surfaces/toc.css +213 -0
  120. package/template/skills/claude-document/starter/document/theme/patterns/_chart-frame.css +53 -0
  121. package/template/skills/claude-document/starter/document/theme/patterns/figure-grid.css +68 -0
  122. package/template/skills/claude-document/starter/document/theme/patterns/table-utilities.css +66 -0
  123. package/template/skills/claude-document/starter/document/theme/shell/reader-controls.css +789 -0
  124. package/template/skills/claude-document/starter/document/theme/tokens.css +89 -0
  125. package/template/skills/claude-document/starter/openpress.config.mjs +5 -0
  126. package/template/skills/editorial-monograph/SKILL.md +73 -0
  127. package/template/skills/editorial-monograph/starter/document/chapters/01-product-and-use-cases/content/01-product-and-use-cases.mdx +31 -0
  128. package/template/skills/editorial-monograph/starter/document/chapters/02-workflow/content/01-workflow.mdx +89 -0
  129. package/template/skills/editorial-monograph/starter/document/chapters/03-agent-skills-contributors/content/01-agent-skills-contributors.mdx +52 -0
  130. package/template/skills/editorial-monograph/starter/document/chapters/04-validation-deploy/content/01-validation-deploy.mdx +39 -0
  131. package/template/skills/editorial-monograph/starter/document/components/ChapterOpenerVisual/index.tsx +76 -0
  132. package/template/skills/editorial-monograph/starter/document/components/Page.tsx +27 -0
  133. package/template/skills/editorial-monograph/starter/document/components/TokenSwatchGrid/index.tsx +46 -0
  134. package/template/skills/editorial-monograph/starter/document/components/TokenSwatchGrid/style.css +63 -0
  135. package/template/skills/editorial-monograph/starter/document/components/TypeSpecimen/index.tsx +38 -0
  136. package/template/skills/editorial-monograph/starter/document/components/TypeSpecimen/style.css +111 -0
  137. package/template/skills/editorial-monograph/starter/document/design.md +279 -0
  138. package/template/skills/editorial-monograph/starter/document/index.tsx +73 -0
  139. package/template/skills/editorial-monograph/starter/document/media/README.md +13 -0
  140. package/template/skills/editorial-monograph/starter/document/openpress.config.mjs +26 -0
  141. package/template/skills/editorial-monograph/starter/document/theme/README.md +11 -0
  142. package/template/skills/editorial-monograph/starter/document/theme/base/page-contract.css +505 -0
  143. package/template/skills/editorial-monograph/starter/document/theme/base/print.css +93 -0
  144. package/template/skills/editorial-monograph/starter/document/theme/base/typography.css +336 -0
  145. package/template/skills/editorial-monograph/starter/document/theme/fonts.css +3 -0
  146. package/template/skills/editorial-monograph/starter/document/theme/page-surfaces/back-cover.css +43 -0
  147. package/template/skills/editorial-monograph/starter/document/theme/page-surfaces/chapter-opener.css +205 -0
  148. package/template/skills/editorial-monograph/starter/document/theme/page-surfaces/cover.css +147 -0
  149. package/template/skills/editorial-monograph/starter/document/theme/page-surfaces/toc.css +139 -0
  150. package/template/skills/editorial-monograph/starter/document/theme/patterns/_chart-frame.css +49 -0
  151. package/template/skills/editorial-monograph/starter/document/theme/patterns/figure-grid.css +68 -0
  152. package/template/skills/editorial-monograph/starter/document/theme/patterns/table-utilities.css +66 -0
  153. package/template/skills/editorial-monograph/starter/document/theme/shell/reader-controls.css +761 -0
  154. package/template/skills/editorial-monograph/starter/document/theme/tokens.css +80 -0
  155. package/template/skills/editorial-monograph/starter/openpress.config.mjs +5 -0
  156. package/template/skills/openpress/SKILL.md +114 -0
  157. package/template/skills/openpress/references/cli-commands.md +31 -0
  158. package/template/skills/openpress/references/local-review.md +43 -0
  159. package/template/skills/openpress-deploy/SKILL.md +69 -0
  160. package/template/skills/openpress-deploy/references/cloudflare-pages.md +51 -0
  161. package/template/skills/openpress-design/SKILL.md +51 -0
  162. package/template/skills/openpress-design/references/pdf-safe-css.md +29 -0
  163. package/template/skills/openpress-design/references/responsive-fixed-layout.md +48 -0
  164. package/template/skills/openpress-design/references/theme-and-components.md +77 -0
  165. package/template/skills/openpress-diagram-drawing/SKILL.md +44 -0
  166. package/template/skills/openpress-diagram-drawing/references/diagram-patterns.md +93 -0
  167. package/template/skills/openpress-document-hierarchy/SKILL.md +81 -0
  168. package/template/skills/openpress-document-hierarchy/agents/openai.yaml +4 -0
  169. package/template/skills/openpress-document-hierarchy/references/data-structures-outline.md +115 -0
  170. package/template/skills/openpress-init/SKILL.md +84 -0
  171. package/template/skills/openpress-style-pack-contributor/SKILL.md +62 -0
  172. package/template/skills/openpress-style-pack-contributor/references/starter-contract.md +49 -0
  173. package/template/skills/openpress-update/SKILL.md +88 -0
  174. package/template/skills/openpress-writing/SKILL.md +68 -0
  175. package/template/skills/openpress-writing/references/source-and-writing-rules.md +120 -0
  176. package/template/skills/teaching-notes-writing/SKILL.md +54 -0
  177. package/template/skills/teaching-notes-writing/references/programming.md +65 -0
  178. package/template/skills/teaching-notes-writing/references/teaching-patterns.md +60 -0
@@ -0,0 +1,213 @@
1
+ /* page-surfaces / toc
2
+ * Table-of-contents page surface routed by `kind: toc` and built by the
3
+ * engine's renderToc(). Layout uses a 3-column grid (index / title / page).
4
+ */
5
+
6
+ .reader-page--toc {
7
+ padding: 0;
8
+ }
9
+
10
+ .reader-page--toc h2 {
11
+ margin-top: 0;
12
+ font-family: var(--openpress-font-serif);
13
+ font-weight: 300;
14
+ letter-spacing: 0;
15
+ font-size: clamp(
16
+ calc(18pt - var(--openpress-type-step-down)),
17
+ calc(4cqw - var(--openpress-type-step-down)),
18
+ calc(28pt - var(--openpress-type-step-down))
19
+ );
20
+ border-bottom: 0;
21
+ padding-bottom: 0;
22
+ color: var(--openpress-color-ink);
23
+ }
24
+
25
+ .reader-page--toc h2.toc-heading--continuation {
26
+ display: none;
27
+ }
28
+
29
+ .toc-list {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 0.45mm;
33
+ margin: 11mm 0 0;
34
+ padding: 0;
35
+ list-style: none;
36
+ counter-reset: openpress-toc-index;
37
+ }
38
+
39
+ .toc-continuation .toc-list {
40
+ margin-top: 0;
41
+ }
42
+
43
+ .toc-list li {
44
+ border-bottom: 0;
45
+ }
46
+
47
+ .toc-list .toc-level-2 {
48
+ counter-increment: openpress-toc-index;
49
+ margin-top: 5.8mm;
50
+ }
51
+
52
+ .toc-list a {
53
+ display: grid;
54
+ grid-template-columns: 10mm minmax(0, 1fr) 12mm;
55
+ column-gap: 3.4mm;
56
+ align-items: baseline;
57
+ color: var(--openpress-color-ink);
58
+ text-decoration: none;
59
+ padding: 1.6mm 0;
60
+ font-weight: 400;
61
+ line-height: 1.38;
62
+ }
63
+
64
+ .toc-list a:hover .toc-title {
65
+ color: var(--openpress-color-muted);
66
+ }
67
+
68
+ .toc-index {
69
+ display: inline-block;
70
+ width: auto;
71
+ height: auto;
72
+ border: 0;
73
+ background: transparent;
74
+ color: var(--openpress-color-muted);
75
+ font-family: var(--openpress-font-mono);
76
+ font-variant-numeric: tabular-nums;
77
+ font-weight: 400;
78
+ letter-spacing: 0;
79
+ font-size: calc(8pt - var(--openpress-type-step-down));
80
+ text-align: left;
81
+ }
82
+
83
+ .toc-index {
84
+ font-size: 0;
85
+ }
86
+
87
+ .toc-index::before {
88
+ content: attr(data-toc-index);
89
+ font-size: calc(9.5pt - var(--openpress-type-step-down));
90
+ }
91
+
92
+ .toc-level-2 a {
93
+ margin-top: 0;
94
+ padding: 2.9mm 0 1.9mm;
95
+ border-top: 0;
96
+ }
97
+
98
+ .toc-level-2:first-child {
99
+ margin-top: 0;
100
+ }
101
+
102
+ .toc-level-2 .toc-index::before {
103
+ color: var(--openpress-color-muted);
104
+ font-size: calc(10.6pt - var(--openpress-type-step-down));
105
+ }
106
+
107
+ .toc-level-2 .toc-title {
108
+ color: var(--openpress-color-ink);
109
+ font-size: calc(12.8pt - var(--openpress-type-step-down));
110
+ font-weight: 500;
111
+ }
112
+
113
+ .toc-level-2 .toc-title::after {
114
+ content: none;
115
+ }
116
+
117
+ .toc-level-2 .toc-page {
118
+ color: var(--openpress-color-ink);
119
+ font-size: calc(10.4pt - var(--openpress-type-step-down));
120
+ }
121
+
122
+ .toc-level-3 a {
123
+ grid-template-columns: 10mm minmax(0, 1fr) 12mm;
124
+ padding: 1.12mm 0 1.12mm 7.5mm;
125
+ color: var(--openpress-color-muted);
126
+ font-size: calc(11pt - var(--openpress-type-step-down));
127
+ }
128
+
129
+ .toc-level-3 .toc-index::before {
130
+ color: var(--openpress-color-muted);
131
+ font-size: calc(10pt - var(--openpress-type-step-down));
132
+ }
133
+
134
+ .toc-level-3 .toc-page {
135
+ font-size: calc(10.2pt - var(--openpress-type-step-down));
136
+ }
137
+
138
+ .toc-title {
139
+ display: flex;
140
+ gap: 3mm;
141
+ align-items: baseline;
142
+ color: var(--openpress-color-ink);
143
+ }
144
+
145
+ .toc-title::after {
146
+ content: "";
147
+ flex: 1;
148
+ min-width: 10mm;
149
+ border-bottom: 1px dotted var(--openpress-color-line-strong);
150
+ transform: translateY(-0.22em);
151
+ }
152
+
153
+ .toc-page {
154
+ color: var(--openpress-color-muted);
155
+ font-family: var(--openpress-font-mono);
156
+ font-variant-numeric: tabular-nums;
157
+ font-weight: 400;
158
+ font-size: calc(10.2pt - var(--openpress-type-step-down));
159
+ justify-self: end;
160
+ min-width: 10mm;
161
+ text-align: right;
162
+ }
163
+
164
+ /* Dark editorial contents surface, aligned with cover/back-cover. */
165
+ .reader-page--toc {
166
+ --toc-ink: #f7f9fb;
167
+ --toc-muted: rgba(247, 249, 251, 0.68);
168
+ --toc-line: rgba(247, 249, 251, 0.22);
169
+ --toc-leader: rgba(247, 249, 251, 0.28);
170
+ color: var(--toc-ink);
171
+ background-color: #a95f32;
172
+ background-image: none;
173
+ }
174
+
175
+ .reader-page--toc .page-frame {
176
+ display: block;
177
+ background: transparent;
178
+ }
179
+
180
+ .reader-page--toc .page-body {
181
+ height: 100%;
182
+ }
183
+
184
+ .reader-page--toc .page-header,
185
+ .reader-page--toc .page-footer {
186
+ display: none;
187
+ }
188
+
189
+ .reader-page--toc h2,
190
+ .toc-list a,
191
+ .toc-title,
192
+ .toc-level-2 .toc-title,
193
+ .toc-level-2 .toc-page {
194
+ color: var(--toc-ink);
195
+ }
196
+
197
+ .reader-page--toc h2.toc-heading--continuation,
198
+ .toc-index,
199
+ .toc-index::before,
200
+ .toc-level-2 .toc-index::before,
201
+ .toc-level-3 a,
202
+ .toc-level-3 .toc-index::before,
203
+ .toc-page {
204
+ color: var(--toc-muted);
205
+ }
206
+
207
+ .toc-list a:hover .toc-title {
208
+ color: var(--toc-muted);
209
+ }
210
+
211
+ .toc-title::after {
212
+ border-bottom-color: var(--toc-leader);
213
+ }
@@ -0,0 +1,53 @@
1
+ /* _chart-frame.css
2
+ * 共用圖表外框。文件圖表只要在 figure 上掛 chart-frame,
3
+ * 元件自己的 class 只負責內部結構樣式。
4
+ */
5
+
6
+ .reader-page--content .page-body > figure.chart-frame,
7
+ :where(.chart-frame) {
8
+ width: 100%;
9
+ max-width: none;
10
+ margin: var(--openpress-space-3) 0 var(--openpress-space-4);
11
+ margin-left: 0;
12
+ margin-right: 0;
13
+ padding: var(--openpress-space-2);
14
+ border: 1px solid rgba(0, 0, 0, 0.07);
15
+ background: var(--openpress-color-block);
16
+ box-sizing: border-box;
17
+ break-inside: avoid;
18
+ }
19
+
20
+ :where(.chart-frame) figcaption {
21
+ margin-top: var(--openpress-space-2);
22
+ color: var(--openpress-color-muted);
23
+ font-size: clamp(
24
+ calc(10px - var(--openpress-type-step-down)),
25
+ calc(1.05cqw - var(--openpress-type-step-down)),
26
+ calc(11px - var(--openpress-type-step-down))
27
+ );
28
+ line-height: 1.55;
29
+ letter-spacing: 0.04em;
30
+ text-align: center;
31
+ }
32
+
33
+ .reader-page--content .page-body > figure svg,
34
+ :where(.chart-frame) svg {
35
+ display: block;
36
+ max-width: 100%;
37
+ height: auto;
38
+ overflow: visible;
39
+ }
40
+
41
+ @media screen and (max-width: 899px) {
42
+ .reader-page--content .page-body > figure.chart-frame,
43
+ :where(.chart-frame) {
44
+ max-height: 100%;
45
+ }
46
+
47
+ .reader-page--content .page-body > figure svg,
48
+ :where(.chart-frame) svg {
49
+ width: 100%;
50
+ max-height: 100%;
51
+ object-fit: contain;
52
+ }
53
+ }
@@ -0,0 +1,68 @@
1
+ /* figure-grid
2
+ * Reusable image grid pattern for inline Markdown/HTML figures.
3
+ */
4
+
5
+ table.figure-grid {
6
+ border: 0;
7
+ background: transparent;
8
+ table-layout: fixed;
9
+ }
10
+
11
+ div.figure-grid {
12
+ display: grid;
13
+ grid-template-columns: repeat(2, minmax(0, 1fr));
14
+ gap: 4mm;
15
+ margin: var(--openpress-space-4) 0 var(--openpress-space-2);
16
+ break-inside: avoid;
17
+ }
18
+
19
+ table.figure-grid td {
20
+ border: 0;
21
+ padding: 0 2mm 3mm;
22
+ vertical-align: top;
23
+ }
24
+
25
+ table.figure-grid figure,
26
+ div.figure-grid figure {
27
+ margin-top: 0;
28
+ margin-bottom: 0;
29
+ }
30
+
31
+ .figure-grid img {
32
+ width: auto;
33
+ height: auto;
34
+ max-width: 100%;
35
+ max-height: 62mm;
36
+ }
37
+
38
+ /* Three-column triptych: one lead figure plus two siblings, centered on the
39
+ * page. Use this when a section needs a coordinated trio of images at a fixed
40
+ * aspect ratio (e.g. founder profile, milestone photo set). */
41
+ div.figure-grid--triptych {
42
+ grid-template-columns: repeat(3, minmax(0, 1fr));
43
+ gap: 3mm;
44
+ width: min(92%, 156mm);
45
+ margin: var(--openpress-space-4) auto var(--openpress-space-2);
46
+ }
47
+
48
+ div.figure-grid--triptych figure {
49
+ display: flex;
50
+ flex-direction: column;
51
+ align-items: center;
52
+ margin: 0;
53
+ }
54
+
55
+ div.figure-grid--triptych img {
56
+ width: 100%;
57
+ max-height: none;
58
+ aspect-ratio: 3 / 2;
59
+ object-fit: cover;
60
+ }
61
+
62
+ div.figure-grid--triptych .figure-grid__lead img {
63
+ aspect-ratio: 4 / 3;
64
+ }
65
+
66
+ div.figure-grid--triptych figcaption {
67
+ text-align: left;
68
+ }
@@ -0,0 +1,66 @@
1
+ /* table-utilities
2
+ * Semantic table helpers used by content Markdown.
3
+ */
4
+
5
+ .cell-check,
6
+ .cell-partial,
7
+ .cell-dash {
8
+ display: inline-block;
9
+ font-feature-settings: "tnum";
10
+ line-height: 1;
11
+ }
12
+
13
+ .cell-check {
14
+ color: var(--openpress-status-success);
15
+ font-weight: 600;
16
+ }
17
+
18
+ .cell-partial {
19
+ color: var(--openpress-status-warn);
20
+ font-weight: 500;
21
+ }
22
+
23
+ .cell-dash {
24
+ color: var(--openpress-color-text-placeholder);
25
+ letter-spacing: -0.04em;
26
+ }
27
+
28
+ .status-text {
29
+ display: inline;
30
+ font-size: inherit;
31
+ line-height: inherit;
32
+ white-space: nowrap;
33
+ }
34
+
35
+ .status-live {
36
+ color: var(--openpress-status-success);
37
+ }
38
+
39
+ .status-building {
40
+ color: var(--openpress-status-info);
41
+ }
42
+
43
+ .status-planned {
44
+ color: var(--openpress-color-muted);
45
+ }
46
+
47
+ .status-ai-full {
48
+ color: var(--openpress-status-info);
49
+ }
50
+
51
+ .status-ai-partial {
52
+ color: var(--openpress-status-warn);
53
+ }
54
+
55
+ td.numeric,
56
+ th.numeric {
57
+ text-align: right;
58
+ font-variant-numeric: tabular-nums;
59
+ white-space: nowrap;
60
+ }
61
+
62
+ td.savings-rate,
63
+ th.savings-rate {
64
+ color: var(--openpress-color-green);
65
+ font-weight: 600;
66
+ }