| version | alpha | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| name | DockLiner | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| description | A self-hosted Docker deployment manager with a warm industrial slate-and-amber identity. Designed for both desktop web dashboards and installed PWA/native shell use. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rounded |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| layout |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
DockLiner is a self-hosted deployment manager for personal Docker projects. Its visual identity — Slate Ember — pairs deep slate surfaces with a warm amber accent, evoking a control room that is serious, trustworthy, and quietly energetic. The UI must feel equally at home in a browser tab and as an installed PWA/native shell: dense information should be readable, actions should be thumb-friendly on mobile, and navigation should never scroll away.
- Logo: container-rack SVG (
/static/img/logo_dark.svg/logo_light.svg) - Wordmark: “DockLiner” set in
Cormorant Garamond(display serif) - Tone: industrial, calm, confident, no gradients unless for depth in frosted overlays.
The palette is intentionally narrow. All interactive energy comes from amber; everything else is slate neutrals.
- Primary /
{colors.primary}(#f97316): CTA buttons, active nav states, status indicators, focus rings. - Ink /
{colors.ink}(#f8fafc): Headlines, card titles, primary text. - Body /
{colors.body}(#cbd5e1): Body copy and secondary text. - Muted /
{colors.muted}(#94a3b8): Labels, placeholders, idle icons. - Canvas /
{colors.canvas}(#0f172a): Page background (dark). - Surface Soft /
{colors.surface-soft}(#1e293b): Sidebars, top/bottom bars, input backgrounds. - Surface Card /
{colors.surface-card}(#334155): Cards, panels, modals. - Hairline /
{colors.hairline}(#475569): Dividers, borders, outlines. - Error /
{colors.error}(#ef4444): Destructive actions and error states. - Success /
{colors.success}(#22c55e): Running/completed states.
Light mode inverts the surface stack while preserving the amber accent and logo geometry.
- Display: Cormorant Garamond for all headings (H1, H2, section titles).
- Body / UI: Inter for labels, buttons, tables, forms, nav labels.
- Mono: JetBrains Mono for hashes, IDs, logs, build output.
- Hierarchy is carried by size and weight, not by mixing multiple font families.
- Desktop: a fixed left sidebar (64 px, expands to 180 px on hover) carries the four primary routes (Dashboard, Projects, Downloads, Settings). The content area is inset by the sidebar width and capped at 1200 px.
- Mobile: a fixed top bar (logo + theme toggle) and a fixed bottom nav bar replace the sidebar. Content is inset for both safe areas and nav heights.
- Spacing scale: 4 px baseline.
md(12 px) for intra-component gaps,lg(16 px) for card gutters,section(32 px) for page sections.
- Cards and panels use
lg(12 px) radius. - Interactive elements use
md(8 px). - Pills, status badges, and avatars use
full. - On mobile, cards and buttons are promoted to
app(18 px) for a native feel.
- No drop shadows on desktop cards; borders separate surfaces.
- Frosted-glass bars on mobile use
backdrop-filter: blur(12px)and translucent dark/light backgrounds to avoid harsh edges against scrollable content. - Modal overlays use a dark translucent scrim with a small blur.
button-primaryis the single high-emphasis action. Use it for Deploy, Create project, Add Project.button-secondaryis for neutral actions: Cancel, Back, Edit.button-dangeris for destructive actions: Delete, Remove.cardis the default surface for grouped content.metric-cardis the compact stat tile used in the dashboard summary.status-pillcommunicates state at a glance; always include the colored dot.sidebarandbottom-navuse the same four routes and the same active treatment (amber icon + pill background).modal-boxreplaces browser-nativealert()/confirm()for destructive or blocking confirmations.inputuses the surface-soft background and amber focus glow.
- Below 768 px: sidebar hides, mobile top/bottom bars appear, touch targets enlarge to at least 40 px, cards use the app radius.
- Above 768 px: sidebar is visible; top bar and bottom nav are hidden.
- Above 1024 px: content area centers at the 1200 px max width.
- Focus rings use a 3 px amber glow (
--focus-glow). - Active states in nav and bottom nav combine both color and background change.
- Destructive modals are keyboard dismissible (Esc) and have explicit Cancel / Delete actions.
- Do mutate only fill/stroke colors of the logo SVG, never its path geometry.
- Do use token references (
{colors.primary}) instead of literal hex in component definitions. - Do update both desktop sidebar and mobile bottom nav when the theme changes.
- Don't use browser
confirm()/alert()for user-facing confirmations; usemodal-boxinstead. - Don't introduce colors outside the palette; extend the palette first.
- Don't nest component variants.
button-primary-hoveris a sibling, not a child.