Design system
tools-ict

tools-ict design system

One quiet look for every tool in the suite: neutral greys, Inter, 40px controls and a single accent colour per app. Everything below is plain CSS classes; no framework required.

npm install @tools-ict/design-system

// main.jsx
import '@tools-ict/design-system';
import { initTheme, bindThemeToggle } from '@tools-ict/design-system/theme';
initTheme({ storageKey: 'myapp:theme', accent: 'teal' });
// or, for a theme button in the top bar:
bindThemeToggle(document.getElementById('theme-toggle'), { storageKey: 'myapp:theme', accent: 'teal' });

Accent

Each app picks one accent with <html data-accent="…">. All presets reach 4.5:1 contrast in light and dark mode.

Colour tokens

Use the tokens, never raw colours, so dark mode keeps working.

Top bar

Every app has one. The .suite-mark on the right links back to the overview of all tools.

Noted Lecture 3 — Networking tools-ict
<header class="topbar">
  <a class="brand" href="./"><span class="logo">…</span>Noted</a>
  <span class="topbar-title">…</span>
  …actions…
  <a class="suite-mark" href="{SUITE.overviewUrl}">tools-ict</a>
</header>

Buttons

<button class="btn primary">…</button>   .ghost .danger .small .block .on
<button class="icon-btn" aria-label="…">…</button>
<button class="link-btn">…</button>

Choosing

<div class="segmented" role="group"><button class="on">…</button>…</div>
<button class="chip on">…</button>
<label class="switch"><input type="checkbox"><span>…</span></label>

Forms

Shown at the top of every list.
Choose at least 2.
<div class="field"><label>…</label><input><span class="hint">…</span></div>   .invalid + .error

Surfaces and status

Link card

Hover lifts it.

accent

Card

Static surface.

ok warn danger
Notice: a neutral hint in the accent tone.
Warning: unsaved changes stay in this browser only.
Error: the file could not be read.
Saved.
.card  a.card  .card-grid   .notice(.warn|.danger|.ok)   .badge(.accent|.ok|.warn|.danger)   .meter>span

Tabs, menu, tooltip

?Tooltips open on hover and on keyboard focus.
<nav class="tabs"><button class="on">…</button></nav>   <div class="menu"><button>…</button></div>
<span class="tip" tabindex="0">?<span class="tip-text" role="tooltip">…</span></span>

Dialog and toast

<dialog class="dialog"><div class="dialog-head"><h2>…</h2></div><div class="dialog-body">…</div><div class="dialog-actions">…</div></dialog>
<div class="toast-region" role="status" aria-live="polite"><div class="toast">…</div></div>

Empty state

No classes yet

Import a list from Excel or add students by hand.

Delete class?

This removes 28 students from this browser. Export first if you want a copy.