PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 1m2s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 10s
PR Checks / Build Frontend (no push) (pull_request) Successful in 43s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 3m19s
Three review findings. --status-below-bg carried the raw --coral tuple (249,115,96) instead of the hue it belongs to (#A9481F → 169,72,31), so "below average" chips rendered a coral-pink wash behind terracotta text — the one solid/tint pair in the file whose hues disagreed. Alpha drops 0.15 → 0.12 to match --status-above-bg, so the two chips read as equal weight; left at 0.15 the darker terracotta tint takes the label to 4.45:1 on Warm White, under the 4.5 floor. At 0.12 it is 4.86:1 on cards and 4.67:1 on Warm White. Auditing the whole file for the same class of error turned up one more: --action-bg was also a --coral tint while --action is the darkened #BE3C27. It is unused today and the dark-theme value was already correct, but it is aligned so a future coral ghost button gets a matching label and ground. The five phase pairs also "mismatch" by the same test and are deliberately left alone: those pair a pastel ground (sage, sky, mustard, lavender) with a deeper text hue, which is exactly what the guideline's Chips/Tags show. The lowercase wordmark had only reached the visual chrome. Every user-visible occurrence now matches: page title and template, appleWebApp title, authors, OpenGraph and Twitter titles and siteName, the school page's siteName, the PWA manifest name and short_name, the footer copyright line, the nav's aria-label, the Web Share API strings, and the editorial paragraph. Comments in lib/*.ts and AdmissionsView still say "SchoolCompare"; they describe the codebase rather than the mark, so they are left to keep this diff to the reported problem. The comment explaining why the font classes belong on <html> still described --font-schibsted, which no longer exists. It now names --font-manrope and --font-inter, and records that the e2e typeface assertion is the only guard — this failure mode throws nothing and fails no unit test. Verified: tsc clean, 159/159 tests, build green, and the rendered title is now "School Admissions Guide | schoolcompare". Status and phase labels re-checked on their own composited tints over both light grounds — all clear AA.
97 lines
3.4 KiB
TypeScript
97 lines
3.4 KiB
TypeScript
/**
|
|
* Footer Component
|
|
*
|
|
* The footer is the guideline's "brand in action" band: a deep teal anchor
|
|
* that stays teal in both themes. Everything inside it therefore reads from
|
|
* the --on-sunken-* family rather than the page's --text-* tokens, which
|
|
* invert and would go dark against the teal in one theme or the other.
|
|
*/
|
|
|
|
import { LogoMark } from './Logo';
|
|
import styles from './Footer.module.css';
|
|
|
|
export function Footer() {
|
|
const currentYear = new Date().getFullYear();
|
|
|
|
return (
|
|
<footer className={styles.footer}>
|
|
<div className={styles.container}>
|
|
<div className={styles.content}>
|
|
<div className={styles.section}>
|
|
{/*
|
|
On the sunken band the mark inverts: the pin takes the band's
|
|
foreground and the leaf is knocked out in the band itself. The
|
|
header's defaults (brand pin, card leaf) would disappear here.
|
|
*/}
|
|
<h3 className={styles.lockup}>
|
|
<span className={styles.lockupMark}>
|
|
<LogoMark pin="var(--on-sunken)" leaf="var(--surface-sunken)" />
|
|
</span>
|
|
<span className={styles.wordmark}>
|
|
school<span className={styles.wordmarkAccent}>compare</span>
|
|
</span>
|
|
</h3>
|
|
<p className={styles.tagline}>Find the right school. For their future.</p>
|
|
<p className={styles.description}>
|
|
Compare primary and secondary schools across England.
|
|
</p>
|
|
<a
|
|
href="mailto:contact@schoolcompare.co.uk"
|
|
className={styles.link}
|
|
data-umami-event="contact_email_clicked"
|
|
>
|
|
contact@schoolcompare.co.uk
|
|
</a>
|
|
</div>
|
|
|
|
<div className={styles.section}>
|
|
<h4 className={styles.sectionTitle}>Product</h4>
|
|
<ul className={styles.links}>
|
|
<li><a href="/" className={styles.link}>Search schools</a></li>
|
|
<li><a href="/rankings" className={styles.link}>Rankings</a></li>
|
|
<li><a href="/compare" className={styles.link}>Compare shortlist</a></li>
|
|
<li><a href="/admissions" className={styles.link}>Admissions guide</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div className={styles.section}>
|
|
<h4 className={styles.sectionTitle}>Resources</h4>
|
|
<ul className={styles.links}>
|
|
<li>
|
|
<a
|
|
href="https://www.gov.uk/school-performance-tables"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className={styles.link}
|
|
data-umami-event="external_link_clicked"
|
|
data-umami-event-target="dfe"
|
|
>
|
|
School Performance Tables
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a
|
|
href="https://reports.ofsted.gov.uk/"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className={styles.link}
|
|
data-umami-event="external_link_clicked"
|
|
data-umami-event-target="ofsted"
|
|
>
|
|
Ofsted reports
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div className={styles.bottom}>
|
|
<p className={styles.copyright}>
|
|
© {currentYear} schoolcompare.co.uk
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
);
|
|
}
|