Carino Systems · Brand Reference

Carino Branding

The source of truth for the Carino visual language — tokens, type and every component, each with a Copy button that pastes ready-styled into any project.

01

The Mark

Every site in the fleet is a gold C with exactly one character beside it. The hub keeps the bare C and no character — that is what makes it the parent rather than one more tool. All 38 are generated and never hand-drawn: marks/marks.py in this repo draws them, deploy.py copies each to the paths its site actually looks for one at, and verify.py follows every site’s own <link rel=icon> and asserts the bytes at the end of it are that site’s own mark.

The lockup
Bare ring
r 34.81 · stroke 16.38
Lettered ring
r 25.38 · stroke 11.94
Character box
x 69.71–93.00
Grid
6 × 10 · module 3.88
Stem
2 modules · 7.76
Ink
#eab308 on transparency
The lettered ring is the bare one at 0.729, which is what frees the right-hand third for the character. Neither set of numbers was invented: both were read back off the two marks already shipping — dcm’s E and topo’s T — and both come out byte-identical from the generator, so it cannot quietly redraw a logo already in circulation.
Six columns, ten rows

The character is a bitmap on a 6 × 10 grid of half-modules, stems two modules wide. Three columns — the module the shipped E and T are drawn on — is too coarse to keep an alphabet apart: on it A, K and M each sit one cell from H. Halving the module fixes that while leaving those two marks unchanged. Diagonals are stepped rather than drawn, because at 32px a stepped module stays crisp where a hairline diagonal turns to porridge.

Why blocky and not type
Red Hat Display 900
77 / 700 = 0.11
This character
7.76 / 38.82 = 0.20
The ring’s own arc
11.94 / 62.7 = 0.19
Stem-to-cap ratios. The fleet’s own display face at its heaviest weight is half the weight of the ring it would stand beside, so a typeset letter reads weedy against it. The blocky letter is a weight, not a pixel affectation.
What survives at favicon size
Actual pixel sizes, unscaled. A module is 1.24 device px at 16×16, so the character is a smudge in a tab strip and only resolves from about 32px. It identifies the app in a dock, an app switcher or a hero — not in a tab. The ring carries the brand at every size, which is the division of labour the system is built on.
The fleet
The character is the site’s own initial wherever that initial is unclaimed — eighteen sites get one that way. Four sites want C, four want T, four want M and four want S, so all but one holder of each takes a symbol, and where a symbol says more than the letter would it wins outright. Three are deliberately not the initial: dcm is E for Editor, which is what keeps it off the D pile; media is a play triangle because M cannot be drawn six columns wide, its vee having no room to narrow; and cybercity is Y, unclaimed and sitting in its own name. law is the weakest glyph in the set — the box is three stems wide, so anything needing two separated uprights reads as one mass with a slot cut in it.
02

Color Tokens

One accent — Sharp Gold #eab308 — on a near-black stack. Everything else is a neutral or a translucent tint of the accent. Click a swatch to copy its value.

Two greys, two names. --text-sec is #a3a3a3, for secondary prose; --text-muted is #8a8a8a, for labels. Many sites used --text-muted for #a3a3a3 and --text-dim for #8a8a8a: a site that moves to carino-ui.css renames them, and never redefines a token declared there.
One file. Every token and production component on this page is in carino-ui.css (behaviour in carino-ui.js). Carino-Systems/propagate.sh copies both into each site, the way it copies the navbar; a site links them before its own stylesheet.
03

Typography

Red Hat Display (900, uppercase) for headings, IBM Plex Sans for body, IBM Plex Mono for data, labels and chips. The brand wordmark is a gold gradient over Red Hat Display. Sizes come from the type scale — thirteen --fs-* tokens, nothing in between. Three rules: --fs-micro is the floor (no UI text below 0.6rem, ever); the body base is 15–16px; heroes are always fluid (clamp()). Decorative glyphs — watermark numerals, emoji, SVG-canvas labels — may size freely.

