@open-press/cli 0.8.0 → 1.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.
Files changed (153) hide show
  1. package/README.md +25 -14
  2. package/dist/cli.js +44 -195
  3. package/package.json +4 -5
  4. package/template/core/AGENTS.md +18 -14
  5. package/template/core/CHANGELOG.md +12 -9
  6. package/template/core/README.md +6 -3
  7. package/template/core/engine/cli.mjs +8 -8
  8. package/template/core/engine/commands/_shared.mjs +37 -15
  9. package/template/core/engine/commands/image.mjs +29 -0
  10. package/template/core/engine/commands/skills-sync.mjs +71 -0
  11. package/template/core/engine/commands/typecheck.mjs +63 -1
  12. package/template/core/engine/commands/upgrade.mjs +3 -3
  13. package/template/core/engine/document-export.mjs +1 -1
  14. package/template/core/engine/output/chrome-pdf.mjs +92 -0
  15. package/template/core/engine/output/static-server.mjs +48 -9
  16. package/template/core/engine/react/comment-marker.mjs +13 -13
  17. package/template/core/engine/react/document-entry.mjs +35 -28
  18. package/template/core/engine/react/document-export.mjs +309 -170
  19. package/template/core/engine/react/mdx-compile.mjs +30 -0
  20. package/template/core/engine/react/measurement-css.mjs +21 -0
  21. package/template/core/engine/react/object-entities.mjs +85 -0
  22. package/template/core/engine/react/pagination/allocator.mjs +48 -3
  23. package/template/core/engine/react/pagination.mjs +1 -1
  24. package/template/core/engine/react/pipeline/allocate.mjs +31 -65
  25. package/template/core/engine/react/pipeline/frame-measurement.mjs +4 -0
  26. package/template/core/engine/react/press-tree-inspection.mjs +172 -0
  27. package/template/core/engine/react/sources/mdx-resolver.mjs +1 -1
  28. package/template/core/engine/react/style-discovery.mjs +22 -4
  29. package/template/core/engine/runtime/config.d.mts +8 -0
  30. package/template/core/engine/runtime/config.mjs +57 -60
  31. package/template/core/engine/runtime/file-utils.mjs +9 -1
  32. package/template/core/engine/runtime/page-geometry.mjs +131 -0
  33. package/template/core/engine/runtime/source-text-tools.mjs +1 -1
  34. package/template/core/engine/runtime/source-workspace.mjs +12 -3
  35. package/template/core/engine/runtime/validation.mjs +19 -10
  36. package/template/core/openpress.config.mjs +3 -7
  37. package/template/core/package.json +3 -5
  38. package/template/core/src/openpress/app/OpenPressApp.tsx +173 -17
  39. package/template/core/src/openpress/app/OpenPressRuntime.tsx +10 -2
  40. package/template/core/src/openpress/app/WorkspaceGalleryPage.tsx +219 -0
  41. package/template/core/src/openpress/core/Frame.tsx +20 -7
  42. package/template/core/src/openpress/core/FrameContext.tsx +2 -0
  43. package/template/core/src/openpress/core/Press.tsx +25 -4
  44. package/template/core/src/openpress/core/Workspace.tsx +36 -0
  45. package/template/core/src/openpress/core/index.tsx +10 -3
  46. package/template/core/src/openpress/core/primitives.tsx +48 -1
  47. package/template/core/src/openpress/core/types.ts +86 -41
  48. package/template/core/src/openpress/core/useSource.ts +1 -1
  49. package/template/core/src/openpress/document-model/documentTypes.ts +9 -0
  50. package/template/core/src/openpress/document-model/index.ts +1 -0
  51. package/template/core/src/openpress/document-model/objectEntityModel.ts +4 -0
  52. package/template/core/src/openpress/document-model/workspaceManifestModel.ts +57 -0
  53. package/template/core/src/openpress/mdx/index.ts +15 -7
  54. package/template/core/src/openpress/reader/PageThumbnailsPanel.tsx +168 -0
  55. package/template/core/src/openpress/reader/index.ts +1 -0
  56. package/template/core/src/openpress/workbench/Workbench.tsx +120 -21
  57. package/template/core/src/openpress/workbench/actions/ExportImageControl.tsx +96 -0
  58. package/template/core/src/openpress/workbench/actions/SearchControl.tsx +3 -3
  59. package/template/core/src/openpress/workbench/actions/index.ts +1 -0
  60. package/template/core/src/openpress/workbench/inspector/useInspectorComments.ts +7 -1
  61. package/template/core/src/openpress/workbench/panels/PendingCommentsPanel.tsx +5 -1
  62. package/template/core/src/openpress/workbench/project/ProjectEntryPanel.tsx +4 -2
  63. package/template/core/src/openpress/workbench/workbenchFormatters.ts +2 -2
  64. package/template/core/src/styles/openpress/reader-runtime.css +9 -0
  65. package/template/core/src/styles/openpress/workbench-panels.css +113 -0
  66. package/template/core/src/styles/openpress/workspace-gallery.css +300 -0
  67. package/template/core/src/styles/openpress.css +1 -0
  68. package/template/core/tsconfig.json +1 -1
  69. package/template/core/engine/commands/init.mjs +0 -24
  70. package/template/core/engine/init.mjs +0 -90
  71. package/template/packs/academic-paper/document/chapters/01-introduction/content/01-introduction.mdx +0 -35
  72. package/template/packs/academic-paper/document/chapters/02-methods/content/01-methods.mdx +0 -50
  73. package/template/packs/academic-paper/document/chapters/03-results-and-discussion/content/01-results.mdx +0 -47
  74. package/template/packs/academic-paper/document/chapters/04-acknowledgment/content/01-acknowledgment.mdx +0 -26
  75. package/template/packs/academic-paper/document/chapters/05-references/content/01-references.mdx +0 -32
  76. package/template/packs/academic-paper/document/components/ChapterOpenerVisual/index.tsx +0 -76
  77. package/template/packs/academic-paper/document/components/Page.tsx +0 -60
  78. package/template/packs/academic-paper/document/components/TokenSwatchGrid/index.tsx +0 -46
  79. package/template/packs/academic-paper/document/components/TokenSwatchGrid/style.css +0 -63
  80. package/template/packs/academic-paper/document/components/TypeSpecimen/index.tsx +0 -38
  81. package/template/packs/academic-paper/document/components/TypeSpecimen/style.css +0 -111
  82. package/template/packs/academic-paper/document/design.md +0 -279
  83. package/template/packs/academic-paper/document/index.tsx +0 -123
  84. package/template/packs/academic-paper/document/media/README.md +0 -13
  85. package/template/packs/academic-paper/document/media/figure-placeholder.svg +0 -9
  86. package/template/packs/academic-paper/document/openpress.config.mjs +0 -26
  87. package/template/packs/academic-paper/document/theme/README.md +0 -11
  88. package/template/packs/academic-paper/document/theme/base/page-contract.css +0 -522
  89. package/template/packs/academic-paper/document/theme/base/print.css +0 -93
  90. package/template/packs/academic-paper/document/theme/base/typography.css +0 -333
  91. package/template/packs/academic-paper/document/theme/fonts.css +0 -3
  92. package/template/packs/academic-paper/document/theme/page-surfaces/back-cover.css +0 -43
  93. package/template/packs/academic-paper/document/theme/page-surfaces/chapter-opener.css +0 -205
  94. package/template/packs/academic-paper/document/theme/page-surfaces/cover.css +0 -294
  95. package/template/packs/academic-paper/document/theme/page-surfaces/toc.css +0 -149
  96. package/template/packs/academic-paper/document/theme/patterns/_chart-frame.css +0 -49
  97. package/template/packs/academic-paper/document/theme/patterns/figure-grid.css +0 -68
  98. package/template/packs/academic-paper/document/theme/patterns/table-utilities.css +0 -66
  99. package/template/packs/academic-paper/document/theme/shell/reader-controls.css +0 -761
  100. package/template/packs/academic-paper/document/theme/tokens.css +0 -80
  101. package/template/packs/academic-paper/openpress.config.mjs +0 -5
  102. package/template/packs/claude-document/document/chapters/01-document-shape/content/01-document-shape.mdx +0 -51
  103. package/template/packs/claude-document/document/chapters/02-review-loop/content/01-review-loop.mdx +0 -31
  104. package/template/packs/claude-document/document/components/ChapterOpenerVisual.tsx +0 -96
  105. package/template/packs/claude-document/document/components/Page.tsx +0 -37
  106. package/template/packs/claude-document/document/design.md +0 -142
  107. package/template/packs/claude-document/document/index.tsx +0 -94
  108. package/template/packs/claude-document/document/media/README.md +0 -13
  109. package/template/packs/claude-document/document/openpress.config.mjs +0 -26
  110. package/template/packs/claude-document/document/theme/README.md +0 -15
  111. package/template/packs/claude-document/document/theme/base/page-contract.css +0 -525
  112. package/template/packs/claude-document/document/theme/base/print.css +0 -93
  113. package/template/packs/claude-document/document/theme/base/typography.css +0 -612
  114. package/template/packs/claude-document/document/theme/fonts.css +0 -4
  115. package/template/packs/claude-document/document/theme/page-surfaces/back-cover.css +0 -72
  116. package/template/packs/claude-document/document/theme/page-surfaces/chapter-opener.css +0 -236
  117. package/template/packs/claude-document/document/theme/page-surfaces/cover.css +0 -309
  118. package/template/packs/claude-document/document/theme/page-surfaces/toc.css +0 -225
  119. package/template/packs/claude-document/document/theme/patterns/_chart-frame.css +0 -53
  120. package/template/packs/claude-document/document/theme/patterns/figure-grid.css +0 -68
  121. package/template/packs/claude-document/document/theme/patterns/table-utilities.css +0 -66
  122. package/template/packs/claude-document/document/theme/shell/reader-controls.css +0 -789
  123. package/template/packs/claude-document/document/theme/tokens.css +0 -89
  124. package/template/packs/claude-document/openpress.config.mjs +0 -5
  125. package/template/packs/editorial-monograph/document/chapters/01-product-and-use-cases/content/01-product-and-use-cases.mdx +0 -31
  126. package/template/packs/editorial-monograph/document/chapters/02-workflow/content/01-workflow.mdx +0 -89
  127. package/template/packs/editorial-monograph/document/chapters/03-agent-skills-contributors/content/01-agent-skills-contributors.mdx +0 -51
  128. package/template/packs/editorial-monograph/document/chapters/04-validation-deploy/content/01-validation-deploy.mdx +0 -39
  129. package/template/packs/editorial-monograph/document/components/ChapterOpenerVisual/index.tsx +0 -76
  130. package/template/packs/editorial-monograph/document/components/Page.tsx +0 -37
  131. package/template/packs/editorial-monograph/document/components/TokenSwatchGrid/index.tsx +0 -46
  132. package/template/packs/editorial-monograph/document/components/TokenSwatchGrid/style.css +0 -63
  133. package/template/packs/editorial-monograph/document/components/TypeSpecimen/index.tsx +0 -38
  134. package/template/packs/editorial-monograph/document/components/TypeSpecimen/style.css +0 -111
  135. package/template/packs/editorial-monograph/document/design.md +0 -279
  136. package/template/packs/editorial-monograph/document/index.tsx +0 -97
  137. package/template/packs/editorial-monograph/document/media/README.md +0 -13
  138. package/template/packs/editorial-monograph/document/openpress.config.mjs +0 -26
  139. package/template/packs/editorial-monograph/document/theme/README.md +0 -11
  140. package/template/packs/editorial-monograph/document/theme/base/page-contract.css +0 -505
  141. package/template/packs/editorial-monograph/document/theme/base/print.css +0 -93
  142. package/template/packs/editorial-monograph/document/theme/base/typography.css +0 -336
  143. package/template/packs/editorial-monograph/document/theme/fonts.css +0 -3
  144. package/template/packs/editorial-monograph/document/theme/page-surfaces/back-cover.css +0 -43
  145. package/template/packs/editorial-monograph/document/theme/page-surfaces/chapter-opener.css +0 -205
  146. package/template/packs/editorial-monograph/document/theme/page-surfaces/cover.css +0 -147
  147. package/template/packs/editorial-monograph/document/theme/page-surfaces/toc.css +0 -149
  148. package/template/packs/editorial-monograph/document/theme/patterns/_chart-frame.css +0 -49
  149. package/template/packs/editorial-monograph/document/theme/patterns/figure-grid.css +0 -68
  150. package/template/packs/editorial-monograph/document/theme/patterns/table-utilities.css +0 -66
  151. package/template/packs/editorial-monograph/document/theme/shell/reader-controls.css +0 -761
  152. package/template/packs/editorial-monograph/document/theme/tokens.css +0 -80
  153. package/template/packs/editorial-monograph/openpress.config.mjs +0 -5
