diff --git a/lib/main_dev.dart b/lib/main_dev.dart index f223707..e23ba1d 100644 --- a/lib/main_dev.dart +++ b/lib/main_dev.dart @@ -25,6 +25,7 @@ import 'screens/onboarding.dart'; import 'screens/splash.dart'; import 'theme/tokens.dart'; import 'theme/tweaks.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; void main() => runApp(const DevApp()); @@ -156,13 +157,19 @@ class _DevLauncher extends StatelessWidget { child: Text( '화면 점검 (DEV)', style: TextStyle( - fontSize: 22, + fontSize: SeedType.title, fontWeight: FontWeight.w800, color: t.fg, ), ), ), - Text('다크', style: TextStyle(color: t.fgMuted, fontSize: 13)), + Text( + '다크', + style: TextStyle( + color: t.fgMuted, + fontSize: SeedType.label, + ), + ), const SizedBox(width: 6), Switch(value: dark, onChanged: onToggleDark), ], @@ -170,7 +177,7 @@ class _DevLauncher extends StatelessWidget { const SizedBox(height: 6), Text( '서버 없이 목 데이터로 동작합니다.', - style: TextStyle(color: t.fgMuted, fontSize: 13), + style: TextStyle(color: t.fgMuted, fontSize: SeedType.label), ), const SizedBox(height: 20), Expanded( @@ -213,10 +220,10 @@ class _LauncherTile extends StatelessWidget { final DkTokens t = DkTheme.of(context); return Material( color: t.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), child: InkWell( onTap: onTap, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 16), child: Row( @@ -228,7 +235,7 @@ class _LauncherTile extends StatelessWidget { Text( title, style: TextStyle( - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, color: t.fg, ), @@ -236,7 +243,10 @@ class _LauncherTile extends StatelessWidget { const SizedBox(height: 4), Text( desc, - style: TextStyle(fontSize: 13, color: t.fgMuted), + style: TextStyle( + fontSize: SeedType.label, + color: t.fgMuted, + ), ), ], ), diff --git a/lib/parts/app_header.dart b/lib/parts/app_header.dart index 6ee3536..85172a3 100644 --- a/lib/parts/app_header.dart +++ b/lib/parts/app_header.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_bell_button.dart'; import '../widgets/dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 화면 상단 헤더(인사 + 알림 벨). 프로토타입 `AppHeader`. /// @@ -45,7 +46,7 @@ class AppHeader extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon('chevL', size: 22, color: t.fg), ), @@ -61,7 +62,7 @@ class AppHeader extends StatelessWidget { subtitle!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), diff --git a/lib/parts/dday_hero.dart b/lib/parts/dday_hero.dart index acdce9b..3c54c06 100644 --- a/lib/parts/dday_hero.dart +++ b/lib/parts/dday_hero.dart @@ -8,6 +8,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_badge.dart'; import '../widgets/dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// D-Day 히어로 카드. 프로토타입 `DdayHero`. /// @@ -67,7 +68,7 @@ class DdayHero extends StatelessWidget { event.category, style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: Color(0xB3FFFFFF), ), @@ -104,7 +105,7 @@ class DdayHero extends StatelessWidget { overflow: TextOverflow.ellipsis, style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w600, color: Color(0xE0FFFFFF), ), @@ -114,7 +115,7 @@ class DdayHero extends StatelessWidget { eventDateLabel(event), style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, color: Color(0x99FFFFFF), ), ), diff --git a/lib/parts/metric_bar.dart b/lib/parts/metric_bar.dart index b3e9bd2..5522ad5 100644 --- a/lib/parts/metric_bar.dart +++ b/lib/parts/metric_bar.dart @@ -4,6 +4,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_card.dart'; import '../widgets/dk_feedback.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 주간 지표 막대. 프로토타입 `MetricBar`. /// @@ -46,7 +47,7 @@ class MetricBar extends StatelessWidget { ), const SizedBox(height: 14), ClipRRect( - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), child: Stack( children: [ Container(height: 10, color: t.bgPress), @@ -61,7 +62,7 @@ class MetricBar extends StatelessWidget { width: c.maxWidth * v, decoration: BoxDecoration( color: t.success, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), ), ); @@ -75,7 +76,7 @@ class MetricBar extends StatelessWidget { TextSpan( style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -130,7 +131,7 @@ class MetricBar extends StatelessWidget { decimals: isInt ? 0 : 1, style: TextStyle( fontFamily: 'WantedSans', - fontSize: 25, + fontSize: SeedType.heading, fontWeight: FontWeight.w800, letterSpacing: -0.75, color: color, @@ -141,7 +142,7 @@ class MetricBar extends StatelessWidget { '시간', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -153,7 +154,7 @@ class MetricBar extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/parts/task_row.dart b/lib/parts/task_row.dart index 08d0b74..87e25f9 100644 --- a/lib/parts/task_row.dart +++ b/lib/parts/task_row.dart @@ -6,6 +6,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_badge.dart'; import '../widgets/dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 완료 체크박스 26 radius 9. done이면 success 채움 + check. class DkCheckbox extends StatelessWidget { @@ -28,7 +29,7 @@ class DkCheckbox extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: done ? t.success : const Color(0x00000000), - borderRadius: BorderRadius.circular(9), + borderRadius: BorderRadius.circular(SeedRadius.chip), border: done ? null : Border.all(color: t.borderStrong, width: 2), ), child: done @@ -80,7 +81,7 @@ class TaskRow extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 13), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), border: Border.all(color: t.borderSubtle), boxShadow: t.shadows.s1, ), @@ -101,7 +102,7 @@ class TaskRow extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w600, letterSpacing: -0.15, color: done ? t.fgDisabled : t.fg, @@ -148,7 +149,7 @@ class TaskRow extends StatelessWidget { fmtMins(task.mins), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -176,7 +177,7 @@ class TaskRow extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: h.color, ), @@ -190,7 +191,7 @@ class TaskRow extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.infoFg, ), diff --git a/lib/screens/auth_loading.dart b/lib/screens/auth_loading.dart index 3a5c074..2653bfb 100644 --- a/lib/screens/auth_loading.dart +++ b/lib/screens/auth_loading.dart @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_logo.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 로그인(외부 OAuth 복귀 → server provisioning) 중 표시하는 **브랜드 로딩 화면**. /// @@ -52,7 +53,7 @@ class _AuthLoadingViewState extends State widget.message, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fgSubtle, ), diff --git a/lib/screens/calc_sheet.dart b/lib/screens/calc_sheet.dart index 356f3cb..2756702 100644 --- a/lib/screens/calc_sheet.dart +++ b/lib/screens/calc_sheet.dart @@ -5,6 +5,7 @@ import '../theme/tokens.dart'; import '../widgets/dk_icon.dart'; import '../widgets/dk_segmented.dart'; import '../widgets/dk_sheet.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 계산기 본문(일반 + 공학). 프로토타입 `Calculator`. /// @@ -154,14 +155,14 @@ class _CalculatorState extends State { ), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), border: Border.all(color: t.border, width: 1.5), ), child: Text( _deg ? 'DEG' : 'RAD', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: t.fgMuted, ), @@ -192,7 +193,7 @@ class _CalculatorState extends State { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'WantedSans', - fontSize: 34, + fontSize: SeedType.stat, fontWeight: FontWeight.w700, letterSpacing: -1.02, height: 1.1, @@ -206,7 +207,7 @@ class _CalculatorState extends State { (preview != null && !_justEq && !endsOp) ? '= $preview' : '', style: TextStyle( fontFamily: 'WantedSans', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -423,7 +424,7 @@ class _CalcButtonState extends State<_CalcButton> { alignment: Alignment.center, decoration: BoxDecoration( color: c.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), ), child: widget.spec.icon != null ? DkIcon(widget.spec.icon!, size: 22, color: c.fg) diff --git a/lib/screens/debt/debt_screen.dart b/lib/screens/debt/debt_screen.dart index 9aee6a9..66e5857 100644 --- a/lib/screens/debt/debt_screen.dart +++ b/lib/screens/debt/debt_screen.dart @@ -10,6 +10,7 @@ import '../../widgets/dk_card.dart'; import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 미룬 시간 상세 서브화면. 프로토타입 `DebtScreen`. /// @@ -112,7 +113,7 @@ class _DebtScreenState extends State { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, height: 1.6, color: t.fgSubtle, ), @@ -138,7 +139,7 @@ class _DebtScreenState extends State { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon('chevL', size: 22, color: t.fg), ), @@ -148,7 +149,7 @@ class _DebtScreenState extends State { '미룬 시간', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 22, + fontSize: SeedType.title, fontWeight: FontWeight.w800, letterSpacing: -0.66, color: t.fgStrong, @@ -184,7 +185,7 @@ class _DebtScreenState extends State { '아직 못 한 일, 사라지지 않아요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: Color(0xD1FFFFFF), ), @@ -210,7 +211,7 @@ class _DebtScreenState extends State { '시간', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w600, color: white, ), @@ -244,7 +245,7 @@ class _DebtScreenState extends State { label, style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, color: Color(0xB3FFFFFF), ), ), @@ -253,7 +254,7 @@ class _DebtScreenState extends State { value, style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, color: Color(0xFFFFFFFF), ), @@ -278,7 +279,7 @@ class _DebtScreenState extends State { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.15, color: t.fg, @@ -294,7 +295,7 @@ class _DebtScreenState extends State { TextSpan( style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/screens/focus/focus_screen.dart b/lib/screens/focus/focus_screen.dart index 2d36d96..75bc1c7 100644 --- a/lib/screens/focus/focus_screen.dart +++ b/lib/screens/focus/focus_screen.dart @@ -17,6 +17,7 @@ import '../me/settings_dialogs.dart'; import '../me/settings_section.dart'; import 'focus_controller.dart'; import 'skins.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; const String _prefsKey = 'dk_focus'; @@ -194,7 +195,7 @@ class _FocusScreenState extends State { alignment: Alignment.center, decoration: BoxDecoration( color: t.primarySubtle, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: DkIcon( 'sliders', @@ -229,7 +230,7 @@ class _FocusScreenState extends State { '스킨', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, letterSpacing: 0.48, color: t.fgSubtle, @@ -291,7 +292,7 @@ class _FocusScreenState extends State { '태스크에서 "집중 시작"으로 연결할 수 있어요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -303,7 +304,7 @@ class _FocusScreenState extends State { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 9), decoration: BoxDecoration( color: Color.lerp(modeColor, t.bg, 0.88), - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), child: Row( mainAxisSize: MainAxisSize.min, @@ -316,7 +317,7 @@ class _FocusScreenState extends State { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: modeColor, ), @@ -409,7 +410,7 @@ class _FocusScreenState extends State { alignment: Alignment.center, decoration: BoxDecoration( color: t.success, - borderRadius: BorderRadius.circular(13), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: const DkIcon( 'check', @@ -427,7 +428,7 @@ class _FocusScreenState extends State { '집중을 마쳤어요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w700, color: t.successFg, ), @@ -438,7 +439,7 @@ class _FocusScreenState extends State { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgMuted, ), @@ -479,7 +480,7 @@ class _FocusScreenState extends State { '오늘 집중', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: t.fg, @@ -489,7 +490,7 @@ class _FocusScreenState extends State { '${_c.sessions} / $goal회', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -507,7 +508,7 @@ class _FocusScreenState extends State { alignment: Alignment.center, decoration: BoxDecoration( color: i < _c.sessions ? modeColor : t.bgPress, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon( 'focus', @@ -533,7 +534,7 @@ class _FocusScreenState extends State { '누적 ${fmtMins(_c.sessions * widget.settings.pomodoroFocus)} 집중 · 4회마다 긴 휴식을 권해요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/screens/focus/skins.dart b/lib/screens/focus/skins.dart index 12ed96c..2fd129d 100644 --- a/lib/screens/focus/skins.dart +++ b/lib/screens/focus/skins.dart @@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart'; import '../../theme/tokens.dart'; import '../../widgets/dk_ring.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 스킨 공통 프로퍼티. class FocusSkinProps { @@ -77,7 +78,7 @@ class SkinMinimal extends StatelessWidget { props.stateText, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w700, letterSpacing: 0.56, color: props.color, @@ -101,14 +102,14 @@ class SkinMinimal extends StatelessWidget { props.sub, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fgSubtle, ), ), const SizedBox(height: 12), ClipRRect( - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), child: SizedBox( width: 220, height: 5, @@ -236,7 +237,7 @@ class SkinFlip extends StatelessWidget { props.stateText, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w700, letterSpacing: 0.56, color: props.color, @@ -271,7 +272,7 @@ class SkinFlip extends StatelessWidget { props.sub, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -291,14 +292,14 @@ class _FlipDigit extends StatelessWidget { Widget build(BuildContext context) { final DkTokens t = DkTheme.of(context); return ClipRRect( - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), child: Container( width: 56, height: 78, alignment: Alignment.center, decoration: BoxDecoration( color: t.fgStrong, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), boxShadow: t.shadows.s2, ), child: Stack( @@ -366,7 +367,7 @@ class _Readout extends StatelessWidget { props.stateText, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w700, letterSpacing: 0.27, color: stateColor, @@ -390,7 +391,7 @@ class _Readout extends StatelessWidget { props.sub, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), diff --git a/lib/screens/loading_skeleton.dart b/lib/screens/loading_skeleton.dart index 28ff31d..e8861dc 100644 --- a/lib/screens/loading_skeleton.dart +++ b/lib/screens/loading_skeleton.dart @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_skeleton.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 초기 데이터 로딩 화면(토스·당근 스타일 스켈레톤). 밋밋한 "불러오는 중…" 텍스트 대신 /// 최종 레이아웃(인사·제목 → 요약 카드 → 할 일 리스트)의 윤곽을 회색 플레이스홀더 + shimmer 로 보여준다. @@ -55,7 +56,7 @@ class _RowSkeleton extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), border: Border.all(color: t.borderSubtle), ), child: Row( diff --git a/lib/screens/login.dart b/lib/screens/login.dart index 8df55bf..37b80ea 100644 --- a/lib/screens/login.dart +++ b/lib/screens/login.dart @@ -190,7 +190,7 @@ class _LoginScreenState extends State { height: 54, decoration: BoxDecoration( color: s.bg, - borderRadius: BorderRadius.circular(15), + borderRadius: BorderRadius.circular(SeedRadius.md), border: s.bordered ? Border.all(color: t.border, width: 1.5) : null, ), child: Stack( @@ -200,7 +200,7 @@ class _LoginScreenState extends State { isBusy ? '연결 중…' : s.label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15.5, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.155, color: s.fg, @@ -248,7 +248,7 @@ class _Hero extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 25, + fontSize: SeedType.heading, fontWeight: FontWeight.w800, letterSpacing: -0.75, height: 1.3, @@ -261,7 +261,7 @@ class _Hero extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w500, height: 1.55, color: t.fgSubtle, @@ -281,7 +281,7 @@ class _LegalNote extends StatelessWidget { final DkTokens t = DkTheme.of(context); final TextStyle base = TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, height: 1.6, color: t.fgSubtle, @@ -320,13 +320,13 @@ class _ErrorBanner extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), decoration: BoxDecoration( color: t.dangerSubtle, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: Text( message, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.danger, ), diff --git a/lib/screens/me/calendar_sync_screen.dart b/lib/screens/me/calendar_sync_screen.dart index 55e2936..aa9ff5a 100644 --- a/lib/screens/me/calendar_sync_screen.dart +++ b/lib/screens/me/calendar_sync_screen.dart @@ -9,6 +9,7 @@ import '../../widgets/dk_brand_mark.dart'; import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 캘린더 연동 설정 서브화면(나>설정>캘린더 연동, 이슈 #59 / FRD 4.12). /// @@ -91,7 +92,7 @@ class CalendarSyncScreen extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, height: 1.6, color: t.fgSubtle, ), @@ -107,7 +108,7 @@ class CalendarSyncScreen extends StatelessWidget { padding: const EdgeInsets.all(18), decoration: BoxDecoration( color: t.primarySubtle, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), ), child: Row( children: [ @@ -118,7 +119,7 @@ class CalendarSyncScreen extends StatelessWidget { '연결된 캘린더가 없어요. 제공자를 연결하면 외부 일정을 한 화면에서 볼 수 있어요.', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, height: 1.5, fontWeight: FontWeight.w600, color: t.primary, @@ -136,7 +137,7 @@ class CalendarSyncScreen extends StatelessWidget { padding: const EdgeInsets.fromLTRB(16, 14, 16, 14), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), border: Border.all(color: t.borderSubtle), boxShadow: t.shadows.s1, ), @@ -155,7 +156,7 @@ class CalendarSyncScreen extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: meta.color.withValues(alpha: 0.14), - borderRadius: BorderRadius.circular(11), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: Container( width: 12, @@ -175,7 +176,7 @@ class CalendarSyncScreen extends StatelessWidget { meta.label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, color: t.fg, ), @@ -185,7 +186,7 @@ class CalendarSyncScreen extends StatelessWidget { _subtitle(conn), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, color: t.fgSubtle, ), ), @@ -255,7 +256,7 @@ class CalendarSyncScreen extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon('chevL', size: 22, color: t.fg), ), @@ -265,7 +266,7 @@ class CalendarSyncScreen extends StatelessWidget { '캘린더 연동', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 22, + fontSize: SeedType.title, fontWeight: FontWeight.w800, letterSpacing: -0.66, color: t.fgStrong, diff --git a/lib/screens/me/linked_accounts_section.dart b/lib/screens/me/linked_accounts_section.dart index bf674a6..8181c90 100644 --- a/lib/screens/me/linked_accounts_section.dart +++ b/lib/screens/me/linked_accounts_section.dart @@ -5,6 +5,7 @@ import '../../theme/tokens.dart'; import '../../widgets/dk_brand_mark.dart'; import '../../widgets/dk_button.dart'; import 'settings_dialogs.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 나 탭 '연동 계정' 섹션(이슈 #10, ADR-0014). /// @@ -92,7 +93,7 @@ class _LinkedAccountsSectionState extends State { padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), border: Border.all(color: t.borderSubtle), ), child: Column( @@ -102,7 +103,7 @@ class _LinkedAccountsSectionState extends State { '연동 계정', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w800, color: t.fgStrong, ), @@ -112,7 +113,7 @@ class _LinkedAccountsSectionState extends State { '로그인에 사용할 소셜 계정을 연결하거나 해제할 수 있어요.', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, color: t.fgMuted, ), ), @@ -128,7 +129,7 @@ class _LinkedAccountsSectionState extends State { _error!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, color: t.danger, ), ), @@ -187,7 +188,7 @@ class _LinkedAccountsSectionState extends State { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w600, color: t.fg, ), @@ -203,13 +204,13 @@ class _LinkedAccountsSectionState extends State { padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(8), + borderRadius: BorderRadius.circular(SeedRadius.chip), ), child: Text( text, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: t.fgMuted, ), diff --git a/lib/screens/me/me_screen.dart b/lib/screens/me/me_screen.dart index b4519b7..6868506 100644 --- a/lib/screens/me/me_screen.dart +++ b/lib/screens/me/me_screen.dart @@ -12,6 +12,7 @@ import '../../widgets/dk_icon.dart'; import 'linked_accounts_section.dart'; import 'settings_dialogs.dart'; import 'settings_section.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 나 탭. 프로토타입 `MeScreen`. /// @@ -231,7 +232,7 @@ class MeScreen extends StatelessWidget { user.nickname, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 20, + fontSize: SeedType.title, fontWeight: FontWeight.w800, letterSpacing: -0.6, color: t.fgStrong, @@ -242,7 +243,7 @@ class MeScreen extends StatelessWidget { user.email ?? '이메일 미등록', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, color: t.fgSubtle, ), ), @@ -299,7 +300,7 @@ class MeScreen extends StatelessWidget { suffix: suffix, style: TextStyle( fontFamily: 'WantedSans', - fontSize: 22, + fontSize: SeedType.title, fontWeight: FontWeight.w800, letterSpacing: -0.66, color: t.fgStrong, @@ -310,7 +311,7 @@ class MeScreen extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 11.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: t.fgSubtle, ), diff --git a/lib/screens/me/settings_dialogs.dart b/lib/screens/me/settings_dialogs.dart index 9667998..29dc6e0 100644 --- a/lib/screens/me/settings_dialogs.dart +++ b/lib/screens/me/settings_dialogs.dart @@ -5,6 +5,7 @@ import '../../widgets/dk_alert.dart'; import '../../widgets/dk_button.dart'; import '../../widgets/dk_sheet.dart'; import '../sheets/sheet_fields.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 계정/설정 다이얼로그 모음(이슈 #56) — 프로필 수정·값 선택·2단계 탈퇴 확인. /// @@ -70,7 +71,7 @@ class _ProfileEditFormState extends State<_ProfileEditForm> { '닉네임', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -236,7 +237,7 @@ Future _showOptionPicker( ), decoration: BoxDecoration( color: opt.value == current ? t.primarySubtle : t.bg, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), border: Border.all( color: opt.value == current ? t.primary : t.borderSubtle, width: opt.value == current ? 1.5 : 1, @@ -246,7 +247,7 @@ Future _showOptionPicker( opt.label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w600, // 옵션 강조색(예: 일요일 빨강)이 있으면 선택 여부와 무관하게 우선. color: @@ -283,7 +284,7 @@ Future _showConfirm( body, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, height: 1.45, color: t.fgSubtle, ), diff --git a/lib/screens/me/settings_section.dart b/lib/screens/me/settings_section.dart index 3d2b1a8..7ca9477 100644 --- a/lib/screens/me/settings_section.dart +++ b/lib/screens/me/settings_section.dart @@ -7,6 +7,7 @@ import '../../theme/tokens.dart'; import '../../widgets/dk_badge.dart'; import '../../widgets/dk_icon.dart'; import 'settings_dialogs.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 토글 스위치. 프로토타입 `Toggle`: 48×28 pill(on=primary), 노브 24 흰색. class DkToggle extends StatelessWidget { @@ -28,7 +29,7 @@ class DkToggle extends StatelessWidget { alignment: value ? Alignment.centerRight : Alignment.centerLeft, decoration: BoxDecoration( color: value ? t.primary : t.borderStrong, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), child: Container( width: 24, @@ -70,7 +71,7 @@ class SettingGroup extends StatelessWidget { title!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, letterSpacing: 0.38, color: t.fgSubtle, @@ -158,7 +159,7 @@ class SettingRow extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: comingSoon ? t.bgSubtle : (iconBg ?? t.bgPress), - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon( icon!, @@ -174,7 +175,7 @@ class SettingRow extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: labelColor, ), @@ -192,7 +193,7 @@ class SettingRow extends StatelessWidget { value!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w500, color: valueColor ?? t.fgSubtle, ), @@ -413,7 +414,7 @@ class _AppVersionLabelState extends State<_AppVersionLabel> { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgDisabled, ), diff --git a/lib/screens/nickname_setup_screen.dart b/lib/screens/nickname_setup_screen.dart index 5bab7bb..ce90b50 100644 --- a/lib/screens/nickname_setup_screen.dart +++ b/lib/screens/nickname_setup_screen.dart @@ -5,6 +5,7 @@ import '../theme/tokens.dart'; import '../widgets/dk_button.dart'; import '../widgets/dk_logo.dart'; import 'sheets/sheet_fields.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 신규 가입 직후 닉네임 설정 화면(모든 provider 공통). /// @@ -91,7 +92,7 @@ class _NicknameSetupScreenState extends State { '닉네임을 정해주세요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 24, + fontSize: SeedType.heading, fontWeight: FontWeight.w800, letterSpacing: -0.03 * 24, color: t.fgStrong, @@ -102,7 +103,7 @@ class _NicknameSetupScreenState extends State { '이어서에서 사용할 이름이에요. 추천 닉네임을 그대로 쓰거나 바꿔도 좋아요.', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, height: 1.5, color: t.fgSubtle, ), @@ -122,7 +123,7 @@ class _NicknameSetupScreenState extends State { '🎲 다른 닉네임 추천', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.primary, ), @@ -135,7 +136,7 @@ class _NicknameSetupScreenState extends State { '닉네임 저장에 실패했어요. 잠시 후 다시 시도해 주세요.', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, color: t.danger, ), ), @@ -146,7 +147,7 @@ class _NicknameSetupScreenState extends State { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, color: t.fgMuted, ), ), diff --git a/lib/screens/onboarding.dart b/lib/screens/onboarding.dart index cc6edae..b375dfe 100644 --- a/lib/screens/onboarding.dart +++ b/lib/screens/onboarding.dart @@ -63,7 +63,7 @@ class _OnboardingScreenState extends State { '건너뛰기', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -94,7 +94,7 @@ class _OnboardingScreenState extends State { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15.5, + fontSize: SeedType.base, height: 1.6, fontWeight: FontWeight.w500, color: t.fgSubtle, @@ -114,7 +114,7 @@ class _OnboardingScreenState extends State { height: 7, decoration: BoxDecoration( color: i == _step ? t.primary : t.borderStrong, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), ), ], @@ -178,7 +178,7 @@ class OnbArt extends StatelessWidget { '정보처리기사', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: const Color(0xFFFFFFFF).withValues(alpha: 0.7), ), @@ -217,14 +217,14 @@ class OnbArt extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(16), + borderRadius: BorderRadius.circular(SeedRadius.md), boxShadow: t.shadows.s2, ), child: Text( label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: color, ), @@ -246,7 +246,7 @@ class OnbArt extends StatelessWidget { '월요일', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: t.fgSubtle, ), @@ -264,7 +264,7 @@ class OnbArt extends StatelessWidget { '비었어요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: t.fgDisabled, ), @@ -288,7 +288,7 @@ class OnbArt extends StatelessWidget { '토요일', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: t.primary, ), @@ -318,7 +318,7 @@ class OnbArt extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, color: Color(0xFFFFFFFF), ), @@ -389,7 +389,7 @@ class OnbArt extends StatelessWidget { Container( decoration: BoxDecoration( color: c ?? t.bgPress, - borderRadius: BorderRadius.circular(7), + borderRadius: BorderRadius.circular(SeedRadius.chip), ), ), ], @@ -420,7 +420,7 @@ class OnbArt extends StatelessWidget { padding: const EdgeInsets.fromLTRB(5, 4, 9, 4), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), boxShadow: t.shadows.s1, ), child: Row( diff --git a/lib/screens/plan/calendar_screen.dart b/lib/screens/plan/calendar_screen.dart index 7b239c8..6e05e20 100644 --- a/lib/screens/plan/calendar_screen.dart +++ b/lib/screens/plan/calendar_screen.dart @@ -13,6 +13,7 @@ import '../../widgets/dk_section.dart'; import '../../widgets/dk_segmented.dart'; import 'calendar_logic.dart'; import 'week_strip.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 캘린더 뷰. 프로토타입 `CalendarScreen`(embedded). /// @@ -231,13 +232,13 @@ Widget _todayChip(DkTokens t, VoidCallback onTap) { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 7), decoration: BoxDecoration( color: t.primarySubtle, - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: Text( '오늘', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: t.primary, ), @@ -284,7 +285,7 @@ class _CalNav extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon(icon, size: 18, color: t.fgMuted, strokeWidth: 2.2), ), @@ -328,7 +329,7 @@ class _MonthGrid extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon(icon, size: 18, color: t.fgMuted, strokeWidth: 2.2), ), @@ -355,7 +356,7 @@ class _MonthGrid extends StatelessWidget { '${month.year}년 ${kMonthsKo[month.month - 1]}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, color: t.fgStrong, ), @@ -377,7 +378,7 @@ class _MonthGrid extends StatelessWidget { kWeekdaysKo[i], style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: i == 0 ? t.danger @@ -445,13 +446,13 @@ class _MonthGrid extends StatelessWidget { : isToday ? t.primarySubtle : const Color(0x00000000), - borderRadius: BorderRadius.circular(11), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: Text( '$day', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: on || isToday ? FontWeight.w700 : FontWeight.w500, letterSpacing: -0.3, color: on @@ -559,7 +560,7 @@ class _DayList extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), border: Border.all(color: t.borderSubtle), boxShadow: t.shadows.s1, ), @@ -570,7 +571,7 @@ class _DayList extends StatelessWidget { height: 34, decoration: BoxDecoration( color: color, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), ), const SizedBox(width: 12), @@ -584,7 +585,7 @@ class _DayList extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w600, letterSpacing: -0.15, color: done ? t.fgDisabled : t.fg, @@ -600,7 +601,7 @@ class _DayList extends StatelessWidget { meta, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/screens/plan/task_screen.dart b/lib/screens/plan/task_screen.dart index 66b3a52..63402c3 100644 --- a/lib/screens/plan/task_screen.dart +++ b/lib/screens/plan/task_screen.dart @@ -11,6 +11,7 @@ import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; import 'week_strip.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 할 일 뷰. 프로토타입 `TaskScreen`(embedded). /// @@ -156,7 +157,7 @@ class _TaskScreenState extends State { alignment: Alignment.center, decoration: BoxDecoration( color: t.warningSubtle, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: DkIcon( 'carryForward', @@ -176,7 +177,7 @@ class _TaskScreenState extends State { '미룬 시간', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: t.fg, @@ -196,7 +197,7 @@ class _TaskScreenState extends State { TextSpan( style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/screens/plan/week_strip.dart b/lib/screens/plan/week_strip.dart index f589de5..c31a257 100644 --- a/lib/screens/plan/week_strip.dart +++ b/lib/screens/plan/week_strip.dart @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; import '../../data/format.dart'; import '../../theme/tokens.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 주간 7일 스트립. 프로토타입 `WeekStrip`(월요일 시작 2026-06-01). /// @@ -58,7 +59,7 @@ class WeekStrip extends StatelessWidget { wd, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: on ? t.primary : t.fgSubtle, ), @@ -70,7 +71,7 @@ class WeekStrip extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: on ? t.primary : const Color(0x00000000), - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: Border.all( color: !on && isToday ? t.primary : const Color(0x00000000), width: 1.5, @@ -80,7 +81,7 @@ class WeekStrip extends StatelessWidget { '${d.day}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: on diff --git a/lib/screens/review/review_screen.dart b/lib/screens/review/review_screen.dart index 1d73371..6797982 100644 --- a/lib/screens/review/review_screen.dart +++ b/lib/screens/review/review_screen.dart @@ -12,6 +12,7 @@ import '../../widgets/dk_feedback.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_ring.dart'; import '../../widgets/dk_section.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 주간 리뷰(회고) 서브화면. 프로토타입 `ReviewScreen`. class ReviewScreen extends StatelessWidget { @@ -185,7 +186,7 @@ class ReviewScreen extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.onInkMuted, ), @@ -195,7 +196,7 @@ class ReviewScreen extends StatelessWidget { TextSpan( style: TextStyle( fontFamily: 'WantedSans', - fontSize: 18, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w800, color: color, ), @@ -203,7 +204,10 @@ class ReviewScreen extends StatelessWidget { TextSpan(text: '$value'), TextSpan( text: unit, - style: TextStyle(fontSize: 12, color: t.onInkMuted), + style: TextStyle( + fontSize: SeedType.caption, + color: t.onInkMuted, + ), ), ], ), @@ -242,7 +246,7 @@ class ReviewScreen extends StatelessWidget { '$doneDays/7일 완벽', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, color: t.fg, ), @@ -269,7 +273,7 @@ class ReviewScreen extends StatelessWidget { alignment: Alignment.bottomCenter, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(8), + borderRadius: BorderRadius.circular(SeedRadius.chip), ), clipBehavior: Clip.antiAlias, child: TweenAnimationBuilder( @@ -281,7 +285,7 @@ class ReviewScreen extends StatelessWidget { height: h * v, decoration: BoxDecoration( color: d.allDone ? t.success : t.primary, - borderRadius: BorderRadius.circular(8), + borderRadius: BorderRadius.circular(SeedRadius.chip), ), ), ), @@ -291,7 +295,7 @@ class ReviewScreen extends StatelessWidget { d.day, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, color: d.allDone ? t.successFg : t.fgSubtle, ), @@ -317,7 +321,7 @@ class ReviewScreen extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -348,7 +352,7 @@ class ReviewScreen extends StatelessWidget { TextSpan( style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: t.fg, @@ -368,7 +372,7 @@ class ReviewScreen extends StatelessWidget { '이번 주도 이어가면 최고 기록이에요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -404,7 +408,7 @@ class ReviewScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), child: SizedBox( height: 12, child: Row( @@ -438,7 +442,7 @@ class ReviewScreen extends StatelessWidget { c.cat, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fg, ), @@ -448,7 +452,7 @@ class ReviewScreen extends StatelessWidget { fmtMins(c.mins), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -461,7 +465,7 @@ class ReviewScreen extends StatelessWidget { textAlign: TextAlign.right, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w700, color: t.fg, ), @@ -495,7 +499,7 @@ class ReviewScreen extends StatelessWidget { review.insight, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, height: 1.55, fontWeight: FontWeight.w600, color: t.primary, diff --git a/lib/screens/sheets/date_picker_sheet.dart b/lib/screens/sheets/date_picker_sheet.dart index a1b7dce..0ea5d6b 100644 --- a/lib/screens/sheets/date_picker_sheet.dart +++ b/lib/screens/sheets/date_picker_sheet.dart @@ -6,6 +6,7 @@ import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; import '../plan/calendar_logic.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 날짜 선택 시트를 열고 선택한 `YYYY-MM-DD` 를 반환한다(취소 시 null). /// [initial] 이 가리키는 달을 첫 화면으로 보여준다. @@ -66,7 +67,7 @@ class _DatePickerBodyState extends State<_DatePickerBody> { '${_month.year}년 ${kMonthsKo[_month.month - 1]}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, color: t.fgStrong, ), @@ -87,7 +88,7 @@ class _DatePickerBodyState extends State<_DatePickerBody> { kWeekdaysKo[i], style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: i == 0 ? t.danger @@ -137,7 +138,7 @@ class _DatePickerBodyState extends State<_DatePickerBody> { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon(icon, size: 20, color: t.fgMuted, strokeWidth: 2.2), ), @@ -173,7 +174,7 @@ class _DatePickerBodyState extends State<_DatePickerBody> { alignment: Alignment.center, decoration: BoxDecoration( color: isSelected ? t.primary : null, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: isToday && !isSelected ? Border.all(color: t.primary, width: 1.5) : null, @@ -182,7 +183,7 @@ class _DatePickerBodyState extends State<_DatePickerBody> { '$day', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: isSelected || isToday ? FontWeight.w700 : FontWeight.w500, diff --git a/lib/screens/sheets/date_range_picker_sheet.dart b/lib/screens/sheets/date_range_picker_sheet.dart index 8f190c5..606a096 100644 --- a/lib/screens/sheets/date_range_picker_sheet.dart +++ b/lib/screens/sheets/date_range_picker_sheet.dart @@ -6,6 +6,7 @@ import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; import '../plan/calendar_logic.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 기간(시작~종료)을 한 달력에서 연속 선택하는 시트. 시작 탭 → 종료 탭, 사이를 하이라이트한다. /// 종료는 시작보다 앞설 수 없다(앞 날짜를 탭하면 시작이 재설정됨). 선택 완료 시 `(start, end)`, @@ -97,7 +98,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { '${_month.year}년 ${kMonthsKo[_month.month - 1]}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 16, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, color: t.fgStrong, ), @@ -113,7 +114,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { _summary(), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: _complete ? t.primary : t.fgSubtle, ), @@ -129,7 +130,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { kWeekdaysKo[i], style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: i == 0 ? t.danger @@ -183,7 +184,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon(icon, size: 20, color: t.fgMuted, strokeWidth: 2.2), ), @@ -249,7 +250,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { alignment: Alignment.center, decoration: BoxDecoration( color: isEndpoint ? t.primary : null, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: isToday && !isEndpoint && !inRange ? Border.all(color: t.primary, width: 1.5) : null, @@ -258,7 +259,7 @@ class _DateRangePickerBodyState extends State<_DateRangePickerBody> { '$day', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: isEndpoint || isToday ? FontWeight.w700 : FontWeight.w500, diff --git a/lib/screens/sheets/event_sheet.dart b/lib/screens/sheets/event_sheet.dart index 1f0d563..7aa27af 100644 --- a/lib/screens/sheets/event_sheet.dart +++ b/lib/screens/sheets/event_sheet.dart @@ -14,6 +14,7 @@ import '../me/settings_section.dart'; import 'date_picker_sheet.dart'; import 'date_range_picker_sheet.dart'; import 'sheet_fields.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 이벤트 추가/상세 시트 본문. 프로토타입 `EventSheet`. class EventSheetBody extends StatefulWidget { @@ -117,7 +118,7 @@ class _EventSheetBodyState extends State { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 13), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: Border.all(color: t.border, width: 1.5), ), child: Row( @@ -127,7 +128,7 @@ class _EventSheetBodyState extends State { fmtDate(controller.text), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: t.fg, ), @@ -165,7 +166,7 @@ class _EventSheetBodyState extends State { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 13), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: Border.all(color: t.border, width: 1.5), ), child: Row( @@ -175,7 +176,7 @@ class _EventSheetBodyState extends State { '${fmtDate(_start.text)} ~ ${fmtDate(_end.text)}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: t.fg, ), @@ -242,7 +243,7 @@ class _EventSheetBodyState extends State { padding: const EdgeInsets.symmetric(horizontal: 14), decoration: BoxDecoration( color: t.bgSubtle, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: _pinRow(t), ), @@ -268,7 +269,7 @@ class _EventSheetBodyState extends State { '홈 상단에 고정', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w500, color: t.fg, ), @@ -340,7 +341,7 @@ class _EventSheetBodyState extends State { '${ev.category} · ${eventDateLabel(ev)}', style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, color: Color(0xB3FFFFFF), ), ), @@ -349,7 +350,7 @@ class _EventSheetBodyState extends State { ev.title, style: const TextStyle( fontFamily: 'Pretendard', - fontSize: 19, + fontSize: SeedType.title, fontWeight: FontWeight.w700, color: white, ), @@ -372,7 +373,7 @@ class _EventSheetBodyState extends State { if (showBar) ...[ const SizedBox(height: 14), ClipRRect( - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), child: SizedBox( height: 7, child: Stack( diff --git a/lib/screens/sheets/notif_sheet.dart b/lib/screens/sheets/notif_sheet.dart index 737f231..7c25227 100644 --- a/lib/screens/sheets/notif_sheet.dart +++ b/lib/screens/sheets/notif_sheet.dart @@ -7,6 +7,7 @@ import '../../widgets/dk_badge.dart'; import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 알림 종류별 아이콘·톤 매핑(표현은 client 권한). server 는 [DkNotifType] 만 내려준다. ({String icon, DkTone tone}) _appearance(DkNotifType type) => switch (type) { @@ -71,7 +72,7 @@ class NotifSheetBody extends StatelessWidget { '모두 읽음', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.primary, ), @@ -111,7 +112,7 @@ class NotifSheetBody extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: colors.bg, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: DkIcon(ap.icon, size: 19, color: colors.fg, strokeWidth: 2), ), @@ -124,7 +125,7 @@ class NotifSheetBody extends StatelessWidget { it.body, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, height: 1.4, fontWeight: it.read ? FontWeight.w500 : FontWeight.w600, color: it.read ? t.fgSubtle : t.fg, @@ -135,7 +136,7 @@ class NotifSheetBody extends StatelessWidget { _relativeTime(it.createdAt), style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, color: t.fgSubtle, ), ), diff --git a/lib/screens/sheets/sheet_fields.dart b/lib/screens/sheets/sheet_fields.dart index fba35ec..292171a 100644 --- a/lib/screens/sheets/sheet_fields.dart +++ b/lib/screens/sheets/sheet_fields.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import '../../theme/tokens.dart'; import '../../widgets/dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 폼 필드(라벨 + 콘텐츠 + 힌트). 프로토타입 `Field`. class DkField extends StatelessWidget { @@ -28,7 +29,7 @@ class DkField extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgMuted, ), @@ -41,7 +42,7 @@ class DkField extends StatelessWidget { hint!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, color: t.fgSubtle, ), ), @@ -95,7 +96,7 @@ class _DkTextInputState extends State { constraints: BoxConstraints(minHeight: widget.minHeight ?? 0), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: Border.all(color: focused ? t.primary : t.border, width: 1.5), boxShadow: focused ? [ @@ -118,7 +119,7 @@ class _DkTextInputState extends State { cursorColor: t.primary, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: t.fg, ), @@ -126,7 +127,7 @@ class _DkTextInputState extends State { hintText: widget.placeholder ?? '', hintStyle: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: t.fgSubtle, ), @@ -169,7 +170,7 @@ class DkCategoryPills extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 7), decoration: BoxDecoration( color: on ? h.subtle : t.bg, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), border: Border.all(color: on ? h.color : t.border, width: 1.5), ), child: Row( @@ -186,7 +187,7 @@ class DkCategoryPills extends StatelessWidget { cat, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: on ? h.color : t.fgMuted, ), diff --git a/lib/screens/sheets/task_sheet.dart b/lib/screens/sheets/task_sheet.dart index daecb77..1c6cbbb 100644 --- a/lib/screens/sheets/task_sheet.dart +++ b/lib/screens/sheets/task_sheet.dart @@ -11,6 +11,7 @@ import '../../widgets/dk_sheet.dart'; import 'date_picker_sheet.dart'; import 'date_range_picker_sheet.dart'; import 'sheet_fields.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; const List _minOptions = [15, 30, 45, 60, 90, 120]; @@ -212,7 +213,7 @@ class _TaskSheetBodyState extends State { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 13), decoration: BoxDecoration( color: t.bg, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), border: Border.all(color: t.border, width: 1.5), ), child: Row( @@ -222,7 +223,7 @@ class _TaskSheetBodyState extends State { _dateLabel, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w500, color: t.fg, ), @@ -257,7 +258,7 @@ class _TaskSheetBodyState extends State { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 11), decoration: BoxDecoration( color: t.infoSubtle, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), child: Row( children: [ @@ -268,7 +269,7 @@ class _TaskSheetBodyState extends State { '${task.fromLabel}에서 옮겨온 할 일이에요', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13.5, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.infoFg, ), @@ -390,7 +391,7 @@ class _TaskSheetBodyState extends State { child: DkChoiceChip( label: kWeekdaysKo[i], selected: _weeklyDays.contains(num), - fontSize: 13, + fontSize: SeedType.label, expand: true, onTap: () => setState(() { // 불변 패턴: 기존 Set 을 변형하지 않고 새 Set 으로 교체한다. diff --git a/lib/screens/splash.dart b/lib/screens/splash.dart index 1f99b93..384e79e 100644 --- a/lib/screens/splash.dart +++ b/lib/screens/splash.dart @@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_logo.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 스플래시. 프로토타입 `Splash`. /// @@ -63,7 +64,7 @@ class _SplashScreenState extends State { 'D-Day · 할 일 · 집중을 하나로', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14.5, + fontSize: SeedType.body, fontWeight: FontWeight.w600, color: t.fgSubtle, ), diff --git a/lib/screens/today/today_screen.dart b/lib/screens/today/today_screen.dart index 27bd707..ed9d1f9 100644 --- a/lib/screens/today/today_screen.dart +++ b/lib/screens/today/today_screen.dart @@ -12,6 +12,7 @@ import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; import 'today_logic.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 오늘 탭. D-Day 중심. /// @@ -239,7 +240,7 @@ class _DdayRow extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: h.subtle, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(SeedRadius.sm), ), // 카테고리에 맞는 아이콘(자격증→graduationCap 등). 미매핑은 target 폴백. child: DkIcon( @@ -268,7 +269,7 @@ class _DdayRow extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: t.fg, @@ -282,7 +283,7 @@ class _DdayRow extends StatelessWidget { event.category, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, color: h.color, ), @@ -295,7 +296,7 @@ class _DdayRow extends StatelessWidget { overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, letterSpacing: -0.12, color: t.fgSubtle, @@ -308,7 +309,9 @@ class _DdayRow extends StatelessWidget { children: [ Expanded( child: ClipRRect( - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular( + SeedRadius.pill, + ), child: SizedBox( height: 6, child: Stack( @@ -329,7 +332,7 @@ class _DdayRow extends StatelessWidget { '${info.pct}%', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 11.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, color: t.fgSubtle, ), @@ -351,7 +354,7 @@ class _DdayRow extends StatelessWidget { info.toStart == 0 ? '시작 D-DAY' : '시작 D+${-info.toStart}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w600, letterSpacing: -0.2, color: t.fgSubtle, @@ -362,7 +365,7 @@ class _DdayRow extends StatelessWidget { info.toEnd == 0 ? '마감 D-DAY' : '마감 D-${info.toEnd}', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w800, letterSpacing: -0.3, color: uColor(info.urgency), @@ -376,7 +379,7 @@ class _DdayRow extends StatelessWidget { info.label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w800, letterSpacing: -0.3, color: uColor(info.urgency), @@ -387,7 +390,7 @@ class _DdayRow extends StatelessWidget { big, style: TextStyle( fontFamily: 'WantedSans', - fontSize: 24, + fontSize: SeedType.heading, fontWeight: FontWeight.w800, letterSpacing: -0.72, color: uColor(info.urgency), @@ -428,7 +431,7 @@ class _DebtNudge extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.warningSubtle, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: DkIcon( 'carryForward', @@ -448,7 +451,7 @@ class _DebtNudge extends StatelessWidget { '미룬 시간', style: TextStyle( fontFamily: 'Pretendard', - fontSize: 15, + fontSize: SeedType.base, fontWeight: FontWeight.w700, letterSpacing: -0.3, color: t.fg, @@ -465,7 +468,7 @@ class _DebtNudge extends StatelessWidget { TextSpan( style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12.5, + fontSize: SeedType.caption, fontWeight: FontWeight.w500, color: t.fgSubtle, ), diff --git a/lib/widgets/dk_alert.dart b/lib/widgets/dk_alert.dart index 6ea78fc..d8c9bd5 100644 --- a/lib/widgets/dk_alert.dart +++ b/lib/widgets/dk_alert.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_button.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 중앙 확인 Alert(취소/확인). 되돌리기 어려운 동작(연동 해제 등)에 명시적 확인을 받는다. /// @@ -41,7 +42,7 @@ Future showDkConfirmAlert( title, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w800, color: t.fgStrong, ), @@ -51,7 +52,7 @@ Future showDkConfirmAlert( body, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, height: 1.45, color: t.fgSubtle, ), diff --git a/lib/widgets/dk_bell_button.dart b/lib/widgets/dk_bell_button.dart index 9f1b557..9dbc988 100644 --- a/lib/widgets/dk_bell_button.dart +++ b/lib/widgets/dk_bell_button.dart @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 우상단 알림 벨 버튼(모든 탭 공통). 프로토타입 `AppHeader` 의 벨을 단일 위젯으로 통일. /// @@ -25,7 +26,7 @@ class DkBellButton extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), ), child: Stack( clipBehavior: Clip.none, diff --git a/lib/widgets/dk_empty.dart b/lib/widgets/dk_empty.dart index d20b4ab..94d29cf 100644 --- a/lib/widgets/dk_empty.dart +++ b/lib/widgets/dk_empty.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_button.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 빈 상태. 프로토타입 `Empty`. /// @@ -49,7 +50,7 @@ class DkEmpty extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, letterSpacing: -0.34, color: t.fg, @@ -63,7 +64,7 @@ class DkEmpty extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, height: 1.5, color: t.fgSubtle, ), diff --git a/lib/widgets/dk_feedback.dart b/lib/widgets/dk_feedback.dart index a74f245..f2da92c 100644 --- a/lib/widgets/dk_feedback.dart +++ b/lib/widgets/dk_feedback.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_badge.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 토스트 한 건. 프로토타입 `showToast` payload. class DkToastData { @@ -117,7 +118,7 @@ class _Toast extends StatelessWidget { // ink 표면(양 테마 모두 어두움) — fgStrong 은 다크에서 흰색으로 뒤집혀 // 흰 알약+흰 글자가 되므로 쓰지 않는다. color: tokens.ink, - borderRadius: BorderRadius.circular(14), + borderRadius: BorderRadius.circular(SeedRadius.button), boxShadow: tokens.shadows.s3, ), child: Row( @@ -136,7 +137,7 @@ class _Toast extends StatelessWidget { data.message, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 14, + fontSize: SeedType.body, fontWeight: FontWeight.w600, letterSpacing: -0.14, color: tokens.onInk, diff --git a/lib/widgets/dk_section.dart b/lib/widgets/dk_section.dart index 4c574d8..6eb4270 100644 --- a/lib/widgets/dk_section.dart +++ b/lib/widgets/dk_section.dart @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 섹션 헤더. 프로토타입 `SectionHead`: 제목 17/700 + 우측 action(13/600 + chevR). class DkSectionHead extends StatelessWidget { @@ -28,7 +29,7 @@ class DkSectionHead extends StatelessWidget { title, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 17, + fontSize: SeedType.bodyLg, fontWeight: FontWeight.w700, letterSpacing: -0.34, color: t.fg, @@ -46,7 +47,7 @@ class DkSectionHead extends StatelessWidget { action!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 13, + fontSize: SeedType.label, fontWeight: FontWeight.w600, color: t.fgSubtle, ), @@ -80,7 +81,7 @@ class DkSectionLabel extends StatelessWidget { label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 12, + fontSize: SeedType.caption, fontWeight: FontWeight.w700, letterSpacing: 0.96, color: t.fgSubtle, diff --git a/lib/widgets/dk_sheet.dart b/lib/widgets/dk_sheet.dart index f17c51b..d7f72cc 100644 --- a/lib/widgets/dk_sheet.dart +++ b/lib/widgets/dk_sheet.dart @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 바텀시트. 프로토타입 `Sheet`. /// @@ -53,7 +54,7 @@ class DkSheet extends StatelessWidget { height: 5, decoration: BoxDecoration( color: t.borderStrong, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular(SeedRadius.pill), ), ), if (title != null) @@ -66,7 +67,7 @@ class DkSheet extends StatelessWidget { title!, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 19, + fontSize: SeedType.title, fontWeight: FontWeight.w700, letterSpacing: -0.38, color: t.fgStrong, @@ -81,7 +82,9 @@ class DkSheet extends StatelessWidget { alignment: Alignment.center, decoration: BoxDecoration( color: t.bgPress, - borderRadius: BorderRadius.circular(99), + borderRadius: BorderRadius.circular( + SeedRadius.pill, + ), ), child: DkIcon('x', size: 20, color: t.fgMuted), ), diff --git a/lib/widgets/dk_tab_bar.dart b/lib/widgets/dk_tab_bar.dart index b62b8ec..59a1ec9 100644 --- a/lib/widgets/dk_tab_bar.dart +++ b/lib/widgets/dk_tab_bar.dart @@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; +import 'package:ieoseo/theme/seed_tokens.dart'; /// 하단 탭. 프로토타입 `TABS`. (집중 탭은 프로필 도구로 이동, 통계 탭 신설 — ADR 없이 IA 조정) enum DkTab { today, plan, stats, me } @@ -101,7 +102,7 @@ class DkTabBar extends StatelessWidget { spec.label, style: TextStyle( fontFamily: 'Pretendard', - fontSize: 11, + fontSize: SeedType.caption, fontWeight: on ? FontWeight.w700 : FontWeight.w500, letterSpacing: -0.11, color: color,