health: fix broken pages, add image dimensions, a11y & SEO wins
Site-wide health pass (excludes in-progress blog work). Verified with a
local server + headless browser: Timeline, homepage and gallery pages load
with zero console errors and no layout distortion.
Render bugs
- Timeline page (en/mk/si): fix ../../../ paths that overshot the site root,
so the main stylesheet and hero image load again.
- Meet Student Slovenia 2023 (en/mk/si): remove a <figure> referencing
event3-photo-11.png, an image that was never uploaded (broken image).
Performance
- Add intrinsic width/height to 1039 raster <img> tags to prevent layout
shift (CLS); 450 SVGs correctly skipped. Add a global
`img { max-width:100%; height:auto }` safety net so aspect ratio is
preserved and images never overflow.
- Preload the homepage hero (LCP) image on en/mk/si.
- Load Font Awesome non-blocking (media=print/onload swap) with a <noscript>
fallback, on 225 pages.
Accessibility
- Add aria-label to 57 unlabeled newsletter email inputs.
- Add an sr-only <h1> to the three "My Route" pages (had no h1).
- Add an .sr-only utility class.
SEO
- Add meta descriptions to legal/msos-hub/support pages (en/mk/si).
Note: MK/SI meta descriptions are machine-drafted and should be proofread
by a native speaker before considering them final.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
168e4ce378
commit
9ce7450aa1
209 files changed
+1289
-1267
No files matched your search
+28
-28
@@ -54,7 +54,7 @@
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Font Awesome (for icons) -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media='all'" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
|
||||
|
||||
<!-- Link to the main CSS file -->
|
||||
<link rel="stylesheet" href="../../css/main.css">
|
||||
@@ -202,9 +202,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/meet-student-slovenia-2024/" aria-label="Meet Student Slovenia 2024">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/event4-img-1.webp" alt="Meet Student Slovenia 2024, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event4-img-2.webp" alt="Meet Student Slovenia 2024, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event4-img-3.webp" alt="Meet Student Slovenia 2024, photo 3"><span class="cover-more-badge">+9</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event4-img-1.webp" alt="Meet Student Slovenia 2024, photo 1"></span>
|
||||
<span class="album-tile"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event4-img-2.webp" alt="Meet Student Slovenia 2024, photo 2"></span>
|
||||
<span class="album-tile"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event4-img-3.webp" alt="Meet Student Slovenia 2024, photo 3"><span class="cover-more-badge">+9</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Meet Student Slovenia 2024</h3>
|
||||
@@ -215,9 +215,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/meet-student-slovenia-2023/" aria-label="Meet Student Slovenia 2023">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/event3-photo-1.webp" alt="Meet Student Slovenia 2023, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event3-photo-2.webp" alt="Meet Student Slovenia 2023, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event3-photo-3.webp" alt="Meet Student Slovenia 2023, photo 3"><span class="cover-more-badge">+7</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event3-photo-1.webp" alt="Meet Student Slovenia 2023, photo 1"></span>
|
||||
<span class="album-tile"><img width="1920" height="1317" loading="lazy" decoding="async" src="../../images/event3-photo-2.webp" alt="Meet Student Slovenia 2023, photo 2"></span>
|
||||
<span class="album-tile"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event3-photo-3.webp" alt="Meet Student Slovenia 2023, photo 3"><span class="cover-more-badge">+7</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Meet Student Slovenia 2023</h3>
|
||||
@@ -228,9 +228,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/humanitarian-tournament-in-maribor/" aria-label="Humanitarian Tournament in Maribor">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/maribor-tournament-1.webp" alt="Humanitarian Tournament in Maribor, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/maribor-tournament-2.webp" alt="Humanitarian Tournament in Maribor, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/maribor-tournament-3.webp" alt="Humanitarian Tournament in Maribor, photo 3"><span class="cover-more-badge">+7</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/maribor-tournament-1.webp" alt="Humanitarian Tournament in Maribor, photo 1"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/maribor-tournament-2.webp" alt="Humanitarian Tournament in Maribor, photo 2"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/maribor-tournament-3.webp" alt="Humanitarian Tournament in Maribor, photo 3"><span class="cover-more-badge">+7</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Humanitarian Tournament in Maribor</h3>
|
||||
@@ -241,9 +241,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/macedonian-student-night-in-ljubljana/" aria-label="Macedonian Student Night in Ljubljana">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/msnl-1.webp" alt="Macedonian Student Night in Ljubljana, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/msnl-2.webp" alt="Macedonian Student Night in Ljubljana, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/msnl-3.webp" alt="Macedonian Student Night in Ljubljana, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="1430" height="757" loading="lazy" decoding="async" src="../../images/msnl-1.webp" alt="Macedonian Student Night in Ljubljana, photo 1"></span>
|
||||
<span class="album-tile"><img width="936" height="422" loading="lazy" decoding="async" src="../../images/msnl-2.webp" alt="Macedonian Student Night in Ljubljana, photo 2"></span>
|
||||
<span class="album-tile"><img width="1087" height="586" loading="lazy" decoding="async" src="../../images/msnl-3.webp" alt="Macedonian Student Night in Ljubljana, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Macedonian Student Night in Ljubljana</h3>
|
||||
@@ -254,9 +254,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/paint-and-wine-at-sunset/" aria-label="Paint & Wine at Sunset">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/paint-wine-1.webp" alt="Paint & Wine at Sunset, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/paint-wine-2.webp" alt="Paint & Wine at Sunset, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/paint-wine-3.webp" alt="Paint & Wine at Sunset, photo 3"><span class="cover-more-badge">+6</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../images/paint-wine-1.webp" alt="Paint & Wine at Sunset, photo 1"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/paint-wine-2.webp" alt="Paint & Wine at Sunset, photo 2"></span>
|
||||
<span class="album-tile"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../images/paint-wine-3.webp" alt="Paint & Wine at Sunset, photo 3"><span class="cover-more-badge">+6</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Paint & Wine at Sunset</h3>
|
||||
@@ -267,9 +267,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/watching-handball-together-in-slovenia/" aria-label="Watching Handball Together in Slovenia">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/handball-2025-1.webp" alt="Watching Handball Together in Slovenia, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/handball-2025-2.webp" alt="Watching Handball Together in Slovenia, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/handball-2025-3.webp" alt="Watching Handball Together in Slovenia, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/handball-2025-1.webp" alt="Watching Handball Together in Slovenia, photo 1"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/handball-2025-2.webp" alt="Watching Handball Together in Slovenia, photo 2"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/handball-2025-3.webp" alt="Watching Handball Together in Slovenia, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Watching Handball Together in Slovenia</h3>
|
||||
@@ -280,9 +280,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/morning-coffee-in-front-of-ctk/" aria-label="Morning Coffee in front of CTK">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/event4-image1.webp" alt="Morning Coffee in front of CTK, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event4-image2.webp" alt="Morning Coffee in front of CTK, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/event4-image3.webp" alt="Morning Coffee in front of CTK, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event4-image1.webp" alt="Morning Coffee in front of CTK, photo 1"></span>
|
||||
<span class="album-tile"><img width="1425" height="950" loading="lazy" decoding="async" src="../../images/event4-image2.webp" alt="Morning Coffee in front of CTK, photo 2"></span>
|
||||
<span class="album-tile"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../images/event4-image3.webp" alt="Morning Coffee in front of CTK, photo 3"><span class="cover-more-badge">+4</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>Morning Coffee in front of CTK</h3>
|
||||
@@ -293,9 +293,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/in-memory-of-frosina-kulakova/" aria-label="In Memory of Frosina Kulakova">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/frosina-1.webp" alt="In Memory of Frosina Kulakova, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/frosina-2.webp" alt="In Memory of Frosina Kulakova, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/frosina-3.webp" alt="In Memory of Frosina Kulakova, photo 3"></span>
|
||||
<span class="album-tile album-tile--main"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/frosina-1.webp" alt="In Memory of Frosina Kulakova, photo 1"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/frosina-2.webp" alt="In Memory of Frosina Kulakova, photo 2"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/frosina-3.webp" alt="In Memory of Frosina Kulakova, photo 3"></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>In Memory of Frosina Kulakova</h3>
|
||||
@@ -306,9 +306,9 @@
|
||||
<article class="album-card">
|
||||
<a class="album-link-wrap" href="../../en/projects/in-memory-of-the-kochani-victims/" aria-label="In Memory of the Kochani Victims">
|
||||
<div class="album-cover">
|
||||
<span class="album-tile album-tile--main"><img loading="lazy" decoding="async" src="../../images/kochani-1.webp" alt="In Memory of the Kochani Victims, photo 1"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/kochani-2.webp" alt="In Memory of the Kochani Victims, photo 2"></span>
|
||||
<span class="album-tile"><img loading="lazy" decoding="async" src="../../images/kochani-3.webp" alt="In Memory of the Kochani Victims, photo 3"><span class="cover-more-badge">+1</span></span>
|
||||
<span class="album-tile album-tile--main"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/kochani-1.webp" alt="In Memory of the Kochani Victims, photo 1"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/kochani-2.webp" alt="In Memory of the Kochani Victims, photo 2"></span>
|
||||
<span class="album-tile"><img width="720" height="480" loading="lazy" decoding="async" src="../../images/kochani-3.webp" alt="In Memory of the Kochani Victims, photo 3"><span class="cover-more-badge">+1</span></span>
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<h3>In Memory of the Kochani Victims</h3>
|
||||
|
||||
Reference in new issue
Block a user