Files
school_compare/nextjs-app/components/HomeView.module.css
T
TudorandClaude Fable 5 a1fa4fe874 fix(a11y): WCAG AA colour contrast across every route (P0.1)
Live axe-core inventory found 13 failing fg/bg pairs (3.12:1 coral text/
fills, 4.0-4.5 teal near-misses, 2.7 gold badge, 1.9 chart-colour text).
All replacement values validated ≥4.5:1 against every background they
sit on:

- --accent-coral-dark deepened to #b04a2e and used for coral text roles
  (nav active, back/map links, kickers, chips) and coral fills under
  white text (btn-primary, phase tabs, section-nav compare, chart chips);
  new --accent-coral-darker #9c3f26 for their hovers. Decorative coral
  (pins, bars, borders, focus ring) keeps the brand #e07256.
- --accent-teal darkened to #296f6f (rankings values, metric rows,
  ofsted grades, eyebrows all pass).
- Ofsted green #3c8c3c→#2f7a2f; off-token gold #b8920e→--accent-gold-text.
- Gender-split pink text #b45778→#a04a68; admissions tip numerals to a
  3.8:1 muted brown (28px display text).
- New CHART_TEXT_COLORS: AA-dark counterparts of the Chart.js series
  palette for compare-card values (swatch dots keep true series colour).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:33:51 +01:00

