From e7acd79225aed5da0bece958cb1a2923fe24b9d5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 11:12:46 +0000 Subject: [PATCH] fix(brand): Haarstrich an der Naht des AirCard-IOS-Symbols MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Maske hatte exakt die Kartenkante als Region und als weißes Feld; die Kantenglättung wurde doppelt angewendet und ließ bei Vergrößerung einen hellen Strich. Jetzt Standardregion der Maske und ein überstehendes weißes Feld. Co-Authored-By: Claude Opus 5.5 --- web/src/assets/marks/aircards-symbol.svg | 2 +- web/src/card/marks.test.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/web/src/assets/marks/aircards-symbol.svg b/web/src/assets/marks/aircards-symbol.svg index 2b07e64..04bfa83 100644 --- a/web/src/assets/marks/aircards-symbol.svg +++ b/web/src/assets/marks/aircards-symbol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/web/src/card/marks.test.ts b/web/src/card/marks.test.ts index 34bb14b..f42cb5a 100644 --- a/web/src/card/marks.test.ts +++ b/web/src/card/marks.test.ts @@ -175,6 +175,21 @@ describe('AirCard-IOS-Marken', () => { expect(symbol).not.toMatch(/fill-opacity="1"/); }); + it('Symbol: die Maske hat keine eigene Region und ihr weißes Feld ist größer als die vordere Karte (kein Haarstrich an der Naht)', () => { + const tag = /]*>/.exec(symbol)?.[0] ?? ''; + // Ohne x/y/width/height gilt die Standardregion (-10 % / 120 % der Karte); eine Region exakt auf der Kartenkante + // würde deren Kantenglättung doppelt anwenden und bei Vergrößerung einen hellen Strich lassen. + expect(tag).not.toMatch(/\s(?:x|y|width|height|maskUnits)=/); + const white = /]*>\s*]*fill="#fff"[^>]*\bd="M(-?[\d.]+)[ ,](-?[\d.]+)h([\d.]+)v([\d.]+)H/.exec(symbol); + expect(white, 'weißes Rechteck am Anfang der Maske').not.toBeNull(); + const [x, y, w, h] = white!.slice(1).map(Number); + // Die vordere Karte: x 172–852, y 660–1090. + expect(x).toBeLessThan(172); + expect(y).toBeLessThan(660); + expect(x + w).toBeGreaterThan(852); + expect(y + h).toBeGreaterThan(1090); + }); + it('Symbol: enge viewBox um die drei Karten (680 x 730)', () => { expect(svgAspect(symbol)).toBeCloseTo(680 / 730, 3); });