⚠ SYSTEM ALERT:
The year 2000 problem was never fixed — it was reassigned to the frontend team.
Rollback successful.
millenium-bug is a classless-first CSS library that makes any
website look like a late-'90s banking back-office: near-white forms, inset grey fields,
cobalt-blue tabs, Courier-bold values, phosphor-yellow highlights and fire-red alerts.
No border-radius. No transitions. No mercy.
What it's for: mocking up enterprise-looking CRMs, admin panels and
data-entry screens in minutes — or just giving your project that "certified in 1999,
still in production" energy. You write semantic HTML, you get the mainframe.
The .mb-* classes are only optional modifiers.
One file, zero dependencies, no build step. Drop it in like it's the last millennium:
<link rel="stylesheet" href="millenium-bug.css">
Scroll for the live component gallery, or jump straight to the
full CRM example →
Window
Use <dialog open> (or .mb-window) with a
<header> as the title bar. This very page is a window.
<dialog open>
<header>
<h1>-- Window title</h1>
<button aria-label="Close">✕</button>
</header>
<main>…content…</main>
</dialog>
Tabs
A <nav> with links or buttons. The active tab is declared with
aria-current (or aria-selected="true"), not with classes.
The <section> immediately after becomes the panel with the orange line.
Example
Content of the "Case data" panel.
<nav>
<a href="#">Master data</a>
<a href="#" aria-current="page">Case data</a>
<a href="#">12 Attachments</a>
</nav>
<section>…panel…</section>
Fields
<input>, <select> and <textarea>
have the inset border and the monospace bold value.
readonly and disabled turn grey by themselves.
Checkboxes and radios are squared off by regulation.
Example
<input size="12" value="00042" readonly>
<select><option>In progress</option></select>
<label><input type="checkbox" checked> Privacy signed</label>
Buttons and button bar
The <button>s are 3D-raised and "sink" when pressed.
.mb-primary is the cyan variant. The button bar at the bottom of the
window is a <menu>: buttons after .mb-right
align to the right.
Example
<menu>
<li><button>Change Location</button></li>
<li><button class="mb-right">Summary Print</button></li>
<li><button disabled>OK</button></li>
<li><button class="mb-primary">Cancel</button></li>
</menu>
Modals and dropdowns
A <dialog> opened with showModal() becomes a centered
modal window with a retro tramato backdrop — no extra markup, the library styles
dialog:modal and ::backdrop for you. A
<details class="mb-dropdown"> with a <summary>
and a <menu> is a drop-down menu that needs no JavaScript at all.
Example — click to open
Actions
<button data-open="dlg">Open…</button>
<dialog id="dlg">…</dialog> <!-- dlg.showModal() -->
<details class="mb-dropdown">
<summary>Actions</summary>
<menu><li><button>Print</button></li>…</menu>
</details>
The dropdown is pure HTML/CSS (native <details> toggle).
Only opening a modal needs one line of script — the library ships zero JS.
Tables
<table>s have a flat grid, grey headers and
rows that select in navy blue on mouse hover.
Example
| No. | Date | Subject | Outcome |
| 15 | 21/05/2026 | BUDGET MEETING | CONFIRMED |
| 16 | 28/05/2026 | SUPPLIER VISIT | POSTPONED |
| 17 | 03/06/2026 | APPOINTMENT REQUEST | |
<table>
<thead><tr><th>No.</th><th>Date</th></tr></thead>
<tbody><tr><td>17</td><td>03/06/2026</td></tr></tbody>
</table>
Theming
All colours are custom properties with the --mb- prefix:
override them on :root to change era without touching the library.
:root {
--mb-window: #f5f4f1; /* near-white window interior */
--mb-face: #d8d4cf; /* grey of fields and buttons */
--mb-tab: #1058a8; /* blue tab */
--mb-tab-active: #e8501e; /* active orange tab */
--mb-mark: #ffff00; /* yellow highlight */
--mb-ok: #39e639; /* green highlight */
--mb-due: #b8e2e2; /* cyan highlight */
--mb-alert: #e60000; /* red alert */
--mb-primary: #8ed8d8; /* cyan primary button */
}