feat: Forge design system app-wide + Stacks i18n
Build / build (push) Successful in 10m47s

Promotes the Forge visual language from the Stacks feature into a
global design system used across the app:

- app.css: Forge utilities (dot-grid backdrop, eyebrow, ember,
  display/lede, status pills, stat grid, panels, registration
  marks, alert, terminal, buttons). CSS variables alias the forge
  display font to the app's standard sans stack (Inter, now
  properly self-hosted via @fontsource/inter).
- +layout.svelte: reskinned sidebar brand, active nav rail,
  mobile top bar, global h1/h2 typography overrides, main dot-grid
  backdrop.
- Shared components reskinned: EmptyState (breathing-ember empty
  mark), StatusBadge (mono pills with pulse), ConfirmDialog
  (registration marks + forge buttons).
- Dashboard (+page.svelte): ForgeHero header, forge-stat-grid,
  Instrument-style section titles with accent.
- New ForgeHero component for reusable hero headers.

Stacks feature fully localized (EN + RU):
- 80+ keys under stacks.* covering list, new, detail, revisions,
  logs, errors, status labels, delete/rollback dialogs.
- Russian uses forge vocabulary (куются/наковальня/куём/etc).
- $t() wired through all three Stacks pages.
This commit is contained in:
2026-04-16 04:17:42 +03:00
parent 75424a5f25
commit 0fd92fdfa3
14 changed files with 1251 additions and 343 deletions
+122
View File
@@ -890,5 +890,127 @@
"language": {
"en": "English",
"ru": "Russian"
},
"stacks": {
"eyebrow": "THE FORGE",
"title": "Stacks",
"lede": "Compose blueprints, forged as <em>atomic units</em>. Spin up services, iterate on revisions, roll back without breaking a sweat.",
"newStack": "New stack",
"refresh": "Refresh",
"total": "Total",
"running": "Running",
"deploying": "Forging",
"failed": "Failed",
"stopped": "Cold",
"empty": {
"title": "The anvil is cold.",
"desc": "Upload a docker-compose.yml to forge your first stack."
},
"card": {
"noDescription": "No description",
"updated": "Updated",
"start": "Start",
"stop": "Stop",
"delete": "Delete",
"open": "Open"
},
"new": {
"eyebrow": "NEW BLUEPRINT",
"title": "Forge a new stack.",
"lede": "Upload or paste a <code>docker-compose.yml</code>. All services in the blueprint deploy as a single atomic unit.",
"back": "Stacks",
"name": "Name",
"namePlaceholder": "my-app-stack",
"nameHint": "Lowercase, hyphenated. Used as the compose project name.",
"description": "Description",
"descriptionPlaceholder": "What does this stack do?",
"composeYaml": "Compose YAML",
"required": "required",
"optional": "optional",
"loadSample": "Load sample",
"uploadFile": "Upload file",
"dropHere": "Drop a docker-compose.yml here",
"dropSub": "or click to browse · or use <strong>Load sample</strong> above",
"lines": "{n} lines",
"bytes": "{n} bytes",
"clear": "Clear",
"deployImmediate": "Deploy immediately",
"deployHint": "Strike while the iron's hot. If unchecked, the stack is saved cold.",
"cancel": "Cancel",
"forging": "Forging…",
"forgeAndDeploy": "Forge & deploy",
"saveBlueprint": "Save blueprint",
"errorRequired": "Name and compose YAML are required.",
"errorCreate": "Failed to create stack"
},
"detail": {
"manifest": "MANIFEST",
"loading": "Loading blueprint…",
"composeProject": "COMPOSE PROJECT",
"noDescription": "No description",
"refresh": "Refresh",
"start": "Start",
"stop": "Stop",
"delete": "Delete",
"fault": "FAULT",
"err": "ERR",
"stats": {
"services": "Services",
"servicesSub": "in blueprint",
"running": "Running",
"runningSub": "active containers",
"revisions": "Revisions",
"revisionsSub": "in history",
"current": "Current",
"currentSub": "deployed"
},
"services": {
"title": "Services",
"count": "{n} on the floor",
"empty": "— no containers running —"
},
"tabs": {
"blueprint": "Blueprint",
"revisions": "Revisions",
"logs": "Logs"
},
"yaml": {
"currentRevision": "Current revision",
"edit": "Edit & redeploy",
"cancel": "Cancel",
"forging": "Forging…",
"deployNew": "Deploy new revision"
},
"revisions": {
"current": "CURRENT",
"by": "by",
"rollback": "← Rollback to this revision",
"rollbackTitle": "Rollback to revision?",
"rollbackMessage": "Create a new revision from rev {n} and redeploy the stack.",
"rollbackConfirm": "Rollback"
},
"logs": {
"service": "Service:",
"allServices": "All services",
"fetching": "Fetching…",
"fetch": "Fetch logs",
"empty": "— no logs loaded. tap fetch. —"
},
"delete": {
"title": "Delete stack?",
"messageBase": "This runs 'docker compose down' and removes \"{name}\".",
"messageVolumes": " Named volumes will also be removed.",
"confirm": "Delete"
},
"errors": {
"load": "Failed to load stack",
"stop": "Stop failed",
"start": "Start failed",
"update": "Update failed",
"rollback": "Rollback failed",
"delete": "Delete failed",
"fetchLogs": "Failed to load logs"
}
}
}
}