feat(flutter): token + asset sync from web; gen_tokens.dart

shared/fabledsword.tokens.json mirrors web/src/lib/styles/tokens.json;
assets/error-copy.json mirrors the web's error-code copy table;
assets/svg/album-fallback.svg mirrors the web placeholder. Together
these give Flutter the same visual + copy starting point as the SPA.

tool/gen_tokens.dart emits lib/theme/tokens.dart from the JSON; the
generated file is committed so CI can verify the JSON and the Dart
file haven't drifted (gate added in Task 21).

tool/sync_shared.sh mkdirs the shared/ + assets/ destinations before
copying so the script works on a fresh checkout (the original
plan-text shape only mkdir'd assets/svg).

pubspec.yaml assets block uncommented now that the three asset paths
exist on disk.
This commit is contained in:
2026-05-02 16:55:21 -04:00
parent d8bfdc1733
commit f97cf6eb38
7 changed files with 156 additions and 7 deletions
+27
View File
@@ -0,0 +1,27 @@
// GENERATED — do not edit. Source: shared/fabledsword.tokens.json
// Run `dart run tool/gen_tokens.dart` to regenerate.
import 'package:flutter/material.dart';
class FabledSwordTokens {
static const Color obsidian = Color(0xFF14171A);
static const Color iron = Color(0xFF1E2228);
static const Color slate = Color(0xFF2C313A);
static const Color pewter = Color(0xFF3F4651);
static const Color parchment = Color(0xFFE8E4D8);
static const Color vellum = Color(0xFFC2BFB4);
static const Color ash = Color(0xFF9C9A92);
static const Color moss = Color(0xFF4A5D3F);
static const Color bronze = Color(0xFF8B7355);
static const Color oxblood = Color(0xFF6B2118);
static const Color warning = Color(0xFF8B6F1E);
static const Color error = Color(0xFFC04A1F);
static const Color info = Color(0xFF3D5A6E);
static const Color accent = Color(0xFF4A6B5C);
static const double radiusSm = 4;
static const double radiusMd = 8;
static const double radiusLg = 12;
static const double radiusXl = 16;
static const String fontDisplay = "Fraunces";
static const String fontBody = "Inter";
static const String fontMono = "JetBrains Mono";
}