Files
school_compare/nextjs-app/components/HomeView.module.css
T
TudorandClaude Opus 4.8 22e9eb2d48
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 42s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 1m6s
fix(home): make Att8 bar match its numbers and separate safeguarding
Two internal-consistency fixes on the "What you'll see" mock:

- The Attainment 8 bar had drifted from the numbers beside it (fill 68%
  / line 57% vs a 54.8 score and 45.9 national avg). Restored the mock's
  original 1:1 value-to-percent mapping: fill 54.8%, national line 45.9%.
- The report card grouped "Safeguarding: Met" in the same five-point
  list as the graded areas, but safeguarding is a separate binary
  met/not-met judgement under the real framework. Moved it below the
  list behind a divider, with an outlined chip and a "separate check"
  label so it no longer reads as a graded area.

Verified with tsc --noEmit and next build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-21 10:01:10 +01:00

1412 lines
27 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;
}
/* Copy variants: full paragraph ≥641px, compact merged line on phones. */
.heroDescriptionCompact {
display: none;
}
@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 swap
the long descriptive paragraph for one compact line that carries coverage
("24,000+ schools") and freshness ("updated for 2026/27") — a first-time
visitor otherwise sees only a poetic h1 and a bare box, with no reason to
trust the data (audit P1.7, feeds the 46% home exit rate). */
@media (max-width: 640px) {
.heroSection {
padding-top: 0.75rem;
margin-bottom: 1rem;
}
.heroEyebrow,
.heroDescriptionFull {
display: none;
}
.heroDescriptionCompact {
display: block;
}
.heroDescription {
font-size: 0.85rem;
line-height: 1.4;
max-width: 320px;
margin-bottom: 0.25rem;
}
.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;
flex-shrink: 0;
}
/* The sort <select> sizes to its widest option ("Highest Reading, Writing
& Maths %"), which overflows a phone viewport — beside the view toggle it
ran off the right edge. Let it flex into the remaining space and shrink;
the selected label truncates instead of pushing past the screen. */
.sortSelect {
flex: 1;
min-width: 0;
}
.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;
}
}
.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;
align-items: baseline;
gap: 0.2rem;
font-size: 0.44rem;
color: var(--text-muted, #6d685f);
text-transform: uppercase;
letter-spacing: 0.01em;
white-space: nowrap;
}
.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);
}
.ofstedFramework {
align-self: flex-start;
padding: 0.15rem 0.5rem;
border-radius: 4px;
background: rgba(90, 58, 110, 0.12);
color: #5a3a6e;
font-size: 0.5rem;
font-weight: 700;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.rcList {
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.rcRow {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.5rem;
}
.rcArea {
font-size: 0.62rem;
color: var(--text-secondary, #4a453d);
}
.rcChip {
padding: 0.1rem 0.4rem;
border-radius: 3px;
font-size: 0.52rem;
font-weight: 700;
letter-spacing: 0.03em;
white-space: nowrap;
flex-shrink: 0;
}
.rcChipGood {
background: rgba(45, 125, 125, 0.12);
color: var(--accent-teal, #2d7d7d);
}
.rcChipNeutral {
background: var(--accent-gold-bg, rgba(180, 150, 40, 0.12));
color: var(--accent-gold-text, #7a6800);
}
/* Safeguarding is a separate binary met/not-met judgement, not a graded area,
so it sits below the five-point list behind a divider with its own chip. */
.rcSafeguarding {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.5rem;
margin-top: 0.05rem;
padding-top: 0.35rem;
border-top: 1px dashed var(--border-color, #e5dfd5);
}
.rcSep {
color: var(--text-muted, #8a847a);
font-style: italic;
}
.rcChipMet {
background: transparent;
color: var(--accent-teal, #2d7d7d);
border: 1px solid rgba(45, 125, 125, 0.4);
}
.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;
}
}