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.

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).
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.

BRANDING LOCAL Connected Pending Refused Live Idle
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 full-screen section chooser (Carino-Systems hub, CarinoLearn). Columns fill the viewport and expand with a radial gold glow on hover; selecting one collapses the rest to a thin bar. Shown here scaled down.

01
Projects
02
Systems
03
About
04
Contact
Collapsed tab-bar state (after a slice is chosen)
Reference: Carino-Systems/index.html (the hub), Asobi and Learn (in-app the collapsed bar is body.state-playing .slice-menu, sticky under the navbar; here it is the .collapsed modifier). Click a tab above to move the active accent.
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.
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 (installer one-liner), Desk (snippet cards), Password. Distinct from Code: this is for commands the visitor runs, not source being read.
20

Workspace Shell

The standard chrome for every "tool with a settings rail" app: a fixed sidebar that scrolls on its own beside a fluid content pane (min-width: 0 so it never forces overflow). Below 700px the rail stacks on top.

Settings
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.
In apps the rail is ~340px wide. Reference: Metadata, Quote, Media, Vitae.
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
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.
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.