| name | dashboard-styling |
| description | Guide for ReviewFlow dashboard styling conventions. Use when creating/modifying dashboard UI, optimizing styles, or resolving layout issues. |
Dashboard Styling Guide
Note: ReviewFlow does not use TailwindCSS or React. The dashboard is built with plain HTML, CSS custom properties, and vanilla JavaScript. This skill covers the styling conventions for the dashboard.
Activation
This skill activates for:
- Creating or modifying dashboard UI elements
- Optimizing styles and performance
- Resolving layout/responsive issues
- Reviewing CSS conventions
Principles
CSS Custom Properties → Semantic naming → Consistent spacing
Always use existing CSS custom properties (design tokens) before adding new values.
Design Tokens
Available tokens
Tokens are defined as CSS custom properties in src/interface-adapters/views/dashboard/styles.css:
:root {
--nsc-bg-base: #0b1220;
--nsc-bg-elevated: #111a2b;
--nsc-bg-surface: #162235;
--nsc-bg-surface-strong: #1c2a40;
--nsc-border-soft: rgba(163, 192, 224, 0.16);
--nsc-border-strong: rgba(163, 192, 224, 0.28);
--nsc-text-primary: #e8efff;
--nsc-text-secondary: #b2c1dd;
--nsc-text-muted: #8393b0;
--nsc-focus: #7ad8ff;
--nsc-action: #60c7ff;
--nsc-warning: #f4bc71;
--nsc-success: #62d3a8;
--nsc-danger: #f07f88;
}
background: var(--nsc-bg-surface);
color: var(--nsc-text-primary);
border: 1px solid var(--nsc-border-soft);
background: #162235;
color: #e8efff;
Best Practices
Naming conventions
Use semantic, BEM-inspired class names:
.review-card { }
.review-card__header { }
.review-card__score { }
.review-card--critical { }
.card1 { }
.blue-box { }
.mt20 { }
Property order
Recommended order in declarations:
- Layout (
display, flex, grid)
- Positioning (
position, top, left)
- Box model (
margin, padding, width, height)
- Typography (
font-, text-, line-height)
- Visual (
background, border, color)
- Misc (
cursor, opacity, transition)
Reusable patterns
Extract repeated patterns into shared classes:
.surface {
background: var(--nsc-bg-surface);
border: 1px solid var(--nsc-border-soft);
border-radius: 8px;
padding: 16px;
}
.surface--elevated {
background: var(--nsc-bg-elevated);
}
Responsive Design
Mobile-first approach
.dashboard-grid {
display: flex;
flex-direction: column;
gap: 16px;
}
@media (min-width: 768px) {
.dashboard-grid {
flex-direction: row;
flex-wrap: wrap;
}
}
@media (min-width: 1024px) {
.dashboard-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
}
File structure
src/interface-adapters/views/dashboard/
├── index.html # Dashboard HTML template
└── styles.css # All dashboard styles
Before adding styles
- Check if a CSS custom property already exists for the value
- Check if a similar class already exists in
styles.css
- If not, add using existing naming conventions
Anti-patterns
To avoid
style="background-color: #2a4054"
/* Hardcoded colors instead of tokens */
color: #e8efff; /* Use var(--nsc-text-primary) */
/* !important (except extreme cases) */
padding: 16px !important;
/* Deep nesting */
.dashboard .main .section .card .header .title { }
/* Prefer: .card__title { } */
/* Magic numbers without explanation */
margin-top: 37px;
Good practices
.status-badge {
background: var(--nsc-bg-surface-strong);
color: var(--nsc-text-secondary);
border: 1px solid var(--nsc-border-soft);
border-radius: 4px;
padding: 4px 8px;
font-size: 0.75rem;
}
.status-badge--success {
color: var(--nsc-success);
border-color: var(--nsc-success);
}
.status-badge--danger {
color: var(--nsc-danger);
border-color: var(--nsc-danger);
}
Debugging
Recommended tools
- Browser DevTools -> Inspect element, computed styles
- Check CSS custom property values in the
:root selector
- Use the Elements panel to verify which styles are being applied or overridden