Unlisted MK press kit for media covering the 4 Sept 2026 event: fact
sheet, ready-to-quote boilerplate, key messages, downloadable event
photos + logos, and info@ contact. Reuses _press.css with new press-kit
blocks (one-line hero title, centered CTAs, tightened fact columns,
photo download grid).
Keep it link-only: add an UNLISTED mechanism to tools/seo_inject.py so
the page gets robots=noindex,nofollow on every run and is excluded from
sitemap.xml (and not exposed in robots.txt). Without this the pre-commit
SEO injector would make the page indexable and list it publicly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The "Become a member" CTA was a direct child of role="tablist", which
violates the ARIA rule that a tablist may only contain role="tab" children
(axe: aria-required-children). Wrap the 4 tabs in an inner
.activities-tabs[role=tablist] and leave the CTA as a sibling; add matching
flex CSS so the layout is unchanged. JS uses `.activities-nav .activity-tab`
(descendant), so tab behavior is unaffected. EN/MK/SI. Cache-bust bump.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New self-contained preferred-source.js (referenced site-wide via
seo_inject GA_LINES):
- small "Add us on Google" text link in the footer (.legal-links) on
every page, trilingual, using the domain deeplink;
- Google's official interactive pill (publisher.js) on the homepage,
News hub and Blog hub only, localized (en/mk/sl).
Lets readers mark MSOS as a preferred source (Top Stories / Discover /
News / AI surfaces). Cache-bust bump included.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Warmer, accurate trilingual cookie-banner text to lift voluntary
opt-in (EN/MK/SI), keeping Accept and Decline equally one-click
(GDPR-compliant, no dark patterns).
- grant() now grants analytics_storage only; advertising consent stays
denied, matching what the banner discloses (MSOS runs no ads).
- Cache-bust bump so the updated consent.js is fetched.
(Cookie-withdrawal link already present in footer via msosOpenConsent.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds the Cloudflare Web Analytics beacon to every page (injected in
GA_LINES alongside the GA tag). Cookieless and consent-free, so it
counts all visitors regardless of the cookie banner — complements GA4,
which only records consented sessions.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Clears the 3 non-critical Events issues in Search Console
("Missing field endDate/performer/offers") across all /projects/
recap pages. These are free, single-day events, so endDate mirrors
startDate, performer is MSOS (host org), and offers is a zero-price
Offer. Generated centrally in tools/seo_inject.py and re-injected.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploy to Production on Develop Push / deploy (push) Successful in 22sDetails
- Brand orange is now the official #FA7850 everywhere: folded the stray
oranges (#F2762E, #E8833A, #ff6b2c) into it and kept a single darker shade
(#E85D2A) for gradient depth + button hover. Added the official brand
--yellow (#FFE16E) token.
- Tablet header gap (769-1024px): the fixed header shrinks 80->60px there but
first-section paddings kept their 80px clearance; pull the first section up
by the 20px delta in that range only (phones untouched). Verified on
interior pages and the full-bleed homepage hero — gap now matches desktop,
no overlap.
- Re-stamped cache-bust (v=f95de694).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploy to Production on Develop Push / deploy (push) Successful in 20sDetails
- Add :root design tokens in _typography.css (was empty) — brand teal/orange,
ink/text greys, radius + type scale + section rhythm. Visually neutral;
new rules can reference var()s instead of scattered literals.
- a11y: visible :focus-visible ring on header nav + dropdown links (keyboard
users had none).
- Fix synthesized faux-bold: .route-report h1 800 -> 700 (Inter loads 400-700).
- Testimonials column: overflow-y scroll -> auto (no permanent scrollbar gutter).
- Lightbox image radius 6px -> 8px (matches the site rounding scale).
- Consistent card affordance: homepage .news-card now lifts on hover like the
news-hub / blog cards.
- Re-stamped cache-bust (v=1f64b22f).
Deferred (needs a brand decision): unifying the two primary oranges
(#FA7850 vs #F2762E) and the fuller literal->token migration.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploy to Production on Develop Push / deploy (push) Successful in 22sDetails
- Latest-news row and FAQ grid now go 3 -> 2 -> 1 columns (added a 1024px
tablet step); .news-card drops its brittle fixed 405.33px width and fills a
responsive grid cell. Fixes cramped 3-across cards on 769-1024px.
- Contrast: replace #98A2B3 text color (2.58:1 on white) with the palette
muted #667085 (~4.8:1) across 13 CSS files (31 text-color uses; borders/
backgrounds untouched, verified none on dark backgrounds).
- Re-stamped cache-bust (v=6770822f).
Note: the ~20px-looser header top-gap at 769-1024px is left as a minor,
lower-risk follow-up (would need a coordinated multi-page padding pass).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploy to Production on Develop Push / deploy (push) Successful in 21sDetails
From the QA audit — high-impact, low-risk fixes:
- SI homepage hero: replace leftover template boilerplate subtitle
("timski nabiralniki"...) and truncated badge with proper Slovene copy
matching EN/MK.
- Footer: .footer-container was a hard width:1280px and got clipped by
overflow-x:clip on 769-1279px screens; now width:100%; max-width:1280px.
- WCAG AA contrast: darken orange text (.article-publish-date, .mm-real-link)
and the Ask-MSOS footer (.msa-foot) which were ~2.6-3:1 on white.
- iOS Safari focus-zoom: bump form/search/assistant inputs to 16px
(.ms-field, .msa-input, .filterbar-search-field).
- Re-stamped cache-bust (v=9ff60d7a).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Deploy to Production on Develop Push / deploy (push) Successful in 20sDetails
Stops deploys being served stale from browser cache — the recurring "changes
do not show up until a hard refresh" problem.
- New tools/cache_bust.py stamps a global content hash onto every local
<link>/<script> CSS/JS ref AND the @import lines in css/main.css (so partial
edits bust too). External (https://) refs are untouched. Deterministic and
idempotent: same content -> same stamp, any asset edit -> new stamp sitewide.
- Wired as the final step of tools/build_site.py so every build/deploy stamps.
- Initial stamp applied across 259 pages + main.css (v=64a53dd6).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the interview 'Македонците се поврзуваат — интервју со лидерот на МСОС'
(youtube.com/watch?v=Vi6wzK9Zfwc) as the first item in the In the media list
on the EN/MK/SI press pages, with localized descriptions.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- New Press & media page in all three languages: press-enquiries contact,
a 6-way logo download grid (EN/SI/MK x colour/white), an "MSOS at a glance"
fact sheet (full legal name + preferred name), and a grouped coverage list
(media, universities & institutions, official records, reference, government)
with 29 verified third-party links, each described in EN/MK/SL.
- Styling in css/pages/_press.css (imported by main.css), on the site's tokens.
- Footer: added a "Press & media" link to the Organisation column on every page
(all languages, relative paths correct for each page depth).
- SEO/sitemap refreshed so the new pages carry NGO schema + hreflang.
MK/SI copy is AI-drafted and pending a native proofread.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>