Nerv-ui nerv-ui
NERV Operations Console v2 — Evangelion-inspired UI component library. Data-driven Three.js MAGI visualization (yield surface mesh + organic flow curves + bar columns), blockchain event log terminal, dense metrics grid, vault cards, oracle consensus display, CRT effects, emergency mode. Noto Serif Display (weight 900) + Shippori Mincho B1 + JetBrains Mono. NO HELVETICA. Every pixel conveys information.
git clone https://github.com/TheGreatGildo/nerv-ui
git clone --depth=1 https://github.com/TheGreatGildo/nerv-ui ~/.claude/skills/thegreatgildo-nerv-ui-nerv-ui
SKILL.mdNERV UI v2 — Operations Console Component Library
Build web interfaces that feel like NERV designed them. Dense, data-driven, clinical. Every visual element references real data — no decorative waste.
The screen is off until data demands it. Black void is the default state.
Live Demo: https://woody-cairn-ztqf.here.now/ Source:
~/clawd/nerv-ui/index.html
v1 Docs: See SKILL-v1.md for the original component library (Cormorant Garamond, hex grids, command blocks)
What's New in v2
| v1 | v2 |
|---|---|
| Cormorant Garamond (max 700) | Noto Serif Display (up to 900) — much heavier |
| Decorative 3D wireframes | Data-driven MAGI visualization (yield surface + flow curves) |
| Generic icosphere globe | Animated terrain mesh with numbered vertices + organic curves |
| No event stream | Blockchain event log — scrolling terminal with typed events |
| Moderate density | Maximum density — every panel shows real protocol data |
| 3 vaults (alETH/alUSD/alBTC) | 2 vaults (alETH/alUSD) — matches current V3 scope |
| Hex grid scanner | Cut — replaced with MYT strategy performance table |
| Command block / ID block | Cut — decorative, replaced with data-driven metrics |
Quick Start
Drop-in Stylesheet
<link rel="stylesheet" href="nerv-ui.css">
Contains all design tokens, CRT effects, and component classes. 808 lines, zero dependencies (except fonts).
Required Fonts
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+Display:wght@700;800;900&family=JetBrains+Mono:wght@400;500;700&family=Saira+Extra+Condensed:wght@400;600;700;800&family=Shippori+Mincho+B1:wght@500;700;800&display=swap" rel="stylesheet">
CRT Effects (standalone)
Just want the CRT look? Use
components/crt-effects.css — scanlines, vignette, phosphor flicker, moving scan line. Add <div class="scan-line-overlay"></div> to your body.
File Structure
nerv-ui/ ├── SKILL.md ← This file (v2 documentation) ├── SKILL-v1.md ← Original v1 documentation (preserved) ├── nerv-ui.css ← Complete stylesheet (tokens + CRT + all components) ├── demo.html ← Full working dashboard demo └── components/ ← Individual component demos (self-contained) ├── event-log.html ← Blockchain event log terminal ├── vault-card.html ← Vault unit status cards ├── magi-oracle.html ← Oracle price consensus display ├── metrics-grid.html ← Dense key metrics grid ├── data-table.html ← Strategy + Transmuter tables └── crt-effects.css ← CRT overlay effects (standalone)
Each component HTML file is fully self-contained — open in browser, see it working, extract what you need.
Core Principles
- The void is the default. Elements emerge from true black (#000), not a surface.
- Color = function. Orange for labels/headers, green for nominal data, cyan for wireframes, red for alerts only.
- Every visual conveys data. 3D scenes reference real metrics. No decorative wireframes.
- Density = authority. More data per pixel = more credible.
- Mechanical compression. Text squeezed via
. Signature EVA look.scaleX(0.78-0.85) - Bilingual is institutional. Japanese text = the org operates in Japanese. Not decoration.
- CRT texture is always present. Scanlines, vignette, phosphor flicker.
Design Tokens
:root { /* Void */ --void: #000000; --void-warm: #080807; --void-panel: #0C0C0A; /* NERV Orange — headers, labels, classification */ --nerv-orange: #FF9830; --nerv-orange-dim: #C87020; --nerv-orange-hot: #FFCC50; /* Nominal Green — data readouts, "system OK" */ --data-green: #50FF50; --data-green-dim: #30BB30; /* Cyan — wireframes, spatial data */ --wire-cyan: #20F0FF; --wire-cyan-dim: #10A0B0; /* Alert Red — emergencies only */ --alert-red: #FF3030; /* Neutral */ --steel: #D8D8D0; --steel-dim: #888880; }
Typography — NO HELVETICA
:root { /* Heavy display serif (EVA English titles) — weight 900, mechanically compressed */ --font-title: 'Noto Serif Display', 'Times New Roman', serif; /* Japanese institutional (Matisse EB equivalent) */ --font-mincho: 'Shippori Mincho B1', 'YuMincho', serif; /* Terminal/data readouts */ --font-sys: 'JetBrains Mono', 'Cascadia Mono', monospace; /* WARNING stamps, emergency banners */ --font-stamp: 'Saira Extra Condensed', 'Impact', sans-serif; }
Mechanical compression (signature EVA):
.compressed-title { font-family: var(--font-title); font-weight: 900; transform: scaleX(0.82); transform-origin: left center; letter-spacing: 0.2em; text-transform: uppercase; }
Components
Event Log Terminal
Scrolling blockchain event feed. Color-coded by type (DEPOSIT=green, BORROW=cyan, HARVEST=orange, REPAY=dim green, REDEEM=yellow, MINT=magenta). Shows timestamp, type, address/detail, amount, block number.
Demo:
components/event-log.html
<div class="event-log"> <div class="el-header"> <span>Blockchain Event Log</span> <span class="el-count">42 events</span> </div> <div class="el-body" id="logBody"> <div class="ev"> <span class="ev-time">12:04:22</span> <span class="ev-type deposit">DEPOSIT</span> <span class="ev-detail">0x7f2a…4c3b → alETH Vault</span> <span class="ev-amount">142.5 ETH</span> <span class="ev-block">#19284721</span> </div> </div> </div>
Vault Card
EVA Unit-style status card for protocol vaults. Compressed serif title + Japanese katakana name + key-value stat rows.
Demo:
components/vault-card.html
<div class="panel"> <div class="panel-header"> <span>Unit-00 — alETH</span> <span class="tag"><span class="led green"></span>Operational</span> </div> <div class="vault-card"> <div class="vc-id">Primary — Ethereum</div> <div class="vc-name">自己返済型ETH</div> <div class="vc-row"><span class="lbl">TVL</span><span class="val">$142.8M</span></div> <!-- ... more rows ... --> </div> </div>
MAGI Oracle Consensus
Three-source oracle display (Chainlink, Uniswap TWAP, Internal) with price, data freshness, and agreement status. Updates in real-time.
Demo:
components/magi-oracle.html
Metrics Grid
Dense 2×N grid of key protocol numbers. Uses the
.highlight modifier for important values and .zero for the always-zero liquidation counter.
Demo:
components/metrics-grid.html
Data Tables
NERV-styled tables for strategy performance and transmuter status. Orange headers, green data, hover highlighting, progress bars for utilization.
Demo:
components/data-table.html
3D MAGI Data Analysis (Three.js)
The hero visualization. Requires Three.js via CDN importmap. Elements:
- Cyan wireframe mesh — undulating yield surface with numbered vertex labels
- Orange organic curves — 30 flow lines rising from mesh, independently swaying
- Glowing tip dots — pulsing orange spheres at curve endpoints
- Flanking bar columns — orange metric bars on left/right with wireframe outlines
- Green background particles — depth-adding scattered points
- Slow camera orbit
See
demo.html Three.js module for full implementation (~200 lines).
Emergency Mode
Toggle via
data-mode="emergency" on <html>:
document.documentElement.dataset.mode = 'emergency';
Transforms: all green→red, cyan→red, scan line speeds up, emergency overlay appears, MAGI goes into conflict state.
Anti-Patterns
| ❌ Don't | ✅ Do |
|---|---|
| Gray/navy backgrounds | True black (#000) |
| Helvetica anywhere | Use the specified font stack |
| Decorative 3D wireframes | Data-driven visualizations |
| Smooth gradients | Hard boundaries, stepped blocks |
| Rounded corners | Sharp corners (except LEDs) |
| Light mode | This aesthetic has no light mode |
| Decorative Japanese | Real institutional terms only |
| Low density layouts | Pack data — density = authority |
| Static numbers | Live-updating from shared data model |
Accessibility
All color combinations pass WCAG AA:
- Orange #FF9830 on black: 8.2:1 ✅
- Green #50FF50 on black: 13.8:1 ✅
- Cyan #20F0FF on black: 13.1:1 ✅
- Red #FF3030 on black: 5.9:1 ✅
@media (prefers-reduced-motion: reduce) { body, .scan-line-overlay, [data-mode="emergency"] * { animation: none !important; } }
The screen is off until data demands it. The void is the default state.