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:
popovskikandClaude Opus 4.8 committed 2026-08-04 00:31:27 +02:00
1 parent 168e4ce378
commit 9ce7450aa1
209 files changed
+1289 -1267

No files matched your search

+20 -20
View File
@@ -56,7 +56,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=&#39;all&#39;" /><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>
<!-- Povezava na glavno CSS datoteko -->
<link rel="stylesheet" href="../../../css/main.css">
@@ -201,14 +201,14 @@
</header>
<figure class="article-main-image">
<img fetchpriority="high" src="../../../images/paint-wine-1.webp" alt="Dogodek Slikanje in vino ob sončnem zahodu v Gorici">
<img width="1600" height="1067" fetchpriority="high" src="../../../images/paint-wine-1.webp" alt="Dogodek Slikanje in vino ob sončnem zahodu v Gorici">
</figure>
<div class="article-body">
<p>Na mednarodni dan žena je ekipa MŠOS Nova Gorica pripravila svoj prvi lokalni dogodek v sodelovanju z Makedonskim kulturnim društvom »Ohridski Biseri«. Študenti iz Ljubljane, Nove Gorice in okolice so prestopili mejo v italijansko Gorico na večer slikanja, vina in glasbe.</p>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Študenti slikajo na večeru slikanja in vina">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Študenti slikajo na večeru slikanja in vina">
</figure>
<h2>Prvič za MŠOS Nova Gorica</h2>
@@ -216,7 +216,7 @@
<p>To je bilo več kot le dogodek. Bila je prva uradna dejavnost, ki jo je organizirala naša nova ekipa MŠOS Nova Gorica. S podporo Makedonskega kulturnega društva »Ohridski Biseri« smo prijeten prostor Etnoteca Mama Angela spremenili v prostor, poln ustvarjalnosti in smeha.</p>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Prijeten prostor Etnoteca Mama Angela">
<img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Prijeten prostor Etnoteca Mama Angela">
</figure>
<h2>Umetnost, glasba in druženje</h2>
@@ -226,11 +226,11 @@
<p>DJ v živo je večeru dal živahen ritem in ga spremenil v več kot le delavnico. Postal je praznovanje. Med potezami čopiča in ritmi so se študenti povezovali, delili zgodbe in uživali v vzdušju, ki je bilo hkrati ustvarjalno in praznično.</p>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Platna, ki se polnijo z barvami, medtem ko študenti slikajo">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Platna, ki se polnijo z barvami, medtem ko študenti slikajo">
</figure>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Študenti skupaj uživajo ob vinu in glasbi">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Študenti skupaj uživajo ob vinu in glasbi">
</figure>
<h2>Zakaj je bilo pomembno</h2>
@@ -244,11 +244,11 @@
</div>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Končane slike na ogled">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Končane slike na ogled">
</figure>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Skupina uživa v praznovanju">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Skupina uživa v praznovanju">
</figure>
<h2>Pogled naprej</h2>
@@ -256,26 +256,26 @@
<p>Večer slikanja in vina je pokazal, da je MŠOS Nova Gorica pripravljena prinesti sveže ideje in energijo v našo študentsko družino. Od trkanja kozarcev vina do platen, ki se polnijo z barvami, je večer vsem pustil spomine in nekaj s slikanjem obarvanih prstov, ki jih ne bomo pozabili.</p>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Spomin z večera slikanja in vina">
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Spomin z večera slikanja in vina">
</figure>
<figure class="article-inline-image">
<img loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Skupnost MŠOS Nova Gorica ob sončnem zahodu">
<img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Skupnost MŠOS Nova Gorica ob sončnem zahodu">
</figure>
</div>
<section class="event-gallery">
<h2 class="event-gallery-title">Fotografije z dogodka</h2>
<div class="event-gallery-grid js-lightbox">
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-1.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-1.webp" alt="Slikanje in vino ob sončnem zahodu, photo 1"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-2.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Slikanje in vino ob sončnem zahodu, photo 2"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-3.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Slikanje in vino ob sončnem zahodu, photo 3"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-4.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Slikanje in vino ob sončnem zahodu, photo 4"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-5.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Slikanje in vino ob sončnem zahodu, photo 5"><span class="eg-more">+4</span></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-6.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Slikanje in vino ob sončnem zahodu, photo 6"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-7.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Slikanje in vino ob sončnem zahodu, photo 7"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-8.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Slikanje in vino ob sončnem zahodu, photo 8"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-9.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Slikanje in vino ob sončnem zahodu, photo 9"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-1.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-1.webp" alt="Slikanje in vino ob sončnem zahodu, photo 1"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-2.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Slikanje in vino ob sončnem zahodu, photo 2"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-3.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Slikanje in vino ob sončnem zahodu, photo 3"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-4.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Slikanje in vino ob sončnem zahodu, photo 4"></button>
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-5.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Slikanje in vino ob sončnem zahodu, photo 5"><span class="eg-more">+4</span></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-6.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Slikanje in vino ob sončnem zahodu, photo 6"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-7.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Slikanje in vino ob sončnem zahodu, photo 7"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-8.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Slikanje in vino ob sončnem zahodu, photo 8"></button>
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-9.webp" data-caption="Slikanje in vino ob sončnem zahodu"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Slikanje in vino ob sončnem zahodu, photo 9"></button>
</div>
</section>
</article>
@@ -286,7 +286,7 @@
<p>Novice, obvestila in razpisi, naravnost v vaš e-poštni predal.</p>
<form class="subscribe-form-bottom">
<div class="input-wrapper">
<input type="email" placeholder="Vnesite svoj e-mail">
<input type="email" placeholder="Vnesite svoj e-mail" aria-label="E-poštni naslov">
</div>
<button type="submit" class="btn btn-primary-orange">Naroči se</button>
</form>