# HOMECORE-FRONTEND Design Recon — ADR-131 **Source:** cognitum-one/v0-appliance dashboard at `http://cognitum-v0:9000/` **Captured:** 2026-05-25 by browser-recon agent (session `20260525-181819-adr131-recon`) **Pages fetched:** dashboard, cogs, seeds, edge, analytics, settings, cluster, tailscale, aidefence, guide (all HTTP 200) **Auth:** dashboard is unauthenticated; `/api/*` requires bearer token — all recon confined to dashboard pages --- ## 1. Color Palette The entire UI is dark-only. There is no light mode and no `prefers-color-scheme` media query anywhere in the stylesheet. Every surface is drawn from a tight family of near-black navy blues with two accent hues: a cool teal (`--primary`) and a green (`--accent`). ### Core tokens (hex conversions from HSL source) | CSS variable | HSL value | Hex | Role | |---|---|---|---| | `--background` | `220 25% 6%` | `#0b0e13` | Page background, modal overlay base | | `--foreground` | `210 20% 92%` | `#e6eaee` | Body text, headings | | `--primary` | `185 80% 50%` | `#19d4e5` | Teal — active nav underline, CTA borders, ring focus, brand slash | | `--primary-foreground` | `220 25% 6%` | `#0b0e13` | Text on filled primary buttons | | `--accent` | `142 70% 50%` | `#26d867` | Green — secondary CTA, success state, deploy button text | | `--accent-foreground` | `220 25% 6%` | `#0b0e13` | Text on filled accent buttons | | `--secondary` | `220 20% 14%` | `#1c212a` | Button fill, pill-tab background | | `--card` | `220 20% 10%` | `#14171e` | Card surface (also popover) | | `--surface-elevated` | `220 20% 12%` | `#181c24` | Slightly elevated card variant | | `--surface-overlay` | `220 20% 8%` | `#111318` | Modal scrim, sticky navbar | | `--muted` | `220 15% 15%` | `#20242b` | Muted chip backgrounds, scrollbar track | | `--muted-foreground` | `215 15% 55%` | `#7b899d` | Secondary text, labels, timestamps | | `--border` | `220 15% 18%` | `#272b34` | All borders (at 50% opacity by default) | | `--destructive` | `0 65% 50%` | `#d22c2c` | Error state, danger button | | `--ring` | `185 80% 50%` | `#19d4e5` | Focus ring (same hue as primary) | ### Semantic status colors (inline, not variables) | State | Color | Hex | Usage | |---|---|---|---| | Online / success | `hsl(142 70% 50%)` | `#26d867` | `.badge.online`, `.dot.up`, `.heat-cell.up` | | Warning | `hsl(38 80% 60%)` | `#e69940` | `.badge.unpaired`, `.hero-dot.warn`, banner backgrounds | | Error / offline | `hsl(0 65% 50%)` | `#d22c2c` | `.badge.offline`, `.badge.danger`, `.dot.down` | | Info (log line) | `hsl(205 80% 65%)` | `#4db8f5` | Log viewer `.info` class | | Paired | `hsl(185 80% 50%)` | `#19d4e5` | `.badge.paired` (same as primary) | --- ## 2. Typography ### Font families The CSS declares two font families via CSS custom properties: - `--font-display: 'Outfit', system-ui, sans-serif` — all headings, nav items, buttons, card titles, KPI values. Outfit is a modern geometric sans loaded locally (no Google Fonts outbound call; the source comment says "ship from local chrome.css fallback"). - `--font-mono: 'JetBrains Mono', monospace` — timestamps, port numbers, version strings, table cells, log output, KPI labels, chip text. ### Type scale | Token name / usage | Size | Weight | Notes | |---|---|---|---| | Hero title (`h1.hero-title`) | `clamp(1.5rem, 2.4vw, 2.1rem)` | 600 | Fluid, capped at ~33.6px | | Page h1 (`.page`) | `1.5rem` (24px) | 600 | All inner pages | | Section heading (`.row-h h2`) | `1.125rem` (18px) | 700 | Section openers on Cogs/Dashboard | | Card title (`.card-title`) | `0.9375rem` (15px) | 600 | | | Body / button | `0.8125rem` (13px) | 400/500 | Default body, nav links, buttons | | Secondary body / lede | `0.875rem` (14px) | 400 | Page lede text | | Small label | `0.75rem` (12px) | 400–600 | Table cells, modal sub-text | | Micro label | `0.6875rem` (11px) | 600 | Section eyebrows, uppercase KPI labels, badge text | | Mono micro | `0.625rem` (10px) | 400 | Heatmap cells, chip category text | Letter-spacing: `0.1em` on section eyebrows (`.section h2`), `0.08em` on filter-rail headings and chip category text, `-0.02em` on all `h1–h4` display headings. Line-height for body is `1.5`; lede text uses `1.45`. --- ## 3. Layout Primitives ### Page shell ``` ┌─────────────────────────────────────────────────────────┐ │ .appbar (sticky, z-50, backdrop-filter:blur(8px)) │ │ [brand-mark] [brand-text] [nav links scrollable] │ ├─────────────────────────────────────────────────────────┤ │ .wrap (max-width: 1400px, padding: 1.5rem 1.25rem) │ │ ┌── .hero (full-width, gradient bg, radial accents) │ │ ├── .kpi-grid (auto-fill, min 170px columns) │ │ ├── .section > h2 (eyebrow) + content │ │ └── .grid / .grid-2 / .grid-3 (auto-fit) │ ├─────────────────────────────────────────────────────────┤ │ footer.appfoot (border-top, centered text) │ └─────────────────────────────────────────────────────────┘ ``` **Appbar:** `position: sticky; top: 0; z-index: 50`. Background is the page background at 90% opacity with 8px blur backdrop-filter, so the page content bleeds through. Nav links overflow-scroll horizontally with a right-fade mask gradient. **Active nav state:** primary-colored text + a 2px bottom border line (`::after` pseudo-element) positioned at bottom: -2px of the link. Hover reveals secondary background fill on the link. **Content wrap:** max-width 1400px, centered, 1.25rem horizontal padding. Inner page sections are separated by margin-bottom spacing in multiples of 0.75rem (base unit = 12px at 16px root). ### Cogs page: app-store sub-navigation The Cogs page adds a sticky secondary nav bar (`.subnav`) at `top: 3.25rem` (just below the appbar). Tabs are borderless buttons with a 2px bottom underline indicator when active. A `flex: 1` spacer pushes a gear icon to the right edge. ### Card patterns Three card variants, all sharing the same surface gradient and border: 1. **Standard card (`.card`)** — `background: var(--gradient-card)` (linear 180deg from `--surface-elevated` to `--surface-overlay`), 1px border at 50% opacity, `--radius` (0.75rem), `box-shadow` 8px/32px dark drop shadow. 2. **KPI card (`.kpi`)** — 38px icon square left + text right, same gradient, 1rem/1.125rem padding, smaller vertical rhythm. 3. **Empty-state card (`.empty-card`)** — dashed 1px border (instead of solid), centered text, optional compact variant. The headline in `.empty-card h3` uses the primary teal, body explains what to do next. ### Spacing rhythm Base unit is 4px. Gaps between grid items are universally `0.75rem` (12px). Card padding is `1.25rem` (20px) for standard, `0.875rem` (14px) for compact. Section margin-bottom is `1.5rem` (24px). The hero section uses `1.75rem` (28px) horizontal padding. --- ## 4. Component Vocabulary ### Navigation components - **Appbar** — sticky top bar with brand + horizontal nav links. Brand mark is a 32px rounded SVG icon square. - **Nav link** — 0.4rem × 0.7rem padding, 0.4rem radius, transitions on color + background. Active state: primary text + 2px underline pseudo-element. Mobile: wraps below brand row at 720px. - **Sub-nav / secondary tab bar** (`.subnav`) — app-store style horizontal tab strip, sticky under appbar. Used exclusively on Cogs. - **Pill tabs** (`.pill-tabs` + `.pill-tab`) — smaller rounded-rect tab group for in-card filter switching. Active state fills with primary color. - **Page tabs** (`.page-tabs`) — used on Analytics for domain view switching. Underline-style, same pattern as sub-nav but at content level. ### Card & data display - **Card** (`.card`) — base data container with gradient surface, subtle border, shadow. - **KPI tile** (`.kpi`, `.kpi-tile`) — metric display with icon, label (uppercase micro mono), large value, and optional sub-line. Two variants: `.kpi` (icon-left layout) and `.kpi-tile` (stack layout, used on Seeds/Edge/AIDefence). - **Node card** (`.node`) — cluster member card with mono metadata rows. Key-value pairs in `.node-meta` with dimmed label prefix (`.l` class). - **Cog card** (`.cog`) — product-catalog card with emoji icon, name, description, category chips, and a "Get" pill button. Hover lifts 2px with primary glow border. - **Pick card** (`.pick-card`) — horizontal-scroll featured card (220px fixed width), snap-scroll container. Smaller emoji + name + category + pill CTA. - **Category tile small** (`.cat-tile-sm`) — 180px min-width grid item, emoji + name + count. - **Category tile large** (`.cat-tile-big`) — 16:9 aspect-ratio card, full-bleed with gradient per category. - **Nav tile** (`.nav-tile`) — dashboard home navigation card with icon square, title, description, and a chevron arrow that translates +2px on hover. - **Architecture action card** (`.arch-card`, `.arch-action-card`) — setup wizard launcher cards on the dashboard. ### Status & feedback - **Badge** (`.badge`) — pill with 1px border, 11px mono text. Variants: `role-master` (teal), `role-worker` (green), `online` (green), `offline` (red), `unknown` (muted), `paired` (teal), `unpaired` (amber), `danger` (red). - **Dot** (`.dot`) — 8px circle status indicator. `.up` glows green with box-shadow, `.down` is red, default is muted gray. - **Hero dot** (`.hero-dot`) — 7px circle in the dashboard hero status row. Same three states: `.ok` (green glow), `.warn` (amber glow), `.down` (red glow). - **Op-pill** (`.op-pill`) — "operational status" pill with colored dot inside. Used in dashboard architecture hub. - **AI pill / status chip** (`.pill` on AIDefence, `.md-badge` in cluster) — inline classification badge at 0.68rem. States: `.ok`, `.warn`, `.bad`. - **Chip** (`.chip`) — tiny category/difficulty label, all-caps, 0.5625rem, pill-shaped. Category-colored variants (`.cat-ai`, `.cat-health`, `.cat-security`, etc.) each get a hue-appropriate 15% opacity background. ### Actions - **Button** (`.btn`) — 0.5rem × 0.875rem padding, 0.4rem radius, secondary fill. Variants: `.primary` (filled teal, 600 weight, box-shadow), `.outline` (transparent fill), `.danger` (red tint), `.sm` (compact). - **Hero button** (`.hero-btn`) — slightly larger, display-font, 0.9rem padding, glass-effect dark fill. `.primary` variant uses the green accent gradient. - **Pill CTA** (`.get`, `.pget`) — full pill-radius (9999px), primary-tint background at rest, fills solid on hover. Used on cog cards and pick cards. - **Gear button** (`.gear-btn`) — icon-only square button, transparent at rest, border appears on hover. - **Context menu** (`.ctx-menu`) — dark card dropdown (min-width 180px), each item is a full-width button with secondary hover fill. - **Copy button** (`.copy-btn`) — positioned absolute in `.copy-row`, 0.7rem opacity at rest, `.copied` state turns green/accent. ### Forms & inputs - **Input** — all ``, `