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
@@ -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='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>
|
||||
|
||||
<!-- Correct path to the main CSS file -->
|
||||
<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="Paint & Wine at Sunset event in Gorizia">
|
||||
<img width="1600" height="1067" fetchpriority="high" src="../../../images/paint-wine-1.webp" alt="Paint & Wine at Sunset event in Gorizia">
|
||||
</figure>
|
||||
|
||||
<div class="article-body">
|
||||
<p>On International Women’s Day, the MSOS Nova Gorica team hosted its very first local event in collaboration with the Macedonian Cultural Association "Ohridski Biseri". Students from Ljubljana, Nova Gorica, and the surrounding region crossed the border into Gorizia, Italy, for an evening of painting, wine, and music.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Students painting during the Paint & Wine evening">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Students painting during the Paint & Wine evening">
|
||||
</figure>
|
||||
|
||||
<h2>A first for MSOS Nova Gorica</h2>
|
||||
@@ -216,7 +216,7 @@
|
||||
<p>This was more than just an event. It was the first official activity organized by our new MSOS Nova Gorica team. With support from the Macedonian Cultural Association "Ohridski Biseri", we transformed the cozy venue Etnoteca Mama Angela into a space filled with creativity and laughter.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="The cozy venue Etnoteca Mama Angela">
|
||||
<img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="The cozy venue Etnoteca Mama Angela">
|
||||
</figure>
|
||||
|
||||
<h2>Art, music, and togetherness</h2>
|
||||
@@ -226,11 +226,11 @@
|
||||
<p>A live DJ set gave the evening a vibrant rhythm, turning it into more than just a workshop. It became a celebration. Between brushstrokes and beats, students connected, shared stories, and enjoyed an atmosphere that was both creative and festive.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Canvases filling with color as students paint">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Canvases filling with color as students paint">
|
||||
</figure>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Students enjoying wine and music together">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Students enjoying wine and music together">
|
||||
</figure>
|
||||
|
||||
<h2>Why it mattered</h2>
|
||||
@@ -244,11 +244,11 @@
|
||||
</div>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Finished paintings on display">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Finished paintings on display">
|
||||
</figure>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="The group enjoying the celebration">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="The group enjoying the celebration">
|
||||
</figure>
|
||||
|
||||
<h2>Looking ahead</h2>
|
||||
@@ -256,26 +256,26 @@
|
||||
<p>Paint & Wine Night showed that MSOS Nova Gorica is ready to bring fresh ideas and energy to our student family. From wine glasses clinking to canvases filling with color, the night left everyone with memories and a few paint-stained fingers, that will not be forgotten.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="A memory from the Paint & Wine evening">
|
||||
<img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="A memory from the Paint & Wine evening">
|
||||
</figure>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="The MSOS Nova Gorica community at sunset">
|
||||
<img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="The MSOS Nova Gorica community at sunset">
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<section class="event-gallery">
|
||||
<h2 class="event-gallery-title">Photos from the event</h2>
|
||||
<div class="event-gallery-grid js-lightbox">
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-1.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-1.webp" alt="Paint & Wine at Sunset, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-2.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Paint & Wine at Sunset, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-3.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Paint & Wine at Sunset, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-4.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Paint & Wine at Sunset, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-5.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Paint & Wine at Sunset, 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="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Paint & Wine at Sunset, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-7.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Paint & Wine at Sunset, photo 7"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-8.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Paint & Wine at Sunset, photo 8"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-9.webp" data-caption="Paint & Wine at Sunset"><img loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Paint & Wine at Sunset, photo 9"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-1.webp" data-caption="Paint & Wine at Sunset"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-1.webp" alt="Paint & Wine at Sunset, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-2.webp" data-caption="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-2.webp" alt="Paint & Wine at Sunset, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-3.webp" data-caption="Paint & Wine at Sunset"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-3.webp" alt="Paint & Wine at Sunset, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-4.webp" data-caption="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-4.webp" alt="Paint & Wine at Sunset, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/paint-wine-5.webp" data-caption="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-5.webp" alt="Paint & Wine at Sunset, 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="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-6.webp" alt="Paint & Wine at Sunset, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-7.webp" data-caption="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-7.webp" alt="Paint & Wine at Sunset, photo 7"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-8.webp" data-caption="Paint & Wine at Sunset"><img width="720" height="480" loading="lazy" decoding="async" src="../../../images/paint-wine-8.webp" alt="Paint & Wine at Sunset, photo 8"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/paint-wine-9.webp" data-caption="Paint & Wine at Sunset"><img width="1600" height="1067" loading="lazy" decoding="async" src="../../../images/paint-wine-9.webp" alt="Paint & Wine at Sunset, photo 9"></button>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -286,7 +286,7 @@
|
||||
<p>News, announcements and open calls, straight to your inbox.</p>
|
||||
<form class="subscribe-form-bottom">
|
||||
<div class="input-wrapper">
|
||||
<input type="email" placeholder="Enter your email">
|
||||
<input type="email" placeholder="Enter your email" aria-label="Email address">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary-orange">Subscribe</button>
|
||||
</form>
|
||||
|
||||
Reference in new issue
Block a user