1396 lines
26 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.homeView {
width: 100%;
}
.heroSection {
text-align: center;
margin-bottom: 1.5rem;
padding-top: 2.5rem;
}
.heroEyebrow {
display: inline-flex;
align-items: center;
gap: 0.4rem;
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--accent-teal, #2d7d7d);
background: rgba(45, 125, 125, 0.1);
padding: 0.3rem 0.7rem;
border-radius: 999px;
margin-bottom: 1rem;
}
.heroEyebrowDot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent-teal, #2d7d7d);
}
.heroTitle {
font-size: 3rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin-bottom: 0.85rem;
line-height: 1.08;
letter-spacing: -0.015em;
font-family: var(--font-playfair), 'Playfair Display', serif;
max-width: 840px;
margin-left: auto;
margin-right: auto;
}
.heroEmph {
color: var(--accent-coral-dark, #c45a3f);
font-style: italic;
}
.heroDescription {
font-size: 1.05rem;
color: var(--text-secondary, #5c564d);
margin: 0 auto 0.5rem;
max-width: 680px;
line-height: 1.55;
}
.heroDescription strong {
color: var(--text-primary, #1a1612);
font-weight: 700;
}
@media (max-width: 768px) {
.heroSection {
padding-top: 1.5rem;
}
.heroTitle {
font-size: 2rem;
}
.heroDescription {
font-size: 0.95rem;
}
}
/* Above the fold on phones, every line costs. Drop the eyebrow tag and the
long descriptive paragraph — the h1 already names the product, and the
search input is the primary action users came to perform. */
@media (max-width: 640px) {
.heroSection {
padding-top: 0.75rem;
margin-bottom: 1rem;
}
.heroEyebrow,
.heroDescription {
display: none;
}
.heroTitle {
font-size: 1.65rem;
}
}
/* View Toggle */
.viewToggle {
display: flex;
gap: 0.2rem;
background: var(--bg-secondary, #f3ede4);
padding: 0.2rem;
border-radius: 6px;
}
.viewToggleBtn {
display: flex;
align-items: center;
gap: 0.25rem;
padding: 0.375rem 0.625rem;
font-size: 0.8125rem;
font-weight: 500;
background: transparent;
border: none;
border-radius: 5px;
cursor: pointer;
color: var(--text-secondary, #5c564d);
transition: all 0.2s ease;
}
.viewToggleBtn:hover {
color: var(--text-primary, #1a1612);
}
.viewToggleBtn.active {
background: var(--bg-card, white);
color: var(--accent-coral-dark, #b04a2e);
box-shadow: 0 2px 4px rgba(26, 22, 18, 0.08);
}
.viewToggleBtn svg {
flex-shrink: 0;
}
.results {
margin-top: 1rem;
}
.mapViewResults {
margin-top: 0;
}
/* Map View Layout */
.mapViewContainer {
display: grid;
grid-template-columns: 1fr 340px;
gap: 1rem;
height: calc(100dvh - 280px);
min-height: 520px;
max-height: 800px;
}
.mapContainer {
border-radius: 10px;
overflow: hidden;
border: 1px solid var(--border-color, #e5dfd5);
height: 100%;
}
.compactList {
display: flex;
flex-direction: column;
gap: 0.5rem;
overflow-y: auto;
height: 100%;
padding-right: 0.375rem;
}
.compactList::-webkit-scrollbar {
width: 6px;
}
.compactList::-webkit-scrollbar-track {
background: var(--bg-secondary, #f3ede4);
border-radius: 3px;
}
.compactList::-webkit-scrollbar-thumb {
background: var(--border-color, #e5dfd5);
border-radius: 3px;
}
.compactList::-webkit-scrollbar-thumb:hover {
background: var(--text-muted, #8a847a);
}
/* Compact School Item */
.compactItem {
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.75rem;
padding: 0.625rem 0.75rem;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 8px;
transition: all 0.2s ease;
}
.compactItem:hover {
border-color: var(--accent-coral, #e07256);
box-shadow: 0 2px 6px rgba(26, 22, 18, 0.05);
}
.compactItemContent {
flex: 1;
min-width: 0;
}
.compactItemHeader {
display: flex;
align-items: center;
gap: 0.375rem;
margin-bottom: 0.125rem;
}
.compactItemName {
font-weight: 600;
font-size: 0.8125rem;
color: var(--text-primary, #1a1612);
text-decoration: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.compactItemName:hover {
color: var(--accent-coral-dark, #b04a2e);
}
.distanceBadge {
flex-shrink: 0;
padding: 0.0625rem 0.375rem;
font-size: 0.6875rem;
font-weight: 600;
background: var(--accent-teal, #2d7d7d);
color: white;
border-radius: 3px;
}
.compactItemMeta {
display: flex;
gap: 0.375rem;
font-size: 0.6875rem;
color: var(--text-secondary, #5c564d);
margin-bottom: 0.25rem;
}
.compactItemMeta span:not(:last-child)::after {
content: '·';
margin-left: 0.375rem;
color: var(--text-muted, #8a847a);
}
.compactItemStats {
display: flex;
gap: 0.75rem;
font-size: 0.6875rem;
color: var(--text-secondary, #5c564d);
}
.compactStat strong {
color: var(--text-primary, #1a1612);
}
.compactItemActions {
display: flex;
flex-direction: column;
gap: 0.25rem;
flex-shrink: 0;
}
.sectionHeader {
margin-bottom: 1rem;
}
.sectionHeader h2 {
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 0.5rem;
color: var(--text-primary, #1a1612);
font-family: var(--font-playfair), 'Playfair Display', serif;
}
/* Decorative coral bar under section headings */
.sectionHeader h2::after {
content: '';
display: block;
width: 50px;
height: 2px;
background: var(--accent-coral, #e07256);
border-radius: 1px;
margin-top: 0.5rem;
}
.sectionDescription {
font-size: 0.9375rem;
color: var(--text-secondary, #5c564d);
margin: 0;
line-height: 1.5;
}
.schoolList {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 1.25rem;
}
/* Staggered fade-in for rows */
.schoolList > *:nth-child(1) { animation-delay: 0ms; }
.schoolList > *:nth-child(2) { animation-delay: 30ms; }
.schoolList > *:nth-child(3) { animation-delay: 60ms; }
.schoolList > *:nth-child(4) { animation-delay: 90ms; }
.schoolList > *:nth-child(5) { animation-delay: 120ms; }
.schoolList > *:nth-child(6) { animation-delay: 150ms; }
.schoolList > *:nth-child(7) { animation-delay: 180ms; }
.schoolList > *:nth-child(8) { animation-delay: 210ms; }
.schoolList > *:nth-child(9) { animation-delay: 240ms; }
.schoolList > *:nth-child(n+10) { animation-delay: 270ms; }
.emptyState {
text-align: center;
padding: 2.5rem 1.5rem;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 10px;
}
.emptyStateTitle {
font-size: 1.25rem;
font-weight: 600;
color: var(--text-primary, #1a1612);
margin-bottom: 0.375rem;
font-family: var(--font-playfair), 'Playfair Display', serif;
}
.emptyStateDescription {
font-size: 0.9375rem;
color: var(--text-secondary, #5c564d);
max-width: 380px;
margin: 0 auto;
}
@media (max-width: 768px) {
.resultsHeader {
flex-direction: column;
align-items: flex-start;
}
.resultsHeaderActions {
width: 100%;
justify-content: space-between;
}
.viewToggle {
justify-content: center;
}
.mapViewContainer {
grid-template-columns: 1fr;
grid-template-rows: 260px auto;
height: auto;
gap: 0.75rem;
}
.mapContainer {
height: 260px;
}
.compactList {
height: auto;
max-height: 350px;
padding-right: 0;
}
.compactItem {
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
}
.compactItemActions {
flex-direction: row;
}
.compactItemActions > * {
flex: 1;
}
.emptyState {
padding: 2rem 1.25rem;
}
}
/* Highlighted List Item */
.highlightedItem .compactItem {
border-color: var(--accent-teal, #2d7d7d);
box-shadow: 0 0 0 1px var(--accent-teal, #2d7d7d);
background: var(--bg-secondary, #f3ede4);
}
/* Mobile Bottom Sheet */
.bottomSheetWrapper {
display: none;
}
@media (max-width: 768px) {
.bottomSheetWrapper {
display: block;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
z-index: 1000;
padding: 1rem;
pointer-events: none;
}
.bottomSheet {
position: relative;
background: var(--bg-card, white);
border-radius: 12px;
box-shadow: 0 -4px 24px rgba(26, 22, 18, 0.15);
pointer-events: auto;
animation: slideUpSheet 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.bottomSheet .compactItem {
border: none;
box-shadow: none;
background: transparent;
padding: 1rem;
}
.bottomSheet .compactItem:hover {
box-shadow: none;
}
.closeSheetBtn {
position: absolute;
top: -12px;
right: -12px;
width: 30px;
height: 30px;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
color: var(--text-secondary, #5c564d);
cursor: pointer;
box-shadow: 0 2px 8px rgba(26, 22, 18, 0.1);
z-index: 10;
}
@keyframes slideUpSheet {
from {
transform: translateY(120%);
}
to {
transform: translateY(0);
}
}
/* When map view on mobile, expand map and hide list */
.mapViewContainer {
grid-template-columns: 1fr;
grid-template-rows: 1fr;
height: calc(100dvh - 280px);
min-height: 400px;
}
.mapContainer {
height: 100%;
}
.compactList {
display: none;
}
}
.discoverySection {
padding: 0.5rem 0 0.5rem;
text-align: center;
}
.nearMeRow {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
margin-bottom: 1.25rem;
}
.nearMeBtn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.625rem 1.375rem;
background: var(--accent-teal, #2d7d7d);
color: #fff;
border: none;
border-radius: 999px;
font-size: 0.9375rem;
font-weight: 600;
cursor: pointer;
transition: background 0.2s ease, transform 0.15s ease;
font-family: inherit;
}
.nearMeBtn:hover:not(:disabled) {
background: #235f5f;
transform: translateY(-1px);
}
.nearMeBtn:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.nearMeBtnSpinner {
display: inline-block;
width: 14px;
height: 14px;
border: 2px solid rgba(255, 255, 255, 0.35);
border-top-color: #fff;
border-radius: 50%;
animation: nearMeSpin 0.7s linear infinite;
flex-shrink: 0;
}
@keyframes nearMeSpin {
to { transform: rotate(360deg); }
}
.geoError {
font-size: 0.8125rem;
color: var(--accent-coral-dark, #b04a2e);
margin: 0;
max-width: 340px;
text-align: center;
}
.quickSearches {
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
flex-wrap: wrap;
}
.quickSearchLabel {
font-size: 0.875rem;
color: var(--text-muted);
}
.quickSearchChip {
padding: 0.375rem 0.875rem;
background: var(--bg-card);
border: 1px solid var(--border-color, #e0ddd8);
border-radius: 999px;
font-size: 0.875rem;
color: var(--text-secondary);
text-decoration: none;
transition: all var(--transition);
}
.quickSearchChip:hover {
background: var(--accent-coral-dark);
color: white;
border-color: var(--accent-coral-dark);
}
.exploringRow {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.6rem;
margin-top: 1rem;
}
.exploringLabel {
font-size: 0.72rem;
color: var(--text-muted, #6d685f);
font-weight: 500;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.exploringChips {
display: flex;
gap: 0.5rem;
justify-content: center;
flex-wrap: wrap;
}
.exploringChip {
display: inline-flex;
align-items: center;
gap: 0.4rem;
padding: 0.5rem 0.95rem;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 999px;
font-size: 0.82rem;
font-weight: 500;
color: var(--text-secondary, #5c564d);
text-decoration: none;
transition: all 0.15s ease;
}
.exploringChip:hover {
border-color: var(--accent-coral, #e07256);
color: var(--accent-coral-dark, #c45a3f);
transform: translateY(-1px);
}
.chipDot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: currentColor;
opacity: 0.55;
flex-shrink: 0;
}
/* ── How it works section ─────────────────────────────── */
.howItWorks {
padding: 3rem 0 1rem;
}
.hiwHeader {
display: flex;
align-items: baseline;
justify-content: space-between;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1.5rem;
}
.hiwHeading {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.75rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin: 0;
}
.hiwSub {
font-size: 0.875rem;
color: var(--text-muted, #6d685f);
}
.hiwGrid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
}
.hiwCard {
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 14px;
padding: 1.25rem;
box-shadow: 0 2px 8px rgba(26, 22, 18, 0.06);
display: flex;
flex-direction: column;
gap: 0.9rem;
}
.hiwVisual {
background: var(--bg-secondary, #f3ede4);
border-radius: 10px;
padding: 0.9rem;
min-height: 180px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 0.75rem;
}
.hiwPhaseBlock {
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.hiwPhaseLabel {
font-size: 0.58rem;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
}
.hiwPhaseLabel strong {
color: var(--accent-teal, #2d7d7d);
font-weight: 700;
}
.hiwCardBody {
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.hiwStep {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--accent-coral-dark, #b04a2e);
}
.hiwTitle {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.1rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
line-height: 1.25;
}
.hiwDesc {
font-size: 0.86rem;
color: var(--text-secondary, #5c564d);
line-height: 1.45;
margin: 0;
}
/* Mini cascade (performance card) */
.miniCascade {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0.4rem;
}
.miniCascadeCol {
display: flex;
flex-direction: column;
gap: 0.15rem;
min-width: 0;
}
.miniSubj {
font-size: 0.5rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
margin-bottom: 0.1rem;
}
.miniRowHead {
display: flex;
justify-content: space-between;
font-size: 0.48rem;
color: var(--text-muted, #6d685f);
text-transform: uppercase;
letter-spacing: 0.04em;
}
.miniRowHead strong {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 0.62rem;
color: var(--text-primary, #1a1612);
font-weight: 700;
letter-spacing: 0;
text-transform: none;
}
.miniTrack {
height: 5px;
border-radius: 2px;
background: rgba(45, 125, 125, 0.08);
position: relative;
overflow: visible;
}
.miniBarExp {
height: 100%;
border-radius: 2px;
background: var(--accent-teal-light, #3a9e9e);
}
.miniBarExc {
height: 100%;
border-radius: 2px;
background: var(--accent-teal, #2d7d7d);
}
.miniNatPill {
position: absolute;
top: -9px;
transform: translateX(-50%);
background: var(--accent-coral, #e07256);
color: #fff;
font-size: 0.4rem;
font-weight: 700;
padding: 0.05rem 0.2rem;
border-radius: 3px;
z-index: 2;
white-space: nowrap;
pointer-events: none;
}
/* Attainment 8 mini bar */
.att8Row {
display: grid;
grid-template-columns: 1fr auto;
gap: 0.6rem;
align-items: center;
}
.att8BarWrap {
display: flex;
flex-direction: column;
gap: 0.2rem;
}
.att8BarHead {
display: flex;
justify-content: space-between;
font-size: 0.5rem;
color: var(--text-muted, #6d685f);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.att8Track {
height: 7px;
background: rgba(45, 125, 125, 0.08);
border-radius: 3px;
position: relative;
}
.att8Fill {
height: 100%;
background: var(--accent-teal, #2d7d7d);
border-radius: 3px;
}
.att8NatLine {
position: absolute;
top: -2px;
bottom: -2px;
width: 1.5px;
background: rgba(224, 114, 86, 0.6);
z-index: 2;
}
.att8Score {
text-align: right;
}
.att8Value {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--accent-teal, #2d7d7d);
line-height: 1;
}
.att8Delta {
font-size: 0.55rem;
color: var(--accent-teal, #2d7d7d);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
margin-top: 0.15rem;
}
/* Ofsted preview */
.ofstedPreview {
display: flex;
flex-direction: column;
gap: 0.5rem;
width: 100%;
padding: 0.4rem 0.2rem;
}
.ofstedHead {
display: flex;
align-items: center;
gap: 0.5rem;
padding-bottom: 0.4rem;
border-bottom: 1.5px solid var(--border-color, #e5dfd5);
}
.ofstedBullet {
display: block;
width: 3px;
height: 1em;
background: var(--accent-coral, #e07256);
border-radius: 2px;
flex-shrink: 0;
}
.ofstedTitle {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 0.85rem;
font-weight: 600;
color: var(--text-primary, #1a1612);
}
.ofstedBadge {
align-self: flex-start;
padding: 0.2rem 0.55rem;
border-radius: 4px;
background: rgba(45, 125, 125, 0.12);
color: var(--accent-teal, #2d7d7d);
font-size: 0.55rem;
font-weight: 700;
letter-spacing: 0.05em;
}
.ofstedVerdict {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.05rem;
font-weight: 700;
line-height: 1.2;
color: var(--text-primary, #1a1612);
}
.ofstedVerdict em {
color: var(--accent-teal, #2d7d7d);
font-style: normal;
}
.ofstedMeta {
font-size: 0.6rem;
color: var(--text-muted, #6d685f);
}
/* Compare preview */
.comparePreview {
width: 100%;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 8px;
overflow: hidden;
font-size: 0.6rem;
}
.compareHead {
display: grid;
grid-template-columns: 1fr repeat(2, 1fr);
background: rgba(45, 125, 125, 0.1);
padding: 0.35rem 0.5rem;
gap: 0.35rem;
}
.compareHeadCell {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 0.62rem;
font-weight: 700;
color: var(--accent-teal, #2d7d7d);
line-height: 1.2;
}
.compareHeadLabel {
font-family: inherit;
font-size: 0.48rem;
color: var(--text-muted, #6d685f);
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.compareRow {
display: grid;
grid-template-columns: 1fr repeat(2, 1fr);
padding: 0.3rem 0.5rem;
gap: 0.35rem;
border-top: 1px solid var(--border-color, #e5dfd5);
align-items: baseline;
}
.compareRowLabel {
font-size: 0.55rem;
color: var(--text-muted, #6d685f);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.compareRowVal {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 0.72rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
}
.compareRowValHi {
color: var(--accent-teal, #2d7d7d);
}
.compareFoot {
font-size: 0.52rem;
color: var(--text-muted, #6d685f);
padding: 0.35rem 0.5rem;
background: var(--bg-secondary, #f3ede4);
text-transform: uppercase;
letter-spacing: 0.06em;
text-align: center;
border-top: 1px solid var(--border-color, #e5dfd5);
}
@media (max-width: 768px) {
.hiwGrid {
grid-template-columns: 1fr;
}
.hiwHeader {
flex-direction: column;
align-items: flex-start;
}
.hiwHeading {
font-size: 1.4rem;
}
}
/* On phones, hide the scaled-down preview visuals (text becomes illegible
at this size) and let the explanatory text carry each card. */
@media (max-width: 640px) {
.hiwVisual {
display: none;
}
.hiwCard {
padding: 1rem 1.1rem;
gap: 0.45rem;
}
.hiwTitle {
font-size: 1.05rem;
}
.hiwDesc {
font-size: 0.9rem;
}
}
/* ── Editorial section ───────────────────────────────── */
.editorial {
padding: 2rem 0 3rem;
}
.editorialGrid {
display: grid;
grid-template-columns: 1.4fr 1fr;
gap: 2rem;
padding: 1.75rem;
background: var(--bg-card, white);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 14px;
}
.editorialText {
display: flex;
flex-direction: column;
gap: 0.65rem;
}
.editorialKicker {
font-size: 0.68rem;
color: var(--accent-coral-dark, #b04a2e);
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.editorialHeading {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.35rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin: 0;
line-height: 1.25;
}
.editorialText p {
font-size: 0.92rem;
color: var(--text-secondary, #5c564d);
line-height: 1.6;
margin: 0;
}
.factbox {
background: var(--bg-secondary, #f3ede4);
border-radius: 10px;
padding: 1.25rem;
display: flex;
flex-direction: column;
gap: 0;
}
.factboxHeading {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin: 0 0 0.85rem;
}
.factRow {
display: flex;
justify-content: space-between;
align-items: baseline;
padding: 0.5rem 0;
border-bottom: 1px solid var(--border-color, #e5dfd5);
font-size: 0.85rem;
gap: 0.5rem;
}
.factRow:last-child {
border-bottom: none;
}
.factKey {
color: var(--text-muted, #6d685f);
}
.factVal {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-weight: 700;
color: var(--text-primary, #1a1612);
text-align: right;
}
@media (max-width: 768px) {
.editorialGrid {
grid-template-columns: 1fr;
padding: 1.25rem;
gap: 1.25rem;
}
}
.resultsHeader {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 0.75rem;
padding: 0 0 1rem;
}
.resultsHeaderActions {
display: flex;
align-items: center;
gap: 0.75rem;
flex-shrink: 0;
}
.sortSelect {
padding: 0.375rem 0.75rem;
border: 1px solid var(--border-color, #e0ddd8);
border-radius: var(--radius-md);
background: var(--bg-card);
color: var(--text-secondary);
font-size: 0.875rem;
cursor: pointer;
}
.activeFilters {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1rem;
}
.filterChip {
display: inline-flex;
align-items: center;
gap: 0.375rem;
padding: 0.25rem 0.625rem;
background: var(--bg-secondary);
border: 1px solid var(--border-color, #e0ddd8);
border-radius: 999px;
font-size: 0.8rem;
color: var(--text-secondary);
}
.chipRemove {
color: var(--text-muted);
text-decoration: none;
font-size: 0.9rem;
line-height: 1;
transition: color var(--transition, 0.2s ease);
}
.chipRemove:hover {
color: var(--text-primary);
}
.loadMoreSection {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
padding: 1.5rem 0;
}
.loadMoreCount {
font-size: 0.875rem;
color: var(--text-muted, #8a847a);
margin: 0;
}
.loadMoreButton {
min-width: 160px;
}
/* =========================================================
Admissions Countdown Strip
========================================================= */
.admissionsStrip {
padding: 1.5rem 0 2rem;
border-top: 1px solid var(--border-color, #e5dfd5);
}
.stripHeader {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 1rem;
flex-wrap: wrap;
gap: 0.5rem;
}
.stripLabel {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
}
.stripCta {
font-size: 0.82rem;
color: var(--accent-teal, #2d7d7d);
font-weight: 600;
text-decoration: none;
}
.stripCta:hover {
text-decoration: underline;
}
.countdownRail {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.75rem;
}
.countdownChip {
background: var(--bg-card, #fff);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 12px;
padding: 1rem 1.1rem 0.9rem;
box-shadow: 0 2px 8px rgba(26, 22, 18, 0.06);
display: flex;
flex-direction: column;
gap: 0.2rem;
position: relative;
overflow: hidden;
}
.countdownChip::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
border-radius: 12px 12px 0 0;
}
.countdownChipDeadline::before {
background: var(--accent-coral, #e07256);
}
.countdownChipOffer::before {
background: var(--accent-teal, #2d7d7d);
}
.countdownChipUrgent {
border-color: rgba(224, 114, 86, 0.4);
background: rgba(224, 114, 86, 0.04);
}
.chipTrack {
display: flex;
align-items: center;
gap: 0.3rem;
font-size: 0.6rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
margin-bottom: 0.15rem;
}
.chipTrackDeadline {
color: var(--accent-coral-dark, #b04a2e);
}
.chipTrackOffer {
color: var(--accent-teal, #2d7d7d);
}
.chipTrackDot {
width: 5px;
height: 5px;
border-radius: 50%;
background: currentColor;
flex-shrink: 0;
}
.chipDays {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 2.6rem;
font-weight: 700;
line-height: 1;
letter-spacing: -0.02em;
}
.countdownChipDeadline .chipDays,
.countdownChipUrgent .chipDays {
color: var(--accent-coral-dark, #c45a3f);
}
.countdownChipOffer .chipDays {
color: var(--accent-teal, #2d7d7d);
}
.chipDaysUnit {
font-family: 'DM Sans', sans-serif;
font-size: 0.78rem;
font-weight: 500;
color: var(--text-muted, #6d685f);
margin-left: 0.2rem;
vertical-align: bottom;
line-height: 2;
}
.chipMilestone {
font-size: 0.85rem;
font-weight: 600;
color: var(--text-primary, #1a1612);
line-height: 1.25;
margin-top: 0.1rem;
}
.chipDate {
font-size: 0.75rem;
color: var(--text-muted, #6d685f);
margin-top: 0.05rem;
}
@media (max-width: 768px) {
.countdownRail {
grid-template-columns: repeat(2, 1fr);
}
}
/* On phones the 2×2 grid cramped each chip so badly the "Secondary ·
Deadline" track label dropped to 9.6px. Switch to a horizontal
snap-scroller — each card is full-width-ish and stays readable,
and the rightmost card peeks past the edge to signal there's more. */
@media (max-width: 640px) {
.countdownRail {
display: flex;
grid-template-columns: none;
overflow-x: auto;
scroll-snap-type: x mandatory;
scrollbar-width: none;
gap: 0.75rem;
padding-right: 1.25rem;
margin-inline: -1rem;
padding-inline: 1rem;
-webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
}
.countdownRail::-webkit-scrollbar {
display: none;
}
.countdownChip {
flex: 0 0 auto;
width: 78%;
min-width: 220px;
scroll-snap-align: start;
}
.chipTrack {
font-size: 0.7rem;
}
}