diff --git a/mobile/lib/screens/onboarding_tone_screen.dart b/mobile/lib/screens/onboarding_tone_screen.dart index 78ae32b..890b85f 100644 --- a/mobile/lib/screens/onboarding_tone_screen.dart +++ b/mobile/lib/screens/onboarding_tone_screen.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../state/session_state.dart'; +import '../theme/app_theme.dart'; import '../widgets/primary_gradient_button.dart'; /// Phase 1 onboarding skeleton: capture a few style samples locally. @@ -61,27 +62,29 @@ class _OnboardingToneScreenState extends State { ), body: SafeArea( child: ListView( - padding: const EdgeInsets.all(24), + padding: const EdgeInsets.fromLTRB(24, 8, 24, 32), children: [ Align( alignment: Alignment.centerLeft, child: Container( - width: 56, - height: 56, + width: 52, + height: 52, decoration: BoxDecoration( - color: scheme.primary, - borderRadius: BorderRadius.circular(16), + color: scheme.primaryContainer, + borderRadius: BorderRadius.circular(14), ), - child: Icon(Icons.record_voice_over_outlined, size: 28, color: scheme.onPrimary), + child: Icon(Icons.record_voice_over_outlined, size: 26, color: scheme.primary), ), ), - const SizedBox(height: 16), + const SizedBox(height: 18), Text('와카뷰가 따라 쓸 말투', style: theme.textTheme.headlineSmall), const SizedBox(height: 8), Text( - '자주 쓰는 짧은 문장을 3~4개 적어 주세요. 기기에만 저장되며, 초안 요청 시 참고로 씁니다. ' - '최종 문구·수집 방식은 사람 PoC 이후에 다듬습니다.', - style: theme.textTheme.bodyMedium?.copyWith(color: scheme.onSurfaceVariant), + '자주 쓰는 짧은 문장을 3~4개 적어 주세요. 기기에만 저장되며, 초안 요청 시 참고로 씁니다.', + style: theme.textTheme.bodyMedium?.copyWith( + color: scheme.onSurfaceVariant, + height: 1.45, + ), ), const SizedBox(height: 28), for (var i = 0; i < _samples.length; i++) ...[ @@ -92,16 +95,16 @@ class _OnboardingToneScreenState extends State { labelText: '샘플 ${i + 1}', hintText: i == 0 ? '예: ㅇㅇ 알겠음' : null, prefixIcon: Padding( - padding: const EdgeInsets.only(left: 4, right: 4, top: 4), + padding: const EdgeInsets.only(left: 10, right: 4), child: CircleAvatar( radius: 12, - backgroundColor: scheme.secondaryContainer, + backgroundColor: scheme.primaryContainer, child: Text( '${i + 1}', style: TextStyle( fontSize: 12, fontWeight: FontWeight.w700, - color: scheme.onSecondaryContainer, + color: scheme.onPrimaryContainer, ), ), ), @@ -110,11 +113,17 @@ class _OnboardingToneScreenState extends State { ), const SizedBox(height: 12), ], - const SizedBox(height: 12), + const SizedBox(height: 8), PrimaryGradientButton( label: '이 말투로 시작', onPressed: () => _save(markDone: true), ), + const SizedBox(height: 12), + Text( + '말투는 나중에 메뉴에서 다시 수정할 수 있습니다.', + textAlign: TextAlign.center, + style: theme.textTheme.bodySmall?.copyWith(color: scheme.onSurfaceVariant), + ), ], ), ), diff --git a/mobile/lib/theme/app_theme.dart b/mobile/lib/theme/app_theme.dart index 7aca83d..b4bfd7c 100644 --- a/mobile/lib/theme/app_theme.dart +++ b/mobile/lib/theme/app_theme.dart @@ -24,9 +24,10 @@ class AppTheme { static const inkDark = Color(0xFFF2F1EF); static const mutedDark = Color(0xFF9B9893); static const lineDark = Color(0xFF2A2D36); - static const tealBright = Color(0xFF2DD4BF); - static const tealSoftDark = Color(0xFF143D3A); - static const twinAmberDark = Color(0xFFFBBF24); + /// Dark accent — muted teal (avoid neon cyan against charcoal). + static const tealBright = Color(0xFF5EBBB0); + static const tealSoftDark = Color(0xFF1A3331); + static const twinAmberDark = Color(0xFFE0A84A); /// Kept for call sites that still reference a "brand" fill — solid teal, not a rainbow. static const brandGradient = LinearGradient( @@ -70,7 +71,7 @@ class AppTheme { brightness == Brightness.dark ? Colors.black.withValues(alpha: 0.35) : const Color(0xFF1C1B1A).withValues(alpha: 0.06); static Color mineBubble(Brightness brightness) => - brightness == Brightness.dark ? tealSoftDark : teal; + brightness == Brightness.dark ? const Color(0xFF244844) : teal; static Color mineBubbleFg(Brightness brightness) => brightness == Brightness.dark ? inkDark : Colors.white;