The scale, largest to smallest
HeroHero--fs-hero · clamp(2.6rem, 7vw, 4.6rem)
WordmarkCarino--fs-display · 2.4rem
DisplayHeading--fs-display · 2.4rem
H1 / PagePage Heading--fs-h1 · 1.9rem
H2 / SectionSubheading--fs-h2 · 1.5rem
H3 / CardCard Heading--fs-h3 · 1.2rem
Large / TitleCard title or emphasised line.--fs-lg · 1.05rem
BodyThe quick brown fox jumps over the lazy dog.--fs-body · 1rem
SecondaryThe quick brown fox jumps over the lazy dog.--fs-sec · 0.9rem
Monoconst accent = "#eab308";--fs-mono · 0.85rem
SmallDense UI text, tables, alerts and code blocks.--fs-sm · 0.8rem
ButtonButtons · Tabs · Kickers--fs-btn · 0.7rem
LabelSection Label--fs-label · 0.65rem
Micro · floorTiny tags & fine print — nothing smaller--fs-micro · 0.6rem
04

Buttons

Outline by default; hover reveals the accent. Primary is a solid gold fill. Toggle buttons fill gold when active (module / template pattern). Icon buttons invert on hover.

Actions
Toggle group (single-select / multi-toggle)
05

Tabs

Underline tabs for switching panels within a view. The active tab carries the accent underline.

The Overview panel is active. Tabs share a hairline baseline and shift the accent underline to the selected item.
06

Form Controls

Dark elevated fields with a gold focus ring. Checkboxes and switches use the accent. All inputs are mono for alignment with the data they hold.

07

Alerts & Status Messages

Translucent tinted boxes in the three semantic colors. Inline code and bold use a warm highlight.

✔ No problems found. Configuration is valid.
⚠ DHCP and a static address on the same interface — networkd applies both.
YAML Error: mapping values are not allowed here (line 8).
ℹ This page reads the file in your browser; nothing is uploaded.
08

Badges, Chips & Status

The app-tag chip (navbar — an <a href="./"> that reloads the app, while the gradient Carino wordmark beside it links to the hub at carino.systems), the clock timezone chip, semantic pills, and the live status dot with its pulse, and the AI Bloat Certified seal that heads a project page.

BRANDING LOCAL Connected Pending Refused Live Idle
AI BloatCertified
09

Cards & Panels

Cards lift and glow gold on hover. Panels use a large Red Hat Display title with a ghosted numeral.

Destinations
Store-and-forward targets
02
TV
Reference navbar implementation with live diagnostics and multi-stream grid.
Carino PACS
Store-only DICOM PACS with folder auto-forward and a bundled editor.
Netplan Config
Family-aware netplan generator with live validation and reference templates.
11

Tables

Mono, hairline-separated rows with an uppercase muted header. Rows tint gold on hover.

InterfaceTypeAddressingMetric
enp1s0ethernetdhcp4100
wlp2s0wifidhcp4600
br0bridgestatic—
12

Code

Dark elevated block, mono, with a subtle accent for keys and muted comments.

# netplan — dual-stack ethernet
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 100
13

Loading & Progress

A gold ring spinner, a determinate progress bar, and the EKG heartbeat used for long copy/transfer operations.

14

Slice Menu

The module chooser of a Suite and the module grid of a Learning site. Slices widen with a gold glow on hover; once a module is open the menu becomes a 44px bar fixed at the top of the page. Shown here in a frame.

Overview
Collapsed tab-bar state (after a slice is chosen)
Routing. Every module is #module, with extra parameters after & (#edit&sample=ct). CarinoUI.slices({ menu, onRoute }) in carino-ui.js follows hashchange, marks the active slice and keeps body.state-overview and body.state-module in step, so Back, bookmarks and shared links open the right module. When every module works on the same file (dcm, Media), pass collapsed: true so the bar sits above the drop area from the start.
A place inside a module rides after a slash: #sha2/stage-3, #learn/lab. onRoute receives it as params.path, and the module id is what comes before the first slash.
On phones the overview stacks, and the bar shows labels only, never icons alone, at equal widths that scroll sideways past four. Modules never go in the navbar, and Tabs are for views inside a module, never for choosing one. Classes: .slice-menu › .slice[data-id] (.s-num, .s-text, .s-blurb), .collapsed. Reference: Asobi, Learn.
15

