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">
|
||||
@@ -232,7 +232,7 @@
|
||||
</header>
|
||||
|
||||
<figure class="article-main-image">
|
||||
<img fetchpriority="high" src="../../../images/event3-photo-1.webp" alt="Panel discussion at the 'Meet Student Slovenia 2023' event">
|
||||
<img width="1920" height="1280" fetchpriority="high" src="../../../images/event3-photo-1.webp" alt="Panel discussion at the 'Meet Student Slovenia 2023' event">
|
||||
</figure>
|
||||
|
||||
<div class="article-body">
|
||||
@@ -242,7 +242,7 @@
|
||||
<p>Instead of dry information, students had the opportunity to hear real stories, from those who are already walking the same path. Students from Ljubljana, Maribor, and Koper talked about their challenges, first impressions, funny situations, and moments when community support was crucial. And the audience? They absorbed everything with great attention, because exactly those questions that are never written in brochures, here they received honest answers.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-2.webp" alt="Participants of the panel discussion">
|
||||
<img width="1920" height="1317" loading="lazy" decoding="async" src="../../../images/event3-photo-2.webp" alt="Participants of the panel discussion">
|
||||
<figcaption>Igor Arsov from the University of Primorska recounts his student experience at the Faculty of Management.</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -250,12 +250,12 @@
|
||||
<p>Our members Kiara Lazić, Angel Naumov, Klimentina Čapovska, and Igor Arsov appeared on stage, each with their own story, their own faculty, their own city. Together with moderator Leon Šumanski and host Vasil Hanџiski, they transformed the panel into a real conversation that felt more like a friendly get-together than a formal discussion. They talked about exams, new friendships, life in student dorms, and how important it is not to give up even when things seem hardest.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-3.webp" alt="Vasil Hanџiski at the opening of the event">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-3.webp" alt="Vasil Hanџiski at the opening of the event">
|
||||
<figcaption>Photograph from the opening of the event with the host Vasil Hanџiski.</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-4.webp" alt="The audience at the event">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-4.webp" alt="The audience at the event">
|
||||
<figcaption>Photograph of the event participants. We were a little surprised by the interest, but somehow we managed to fit everyone!♡</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -264,15 +264,15 @@
|
||||
<p>At the event, we received significant support and assistance from Melita Sekulovska in organizing the space and Aleksandar Popovski in designing the organization's website. We sincerely thanked them for their dedicated work, as well as the event coordinator, Lea Janačkovska, who made this event extraordinary.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-5.webp" alt="Mr. Branko Gregović and H.E. Gregor Presker">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-6.webp" alt="Kristijan Popovski, Melita Sekulovska, Lea Janačkovska, Marija Koštrevska and Aleksandar Popovski with certificates of appreciation">
|
||||
<img width="1920" height="1337" loading="lazy" decoding="async" src="../../../images/event3-photo-5.webp" alt="Mr. Branko Gregović and H.E. Gregor Presker">
|
||||
<img width="1920" height="1239" loading="lazy" decoding="async" src="../../../images/event3-photo-6.webp" alt="Kristijan Popovski, Melita Sekulovska, Lea Janačkovska, Marija Koštrevska and Aleksandar Popovski with certificates of appreciation">
|
||||
<figcaption>The top two pictures show Mr. Branko Greganović, Chairman of the Management Board of NLB Bank Skopje, and on the right is H.E. the Ambassador of the Republic of Slovenia in North Macedonia, Mr. Gregor Presker. The bottom pictures show the President Kristijan Popovski, Melita Sekulovska, Lea Janačkovska, Marija Koštrevska, and Aleksandar Popovski.</figcaption>
|
||||
</figure>
|
||||
|
||||
<p>With the help of Dijag doo company, we prepared two plaques for the Embassy and NLB Bank as a sign of gratitude for all the help and support they provided.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-7.webp" alt="Plaques for NLB Bank Skopje and the Embassy of the Republic of Slovenia">
|
||||
<img width="1920" height="1337" loading="lazy" decoding="async" src="../../../images/event3-photo-7.webp" alt="Plaques for NLB Bank Skopje and the Embassy of the Republic of Slovenia">
|
||||
<figcaption>Photograph of the plaques we presented to NLB Bank Skopje and the Embassy of the Republic of Slovenia in North Macedonia.</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
<p>Because this event was not just another presentation. It was a hand extended to future students, a message that they are not alone, that a community is already waiting for them. Some left with new friends, others with concrete answers to questions that had bothered them for months. But everyone left with the same feeling: that Slovenia is no longer an unknown place, but a new home where they will be part of something bigger.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-8.webp" alt="Attendees at the event">
|
||||
<img width="1920" height="1341" loading="lazy" decoding="async" src="../../../images/event3-photo-8.webp" alt="Attendees at the event">
|
||||
<figcaption>Photographs of the attendees at the event!</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
<p>A special moment of the event was the address by the Consul of the Embassy of the Republic of Slovenia in North Macedonia, Mr. Martin Glazar. He briefly presented the most important steps of the process for obtaining a temporary residence permit, one of the biggest concerns and challenges for all foreign students in Slovenia. In this way, future students gained a clearer picture of what awaits them and how to more easily deal with administrative procedures.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-9.webp" alt="The Consul introducing students to the process of obtaining a temporary residence permit">
|
||||
<img width="960" height="540" loading="lazy" decoding="async" src="../../../images/event3-photo-9.webp" alt="The Consul introducing students to the process of obtaining a temporary residence permit">
|
||||
<figcaption>Photograph of the consul introducing students in an interesting way to the process of obtaining a temporary residence permit!</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
<p>Not everyone managed to be present in the hall, but that's why we made sure no one was left without this experience. We broadcast the event live through our Facebook page, and the recording is still available. If you want to experience the atmosphere and hear the stories first-hand, you can watch the entire event at this link here.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-10.webp" alt="Poster for the 'Meet Student Slovenia' event">
|
||||
<img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-10.webp" alt="Poster for the 'Meet Student Slovenia' event">
|
||||
<figcaption>Photograph of the event poster!</figcaption>
|
||||
</figure>
|
||||
|
||||
@@ -316,34 +316,29 @@
|
||||
<li>Radio MOF (media partner)</li>
|
||||
</ol>
|
||||
<p>Thanks to everyone who was part of this event, and to future students, we say: your story in Slovenia is just beginning, and we are here to be a part of it.</p>
|
||||
|
||||
<figure class="article-inline-image">
|
||||
<img loading="lazy" decoding="async" src="../../../images/event3-photo-11.png" alt="A small part of the MSOS team">
|
||||
<figcaption>Photo of a small part of the team because we forgot to take a group photo!🤪</figcaption>
|
||||
</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/event3-photo-1.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-1.webp" alt="Meet Student Slovenia 2023, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-2.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-2.webp" alt="Meet Student Slovenia 2023, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-3.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-3.webp" alt="Meet Student Slovenia 2023, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-4.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-4.webp" alt="Meet Student Slovenia 2023, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-5.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-5.webp" alt="Meet Student Slovenia 2023, photo 5"><span class="eg-more">+5</span></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-6.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-6.webp" alt="Meet Student Slovenia 2023, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-7.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-7.webp" alt="Meet Student Slovenia 2023, photo 7"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-8.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-8.webp" alt="Meet Student Slovenia 2023, photo 8"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-9.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-9.webp" alt="Meet Student Slovenia 2023, photo 9"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-10.webp" data-caption="Meet Student Slovenia 2023"><img loading="lazy" decoding="async" src="../../../images/event3-photo-10.webp" alt="Meet Student Slovenia 2023, photo 10"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-1.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-1.webp" alt="Meet Student Slovenia 2023, photo 1"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-2.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1317" loading="lazy" decoding="async" src="../../../images/event3-photo-2.webp" alt="Meet Student Slovenia 2023, photo 2"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-3.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-3.webp" alt="Meet Student Slovenia 2023, photo 3"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-4.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-4.webp" alt="Meet Student Slovenia 2023, photo 4"></button>
|
||||
<button type="button" class="eg-thumb" data-full="../../../images/event3-photo-5.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1337" loading="lazy" decoding="async" src="../../../images/event3-photo-5.webp" alt="Meet Student Slovenia 2023, photo 5"><span class="eg-more">+5</span></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-6.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1239" loading="lazy" decoding="async" src="../../../images/event3-photo-6.webp" alt="Meet Student Slovenia 2023, photo 6"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-7.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1337" loading="lazy" decoding="async" src="../../../images/event3-photo-7.webp" alt="Meet Student Slovenia 2023, photo 7"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-8.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1341" loading="lazy" decoding="async" src="../../../images/event3-photo-8.webp" alt="Meet Student Slovenia 2023, photo 8"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-9.webp" data-caption="Meet Student Slovenia 2023"><img width="960" height="540" loading="lazy" decoding="async" src="../../../images/event3-photo-9.webp" alt="Meet Student Slovenia 2023, photo 9"></button>
|
||||
<button type="button" class="eg-thumb is-hidden" data-full="../../../images/event3-photo-10.webp" data-caption="Meet Student Slovenia 2023"><img width="1920" height="1280" loading="lazy" decoding="async" src="../../../images/event3-photo-10.webp" alt="Meet Student Slovenia 2023, photo 10"></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>
|
||||
@@ -367,7 +362,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