From c0c0742f82a3d5833fb42bdbc8425707291b69cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eW=C9=98yn?= <5607939+Llewellynvdm@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:56:20 +0200 Subject: [PATCH] fix: replace boxed homepage logo with a transparent inline theory wordmark --- NOTICE.md | 2 +- tests/test_branding.py | 40 ++++++++++++++++++++++++++++++++++++ web/static/BRAND-NOTICE.txt | 8 ++++++-- web/static/wordmark.css | 24 ++++++++++++++++++++++ web/static/wordmark.png | Bin 0 -> 15803 bytes web/static/wordmark.webp | Bin 5566 -> 0 bytes web/templates/page.html | 3 ++- 7 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 tests/test_branding.py create mode 100644 web/static/wordmark.css create mode 100644 web/static/wordmark.png delete mode 100644 web/static/wordmark.webp diff --git a/NOTICE.md b/NOTICE.md index 75ea700..43a4b08 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -8,4 +8,4 @@ The built website uses MathJax 3.2.2 (Apache-2.0) for SVG mathematical typesetti Python build dependencies retain their own licenses: Mistune (BSD-3-Clause), Jinja2 (BSD-3-Clause), PyYAML (MIT), Pillow (HPND), Beautiful Soup (MIT), and Playwright (Apache-2.0). They are development/build dependencies, not copies of the theory. -The VDM wordmark is a resized derivative of the author-supplied branding. The small mark and favicon use official VDM branding: the build requests https://www.vdm.io/VDM.png first and can use the official organization's GitHub avatar if that endpoint rejects acquisition. The selected source and digest are recorded, not silently substituted. Brand assets are excluded from the prose and code licenses; no trademark or endorsement rights are granted. +The VDM wordmark is a transparent lettering-only derivative of the author-supplied branding, extended with THEORY on the same baseline; original glyphs are reused where available, with matching R/Y forms. The small mark and favicon use official VDM branding: the build requests https://www.vdm.io/VDM.png first and can use the official organization's GitHub avatar if that endpoint rejects acquisition. The selected source and digest are recorded, not silently substituted. Brand assets are excluded from the prose and code licenses; no trademark or endorsement rights are granted. diff --git a/tests/test_branding.py b/tests/test_branding.py new file mode 100644 index 0000000..2d327e6 --- /dev/null +++ b/tests/test_branding.py @@ -0,0 +1,40 @@ +"""Protect the transparent wordmark asset and its single-line presentation. MIT.""" +from pathlib import Path +import unittest +from PIL import Image +from bs4 import BeautifulSoup +from jinja2 import Environment, FileSystemLoader +from scripts.build import Article + +ROOT = Path(__file__).resolve().parents[1] + + +class WordmarkTests(unittest.TestCase): + def test_png_has_transparent_canvas_and_visible_lettering(self): + with Image.open(ROOT / 'web/static/wordmark.png') as image: + self.assertEqual(image.format, 'PNG') + self.assertGreater(image.width, image.height * 10) + alpha = image.convert('RGBA').getchannel('A') + self.assertEqual(alpha.getextrema()[0], 0) + self.assertGreater(alpha.getextrema()[1], 240) + for x, y in ((0, 0), (image.width - 1, 0), (0, image.height - 1), (image.width - 1, image.height - 1)): + self.assertEqual(alpha.getpixel((x, y)), 0) + histogram = alpha.histogram() + self.assertGreater(histogram[0], image.width * image.height // 4) + self.assertGreater(sum(histogram[241:]), image.width * image.height // 4) + + def test_homepage_uses_one_image_without_a_separate_caption(self): + template = Environment(loader=FileSystemLoader(ROOT / 'web/templates')).get_template('page.html') + article = Article('index.md', {'title': 'Home', 'section': 'Overview'}, '', b'', '/', 'index.html') + markup = template.render(article=article, config={'title': 'VDMT', 'url': 'https://theory.vdm.io', 'version': '0.1.0'}, sections=[], toc=[], commit='test') + wordmark = BeautifulSoup(markup, 'html.parser').select_one('.wordmark') + self.assertIsNotNone(wordmark) + self.assertEqual(len(wordmark.select('img')), 1) + self.assertEqual(wordmark.select_one('img')['src'], '/assets/wordmark.png') + self.assertEqual(wordmark.select_one('img')['alt'], 'Vast Development Method Theory') + self.assertEqual(wordmark.get_text(strip=True), '') + self.assertFalse((ROOT / 'web/static/wordmark.webp').exists()) + + +if __name__ == '__main__': + unittest.main() diff --git a/web/static/BRAND-NOTICE.txt b/web/static/BRAND-NOTICE.txt index 07b6683..5916076 100644 --- a/web/static/BRAND-NOTICE.txt +++ b/web/static/BRAND-NOTICE.txt @@ -1,6 +1,10 @@ VDM branding identifies this official Vast Development Method publication. -wordmark.webp is a resized derivative of vast_development_method.jpg supplied -by the publication's originator. +wordmark.png is a transparent, lettering-only derivative of the originator's +supplied vast_development_method.jpg. The original VAST DEVELOPMENT METHOD +lettering is isolated from its decorative background. THEORY is composed on the +same baseline, reusing the source T/H/E/O glyphs and matching R/Y +letterforms. No claim is made to have recovered or redistributed the original +font file. The image contains no background plate or decorative mosaic. The small mark and favicon are derived from official VDM branding. The build first requests https://www.vdm.io/VDM.png. When that endpoint rejects automated diff --git a/web/static/wordmark.css b/web/static/wordmark.css new file mode 100644 index 0000000..6cce14d --- /dev/null +++ b/web/static/wordmark.css @@ -0,0 +1,24 @@ +/* Transparent, lettering-only homepage wordmark. SPDX-License-Identifier: MIT */ +.wordmark { + display: block; + width: 100%; + max-width: 100%; + margin: 4px 0 28px; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + box-shadow: none; +} +.wordmark img { + display: block; + width: 100%; + max-width: 100%; + height: auto; + background: transparent; +} +/* Keep the same transparent asset and letterforms when the effective theme + changes, including both system changes and the reader's manual override. */ +:root[data-theme="dark"] .wordmark img { + filter: brightness(1.16) saturate(.94); +} diff --git a/web/static/wordmark.png b/web/static/wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..87508410acd0e0cf717cedc3eb08b88b1bdffad0 GIT binary patch literal 15803 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 + @@ -50,7 +51,7 @@
- {% if article.path == 'index.md' %}
Vast Development MethodTHEORY
{% endif %} + {% if article.path == 'index.md' %}
Vast Development Method Theory
{% endif %}
Read MarkdownDownload MarkdownSource
{{ article.rendered|safe }}
Evidence profile{{ article.meta.evidence }}How to read a claim