/* * The footer band. * * --surface-sunken is deep teal in BOTH themes on purpose, so nothing in here * may read a --text-* or --bg-* token: those invert with the theme and would * put dark ink on the teal (or teal on teal) in one of the two. Every * foreground below comes from the --on-sunken-* family, which is pinned to the * band rather than to the page. */ .footer { background: var(--surface-sunken); color: var(--on-sunken); margin-top: auto; } .container { max-width: 1400px; margin: 0 auto; padding: 3rem 1.5rem 2rem; } .content { display: grid; grid-template-columns: 1.6fr 1fr 1fr; gap: 2rem; margin-bottom: 3rem; } .section { display: flex; flex-direction: column; align-items: flex-start; gap: 1rem; } /* ─── Brand lockup ──────────────────────────────────────────────── */ .lockup { display: flex; align-items: center; gap: 0.625rem; margin: 0; font-weight: 700; } .lockupMark { display: inline-flex; flex: 0 0 auto; width: 34px; height: 34px; } .lockupMark svg { width: 100%; height: 100%; } /* Same wordmark as the header, inverted: "school" in the band's foreground, "compare" in sage — the one accent that reads cleanly on deep teal. */ .wordmark { font-family: var(--font-display); font-size: var(--step-2); font-weight: 700; line-height: 1; letter-spacing: -0.035em; color: var(--on-sunken); } .wordmarkAccent { color: var(--sage); } /* Key messaging, so this is the one place in the footer that takes Manrope for a full sentence. */ .tagline { margin: 0; font-family: var(--font-display); font-size: var(--step-1); font-weight: 600; line-height: 1.35; letter-spacing: -0.015em; color: var(--on-sunken); } .description { margin: -0.5rem 0 0; font-size: var(--step--1); line-height: 1.6; color: var(--on-sunken-muted); max-width: 34ch; } .sectionTitle { margin: 0; font-family: var(--font-display); font-size: var(--step--1); font-weight: 700; line-height: 1; color: var(--sage); text-transform: uppercase; letter-spacing: 0.1em; } .links { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; } .link { font-family: var(--font-ui); font-size: var(--step--1); color: var(--on-sunken-muted); text-decoration: none; border-radius: var(--radius-sm); transition: color var(--transition); } .link:hover { color: var(--on-sunken); } .linkDisabled { font-size: var(--step--1); color: var(--on-sunken-faint); cursor: not-allowed; } /* ─── Bottom rule ───────────────────────────────────────────────── */ /* * The divider is drawn as a pseudo-element at low opacity rather than as an * rgba() border: there is no channel token for --on-sunken, and every literal * that would work here (rgba(255,255,255,…)) is exactly the kind of hardcoded * colour the token layer exists to remove. */ .bottom { position: relative; padding-top: 2rem; display: flex; flex-direction: column; gap: 0.5rem; } .bottom::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: var(--on-sunken); opacity: 0.16; } .copyright, .disclaimer { margin: 0; font-size: var(--step--1); color: var(--on-sunken-muted); } .disclaimer .link { color: var(--on-sunken-link); } .disclaimer .link:hover { color: var(--on-sunken); } @media (max-width: 768px) { .container { padding: 2rem 1rem 1.5rem; } .content { grid-template-columns: 1fr; gap: 2rem; margin-bottom: 2rem; } .bottom { text-align: center; } }