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>
|
||||
|
||||
<!-- Link to the main CSS file using the correct relative path -->
|
||||
<link rel="stylesheet" href="../../../css/main.css">
|
||||
@@ -229,7 +229,7 @@
|
||||
</header>
|
||||
|
||||
<figure class="article-main-image">
|
||||
<img fetchpriority="high" src="../../../images/event4-image1.webp" alt="Students enjoying coffee and burek in front of CTK library.">
|
||||
<img width="1920" height="1280" fetchpriority="high" src="../../../images/event4-image1.webp" alt="Students enjoying coffee and burek in front of CTK library.">
|
||||
</figure>
|
||||
|
||||
<div class="article-body">
|
||||
@@ -239,19 +239,19 @@
|
||||
<p>The exam session always brings stress, hours and hours of studying, conversations revolving only around exams, first and second attempts, passed or not, some taking the exam for the first time, and some for the fifth time. That's why we decided to take a short break to catch our breath: to relax, to laugh, and to remind ourselves that we're in this study stress together.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image2.webp" alt="Students lining up in front of the CTK library building.">
|
||||
<img width="1425" height="950" loading="lazy" decoding="async" src="../../../images/event4-image2.webp" alt="Students lining up in front of the CTK library building.">
|
||||
<figcaption>Hundreds of students lined up in front of CTK, waiting even before opening to secure a spot in the library on time.</figcaption>
|
||||
</figure>
|
||||
|
||||
<p>With a cup of hot coffee in hand, and thanks to <strong>Burek Olimpija</strong>, we enjoyed delicious burek with meat and with cheese. We also tried to bring in a bit of fun, we invited students to bring their own cups, and there was a prize for the most creative ones.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image3.webp" alt="A student smiling while eating a piece of burek.">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image3.webp" alt="A student smiling while eating a piece of burek.">
|
||||
<figcaption>Free warm burek, the secret formula for solving even the toughest mathematical problems 😉</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image4.webp" alt="A group of students with hot coffee posing for the camera.">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image4.webp" alt="A group of students with hot coffee posing for the camera.">
|
||||
<figcaption>A group of students with hot coffee, posing for the camera.</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
<p>The reactions were instant, students rushed to write, and the answers were everything but boring: from "chaotic" and “We want to sleep! (not in CTK)!" to "chill", "stressed", "exhausted", "happy" and "sleepy". In other words, a whole spectrum of student emotions, honestly poured into just a few words.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image5.webp" alt="A white board with handwritten student answers about their feelings during the exam period.">
|
||||
<img width="1317" height="877" loading="lazy" decoding="async" src="../../../images/event4-image5.webp" alt="A white board with handwritten student answers about their feelings during the exam period.">
|
||||
<figcaption>Witty and sincere answers on the big question boards at CTK.</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -271,14 +271,14 @@
|
||||
<p>Around 150 people visited the joint stand of MSOS, Skupina Povezani, and CTK to hang out, have coffee, grab a snack, and exchange stories among books and deadlines. The event took place in an excellent atmosphere, lots of smiles, new acquaintances, and a small reminder that even in the most stressful periods, there's always time for coffee and good company.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image6.webp" alt="Students gathered at the joint stand during the event.">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image6.webp" alt="Students gathered at the joint stand during the event.">
|
||||
<figcaption>Part of the atmosphere at the joint stand</figcaption>
|
||||
</figure>
|
||||
|
||||
<p>See you again next year, even more relaxed and with even more coffee!</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event4-image7.webp" alt="A collage of photos showing students, coffee cups, and burek.">
|
||||
<img width="1920" height="1080" loading="lazy" decoding="async" src="../../../images/event4-image7.webp" alt="A collage of photos showing students, coffee cups, and burek.">
|
||||
<figcaption>Good company, lots of memories, and exam stress overcome together.</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
@@ -287,20 +287,20 @@
|
||||
<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/event4-image1.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image1.webp" alt="Morning Coffee in front of CTK, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image2.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image2.webp" alt="Morning Coffee in front of CTK, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image3.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image3.webp" alt="Morning Coffee in front of CTK, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image4.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image4.webp" alt="Morning Coffee in front of CTK, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image5.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image5.webp" alt="Morning Coffee in front of CTK, photo 5"><span class="eg-more">+2</span></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event4-image6.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image6.webp" alt="Morning Coffee in front of CTK, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event4-image7.webp" data-caption="Morning Coffee in front of CTK"><img loading="lazy" decoding="async" src="../../../images/event4-image7.webp" alt="Morning Coffee in front of CTK, photo 7"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image1.webp" data-caption="Morning Coffee in front of CTK"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image1.webp" alt="Morning Coffee in front of CTK, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image2.webp" data-caption="Morning Coffee in front of CTK"><img width="1425" height="950" loading="lazy" decoding="async" src="../../../images/event4-image2.webp" alt="Morning Coffee in front of CTK, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image3.webp" data-caption="Morning Coffee in front of CTK"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image3.webp" alt="Morning Coffee in front of CTK, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image4.webp" data-caption="Morning Coffee in front of CTK"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image4.webp" alt="Morning Coffee in front of CTK, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event4-image5.webp" data-caption="Morning Coffee in front of CTK"><img width="1317" height="877" loading="lazy" decoding="async" src="../../../images/event4-image5.webp" alt="Morning Coffee in front of CTK, photo 5"><span class="eg-more">+2</span></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event4-image6.webp" data-caption="Morning Coffee in front of CTK"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event4-image6.webp" alt="Morning Coffee in front of CTK, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event4-image7.webp" data-caption="Morning Coffee in front of CTK"><img width="1920" height="1080" loading="lazy" decoding="async" src="../../../images/event4-image7.webp" alt="Morning Coffee in front of CTK, photo 7"></button>
|
||||
</div>
|
||||
</section>
|
||||
<footer class="article-footer">
|
||||
<hr>
|
||||
<div class="author-share-section">
|
||||
<div class="author-details">
|
||||
<img loading="lazy" decoding="async" src="../../../images/about_kristijan_min.webp" alt="Avatar of Kristijan Popovski">
|
||||
<img width="1083" height="1083" loading="lazy" decoding="async" src="../../../images/about_kristijan_min.webp" alt="Avatar of Kristijan Popovski">
|
||||
<div class="author-text">
|
||||
<p class="author-name">Kristijan Popovski</p>
|
||||
<p class="author-title">President and Founder</p>
|
||||
@@ -324,7 +324,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