@@ -1,225 +0,0 @@
1
- /* page-surfaces / toc
2
- * Table-of-contents page surface rendered by the manuscript <Toc> helper.
3
- * Entries flow through the generated toc:<sourceId> chain and TocArea.
4
- */
5
-
6
- .reader-page--toc {
7
- padding: 0;
8
- }
9
-
10
- .reader-page--toc .page-frame {
11
- grid-template-rows: auto minmax(0, 1fr);
12
- }
13
-
14
- .reader-page--toc .toc-header {
15
- display: block;
16
- overflow: visible;
17
- opacity: 1;
18
- }
19
-
20
- .reader-page--toc .openpress-toc-area {
21
- height: 100%;
22
- }
23
-
24
- .reader-page--toc h2 {
25
- margin-top: 0;
26
- font-family: var(--openpress-font-serif);
27
- font-weight: 300;
28
- letter-spacing: 0;
29
- font-size: clamp(
30
- calc(18pt - var(--openpress-type-step-down)),
31
- calc(4cqw - var(--openpress-type-step-down)),
32
- calc(28pt - var(--openpress-type-step-down))
33
- );
34
- border-bottom: 0;
35
- padding-bottom: 0;
36
- color: var(--openpress-color-ink);
37
- }
38
-
39
- .reader-page--toc h2.toc-heading--continuation {
40
- display: none;
41
- }
42
-
43
- .toc-list {
44
- display: flex;
45
- flex-direction: column;
46
- gap: 0.45mm;
47
- margin: 11mm 0 0;
48
- padding: 0;
49
- list-style: none;
50
- counter-reset: openpress-toc-index;
51
- }
52
-
53
- .toc-continuation .toc-list {
54
- margin-top: 0;
55
- }
56
-
57
- .toc-list li {
58
- border-bottom: 0;
59
- }
60
-
61
- .toc-list .toc-level-2 {
62
- counter-increment: openpress-toc-index;
63
- margin-top: 5.8mm;
64
- }
65
-
66
- .toc-list a {
67
- display: grid;
68
- grid-template-columns: 10mm minmax(0, 1fr) 12mm;
69
- column-gap: 3.4mm;
70
- align-items: baseline;
71
- color: var(--openpress-color-ink);
72
- text-decoration: none;
73
- font-family: var(--openpress-font-serif);
74
- padding: 1.6mm 0;
75
- font-weight: 400;
76
- line-height: 1.38;
77
- }
78
-
79
- .toc-list a:hover .toc-title {
80
- color: var(--openpress-color-muted);
81
- }
82
-
83
- .toc-index {
84
- display: inline-block;
85
- width: auto;
86
- height: auto;
87
- border: 0;
88
- background: transparent;
89
- color: var(--openpress-color-muted);
90
- font-family: var(--openpress-font-mono);
91
- font-variant-numeric: tabular-nums;
92
- font-weight: 400;
93
- letter-spacing: 0;
94
- font-size: 0;
95
- text-align: left;
96
- }
97
-
98
- .toc-index::before {
99
- content: attr(data-toc-index);
100
- font-size: calc(9.5pt - var(--openpress-type-step-down));
101
- }
102
-
103
- .toc-level-2 a {
104
- margin-top: 0;
105
- padding: 2.9mm 0 1.9mm;
106
- border-top: 0;
107
- }
108
-
109
- .toc-level-2:first-child {
110
- margin-top: 0;
111
- }
112
-
113
- .toc-level-2 .toc-index::before {
114
- color: var(--openpress-color-muted);
115
- font-size: calc(10.6pt - var(--openpress-type-step-down));
116
- }
117
-
118
- .toc-level-2 .toc-title {
119
- color: var(--openpress-color-ink);
120
- font-size: calc(12.8pt - var(--openpress-type-step-down));
121
- font-weight: 500;
122
- }
123
-
124
- .toc-level-2 .toc-title::after {
125
- content: none;
126
- }
127
-
128
- .toc-level-2 .toc-page {
129
- color: var(--openpress-color-ink);
130
- font-size: calc(10.4pt - var(--openpress-type-step-down));
131
- }
132
-
133
- .toc-level-3 a {
134
- grid-template-columns: 10mm minmax(0, 1fr) 12mm;
135
- padding: 1.12mm 0 1.12mm 7.5mm;
136
- color: var(--openpress-color-muted);
137
- font-size: calc(11pt - var(--openpress-type-step-down));
138
- }
139
-
140
- .toc-level-3 .toc-index::before {
141
- color: var(--openpress-color-muted);
142
- font-size: calc(10pt - var(--openpress-type-step-down));
143
- }
144
-
145
- .toc-level-3 .toc-page {
146
- font-size: calc(10.2pt - var(--openpress-type-step-down));
147
- }
148
-
149
- .toc-title {
150
- display: flex;
151
- gap: 3mm;
152
- align-items: baseline;
153
- color: var(--openpress-color-ink);
154
- font-family: var(--openpress-font-serif);
155
- }
156
-
157
- .toc-title::after {
158
- content: "";
159
- flex: 1;
160
- min-width: 10mm;
161
- border-bottom: 1px dotted var(--openpress-color-line-strong);
162
- transform: translateY(-0.22em);
163
- }
164
-
165
- .toc-page {
166
- color: var(--openpress-color-muted);
167
- font-family: var(--openpress-font-mono);
168
- font-variant-numeric: tabular-nums;
169
- font-weight: 400;
170
- font-size: calc(10.2pt - var(--openpress-type-step-down));
171
- justify-self: end;
172
- min-width: 10mm;
173
- text-align: right;
174
- }
175
-
176
- /* Dark editorial contents surface, aligned with cover/back-cover. */
177
- .reader-page--toc {
178
- --toc-ink: #f7f9fb;
179
- --toc-muted: rgba(247, 249, 251, 0.68);
180
- --toc-line: rgba(247, 249, 251, 0.22);
181
- --toc-leader: rgba(247, 249, 251, 0.28);
182
- color: var(--toc-ink);
183
- background-color: #a95f32;
184
- background-image: none;
185
- }
186
-
187
- .reader-page--toc .page-frame {
188
- display: block;
189
- background: transparent;
190
- }
191
-
192
- .reader-page--toc .page-body {
193
- height: 100%;
194
- }
195
-
196
- .reader-page--toc .page-header,
197
- .reader-page--toc .page-footer {
198
- display: none;
199
- }
200
-
201
- .reader-page--toc h2,
202
- .toc-list a,
203
- .toc-title,
204
- .toc-level-2 .toc-title,
205
- .toc-level-2 .toc-page {
206
- color: var(--toc-ink);
207
- }
208
-
209
- .reader-page--toc h2.toc-heading--continuation,
210
- .toc-index,
211
- .toc-index::before,
212
- .toc-level-2 .toc-index::before,
213
- .toc-level-3 a,
214
- .toc-level-3 .toc-index::before,
215
- .toc-page {
216
- color: var(--toc-muted);
217
- }
218
-
219
- .toc-list a:hover .toc-title {
220
- color: var(--toc-muted);
221
- }
222
-
223
- .toc-title::after {
224
- border-bottom-color: var(--toc-leader);
225
- }
@@ -1,53 +0,0 @@
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
- }
@@ -1,68 +0,0 @@
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
- }
@@ -1,66 +0,0 @@
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
- }