Files
school_compare/nextjs-app/components/AdmissionsView.module.css
T
TudorandClaude Opus 4.8 15da060e4a
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 1m1s
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 9s
feat(admissions): surface easy-to-miss deadlines as callout boxes
The selective-school registration and faith-school SIF warnings were
added as prose in the criteria steps, where they read as ordinary
sentences and were easy to skim past. Pulled them into structured
callout boxes with an amber "note" treatment (using the page's own
gold accent tokens), a warning glyph, and a bold lead-in — so the two
deadlines parents most often miss actually stand out.

- Added a `callouts` field to Step; render as a callout group between
  the body and the tool link (both primary and secondary timelines).
- Reverted the warning text back out of the step bodies so it isn't
  duplicated.

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 12:22:49 +01:00

631 lines
12 KiB
CSS

.shell {
max-width: 1120px;
margin: 0 auto;
padding: 0 1.25rem 4rem;
display: grid;
grid-template-columns: 160px minmax(0, 1fr);
gap: 2.5rem;
align-items: start;
}
.page {
max-width: 900px;
width: 100%;
justify-self: center;
}
/* ─── In-page nav rail ────────────────────────────────── */
.nav {
position: sticky;
top: 1.5rem;
padding-top: 3.75rem;
}
.navLabel {
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
margin-bottom: 0.85rem;
padding-left: 0.85rem;
}
.navList {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 0.1rem;
border-left: 2px solid var(--border-color, #e5dfd5);
}
.navLink {
display: flex;
align-items: center;
gap: 0.55rem;
padding: 0.45rem 0.85rem;
margin-left: -2px;
border-left: 2px solid transparent;
font-size: 0.88rem;
font-weight: 500;
color: var(--text-secondary, #5c564d);
text-decoration: none;
cursor: pointer;
transition: color 0.15s ease, border-color 0.15s ease;
}
.navLink:hover {
color: var(--text-primary, #1a1612);
}
.navLinkActive {
color: var(--accent-teal, #2d7d7d);
font-weight: 700;
border-left-color: var(--accent-teal, #2d7d7d);
}
.navDot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--border-color, #e5dfd5);
flex-shrink: 0;
transition: background 0.15s ease;
}
.navLinkActive .navDot {
background: var(--accent-teal, #2d7d7d);
}
/* ─── Hero ───────────────────────────────────────────── */
.hero {
text-align: center;
padding: 3rem 0 2rem;
}
.eyebrow {
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;
}
.eyebrowDot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent-teal, #2d7d7d);
}
.heroTitle {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 2.75rem;
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.015em;
color: var(--text-primary, #1a1612);
margin-bottom: 0.85rem;
}
.heroSub {
font-size: 1.05rem;
color: var(--text-secondary, #5c564d);
max-width: 640px;
margin: 0 auto;
line-height: 1.55;
}
/* ─── Countdown strip ────────────────────────────────── */
.countdownSection {
padding: 0 0 2.5rem;
border-bottom: 1px solid var(--border-color, #e5dfd5);
margin-bottom: 2.5rem;
}
.stripHeader {
margin-bottom: 0.85rem;
}
.stripLabel {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
}
.countdownRail {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.75rem;
}
.chip {
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;
}
.chip::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
border-radius: 12px 12px 0 0;
}
.chipDeadline::before { background: var(--accent-coral, #e07256); }
.chipOffer::before { background: var(--accent-teal, #2d7d7d); }
.chipUrgent {
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;
}
.chipDeadline .chipDays,
.chipUrgent .chipDays {
color: var(--accent-coral-dark, #c45a3f);
}
.chipOffer .chipDays {
color: var(--accent-teal, #2d7d7d);
}
.chipDaysUnit {
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;
}
/* ─── Track (Secondary / Primary) ────────────────────── */
.track {
margin-bottom: 3rem;
background: var(--bg-card, #fff);
border: 1px solid var(--border-color, #e5dfd5);
border-radius: 14px;
overflow: hidden;
}
.trackHeader {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 1.5rem;
padding: 1.75rem 2rem 1.5rem;
border-bottom: 1px solid var(--border-color, #e5dfd5);
flex-wrap: wrap;
}
.trackHeaderLeft {
flex: 1;
min-width: 0;
}
.trackKicker {
display: block;
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--accent-coral-dark, #b04a2e);
margin-bottom: 0.35rem;
}
.trackTitle {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin-bottom: 0.4rem;
line-height: 1.2;
}
.trackSub {
font-size: 0.9rem;
color: var(--text-secondary, #5c564d);
line-height: 1.5;
margin: 0;
}
.trackDates {
display: flex;
flex-direction: column;
gap: 0.5rem;
flex-shrink: 0;
text-align: right;
}
.trackDateRow {
display: flex;
flex-direction: column;
gap: 0.05rem;
}
.trackDateLabel {
font-size: 0.62rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
}
.trackDateVal {
font-size: 0.88rem;
font-weight: 600;
color: var(--text-primary, #1a1612);
}
/* ─── Timeline ───────────────────────────────────────── */
.timeline {
list-style: none;
padding: 1.5rem 2rem 1.75rem;
margin: 0;
display: flex;
flex-direction: column;
gap: 0;
}
.step {
display: flex;
gap: 1rem;
align-items: flex-start;
}
.stepDotCol {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
width: 20px;
padding-top: 0.15rem;
}
.stepDot {
width: 14px;
height: 14px;
border-radius: 50%;
background: var(--bg-card, #fff);
border: 2px solid var(--border-color, #e5dfd5);
flex-shrink: 0;
transition: border-color 0.2s ease, background 0.2s ease;
}
.stepDeadline .stepDot {
background: rgba(224, 114, 86, 0.15);
border-color: var(--accent-coral, #e07256);
}
.stepOffer .stepDot {
background: rgba(45, 125, 125, 0.15);
border-color: var(--accent-teal, #2d7d7d);
}
.stepLine {
width: 2px;
flex: 1;
min-height: 24px;
background: var(--border-color, #e5dfd5);
margin: 4px 0;
}
.stepContent {
padding-bottom: 1.5rem;
flex: 1;
min-width: 0;
}
.step:last-child .stepContent {
padding-bottom: 0;
}
.stepDate {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--text-muted, #6d685f);
margin-bottom: 0.2rem;
}
.stepDeadline .stepDate { color: var(--accent-coral-dark, #b04a2e); }
.stepOffer .stepDate { color: var(--accent-teal, #2d7d7d); }
.stepTitle {
font-size: 0.95rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin-bottom: 0.3rem;
line-height: 1.3;
}
.stepDeadline .stepTitle { color: var(--accent-coral-dark, #c45a3f); }
.stepOffer .stepTitle { color: var(--accent-teal, #2d7d7d); }
.stepBody {
font-size: 0.88rem;
color: var(--text-secondary, #5c564d);
line-height: 1.55;
margin: 0;
}
.stepTool {
display: inline-flex;
align-items: center;
gap: 0.35rem;
margin-top: 0.6rem;
font-size: 0.82rem;
font-weight: 600;
color: var(--accent-teal, #2d7d7d);
text-decoration: none;
transition: gap 0.2s ease, color 0.2s ease;
}
.stepTool:hover {
color: var(--accent-coral-dark, #c45a3f);
gap: 0.6rem;
}
.stepToolArrow {
font-size: 0.9em;
line-height: 1;
}
/* ─── Easy-to-miss callouts ──────────────────────────── */
.calloutGroup {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-top: 0.7rem;
}
.callout {
display: flex;
gap: 0.55rem;
padding: 0.6rem 0.75rem;
background: var(--accent-gold-bg, rgba(201, 162, 39, 0.12));
border: 1px solid rgba(201, 162, 39, 0.28);
border-left: 3px solid var(--accent-gold, #c9a227);
border-radius: 8px;
}
.calloutIcon {
flex-shrink: 0;
width: 1.05rem;
height: 1.05rem;
margin-top: 0.1rem;
border-radius: 50%;
background: var(--accent-gold, #c9a227);
color: #fff;
font-size: 0.72rem;
font-weight: 800;
line-height: 1.05rem;
text-align: center;
}
.calloutText {
min-width: 0;
}
.calloutTitle {
font-size: 0.82rem;
font-weight: 700;
color: var(--accent-gold-text, #7a6800);
line-height: 1.3;
margin-bottom: 0.15rem;
}
.calloutBody {
font-size: 0.82rem;
color: var(--text-secondary, #5c564d);
line-height: 1.5;
margin: 0;
}
/* ─── Tips ───────────────────────────────────────────── */
.tips {
margin-top: 1rem;
}
.tipsHeading {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.35rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin-bottom: 1.25rem;
}
.tipsGrid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
}
.tipCard {
background: var(--bg-secondary, #f3ede4);
border-radius: 12px;
padding: 1.25rem;
}
.tipNumber {
font-family: var(--font-playfair), 'Playfair Display', serif;
font-size: 1.75rem;
font-weight: 700;
color: #7d766b; /* 3.8:1 on cream — AA large-text for this 28px numeral */
line-height: 1;
margin-bottom: 0.6rem;
}
.tipHeading {
font-size: 0.95rem;
font-weight: 700;
color: var(--text-primary, #1a1612);
margin-bottom: 0.4rem;
line-height: 1.3;
}
.tipBody {
font-size: 0.875rem;
color: var(--text-secondary, #5c564d);
line-height: 1.55;
margin: 0;
}
/* ─── Responsive ─────────────────────────────────────── */
@media (max-width: 960px) {
.shell {
grid-template-columns: 1fr;
gap: 0;
padding-top: 0;
}
.nav {
position: sticky;
top: 0;
padding-top: 0;
background: var(--bg-primary, #faf8f3);
border-bottom: 1px solid var(--border-color, #e5dfd5);
margin: 0 -1.25rem 1rem;
padding: 0.6rem 1.25rem;
z-index: 10;
}
.navLabel {
display: none;
}
.navList {
flex-direction: row;
gap: 0.35rem;
border-left: none;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.navList::-webkit-scrollbar {
display: none;
}
.navLink {
padding: 0.4rem 0.9rem;
margin-left: 0;
border-left: none;
border-radius: 999px;
background: transparent;
white-space: nowrap;
}
.navLinkActive {
background: var(--text-primary, #1a1612);
color: #fff;
border-left: none;
}
.navLinkActive .navDot {
background: #fff;
}
}
@media (max-width: 768px) {
.heroTitle {
font-size: 2rem;
}
.countdownRail {
grid-template-columns: repeat(2, 1fr);
}
.trackHeader {
flex-direction: column;
padding: 1.25rem 1.25rem 1rem;
}
.trackDates {
text-align: left;
flex-direction: row;
gap: 1.5rem;
}
.timeline {
padding: 1.25rem;
}
.tipsGrid {
grid-template-columns: 1fr;
}
}