Multiplication garden
Find the missing number to help this idea grow.
One bright, calm system for child lessons, parent dashboards, and everything between. Built from semantic HTML, native CSS, vanilla JavaScript, and optional React adapters—without a UI library.
Find the missing number to help this idea grow.
The rounded conversation bubble represents a tutor sitting alongside the learner. The open book keeps the promise grounded in learning; the coral dot and golden spark bring curiosity without turning the brand into a toy. Mituto is built and based in Luxembourg.
Keep clear space equal to half the mark height on every side.
Do not recolor individual letters, add gradients, stretch, rotate, or place on busy imagery.
Use the full logo from 120px wide and the standalone mark below that size.
Warm cream and paper carry every surface. Lilac leads action, while coral, mint, sky, and sun provide friendly meaning. Deep plum is reserved for readable text—not dark containers.
| Role | Token | Use | Contrast note |
|---|---|---|---|
| Canvas | --mt-cream-0 | Global background | Pair with ink |
| Ink | --mt-ink | Primary text and icons | 12.1:1 on canvas |
| Action | --mt-primary-300 | Primary controls | Use dark ink text |
| Success | --mt-mint-100 | Positive surfaces | Add icon + label |
| Error | --mt-danger-50 | Validation background | Add explicit message |
Mituto has no dark theme. System dark-mode preferences must not invert product surfaces; color-scheme: light only is part of the token contract.
Fredoka gives headings their bubbly confidence. Nunito Sans keeps instructions, forms, and dense parent-facing information crisp. Both variable fonts are self-hosted in the kit.
Aha! Now it makes sense.
--mt-font-displayShort explanations use friendly words, generous line height, and one clear idea at a time.
--mt-font-bodyclamp(3rem, 7vw, 6.5rem)3rem / 1.052rem / 1.11.25rem / 1.2Use 16px as the adult-facing baseline and 18–20px for core child instructions.
1rem / 1.55.75rem / 900The 4px base scale gives dense dashboards and roomy child flows a shared rhythm. Rounded corners grow with the component; pills are for compact labels and actions, not every container.
1 · 4px2 · 8px3 · 12px4 · 16px6 · 24px8 · 32px12 · 48px16 · 64pxsm · 10pxCompact controls
md · 14pxInputs and options
lg · 20pxMenus and panels
xl · 28pxCards and dialogs
pill · 999pxButtons and badges
Use stack for vertical rhythm, cluster for wrapping actions, grid for responsive cards, and surface for contained content. The classes work unchanged as React className values.
.mt-stack.mt-cluster.mt-grid · minmax()<section class="mt-scope mt-stack">
<header class="mt-cluster">…</header>
<div class="mt-grid">…</div>
</section>One filled primary action per region. Secondary, ghost, and semantic variants support the hierarchy. Every state—including loading and disabled—preserves the label’s accessible name.
.mt-button<button> for actions and <a href> for navigation. A disabled action needs a visible reason nearby; links must never imitate disabled buttons.Labels stay visible. Hints answer likely questions before errors happen, while validation messages say what changed and how to fix it. Native input types retain browser and password-manager behavior.
Use checkboxes for independent choices, radios for one choice in a set, switches for settings that take effect immediately, and selects when screen space matters.
.mt-check.mt-radiorole="switch".mt-segmented<select>listbox patternArrow keys, Enter, Space, Home, End, and Escape are supported.
The behavior layer adds only what native HTML does not provide consistently: filtered suggestions, steppers, accessible custom selection, drag feedback, and synchronized range output.
combobox patternnative stepUp()Between 4 and 12 per learning block.
<input type="range">drag + native inputParent-facing information can be precise without feeling clinical. Cards group one idea, stats emphasize the useful signal, and tables remain semantic, sortable, filterable, and responsive.
filter · sort · paginate| Status | ||||
|---|---|---|---|---|
| Multiplication garden | Mathematics | 02 Sep 2026 | 4½ stars | Complete |
| Sentence builder | German | 01 Sep 2026 | 4 stars | Complete |
| Reading clues | French | 29 Aug 2026 | 3½ stars | Review |
| Fractions picnic | Mathematics | 27 Aug 2026 | 5 stars | Complete |
| Living things | Science | 25 Aug 2026 | 4 stars | Complete |
| Word explorer | English | 23 Aug 2026 | — | Paused |
| Shapes around us | Mathematics | 20 Aug 2026 | 4½ stars | Complete |
Save a topic to return to it quickly.
Success tells the learner what went well. Errors explain the next move. Progress is honest, loading is announced, and celebrations stay warm without becoming noisy.
Review the learning goal before creating the child link.
The session is complete and the parent report is on its way.
Your answers are saved on this device. Keep this tab open.
Nothing was lost. Check the connection and try once more.
keyboard focusableDetailed numeric scores stay in the parent report; children receive stars and specific words.
aria-live="polite"Native dialogs provide focus management and Escape behavior. Accordions reduce scanning load, tooltips label unfamiliar icon actions, and carousels are reserved for optional peer content—not essential instructions.
supplementary onlyCompleted sessions combine mastery, independence, and eligible fluency, then map the result to the nearest half star.
Yes—when the parent-approved session policy allows it. First-attempt and eventual correctness remain separate evidence.
The paper workflow can be downloaded ahead of time and uploaded by the parent later.
A compact original outline set for product actions, learning subjects, status, communication, data, and files. Use the 24px grid, rounded 2px stroke, and a visible text label whenever meaning is not universal.
Default to 20px in controls, 24px standalone, and 28px in subject bubbles.
Keep the 2px rounded outline. Do not mix filled third-party icons into a control group.
Icons support labels. They replace text only for universally understood actions with an accessible name.
These compositions turn the primitives into Mituto-specific moments. Child flows use large type, one task, and one primary action. Parent flows show rationale, confidence, and control.
Put the words in the right order.
Sam recalled 6× and 7× facts independently in two sessions. A short introduction to division would connect the inverse relationship.
You used the 5× fact to solve the 6× fact. That is strong mathematical thinking.
18–20px instructions, 48px actions, one decision per screen, praise the strategy.
Show evidence and uncertainty, separate first attempts from retries, keep the parent in control.
Learning blocks, active time, confidence, and next activity have the same meaning everywhere.
Import the stylesheet once, then use semantic classes directly or the optional adapters. The adapters manage their own state and import only React—no component, positioning, animation, or icon libraries.
The complete distributable is available at /design-system/.
Add @mituto/ui/styles.css once near the app root.
Use React adapters inside React; reserve the vanilla initializer for server-rendered or static islands.
import "@mituto/ui/styles.css";
import {
Button, Field, Input, Icon, Select, Switch
} from "@mituto/ui/react";
export function ProfileForm() {
const languages = [
{ value: "de", label: "Deutsch" },
{ value: "fr", label: "Français" },
{ value: "en", label: "English" }
];
return (
<form className="mt-scope mt-stack">
<Field label="Child nickname" hint="Visible only to your family.">
<Input name="nickname" autoComplete="off" />
</Field>
<Field label="Explanation language">
<Select name="language" options={languages} />
</Field>
<Switch label="Read instructions aloud" />
<Button type="submit">
<Icon name="check" /> Save profile
</Button>
</form>
);
}Button, IconButton, Badge, Avatar, Field, Input, Textarea, NativeSelect, Checkbox, Radio, Switch, NumberStepper, Progress.
Select, Autocomplete, Tabs, Accordion, Dialog, ToastProvider, useToast, and DataTable.
Dropdown, listbox, combobox, tabs, accordion, dialog, toast, data table, carousel, rating, range, stepper, and file drop.
Do not call initMituto() on a React-managed interactive subtree. Static CSS classes are always safe; interactive behavior should have one state owner.
The system targets WCAG 2.2 AA and is designed for developing readers, touch input, keyboard navigation, zoom, reduced motion, and assistive technology. Accessibility is a product behavior, not a finishing pass.
Ink on paper exceeds AA. Pastels are surfaces; semantic text uses a darker companion token.
A four-pixel lilac focus halo appears on every interactive element reached by keyboard.
Primary controls begin at 44px; child-facing choices should reach 48px or more.
Motion is short, optional, and removed automatically when the user requests reduced motion.
Labels use familiar verbs. Errors describe recovery. Feedback names a strategy, not a trait.
Status always includes a label or symbol, and validation is connected to its control.