paperlint 13.2.0 → 13.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.
- package/.github/workflows/ci.yml +10 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +2 -2
- package/dist/doctor.js.map +1 -1
- package/dist/skills/assess-novelty/scripts/candidate_page.d.ts +1 -0
- package/dist/skills/assess-novelty/scripts/novelty_reader_brief.d.ts +25 -0
- package/docs/toolchain.md +1 -1
- package/eslint.config.mjs +52 -0
- package/package.json +2 -1
- package/presets/agentverify.md +15 -4
- package/skills/assess-novelty/scripts/candidate_page.css +31 -0
- package/skills/assess-novelty/scripts/candidate_page.html +934 -0
- package/skills/assess-novelty/scripts/candidate_page.js +165 -0
- package/skills/assess-novelty/scripts/candidate_page.test.ts +401 -0
- package/skills/assess-novelty/scripts/candidate_page.ts +194 -0
- package/skills/assess-novelty/scripts/check_novelty.py +230 -0
- package/skills/assess-novelty/scripts/check_novelty.test.ts +490 -0
- package/skills/assess-novelty/scripts/check_novelty_coverage.test.ts +176 -0
- package/skills/assess-novelty/scripts/crop_quote.py +104 -0
- package/skills/assess-novelty/scripts/crop_quote.test.ts +130 -0
- package/skills/assess-novelty/scripts/fixtures/crop-quote/make_sample.py +42 -0
- package/skills/assess-novelty/scripts/fixtures/crop-quote/sample.pdf +106 -0
- package/skills/assess-novelty/scripts/fixtures/novelty/CLAIMS.md +11 -0
- package/skills/assess-novelty/scripts/fixtures/novelty/paper.tex +10 -0
- package/skills/assess-novelty/scripts/fixtures/novelty/siblings/2026-10-27-novelty-refutation.md +8 -0
- package/skills/assess-novelty/scripts/fixtures/novelty/siblings/data/doe-preprint.txt +63 -0
- package/skills/assess-novelty/scripts/fixtures/novelty/siblings/novelty.json +54 -0
- package/skills/assess-novelty/scripts/novelty_candidates.py +136 -0
- package/skills/assess-novelty/scripts/novelty_candidates.test.ts +222 -0
- package/skills/assess-novelty/scripts/novelty_cells.py +88 -0
- package/skills/assess-novelty/scripts/novelty_cells.test.ts +159 -0
- package/skills/assess-novelty/scripts/novelty_coverage.py +55 -0
- package/skills/assess-novelty/scripts/novelty_reader_brief.js +165 -0
- package/skills/assess-novelty/scripts/novelty_reader_brief.test.ts +251 -0
- package/skills/assess-novelty/scripts/novelty_reader_brief.ts +215 -0
- package/skills/assess-novelty/scripts/quote_match.py +34 -0
- package/skills/assess-novelty/scripts/script_edges.test.ts +174 -0
- package/src/doctor.ts +4 -2
package/.github/workflows/ci.yml
CHANGED
|
@@ -86,6 +86,11 @@ jobs:
|
|
|
86
86
|
run: npm ci
|
|
87
87
|
timeout-minutes: 5
|
|
88
88
|
|
|
89
|
+
# skills/assess-novelty/scripts/crop_quote.py reads PDFs with PyMuPDF (python3 ships on the runners).
|
|
90
|
+
- name: PyMuPDF for the novelty scripts
|
|
91
|
+
run: python3 -m pip install --break-system-packages pymupdf
|
|
92
|
+
timeout-minutes: 3
|
|
93
|
+
|
|
89
94
|
# Harnesses. `--min=1` is inside the script: it refuses a run where NOTHING matched.
|
|
90
95
|
#
|
|
91
96
|
# 🔴 WHAT IT DOES NOT DO, contrary to what was written here before 17.09: it does NOT protect
|
|
@@ -236,6 +241,11 @@ jobs:
|
|
|
236
241
|
run: npm ci
|
|
237
242
|
timeout-minutes: 8
|
|
238
243
|
|
|
244
|
+
# skills/assess-novelty/scripts/crop_quote.py reads PDFs with PyMuPDF (python3 ships on the runners).
|
|
245
|
+
- name: PyMuPDF for the novelty scripts
|
|
246
|
+
run: python3 -m pip install --break-system-packages pymupdf
|
|
247
|
+
timeout-minutes: 3
|
|
248
|
+
|
|
239
249
|
# Issue #9's distinction: prints BOTH spellings of the temp root. If they match, this machine
|
|
240
250
|
# is not the platform the macOS cell exists for, and green below says nothing about it.
|
|
241
251
|
- name: two spellings of one directory — does this machine see them
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAyC,MAAM,SAAS,CAAC;AAa7E,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK5E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH;;;;GAIG;AACH,eAAO,MAAM,WAAW,gHACuF,CAAC;AAEhH,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAyC,MAAM,SAAS,CAAC;AAa7E,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK5E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH;;;;GAIG;AACH,eAAO,MAAM,WAAW,gHACuF,CAAC;AAEhH,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAyCtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,KACxD;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAExC,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,MAAK,YAAwB,KAAG,OACS,CAAC;AAE7E,2FAA2F;AAC3F,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AAGzC,+FAA+F;AAC/F,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,EACT,OAAO,GAAE,OAAiB,GACzB,MAAM,EAAE,CAmCV;AAiFD,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+FAA+F;IAC/F,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAiB,EAEjB,GAAmB,EACnB,UAAU,EACV,GAAe,EACf,SAAgB,EAChB,UAA2D,GAC5D,GAAE,aAAkB,GAAG,MAAM,CAqF7B"}
|
package/dist/doctor.js
CHANGED
|
@@ -78,8 +78,8 @@ export const PROGRAMS = [
|
|
|
78
78
|
{
|
|
79
79
|
bin: "python3",
|
|
80
80
|
from: "your system",
|
|
81
|
-
without: "the analysis and report scripts do not start",
|
|
82
|
-
install: "apt-get install -y python3",
|
|
81
|
+
without: "the analysis and report scripts and the novelty checks (assess-novelty) do not start",
|
|
82
|
+
install: "apt-get install -y python3; crop_quote.py also needs PyMuPDF: pip install pymupdf",
|
|
83
83
|
},
|
|
84
84
|
];
|
|
85
85
|
export const found = (bin, run = spawnSync) => run("command", ["-v", bin], { shell: true, stdio: "ignore" }).status === 0;
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6FAA6F;AAC7F,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,6FAA6F;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,kGAAkG;AAClG,kDAAkD;AAClD,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAS7C;;;;GAIG;AACH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GACtB,6GAA6G,CAAC;AAEhH,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,WAAW;KACrB;IACD;QACE,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,WAAW;KACrB;IACD;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,8BAA8B;QACvC,OAAO,EAAE,WAAW;KACrB;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,yCAAyC;KACnD;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,8BAA8B;QACpC,OAAO,EACL,gFAAgF;QAClF,OAAO,EACL,0EAA0E;KAC7E;IACD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type Neighbour = {
|
|
3
|
+
id: string;
|
|
4
|
+
text: string;
|
|
5
|
+
url?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
};
|
|
8
|
+
type Claim = {
|
|
9
|
+
id: string;
|
|
10
|
+
sentence: string;
|
|
11
|
+
pieces: Record<string, string>;
|
|
12
|
+
};
|
|
13
|
+
/** Lines exactly as Read and the coverage checker number them (novelty_coverage.py: removesuffix("\n").split("\n")). */
|
|
14
|
+
export declare const lineCount: (text: string) => number;
|
|
15
|
+
/** Share of non-blank lines with a 6+ space gap: two page columns glued into one line by `pdftotext -layout`. */
|
|
16
|
+
export declare const glue: (text: string) => number;
|
|
17
|
+
/**
|
|
18
|
+
* The fewest chunks of at most CHUNK lines, spread evenly: 401 lines are [1, 201] [202, 401], not [1, 400] [401, 401].
|
|
19
|
+
* A stub last chunk (a lone page break or page number) holds no 8-word quote, so a complete read could not be proved.
|
|
20
|
+
*/
|
|
21
|
+
export declare const chunks: (n: number) => [number, number][];
|
|
22
|
+
export declare const claimsText: (claims: Claim[]) => string;
|
|
23
|
+
/** The brief, pure. `lines` = the saved text's line count; `repair` = the checker's errors for this neighbour. */
|
|
24
|
+
export declare const readerBrief: (paper: string, n: Neighbour, claims: Claim[], lines: number, repair?: string[]) => string;
|
|
25
|
+
export {};
|
package/docs/toolchain.md
CHANGED
|
@@ -16,7 +16,7 @@ after deciding to use the tool, not before.
|
|
|
16
16
|
| `texcount` | TeX Live (`paperlint toolchain`) | render-paper, grade-paper-writing | the length checks cannot run |
|
|
17
17
|
| `checkcites` | TeX Live (`paperlint toolchain`) | render-paper | nothing asks whether a bibliography entry is uncited |
|
|
18
18
|
| `java` | any JRE (21 works) | render-paper | TeXtidote does not run, and **nothing else spell-checks the text** |
|
|
19
|
-
| `python3` | your system | the analysis
|
|
19
|
+
| `python3` | your system | assess-novelty, the analysis scripts | those scripts do not start (`crop_quote.py` also needs `pymupdf`) |
|
|
20
20
|
| `tlmgr` | TeX Live | the TeX installer itself | you cannot add a TeX package |
|
|
21
21
|
| `banal` | HotCRP (`paperlint toolchain`) | `paperlint build`, extract-pdf-facts | page size, columns and font sizes are `null` in the facts file |
|
|
22
22
|
| `perl` | your system (macOS has it) | banal | banal cannot run — the same `null`, and `paperlint toolchain` refuses |
|
package/eslint.config.mjs
CHANGED
|
@@ -135,6 +135,36 @@ const RATCHET = {
|
|
|
135
135
|
"skills/plan-paper-timeline/fixtures/fake-google-calendar.ts": {
|
|
136
136
|
"max-lines-per-function": 31,
|
|
137
137
|
},
|
|
138
|
+
"skills/assess-novelty/scripts/candidate_page.test.ts": {
|
|
139
|
+
"max-lines-per-function": 343,
|
|
140
|
+
"max-nested-callbacks": 4,
|
|
141
|
+
},
|
|
142
|
+
"skills/assess-novelty/scripts/check_novelty.test.ts": {
|
|
143
|
+
"max-lines-per-function": 419,
|
|
144
|
+
},
|
|
145
|
+
"skills/assess-novelty/scripts/check_novelty_coverage.test.ts": {
|
|
146
|
+
"max-lines-per-function": 131,
|
|
147
|
+
},
|
|
148
|
+
"skills/assess-novelty/scripts/crop_quote.test.ts": {
|
|
149
|
+
"max-lines-per-function": 96,
|
|
150
|
+
},
|
|
151
|
+
"skills/assess-novelty/scripts/novelty_candidates.test.ts": {
|
|
152
|
+
"max-lines-per-function": 179,
|
|
153
|
+
},
|
|
154
|
+
"skills/assess-novelty/scripts/novelty_cells.test.ts": {
|
|
155
|
+
"max-lines-per-function": 117,
|
|
156
|
+
},
|
|
157
|
+
"skills/assess-novelty/scripts/novelty_reader_brief.test.ts": {
|
|
158
|
+
"max-lines-per-function": 180,
|
|
159
|
+
complexity: 11,
|
|
160
|
+
},
|
|
161
|
+
"skills/assess-novelty/scripts/candidate_page.ts": {
|
|
162
|
+
"max-lines-per-function": 55,
|
|
163
|
+
},
|
|
164
|
+
"skills/assess-novelty/scripts/novelty_reader_brief.ts": {
|
|
165
|
+
"max-lines-per-function": 32,
|
|
166
|
+
"max-params": 5,
|
|
167
|
+
},
|
|
138
168
|
"src/adapters/curl/download.io.ts": { "max-lines-per-function": 39 },
|
|
139
169
|
"src/adapters/references/index.ts": { "max-lines-per-function": 36 },
|
|
140
170
|
"src/build-engine.ts": { "max-lines-per-function": 33 },
|
|
@@ -667,6 +697,28 @@ export default [
|
|
|
667
697
|
files: TEST_FILES,
|
|
668
698
|
rules: { "max-lines-per-function": ["error", MAX_LINES_TESTS] },
|
|
669
699
|
},
|
|
700
|
+
// 🔴 DEBT, NOT A PERMISSION. The novelty-check scripts and their harnesses were moved from a consumer
|
|
701
|
+
// repository AS THEY WERE (the 2026-11-02 decision): untyped JSON in, `any` throughout. Making them pass the
|
|
702
|
+
// type-safety rules below means rewriting them, which is paperlint#339 (TypeScript rewrite of the Python
|
|
703
|
+
// checkers) and paperlint#338 (the regex priority-sentence detector). Only the rules that need typed data
|
|
704
|
+
// are off, only here; the rules about behaviour (`complexity`, `max-depth`, `no-empty`, ...) still apply.
|
|
705
|
+
// Delete this block with the rewrite.
|
|
706
|
+
{
|
|
707
|
+
files: ["skills/assess-novelty/scripts/*.ts"],
|
|
708
|
+
rules: {
|
|
709
|
+
"@typescript-eslint/no-unsafe-member-access": "off",
|
|
710
|
+
"@typescript-eslint/no-unsafe-call": "off",
|
|
711
|
+
"@typescript-eslint/no-unsafe-assignment": "off",
|
|
712
|
+
"@typescript-eslint/no-unsafe-argument": "off",
|
|
713
|
+
"@typescript-eslint/no-unsafe-return": "off",
|
|
714
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
715
|
+
"@typescript-eslint/consistent-type-assertions": "off",
|
|
716
|
+
"@typescript-eslint/restrict-template-expressions": "off",
|
|
717
|
+
"@typescript-eslint/no-unnecessary-condition": "off",
|
|
718
|
+
"@typescript-eslint/no-confusing-void-expression": "off",
|
|
719
|
+
"@typescript-eslint/no-non-null-assertion": "off",
|
|
720
|
+
},
|
|
721
|
+
},
|
|
670
722
|
// Hexagonal layers, both axes (src/CLAUDE.md): knowledge by element, purity by file category.
|
|
671
723
|
IO_GLOBALS,
|
|
672
724
|
NO_CLOCK,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paperlint",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.3.0",
|
|
4
4
|
"description": "A linter for scientific papers written in LaTeX: catches mistakes before you submit to a conference or journal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"eslint-plugin-project-structure": "^3.14.5",
|
|
59
59
|
"eslint-plugin-sonarjs": "^4.2.1",
|
|
60
60
|
"jsonc-parser": "^3.3.1",
|
|
61
|
+
"playwright-core": "^1.64.1",
|
|
61
62
|
"prettier": "^3.8.1",
|
|
62
63
|
"semantic-release": "25.0.9",
|
|
63
64
|
"typescript-eslint": "^8.70.1",
|
package/presets/agentverify.md
CHANGED
|
@@ -26,8 +26,10 @@ researchr page `conf.researchr.org/home/agentverify-2027` only redirects to the
|
|
|
26
26
|
preset keeps the family's `\documentclass[conference]{IEEEtran}`.
|
|
27
27
|
- **Publisher**: «Accepted papers will appear in the ICSE 2027 workshop proceedings by default.»
|
|
28
28
|
The ICSE workshops page: «The workshop papers will be published by the IEEE.» The CFP does not
|
|
29
|
-
say what a non-default route would be, or whether it is archival.
|
|
30
|
-
|
|
29
|
+
say what a non-default route would be, or whether it is archival. The organizers: no other route
|
|
30
|
+
is offered (below).
|
|
31
|
+
- **Presenting**: «At least one author of each accepted paper must register and present.» Remote
|
|
32
|
+
presentation is allowed (below).
|
|
31
33
|
- **Deadlines (AoE)**: submission 13 Nov 2026, reviews due 5 Dec, final notification 11 Dec 2026,
|
|
32
34
|
camera-ready 29 Jan 2027.
|
|
33
35
|
|
|
@@ -65,10 +67,19 @@ and are over the limit. Count the PDF's pages yourself before submitting.
|
|
|
65
67
|
scheduled workflow; notification and camera-ready are the site's. No `registration`: there is no
|
|
66
68
|
abstract deadline.
|
|
67
69
|
|
|
70
|
+
## Answered by the organizers (emails to an author, not public)
|
|
71
|
+
|
|
72
|
+
- **Remote presentation** (2026-10-23): «In general, remote presentations will be allowed for
|
|
73
|
+
authors who are unable to attend the workshop in person. However, at least one author of each
|
|
74
|
+
accepted paper must register for the workshop to ensure its inclusion in the proceedings.»
|
|
75
|
+
- **APC** (2026-10-27), for every paper kind: «APC. It is free completely.»
|
|
76
|
+
- **Proceedings** (2026-10-27): «Workshop papers are normally published in an ICSE companion
|
|
77
|
+
IEEE/ACM proceedings.» Asked whether a non-archival option exists: «The non-trivial [sic:
|
|
78
|
+
non-archival] option is not offered.» So every accepted paper is archival.
|
|
79
|
+
|
|
68
80
|
## Not verified
|
|
69
81
|
|
|
70
|
-
- **
|
|
71
|
-
- **Archival / non-archival choice**: «by default» suggests an alternative; none is described.
|
|
82
|
+
- **Digital library**: whether the 2027 companion volume goes to IEEE Xplore or the ACM DL.
|
|
72
83
|
- **AI / LLM usage policy and required sections**: none stated.
|
|
73
84
|
|
|
74
85
|
## What the preset resolves to
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* Material Ocean, the palette of the candidate decision page.
|
|
2
|
+
candidate_page.ts inlines this file at the top of the page's <style>. Dark only, on
|
|
3
|
+
purpose: the page commits to one look, so every color below is set explicitly and nothing depends on the
|
|
4
|
+
viewer's theme. No purple anywhere: Material Ocean's purple (#C792EA) is left out of the set. */
|
|
5
|
+
:root {
|
|
6
|
+
color-scheme: dark;
|
|
7
|
+
--bg: #0f111a; /* page */
|
|
8
|
+
--surface: #1a1c25; /* the one raised block a section may have (a decision box, a table) */
|
|
9
|
+
--line: #262a3a; /* hairlines between sections and around the raised block */
|
|
10
|
+
--text: #a6accd; /* body */
|
|
11
|
+
--muted: #7e84a3; /* captions, metadata (4.8:1 on --bg; Ocean's own comment grey is too faint to read) */
|
|
12
|
+
--strong: #eeffff; /* headings and the current tab */
|
|
13
|
+
--accent: #82aaff; /* links, the current tab's underline, the primary button: the only accent */
|
|
14
|
+
--good: #c3e88d; /* "add", saved, passed */
|
|
15
|
+
--mark: #ffcb6b; /* highlighted passage, and warnings */
|
|
16
|
+
--bad: #f07178; /* errors only */
|
|
17
|
+
--mark-bg: rgba(255, 203, 107, 0.08);
|
|
18
|
+
--paper: #ffffff; /* only behind a page image (a PDF crop), never a page surface */
|
|
19
|
+
--sans: "Roboto", system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
20
|
+
--mono: "Roboto Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
|
|
21
|
+
--gap-section: 48px; /* between sections */
|
|
22
|
+
--gap-item: 16px; /* between items inside a section */
|
|
23
|
+
--measure: 68ch; /* longest line of running text */
|
|
24
|
+
}
|
|
25
|
+
body {
|
|
26
|
+
background: var(--bg);
|
|
27
|
+
color: var(--text);
|
|
28
|
+
font-family: var(--sans);
|
|
29
|
+
font-size: 16px;
|
|
30
|
+
line-height: 1.6;
|
|
31
|
+
}
|