@aitrien/motifspec 1.13.0 → 1.13.3

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 (83) hide show
  1. package/CHANGELOG.md +275 -257
  2. package/LICENSE +21 -21
  3. package/README.md +128 -150
  4. package/dist/backdrop.html +1 -1
  5. package/dist/chroma.css +36 -36
  6. package/dist/codex.css +1145 -1145
  7. package/dist/codex.js +126 -126
  8. package/dist/contrast.md +101 -101
  9. package/dist/fonts.css +3 -3
  10. package/dist/icons.svg +18 -18
  11. package/dist/plate.html +1 -1
  12. package/dist/plate.js +292 -292
  13. package/dist/theme-init.js +1 -1
  14. package/dist/tokens.css +466 -466
  15. package/dist/tokens.js +3330 -3330
  16. package/dist/tokens.json +3330 -3330
  17. package/docs/components/_template.md +37 -37
  18. package/docs/components/accession-label.md +106 -106
  19. package/docs/components/backdrop.md +83 -83
  20. package/docs/components/button-and-link.md +87 -87
  21. package/docs/components/callout.md +75 -75
  22. package/docs/components/code-block.md +109 -109
  23. package/docs/components/data-table.md +73 -73
  24. package/docs/components/figure.md +68 -68
  25. package/docs/components/heading-anchor.md +76 -76
  26. package/docs/components/icon.md +63 -63
  27. package/docs/components/ornament.md +77 -77
  28. package/docs/components/pagination.md +78 -78
  29. package/docs/components/post-list-item.md +91 -91
  30. package/docs/components/project-card.md +82 -82
  31. package/docs/components/prose.md +122 -122
  32. package/docs/components/site-footer.md +99 -99
  33. package/docs/components/site-header.md +133 -133
  34. package/docs/components/specimen-plate.md +92 -92
  35. package/docs/components/table-of-contents.md +83 -83
  36. package/docs/components/tag.md +70 -70
  37. package/docs/components/tooltip.md +67 -67
  38. package/docs/hugo.md +132 -120
  39. package/docs/syntax-highlighting.md +55 -55
  40. package/docs/templates.md +21 -30
  41. package/fonts/OFL-jetbrains-mono.txt +93 -93
  42. package/fonts/OFL-national-park.txt +93 -93
  43. package/fonts/OFL-yarndings-12.txt +93 -93
  44. package/icons/LICENSE +202 -202
  45. package/icons/manifest.json +75 -75
  46. package/layouts/_markup/render-blockquote.html +30 -30
  47. package/layouts/_markup/render-codeblock.html +18 -18
  48. package/layouts/_markup/render-heading.html +2 -2
  49. package/layouts/_markup/render-image.html +14 -14
  50. package/layouts/_markup/render-link.html +14 -14
  51. package/layouts/_markup/render-table.html +31 -31
  52. package/layouts/_partials/motifspec/accession/id.html +2 -2
  53. package/layouts/_partials/motifspec/accession/label.html +18 -18
  54. package/layouts/_partials/motifspec/accession/status.html +2 -2
  55. package/layouts/_partials/motifspec/article.html +24 -24
  56. package/layouts/_partials/motifspec/back-link.html +2 -2
  57. package/layouts/_partials/motifspec/body-end.html +5 -5
  58. package/layouts/_partials/motifspec/body-start.html +5 -5
  59. package/layouts/_partials/motifspec/figure.html +14 -14
  60. package/layouts/_partials/motifspec/filed-under.html +5 -5
  61. package/layouts/_partials/motifspec/h2s.html +7 -7
  62. package/layouts/_partials/motifspec/head.html +15 -15
  63. package/layouts/_partials/motifspec/pagination-entries.html +34 -34
  64. package/layouts/_partials/motifspec/pagination-pages.html +30 -30
  65. package/layouts/_partials/motifspec/post-list-item.html +15 -15
  66. package/layouts/_partials/motifspec/project-card.html +23 -23
  67. package/layouts/_partials/motifspec/section-heading.html +3 -3
  68. package/layouts/_partials/motifspec/site-header.html +27 -27
  69. package/layouts/_partials/motifspec/table-of-contents.html +21 -21
  70. package/layouts/_partials/motifspec/tag-filter.html +22 -22
  71. package/layouts/_partials/motifspec/tags.html +8 -8
  72. package/layouts/_partials/motifspec/tokens.html +9 -9
  73. package/package.json +68 -68
  74. package/scripts/check.mjs +153 -153
  75. package/scripts/lib.mjs +176 -176
  76. package/tokens/README.md +3 -3
  77. package/tokens/border.json +63 -63
  78. package/tokens/color.json +1902 -1902
  79. package/tokens/motion.json +207 -207
  80. package/tokens/radius.json +53 -53
  81. package/tokens/size.json +378 -378
  82. package/tokens/space.json +289 -289
  83. package/tokens/typography.json +859 -859
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Liam Marshall
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Liam Marshall
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,150 +1,128 @@
1
- # MotifSpec
2
-
3
- Liam Marshall's design system: the single source of truth for aitrien.com and every project after it. Tokens are [DTCG](https://www.designtokens.org/) JSON, components are documented rules with markup to copy, and an MCP server serves both to AI coding assistants.
4
-
5
- ## Principles
6
-
7
- 1. **Name the role, not the page.** Tokens and components describe the job they do, so a recipe app, a docs site and this portfolio can share them.
8
- 2. **Colour and type carry meaning.** Hue marks a link, a status or focus. Ornaments are decoration, always hidden from assistive tech.
9
- 3. **Measure it, don't eyeball it.** Reading text meets 7:1, controls and focus meet 3:1, and every pair is checked in both themes on every build.
10
- 4. **HTML first, script second.** Content, navigation and code work without JavaScript. Scripts add the theme toggle, copy buttons and TOC tracking.
11
- 5. **Square, hairline, labelled.** Structure is drawn with 1px rules, square corners and mono labels, like a field ledger. Buttons, nav items and icon-only controls are the one exception: they are pills, so anything you can press is recognisable at a glance.
12
- 6. **Motion confirms a change.** Only state changes animate, plus the pausable drift of the contour survey behind the page; text never moves, and reduced motion means none.
13
- 7. **One accent, one ornament.** Sap green marks action. Yarndings and the contour survey (the backdrop, or the specimen plate) are the only decoration, once per view.
14
-
15
- ## Rules for AI assistants
16
-
17
- - Use semantic tokens only: `var(--cx-color-text-primary)`, never `--cx-primitive-*`, never a raw hex, px, rem or ms value.
18
- - Read a token's `$description` before using it. It is the usage rule, including when *not* to use it.
19
- - Put text on a surface only if the text token lists that surface in `codex.pairsWith`. If the pair isn't declared, pick a token that declares it.
20
- - Build UI from `docs/components/*.md`. Copy the markup and class names; don't invent new `cx-` classes.
21
- - In a Hugo site, call the `motifspec/` partials (`docs/hugo.md`) instead of writing component markup, and let the render hooks turn Markdown into figures, tables, code blocks and callouts. A component that needs changing is changed here, not overridden in the site.
22
- - Before finishing, run the checker on the project: `node <module>/scripts/check.mjs .` (a Hugo site finds `<module>` with `hugo config mounts`; see `docs/hugo.md`). Fix what it reports; don't work around it.
23
- - Ornaments come only from the 80 approved glyphs in `font.family.ornament` → `codex.glyphs.glyphs` (never `codex.glyphs.forbidden`), always `aria-hidden="true"`, at most one ornament group per viewport.
24
- - Icons come only from `icons/manifest.json`, each for its listed role, as `<svg class="cx-icon"><use href="#cx-icon-{key}"></use></svg>` beside text that says the same thing. Never the icon font, never a CDN.
25
- - Separate inline metadata with `<span class="cx-sep" aria-hidden="true">|</span>`. Never use "·" as a separator.
26
- - Lay out with flex-wrap, auto-fill grids and `min()`. Width media queries can't read custom properties: when a layout must switch between alternate content at a width, write `@media (width < token(size.breakpoint.md))` in `css/components.css` and the build fills in the value. Nothing else may be written as `token(...)`.
27
- - JavaScript is enhancement. Anything a reader needs must work without it; controls that need script ship `hidden` and are revealed by it.
28
- - Use plain, functional labels: Work, Writing, About.
29
- - Write sample and placeholder content from scratch. Never copy wording from reference or competitor sites; quote only with a named person and a traceable source in the blockquote footer.
30
- - Give every section `<h2>` an id and a `cx-anchor` link (see `docs/components/heading-anchor.md`).
31
-
32
- ## What's here
33
-
34
- ```
35
- LICENSE MIT, for code, tokens and docs
36
- CHANGELOG.md Every release, newest first (the build fails without an entry for the current version)
37
- tokens/ DTCG source of truth (color, typography, space, size, radius, border, motion)
38
- css/components.css Reference implementation of every component (tokens only)
39
- syntax/chroma.json Hugo Chroma class → token mapping
40
- icons/ Approved Material Symbols (manifest.json, source SVGs, Apache-2.0 LICENSE)
41
- docs/components/ One rule file per component (front-matter token lists generated from the CSS)
42
- docs/templates.md Content hierarchy for the six page templates
43
- docs/hugo.md The Hugo partials and render hooks, their contexts and the front matter they read
44
- layouts/ Hugo partials (_partials/motifspec/) and Markdown render hooks (_markup/), mounted by the module
45
- docs/syntax-highlighting.md
46
- fonts/ Self-hosted WOFF2 (Latin subsets) and their OFL licences
47
- scripts/ validate, build, audit, check (the rule checker sites run) and release
48
- js/codex.js Theme toggle, copy buttons, tooltip dismissal, TOC docking and active section (shared by sites and the showcase)
49
- js/theme-init.js One-line <head> snippet that applies a stored theme before first paint
50
- js/plate.js Contour survey generator for the backdrop and the specimen plate: draws the static contours at build time and animates them in the browser
51
- showcase/ Source of the system's showcase page
52
- mcp/ MCP server (Phase 3)
53
- hugo.toml, go.mod Hugo module definition and its mounts
54
- dist/ Generated: tokens.css, components in codex.css, chroma.css, fonts.css, icons.svg (sprite), tokens.json (for MCP), tokens.js (ES module export), codex.js and theme-init.js (behaviour), backdrop.html, plate.html and plate.js (backdrop and specimen plate), contrast.md, showcase.html (fragment for publishing), showcase.standalone.html (open locally)
55
- ```
56
-
57
- ## Commands
58
-
59
- ```sh
60
- npm run validate # naming rules, tiers, aliases, DTCG value shapes, every contrast pair in both themes
61
- npm run build # validate, then write dist/ and refresh generated doc tables
62
- npm run audit # prove dist/showcase.html and the shipped scripts have no raw colour, size or duration outside :root
63
- npm run release:check # what merging this would release, and whether that release is valid
64
- npm run pack:check # the npm package has every file the README and package.json promise
65
- npm run check -- <dir> # check a project that uses MotifSpec (see below)
66
- ```
67
-
68
- `scripts/check.mjs` is the one rule checker: this repo's audit runs it on `layouts/` and the component docs' markup, sites run it from their pinned module, and the MCP server's `check_styles` will call it. It checks a project's `layouts/` and `content/` against the release it comes from, and fails on:
69
-
70
- - a stylesheet anywhere in the project, or a `style` attribute
71
- - a raw colour, or a number with a length or time unit (zero is allowed)
72
- - a primitive, unknown or deprecated `--cx-` token
73
- - a `cx-` class that the stylesheet and scripts don't define, or a `cx-icon-` that isn't in `icons/manifest.json`
74
- - "·" used as a separator
75
-
76
- Releases are automatic. Bump `version` in `package.json` and add its `CHANGELOG.md` entry in the PR; once it is merged and CI passes on main, `.github/workflows/release.yml` tags that commit, publishes a GitHub release with the entry as its notes, and publishes that commit to npm with provenance (npm trusted publishing: no token is stored). A merge that doesn't change the version releases nothing.
77
-
78
- Node 20 or later, no dependencies.
79
-
80
- ## Using it in Hugo
81
-
82
- Import the module and pin a release with `hugo mod get github.com/aitrien/motifspec@vX.Y.Z`. It mounts `dist/` at `assets/motifspec`, `fonts/` at `static/fonts`, and `layouts/` at `layouts`, so a site gets the component partials and the Markdown render hooks as well as the CSS and scripts:
83
-
84
- ```toml
85
- [module]
86
- [[module.imports]]
87
- path = "github.com/aitrien/motifspec"
88
- ```
89
-
90
- A page template then needs only the shell partials around its own content:
91
-
92
- ```go-html-template
93
- <head>
94
- {{ partial "motifspec/head.html" . }}
95
- </head>
96
- <body class="cx-backdrop-page">
97
- {{ partial "motifspec/body-start.html" . }}
98
- {{ partial "motifspec/site-header.html" . }}
99
- <main id="main" tabindex="-1">…</main>
100
- {{ partial "motifspec/body-end.html" . }}
101
- </body>
102
- ```
103
-
104
- `docs/hugo.md` lists every partial with its context, the front matter they read, the render hooks and the Markdown they expect, and the Goldmark settings they need. Keep the stylesheet's published path one level below the site root (Hugo publishes it at `/motifspec/`): its font URLs are `../fonts/…`, which resolve to the mounted `/fonts/`.
105
-
106
- ## Using it from npm
107
-
108
- ```sh
109
- npm install @aitrien/motifspec@1.13.0
110
- ```
111
-
112
- Pin an exact version, as a Hugo site pins a tag: the version you install is the version the checker and (later) the MCP server hold you to. The package has the CSS, scripts, tokens, fonts, icons, component docs, Hugo templates and the checker; it leaves out the showcase.
113
-
114
- | Import | What it is |
115
- |---|---|
116
- | `@aitrien/motifspec/codex.css` | Tokens, fonts and every component. Its font URLs are `../fonts/…`, so a bundler that copies assets (Vite, webpack, Parcel) resolves them from the package. Without a bundler, serve `dist/` and `fonts/` side by side. |
117
- | `@aitrien/motifspec/tokens.css`, `fonts.css`, `chroma.css` | The parts on their own: tokens only, `@font-face` only, syntax highlighting only. |
118
- | `@aitrien/motifspec/codex.js` | Behaviour: theme toggle, copy buttons, TOC, tooltips. Load with `defer`. |
119
- | `@aitrien/motifspec/theme-init.js` | Inline it in `<head>` before the stylesheet so a stored theme applies before first paint. |
120
- | `@aitrien/motifspec/plate.js`, `backdrop.html` | The contour backdrop and its animation (`backdrop.md`). |
121
- | `@aitrien/motifspec/icons.svg` | The icon sprite. Inline it once in `<body>`. |
122
- | `@aitrien/motifspec/tokens.js`, `tokens.json` | Every token with its value, tier and CSS name, for build tools. |
123
- | `@aitrien/motifspec/check` | `checkText` and `checkProject` from the rule checker. |
124
- | `@aitrien/motifspec/fonts/*` | The WOFF2 files, for preloading. |
125
-
126
- Copy component markup from `docs/components/*.md` (in the package under `node_modules/@aitrien/motifspec/docs/`). Then check the project, pointing `--dirs` at the folders with your markup:
127
-
128
- ```sh
129
- npx motifspec-check . --dirs src
130
- ```
131
-
132
- It reads `.html`, `.jsx`, `.tsx`, `.vue`, `.svelte`, `.astro`, `.md` and `.mdx` (both `class` and `className`), and skips `node_modules`, `dist` and `build`. Its stylesheet rule applies here too: a project using MotifSpec has no CSS of its own.
133
-
134
- ## The identity in brief
135
-
136
- | | |
137
- |---|---|
138
- | Concept | A specimen ledger: an archival botanical compendium drawn as a technical catalogue, with a US national-park signage voice. |
139
- | Colour | Five dye-plant hues generated in OKLCH: ash (neutral), sap (accent and success), woad (focus and info), weld (warning) and madder (danger). Cool paper in light mode, green-black in dark mode. |
140
- | Type | National Park (display and body), JetBrains Mono (code and labels), Yarndings 12 (ornament). 88 KB total. |
141
- | Signature | The accession label: every entry has a catalogue number (`LM-W-004`, `LM-P-031`) shown on a framed label with registration ticks. |
142
- | Decoration | The backdrop: a contour survey of generated terrain that slowly drifts behind every page under a grainy frost, showing through above the header and below the footer. The same survey framed as the specimen plate (Plate 0) for landing pages, and a knitted Yarndings band in the footer. |
143
- | Icons | 16 Material Symbols (Sharp, weight 300) as a self-hosted SVG sprite: direction arrows, theme, copy, callout kinds, RSS, external links. Functional only. |
144
- | Separator | A muted pipe, `\|`, hidden from screen readers. |
145
-
146
- See `CONVENTIONS.md` for naming, tiers, extensions and versioning.
147
-
148
- ## Licence
149
-
150
- The code, tokens and docs are MIT (`LICENSE`). The fonts keep their SIL Open Font Licences (`fonts/OFL-*.txt`) and the icons their Apache-2.0 licence (`icons/LICENSE`).
1
+ # MotifSpec
2
+
3
+ Liam Marshall's design system: the single source of truth for aitrien.com and every project after it. Tokens are [DTCG](https://www.designtokens.org/) JSON, components are documented rules with markup to copy, and one checker holds every project that uses it to those rules.
4
+
5
+ ## Principles
6
+
7
+ 1. **Name the role, not the page.** Tokens and components describe the job they do, so a recipe app, a docs site and this portfolio can share them.
8
+ 2. **Colour and type carry meaning.** Hue marks a link, a status or focus. Ornaments are decoration, always hidden from assistive tech.
9
+ 3. **Measure it, don't eyeball it.** Reading text meets 7:1, controls and focus meet 3:1, and every pair is checked in both themes on every build.
10
+ 4. **HTML first, script second.** Content, navigation and code work without JavaScript. Scripts add the theme toggle, copy buttons and TOC tracking.
11
+ 5. **Square, hairline, labelled.** Structure is drawn with 1px rules, square corners and mono labels, like a field ledger. Buttons, nav items and icon-only controls are the one exception: they are pills, so anything you can press is recognisable at a glance.
12
+ 6. **Motion confirms a change.** Only state changes animate, plus the pausable drift of the contour survey behind the page; text never moves, and reduced motion means none.
13
+ 7. **One accent, one ornament.** Sap green marks action. Yarndings and the contour survey (the backdrop, or the specimen plate) are the only decoration, once per view.
14
+
15
+ ## Rules for AI assistants
16
+
17
+ - Use semantic tokens only: `var(--cx-color-text-primary)`, never `--cx-primitive-*`, never a raw hex, px, rem or ms value.
18
+ - Read a token's `$description` before using it. It is the usage rule, including when *not* to use it.
19
+ - Put text on a surface only if the text token lists that surface in `codex.pairsWith`. If the pair isn't declared, pick a token that declares it.
20
+ - Build UI from `docs/components/*.md`. Copy the markup and class names; don't invent new `cx-` classes.
21
+ - In a Hugo site, call the `motifspec/` partials (`docs/hugo.md`) instead of writing component markup, and let the render hooks turn Markdown into figures, tables, code blocks and callouts. A component that needs changing is changed here, not overridden in the site.
22
+ - Before finishing, run the checker on the project: `node <module>/scripts/check.mjs .` (a Hugo site finds `<module>` with `hugo config mounts`; see `docs/hugo.md`). Fix what it reports; don't work around it.
23
+ - Ornaments come only from the 80 approved glyphs in `font.family.ornament` → `codex.glyphs.glyphs` (never `codex.glyphs.forbidden`), always `aria-hidden="true"`, at most one ornament group per viewport.
24
+ - Icons come only from `icons/manifest.json`, each for its listed role, as `<svg class="cx-icon"><use href="#cx-icon-{key}"></use></svg>` beside text that says the same thing. Never the icon font, never a CDN.
25
+ - Separate inline metadata with `<span class="cx-sep" aria-hidden="true">|</span>`. Never use "·" as a separator.
26
+ - Lay out with flex-wrap, auto-fill grids and `min()`. Width media queries can't read custom properties: when a layout must switch between alternate content at a width, write `@media (width < token(size.breakpoint.md))` in `css/components.css` and the build fills in the value. Nothing else may be written as `token(...)`.
27
+ - JavaScript is enhancement. Anything a reader needs must work without it; controls that need script ship `hidden` and are revealed by it.
28
+ - Use plain, functional labels: Work, Writing, About.
29
+ - Write sample and placeholder content from scratch. Never copy wording from reference or competitor sites; quote only with a named person and a traceable source in the blockquote footer.
30
+ - Give every section `<h2>` an id and a `cx-anchor` link (see `docs/components/heading-anchor.md`).
31
+
32
+ ## What's here
33
+
34
+ ```
35
+ LICENSE MIT, for code, tokens and docs
36
+ AGENTS.md Instructions for AI agents changing this repo (CLAUDE.md points to it)
37
+ CHANGELOG.md Every release, newest first (the build fails without an entry for the current version)
38
+ tokens/ DTCG source of truth (color, typography, space, size, radius, border, motion)
39
+ css/components.css Reference implementation of every component (tokens only)
40
+ syntax/chroma.json Hugo Chroma class → token mapping
41
+ icons/ Approved Material Symbols (manifest.json, source SVGs, Apache-2.0 LICENSE)
42
+ docs/components/ One rule file per component (front-matter token lists generated from the CSS)
43
+ docs/templates.md Content hierarchy for the six page templates
44
+ docs/hugo.md The Hugo partials and render hooks, their contexts and the front matter they read
45
+ layouts/ Hugo partials (_partials/motifspec/) and Markdown render hooks (_markup/), mounted by the module
46
+ docs/syntax-highlighting.md
47
+ fonts/ Self-hosted WOFF2 (Latin subsets) and their OFL licences
48
+ scripts/ validate, build, audit, check (the rule checker projects run), pack-check and release
49
+ js/codex.js Theme toggle, copy buttons, tooltip dismissal, TOC docking and active section (shared by sites and the showcase)
50
+ js/theme-init.js One-line <head> snippet that applies a stored theme before first paint
51
+ js/plate.js Contour survey generator for the backdrop and the specimen plate: draws the static contours at build time and animates them in the browser
52
+ showcase/ Source of the system's showcase page
53
+ hugo.toml, go.mod Hugo module definition and its mounts
54
+ dist/ Generated: tokens.css, components in codex.css, chroma.css, fonts.css, icons.svg (sprite), tokens.json, tokens.js (ES module export), codex.js and theme-init.js (behaviour), backdrop.html, plate.html and plate.js (backdrop and specimen plate), contrast.md, showcase.html (fragment for publishing), showcase.standalone.html (open locally)
55
+ ```
56
+
57
+ ## Commands
58
+
59
+ ```sh
60
+ npm run validate # naming rules, tiers, aliases, DTCG value shapes, every contrast pair in both themes
61
+ npm run build # validate, then write dist/ and refresh generated doc tables
62
+ npm run audit # prove dist/showcase.html and the shipped scripts have no raw colour, size or duration outside :root
63
+ npm run release:check # what merging this would release, and whether that release is valid
64
+ npm run pack:check # the npm package has every file the README and package.json promise
65
+ npm run check -- <dir> # check a project that uses MotifSpec (see below)
66
+ ```
67
+
68
+ `scripts/check.mjs` is the one rule checker: this repo's audit runs it on `layouts/` and the component docs' markup, and projects run it from the version they pin. It checks a project's `layouts/` and `content/` against the release it comes from, and fails on:
69
+
70
+ - a stylesheet anywhere in the project, or a `style` attribute
71
+ - a raw colour, or a number with a length or time unit (zero is allowed)
72
+ - a primitive, unknown or deprecated `--cx-` token
73
+ - a `cx-` class that the stylesheet and scripts don't define, or a `cx-icon-` that isn't in `icons/manifest.json`
74
+ - "·" used as a separator
75
+
76
+ Releases are automatic; `CONVENTIONS.md` (Versioning) says how.
77
+
78
+ Node 20 or later, no dependencies.
79
+
80
+ ## Using it in Hugo
81
+
82
+ Import `github.com/aitrien/motifspec` as a Hugo module and pin a release with `hugo mod get github.com/aitrien/motifspec@vX.Y.Z`. The site then gets the CSS, scripts, fonts, component partials and Markdown render hooks; `docs/hugo.md` covers setup, every partial and the front matter they read.
83
+
84
+ ## Using it from npm
85
+
86
+ ```sh
87
+ npm install --save-exact @aitrien/motifspec
88
+ ```
89
+
90
+ Pin an exact version, as a Hugo site pins a tag: the version you install is the version the checker holds you to. The package has the CSS, scripts, tokens, fonts, icons, component docs, Hugo templates and the checker; it leaves out the showcase.
91
+
92
+ | Import | What it is |
93
+ |---|---|
94
+ | `@aitrien/motifspec/codex.css` | Tokens, fonts and every component. Its font URLs are `../fonts/…`, so a bundler that copies assets (Vite, webpack, Parcel) resolves them from the package. Without a bundler, serve `dist/` and `fonts/` side by side. |
95
+ | `@aitrien/motifspec/tokens.css`, `fonts.css`, `chroma.css` | The parts on their own: tokens only, `@font-face` only, syntax highlighting only. |
96
+ | `@aitrien/motifspec/codex.js` | Behaviour: theme toggle, copy buttons, TOC, tooltips. Load with `defer`. |
97
+ | `@aitrien/motifspec/theme-init.js` | Inline it in `<head>` before the stylesheet so a stored theme applies before first paint. |
98
+ | `@aitrien/motifspec/plate.js`, `backdrop.html` | The contour backdrop and its animation (`backdrop.md`). |
99
+ | `@aitrien/motifspec/icons.svg` | The icon sprite. Inline it once in `<body>`. |
100
+ | `@aitrien/motifspec/tokens.js`, `tokens.json` | Every token with its value, tier and CSS name, for build tools. |
101
+ | `@aitrien/motifspec/check` | `checkText` and `checkProject` from the rule checker. |
102
+ | `@aitrien/motifspec/fonts/*` | The WOFF2 files, for preloading. |
103
+
104
+ Copy component markup from `docs/components/*.md` (in the package under `node_modules/@aitrien/motifspec/docs/`). Then check the project, pointing `--dirs` at the folders with your markup:
105
+
106
+ ```sh
107
+ npx motifspec-check . --dirs src
108
+ ```
109
+
110
+ It reads `.html`, `.jsx`, `.tsx`, `.vue`, `.svelte`, `.astro`, `.md` and `.mdx` (both `class` and `className`), and skips `node_modules`, `dist` and `build`. Its stylesheet rule applies here too: a project using MotifSpec has no CSS of its own.
111
+
112
+ ## The identity in brief
113
+
114
+ | | |
115
+ |---|---|
116
+ | Concept | A specimen ledger: an archival botanical compendium drawn as a technical catalogue, with a US national-park signage voice. |
117
+ | Colour | Five dye-plant hues generated in OKLCH: ash (neutral), sap (accent and success), woad (focus and info), weld (warning) and madder (danger). Cool paper in light mode, green-black in dark mode. |
118
+ | Type | National Park (display and body), JetBrains Mono (code and labels), Yarndings 12 (ornament). 88 KB total. |
119
+ | Signature | The accession label: every entry has a catalogue number (`LM-W-004`, `LM-P-031`) shown on a framed label with registration ticks. |
120
+ | Decoration | The backdrop: a contour survey of generated terrain that slowly drifts behind every page under a grainy frost, showing through above the header and below the footer. The same survey framed as the specimen plate (Plate 0) for landing pages, and a knitted Yarndings band in the footer. |
121
+ | Icons | 16 Material Symbols (Sharp, weight 300) as a self-hosted SVG sprite: direction arrows, theme, copy, callout kinds, RSS, external links. Functional only. |
122
+ | Separator | A muted pipe, `\|`, hidden from screen readers. |
123
+
124
+ See `CONVENTIONS.md` for naming, tiers, extensions and versioning.
125
+
126
+ ## Licence
127
+
128
+ The code, tokens and docs are MIT (`LICENSE`). The fonts keep their SIL Open Font Licences (`fonts/OFL-*.txt`) and the icons their Apache-2.0 licence (`icons/LICENSE`).
@@ -1 +1 @@
1
- <div class="cx-backdrop" aria-hidden="true" data-plate-seed="3"><svg class="cx-plate__map" viewBox="0 0 240 240" preserveAspectRatio="xMidYMid slice" focusable="false"><path class="cx-plate__grid" d="M60 0V240M0 60H240M120 0V240M0 120H240M180 0V240M0 180H240"></path><path class="cx-plate__line" style="--i: 0" pathLength="1" d="M110.7 0C113.8 1.1 117.1 3.5 120 3.4C122.7 3.3 125 1.1 127.5 0M0 200.3C0.9 203.5 2.8 206.9 2.7 210C2.7 213 0.9 215.7 0 218.6M240 214C237.5 213.8 235 213.2 232.5 213.4C230 213.6 227.5 214.7 225 215.2C222.5 215.8 220 216.3 217.5 216.6C215 216.8 212.5 216.7 210 216.6C207.5 216.5 205 216 202.5 215.7C200 215.4 197.5 214.8 195 214.8C192.5 214.8 189.5 215.1 187.5 215.7C186 216.1 185.1 216.9 183.9 217.5C182.6 218.2 181.3 218.6 180 219.6C178.3 220.9 176.2 223.6 174.8 225C173.9 225.9 173.3 226.3 172.5 227.2C171.3 228.6 169.8 230.8 168.6 232.5C167.3 234.1 166 235.8 165 237.1C164.3 238.2 163.7 239 163.1 240M23 240C25.3 238.7 27.5 236.9 30 236.2C32.4 235.4 35 235.5 37.5 235.4C40 235.3 42.5 235.1 45 235.7C47.8 236.5 50.5 238.6 53.3 240"></path><path class="cx-plate__line" style="--i: 1" pathLength="1" d="M99.4 0C101.3 1.5 103.3 3 105 4.4C106.5 5.5 107.9 6.5 109.2 7.5C110.4 8.4 111.1 9.4 112.5 10.3C114.4 11.4 117.5 13.1 120 13.3C122.5 13.5 125.5 12.9 127.5 11.8C129.3 10.8 130.4 9 131.6 7.5C132.9 6.1 134.2 4.4 135 3.1C135.7 2 136 1 136.4 0M0 188.9C1.3 190.9 2.7 192.8 3.8 195C5.1 197.3 6.2 200 7.2 202.5C8.3 205 9.2 207.5 10.1 210C11.1 212.5 12.2 215.5 13.1 217.5C13.8 218.9 14.1 219.8 15 220.9C16.2 222.3 17.8 223.9 19.9 225C22.5 226.4 26.9 227.3 30 227.6C32.7 227.9 35 227.5 37.5 227.4C40 227.2 42.5 226.8 45 226.9C47.5 227 50.3 227.1 52.5 228.1C54.6 229 56.3 230.7 58 232.5C59.9 234.6 61.4 237.5 63.1 240M240 205.6C237.5 206.1 235 206.5 232.5 207C230 207.5 227.5 208.1 225 208.6C222.5 209 220 209.5 217.5 209.8C215 210 212.5 210 210 209.9C207.5 209.7 205 209.1 202.5 208.7C200 208.2 197.5 207.5 195 207.2C192.5 206.9 190 206.6 187.5 207C185 207.3 182.4 208 180 209.2C177.4 210.6 174.7 212.8 172.5 215.3C170.1 218 168.1 221.9 166.2 225C164.6 227.6 163.2 230 161.7 232.5C160.2 235 158.7 237.5 157.1 240"></path><path class="cx-plate__line" style="--i: 2" pathLength="1" d="M0 6C2.5 5.6 5 5.2 7.5 4.7C10 4.1 12.5 3.5 15 2.8C17.5 2.2 20 1.5 22.5 1C24.8 0.6 27.1 0.3 29.3 0M59.9 0C62.4 0.2 65 0.4 67.5 0.6C70 0.7 72.5 0.6 75 0.7C77.5 0.8 80 0.7 82.5 1.1C85 1.4 87.6 1.7 90 2.6C92.6 3.6 95.1 5 97.5 6.7C100.1 8.5 102.5 11.3 105 13.5C107.5 15.8 110.1 18.5 112.5 20.1C114.3 21.3 115.6 21.9 117.7 22.5C120.4 23.2 124.6 24.2 127.5 23.5C130.3 22.9 133.2 20.6 135 18.9C136.3 17.7 136.8 16.5 137.6 15C138.8 12.9 140.3 9.6 141.2 7.5C141.8 6.1 142.1 5.1 142.5 3.9C142.9 2.6 143.3 1.3 143.7 0M0 180.4C1.9 182.8 4.3 185.6 5.6 187.5C6.4 188.7 6.8 189.5 7.5 190.6C8.3 192 9.4 193.3 10.3 195C11.5 197.1 12.6 200 13.9 202.5C15.2 205 16.7 207.8 18.2 210C19.5 212 20.9 214.1 22.5 215.4C23.8 216.4 25.2 216.9 26.5 217.5C27.7 218 28.6 218.5 30 218.8C32 219.2 35 219.3 37.5 219.3C40 219.3 42.5 218.9 45 218.8C47.5 218.8 50 218.4 52.5 218.9C55 219.3 58.1 220.2 60 221.4C61.5 222.4 62.3 223.5 63.4 225C64.8 227 66.2 230 67.5 232.5C68.8 235 70.1 237.5 71.4 240M240 198.2C237.5 199 235 199.9 232.5 200.6C230 201.3 227.5 201.8 225 202.3C222.5 202.8 220 203.3 217.5 203.5C215 203.7 212.3 203.7 210 203.5C208.1 203.3 206.7 202.9 204.7 202.5C202 201.9 198 200.7 195 200.2C192.4 199.8 190 199.5 187.5 199.7C185 199.8 182 200.6 180 201.1C178.5 201.5 177.5 202 176.3 202.5C175 203.1 173.9 203.6 172.5 204.5C170.4 205.8 166.9 207.8 165 210C163.1 212.1 162.1 215 161 217.5C159.9 220 159.3 222.5 158.4 225C157.4 227.5 156.3 230 155.1 232.5C153.8 235 152.2 237.5 150.7 240"></path><path class="cx-plate__line" style="--i: 3" pathLength="1" d="M151.8 0C151.3 2.5 150.8 5 150.2 7.5C149.5 10 148.8 12.5 147.8 15C146.8 17.5 146 20.2 144.3 22.5C142.3 25.2 139.1 28.5 136.1 30C133.5 31.4 130.3 31.7 127.5 31.9C124.9 32 122.2 31.7 120 31.3C118.3 31 116.8 30.5 115.4 30C114.3 29.6 113.7 29.5 112.5 28.8C110.5 27.8 107.4 25.8 105 23.7C102.4 21.5 100.1 18.3 97.5 16C95.1 13.9 92.6 11.8 90 10.4C87.6 9.1 85 8.3 82.5 7.7C80 7.1 77.5 6.9 75 6.6C72.5 6.3 70 6.3 67.5 6.1C65 6 62.5 5.8 60 5.6C57.5 5.4 55 5.1 52.5 5C50 4.8 47.5 4.5 45 4.5C42.5 4.5 39.9 4.6 37.5 5.1C35.1 5.6 32.8 6.4 30.4 7.5C27.8 8.7 24.8 10.7 22.5 12.1C20.7 13.2 19.2 14.2 17.8 15C16.8 15.7 16.2 16.3 15 16.8C13.1 17.4 10 17.8 7.5 17.5C5 17.3 2.5 16.1 0 15.4M0 172.3C2.2 174.9 4.4 177.5 6.6 180C8.8 182.5 11.7 185.5 13.1 187.5C14 188.7 14.3 189.5 15 190.6C15.9 192 17.1 193.3 18.2 195C19.6 197 20.7 199.9 22.5 202.1C24.5 204.4 27.8 207.2 30 208.5C31.5 209.4 32.7 209.6 34 210C35.2 210.4 36.1 210.7 37.5 210.9C39.5 211.2 42.5 211.1 45 211.1C47.5 211.1 50 210.8 52.5 211C55 211.1 57.6 211.1 60 211.9C62.6 212.7 65.5 214 67.5 216.1C69.7 218.3 71.3 222.2 72.6 225C73.6 227.2 73.9 229.1 75 231.3C76.4 234 78.8 237.1 80.6 240M240 188.4C237.5 190 234.8 192.1 232.5 193.2C230.8 194.1 229.6 194.5 227.7 195C224.9 195.8 220.6 196.6 217.5 197C214.8 197.2 212.5 197.3 210 197.1C207.5 196.8 205 196.2 202.5 195.7C200 195.1 197.5 194.2 195 193.9C192.5 193.5 190 193.2 187.5 193.4C185 193.5 182.5 194 180 194.7C177.5 195.4 175 196.6 172.5 197.6C170 198.6 166.9 200 165 200.9C163.7 201.5 163 201.8 161.9 202.5C160.5 203.5 158.8 205.2 157.5 206.6C156.4 207.7 155.5 208.5 154.8 210C153.7 211.9 153.1 215 152.5 217.5C151.9 220 151.7 222.5 151 225C150.3 227.5 149.5 230.1 148.3 232.5C146.9 235.1 144.6 237.5 142.8 240"></path><path class="cx-plate__line cx-plate__line--index" style="--i: 4" pathLength="1" d="M163.9 0C164.2 2.5 165.1 5.1 164.6 7.5C164.2 10.1 162.5 13 161.1 15C160 16.6 158.5 17.4 157.5 18.7C156.6 19.9 156.4 21.1 155.5 22.5C154.1 24.5 152.1 27.3 150 29.3C147.8 31.5 145.1 33.7 142.5 35.1C140.2 36.3 138 37 135.6 37.5C133 38 130.1 38.1 127.5 38.1C125.2 38 123.1 37.9 120.8 37.5C118.1 37 115.2 36.2 112.5 35.3C109.9 34.4 106.9 32.9 105 31.9C103.7 31.2 103 30.8 101.9 30C100.5 29 98.9 27.4 97.5 26.1C96.2 24.9 94.9 23.7 93.6 22.5C92.4 21.4 91.5 20.3 90 19.2C88.1 17.8 85.3 16.1 82.8 15C80.3 13.9 77.6 13.3 75 12.8C72.5 12.3 70 12 67.5 11.8C65 11.5 62.5 11.3 60 11.1C57.5 11 55 10.8 52.5 10.7C50 10.7 47.5 10.6 45 10.8C42.5 11 39.9 11.3 37.5 12C35.1 12.7 32.9 13.7 30.5 15C27.9 16.4 24.6 19 22.5 20.3C21.1 21.2 20.2 21.8 19 22.5C17.7 23.2 16.6 24 15 24.7C12.9 25.7 10 26.9 7.5 27.5C5 28.1 2.5 28 0 28.2M193.6 0C193.5 2.5 193.7 5 193.4 7.5C193 10 191.6 12.5 191.3 15C191.1 17.5 191.2 20.3 191.9 22.5C192.5 24.4 193.5 26.8 195 27.4C196.8 28 200.7 26.7 202.5 24.9C204.6 22.8 204.6 17 206.2 15C207.3 13.8 208.5 13.5 210 12.9C212 12.1 215.4 11.9 217.5 10.8C219.3 10 220.9 8.9 222.1 7.5C223.4 6.1 224 4 225 2.6C225.7 1.6 226.5 0.9 227.2 0M0 164.2C2.4 167 4.7 170 7.3 172.5C9.7 174.9 12.4 177 15 179.1C17.5 181.2 20.5 183.6 22.5 185.1C23.8 186.1 24.6 186.5 25.7 187.5C27.1 188.9 28.3 190.9 30 192.7C32.1 194.9 34.8 197.9 37.5 199.6C39.9 201 42.5 201.8 45 202.4C47.5 203 50 202.8 52.5 203C55 203.3 57.5 203.4 60 204C62.5 204.6 65.3 205.5 67.5 206.6C69.5 207.6 71.4 208.9 72.7 210C73.7 210.8 74.2 211.5 75 212.5C76.1 213.9 77.4 215.6 78.4 217.5C79.6 219.7 80.1 222.6 81.3 225C82.6 227.6 84.2 230.7 85.9 232.5C87.2 233.9 88.3 234.8 90 235.5C92 236.4 95 236.5 97.5 236.7C100 237 102.5 236.7 105 236.9C107.5 237 110 237.2 112.5 237.5C115 237.8 117.5 238.3 120 238.6C122.5 238.8 125 239.2 127.5 239C130 238.7 132.8 238.2 135 237.1C137.1 236 139.3 234.1 140.6 232.5C141.6 231.3 141.9 230.2 142.5 228.9C143.1 227.7 143.7 226.6 144.1 225C144.6 222.9 144.8 220 145.2 217.5C145.5 215 145.5 212.4 146.3 210C147.1 207.5 148.2 204.7 150 202.8C151.9 200.7 155 199.4 157.5 198.1C159.7 196.9 161.8 196 164.1 195C166.7 193.9 169.8 193 172.5 192C175.1 191.1 177.5 190.1 180 189.3C182.5 188.6 185 187.9 187.5 187.7C190 187.4 192.5 187.6 195 187.8C197.5 188.1 200 188.8 202.5 189.2C205 189.5 207.5 190.1 210 190.1C212.5 190.2 215 190 217.5 189.6C220 189.2 222.6 188.8 225 187.6C227.6 186.4 230.2 184.6 232.5 182.2C235.3 179.2 237.5 174.3 240 170.4"></path><path class="cx-plate__line" style="--i: 5" pathLength="1" d="M0 36.9C2.5 36.2 5 35.5 7.5 34.7C10 34 12.8 33.2 15 32.3C16.8 31.6 18.3 30.7 19.7 30C20.8 29.5 21.4 29.2 22.5 28.5C24.4 27.3 27.5 25 30 23.4C32.5 21.9 34.9 20.2 37.5 19.1C39.9 18.1 42.5 17.5 45 17C47.5 16.6 50 16.5 52.5 16.4C55 16.3 57.5 16.4 60 16.6C62.5 16.8 65 17 67.5 17.4C70 17.9 72.5 18.3 75 19.1C77.5 19.9 80.1 21 82.5 22.4C85.1 23.9 88.2 26.4 90 27.8C91 28.7 91.4 29.2 92.3 30C93.7 31.1 95.7 32.6 97.5 33.9C99.4 35.1 101.3 36.4 103.5 37.5C106.2 38.7 109.6 39.8 112.5 40.6C115.1 41.3 117.5 41.7 120 42.1C122.5 42.5 125 42.7 127.5 42.8C130 43 132.5 43.1 135 42.9C137.5 42.8 140 42.5 142.5 41.9C145 41.3 148 40.1 150 39.2C151.4 38.6 152.2 38.2 153.4 37.5C154.7 36.6 155.9 35.3 157.5 34.2C159.6 32.8 162.4 30.7 165 30C167.4 29.4 170.1 29.3 172.5 30.1C175.2 31 177.5 33.6 180 35.6C182.6 37.7 185.3 40.7 187.5 42.3C189.1 43.5 190.5 44.2 191.9 45C193 45.6 193.7 46.2 195 46.7C196.9 47.4 200 48.6 202.5 48.6C205 48.7 207.9 48.3 210 46.9C212.6 45 214.1 40.4 216.2 37.5C218.1 34.8 220 31.6 221.8 30C222.9 29 223.6 28.3 225 28C226.9 27.5 230 28.4 232.5 28.7C235 29.1 237.5 29.8 240 30.3M0 156.6C2.5 159.2 4.9 162.2 7.5 164.6C9.9 166.7 12.5 168.7 15 170.1C17.2 171.3 19.3 171.7 21.7 172.5C24.3 173.4 27.3 174.2 30 175.4C32.6 176.5 35.2 177.4 37.5 179.2C40.2 181.3 42.3 185.1 44.9 187.5C47.4 189.8 50.5 192.1 52.5 193.4C53.7 194.2 54.5 194.5 55.7 195C57 195.5 58.4 195.8 60 196.3C62.2 197.1 65.2 198.2 67.5 199.3C69.7 200.3 71.5 201.1 73.6 202.5C76.4 204.3 79.9 206.9 82.5 209.5C84.9 212 86.8 214.9 88.8 217.5C90.8 220 92.8 223.4 94.5 225C95.6 226 96.2 226.4 97.5 227C99.4 228 102.5 229.1 105 229.9C107.5 230.7 110.5 231.4 112.5 231.9C113.7 232.2 114.5 232.3 115.6 232.5C116.9 232.7 118.3 233 120 233.1C122.2 233.3 125.1 233.7 127.5 232.9C130.1 232.1 133.5 229.4 135 227.8C135.9 226.8 136.2 226.2 136.7 225C137.4 223.2 137.8 220 138.2 217.5C138.5 215 138.4 212.5 138.9 210C139.4 207.5 139.7 204.8 141.2 202.5C143 199.7 146.7 196.7 149.7 195C152.2 193.5 154.9 193.2 157.5 192.4C160 191.6 162.6 190.8 165 189.9C167.2 189.2 169.1 188.4 171.4 187.5C174 186.5 177.2 185.1 180 184.2C182.6 183.4 185 182.6 187.5 182.2C190 181.7 192.5 181.6 195 181.5C197.5 181.4 200 181.7 202.5 181.7C205 181.8 207.6 182 210 181.7C212.3 181.4 214.6 181.1 216.8 180C219.6 178.6 222.5 175.9 225 173.4C227.6 170.9 229.6 167.8 232 165C234.5 162.1 237.3 159.2 240 156.4"></path><path class="cx-plate__line" style="--i: 6" pathLength="1" d="M0 44.8C2.5 43.9 5 43.1 7.5 42.3C10 41.5 12.7 40.8 15 40C16.9 39.2 18.3 38.6 20.3 37.5C23.1 36 27 33.5 30 31.5C32.7 29.8 34.9 27.9 37.5 26.5C39.9 25.2 42.7 24 45 23.4C46.8 22.9 48 22.7 49.9 22.5C52.6 22.2 57.6 22 60 22.1C61.4 22.1 62.1 22.3 63.2 22.5C64.5 22.7 65.9 22.8 67.5 23.1C69.7 23.6 72.6 24.4 75 25.4C77.6 26.5 80.1 27.9 82.5 29.5C85.1 31.1 88 33.6 90 35.1C91.3 36.1 92.1 36.7 93.2 37.5C94.5 38.4 95.8 39.3 97.5 40.1C99.6 41.2 102.6 42.5 105 43.4C107.1 44.1 108.7 44.5 110.9 45C113.6 45.6 117.1 46.2 120 46.6C122.6 46.9 125 47.1 127.5 47.3C130 47.5 132.5 47.7 135 47.8C137.5 47.9 140 48 142.5 47.8C145 47.7 147.5 47.3 150 46.9C152.5 46.4 154.8 45.6 157.3 45C159.8 44.4 162.5 43.3 165 43.3C167.4 43.3 169.7 44 172.1 45C174.7 46.1 177.8 48.3 180 49.7C181.6 50.7 182.8 51.7 184.2 52.5C185.3 53.2 186.2 53.7 187.5 54.5C189.5 55.6 192.5 57.5 195 58.8C197.5 60.1 200 61.4 202.5 62.5C205 63.6 207.5 64.6 210 65.4C212.5 66.1 215 66.8 217.5 67.2C220 67.6 222.5 67.8 225 67.9C227.5 68 230 67.9 232.5 67.8C235 67.8 237.5 67.7 240 67.6M0 149.8C2.5 152.1 4.9 154.7 7.5 156.8C9.9 158.8 12.4 160.7 15 162.1C17.4 163.3 20 164 22.5 164.7C25 165.4 27.5 165.6 30 166.3C32.5 167 35.1 167.7 37.5 168.8C39.8 169.8 41.9 170.9 44.1 172.5C46.7 174.4 49.3 177.5 51.8 180C54.3 182.5 56.7 185.4 59.4 187.5C61.9 189.5 65.2 191.1 67.5 192.5C69.1 193.5 70.3 194.2 71.6 195C72.8 195.7 73.7 196.1 75 196.9C77 198.1 80 199.9 82.5 201.6C85 203.3 87.9 205.7 90 207.2C91.5 208.3 92.8 208.9 94 210C95.3 211.1 96.2 212.4 97.5 213.6C98.9 214.9 100.9 216.4 102.2 217.5C103.3 218.4 103.8 219 105 219.8C106.9 221.1 110.5 223.3 112.5 224.2C113.7 224.7 114.4 224.7 115.5 225C116.8 225.3 118.5 225.8 120 225.8C121.4 225.8 122.7 225.5 124 225C125.2 224.6 126.5 224.1 127.5 223.1C128.7 221.9 129.4 219.6 130.1 217.5C130.8 215.2 130.8 212.5 131.3 210C131.9 207.5 132.2 204.9 133.4 202.5C134.7 199.9 137.1 196.7 138.9 195C140.1 193.9 141 193.5 142.5 192.7C144.5 191.7 147.5 190.6 150 189.8C152.5 188.9 155 188.3 157.5 187.6C160 186.9 162.5 186.2 165 185.4C167.5 184.5 170.2 183.4 172.5 182.4C174.6 181.6 176.1 180.9 178.3 180C181 178.9 184.6 177.3 187.5 176.2C190.1 175.2 192.9 174.2 195 173.6C196.4 173.1 197.5 173.1 198.7 172.5C200 171.8 201.1 170.6 202.5 169.5C204.2 168.2 205.8 166.5 207.9 165C210.6 163.1 215.1 160.3 217.5 159.1C218.9 158.3 219.8 157.9 221 157.5C222.3 157.1 223.5 157.1 225 156.5C227.2 155.7 230.6 154 232.5 152.7C233.8 151.8 234.3 151 235.4 150C236.7 148.8 238.5 147.3 240 145.9"></path><path class="cx-plate__line" style="--i: 7" pathLength="1" d="M0 53.5C2.5 52.5 5 51.4 7.5 50.6C10 49.7 12.5 49.3 15 48.3C17.5 47.4 19.9 46.3 22.4 45C24.9 43.6 28.1 41.3 30 39.9C31.2 39 31.7 38.3 32.8 37.5C34.1 36.4 35.7 35.2 37.5 34.1C39.6 32.7 42.1 31 44.6 30C47.1 29 49.9 28.3 52.5 27.9C55 27.5 57.5 27.4 60 27.6C62.5 27.7 65.5 28.3 67.5 28.8C68.9 29.1 69.8 29.6 71 30C72.3 30.5 73.5 30.8 75 31.6C77.2 32.7 80 34.5 82.5 36.2C85 37.9 87.6 40.1 90 41.6C92.1 42.9 93.7 44 95.9 45C98.6 46.2 102.1 47.5 105 48.3C107.6 49 110 49.3 112.5 49.7C115 50.1 117.5 50.4 120 50.7C122.5 51 125 51.3 127.5 51.6C130 51.8 132.5 52.1 135 52.4C137.5 52.7 140 53.1 142.5 53.3C145 53.5 147.5 53.7 150 53.8C152.5 53.9 155 53.8 157.5 54C160 54.1 162.5 54.2 165 54.7C167.5 55.2 170.2 56.2 172.5 57.2C174.5 58 176 58.9 178.1 60C180.8 61.4 185 63.5 187.5 65C189.2 65.9 190.4 66.7 191.7 67.5C192.8 68.2 193.7 68.8 195 69.6C197 70.9 200 72.9 202.5 74.5C205 76 207.4 77.8 210 78.9C212.4 80 215 80.6 217.5 81.2C220 81.7 222.5 81.6 225 82.1C227.5 82.6 230.1 82.9 232.5 84.1C235.2 85.5 237.5 88.3 240 90.4M240 135.1C237.6 137.6 235.4 140.6 232.7 142.5C230.3 144.2 227.6 145.5 225 146.3C222.5 147 220 147 217.5 147.1C215 147.2 212.5 146.6 210 146.7C207.5 146.8 204.3 146.9 202.5 147.7C201.2 148.3 200.6 148.9 199.6 150C198.1 151.6 196.4 154.6 195 157.1C193.6 159.6 192.9 163 191.5 165C190.3 166.6 188.9 167.3 187.5 168.5C186 169.8 184.6 171.2 182.6 172.5C179.9 174.2 175.3 176.2 172.5 177.6C170.6 178.5 169.5 179.2 167.5 180C164.8 181.1 160.6 182.5 157.5 183.4C154.8 184.2 152.5 184.6 150 185.2C147.5 185.8 144.9 186.1 142.5 187.1C139.9 188.1 137.2 189.7 135 191.2C133.2 192.4 131.5 193.6 130.3 195C129.1 196.3 128.5 197.9 127.5 199.2C126.6 200.4 125.6 201.1 124.6 202.5C123.2 204.4 122.1 208.4 120 209.8C118 211.2 115 211.4 112.5 211.1C110 210.9 107.5 209.4 105 208.2C102.5 207.1 99.3 205.4 97.5 204.3C96.4 203.6 96 203.1 94.9 202.5C93.6 201.7 91.8 201 90 200C87.7 198.8 85 197.1 82.5 195.6C80 194.1 77.3 192.3 75 190.9C73.1 189.7 71.2 188.5 69.9 187.5C68.9 186.8 68.5 186.3 67.5 185.4C65.9 184.1 63.5 182 61.5 180C59.3 177.7 57.2 174.9 54.6 172.5C51.9 169.9 48.5 167 45.4 165C42.8 163.2 40.2 161.9 37.5 160.8C35 159.8 32.3 159.2 30 158.6C28 158.2 26.5 158.1 24.5 157.5C21.7 156.7 17.8 155.5 15 154.2C12.6 153 10.9 151.6 8.6 150C5.9 148.2 2.9 145.8 0 143.7"></path><path class="cx-plate__line" style="--i: 8" pathLength="1" d="M0 62.5C2.1 61.7 3.9 60.7 6.2 60C8.8 59.1 12.2 58.5 15 57.8C17.6 57.1 20.3 56.8 22.5 55.9C24.4 55 26.1 53.4 27.5 52.5C28.5 51.8 29.1 51.6 30 50.8C31.5 49.5 33.7 46.4 35.2 45C36.1 44.1 36.5 43.8 37.5 43C39.1 41.6 41.6 39 44 37.5C46.6 36 49.7 34.8 52.5 34.2C55 33.6 57.5 33.5 60 33.6C62.5 33.7 65.1 34.2 67.5 34.9C69.7 35.6 71.6 36.3 73.8 37.5C76.5 38.9 80.5 41.8 82.5 43.2C83.6 44 84.1 44.3 85.1 45C86.5 45.9 88.1 47.3 90 48.4C92.2 49.6 95.4 50.9 97.5 51.6C99 52.1 100.1 52.2 101.4 52.5C102.6 52.8 103.6 53.1 105 53.3C107 53.7 110 54 112.5 54.2C115 54.5 117.5 54.7 120 55C122.5 55.3 125 55.6 127.5 56C130 56.4 132.5 56.8 135 57.3C137.5 57.8 140.2 58.4 142.5 58.9C144.4 59.3 145.8 59.5 147.9 60C150.6 60.6 154.5 61.7 157.5 62.4C160.2 63.1 162.5 63.7 165 64.5C167.5 65.3 170 66.2 172.5 67.2C175 68.1 177.5 69.1 180 70.4C182.5 71.6 185.1 73 187.5 74.6C190.1 76.4 193.2 79 195 80.5C196.1 81.3 196.5 81.6 197.5 82.5C198.9 83.8 201 86.5 202.5 87.8C203.6 88.7 204.3 89.2 205.4 90C206.8 91.1 208.2 92.7 210 93.8C212.1 95.1 215 95.8 217.5 97.1C220 98.4 223.2 100.1 225 101.7C226.3 102.7 226.7 103.6 227.7 105C229.1 106.9 231.2 109.7 232.5 112.2C233.8 114.7 235.1 117.4 235.4 120C235.6 122.5 235.2 125.2 234.1 127.5C232.8 130.2 230.2 133.3 227.4 135C224.7 136.7 220.6 137.4 217.5 137.6C214.8 137.7 212.5 136.9 210 136.6C207.5 136.2 205 135.4 202.5 135.7C200 135.9 197 136.9 195 138.2C193.3 139.3 192.3 140.8 191.1 142.5C189.8 144.6 188.6 147.5 187.8 150C186.9 152.5 186.8 155.1 185.8 157.5C184.8 160.1 183.8 162.7 181.9 165C179.6 167.7 175.5 170.5 172.5 172.4C169.9 174.1 167.5 175.1 165 176.3C162.5 177.4 159.5 178.5 157.5 179.2C156.2 179.6 155.4 179.7 154.3 180C152.9 180.3 151.6 180.6 150 181C147.9 181.5 145 182 142.5 182.7C140 183.5 137.1 184.4 135 185.3C133.3 186 132 186.7 130.7 187.5C129.5 188.2 128.7 189 127.5 190C125.7 191.3 123.5 193.4 121.2 195C118.6 196.8 115.4 199.4 112.5 200.2C110 200.8 107.5 200.3 105 199.9C102.5 199.5 99.8 198.4 97.5 197.6C95.5 196.8 94.1 196 92 195C89.3 193.6 84.9 191.4 82.5 190C80.9 189.1 79.9 188.4 78.7 187.5C77.4 186.6 76.3 185.7 75 184.6C73.4 183.3 71.1 181.4 69.7 180C68.8 179.1 68.4 178.4 67.5 177.4C66.3 176.1 64.5 174 63.1 172.5C62 171.3 61.2 170.3 60 169.2C58.7 167.8 56.9 166.2 55.5 165C54.4 164 53.7 163.4 52.5 162.5C50.7 161.1 47.9 159.1 45.5 157.5C42.9 155.8 40.1 153.6 37.5 152.4C35.3 151.3 33.3 150.8 31 150C28.4 149.1 25.3 148 22.5 147.1C19.9 146.4 17.3 145.9 15 145.1C12.9 144.4 11.4 143.6 9.3 142.5C6.5 141.1 3.1 139.2 0 137.5"></path><path class="cx-plate__line cx-plate__line--index" style="--i: 9" pathLength="1" d="M0 71.4C2.5 70.4 4.9 68.9 7.5 68.3C10 67.8 12.5 67.7 15 68C17.5 68.3 20.3 69 22.5 70.2C24.7 71.3 27 73.4 28.3 75C29.2 76.1 29.4 77.1 30 78.3C30.7 79.6 31.5 80.9 32.1 82.5C32.9 84.6 33.6 87.5 34 90C34.4 92.5 35.3 95.5 34.5 97.5C33.8 99.4 31.1 100.5 30 101.9C29.2 103 29 103.8 28.2 105C27 107 24.3 109.9 23.1 112.5C22.1 114.9 21.9 117.5 21.2 120C20.6 122.5 20.3 125.5 19.1 127.5C18.1 129.3 16.8 130.8 15 131.8C13 132.8 10 133.3 7.5 133C5 132.8 2.5 131 0 130M48 45C49.3 43.9 50.7 43 52.5 42.4C54.6 41.6 57.5 41 60 41C62.5 41.1 65.3 41.8 67.5 42.5C69.5 43.1 70.9 43.8 72.8 45C75.6 46.7 79.4 50.1 82.5 52.1C85.1 53.8 87.4 55.6 90 56.6C92.4 57.5 95 57.8 97.5 58.2C100 58.5 102.5 58.6 105 58.7C107.5 58.8 110 58.8 112.5 59C115 59.1 117.9 59.3 120 59.5C121.5 59.6 122.6 59.8 123.9 60C125.1 60.2 126.1 60.3 127.5 60.7C129.6 61.1 132.5 61.9 135 62.7C137.5 63.4 140.1 64.4 142.5 65.2C144.7 66 146.5 66.6 148.7 67.5C151.4 68.6 154.7 70.4 157.5 71.5C160.1 72.5 162.5 73.2 165 74.1C167.5 74.9 170 75.8 172.5 76.8C175 77.9 178 79.2 180 80.3C181.4 81.1 182.2 81.6 183.4 82.5C184.7 83.5 186.2 84.7 187.5 85.9C188.8 87.2 190.1 88.5 191.4 90C192.6 91.5 193.9 93.6 195 94.9C195.8 95.9 196.3 96.4 197.1 97.5C198.5 99.3 200.4 102.6 202.4 105C204.6 107.6 207.3 110 209.8 112.5C212.3 115 217.9 118.3 217.5 119.8C217.2 121 212.5 121.1 210 121.4C207.5 121.7 205 120.9 202.5 121.4C200 121.8 197 123.1 195 124.3C193.5 125.2 192.7 126.5 191.5 127.5C190.2 128.6 188.7 129.5 187.5 130.7C186.2 132 185 133.3 184 135C182.7 137.1 181.3 139.9 180.5 142.5C179.7 145 179.7 147.5 179.2 150C178.7 152.5 178.6 155.1 177.6 157.5C176.5 160.1 174.9 162.8 172.9 165C170.8 167.3 167 169.5 165 170.8C163.9 171.6 163.4 172 162.3 172.5C161 173.2 159.3 173.9 157.5 174.5C155.3 175.2 152.5 176 150 176.6C147.5 177.3 144.9 177.8 142.5 178.4C140.4 178.9 138.7 179.3 136.5 180C133.8 180.9 130.2 182.3 127.5 183.6C125 184.8 123.1 186.2 120.7 187.5C118.1 189 115.3 191.2 112.5 192.1C110 192.9 107.5 193 105 193C102.5 192.9 100 192.3 97.5 191.6C95 190.8 92.4 189.9 90 188.6C87.4 187.4 84.7 185.6 82.5 184C80.6 182.7 78.8 181.2 77.5 180C76.5 179.1 75.9 178.4 75 177.4C73.8 176 72 174 70.7 172.5C69.6 171.1 68.6 169.9 67.5 168.6C66.4 167.4 65.3 166.2 64.1 165C62.8 163.7 61.4 162.3 60 161.1C58.6 159.8 57 158.6 55.7 157.5C54.5 156.5 53.7 155.7 52.5 154.6C50.9 153.2 48.4 151.4 47 150C46.1 149 45.8 148.1 45 147.1C43.9 145.7 42 144.4 41 142.5C40 140.4 39.6 137.5 39.2 135C38.9 132.5 39 130 39 127.5C38.9 125 38.9 122.5 38.9 120C38.8 117.5 38.7 115 38.7 112.5C38.6 110 38.1 107.5 38.6 105C39.1 102.5 40.2 98.9 41.6 97.5C42.6 96.5 43.7 96.7 45 96C47 94.9 50 92.9 52.5 91.2C55 89.4 58.1 87 60 85.4C61.3 84.3 62.4 83.9 63.1 82.5C64 80.7 64.7 76.9 63.9 75C63.3 73.4 61.5 72.5 60 71.3C58.3 70 56.2 68.9 54 67.5C51.3 65.7 46.8 64.1 45 61.4C43.3 59 42.7 54.7 43 52.5C43.3 51.1 44.3 50.4 45 49.3C45.9 48 46.8 46.2 48 45Z"></path><path class="cx-plate__line" style="--i: 10" pathLength="1" d="M0 84.8C2.5 82.9 4.9 79.7 7.5 79.1C9.9 78.6 13.2 79.4 15 81C17 82.8 18.6 87.1 18.6 90C18.6 92.6 17.2 95.1 15.8 97.5C14.2 100.2 10.5 102.9 9.1 105C8.2 106.3 8.3 108.4 7.5 108.5C6.6 108.7 5 106.3 3.9 105C2.5 103.5 1.3 101.7 0 100M94.2 67.5C95.3 67.1 96.2 67 97.5 66.7C99.5 66.3 102.5 65.8 105 65.5C107.5 65.2 110 65 112.5 65C115 65 117.5 65 120 65.3C122.5 65.6 125.5 66.1 127.5 66.6C128.8 66.9 129.6 67.1 130.7 67.5C132 68 133.4 68.8 135 69.7C137.2 70.8 140.1 72.1 142.5 73.7C145.1 75.3 147.6 77.6 150 79.2C152.1 80.5 154 81.4 156.3 82.5C158.9 83.8 162.2 85.2 165 86.3C167.6 87.4 170.1 88 172.5 89.4C175.1 90.8 178.3 93.3 180 94.9C181 95.9 181.4 96.4 182.2 97.5C183.3 99.3 185.3 102.4 185.9 105C186.5 107.4 186.6 110.1 186.1 112.5C185.5 115.1 183.6 118.1 182.4 120C181.6 121.2 180.9 121.8 180 122.9C178.9 124.2 177.4 125.8 176.1 127.5C174.8 129.3 173.5 131.2 172.5 133.5C171.4 136.1 170.6 139.6 170.2 142.5C169.8 145.1 170.3 147.5 170 150C169.7 152.5 169.3 155.4 168.4 157.5C167.5 159.3 166 160.8 165 162.2C164.2 163.2 163.8 164.1 162.9 165C161.6 166.2 159.5 167.4 157.5 168.5C155.2 169.8 152.5 171.1 150 172.1C147.5 173 145 173.4 142.5 174C140 174.6 137.5 175.1 135 175.8C132.5 176.5 129.7 177.2 127.5 178C125.7 178.7 124.5 179.2 122.5 180C119.8 181.2 115.7 183.7 112.5 184.8C109.9 185.7 107.5 186.3 105 186.4C102.5 186.5 100 186.2 97.5 185.5C95 184.9 92.1 183.6 90 182.5C88.4 181.7 87.3 180.9 86.1 180C84.8 179.1 83.7 178.1 82.5 177C81.1 175.7 79.6 174 78.3 172.5C77.1 171.1 76 169.6 75 168.3C74.1 167.1 73.4 166.2 72.3 165C71 163.4 68.8 161 67.5 159.7C66.6 158.8 66.1 158.4 65.2 157.5C63.8 156.2 61.5 154.1 60 152.7C58.9 151.7 58.1 151.1 57 150C55.6 148.4 53.8 146.3 52.5 144C51.1 141.4 49.8 137.9 49.1 135C48.6 132.4 48.6 130 48.5 127.5C48.4 125 48.5 122.5 48.7 120C48.9 117.5 49.1 114.9 49.8 112.5C50.4 110.2 51.1 108.2 52.5 106C54.2 103.3 57.4 100.3 60 98C62.4 95.9 65.5 94 67.5 92.6C68.9 91.6 69.9 91 71.1 90C72.4 88.9 73.7 87.3 75 86.1C76.3 84.8 77.6 83.9 78.7 82.5C80.1 80.9 80.9 78.7 82.5 76.8C84.5 74.4 87.8 71.2 90 69.6C91.5 68.5 92.8 68 94.2 67.5Z"></path><path class="cx-plate__line" style="--i: 11" pathLength="1" d="M96.5 82.5C99.1 81.3 102.2 79.6 105 78.6C107.5 77.6 110 76.2 112.5 76.4C115 76.6 118.8 78.2 120 80.1C121.1 81.9 120 85.2 120 87.1C120 88.4 119.5 89.2 120 90.4C120.8 92.4 123.6 95.7 126.1 97.5C128.6 99.3 132.1 100.1 135 100.9C137.6 101.6 140 101.8 142.5 102.2C145 102.7 148.1 103.1 150 103.7C151.3 104.1 152 104.4 153.1 105C154.5 105.8 156.3 107.2 157.5 108.5C158.7 109.7 160 110.9 160.4 112.5C161 114.5 160.3 117.5 159.8 120C159.4 122.5 158.3 125 157.9 127.5C157.6 130 157.5 132.5 157.6 135C157.6 137.5 158.2 140 158.5 142.5C158.8 145 159.3 147.5 159.2 150C159.1 152.5 158.9 155.1 157.7 157.5C156.5 160.2 154.1 163.1 151.6 165C149 166.9 145.4 167.7 142.5 168.7C139.9 169.6 137.5 170.1 135 170.8C132.6 171.4 130.2 171.9 127.8 172.5C125.2 173.1 122.5 173.7 120 174.5C117.5 175.3 115 176.5 112.5 177.3C110 178.1 107.5 179.2 105 179.4C102.5 179.7 99.9 179.5 97.5 178.8C94.9 178 91.9 176.2 90 175C88.8 174.1 88.1 173.5 87.1 172.5C85.7 171.1 84.2 169.3 82.5 167.2C80.3 164.5 77.7 160.4 75.2 157.5C72.7 154.7 70 152.5 67.6 150C65.2 147.5 62.6 145.1 60.8 142.5C59.3 140.1 58.2 137.6 57.5 135C56.7 132.5 56.4 130 56.3 127.5C56.1 125 56.2 122.5 56.5 120C56.9 117.5 57.7 114.3 58.4 112.5C58.9 111.3 59.3 110.8 60 109.8C60.9 108.4 62.3 106.4 63.6 105C64.8 103.7 66.1 102.9 67.5 101.7C69.2 100.4 71.1 99.1 73.2 97.5C75.9 95.5 79.6 92.9 82.5 90.9C85.1 89 87.5 87 90 85.5C92.2 84.3 94.2 83.6 96.5 82.5Z"></path><path class="cx-plate__line" style="--i: 12" pathLength="1" d="M86.6 97.5C87.8 96.9 88.6 96.1 90 95.6C92 94.9 95 94 97.5 94C100 94 103.2 94.9 105 95.7C106.2 96.2 106.6 96.9 107.6 97.5C109 98.3 110.8 99.1 112.5 100.2C114.5 101.5 116.6 103.4 118.9 105C121.6 106.9 125.3 109.4 127.5 110.7C128.8 111.5 129.5 111.8 130.6 112.5C132 113.4 133.5 114.6 135 115.8C136.6 117.1 138.5 118.5 139.8 120C141 121.3 141.7 122.9 142.5 124.2C143.1 125.4 143.6 126.2 144.1 127.5C144.9 129.5 145.7 132.5 146.4 135C147 137.5 147.6 140 148 142.5C148.4 145 149 147.5 148.8 150C148.6 152.5 147.9 155.6 146.7 157.5C145.7 159.1 144.2 160.1 142.5 161.2C140.4 162.6 137.6 164.1 135 164.9C132.6 165.6 130 165.6 127.5 166C125 166.3 122.5 166.4 120 166.8C117.5 167.2 115 167.8 112.5 168.3C110 168.9 107.5 170 105 170.2C102.5 170.3 99.7 170.1 97.5 169.2C95.3 168.4 93.4 166.8 91.6 165C89.6 163 87.9 159.8 86.3 157.5C84.9 155.6 84.1 154.2 82.5 152.3C80.5 149.9 77.5 147.1 75 144.4C72.5 141.6 69.2 138.8 67.5 135.8C66 133.2 65.2 130.2 64.8 127.5C64.4 125 64.5 122.4 65 120C65.4 117.6 66.1 115.3 67.5 113.1C69.1 110.3 72.1 107.3 74.7 105C77.1 102.9 80.3 101 82.5 99.6C84 98.7 85.3 98.2 86.6 97.5Z"></path><path class="cx-plate__line" style="--i: 13" pathLength="1" d="M89 105C91.5 103.9 94.7 103 97.5 103.1C100.1 103.1 102.6 103.9 105 104.8C107.6 105.8 110.3 107.7 112.5 109.2C114.2 110.3 115.7 111.4 117.1 112.5C118.2 113.4 118.9 114 120 115C121.6 116.4 124 118.1 125.9 120C128.1 122.2 130.6 125.1 132.1 127.5C133.4 129.5 134.2 131.2 135 133.4C136 136 137.1 139.6 137.3 142.5C137.6 145.1 137.4 148.2 136.7 150C136.3 151.1 135.9 151.7 135 152.5C133.5 153.8 130.1 155.5 127.5 156.1C125.1 156.7 122.5 156.2 120 156.2C117.5 156.2 115 156 112.5 156C110 155.9 107.5 156.2 105 155.7C102.5 155.1 99.2 153.9 97.5 152.7C96.3 151.9 96 151 95 150C93.7 148.7 91.4 146.9 90 145.5C88.9 144.4 88.2 143.6 87.2 142.5C85.8 141.1 83.8 139.1 82.5 137.7C81.5 136.7 80.8 136.2 79.8 135C78.5 133.2 76.2 130.1 75.4 127.5C74.7 125.1 74.5 122.4 75 120C75.6 117.4 77.4 114.4 78.9 112.5C80 111.1 81.1 110.3 82.5 109.2C84.3 107.8 86.6 106 89 105Z"></path></svg></div>
1
+ <div class="cx-backdrop" aria-hidden="true" data-plate-seed="3"><svg class="cx-plate__map" viewBox="0 0 240 240" preserveAspectRatio="xMidYMid slice" focusable="false"><path class="cx-plate__grid" d="M60 0V240M0 60H240M120 0V240M0 120H240M180 0V240M0 180H240"></path><path class="cx-plate__line" style="--i: 0" pathLength="1" d="M110.7 0C113.8 1.1 117.1 3.5 120 3.4C122.7 3.3 125 1.1 127.5 0M0 200.3C0.9 203.5 2.8 206.9 2.7 210C2.7 213 0.9 215.7 0 218.6M240 214C237.5 213.8 235 213.2 232.5 213.4C230 213.6 227.5 214.7 225 215.2C222.5 215.8 220 216.3 217.5 216.6C215 216.8 212.5 216.7 210 216.6C207.5 216.5 205 216 202.5 215.7C200 215.4 197.5 214.8 195 214.8C192.5 214.8 189.5 215.1 187.5 215.7C186 216.1 185.1 216.9 183.9 217.5C182.6 218.2 181.3 218.6 180 219.6C178.3 220.9 176.2 223.6 174.8 225C173.9 225.9 173.3 226.3 172.5 227.2C171.3 228.6 169.8 230.8 168.6 232.5C167.3 234.1 166 235.8 165 237.1C164.3 238.2 163.7 239 163.1 240M23 240C25.3 238.7 27.5 236.9 30 236.2C32.4 235.4 35 235.5 37.5 235.4C40 235.3 42.5 235.1 45 235.7C47.8 236.5 50.5 238.6 53.3 240"></path><path class="cx-plate__line" style="--i: 1" pathLength="1" d="M99.4 0C101.3 1.5 103.3 3 105 4.4C106.5 5.5 107.9 6.5 109.2 7.5C110.4 8.4 111.1 9.4 112.5 10.3C114.4 11.4 117.5 13.1 120 13.3C122.5 13.5 125.5 12.9 127.5 11.8C129.3 10.8 130.4 9 131.6 7.5C132.9 6.1 134.2 4.4 135 3.1C135.7 2 136 1 136.4 0M0 188.9C1.3 190.9 2.7 192.8 3.8 195C5.1 197.3 6.2 200 7.2 202.5C8.3 205 9.2 207.5 10.1 210C11.1 212.5 12.2 215.5 13.1 217.5C13.8 218.9 14.1 219.8 15 220.9C16.2 222.3 17.8 223.9 19.9 225C22.5 226.4 26.9 227.3 30 227.6C32.7 227.9 35 227.5 37.5 227.4C40 227.2 42.5 226.8 45 226.9C47.5 227 50.3 227.1 52.5 228.1C54.6 229 56.3 230.7 58 232.5C59.9 234.6 61.4 237.5 63.1 240M240 205.6C237.5 206.1 235 206.5 232.5 207C230 207.5 227.5 208.1 225 208.6C222.5 209 220 209.5 217.5 209.8C215 210 212.5 210 210 209.9C207.5 209.7 205 209.1 202.5 208.7C200 208.2 197.5 207.5 195 207.2C192.5 206.9 190 206.6 187.5 207C185 207.3 182.4 208 180 209.2C177.4 210.6 174.7 212.8 172.5 215.3C170.1 218 168.1 221.9 166.2 225C164.6 227.6 163.2 230 161.7 232.5C160.2 235 158.7 237.5 157.1 240"></path><path class="cx-plate__line" style="--i: 2" pathLength="1" d="M0 6C2.5 5.6 5 5.2 7.5 4.7C10 4.1 12.5 3.5 15 2.8C17.5 2.2 20 1.5 22.5 1C24.8 0.6 27.1 0.3 29.3 0M59.9 0C62.4 0.2 65 0.4 67.5 0.6C70 0.7 72.5 0.6 75 0.7C77.5 0.8 80 0.7 82.5 1.1C85 1.4 87.6 1.7 90 2.6C92.6 3.6 95.1 5 97.5 6.7C100.1 8.5 102.5 11.3 105 13.5C107.5 15.8 110.1 18.5 112.5 20.1C114.3 21.3 115.6 21.9 117.7 22.5C120.4 23.2 124.6 24.2 127.5 23.5C130.3 22.9 133.2 20.6 135 18.9C136.3 17.7 136.8 16.5 137.6 15C138.8 12.9 140.3 9.6 141.2 7.5C141.8 6.1 142.1 5.1 142.5 3.9C142.9 2.6 143.3 1.3 143.7 0M0 180.4C1.9 182.8 4.3 185.6 5.6 187.5C6.4 188.7 6.8 189.5 7.5 190.6C8.3 192 9.4 193.3 10.3 195C11.5 197.1 12.6 200 13.9 202.5C15.2 205 16.7 207.8 18.2 210C19.5 212 20.9 214.1 22.5 215.4C23.8 216.4 25.2 216.9 26.5 217.5C27.7 218 28.6 218.5 30 218.8C32 219.2 35 219.3 37.5 219.3C40 219.3 42.5 218.9 45 218.8C47.5 218.8 50 218.4 52.5 218.9C55 219.3 58.1 220.2 60 221.4C61.5 222.4 62.3 223.5 63.4 225C64.8 227 66.2 230 67.5 232.5C68.8 235 70.1 237.5 71.4 240M240 198.2C237.5 199 235 199.9 232.5 200.6C230 201.3 227.5 201.8 225 202.3C222.5 202.8 220 203.3 217.5 203.5C215 203.7 212.3 203.7 210 203.5C208.1 203.3 206.7 202.9 204.7 202.5C202 201.9 198 200.7 195 200.2C192.4 199.8 190 199.5 187.5 199.7C185 199.8 182 200.6 180 201.1C178.5 201.5 177.5 202 176.3 202.5C175 203.1 173.9 203.6 172.5 204.5C170.4 205.8 166.9 207.8 165 210C163.1 212.1 162.1 215 161 217.5C159.9 220 159.3 222.5 158.4 225C157.4 227.5 156.3 230 155.1 232.5C153.8 235 152.2 237.5 150.7 240"></path><path class="cx-plate__line" style="--i: 3" pathLength="1" d="M151.8 0C151.3 2.5 150.8 5 150.2 7.5C149.5 10 148.8 12.5 147.8 15C146.8 17.5 146 20.2 144.3 22.5C142.3 25.2 139.1 28.5 136.1 30C133.5 31.4 130.3 31.7 127.5 31.9C124.9 32 122.2 31.7 120 31.3C118.3 31 116.8 30.5 115.4 30C114.3 29.6 113.7 29.5 112.5 28.8C110.5 27.8 107.4 25.8 105 23.7C102.4 21.5 100.1 18.3 97.5 16C95.1 13.9 92.6 11.8 90 10.4C87.6 9.1 85 8.3 82.5 7.7C80 7.1 77.5 6.9 75 6.6C72.5 6.3 70 6.3 67.5 6.1C65 6 62.5 5.8 60 5.6C57.5 5.4 55 5.1 52.5 5C50 4.8 47.5 4.5 45 4.5C42.5 4.5 39.9 4.6 37.5 5.1C35.1 5.6 32.8 6.4 30.4 7.5C27.8 8.7 24.8 10.7 22.5 12.1C20.7 13.2 19.2 14.2 17.8 15C16.8 15.7 16.2 16.3 15 16.8C13.1 17.4 10 17.8 7.5 17.5C5 17.3 2.5 16.1 0 15.4M0 172.3C2.2 174.9 4.4 177.5 6.6 180C8.8 182.5 11.7 185.5 13.1 187.5C14 188.7 14.3 189.5 15 190.6C15.9 192 17.1 193.3 18.2 195C19.6 197 20.7 199.9 22.5 202.1C24.5 204.4 27.8 207.2 30 208.5C31.5 209.4 32.7 209.6 34 210C35.2 210.4 36.1 210.7 37.5 210.9C39.5 211.2 42.5 211.1 45 211.1C47.5 211.1 50 210.8 52.5 211C55 211.1 57.6 211.1 60 211.9C62.6 212.7 65.5 214 67.5 216.1C69.7 218.3 71.3 222.2 72.6 225C73.6 227.2 73.9 229.1 75 231.3C76.4 234 78.8 237.1 80.6 240M240 188.4C237.5 190 234.8 192.1 232.5 193.2C230.8 194.1 229.6 194.5 227.7 195C224.9 195.8 220.6 196.6 217.5 197C214.8 197.2 212.5 197.3 210 197.1C207.5 196.8 205 196.2 202.5 195.7C200 195.1 197.5 194.2 195 193.9C192.5 193.5 190 193.2 187.5 193.4C185 193.5 182.5 194 180 194.7C177.5 195.4 175 196.6 172.5 197.6C170 198.6 166.9 200 165 200.9C163.7 201.5 163 201.8 161.9 202.5C160.5 203.5 158.8 205.2 157.5 206.6C156.4 207.7 155.5 208.5 154.8 210C153.7 211.9 153.1 215 152.5 217.5C151.9 220 151.7 222.5 151 225C150.3 227.5 149.5 230.1 148.3 232.5C146.9 235.1 144.6 237.5 142.8 240"></path><path class="cx-plate__line cx-plate__line--index" style="--i: 4" pathLength="1" d="M163.9 0C164.2 2.5 165.1 5.1 164.6 7.5C164.2 10.1 162.5 13 161.1 15C160 16.6 158.5 17.4 157.5 18.7C156.6 19.9 156.4 21.1 155.5 22.5C154.1 24.5 152.1 27.3 150 29.3C147.8 31.5 145.1 33.7 142.5 35.1C140.2 36.3 138 37 135.6 37.5C133 38 130.1 38.1 127.5 38.1C125.2 38 123.1 37.9 120.8 37.5C118.1 37 115.2 36.2 112.5 35.3C109.9 34.4 106.9 32.9 105 31.9C103.7 31.2 103 30.8 101.9 30C100.5 29 98.9 27.4 97.5 26.1C96.2 24.9 94.9 23.7 93.6 22.5C92.4 21.4 91.5 20.3 90 19.2C88.1 17.8 85.3 16.1 82.8 15C80.3 13.9 77.6 13.3 75 12.8C72.5 12.3 70 12 67.5 11.8C65 11.5 62.5 11.3 60 11.1C57.5 11 55 10.8 52.5 10.7C50 10.7 47.5 10.6 45 10.8C42.5 11 39.9 11.3 37.5 12C35.1 12.7 32.9 13.7 30.5 15C27.9 16.4 24.6 19 22.5 20.3C21.1 21.2 20.2 21.8 19 22.5C17.7 23.2 16.6 24 15 24.7C12.9 25.7 10 26.9 7.5 27.5C5 28.1 2.5 28 0 28.2M193.6 0C193.5 2.5 193.7 5 193.4 7.5C193 10 191.6 12.5 191.3 15C191.1 17.5 191.2 20.3 191.9 22.5C192.5 24.4 193.5 26.8 195 27.4C196.8 28 200.7 26.7 202.5 24.9C204.6 22.8 204.6 17 206.2 15C207.3 13.8 208.5 13.5 210 12.9C212 12.1 215.4 11.9 217.5 10.8C219.3 10 220.9 8.9 222.1 7.5C223.4 6.1 224 4 225 2.6C225.7 1.6 226.5 0.9 227.2 0M0 164.2C2.4 167 4.7 170 7.3 172.5C9.7 174.9 12.4 177 15 179.1C17.5 181.2 20.5 183.6 22.5 185.1C23.8 186.1 24.6 186.5 25.7 187.5C27.1 188.9 28.3 190.9 30 192.7C32.1 194.9 34.8 197.9 37.5 199.6C39.9 201 42.5 201.8 45 202.4C47.5 203 50 202.8 52.5 203C55 203.3 57.5 203.4 60 204C62.5 204.6 65.3 205.5 67.5 206.6C69.5 207.6 71.4 208.9 72.7 210C73.7 210.8 74.2 211.5 75 212.5C76.1 213.9 77.4 215.6 78.4 217.5C79.6 219.7 80.1 222.6 81.3 225C82.6 227.6 84.2 230.7 85.9 232.5C87.2 233.9 88.3 234.8 90 235.5C92 236.4 95 236.5 97.5 236.7C100 237 102.5 236.7 105 236.9C107.5 237 110 237.2 112.5 237.5C115 237.8 117.5 238.3 120 238.6C122.5 238.8 125 239.2 127.5 239C130 238.7 132.8 238.2 135 237.1C137.1 236 139.3 234.1 140.6 232.5C141.6 231.3 141.9 230.2 142.5 228.9C143.1 227.7 143.7 226.6 144.1 225C144.6 222.9 144.8 220 145.2 217.5C145.5 215 145.5 212.4 146.3 210C147.1 207.5 148.2 204.7 150 202.8C151.9 200.7 155 199.4 157.5 198.1C159.7 196.9 161.8 196 164.1 195C166.7 193.9 169.8 193 172.5 192C175.1 191.1 177.5 190.1 180 189.3C182.5 188.6 185 187.9 187.5 187.7C190 187.4 192.5 187.6 195 187.8C197.5 188.1 200 188.8 202.5 189.2C205 189.5 207.5 190.1 210 190.1C212.5 190.2 215 190 217.5 189.6C220 189.2 222.6 188.8 225 187.6C227.6 186.4 230.2 184.6 232.5 182.2C235.3 179.2 237.5 174.3 240 170.4"></path><path class="cx-plate__line" style="--i: 5" pathLength="1" d="M0 36.9C2.5 36.2 5 35.5 7.5 34.7C10 34 12.8 33.2 15 32.3C16.8 31.6 18.3 30.7 19.7 30C20.8 29.5 21.4 29.2 22.5 28.5C24.4 27.3 27.5 25 30 23.4C32.5 21.9 34.9 20.2 37.5 19.1C39.9 18.1 42.5 17.5 45 17C47.5 16.6 50 16.5 52.5 16.4C55 16.3 57.5 16.4 60 16.6C62.5 16.8 65 17 67.5 17.4C70 17.9 72.5 18.3 75 19.1C77.5 19.9 80.1 21 82.5 22.4C85.1 23.9 88.2 26.4 90 27.8C91 28.7 91.4 29.2 92.3 30C93.7 31.1 95.7 32.6 97.5 33.9C99.4 35.1 101.3 36.4 103.5 37.5C106.2 38.7 109.6 39.8 112.5 40.6C115.1 41.3 117.5 41.7 120 42.1C122.5 42.5 125 42.7 127.5 42.8C130 43 132.5 43.1 135 42.9C137.5 42.8 140 42.5 142.5 41.9C145 41.3 148 40.1 150 39.2C151.4 38.6 152.2 38.2 153.4 37.5C154.7 36.6 155.9 35.3 157.5 34.2C159.6 32.8 162.4 30.7 165 30C167.4 29.4 170.1 29.3 172.5 30.1C175.2 31 177.5 33.6 180 35.6C182.6 37.7 185.3 40.7 187.5 42.3C189.1 43.5 190.5 44.2 191.9 45C193 45.6 193.7 46.2 195 46.7C196.9 47.4 200 48.6 202.5 48.6C205 48.7 207.9 48.3 210 46.9C212.6 45 214.1 40.4 216.2 37.5C218.1 34.8 220 31.6 221.8 30C222.9 29 223.6 28.3 225 28C226.9 27.5 230 28.4 232.5 28.7C235 29.1 237.5 29.8 240 30.3M0 156.6C2.5 159.2 4.9 162.2 7.5 164.6C9.9 166.7 12.5 168.7 15 170.1C17.2 171.3 19.3 171.7 21.7 172.5C24.3 173.4 27.3 174.2 30 175.4C32.6 176.5 35.2 177.4 37.5 179.2C40.2 181.3 42.3 185.1 44.9 187.5C47.4 189.8 50.5 192.1 52.5 193.4C53.7 194.2 54.5 194.5 55.7 195C57 195.5 58.4 195.8 60 196.3C62.2 197.1 65.2 198.2 67.5 199.3C69.7 200.3 71.5 201.1 73.6 202.5C76.4 204.3 79.9 206.9 82.5 209.5C84.9 212 86.8 214.9 88.8 217.5C90.8 220 92.8 223.4 94.5 225C95.6 226 96.2 226.4 97.5 227C99.4 228 102.5 229.1 105 229.9C107.5 230.7 110.5 231.4 112.5 231.9C113.7 232.2 114.5 232.3 115.6 232.5C116.9 232.7 118.3 233 120 233.1C122.2 233.3 125.1 233.7 127.5 232.9C130.1 232.1 133.5 229.4 135 227.8C135.9 226.8 136.2 226.2 136.7 225C137.4 223.2 137.8 220 138.2 217.5C138.5 215 138.4 212.5 138.9 210C139.4 207.5 139.7 204.8 141.2 202.5C143 199.7 146.7 196.7 149.7 195C152.2 193.5 154.9 193.2 157.5 192.4C160 191.6 162.6 190.8 165 189.9C167.2 189.2 169.1 188.4 171.4 187.5C174 186.5 177.2 185.1 180 184.2C182.6 183.4 185 182.6 187.5 182.2C190 181.7 192.5 181.6 195 181.5C197.5 181.4 200 181.7 202.5 181.7C205 181.8 207.6 182 210 181.7C212.3 181.4 214.6 181.1 216.8 180C219.6 178.6 222.5 175.9 225 173.4C227.6 170.9 229.6 167.8 232 165C234.5 162.1 237.3 159.2 240 156.4"></path><path class="cx-plate__line" style="--i: 6" pathLength="1" d="M0 44.8C2.5 43.9 5 43.1 7.5 42.3C10 41.5 12.7 40.8 15 40C16.9 39.2 18.3 38.6 20.3 37.5C23.1 36 27 33.5 30 31.5C32.7 29.8 34.9 27.9 37.5 26.5C39.9 25.2 42.7 24 45 23.4C46.8 22.9 48 22.7 49.9 22.5C52.6 22.2 57.6 22 60 22.1C61.4 22.1 62.1 22.3 63.2 22.5C64.5 22.7 65.9 22.8 67.5 23.1C69.7 23.6 72.6 24.4 75 25.4C77.6 26.5 80.1 27.9 82.5 29.5C85.1 31.1 88 33.6 90 35.1C91.3 36.1 92.1 36.7 93.2 37.5C94.5 38.4 95.8 39.3 97.5 40.1C99.6 41.2 102.6 42.5 105 43.4C107.1 44.1 108.7 44.5 110.9 45C113.6 45.6 117.1 46.2 120 46.6C122.6 46.9 125 47.1 127.5 47.3C130 47.5 132.5 47.7 135 47.8C137.5 47.9 140 48 142.5 47.8C145 47.7 147.5 47.3 150 46.9C152.5 46.4 154.8 45.6 157.3 45C159.8 44.4 162.5 43.3 165 43.3C167.4 43.3 169.7 44 172.1 45C174.7 46.1 177.8 48.3 180 49.7C181.6 50.7 182.8 51.7 184.2 52.5C185.3 53.2 186.2 53.7 187.5 54.5C189.5 55.6 192.5 57.5 195 58.8C197.5 60.1 200 61.4 202.5 62.5C205 63.6 207.5 64.6 210 65.4C212.5 66.1 215 66.8 217.5 67.2C220 67.6 222.5 67.8 225 67.9C227.5 68 230 67.9 232.5 67.8C235 67.8 237.5 67.7 240 67.6M0 149.8C2.5 152.1 4.9 154.7 7.5 156.8C9.9 158.8 12.4 160.7 15 162.1C17.4 163.3 20 164 22.5 164.7C25 165.4 27.5 165.6 30 166.3C32.5 167 35.1 167.7 37.5 168.8C39.8 169.8 41.9 170.9 44.1 172.5C46.7 174.4 49.3 177.5 51.8 180C54.3 182.5 56.7 185.4 59.4 187.5C61.9 189.5 65.2 191.1 67.5 192.5C69.1 193.5 70.3 194.2 71.6 195C72.8 195.7 73.7 196.1 75 196.9C77 198.1 80 199.9 82.5 201.6C85 203.3 87.9 205.7 90 207.2C91.5 208.3 92.8 208.9 94 210C95.3 211.1 96.2 212.4 97.5 213.6C98.9 214.9 100.9 216.4 102.2 217.5C103.3 218.4 103.8 219 105 219.8C106.9 221.1 110.5 223.3 112.5 224.2C113.7 224.7 114.4 224.7 115.5 225C116.8 225.3 118.5 225.8 120 225.8C121.4 225.8 122.7 225.5 124 225C125.2 224.6 126.5 224.1 127.5 223.1C128.7 221.9 129.4 219.6 130.1 217.5C130.8 215.2 130.8 212.5 131.3 210C131.9 207.5 132.2 204.9 133.4 202.5C134.7 199.9 137.1 196.7 138.9 195C140.1 193.9 141 193.5 142.5 192.7C144.5 191.7 147.5 190.6 150 189.8C152.5 188.9 155 188.3 157.5 187.6C160 186.9 162.5 186.2 165 185.4C167.5 184.5 170.2 183.4 172.5 182.4C174.6 181.6 176.1 180.9 178.3 180C181 178.9 184.6 177.3 187.5 176.2C190.1 175.2 192.9 174.2 195 173.6C196.4 173.1 197.5 173.1 198.7 172.5C200 171.8 201.1 170.6 202.5 169.5C204.2 168.2 205.8 166.5 207.9 165C210.6 163.1 215.1 160.3 217.5 159.1C218.9 158.3 219.8 157.9 221 157.5C222.3 157.1 223.5 157.1 225 156.5C227.2 155.7 230.6 154 232.5 152.7C233.8 151.8 234.3 151 235.4 150C236.7 148.8 238.5 147.3 240 145.9"></path><path class="cx-plate__line" style="--i: 7" pathLength="1" d="M0 53.5C2.5 52.5 5 51.4 7.5 50.6C10 49.7 12.5 49.3 15 48.3C17.5 47.4 19.9 46.3 22.4 45C24.9 43.6 28.1 41.3 30 39.9C31.2 39 31.7 38.3 32.8 37.5C34.1 36.4 35.7 35.2 37.5 34.1C39.6 32.7 42.1 31 44.6 30C47.1 29 49.9 28.3 52.5 27.9C55 27.5 57.5 27.4 60 27.6C62.5 27.7 65.5 28.3 67.5 28.8C68.9 29.1 69.8 29.6 71 30C72.3 30.5 73.5 30.8 75 31.6C77.2 32.7 80 34.5 82.5 36.2C85 37.9 87.6 40.1 90 41.6C92.1 42.9 93.7 44 95.9 45C98.6 46.2 102.1 47.5 105 48.3C107.6 49 110 49.3 112.5 49.7C115 50.1 117.5 50.4 120 50.7C122.5 51 125 51.3 127.5 51.6C130 51.8 132.5 52.1 135 52.4C137.5 52.7 140 53.1 142.5 53.3C145 53.5 147.5 53.7 150 53.8C152.5 53.9 155 53.8 157.5 54C160 54.1 162.5 54.2 165 54.7C167.5 55.2 170.2 56.2 172.5 57.2C174.5 58 176 58.9 178.1 60C180.8 61.4 185 63.5 187.5 65C189.2 65.9 190.4 66.7 191.7 67.5C192.8 68.2 193.7 68.8 195 69.6C197 70.9 200 72.9 202.5 74.5C205 76 207.4 77.8 210 78.9C212.4 80 215 80.6 217.5 81.2C220 81.7 222.5 81.6 225 82.1C227.5 82.6 230.1 82.9 232.5 84.1C235.2 85.5 237.5 88.3 240 90.4M240 135.1C237.6 137.6 235.4 140.6 232.7 142.5C230.3 144.2 227.6 145.5 225 146.3C222.5 147 220 147 217.5 147.1C215 147.2 212.5 146.6 210 146.7C207.5 146.8 204.3 146.9 202.5 147.7C201.2 148.3 200.6 148.9 199.6 150C198.1 151.6 196.4 154.6 195 157.1C193.6 159.6 192.9 163 191.5 165C190.3 166.6 188.9 167.3 187.5 168.5C186 169.8 184.6 171.2 182.6 172.5C179.9 174.2 175.3 176.2 172.5 177.6C170.6 178.5 169.5 179.2 167.5 180C164.8 181.1 160.6 182.5 157.5 183.4C154.8 184.2 152.5 184.6 150 185.2C147.5 185.8 144.9 186.1 142.5 187.1C139.9 188.1 137.2 189.7 135 191.2C133.2 192.4 131.5 193.6 130.3 195C129.1 196.3 128.5 197.9 127.5 199.2C126.6 200.4 125.6 201.1 124.6 202.5C123.2 204.4 122.1 208.4 120 209.8C118 211.2 115 211.4 112.5 211.1C110 210.9 107.5 209.4 105 208.2C102.5 207.1 99.3 205.4 97.5 204.3C96.4 203.6 96 203.1 94.9 202.5C93.6 201.7 91.8 201 90 200C87.7 198.8 85 197.1 82.5 195.6C80 194.1 77.3 192.3 75 190.9C73.1 189.7 71.2 188.5 69.9 187.5C68.9 186.8 68.5 186.3 67.5 185.4C65.9 184.1 63.5 182 61.5 180C59.3 177.7 57.2 174.9 54.6 172.5C51.9 169.9 48.5 167 45.4 165C42.8 163.2 40.2 161.9 37.5 160.8C35 159.8 32.3 159.2 30 158.6C28 158.2 26.5 158.1 24.5 157.5C21.7 156.7 17.8 155.5 15 154.2C12.6 153 10.9 151.6 8.6 150C5.9 148.2 2.9 145.8 0 143.7"></path><path class="cx-plate__line" style="--i: 8" pathLength="1" d="M0 62.5C2.1 61.7 3.9 60.7 6.2 60C8.8 59.1 12.2 58.5 15 57.8C17.6 57.1 20.3 56.8 22.5 55.9C24.4 55 26.1 53.4 27.5 52.5C28.5 51.8 29.1 51.6 30 50.8C31.5 49.5 33.7 46.4 35.2 45C36.1 44.1 36.5 43.8 37.5 43C39.1 41.6 41.6 39 44 37.5C46.6 36 49.7 34.8 52.5 34.2C55 33.6 57.5 33.5 60 33.6C62.5 33.7 65.1 34.2 67.5 34.9C69.7 35.6 71.6 36.3 73.8 37.5C76.5 38.9 80.5 41.8 82.5 43.2C83.6 44 84.1 44.3 85.1 45C86.5 45.9 88.1 47.3 90 48.4C92.2 49.6 95.4 50.9 97.5 51.6C99 52.1 100.1 52.2 101.4 52.5C102.6 52.8 103.6 53.1 105 53.3C107 53.7 110 54 112.5 54.2C115 54.5 117.5 54.7 120 55C122.5 55.3 125 55.6 127.5 56C130 56.4 132.5 56.8 135 57.3C137.5 57.8 140.2 58.4 142.5 58.9C144.4 59.3 145.8 59.5 147.9 60C150.6 60.6 154.5 61.7 157.5 62.4C160.2 63.1 162.5 63.7 165 64.5C167.5 65.3 170 66.2 172.5 67.2C175 68.1 177.5 69.1 180 70.4C182.5 71.6 185.1 73 187.5 74.6C190.1 76.4 193.2 79 195 80.5C196.1 81.3 196.5 81.6 197.5 82.5C198.9 83.8 201 86.5 202.5 87.8C203.6 88.7 204.3 89.2 205.4 90C206.8 91.1 208.2 92.7 210 93.8C212.1 95.1 215 95.8 217.5 97.1C220 98.4 223.2 100.1 225 101.7C226.3 102.7 226.7 103.6 227.7 105C229.1 106.9 231.2 109.7 232.5 112.2C233.8 114.7 235.1 117.4 235.4 120C235.6 122.5 235.2 125.2 234.1 127.5C232.8 130.2 230.2 133.3 227.4 135C224.7 136.7 220.6 137.4 217.5 137.6C214.8 137.7 212.5 136.9 210 136.6C207.5 136.2 205 135.4 202.5 135.7C200 135.9 197 136.9 195 138.2C193.3 139.3 192.3 140.8 191.1 142.5C189.8 144.6 188.6 147.5 187.8 150C186.9 152.5 186.8 155.1 185.8 157.5C184.8 160.1 183.8 162.7 181.9 165C179.6 167.7 175.5 170.5 172.5 172.4C169.9 174.1 167.5 175.1 165 176.3C162.5 177.4 159.5 178.5 157.5 179.2C156.2 179.6 155.4 179.7 154.3 180C152.9 180.3 151.6 180.6 150 181C147.9 181.5 145 182 142.5 182.7C140 183.5 137.1 184.4 135 185.3C133.3 186 132 186.7 130.7 187.5C129.5 188.2 128.7 189 127.5 190C125.7 191.3 123.5 193.4 121.2 195C118.6 196.8 115.4 199.4 112.5 200.2C110 200.8 107.5 200.3 105 199.9C102.5 199.5 99.8 198.4 97.5 197.6C95.5 196.8 94.1 196 92 195C89.3 193.6 84.9 191.4 82.5 190C80.9 189.1 79.9 188.4 78.7 187.5C77.4 186.6 76.3 185.7 75 184.6C73.4 183.3 71.1 181.4 69.7 180C68.8 179.1 68.4 178.4 67.5 177.4C66.3 176.1 64.5 174 63.1 172.5C62 171.3 61.2 170.3 60 169.2C58.7 167.8 56.9 166.2 55.5 165C54.4 164 53.7 163.4 52.5 162.5C50.7 161.1 47.9 159.1 45.5 157.5C42.9 155.8 40.1 153.6 37.5 152.4C35.3 151.3 33.3 150.8 31 150C28.4 149.1 25.3 148 22.5 147.1C19.9 146.4 17.3 145.9 15 145.1C12.9 144.4 11.4 143.6 9.3 142.5C6.5 141.1 3.1 139.2 0 137.5"></path><path class="cx-plate__line cx-plate__line--index" style="--i: 9" pathLength="1" d="M0 71.4C2.5 70.4 4.9 68.9 7.5 68.3C10 67.8 12.5 67.7 15 68C17.5 68.3 20.3 69 22.5 70.2C24.7 71.3 27 73.4 28.3 75C29.2 76.1 29.4 77.1 30 78.3C30.7 79.6 31.5 80.9 32.1 82.5C32.9 84.6 33.6 87.5 34 90C34.4 92.5 35.3 95.5 34.5 97.5C33.8 99.4 31.1 100.5 30 101.9C29.2 103 29 103.8 28.2 105C27 107 24.3 109.9 23.1 112.5C22.1 114.9 21.9 117.5 21.2 120C20.6 122.5 20.3 125.5 19.1 127.5C18.1 129.3 16.8 130.8 15 131.8C13 132.8 10 133.3 7.5 133C5 132.8 2.5 131 0 130M48 45C49.3 43.9 50.7 43 52.5 42.4C54.6 41.6 57.5 41 60 41C62.5 41.1 65.3 41.8 67.5 42.5C69.5 43.1 70.9 43.8 72.8 45C75.6 46.7 79.4 50.1 82.5 52.1C85.1 53.8 87.4 55.6 90 56.6C92.4 57.5 95 57.8 97.5 58.2C100 58.5 102.5 58.6 105 58.7C107.5 58.8 110 58.8 112.5 59C115 59.1 117.9 59.3 120 59.5C121.5 59.6 122.6 59.8 123.9 60C125.1 60.2 126.1 60.3 127.5 60.7C129.6 61.1 132.5 61.9 135 62.7C137.5 63.4 140.1 64.4 142.5 65.2C144.7 66 146.5 66.6 148.7 67.5C151.4 68.6 154.7 70.4 157.5 71.5C160.1 72.5 162.5 73.2 165 74.1C167.5 74.9 170 75.8 172.5 76.8C175 77.9 178 79.2 180 80.3C181.4 81.1 182.2 81.6 183.4 82.5C184.7 83.5 186.2 84.7 187.5 85.9C188.8 87.2 190.1 88.5 191.4 90C192.6 91.5 193.9 93.6 195 94.9C195.8 95.9 196.3 96.4 197.1 97.5C198.5 99.3 200.4 102.6 202.4 105C204.6 107.6 207.3 110 209.8 112.5C212.3 115 217.9 118.3 217.5 119.8C217.2 121 212.5 121.1 210 121.4C207.5 121.7 205 120.9 202.5 121.4C200 121.8 197 123.1 195 124.3C193.5 125.2 192.7 126.5 191.5 127.5C190.2 128.6 188.7 129.5 187.5 130.7C186.2 132 185 133.3 184 135C182.7 137.1 181.3 139.9 180.5 142.5C179.7 145 179.7 147.5 179.2 150C178.7 152.5 178.6 155.1 177.6 157.5C176.5 160.1 174.9 162.8 172.9 165C170.8 167.3 167 169.5 165 170.8C163.9 171.6 163.4 172 162.3 172.5C161 173.2 159.3 173.9 157.5 174.5C155.3 175.2 152.5 176 150 176.6C147.5 177.3 144.9 177.8 142.5 178.4C140.4 178.9 138.7 179.3 136.5 180C133.8 180.9 130.2 182.3 127.5 183.6C125 184.8 123.1 186.2 120.7 187.5C118.1 189 115.3 191.2 112.5 192.1C110 192.9 107.5 193 105 193C102.5 192.9 100 192.3 97.5 191.6C95 190.8 92.4 189.9 90 188.6C87.4 187.4 84.7 185.6 82.5 184C80.6 182.7 78.8 181.2 77.5 180C76.5 179.1 75.9 178.4 75 177.4C73.8 176 72 174 70.7 172.5C69.6 171.1 68.6 169.9 67.5 168.6C66.4 167.4 65.3 166.2 64.1 165C62.8 163.7 61.4 162.3 60 161.1C58.6 159.8 57 158.6 55.7 157.5C54.5 156.5 53.7 155.7 52.5 154.6C50.9 153.2 48.4 151.4 47 150C46.1 149 45.8 148.1 45 147.1C43.9 145.7 42 144.4 41 142.5C40 140.4 39.6 137.5 39.2 135C38.9 132.5 39 130 39 127.5C38.9 125 38.9 122.5 38.9 120C38.8 117.5 38.7 115 38.7 112.5C38.6 110 38.1 107.5 38.6 105C39.1 102.5 40.2 98.9 41.6 97.5C42.6 96.5 43.7 96.7 45 96C47 94.9 50 92.9 52.5 91.2C55 89.4 58.1 87 60 85.4C61.3 84.3 62.4 83.9 63.1 82.5C64 80.7 64.7 76.9 63.9 75C63.3 73.4 61.5 72.5 60 71.3C58.3 70 56.2 68.9 54 67.5C51.3 65.7 46.8 64.1 45 61.4C43.3 59 42.7 54.7 43 52.5C43.3 51.1 44.3 50.4 45 49.3C45.9 48 46.8 46.2 48 45Z"></path><path class="cx-plate__line" style="--i: 10" pathLength="1" d="M0 84.8C2.5 82.9 4.9 79.7 7.5 79.1C9.9 78.6 13.2 79.4 15 81C17 82.8 18.6 87.1 18.6 90C18.6 92.6 17.2 95.1 15.8 97.5C14.2 100.2 10.5 102.9 9.1 105C8.2 106.3 8.3 108.4 7.5 108.5C6.6 108.7 5 106.3 3.9 105C2.5 103.5 1.3 101.7 0 100M94.2 67.5C95.3 67.1 96.2 67 97.5 66.7C99.5 66.3 102.5 65.8 105 65.5C107.5 65.2 110 65 112.5 65C115 65 117.5 65 120 65.3C122.5 65.6 125.5 66.1 127.5 66.6C128.8 66.9 129.6 67.1 130.7 67.5C132 68 133.4 68.8 135 69.7C137.2 70.8 140.1 72.1 142.5 73.7C145.1 75.3 147.6 77.6 150 79.2C152.1 80.5 154 81.4 156.3 82.5C158.9 83.8 162.2 85.2 165 86.3C167.6 87.4 170.1 88 172.5 89.4C175.1 90.8 178.3 93.3 180 94.9C181 95.9 181.4 96.4 182.2 97.5C183.3 99.3 185.3 102.4 185.9 105C186.5 107.4 186.6 110.1 186.1 112.5C185.5 115.1 183.6 118.1 182.4 120C181.6 121.2 180.9 121.8 180 122.9C178.9 124.2 177.4 125.8 176.1 127.5C174.8 129.3 173.5 131.2 172.5 133.5C171.4 136.1 170.6 139.6 170.2 142.5C169.8 145.1 170.3 147.5 170 150C169.7 152.5 169.3 155.4 168.4 157.5C167.5 159.3 166 160.8 165 162.2C164.2 163.2 163.8 164.1 162.9 165C161.6 166.2 159.5 167.4 157.5 168.5C155.2 169.8 152.5 171.1 150 172.1C147.5 173 145 173.4 142.5 174C140 174.6 137.5 175.1 135 175.8C132.5 176.5 129.7 177.2 127.5 178C125.7 178.7 124.5 179.2 122.5 180C119.8 181.2 115.7 183.7 112.5 184.8C109.9 185.7 107.5 186.3 105 186.4C102.5 186.5 100 186.2 97.5 185.5C95 184.9 92.1 183.6 90 182.5C88.4 181.7 87.3 180.9 86.1 180C84.8 179.1 83.7 178.1 82.5 177C81.1 175.7 79.6 174 78.3 172.5C77.1 171.1 76 169.6 75 168.3C74.1 167.1 73.4 166.2 72.3 165C71 163.4 68.8 161 67.5 159.7C66.6 158.8 66.1 158.4 65.2 157.5C63.8 156.2 61.5 154.1 60 152.7C58.9 151.7 58.1 151.1 57 150C55.6 148.4 53.8 146.3 52.5 144C51.1 141.4 49.8 137.9 49.1 135C48.6 132.4 48.6 130 48.5 127.5C48.4 125 48.5 122.5 48.7 120C48.9 117.5 49.1 114.9 49.8 112.5C50.4 110.2 51.1 108.2 52.5 106C54.2 103.3 57.4 100.3 60 98C62.4 95.9 65.5 94 67.5 92.6C68.9 91.6 69.9 91 71.1 90C72.4 88.9 73.7 87.3 75 86.1C76.3 84.8 77.6 83.9 78.7 82.5C80.1 80.9 80.9 78.7 82.5 76.8C84.5 74.4 87.8 71.2 90 69.6C91.5 68.5 92.8 68 94.2 67.5Z"></path><path class="cx-plate__line" style="--i: 11" pathLength="1" d="M96.5 82.5C99.1 81.3 102.2 79.6 105 78.6C107.5 77.6 110 76.2 112.5 76.4C115 76.6 118.8 78.2 120 80.1C121.1 81.9 120 85.2 120 87.1C120 88.4 119.5 89.2 120 90.4C120.8 92.4 123.6 95.7 126.1 97.5C128.6 99.3 132.1 100.1 135 100.9C137.6 101.6 140 101.8 142.5 102.2C145 102.7 148.1 103.1 150 103.7C151.3 104.1 152 104.4 153.1 105C154.5 105.8 156.3 107.2 157.5 108.5C158.7 109.7 160 110.9 160.4 112.5C161 114.5 160.3 117.5 159.8 120C159.4 122.5 158.3 125 157.9 127.5C157.6 130 157.5 132.5 157.6 135C157.6 137.5 158.2 140 158.5 142.5C158.8 145 159.3 147.5 159.2 150C159.1 152.5 158.9 155.1 157.7 157.5C156.5 160.2 154.1 163.1 151.6 165C149 166.9 145.4 167.7 142.5 168.7C139.9 169.6 137.5 170.1 135 170.8C132.6 171.4 130.2 171.9 127.8 172.5C125.2 173.1 122.5 173.7 120 174.5C117.5 175.3 115 176.5 112.5 177.3C110 178.1 107.5 179.2 105 179.4C102.5 179.7 99.9 179.5 97.5 178.8C94.9 178 91.9 176.2 90 175C88.8 174.1 88.1 173.5 87.1 172.5C85.7 171.1 84.2 169.3 82.5 167.2C80.3 164.5 77.7 160.4 75.2 157.5C72.7 154.7 70 152.5 67.6 150C65.2 147.5 62.6 145.1 60.8 142.5C59.3 140.1 58.2 137.6 57.5 135C56.7 132.5 56.4 130 56.3 127.5C56.1 125 56.2 122.5 56.5 120C56.9 117.5 57.7 114.3 58.4 112.5C58.9 111.3 59.3 110.8 60 109.8C60.9 108.4 62.3 106.4 63.6 105C64.8 103.7 66.1 102.9 67.5 101.7C69.2 100.4 71.1 99.1 73.2 97.5C75.9 95.5 79.6 92.9 82.5 90.9C85.1 89 87.5 87 90 85.5C92.2 84.3 94.2 83.6 96.5 82.5Z"></path><path class="cx-plate__line" style="--i: 12" pathLength="1" d="M86.6 97.5C87.8 96.9 88.6 96.1 90 95.6C92 94.9 95 94 97.5 94C100 94 103.2 94.9 105 95.7C106.2 96.2 106.6 96.9 107.6 97.5C109 98.3 110.8 99.1 112.5 100.2C114.5 101.5 116.6 103.4 118.9 105C121.6 106.9 125.3 109.4 127.5 110.7C128.8 111.5 129.5 111.8 130.6 112.5C132 113.4 133.5 114.6 135 115.8C136.6 117.1 138.5 118.5 139.8 120C141 121.3 141.7 122.9 142.5 124.2C143.1 125.4 143.6 126.2 144.1 127.5C144.9 129.5 145.7 132.5 146.4 135C147 137.5 147.6 140 148 142.5C148.4 145 149 147.5 148.8 150C148.6 152.5 147.9 155.6 146.7 157.5C145.7 159.1 144.2 160.1 142.5 161.2C140.4 162.6 137.6 164.1 135 164.9C132.6 165.6 130 165.6 127.5 166C125 166.3 122.5 166.4 120 166.8C117.5 167.2 115 167.8 112.5 168.3C110 168.9 107.5 170 105 170.2C102.5 170.3 99.7 170.1 97.5 169.2C95.3 168.4 93.4 166.8 91.6 165C89.6 163 87.9 159.8 86.3 157.5C84.9 155.6 84.1 154.2 82.5 152.3C80.5 149.9 77.5 147.1 75 144.4C72.5 141.6 69.2 138.8 67.5 135.8C66 133.2 65.2 130.2 64.8 127.5C64.4 125 64.5 122.4 65 120C65.4 117.6 66.1 115.3 67.5 113.1C69.1 110.3 72.1 107.3 74.7 105C77.1 102.9 80.3 101 82.5 99.6C84 98.7 85.3 98.2 86.6 97.5Z"></path><path class="cx-plate__line" style="--i: 13" pathLength="1" d="M89 105C91.5 103.9 94.7 103 97.5 103.1C100.1 103.1 102.6 103.9 105 104.8C107.6 105.8 110.3 107.7 112.5 109.2C114.2 110.3 115.7 111.4 117.1 112.5C118.2 113.4 118.9 114 120 115C121.6 116.4 124 118.1 125.9 120C128.1 122.2 130.6 125.1 132.1 127.5C133.4 129.5 134.2 131.2 135 133.4C136 136 137.1 139.6 137.3 142.5C137.6 145.1 137.4 148.2 136.7 150C136.3 151.1 135.9 151.7 135 152.5C133.5 153.8 130.1 155.5 127.5 156.1C125.1 156.7 122.5 156.2 120 156.2C117.5 156.2 115 156 112.5 156C110 155.9 107.5 156.2 105 155.7C102.5 155.1 99.2 153.9 97.5 152.7C96.3 151.9 96 151 95 150C93.7 148.7 91.4 146.9 90 145.5C88.9 144.4 88.2 143.6 87.2 142.5C85.8 141.1 83.8 139.1 82.5 137.7C81.5 136.7 80.8 136.2 79.8 135C78.5 133.2 76.2 130.1 75.4 127.5C74.7 125.1 74.5 122.4 75 120C75.6 117.4 77.4 114.4 78.9 112.5C80 111.1 81.1 110.3 82.5 109.2C84.3 107.8 86.6 106 89 105Z"></path></svg></div>
package/dist/chroma.css CHANGED
@@ -1,36 +1,36 @@
1
- /* Hugo Chroma classes -> MotifSpec tokens (generated from syntax/chroma.json). Both themes via tokens. */
2
- .chroma { color: var(--cx-color-syntax-variable); background: var(--cx-color-surface-sunken); }
3
- /* Keywords */
4
- .chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .ow, .chroma .bp { color: var(--cx-color-syntax-keyword); font-weight: var(--cx-font-weight-strong); }
5
- /* Type keywords, classes, built-ins, namespaces, exceptions */
6
- .chroma .kt, .chroma .nb, .chroma .nc, .chroma .nn, .chroma .ne { color: var(--cx-color-syntax-type); }
7
- /* Constants: numbers, booleans, null, dates, symbols, entities, escapes */
8
- .chroma .kc, .chroma .no, .chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo, .chroma .ld, .chroma .ss, .chroma .ni, .chroma .se { color: var(--cx-color-syntax-number); }
9
- /* Strings and regex */
10
- .chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .s2, .chroma .sh, .chroma .sx, .chroma .sr, .chroma .s1, .chroma .cpf { color: var(--cx-color-syntax-string); }
11
- /* Functions */
12
- .chroma .nf, .chroma .fm { color: var(--cx-color-syntax-function); }
13
- /* Markup tags */
14
- .chroma .nt { color: var(--cx-color-syntax-tag); }
15
- /* Attributes, properties, object keys */
16
- .chroma .na, .chroma .py { color: var(--cx-color-syntax-attribute); }
17
- /* Names and variables */
18
- .chroma .n, .chroma .nx, .chroma .nv, .chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm, .chroma .l { color: var(--cx-color-syntax-variable); }
19
- /* Operators and punctuation */
20
- .chroma .o, .chroma .p { color: var(--cx-color-syntax-operator); }
21
- /* Comments and doc strings */
22
- .chroma .c, .chroma .ch, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .sd, .chroma .go { color: var(--cx-color-syntax-comment); }
23
- /* Meta: decorators, preprocessor, labels, interpolation, prompts */
24
- .chroma .nd, .chroma .cp, .chroma .nl, .chroma .si, .chroma .gp { color: var(--cx-color-syntax-meta); }
25
- /* Diff: inserted */
26
- .chroma .gi { color: var(--cx-color-syntax-inserted); }
27
- /* Diff: deleted, errors, tracebacks */
28
- .chroma .gd, .chroma .gr, .chroma .gt, .chroma .err { color: var(--cx-color-syntax-deleted); }
29
- /* Headings and diff hunks */
30
- .chroma .gh, .chroma .gu { color: var(--cx-color-syntax-heading); font-weight: var(--cx-font-weight-strong); }
31
- /* Generic strong and emphasis (no italic available) */
32
- .chroma .gs, .chroma .ge { font-weight: var(--cx-font-weight-strong); }
33
- /* Line numbers */
34
- .chroma .ln, .chroma .lnt { color: var(--cx-color-syntax-line-number); }
35
- /* Highlighted lines (hl_lines) */
36
- .chroma .hl { background: var(--cx-color-syntax-line-highlight); }
1
+ /* Hugo Chroma classes -> MotifSpec tokens (generated from syntax/chroma.json). Both themes via tokens. */
2
+ .chroma { color: var(--cx-color-syntax-variable); background: var(--cx-color-surface-sunken); }
3
+ /* Keywords */
4
+ .chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .ow, .chroma .bp { color: var(--cx-color-syntax-keyword); font-weight: var(--cx-font-weight-strong); }
5
+ /* Type keywords, classes, built-ins, namespaces, exceptions */
6
+ .chroma .kt, .chroma .nb, .chroma .nc, .chroma .nn, .chroma .ne { color: var(--cx-color-syntax-type); }
7
+ /* Constants: numbers, booleans, null, dates, symbols, entities, escapes */
8
+ .chroma .kc, .chroma .no, .chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo, .chroma .ld, .chroma .ss, .chroma .ni, .chroma .se { color: var(--cx-color-syntax-number); }
9
+ /* Strings and regex */
10
+ .chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .s2, .chroma .sh, .chroma .sx, .chroma .sr, .chroma .s1, .chroma .cpf { color: var(--cx-color-syntax-string); }
11
+ /* Functions */
12
+ .chroma .nf, .chroma .fm { color: var(--cx-color-syntax-function); }
13
+ /* Markup tags */
14
+ .chroma .nt { color: var(--cx-color-syntax-tag); }
15
+ /* Attributes, properties, object keys */
16
+ .chroma .na, .chroma .py { color: var(--cx-color-syntax-attribute); }
17
+ /* Names and variables */
18
+ .chroma .n, .chroma .nx, .chroma .nv, .chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm, .chroma .l { color: var(--cx-color-syntax-variable); }
19
+ /* Operators and punctuation */
20
+ .chroma .o, .chroma .p { color: var(--cx-color-syntax-operator); }
21
+ /* Comments and doc strings */
22
+ .chroma .c, .chroma .ch, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .sd, .chroma .go { color: var(--cx-color-syntax-comment); }
23
+ /* Meta: decorators, preprocessor, labels, interpolation, prompts */
24
+ .chroma .nd, .chroma .cp, .chroma .nl, .chroma .si, .chroma .gp { color: var(--cx-color-syntax-meta); }
25
+ /* Diff: inserted */
26
+ .chroma .gi { color: var(--cx-color-syntax-inserted); }
27
+ /* Diff: deleted, errors, tracebacks */
28
+ .chroma .gd, .chroma .gr, .chroma .gt, .chroma .err { color: var(--cx-color-syntax-deleted); }
29
+ /* Headings and diff hunks */
30
+ .chroma .gh, .chroma .gu { color: var(--cx-color-syntax-heading); font-weight: var(--cx-font-weight-strong); }
31
+ /* Generic strong and emphasis (no italic available) */
32
+ .chroma .gs, .chroma .ge { font-weight: var(--cx-font-weight-strong); }
33
+ /* Line numbers */
34
+ .chroma .ln, .chroma .lnt { color: var(--cx-color-syntax-line-number); }
35
+ /* Highlighted lines (hl_lines) */
36
+ .chroma .hl { background: var(--cx-color-syntax-line-highlight); }