Duolingo’s design language — flat fills on a hard under-edge, rounded geometry, one loud primary — rebuilt around SGT University’s blue #0060aa, which is oklch(0.4837 0.1403 250.89).
#0060aa is unusual and lucky: at 6.45:1 it passes AA both as a fill under white text and as text on white, so it can be either without a second thought.
Stepped in OKLCH at the brand's own hue, so every rung is the same blue rather than drifting purple in the shadows. The lower rungs are the trap: brand-50 through brand-400 must never carry text.
Each fill is solved so white text on it clears 4.5:1. Amber is the exception and the classic trap — no amber light enough to read as amber can hold white text, so it takes dark ink at 11.42:1.
#198639
4.66:1 · white on fill
#ffc800
11.42:1 · DARK ink on fill
#d92d20
4.83:1 · white on fill
#0060aa
6.45:1 · white on fill
Nunito — our choice, not Duolingo's: there is no public Duolingo font guidance to cite. It is rounded, warm, freely licensed and has good numerals. One deliberate departure from the reference implementation: display type here does NOT lowercase. This portal sets student names, company names and registration numbers, and lowercasing a registration number is a data bug wearing a typographic costume.
display · 28px
No Objection Certificate
display · 21px
CS-402 · Database Management Systems
body · 14px
The internship covers 60% of the syllabus, weighted by contact hours.
tnum · tabular figures for all data
| Registration | 22010112345 |
| Reference | SGTU/NOC/2026/00418 |
| Mapped | 60% |
| Issued | 30 Aug 2026 |
Tabular figures so a column of numbers doesn’t jitter between rows.
Enter uses ease-out; exit runs at about 65% of enter. Transform and opacity only. Hover a tile on a mouse, or press play — a curve you can only feel with a cursor is a curve half the people reading this cannot feel at all.
--ease-out-quart
cubic-bezier(0.25, 1, 0.5, 1)
The default. Fast out of the gate, gentle landing.
--ease-out-back
cubic-bezier(0.34, 1.56, 0.64, 1)
Overshoots slightly. For arrivals worth noticing.
--ease-in-out-soft
cubic-bezier(0.65, 0, 0.35, 1)
Symmetric. For things that move between two places.
Status is never communicated by colour alone — every state carries a word, because roughly 1 in 12 men has a colour vision deficiency and a red dot beside a green dot is not a message.
Each of these is one line of CSS in globals.css, and each is visible the moment it is missing. Students will open this on a phone on campus Wi-Fi.
@media (hover: hover) and (pointer: fine)-webkit-tap-highlight-color: transparent100dvh / 100svhfont-size: max(16px, 1em)touch-action: manipulationoverscroll-behavior: noneviewport-fit=cover + env(safe-area-inset-*)user-select: none on controls onlytheme-color per colour scheme