Files
ruvnet--RuView/examples/frontend/src/styles/base.css
T
ruv 04f205a05e refactor: move frontend/ to examples/frontend/
The Lit + Vite HOMECORE web UI is an example consumer of the
sensing stack, not a top-level deliverable — relocate it under
examples/ alongside the other sensor and dashboard demos.

Add an entry to examples/README.md so it's discoverable.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-27 12:20:49 -04:00

225 lines
5.0 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* HOMECORE base styles — typography reset, page shell, nav layout.
* Component vocabulary mirrors cognitum-v0 (ADR-131 §34).
*/
@import './tokens.css';
/* ── Reset ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
color-scheme: dark;
font-family: var(--hc-font-display);
font-size: 16px;
background: var(--hc-bg);
color: var(--hc-text);
}
body { min-height: 100dvh; }
/* ── Typography scale ── */
h1 { font-size: 1.5rem; font-weight: 600; letter-spacing: -0.02em; }
h2 { font-size: 1.125rem; font-weight: 700; letter-spacing: -0.02em; }
h3 { font-size: 0.9375rem; font-weight: 600; letter-spacing: -0.02em; }
h4 { font-size: 0.875rem; font-weight: 600; letter-spacing: -0.02em; }
p { font-size: 0.875rem; line-height: 1.45; }
.mono { font-family: var(--hc-font-mono); }
/* ── Page shell ── */
.hc-wrap {
max-width: 1400px;
margin-inline: auto;
padding-inline: 1.25rem;
padding-block: 1.5rem;
}
/* ── Appbar ── */
.hc-appbar {
position: sticky;
top: 0;
z-index: 50;
background: hsl(220 25% 6% / 0.9);
backdrop-filter: blur(8px);
border-bottom: 1px solid var(--hc-border);
display: flex;
align-items: center;
gap: 1rem;
padding: 0 1.25rem;
height: 3.25rem;
}
.hc-brand {
display: flex;
align-items: center;
gap: 0.5rem;
font-weight: 600;
font-size: 0.9375rem;
white-space: nowrap;
flex-shrink: 0;
text-decoration: none;
color: var(--hc-text);
}
.hc-brand-icon {
width: 32px;
height: 32px;
border-radius: 0.4rem;
background: var(--hc-primary);
display: flex;
align-items: center;
justify-content: center;
color: var(--hc-primary-fg);
}
.hc-nav {
display: flex;
align-items: center;
gap: 0.25rem;
overflow-x: auto;
scrollbar-width: none;
mask-image: linear-gradient(to right, black calc(100% - 24px), transparent);
flex: 1;
}
.hc-nav::-webkit-scrollbar { display: none; }
.hc-nav-link {
position: relative;
display: inline-flex;
align-items: center;
gap: 0.4rem;
padding: 0.4rem 0.7rem;
border-radius: var(--hc-radius-sm);
font-size: 0.8125rem;
font-weight: 500;
color: var(--hc-text-muted);
text-decoration: none;
white-space: nowrap;
transition: color 150ms, background 150ms;
}
.hc-nav-link:hover {
color: var(--hc-text);
background: hsl(220 20% 14%);
}
.hc-nav-link:focus-visible {
outline: 2px solid hsl(185 80% 50% / 0.6);
outline-offset: 1px;
}
.hc-nav-link:active { transform: translateY(1px); transition-duration: 50ms; }
.hc-nav-link.active {
color: var(--hc-primary);
}
.hc-nav-link.active::after {
content: '';
position: absolute;
bottom: -2px;
left: 0.7rem;
right: 0.7rem;
height: 2px;
background: var(--hc-primary);
border-radius: 9999px;
}
/* ── Card ── */
.hc-card {
background: var(--hc-gradient-card);
border: 1px solid hsl(220 15% 18% / 0.5);
border-radius: var(--hc-radius);
box-shadow: var(--hc-shadow-card);
padding: 1.25rem;
transition: transform 200ms, border-color 200ms;
}
.hc-card:hover {
transform: translateY(-2px);
border-color: hsl(185 80% 50% / 0.4);
}
/* ── Badge ── */
.hc-badge {
display: inline-flex;
align-items: center;
padding: 0.15rem 0.5rem;
border-radius: var(--hc-radius-pill);
border: 1px solid var(--hc-border);
font-family: var(--hc-font-mono);
font-size: 0.6875rem;
font-weight: 600;
letter-spacing: 0.08em;
}
.hc-badge.online { color: var(--hc-accent); border-color: hsl(142 70% 50% / 0.4); }
.hc-badge.offline { color: var(--hc-destructive); border-color: hsl(0 65% 50% / 0.4); }
.hc-badge.warning { color: var(--hc-warning); border-color: hsl(38 80% 60% / 0.4); }
/* ── Button ── */
.hc-btn {
display: inline-flex;
align-items: center;
gap: 0.4rem;
padding: 0.5rem 0.875rem;
border-radius: var(--hc-radius-sm);
font-family: var(--hc-font-display);
font-size: 0.8125rem;
font-weight: 500;
border: 1px solid var(--hc-border);
background: hsl(220 20% 14%);
color: var(--hc-text);
cursor: pointer;
transition: background 150ms, border-color 150ms;
}
.hc-btn:hover { background: hsl(220 20% 18%); }
.hc-btn.primary {
background: var(--hc-primary);
color: var(--hc-primary-fg);
border-color: transparent;
font-weight: 600;
box-shadow: var(--hc-shadow-glow);
}
.hc-btn.primary:hover { background: hsl(185 80% 55%); }
/* ── Section ── */
.hc-section { margin-bottom: 1.5rem; }
.hc-section-label {
font-size: 0.6875rem;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--hc-text-muted);
margin-bottom: 0.75rem;
}
/* ── Grid helpers ── */
.hc-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 0.75rem;
}
.hc-kpi-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
gap: 0.75rem;
}
/* ── Footer ── */
.hc-footer {
border-top: 1px solid var(--hc-border);
text-align: center;
padding: 1rem 1.25rem;
font-size: 0.75rem;
color: var(--hc-text-muted);
font-family: var(--hc-font-mono);
}