diff --git a/lib/main.dart b/lib/main.dart index 7d0a9bb..161f544 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,7 +19,7 @@ import 'widgets/widgets.dart'; /// Studio's own build version. Bump on every UI commit so the /// running app self-identifies — visible in the sidebar header /// and quick-glance proof that you're seeing the current build. -const String kStudioVersion = '0.7.1'; +const String kStudioVersion = '0.7.2'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -225,7 +225,7 @@ class _Sidebar extends StatelessWidget { ), const SizedBox(height: 2), Text( - 'v$kStudioVersion · warm-minimalism', + 'v$kStudioVersion', style: FaiTheme.mono( size: 10, color: theme.colorScheme.primary, diff --git a/lib/widgets/fai_delta_mark.dart b/lib/widgets/fai_delta_mark.dart index 7c66387..604488e 100644 --- a/lib/widgets/fai_delta_mark.dart +++ b/lib/widgets/fai_delta_mark.dart @@ -112,7 +112,11 @@ class _DeltaPainter extends CustomPainter { void paint(Canvas canvas, Size size) { final cx = size.width / 2; final cy = size.height / 2; - final r = size.width * 0.42; + + // In live mode: scale the whole mark between 0.85 and 1.15 + // so the pulse is visible without staring. Idle stays at 1.0. + final scale = mode == FaiDeltaMode.live ? 0.85 + 0.30 * t : 1.0; + final r = size.width * 0.36 * scale; canvas.save(); canvas.translate(cx, cy); @@ -127,31 +131,39 @@ class _DeltaPainter extends CustomPainter { ..lineTo(-r * cos(pi / 6), r * sin(pi / 6)) ..close(); - // Glow halo for live / busy mode. + // Glow halo. In live mode the glow ring grows with the pulse + // and the alpha breathes harder. if (mode != FaiDeltaMode.idle) { final pulseStrength = mode == FaiDeltaMode.live ? t : 1.0; final glow = Paint() - ..color = color.withValues(alpha: 0.25 + 0.25 * pulseStrength) + ..color = color.withValues(alpha: 0.30 + 0.40 * pulseStrength) ..maskFilter = - MaskFilter.blur(BlurStyle.normal, 6 + 6 * pulseStrength) + MaskFilter.blur(BlurStyle.normal, 8 + 14 * pulseStrength) ..style = PaintingStyle.fill; canvas.drawPath(path, glow); } + // Filled triangle, brighter on the up-beat for live mode. + final fillAlpha = mode == FaiDeltaMode.live ? 0.15 + 0.20 * t : 0.18; + final fill = Paint() + ..color = color.withValues(alpha: fillAlpha) + ..style = PaintingStyle.fill; + canvas.drawPath(path, fill); + // Outline stroke. final stroke = Paint() ..color = color - ..strokeWidth = 2 + ..strokeWidth = 2.2 ..style = PaintingStyle.stroke ..strokeJoin = StrokeJoin.round; canvas.drawPath(path, stroke); - // Inner accent dot — pulses opacity in live mode. - final dotAlpha = mode == FaiDeltaMode.live ? 0.4 + 0.6 * t : 1.0; + // Inner accent dot. + final dotAlpha = mode == FaiDeltaMode.live ? 0.55 + 0.45 * t : 1.0; final dot = Paint() ..color = color.withValues(alpha: dotAlpha) ..style = PaintingStyle.fill; - canvas.drawCircle(Offset(0, r * 0.15), r * 0.14, dot); + canvas.drawCircle(Offset(0, r * 0.18), r * 0.16, dot); canvas.restore(); } diff --git a/pubspec.yaml b/pubspec.yaml index 5cf6026..c74ed6d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: fai_studio description: "F∆I Studio — desktop GUI for the F∆I hub" publish_to: 'none' -version: 0.7.1 +version: 0.7.2 environment: sdk: ^3.11.0-200.1.beta