Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,22 @@ file and `.claude-plugin/plugin.json`.
excluded by name: `authoring/vendor/no-ai-slop.md` stays MIT under Peter
Yang's notice.

- **The tornado is redrawn as five strokes.** The traced outline is replaced
by the drawing it was always meant to be: five round-capped lines, in
`assets/tdoc_logo.svg` and kept byte-identical in `worker.js`. It still
carries no background field and still inks in `currentColor`, for the
reasons the previous entry records — what changed is the technique, so the
test that guarded paint order and `evenodd` (both artifacts of tracing a
raster) now guards `fill="none"` with a `currentColor` stroke instead. The
viewBox crops to the drawing plus 6%: the source art floats inside a 436
square, and carrying that margin would leave the mark half the box at the
24px bar and the 16px tab. `assets/favicon.svg` follows the same drawing and
keeps its explicit light/dark swap, since a tab strip has no page invert to
ride on. `assets/tdoc_logo_square.svg` and `tdoc_logo_square_dark.svg` are
new: the filled square lockup, for an app icon or a slide — surfaces that
bring their own field. The three 2500px rasters are regenerated from the
vector.

- **The mark is a tornado, and it carries no background.** The dog is
replaced by a line-art vortex, traced to vector at `assets/tdoc_logo.svg`
and kept byte-identical in `worker.js`. The old SVG sat on an opaque white
Expand Down
Binary file modified assets/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
214 changes: 13 additions & 201 deletions assets/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/icon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/icon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/tdoc_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
219 changes: 19 additions & 200 deletions assets/tdoc_logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/tdoc_logo_black.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions assets/tdoc_logo_square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions assets/tdoc_logo_square_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/tdoc_logo_white.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 5 additions & 4 deletions test/agent-runtime.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,11 @@ t('tdoc_logo.svg is the vector SoT; PNG stays for Open Graph', () => {
// surface, a favicon, or somebody else's README the white box shows. Line
// art in currentColor needs no field — it follows the text in light mode and
// inverts to white with it in dark.
assert(!/<rect[^>]*fill="#(fff|ffffff)"/i.test(svg), 'the mark must not carry a background field');
assert(svg.indexOf('fill="#ffffff"') < svg.indexOf('fill="currentColor"'),
'the field must be painted before the ink, or it covers the drawing');
assert(/fill-rule\s*=\s*["']evenodd["']/.test(svg), 'outline holes need evenodd');
assert(!/<rect[\s>]/i.test(svg), 'the mark must not carry a background field');
// Drawn as strokes, not as traced outlines: five lines with round caps. A
// filled path could still paint a field by accident, so `fill` stays off.
assert(/stroke="currentColor"/.test(svg), 'the ink must follow currentColor');
assert(/fill="none"/.test(svg), 'stroked line art must not fill');
assert(!/<image[\s>]/i.test(svg), 'embedded <image> not allowed');
assert(!/data:image\//i.test(svg), 'embedded bitmap not allowed');
assert(!/<script[\s>]/i.test(svg), 'SVG must be inert');
Expand Down
446 changes: 38 additions & 408 deletions worker/worker.js

Large diffs are not rendered by default.