From b01be1a6dd3a48a2cc78c782060c511d1b5183fb Mon Sep 17 00:00:00 2001 From: Terencio Agozzino Date: Sat, 31 Oct 2026 19:12:02 +0100 Subject: [PATCH 1/2] fix(companies): inline the Envalior logo like the others It was the only logo drawn from a separate mask image, which Safari could leave blank while it loaded, or from a stale cache. It is now an SVG that wraps that same mask, inlined with the page, so every logo appears at once. Co-Authored-By: Claude Opus 5.5 --- src/assets/logos/envalior.png | Bin 20042 -> 0 bytes src/assets/logos/envalior.svg | 1 + src/components/Companies.astro | 40 +++++++++------------------------ src/data/profile.ts | 7 ++++-- 4 files changed, 16 insertions(+), 32 deletions(-) delete mode 100644 src/assets/logos/envalior.png create mode 100644 src/assets/logos/envalior.svg diff --git a/src/assets/logos/envalior.png b/src/assets/logos/envalior.png deleted file mode 100644 index aa6d0c349b6f0db3112821404d68744aba4a6516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20042 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 diff --git a/src/assets/logos/envalior.svg b/src/assets/logos/envalior.svg new file mode 100644 index 0000000..6ca7bf0 --- /dev/null +++ b/src/assets/logos/envalior.svg @@ -0,0 +1 @@ + diff --git a/src/components/Companies.astro b/src/components/Companies.astro index f61bc88..e9deeed 100644 --- a/src/components/Companies.astro +++ b/src/components/Companies.astro @@ -1,23 +1,15 @@ --- -import { getImage } from 'astro:assets'; import type { SvgComponent } from 'astro/types'; import { companies } from '../data/profile'; -// SVG logos are inlined, so their currentColor parts follow the theme. A PNG -// logo is single-colour; it is used as a mask over currentColor instead, which -// renders it the same way. -const logos = await Promise.all( - companies.map(async ({ name, src, height, ink }) => { - const width = Math.round((height * src.width) / src.height); - const style = `--h: ${height}px; --w: ${width}px; ${ink ? `--ink: ${ink};` : ''}`; - if (src.format === 'svg') { - return { name, style, Svg: src as unknown as SvgComponent }; - } - const mask = await getImage({ src, height: height * 2, format: 'webp' }); - return { name, style: `${style} --mask: url(${mask.src});` }; - }), -); +// The logos are inlined SVGs, so their currentColor parts follow the theme and +// they appear with the page, without a request of their own. +const logos = companies.map(({ name, src, height, ink }) => { + const width = Math.round((height * src.width) / src.height); + const style = `--h: ${height}px; --w: ${width}px; ${ink ? `--ink: ${ink};` : ''}`; + return { name, style, Svg: src as unknown as SvgComponent }; +}); ---
@@ -26,11 +18,7 @@ const logos = await Promise.all(
    {logos.map(({ name, style, Svg }) => (
  • - {Svg ? ( - - ) : ( - - )} +
  • ))}
@@ -77,18 +65,11 @@ const logos = await Promise.all( color: var(--text); } - .logos :global(svg), - .mask { + .logos :global(svg) { height: var(--h); width: var(--w); } - .mask { - display: block; - background: currentColor; - mask: var(--mask) center / contain no-repeat; - } - @media (max-width: 920px) { .wrap { grid-template-columns: 1fr; @@ -103,8 +84,7 @@ const logos = await Promise.all( gap: 22px 30px; } - .logos :global(svg), - .mask { + .logos :global(svg) { height: calc(var(--h) * 0.75); width: calc(var(--w) * 0.75); } diff --git a/src/data/profile.ts b/src/data/profile.ts index cfa13dc..0aca91c 100644 --- a/src/data/profile.ts +++ b/src/data/profile.ts @@ -17,7 +17,7 @@ import psm1 from '../assets/badges/psm1.png'; import cbtw from '../assets/logos/cbtw.svg'; import cronos from '../assets/logos/cronos.svg'; import deloitte from '../assets/logos/deloitte.svg'; -import envalior from '../assets/logos/envalior.png'; +import envalior from '../assets/logos/envalior.svg'; import imec from '../assets/logos/imec.svg'; import partenamut from '../assets/logos/partenamut.svg'; @@ -47,7 +47,10 @@ export const person = { */ export interface Logo { name: string; - /** An SVG, inlined; or a single-colour PNG, used as a mask. */ + /** + * An SVG, inlined. A logo only available as a single-colour PNG is wrapped + * in one, as a mask over a currentColor rectangle (see envalior.svg). + */ src: ImageMetadata; /** Display height in pixels on large screens; logos differ in proportions. */ height: number; From e1ed45cb821bf224a9ec9bef797cfb21d68fb34a Mon Sep 17 00:00:00 2001 From: Terencio Agozzino Date: Sat, 31 Oct 2026 19:15:37 +0100 Subject: [PATCH 2/2] feat(companies): fade the logos in like the other sections Co-Authored-By: Claude Opus 5.5 --- src/components/Companies.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Companies.astro b/src/components/Companies.astro index e9deeed..5e4249b 100644 --- a/src/components/Companies.astro +++ b/src/components/Companies.astro @@ -14,8 +14,8 @@ const logos = companies.map(({ name, src, height, ink }) => {
-

Experience with

-
    +

    Experience with

    +
      {logos.map(({ name, style, Svg }) => (