Toast Notifications

Transient, top-right status messages in the four semantic tints. Fixed and hidden by default; add .show to reveal, then remove it after a timeout.

✔ Snippet copied to clipboard
ℹ Rates refreshed from server
⚠ You have unsaved changes
✖ Could not reach the server
Shown static here via the .toast-rack preview wrapper; in use, a single .toast is fixed to the top-right and toggled with .show. Reference: Desk, Metadata.
16

Navbar Action Portal

Apps don't build their own top bar — they mark their controls with data-carino-actions and carino-navbar.js relocates the real DOM node into the navbar's right cluster. Ids and handlers survive the move; the emptied data-carino-strip wrapper is removed. Relocated controls use the compact 32px .cs-btn recipe.

Control recipe (.cs-btn — shown in a preview strip)
Help
Contract markup (in the app's own HTML)
<!-- the navbar script moves the inner div into .cn-right at mount -->
<header data-carino-strip>
  <div data-carino-actions>
    <button class="cs-btn" id="undoBtn">Undo</button>
    <button class="cs-btn" id="exportBtn">Export</button>
  </div>
</header>
<script src="carino-navbar.js" data-app="MyApp" data-repo="MyRepo" defer></script>
Fallback: with no data-carino-actions marker the script auto-absorbs a leftover body > header.cs-header. Reference: carino-navbar.js (relocateActions), consumer markup in Time/index.html and Hardware/index.html; SoftwareCatalog shows the explicit-marker pattern.
data-app is the tag beside the brand; data-repo is the repository the GitHub button opens — set it whenever the repo name differs from the tag (it falls back to data-app). The right cluster is ordered by CSS, not by DOM position, because four scripts insert into it independently. Read it inwards from the right edge: 4 GitHub and LinkedIn, always last · 3 language, immediately beside them · 2 status · 1 the app's own controls, furthest from the edge.
Fitting. The brand is never squeezed out. When the bar runs out of room, the legal and social links fold into a ⋯ menu first, then the clock steps aside, then the app’s controls fold too. Mark the one main action data-priority="1" to keep it in the bar; without a mark, the first .btn-primary stays. The real nodes move, so ids, handlers and #carinoNav .cn-actions … rules keep working.
Export menu: every output behind one button
Export menu. A tool puts every output (downloads, copy link, print, import, reset) in one .cs-menu in the navbar: a .cs-btn with aria-haspopup opens its .cs-menu-panel (hidden with the hidden attribute), and carino-ui.js wires every menu on the page, so a page never adds its own toggle. Folded into the navbar’s ⋯ menu, the items show there directly. .cs-btn.primary is the one filled control: the page’s main action, marked data-priority="1"; data-priority="2" keeps a second control (a Live page’s source badge) while there is room, and folds before the first.
17

Dropzone

The drag-and-drop file input: dashed hairline at rest, gold glow while a file hovers, solid green once one lands. Drag anything over the first zone to see the live state.

📄
Drop a file here or browse
Any type · processed locally
States
.dragover
.success
Reference: Metadata, Quote, Media, DICOM-editor.
19

Command Block

A pitch-black terminal card for copyable shell commands — green output, gold prompt, and a floating copy button that reuses the page-wide copy mechanics.

$ curl -fsSL https://setup.carino.systems/run.sh | bash $ netplan try --timeout 30
Reference: SimpleSetup (one tab per operating system, the detected one first), Desk, Password. Copy takes the commands without their prompts, and on phones the commands keep clear of the button. Distinct from Code: this is for commands the visitor runs, not source being read.
Long commands that scroll: add .band to the .terminal-wrapper and the Copy button gets its own strip at every width, as it does on phones.
20

Workspace Shell

The chrome of every Tool and every Suite module: a 340px settings rail on the left that scrolls on its own, beside a fluid work pane. At 900px and below the rail becomes a drawer, opened by a [data-ws-toggle] button. Shown here in a frame.

Output
The content pane owns its own scroll and takes every remaining pixel. Results, previews, and tables render here while the rail keeps the controls in reach.
Drawer: 900px and below
The content pane owns its own scroll and takes every remaining pixel. Results, previews, and tables render here while the rail keeps the controls in reach.
Column: three settings or fewer

Runs in your browser. Nothing you add here is uploaded.

Inputs go at the top of the rail or in the pane’s empty state (a Short Hero), settings below them, and the privacy line in .ws-rail-foot. Every output goes in one Export menu in the navbar through data-carino-actions, never in the rail. Classes: .ws › .ws-rail (+ .ws-rail-foot) and .ws-pane; .ws-toggle; .col. Load carino-ui.js for the drawer. Reference: Metadata, Topo, Netplan.
21

Key Caps & Shortcut Legend

Small mono key caps for keyboard hints, with an accent variant for the active or featured binding. Compose them into a legend strip near the canvas they act on.

Space Play Z Undo ⇧Z Redo Del Remove node Esc Deselect
Reference: Topo (shortcut help), SyncSubsStudio (timing keys), Hash (stepper hints).
22

Day/Night World Map

The fleet's world-map canvas: slate ocean, olive land, and a translucent night veil whose edge is the real solar terminator. Gold is reserved for interactive geography — a glowing dot with an outlined mono label for a pinned city, small pale dots for everything else — and a floating mono legend sits bottom-right. The base palette is deliberately muted so the gold reads on both the day and night halves.

Madrid
☀ day · 🌙 night · • city · ★ pinned
The coastline here is the fleet’s real 1:110m world outline, and the night veil and sun position are computed live with the same NOAA-style solar math (declination + equation of time) as the production map. Reference: Time (time.carino.systems), which adds click-to-pin cities, de-overlapped labels with leader lines, and an optional dashed-gold hour-zone layer.
23

Data Viz

Primitives for dashboards and monitoring apps: gains use --ok green, losses --err red, and gold stays the interactive/brand accent. All numerics use tabular-nums via .num. First adopted by Stocks (stocks.carino.systems). Sparkline and detail charts are drawn dependency-free (inline SVG / <canvas> reading tokens via getComputedStyle) — no chart library.

Total value
$48,215.60
▲ 312.40 (0.65%)
Day P/L
−$95.10
▼ 0.42%
NVDA
▲ 1.24 (0.94%) ▼ 2.10 (1.31%) — LIVE · Finnhub DEMO
Source badge states
LIVE · Finnhub DELAYED · 15m STALE · 3h ERROR PAUSED DEMO 15:49:13 12:02:40
Total value
$48,215.60
Showing the last good copy from 12:02.
124.10
131.90
AAPL price ≥ 230
Components: .stat-tile (KPI), .delta.up/.down/.flat (signed change chip), .spark (SVG micro-chart, direction classes tint it), .rangebar (low→high with marker), .rule-row (.switch + condition + remove), .live-chip (data-freshness), plus the .num tabular-nums utility and the body.privacy-on .amount { filter: blur() } screenshot-safe utility.
Freshness. A Live page shows its source badge and the time of its last update in the navbar, each panel shows its own “as of”, and every state looks different: loading, live, delayed, stale, error, demo, paused, empty. An error never reads as “no results”. Sites that measure their own data use THIS BROWSER or DEVICE CLOCK as the source. Classes: .live-chip (.live .delayed .stale .err .paused .sample), .fresh (.stale .err .paused), .is-stale with .stale-note, and the .data-foot source line.
24

Finance / Currency

Composite finance components introduced by Currency (currency.carino.systems). Each composes the Data-Viz primitives above — the .spark micro-chart and .delta chip — into two higher-level cards: the FX trend card (flag · pair · human rate · strength sparkline · window delta, where the series is the target's strength vs base so line colour and delta agree) and the news item (a headline link whose left border is tinted by article tone). A mover tile summarises the biggest gainer/loser over the window.

🇧🇷 USD/BRL Brazilian Real
1 USD = 5.4500 BRL
−7.52% 90D vs USD
🇪🇺 USD/EUR Euro
1 USD = 0.9330 EUR
+1.41% 90D vs USD
Top gainer 90D
🇪🇺 EUR+1.41%
Top loser 90D
🇧🇷 BRL−7.52%
Components: .fx-card (.fx-top → .fx-flag/.fx-pair/.fx-name, .fx-rate, .fx-spark wrapping a .spark, .fx-foot with a .delta), .mover tile (.mv-l/.mv-v/.mv-code/.mv-pct), and .news-item (.news-title + .news-src; .pos/.neg tint the left border by tone, with an optional .news-tone chip). Trade values use .stat-tile + the two-line <canvas> chart. All keyless: ECB/Frankfurter, GDELT, World Bank.
25

Section Animations

One ambient loop per category in the fleet registry, used as a band under a section’s cards on the hub. They are a mark, not a control: nothing here responds to the pointer, and none of them ever finish. The Medical EKG is the original — it is the Carino PACS splash — and the other seven were drawn to sit beside it.

Two local files, no CDN: carino-anim.css (motion) and carino-anim.js (geometry). Drop both in, then el.innerHTML = CarinoAnim.svg('medical') — or copy a rendered <svg> straight out of this page and paste it, which needs the stylesheet alone. Ids match the tag ids in the hub’s assets/json/tools.json, so a section finds its animation by name.
Adding one. Gold on near-black, one accent. Stroke, never fill. It must loop seamlessly between 1.5s and 4s with no start and no end, animate stroke-dashoffset, transform and opacity and nothing else — these sit under a grid that measures itself, so anything that triggers layout is out — and it must hold a legible still under prefers-reduced-motion rather than vanishing. Give every dashed shape a pathLength so the CSS can state a real length instead of guessing at the geometry.
26

Landing Hero

The gold-C hero that opens a landing page: the hub, a Product, a Reference site, a Learning overview. Reference: dicom.carino.systems. It is anchored to the top, and every size grows with the height a screen has beyond 900px, so a laptop and a tall monitor both look composed.

One look across every site.
Copy it, don’t redraw it.

Carino Branding holds the tokens and components every Carino site is built from.

  • Starting a site? Link carino-ui.css and the page already looks like the fleet.
  • Not sure where a control goes? The page types say which blocks a page has.

34 sections · 8 page types · reviewed 2026-10

Rules. The headline is two lines in sentence case, the second in solid gold: never uppercase, never a gradient. One sentence of lede names the product in bold, then up to four situations. A motif under the mark (dicom’s heartbeat) is optional and decorative: aria-hidden, still under reduced motion, removed on phones. A Product adds its systems line (.sys-line: version · systems · licence) above its install buttons; a Reference site puts its counts and reviewed date in .lh-stats.
Classes: .landing-hero › .lh-wrap › .lh-mark (img.mark, optional svg.lh-motif), h1 with .gold, .lh-lede, .lh-situations, .lh-stats or .sys-line, .lh-actions. The mark is the site’s own logo.svg.
27

Short Hero

A tool’s empty state. It sits inside the work pane, never as a band above it, and leaves as soon as there is work. It holds the one input target, example chips as a second way in, and the privacy line. Reference: Metadata and Topo.

See what a file says
about itself.

Drop a photo, a PDF or a song to read and edit its hidden details.

Drop a file here or browse
Read in this browser
Try:

Runs in your browser. Nothing you add here is uploaded.

Rail head: for tools that always open with content

Password

Make a strong password and send it safely.

Rules. One <h1> per page, naming the job in plain words, not the product in capitals. The lede is two lines at most. Every tool has example chips or an “Open the example” link, and sample data says it is sample. Tools that always open with content (Desk, Netplan, Password, Aldis, Teleprompter) use .rail-head at the top of the rail instead.
Classes: .short-hero › img.mark, h1, .sh-lede, .sh-input, .examples (.ex-label + button.chip-tag), .privacy-line. Compact form: .short-hero.rail-head.
28

Privacy Line

One sentence, the same on every site, saying where the visitor’s things go. It must be literally true, so a page that contacts anything names it in the same line.

Runs in your browser. Nothing you add here is uploaded.

Runs in your browser. Nothing you add here is uploaded. Exchange rates come from frankfurter.app; nothing you type is sent.

Runs in your browser. Nothing you add here is uploaded. In Chrome, speech is recognised by Google’s servers unless the on-device pack is installed.

Progress is saved in this browser only. No account, nothing sent anywhere.

Your answers stay in this link and this browser. Nothing is sent anywhere.

Where it goes. Tool: in the empty state and pinned to the foot of the rail. Suite: at the end of the hero’s lede. Learning: under the progress pill, worded for progress. Questionnaire: under the result. Product: under the install block. Live data names its source in the footer line instead (see Data Viz).
The first sentence is one i18n key shared fleet-wide; disclosure clauses go in .pl-also. Where a page sends nothing at all, back the claim with a meta CSP that limits connect-src, as Password does.
29

Filter Chips

A Reference page’s first control: a sticky bar of facet chips with the number of entries shown. One choice per facet, and clicking a chosen chip clears it. Reference: Law.

Region Kind 9 shown
Rules. Chips come first and a search box never does. A list longer than about 300 entries may add a Find after the chips (a small chip, or the / key). On phones the bar is one line that scrolls sideways, never several wrapped rows.
Classes: .fchips › .fchip-lbl, button.fchip (.active or aria-pressed="true"), .fchip-sep, .fchip.clear, .fchips-count.
30

Entry Card & Source Line

The dense card of a Reference page. Every entry ends in a source line: the publisher’s domain, a link, and the month it was last checked.

Mexico
Diario Oficial de la Federación

The federal gazette of record: laws, decrees and regulations take effect when published here.

Official
Source:dof.gob.mx ↗checked 2026-08
Japan
官報 · Kanpō

The official gazette, published by the National Printing Bureau every weekday.

Official
Source:kanpo.go.jp ↗checked 2026-08
Brazil
Diário Oficial da União

The federal gazette; a consolidated legislation portal is listed beside it as a secondary source.

OfficialUnofficial copy listed
Source:in.gov.br ↗checked 2026-08
Data. One JSON file per entry, each with a url and an updated date, checked by tools/validate.py and tools/linkcheck.py (copy Law’s). The source line reads that date; an entry with no source is not published.
Classes: .card.entry › .e-title, .e-sub, .e-desc (two lines), .e-badges (.pill), .src-line (a + .src-date). Details open in a Modal with a #id link.
31

Lab & Progress

Learning pages end every topic in something to try. An inline lab sits at the stage it teaches; the step player walks an algorithm one step at a time. Reference: Learn (inline labs) and Hash (step player).

Course progress
12 / 40 steps · 30%
Lab with the step player
Interactive lab

One round of SHA-256

Step through how one word of the message is mixed into the state.

3 / 64
Σ1(e) = (e ⋙ 6) ⊕ (e ⋙ 11) ⊕ (e ⋙ 25) = 0x3587272b
Progress. Ticked by the learner, never graded. Kept in localStorage['<site>.<module>'] as a list of finished stages, every read and write in try/catch, with Export and Import as a JSON file — the only way to move it without an account. Every module, stage and lab is linkable: #module, #module/stage-3, #module/lab.
Keys: Space plays and pauses, ← → step. Classes: .lab › .lab-kicker, h3, .lab-blurb, .lab-mount or .step-player (.sp-controls, .sp-count, .sp-stage); .progress-pill. A lab that fails to start shows an .alert inside its box; the reading still works.
33

Play Controls

Games and ambient pieces share one stage and one set of keys, so a visitor who knows one knows them all. The stage takes every pixel under the navbar; help and pause open in a Modal.

? H Help P Space Pause Esc Close F Fullscreen M Sound
Rules. Opening help pauses the scene. Phones get a visible help button, and help lists the touch gestures. Reduced motion is read live, and anything that moves for more than 5 seconds can be paused. Sound and outside media start only after a click or tap. Pure ambient pieces (Jellyfish) may skip the help overlay, but every control must still work by touch.
Classes: body.play-body (a full-height column), .play-stage (canvas, wall or board), .play-dock (optional, built from .cs-btn). Three kinds: Canvas (CyberCity, Jellyfish), Wall (MusicGrid), Board (Asobi’s games).
Immersive navbar. Add data-immersive to the carino-navbar.js script tag: the bar slides away in fullscreen or after 3 seconds idle (data-immersive="5000" for 5), and comes back at the top edge, on keyboard focus or on Esc. On touch screens it hides only in fullscreen. It fires carino:navbar with {hidden}.
34

Page Types

Every Carino site is one page, and every page is one of eight types. The type fixes the layout: the blocks it must have, in order, the ones it may add, and the ones it never has. A site declares its type in Carino-Systems/baseline/sites.json as "type"; "also" names a second type whose blocks it borrows.

Hub
hub
The front door of the whole fleet. There is exactly one.
May A status panel, a start list, a contact band.
Never A tool’s own controls, or a search box first.
Tool
tool
You bring an input — a file, some text, a few answers — and take a result away.
May Keyboard keys, a help modal, a Bridge hand-off, one column for three settings or fewer, a light page when it is the exported document.
Never An account, a second top bar, or anything sent to a server without saying so.
Suite
suite
Several tools under one name. Each module keeps the Tool layout.
May A Live data or Learning module, which names its outside sources instead of the privacy line.
Never Modules in the navbar, tabs as the module chooser, or a module you cannot link to by #hash.
Live data
live
Watches outside data that keeps changing, or measures this browser.
May Alerts, a watchlist, a scope strip under the navbar, a demo source labelled as demo.
Never Old data shown as current, an error shown as no results, or advice. Monitoring only.
Reference
reference
Curated facts you read: one JSON file per entry, checked by a validator.
May A detail dialog with a #id link, a side-by-side comparison, a print view, a Find after the chips when there are over 300 entries.
Never A search box first, or an entry without its source.
Learning
learn
Teaches by doing: every topic ends in something you try.
May A questionnaire: how it works, the questions, then a result that says why, with the answers kept in the link.
Never A grade kept on a server, an account to save progress, or a random pick presented as a match.
Games and ambient
play
The screen is the work: games, worlds and things to watch.
May A navbar that hides, sound that starts muted, outside media that loads only after a click.
Never Motion that ignores reduced-motion or starts scrolling on load, motion over 5 seconds with no pause, sound before a click, or ads.
Product
product
Software you install. The page explains it; it does not run it.
May Screenshots, a changelog, one tab per operating system.
Never An install step you cannot copy, or a page that hides which systems it runs on.
Every type also has the navbar (carino-navbar.js), the gold-C mark, and the head, robots, sitemap and 404 that baseline/apply.py writes, so no card lists them. The thin bar at the top of each sketch is the navbar. A linked block opens the component it is built from.
One type, and at most one more. Choose by the page’s job, not its looks. "also" lets a site borrow another type’s blocks: Asobi is play with "also": "suite" because its games sit behind a slice menu. The main type’s Never line still applies. A ninth type is added here first, then in sites.json.
Standalone products (ButterEye, DLSS for Linux; "standalone": true) follow the Product layout but keep their own icon, and skip the Carino navbar and translations.