yamlock 1.1.2 → 1.1.4

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/README.md CHANGED
@@ -1,16 +1,16 @@
1
- ```ascii
2
- ░█░█░█▀█░█▄░▄█░█░░░█▀█░█▀▀░█░█░
3
- ░░█░░█▀█░█░▀░█░█░░░█░█░█░░░█▀▄░
4
- ░░▀░░▀░▀░▀░░░▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░
5
- ```
1
+ # yamlock
2
+
3
+ <p align="center">
4
+ <img src="docs/brand/yamlock-readme-banner.svg" alt="yamlock" width="560">
5
+ </p>
6
+
7
+ <p align="center"><strong>Plaintext ends here.</strong></p>
6
8
 
7
9
  [![npm version](https://img.shields.io/npm/v/yamlock)](https://www.npmjs.com/package/yamlock)
8
10
  [![CI](https://github.com/phoenixweiss/yamlock/actions/workflows/ci.yml/badge.svg)](https://github.com/phoenixweiss/yamlock/actions/workflows/ci.yml)
9
11
 
10
12
  [Project website](https://phoenixweiss.github.io/yamlock/)
11
13
 
12
- # yamlock
13
-
14
14
  Value-level encryption for YAML and JSON configuration files. The name **yamlock** combines "YAML" and "lock" while also sounding like "warlock", hinting at a little configuration magic.
15
15
 
16
16
  ## Requirements
package/dist/cli/cli.js CHANGED
@@ -20,10 +20,8 @@ import { listSupportedAlgorithms, TESTED_ALGORITHMS } from '../crypto/utils.js';
20
20
  const require = createRequire(import.meta.url);
21
21
  const packageJson = require('../../package.json');
22
22
 
23
- const BANNER = `
24
- ░█░█░█▀█░█▄░▄█░█░░░█▀█░█▀▀░█░█░
25
- ░░█░░█▀█░█░▀░█░█░░░█░█░█░░░█▀▄░
26
- ░░▀░░▀░▀░▀░░░▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░`;
23
+ const BANNER = `[yamlock]
24
+ Plaintext ends here.`;
27
25
 
28
26
  const KEYGEN_MIN_LENGTH = 1;
29
27
  const KEYGEN_MAX_LENGTH = 4096;
@@ -0,0 +1,188 @@
1
+ # yamlock brand identity
2
+
3
+ This document records the visual direction already established by the project
4
+ website. It is a reference for future assets and product surfaces, not a reason
5
+ to redesign working material for its own sake.
6
+
7
+ ## Core idea
8
+
9
+ **Sealed syntax**: yamlock protects selected values while leaving the
10
+ configuration recognizable.
11
+
12
+ The identity combines three visual ideas:
13
+
14
+ - square brackets define the boundary of a value;
15
+ - a vertical beam represents deliberate selection and transformation;
16
+ - a small focus ring marks the exact point being protected.
17
+
18
+ The name may faintly suggest "warlock", but magic is a secondary piece of
19
+ personality rather than the main visual metaphor. The primary promise is
20
+ precise, local and reviewable encryption.
21
+
22
+ ## Brand character
23
+
24
+ yamlock should feel:
25
+
26
+ - precise, not severe;
27
+ - technical, not cryptic;
28
+ - security-conscious, not fear-driven;
29
+ - distinctive, not decorative;
30
+ - calm enough to trust in a configuration workflow.
31
+
32
+ Avoid generic security imagery such as padlocks, shields, fingerprints, binary
33
+ rain and anonymous hooded figures. Avoid presenting Base64-like payload text as
34
+ decoration when it could be mistaken for a real secret.
35
+
36
+ ## Logo system
37
+
38
+ ### Primary wordmark
39
+
40
+ The primary wordmark is the lowercase name enclosed in square brackets:
41
+ `[yamlock]`.
42
+
43
+ - Typeface: IBM Plex Mono Medium (500).
44
+ - Letters: paper (`#dedbd4`).
45
+ - Brackets: violet soft (`#b8a7ff`).
46
+ - Keep the spelling lowercase.
47
+ - Do not add a padlock to the wordmark or replace either bracket with one.
48
+
49
+ Use the outlined master at [yamlock-wordmark.svg](yamlock-wordmark.svg) when a
50
+ portable asset is required. The website uses a byte-checked delivery copy in
51
+ its header and footer. The README uses
52
+ [yamlock-readme-banner.svg](yamlock-readme-banner.svg), which places the same
53
+ outlined wordmark on its own dark surface so it remains legible in light and
54
+ dark GitHub/npm themes.
55
+
56
+ Terminal help uses the compact printable treatment `[yamlock]` followed by the
57
+ anchor line `Plaintext ends here.`. Keep `yamlock version` machine-friendly and
58
+ do not add the identity treatment to structured errors.
59
+
60
+ ### Symbol
61
+
62
+ The square symbol is the existing favicon motif: violet brackets around a cyan
63
+ selection beam and focus ring on a dark rounded tile. It is intended for square
64
+ or very small placements where the full wordmark does not fit.
65
+
66
+ Use [yamlock-symbol.svg](yamlock-symbol.svg) as the master. The deployed
67
+ `website/public/favicon.svg` is a delivery copy of this geometry.
68
+
69
+ ### Display treatment
70
+
71
+ Large campaign or social-preview typography may set `[yamlock]` in Nunito Sans
72
+ at a heavier weight, as the current Open Graph image does. This is an editorial
73
+ treatment, not a replacement for the primary wordmark. The brackets must remain
74
+ violet and the name must remain lowercase.
75
+
76
+ ### Clear space and minimum size
77
+
78
+ For the wordmark, keep clear space equal to the width of one bracket on every
79
+ side. For the symbol, keep clear space equal to one eighth of its tile width.
80
+
81
+ - Wordmark minimum width: 112 px on screen.
82
+ - Symbol minimum size: 16 px on screen.
83
+ - At 16 px, use the symbol exactly as supplied; do not add detail or text.
84
+
85
+ ## Color system
86
+
87
+ | Role | Token | Value | Use |
88
+ | ------------------ | ----------- | --------- | ----------------------------------- |
89
+ | Primary background | Black | `#07070a` | Main dark surface |
90
+ | Raised surface | Panel | `#0c0c11` | Cards, symbol tile |
91
+ | Primary text | Paper | `#dedbd4` | Headlines and wordmark letters |
92
+ | Primary brand | Violet soft | `#b8a7ff` | Brackets, emphasis, section markers |
93
+ | Deep brand | Violet | `#8b6cff` | Gradients and supporting accents |
94
+ | Active signal | Cyan | `#73e7ff` | Beam, focus, encrypted state, links |
95
+ | Plaintext signal | Coral | `#ff637d` | Unprotected demo values only |
96
+ | Secondary text | Muted | `#8b8994` | Supporting copy |
97
+ | Structure | Line | `#32313c` | Rules and grid boundaries |
98
+
99
+ Violet carries recognition. Cyan communicates an active or authenticated
100
+ state. Coral is semantic and should not become a general decorative accent.
101
+
102
+ The primary identity is dark-first. On light editorial surfaces, prefer a
103
+ single-color black wordmark or place the supplied symbol on its own dark tile;
104
+ do not invert the tile to white without a separately tested variant.
105
+
106
+ ## Typography
107
+
108
+ - **Nunito Sans Variable** is the primary editorial face for headlines and
109
+ prose. Its softer construction keeps the security subject approachable.
110
+ - **IBM Plex Mono** is the technical face for the wordmark, code, metadata,
111
+ navigation labels and short controls.
112
+
113
+ Use mono text selectively. Long explanatory copy should remain in Nunito Sans.
114
+ Sentence case is preferred for prose; uppercase with modest tracking is
115
+ reserved for short technical labels.
116
+
117
+ ## Graphic language
118
+
119
+ The established website language is part of the identity:
120
+
121
+ - restrained dark grids suggest configuration structure;
122
+ - vertical scanning or selection lines reveal a before/after state;
123
+ - brackets, paths and field boundaries are preferred to abstract cyber motifs;
124
+ - motion should explain transformation and remain operable by pointer and
125
+ keyboard;
126
+ - reduced-motion preferences must retain a clear static state;
127
+ - generous negative space supports the calm, deliberate tone.
128
+
129
+ The scanner is a product metaphor, not a claim that yamlock scans the system or
130
+ uploads data. Supporting copy should make local processing explicit.
131
+
132
+ ## Voice and messaging
133
+
134
+ The voice is concise, literal and quietly confident. Explain what yamlock does
135
+ before how it is implemented. State security boundaries without suggesting an
136
+ independent audit or guarantees the project cannot make.
137
+
138
+ Current anchor lines:
139
+
140
+ - **Value-level encryption for YAML and JSON configuration files.**
141
+ - **Plaintext ends here.**
142
+ - **The file stays recognizable. The sensitive values do not.**
143
+ - **One package. Your key.**
144
+
145
+ Prefer terms such as `selected values`, `path-bound`, `authenticated`, `local`
146
+ and `reviewable`. Use `magic` sparingly and only as personality copy.
147
+
148
+ ## Asset inventory
149
+
150
+ | Asset | Role | Status |
151
+ | -------------------------------------------------------- | -------------------------------------- | ----------------- |
152
+ | [yamlock-symbol.svg](yamlock-symbol.svg) | Canonical square symbol | Master |
153
+ | [yamlock-wordmark.svg](yamlock-wordmark.svg) | Canonical outlined wordmark | Master |
154
+ | [yamlock-readme-banner.svg](yamlock-readme-banner.svg) | Theme-safe README banner | Source |
155
+ | [yamlock-brand-sheet.svg](yamlock-brand-sheet.svg) | Visual reference sheet | Source |
156
+ | [yamlock-brand-sheet.png](yamlock-brand-sheet.png) | Review-friendly reference | Generated preview |
157
+ | [yamlock-social-card.svg](yamlock-social-card.svg) | Editable 1200 x 630 social-card master | Source |
158
+ | [yamlock-social-card.png](yamlock-social-card.png) | Canonical website Open Graph render | Generated master |
159
+ | [yamlock-github-preview.png](yamlock-github-preview.png) | 1280 x 640 repository preview | Generated preview |
160
+ | `website/public/favicon.svg` | Website delivery copy | In use |
161
+ | `website/public/og.png` | Website Open Graph delivery copy | In use |
162
+ | `website/src/assets/yamlock-wordmark.svg` | Website wordmark delivery copy | In use |
163
+
164
+ The brand masters live in `docs/brand/`. Product directories may contain
165
+ delivery copies sized or packaged for that product, but their geometry and
166
+ colors should remain traceable to these masters.
167
+
168
+ ## Change policy
169
+
170
+ Treat the present landing-page direction, favicon geometry and bracketed
171
+ wordmark as the approved baseline. Future work may refine spacing, responsive
172
+ composition, export formats and accessibility without reopening the concept.
173
+ A material change to symbol geometry, wordmark construction or core palette
174
+ should be reviewed as a new identity direction.
175
+
176
+ Run `node docs/brand/scripts/render-social-assets.mjs` from the repository root
177
+ to regenerate both social PNG previews and synchronize the website Open Graph
178
+ delivery copy. The script uses the website's pinned font and Playwright
179
+ dependencies, loads no network resources and runs headless.
180
+
181
+ GitHub accepts a separate repository preview; the prepared PNG uses its
182
+ recommended 1280 x 640 dimensions and a solid background. npm does not expose
183
+ an equivalent package-image slot: it renders the published root README, so a
184
+ future npm-specific visual would be a deliberate README banner rather than
185
+ another upload variant.
186
+
187
+ Website layout fixes, such as the wide-desktop hero gap, remain separate
188
+ implementation work.
@@ -0,0 +1,70 @@
1
+ import { copyFile, mkdir } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+
5
+ import { chromium } from "../../../website/node_modules/playwright/index.mjs";
6
+
7
+ const scriptDirectory = dirname(fileURLToPath(import.meta.url));
8
+ const brandDirectory = resolve(scriptDirectory, "..");
9
+ const sourceUrl = pathToFileURL(
10
+ resolve(brandDirectory, "yamlock-social-card.svg"),
11
+ ).href;
12
+ const canonicalOutput = resolve(brandDirectory, "yamlock-social-card.png");
13
+ const githubOutput = resolve(brandDirectory, "yamlock-github-preview.png");
14
+ const websiteOutput = resolve(
15
+ scriptDirectory,
16
+ "../../../website/public/og.png",
17
+ );
18
+
19
+ await mkdir(brandDirectory, { recursive: true });
20
+
21
+ const browser = await chromium.launch({ headless: true });
22
+
23
+ try {
24
+ const page = await browser.newPage({
25
+ viewport: { width: 1200, height: 630 },
26
+ });
27
+ const unexpectedRequests = [];
28
+ page.on("request", (request) => {
29
+ if (!request.url().startsWith("file:")) {
30
+ unexpectedRequests.push(request.url());
31
+ }
32
+ });
33
+ await page.goto(sourceUrl);
34
+ await page.evaluate(() => globalThis.document.fonts.ready);
35
+ const fontsLoaded = await page.evaluate(
36
+ () =>
37
+ globalThis.document.fonts.check('700 108px "Nunito Sans Brand"') &&
38
+ globalThis.document.fonts.check('500 17px "IBM Plex Mono Brand"'),
39
+ );
40
+
41
+ if (!fontsLoaded) {
42
+ throw new Error("Brand fonts did not load");
43
+ }
44
+
45
+ if (unexpectedRequests.length > 0) {
46
+ throw new Error(
47
+ `Social asset render attempted external requests: ${unexpectedRequests.join(", ")}`,
48
+ );
49
+ }
50
+
51
+ await page.screenshot({ path: canonicalOutput });
52
+ await copyFile(canonicalOutput, websiteOutput);
53
+
54
+ await page.setViewportSize({ width: 1280, height: 640 });
55
+ await page.evaluate(() => {
56
+ const source = globalThis.document.querySelector("svg");
57
+
58
+ if (!source) {
59
+ throw new Error("Social card SVG is missing");
60
+ }
61
+
62
+ source.style.width = "1280px";
63
+ source.style.height = "672px";
64
+ source.style.display = "block";
65
+ source.style.transform = "translateY(-16px)";
66
+ });
67
+ await page.screenshot({ path: githubOutput });
68
+ } finally {
69
+ await browser.close();
70
+ }
@@ -0,0 +1,82 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1000" role="img" aria-labelledby="title description">
2
+ <title id="title">yamlock brand reference sheet</title>
3
+ <desc id="description">The approved yamlock symbol, wordmark, palette and basic usage guidance on a dark grid.</desc>
4
+ <metadata>
5
+ Review sheet only. Canonical assets are yamlock-symbol.svg and yamlock-wordmark.svg.
6
+ </metadata>
7
+
8
+ <defs>
9
+ <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
10
+ <path d="M40 0H0V40" fill="none" stroke="#32313c" stroke-opacity="0.28"/>
11
+ </pattern>
12
+ </defs>
13
+
14
+ <rect width="1600" height="1000" fill="#07070a"/>
15
+ <rect width="1600" height="1000" fill="url(#grid)"/>
16
+
17
+ <g font-family="IBM Plex Mono, monospace" font-size="18" letter-spacing="2" text-transform="uppercase">
18
+ <text x="72" y="72" fill="#b8a7ff">YAMLOCK / BRAND SYSTEM 01</text>
19
+ <text x="1528" y="72" fill="#8b8994" text-anchor="end">SEALED SYNTAX</text>
20
+ </g>
21
+
22
+ <line x1="72" y1="104" x2="1528" y2="104" stroke="#32313c"/>
23
+
24
+ <image href="yamlock-symbol.svg" x="72" y="170" width="260" height="260"/>
25
+ <image href="yamlock-wordmark.svg" x="404" y="205" width="1020" height="189"/>
26
+
27
+ <g font-family="IBM Plex Mono, monospace" font-size="14" letter-spacing="1.25">
28
+ <text x="72" y="470" fill="#8b8994">SYMBOL / SMALL CONTEXTS</text>
29
+ <text x="440" y="470" fill="#8b8994">PRIMARY WORDMARK / IBM PLEX MONO 500</text>
30
+ </g>
31
+
32
+ <line x1="72" y1="524" x2="1528" y2="524" stroke="#32313c"/>
33
+
34
+ <g font-family="Nunito Sans, sans-serif">
35
+ <text x="72" y="600" fill="#dedbd4" font-size="54" font-weight="600">The file stays recognizable.</text>
36
+ <text x="72" y="660" fill="#b8a7ff" font-size="54" font-weight="600">The sensitive values do not.</text>
37
+ </g>
38
+ <text x="72" y="714" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="16" letter-spacing="1.2">PRECISE / LOCAL / AUTHENTICATED / REVIEWABLE</text>
39
+
40
+ <g transform="translate(72 786)">
41
+ <g transform="translate(0)">
42
+ <rect width="160" height="92" fill="#07070a" stroke="#32313c"/>
43
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">BLACK</text>
44
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#07070a</text>
45
+ </g>
46
+ <g transform="translate(184)">
47
+ <rect width="160" height="92" fill="#0c0c11" stroke="#32313c"/>
48
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">PANEL</text>
49
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#0c0c11</text>
50
+ </g>
51
+ <g transform="translate(368)">
52
+ <rect width="160" height="92" fill="#dedbd4"/>
53
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">PAPER</text>
54
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#dedbd4</text>
55
+ </g>
56
+ <g transform="translate(552)">
57
+ <rect width="160" height="92" fill="#b8a7ff"/>
58
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">VIOLET SOFT</text>
59
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#b8a7ff</text>
60
+ </g>
61
+ <g transform="translate(736)">
62
+ <rect width="160" height="92" fill="#8b6cff"/>
63
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">VIOLET</text>
64
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#8b6cff</text>
65
+ </g>
66
+ <g transform="translate(920)">
67
+ <rect width="160" height="92" fill="#73e7ff"/>
68
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">CYAN</text>
69
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#73e7ff</text>
70
+ </g>
71
+ <g transform="translate(1104)">
72
+ <rect width="160" height="92" fill="#ff637d"/>
73
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">CORAL</text>
74
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#ff637d</text>
75
+ </g>
76
+ <g transform="translate(1288)">
77
+ <rect width="160" height="92" fill="#32313c"/>
78
+ <text x="0" y="122" fill="#8b8994" font-family="IBM Plex Mono, monospace" font-size="14">LINE</text>
79
+ <text x="0" y="145" fill="#dedbd4" font-family="IBM Plex Mono, monospace" font-size="14">#32313c</text>
80
+ </g>
81
+ </g>
82
+ </svg>
@@ -0,0 +1,38 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1120 280" role="img" aria-labelledby="title description">
2
+ <title id="title">yamlock</title>
3
+ <desc id="description">The yamlock wordmark on its dark brand surface.</desc>
4
+ <metadata>
5
+ README banner derived from the canonical outlined wordmark.
6
+ Letters: #dedbd4. Brackets: #b8a7ff. Background: #07070a.
7
+ </metadata>
8
+
9
+ <rect x="1" y="1" width="1118" height="278" rx="24" fill="#07070a" stroke="#32313c" stroke-width="2"/>
10
+
11
+ <defs>
12
+ <path id="bracket-left" d="M207 -138V760H506V682H297V-60H506V-138Z"/>
13
+ <path id="glyph-y" d="M451 516H561L311 -100Q291 -150 258.5 -175Q226 -200 165 -200H78V-112H200L247 7L39 516H153L235 300L299 123H305L369 300Z"/>
14
+ <path id="glyph-a" d="M492 0Q445 0 421.5 24Q398 48 393 87H388Q373 40 333.5 14Q294 -12 233 -12Q154 -12 107 29.5Q60 71 60 144Q60 219 115.5 258.5Q171 298 286 298H385V338Q385 443 274 443Q224 443 193 423.5Q162 404 141 372L76 425Q98 467 150 497.5Q202 528 284 528Q382 528 438 481Q494 434 494 345V86H559V0ZM264 68Q317 68 351 92Q385 116 385 154V229H288Q170 229 170 158V138Q170 103 195 85.5Q220 68 264 68Z"/>
15
+ <path id="glyph-m" d="M44 0V516H137V449H142Q154 482 176.5 505Q199 528 241 528Q282 528 304.5 505.5Q327 483 333 444H337Q351 479 376 503.5Q401 528 448 528Q508 528 531.5 486Q555 444 555 363V0H462V349Q462 403 449 423.5Q436 444 407 444Q381 444 363.5 426.5Q346 409 346 374V0H253V349Q253 403 240.5 423.5Q228 444 199 444Q172 444 154.5 426.5Q137 409 137 374V0Z"/>
16
+ <path id="glyph-l" d="M75 88H246V652H75V740H355V88H526V0H75Z"/>
17
+ <path id="glyph-o" d="M300 -12Q243 -12 197.5 7Q152 26 120.5 61Q89 96 72 146Q55 196 55 258Q55 320 72 370Q89 420 120.5 455Q152 490 197.5 509Q243 528 300 528Q357 528 402.5 509Q448 490 479.5 455Q511 420 528 370Q545 320 545 258Q545 196 528 146Q511 96 479.5 61Q448 26 402.5 7Q357 -12 300 -12ZM300 74Q360 74 395.5 110.5Q431 147 431 219V297Q431 369 395.5 405.5Q360 442 300 442Q240 442 204.5 405.5Q169 369 169 297V219Q169 147 204.5 110.5Q240 74 300 74Z"/>
18
+ <path id="glyph-c" d="M319 -12Q261 -12 215.5 7Q170 26 138.5 61Q107 96 90.5 146Q74 196 74 258Q74 320 90.5 370Q107 420 138.5 455Q170 490 215.5 509Q261 528 318 528Q398 528 446.5 494Q495 460 519 406L434 360Q420 396 391.5 417Q363 438 318 438Q256 438 222 400.5Q188 363 188 301V215Q188 154 222 116Q256 78 320 78Q368 78 398.5 100Q429 122 447 160L527 111Q502 57 451 22.5Q400 -12 319 -12Z"/>
19
+ <path id="glyph-k" d="M88 740H197V293H202L283 376L428 516H557L348 313L580 0H449L269 251L197 184V0H88Z"/>
20
+ <path id="bracket-right" d="M393 760V-138H94V-60H303V682H94V760Z"/>
21
+ </defs>
22
+
23
+ <g transform="translate(70 190) scale(0.181481 -0.181481)">
24
+ <g fill="#b8a7ff">
25
+ <use href="#bracket-left"/>
26
+ <use href="#bracket-right" transform="translate(4800)"/>
27
+ </g>
28
+ <g fill="#dedbd4">
29
+ <use href="#glyph-y" transform="translate(600)"/>
30
+ <use href="#glyph-a" transform="translate(1200)"/>
31
+ <use href="#glyph-m" transform="translate(1800)"/>
32
+ <use href="#glyph-l" transform="translate(2400)"/>
33
+ <use href="#glyph-o" transform="translate(3000)"/>
34
+ <use href="#glyph-c" transform="translate(3600)"/>
35
+ <use href="#glyph-k" transform="translate(4200)"/>
36
+ </g>
37
+ </g>
38
+ </svg>
@@ -0,0 +1,114 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630" role="img" aria-labelledby="title description">
2
+ <title id="title">yamlock social card</title>
3
+ <desc id="description">Plaintext configuration becomes an authenticated yamlock payload as a cyan selection beam crosses the card.</desc>
4
+ <metadata>
5
+ Editable source for the established 1200 by 630 website Open Graph composition.
6
+ Render with scripts/render-social-assets.mjs after installing website dependencies.
7
+ </metadata>
8
+
9
+ <defs>
10
+ <style>
11
+ @font-face {
12
+ font-family: "Nunito Sans Brand";
13
+ src: url("../../website/node_modules/@fontsource-variable/nunito-sans/files/nunito-sans-latin-wght-normal.woff2") format("woff2");
14
+ font-style: normal;
15
+ font-weight: 200 1000;
16
+ }
17
+ @font-face {
18
+ font-family: "IBM Plex Mono Brand";
19
+ src: url("../../website/node_modules/@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-500-normal.woff2") format("woff2");
20
+ font-style: normal;
21
+ font-weight: 500;
22
+ }
23
+ .sans { font-family: "Nunito Sans Brand", "Nunito Sans", sans-serif; }
24
+ .mono { font-family: "IBM Plex Mono Brand", "IBM Plex Mono", monospace; }
25
+ </style>
26
+ <pattern id="social-grid" width="32" height="32" patternUnits="userSpaceOnUse">
27
+ <path d="M32 0H0V32" fill="none" stroke="#32313c" stroke-opacity="0.34"/>
28
+ </pattern>
29
+ <linearGradient id="bracket-gradient" x1="0" y1="0" x2="1" y2="1">
30
+ <stop offset="0" stop-color="#8b6cff"/>
31
+ <stop offset="1" stop-color="#b8a7ff"/>
32
+ </linearGradient>
33
+ <filter id="beam-glow" x="-60%" y="-400%" width="220%" height="900%">
34
+ <feGaussianBlur stdDeviation="8" result="blur"/>
35
+ <feMerge>
36
+ <feMergeNode in="blur"/>
37
+ <feMergeNode in="SourceGraphic"/>
38
+ </feMerge>
39
+ </filter>
40
+ </defs>
41
+
42
+ <rect width="1200" height="630" fill="#07070a"/>
43
+ <rect width="1200" height="630" fill="url(#social-grid)"/>
44
+
45
+ <text x="54" y="119" class="sans" font-size="76" font-weight="700" letter-spacing="-2">
46
+ <tspan fill="url(#bracket-gradient)">[</tspan><tspan fill="#f2f0ec">yamlock</tspan><tspan fill="url(#bracket-gradient)">]</tspan>
47
+ </text>
48
+
49
+ <text x="54" y="292" class="sans" fill="#f2f0ec" font-size="108" font-weight="700" letter-spacing="-4">Plaintext</text>
50
+ <text x="54" y="394" class="sans" fill="#f2f0ec" font-size="108" font-weight="700" letter-spacing="-4">ends here.</text>
51
+ <text x="56" y="466" class="sans" fill="#a98bff" font-size="35" font-weight="700">Value-level encryption</text>
52
+ <text x="56" y="515" class="sans" fill="#a98bff" font-size="35" font-weight="700">for YAML + JSON</text>
53
+
54
+ <g transform="translate(556 165)">
55
+ <path d="M26 0H0V346H26M210 0H236V346H210" fill="none" stroke="#9e83ff" stroke-width="2"/>
56
+ <path d="M45 27H25V319H45" fill="none" stroke="#444251" stroke-width="2"/>
57
+
58
+ <path d="M74 168V281" fill="none" stroke="#444251" stroke-width="2"/>
59
+ <g class="mono" font-size="21" font-weight="500">
60
+ <g fill="#9e83ff">
61
+ <text x="26" y="34">-</text>
62
+ <text x="52" y="70">-</text>
63
+ <text x="52" y="106">-</text>
64
+ <text x="52" y="142">-</text>
65
+ <text x="52" y="178">-</text>
66
+ <text x="79" y="214">-</text>
67
+ <text x="79" y="250">-</text>
68
+ <text x="52" y="286">-</text>
69
+ <text x="26" y="322">-</text>
70
+ </g>
71
+ <g fill="#dedbd4">
72
+ <text x="69" y="34">:</text>
73
+ <text x="95" y="70">:</text>
74
+ <text x="95" y="106">:</text>
75
+ <text x="95" y="142">:</text>
76
+ <text x="95" y="178">{</text>
77
+ <text x="122" y="214">:</text>
78
+ <text x="122" y="250">:</text>
79
+ <text x="95" y="286">}</text>
80
+ <text x="69" y="322">:</text>
81
+ </g>
82
+ <g fill="#73e7ff">
83
+ <text x="111" y="106">--</text>
84
+ <text x="123" y="142">--</text>
85
+ <text x="96" y="322">--</text>
86
+ </g>
87
+ <g fill="#73e7ff" font-size="24">
88
+ <text x="110" y="142">&quot;</text>
89
+ <text x="185" y="142">&quot;</text>
90
+ </g>
91
+ </g>
92
+ </g>
93
+
94
+ <g transform="translate(892 165)">
95
+ <path d="M26 0H0V346H26M226 0H252V346H226" fill="none" stroke="#9e83ff" stroke-width="2"/>
96
+ <g class="mono" fill="#9e83ff" font-size="17" font-weight="500" letter-spacing="3">
97
+ <text x="24" y="34">.o/+=|- .o|/=</text>
98
+ <text x="24" y="70">|o=+/-| .o+=</text>
99
+ <text x="24" y="106">o+|/ .=-[]|+/</text>
100
+ <text x="24" y="142">++o/--&gt;o.|o</text>
101
+ <text x="24" y="178">o+|o+=|+.=+</text>
102
+ <text x="24" y="214">o.|+o=&lt;&gt;|+c/</text>
103
+ <text x="24" y="250">|o-.+=-o+|#</text>
104
+ <text x="24" y="286">+o+/-=|..o|o</text>
105
+ <text x="24" y="322">|o-.-o/o|+~</text>
106
+ </g>
107
+ </g>
108
+
109
+ <g filter="url(#beam-glow)">
110
+ <line x1="556" y1="324" x2="1144" y2="324" stroke="#73e7ff" stroke-width="2"/>
111
+ <circle cx="556" cy="324" r="5" fill="#73e7ff"/>
112
+ <circle cx="1144" cy="324" r="5" fill="#73e7ff"/>
113
+ </g>
114
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-labelledby="title description">
2
+ <title id="title">yamlock symbol</title>
3
+ <desc id="description">Violet square brackets surround a cyan selection beam and focus ring on a dark rounded tile.</desc>
4
+ <metadata>
5
+ Canonical square symbol derived exactly from the original 64 by 64 website favicon.
6
+ Palette: panel #0c0c11, black #07070a, violet soft #b8a7ff, cyan #73e7ff.
7
+ </metadata>
8
+
9
+ <rect width="1024" height="1024" rx="224" fill="#0c0c11"/>
10
+ <path
11
+ d="M352 224H224V800H352M672 224H800V800H672"
12
+ fill="none"
13
+ stroke="#b8a7ff"
14
+ stroke-linecap="square"
15
+ stroke-width="80"
16
+ />
17
+ <path d="M512 224V800" stroke="#73e7ff" stroke-width="64"/>
18
+ <circle cx="512" cy="512" r="64" fill="#07070a" stroke="#73e7ff" stroke-width="32"/>
19
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5400 1000" role="img" aria-labelledby="title description">
2
+ <title id="title">yamlock wordmark</title>
3
+ <desc id="description">The lowercase name yamlock enclosed in violet square brackets.</desc>
4
+ <metadata>
5
+ Primary wordmark. IBM Plex Mono 5.2.7 Medium (500) converted to outlines.
6
+ Advance width: 600 units per glyph. Letters: #dedbd4. Brackets: #b8a7ff.
7
+ </metadata>
8
+
9
+ <defs>
10
+ <path id="bracket-left" d="M207 -138V760H506V682H297V-60H506V-138Z"/>
11
+ <path id="glyph-y" d="M451 516H561L311 -100Q291 -150 258.5 -175Q226 -200 165 -200H78V-112H200L247 7L39 516H153L235 300L299 123H305L369 300Z"/>
12
+ <path id="glyph-a" d="M492 0Q445 0 421.5 24Q398 48 393 87H388Q373 40 333.5 14Q294 -12 233 -12Q154 -12 107 29.5Q60 71 60 144Q60 219 115.5 258.5Q171 298 286 298H385V338Q385 443 274 443Q224 443 193 423.5Q162 404 141 372L76 425Q98 467 150 497.5Q202 528 284 528Q382 528 438 481Q494 434 494 345V86H559V0ZM264 68Q317 68 351 92Q385 116 385 154V229H288Q170 229 170 158V138Q170 103 195 85.5Q220 68 264 68Z"/>
13
+ <path id="glyph-m" d="M44 0V516H137V449H142Q154 482 176.5 505Q199 528 241 528Q282 528 304.5 505.5Q327 483 333 444H337Q351 479 376 503.5Q401 528 448 528Q508 528 531.5 486Q555 444 555 363V0H462V349Q462 403 449 423.5Q436 444 407 444Q381 444 363.5 426.5Q346 409 346 374V0H253V349Q253 403 240.5 423.5Q228 444 199 444Q172 444 154.5 426.5Q137 409 137 374V0Z"/>
14
+ <path id="glyph-l" d="M75 88H246V652H75V740H355V88H526V0H75Z"/>
15
+ <path id="glyph-o" d="M300 -12Q243 -12 197.5 7Q152 26 120.5 61Q89 96 72 146Q55 196 55 258Q55 320 72 370Q89 420 120.5 455Q152 490 197.5 509Q243 528 300 528Q357 528 402.5 509Q448 490 479.5 455Q511 420 528 370Q545 320 545 258Q545 196 528 146Q511 96 479.5 61Q448 26 402.5 7Q357 -12 300 -12ZM300 74Q360 74 395.5 110.5Q431 147 431 219V297Q431 369 395.5 405.5Q360 442 300 442Q240 442 204.5 405.5Q169 369 169 297V219Q169 147 204.5 110.5Q240 74 300 74Z"/>
16
+ <path id="glyph-c" d="M319 -12Q261 -12 215.5 7Q170 26 138.5 61Q107 96 90.5 146Q74 196 74 258Q74 320 90.5 370Q107 420 138.5 455Q170 490 215.5 509Q261 528 318 528Q398 528 446.5 494Q495 460 519 406L434 360Q420 396 391.5 417Q363 438 318 438Q256 438 222 400.5Q188 363 188 301V215Q188 154 222 116Q256 78 320 78Q368 78 398.5 100Q429 122 447 160L527 111Q502 57 451 22.5Q400 -12 319 -12Z"/>
17
+ <path id="glyph-k" d="M88 740H197V293H202L283 376L428 516H557L348 313L580 0H449L269 251L197 184V0H88Z"/>
18
+ <path id="bracket-right" d="M393 760V-138H94V-60H303V682H94V760Z"/>
19
+ </defs>
20
+
21
+ <g transform="translate(0 780) scale(1 -1)">
22
+ <g fill="#b8a7ff">
23
+ <use href="#bracket-left"/>
24
+ <use href="#bracket-right" transform="translate(4800)"/>
25
+ </g>
26
+ <g fill="#dedbd4">
27
+ <use href="#glyph-y" transform="translate(600)"/>
28
+ <use href="#glyph-a" transform="translate(1200)"/>
29
+ <use href="#glyph-m" transform="translate(1800)"/>
30
+ <use href="#glyph-l" transform="translate(2400)"/>
31
+ <use href="#glyph-o" transform="translate(3000)"/>
32
+ <use href="#glyph-c" transform="translate(3600)"/>
33
+ <use href="#glyph-k" transform="translate(4200)"/>
34
+ </g>
35
+ </g>
36
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yamlock",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "author": "PAVEL TKACHEV (phoenixweiss) <mail@phoenixweiss.me>",
5
5
  "description": "Value-level encryption for YAML/JSON configuration files with CLI + Node.js APIs.",
6
6
  "license": "MIT",
@@ -55,7 +55,7 @@
55
55
  "bugs": {
56
56
  "url": "https://github.com/phoenixweiss/yamlock/issues"
57
57
  },
58
- "homepage": "https://github.com/phoenixweiss/yamlock#readme",
58
+ "homepage": "https://phoenixweiss.github.io/yamlock/",
59
59
  "dependencies": {
60
60
  "js-yaml": "^4.3.2"
61
61
  },