diff --git a/app/(enterprise)/enterprise-chat.tsx b/app/(enterprise)/enterprise-chat.tsx index 63a09db..ce8eec1 100644 --- a/app/(enterprise)/enterprise-chat.tsx +++ b/app/(enterprise)/enterprise-chat.tsx @@ -12,7 +12,7 @@ import { import { SafeAreaView } from 'react-native-safe-area-context'; import { useEnterpriseCommunication } from '../../src/hooks'; import { ENTERPRISE_DISPLAY_NAME } from '../../src/constants'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { EnterpriseChatItem, EnterpriseCommunicationTab, PendingTask } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -420,7 +420,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.primary, }, body: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, center: { @@ -433,15 +433,15 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 8, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, retryText: { color: colors.white, fontSize: 13, fontWeight: '600' }, pendingCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, pendingTitle: { @@ -457,8 +457,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.pageBg, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, pendingIconWrap: { width: 40, @@ -483,7 +483,7 @@ const styles = StyleSheet.create({ pendingBadge: { backgroundColor: colors.actionLight, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, marginLeft: 8, }, @@ -516,14 +516,14 @@ const styles = StyleSheet.create({ emptyList: { alignItems: 'center', gap: 10, - padding: 8, + padding: spacing.card, backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, }, emptyListText: { fontSize: 13, color: colors.textSecondary }, chatListCard: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', marginBottom: 8, }, @@ -569,7 +569,7 @@ const styles = StyleSheet.create({ }, chatLabelTag: { backgroundColor: colors.compareOrange + '20', - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 6, paddingVertical: 2, marginLeft: 8, @@ -615,8 +615,8 @@ const styles = StyleSheet.create({ quickActionsCard: { flexDirection: 'row', backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, }, quickAction: { flex: 1, @@ -629,8 +629,8 @@ const styles = StyleSheet.create({ }, emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, emptyIconWrap: { @@ -669,8 +669,8 @@ const styles = StyleSheet.create({ dataCard: { width: '100%', backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'flex-start', }, dataTitle: { diff --git a/app/(enterprise)/enterprise-overview.tsx b/app/(enterprise)/enterprise-overview.tsx index d02dc76..d35be92 100644 --- a/app/(enterprise)/enterprise-overview.tsx +++ b/app/(enterprise)/enterprise-overview.tsx @@ -323,9 +323,9 @@ const styles = StyleSheet.create({ companyCard: { marginHorizontal: 8, marginTop: 8, - padding: 8, + padding: spacing.card, backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, }, companyHeader: { flexDirection: 'row', @@ -389,13 +389,13 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 32, }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardHeader: { @@ -453,7 +453,7 @@ const styles = StyleSheet.create({ quickItem: { flex: 1, alignItems: 'center', - paddingVertical: 8, + paddingVertical: spacing.card, }, quickIcon: { width: 48, @@ -532,8 +532,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, candidateIconWrap: { diff --git a/app/(enterprise)/job-management.tsx b/app/(enterprise)/job-management.tsx index 0af7137..02a12c6 100644 --- a/app/(enterprise)/job-management.tsx +++ b/app/(enterprise)/job-management.tsx @@ -654,7 +654,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.primary, }, body: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, center: { @@ -667,7 +667,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 8, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -683,8 +683,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, statIconWrap: { width: 40, @@ -723,9 +723,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 10, - paddingVertical: 8, + paddingVertical: spacing.card, }, searchInput: { flex: 1, @@ -737,9 +737,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 10, - paddingVertical: 8, + paddingVertical: spacing.card, }, filterBtnText: { fontSize: 13, @@ -750,9 +750,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 10, - paddingVertical: 8, + paddingVertical: spacing.card, }, sortBtnText: { fontSize: 13, @@ -761,8 +761,8 @@ const styles = StyleSheet.create({ }, jobCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, jobHeader: { @@ -814,8 +814,8 @@ const styles = StyleSheet.create({ }, rankTag: { backgroundColor: colors.primaryLight, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 2, marginLeft: 8, }, @@ -833,7 +833,7 @@ const styles = StyleSheet.create({ jobTag: { backgroundColor: colors.pageBg, borderRadius: 6, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, }, jobTagText: { @@ -889,8 +889,8 @@ const styles = StyleSheet.create({ }, statusTag: { backgroundColor: colors.pageBg, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 2, }, statusTagText: { @@ -903,7 +903,7 @@ const styles = StyleSheet.create({ filterBadge: { minWidth: 16, height: 16, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryBtn, alignItems: 'center', justifyContent: 'center', @@ -929,7 +929,7 @@ const styles = StyleSheet.create({ emptyResultBtn: { marginTop: 4, paddingHorizontal: 20, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryLight, }, @@ -1056,8 +1056,8 @@ const styles = StyleSheet.create({ }, emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, emptyIconWrap: { @@ -1096,8 +1096,8 @@ const styles = StyleSheet.create({ benefitCard: { width: '100%', backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'flex-start', }, benefitTitle: { diff --git a/app/(enterprise)/talent-recommendation.tsx b/app/(enterprise)/talent-recommendation.tsx index 9143bb7..bf1e2ef 100644 --- a/app/(enterprise)/talent-recommendation.tsx +++ b/app/(enterprise)/talent-recommendation.tsx @@ -421,21 +421,21 @@ const styles = StyleSheet.create({ backgroundColor: colors.pageBg, borderRadius: 10, paddingHorizontal: 12, - paddingVertical: 8, + paddingVertical: spacing.card, fontSize: 14, color: colors.textPrimary, }, emptyList: { alignItems: 'center', gap: 10, - padding: 8, + padding: spacing.card, backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, }, emptyListText: { fontSize: 13, color: colors.textSecondary }, emptyListBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -479,7 +479,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.primary, }, body: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, center: { @@ -492,7 +492,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 8, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -538,8 +538,8 @@ const styles = StyleSheet.create({ }, candidateCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, candidateHeader: { @@ -575,7 +575,7 @@ const styles = StyleSheet.create({ matchTag: { backgroundColor: colors.successLight, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, }, matchTagText: { @@ -628,7 +628,7 @@ const styles = StyleSheet.create({ tag: { backgroundColor: colors.pageBg, borderRadius: 6, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, }, tagText: { @@ -666,8 +666,8 @@ const styles = StyleSheet.create({ }, poolCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, poolTitle: { @@ -712,8 +712,8 @@ const styles = StyleSheet.create({ }, emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, emptyIconWrap: { @@ -752,8 +752,8 @@ const styles = StyleSheet.create({ actionCard: { width: '100%', backgroundColor: colors.actionLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, alignItems: 'flex-start', }, @@ -790,8 +790,8 @@ const styles = StyleSheet.create({ dataCard: { width: '100%', backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'flex-start', }, dataTitle: { diff --git a/app/(tabs)/chat.tsx b/app/(tabs)/chat.tsx index 80ca8c6..053d066 100644 --- a/app/(tabs)/chat.tsx +++ b/app/(tabs)/chat.tsx @@ -315,7 +315,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -331,7 +331,7 @@ const styles = StyleSheet.create({ textAlign: 'center', }, nav: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 8, paddingBottom: 12, }, @@ -342,7 +342,7 @@ const styles = StyleSheet.create({ }, tabBar: { flexDirection: 'row', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, borderBottomWidth: 1, borderBottomColor: colors.border, }, @@ -374,15 +374,15 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 16, paddingBottom: 24, }, // 匹配横幅 matchBanner: { backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, matchBannerTitle: { @@ -400,8 +400,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, avatarWrap: { @@ -456,7 +456,7 @@ const styles = StyleSheet.create({ matchedTag: { marginTop: 6, backgroundColor: colors.primaryLight, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 6, paddingVertical: 2, }, @@ -470,8 +470,8 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'space-between', backgroundColor: colors.actionLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, offerTitle: { @@ -488,8 +488,8 @@ const styles = StyleSheet.create({ // 通知卡片 notiCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, notiTitleRow: { @@ -537,8 +537,8 @@ const styles = StyleSheet.create({ }, interviewCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, interviewHeader: { @@ -565,8 +565,8 @@ const styles = StyleSheet.create({ marginTop: 12, }, typeTag: { - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 3, }, typeTagVideo: { @@ -589,7 +589,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.primaryBtn, borderRadius: 18, paddingHorizontal: spacing.framework, - paddingVertical: 8, + paddingVertical: spacing.card, }, actionText: { fontSize: 13, diff --git a/app/(tabs)/growth.tsx b/app/(tabs)/growth.tsx index 61b350b..6af6e54 100644 --- a/app/(tabs)/growth.tsx +++ b/app/(tabs)/growth.tsx @@ -328,7 +328,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -341,7 +341,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingBottom: 24, }, /* ---- 顶部导航 ---- */ @@ -368,8 +368,8 @@ const styles = StyleSheet.create({ heroCard: { flexDirection: 'row', marginTop: 8, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, heroIcon: { width: 52, @@ -402,7 +402,7 @@ const styles = StyleSheet.create({ heroButton: { borderRadius: 18, paddingHorizontal: spacing.framework, - paddingVertical: 8, + paddingVertical: spacing.card, backgroundColor: colors.white, }, heroButtonText: { @@ -419,8 +419,8 @@ const styles = StyleSheet.create({ /* ---- 通用分区标题 ---- */ emptyBox: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', gap: 8, }, @@ -444,8 +444,8 @@ const styles = StyleSheet.create({ /* ---- 四维能力测评卡片 ---- */ abilityCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, abilityTop: { flexDirection: 'row', @@ -472,9 +472,9 @@ const styles = StyleSheet.create({ }, levelBadge: { marginLeft: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, levelBadgeText: { @@ -534,8 +534,8 @@ const styles = StyleSheet.create({ }, toolCard: { flex: 1, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, }, toolTitle: { @@ -558,8 +558,8 @@ const styles = StyleSheet.create({ articleCard: { flexDirection: 'row', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, articleThumb: { @@ -590,9 +590,9 @@ const styles = StyleSheet.create({ fontSize: 11, color: colors.primaryText, backgroundColor: colors.primaryLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, articleViews: { diff --git a/app/(tabs)/jobs.tsx b/app/(tabs)/jobs.tsx index c1bdde6..2b73fc9 100644 --- a/app/(tabs)/jobs.tsx +++ b/app/(tabs)/jobs.tsx @@ -23,7 +23,7 @@ import { SALARY_RANGES, } from '../../src/constants'; import type { Job, SortType } from '../../src/types'; -import { colors, headerGradient, jobLevelTextColors } from '../../src/theme'; +import { colors, headerGradient, jobLevelTextColors , spacing } from '../../src/theme'; /** 筛选项(下拉占位) */ const FILTERS = ['全部行业', '薪资', '经验', '更多筛选']; @@ -416,7 +416,7 @@ const styles = StyleSheet.create({ nav: { flexDirection: 'row', alignItems: 'center', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 4, paddingBottom: 8, }, @@ -462,7 +462,7 @@ const styles = StyleSheet.create({ marginTop: 12, }, filterContent: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, gap: 12, }, filterChip: { @@ -484,7 +484,7 @@ const styles = StyleSheet.create({ marginLeft: 4, minWidth: 16, height: 16, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 4, alignItems: 'center', justifyContent: 'center', @@ -500,7 +500,7 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, marginTop: 16, marginBottom: 12, }, @@ -530,7 +530,7 @@ const styles = StyleSheet.create({ compareBtn: { flexDirection: 'row', alignItems: 'center', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 4, borderRadius: 12, backgroundColor: colors.primaryLight, @@ -562,7 +562,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -575,13 +575,13 @@ const styles = StyleSheet.create({ flex: 1, }, listContent: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingBottom: 24, }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardPressed: { @@ -695,7 +695,7 @@ const styles = StyleSheet.create({ }, optionChip: { paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.pageBg, borderWidth: 1, diff --git a/app/(tabs)/profile.tsx b/app/(tabs)/profile.tsx index f17c4eb..7a43310 100644 --- a/app/(tabs)/profile.tsx +++ b/app/(tabs)/profile.tsx @@ -15,7 +15,7 @@ import { UNSET_LABEL } from '../../src/constants'; import { Avatar } from '../../components/onboarding/ui/Avatar'; import { isAvatarPreset } from '../../components/onboarding/assets'; import { useRole } from '../../src/context/RoleContext'; -import { colors, headerGradientSolid, jobLevelTextColors } from '../../src/theme'; +import { colors, headerGradientSolid, jobLevelTextColors , spacing } from '../../src/theme'; import type { Badge, DimensionScore, EnterpriseEntry, JobPreference, MenuItem, UserStats } from '../../src/types'; /* ===================== 展示层映射(全部使用主题令牌) ===================== */ @@ -398,7 +398,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -409,7 +409,7 @@ const styles = StyleSheet.create({ }, /* ---- 顶部渐变头部 ---- */ headerGradient: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 8, paddingBottom: 24, borderBottomLeftRadius: 24, @@ -466,7 +466,7 @@ const styles = StyleSheet.create({ paddingBottom: 24, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 16, }, /* ---- 综合评分卡片 ---- */ @@ -474,9 +474,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, scoreValue: { fontSize: 40, @@ -536,9 +536,9 @@ const styles = StyleSheet.create({ /* ---- 八大维度(横向评分条) ---- */ dimCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, dimRow: { flexDirection: 'row', @@ -570,7 +570,7 @@ const styles = StyleSheet.create({ }, levelTag: { marginLeft: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, borderRadius: 10, }, @@ -581,9 +581,9 @@ const styles = StyleSheet.create({ /* ---- 求职偏好 ---- */ prefCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, prefRow: { flexDirection: 'row', @@ -633,14 +633,14 @@ const styles = StyleSheet.create({ marginHorizontal: -8, }, hScrollContent: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, gap: 8, }, badgeCard: { width: 140, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, badgeIcon: { @@ -697,8 +697,8 @@ const styles = StyleSheet.create({ statsCard: { flexDirection: 'row', backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, marginBottom: 8, }, statItem: { @@ -715,9 +715,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, marginBottom: 8, }, enterpriseIconWrap: { @@ -735,8 +735,8 @@ const styles = StyleSheet.create({ /* ---- 功能菜单 ---- */ menuCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, menuRow: { flexDirection: 'row', @@ -751,7 +751,7 @@ const styles = StyleSheet.create({ menuIconWrap: { width: 32, height: 32, - borderRadius: 8, + borderRadius: spacing.card, alignItems: 'center', justifyContent: 'center', marginRight: 12, diff --git a/app/ability.tsx b/app/ability.tsx index 19956c1..17d4be3 100644 --- a/app/ability.tsx +++ b/app/ability.tsx @@ -11,7 +11,7 @@ import { import { SafeAreaView } from 'react-native-safe-area-context'; import Svg, { Circle, Line, Path, Text as SvgText } from 'react-native-svg'; import { useAbilityAssessment } from '../src/hooks'; -import { colors, jobLevelTextColors } from '../src/theme'; +import { colors, jobLevelTextColors , spacing } from '../src/theme'; import { JOB_LEVEL_LABEL } from '../src/constants'; import type { AbilityDimension, AbilityTrendPoint, JobLevel } from '../src/types'; @@ -277,12 +277,12 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, scoreCard: { flexDirection: 'row', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -299,8 +299,8 @@ const styles = StyleSheet.create({ section: { marginTop: 16 }, emptyBox: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', gap: 8, }, @@ -308,8 +308,8 @@ const styles = StyleSheet.create({ sectionTitle: { fontSize: 18, fontWeight: '700', color: colors.textPrimary, marginBottom: 12 }, dimCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -344,8 +344,8 @@ const styles = StyleSheet.create({ subItemScore: { width: 50, fontSize: 12, color: colors.textPrimary, textAlign: 'right' }, chartCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -359,8 +359,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -370,6 +370,6 @@ const styles = StyleSheet.create({ improveDesc: { fontSize: 12, color: colors.textSecondary, marginTop: 2, lineHeight: 18 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, }); diff --git a/app/appeal.tsx b/app/appeal.tsx index 3679858..423b220 100644 --- a/app/appeal.tsx +++ b/app/appeal.tsx @@ -461,20 +461,20 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { paddingHorizontal: 8, paddingBottom: 100, paddingTop: 12 }, + body: { paddingHorizontal: spacing.card, paddingBottom: 100, paddingTop: 12 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, noticeCard: { backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.infoBorder, @@ -490,8 +490,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -513,7 +513,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.white, borderWidth: 1, @@ -526,9 +526,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, + paddingHorizontal: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -564,7 +564,7 @@ const styles = StyleSheet.create({ evidenceImage: { width: 72, height: 72, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.pageBg, }, evidenceRemove: { @@ -580,8 +580,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, diff --git a/app/article/[id].tsx b/app/article/[id].tsx index ad0c378..f6381ba 100644 --- a/app/article/[id].tsx +++ b/app/article/[id].tsx @@ -5,7 +5,7 @@ import type { ComponentProps } from 'react'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useGrowthData } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { articleThumbnailColors, colors } from '../../src/theme'; +import { articleThumbnailColors, colors , spacing } from '../../src/theme'; import { formatViews } from '../../src/utils'; type IconName = ComponentProps['name']; @@ -81,7 +81,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -102,7 +102,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, thumb: { @@ -129,9 +129,9 @@ const styles = StyleSheet.create({ fontSize: 11, color: colors.primaryText, backgroundColor: colors.primaryLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', marginRight: 10, }, diff --git a/app/assessment.tsx b/app/assessment.tsx index 2235fc3..9e252dc 100644 --- a/app/assessment.tsx +++ b/app/assessment.tsx @@ -10,7 +10,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useGrowthData } from '../src/hooks'; -import { colors, jobLevelTextColors } from '../src/theme'; +import { colors, jobLevelTextColors , spacing } from '../src/theme'; import { JOB_LEVEL_LABEL } from '../src/constants'; import type { JobLevel } from '../src/types'; @@ -166,14 +166,14 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, abilityCard: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -190,8 +190,8 @@ const styles = StyleSheet.create({ entryCard: { flexDirection: 'row', alignItems: 'center', - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, entryIcon: { width: 44, @@ -205,6 +205,6 @@ const styles = StyleSheet.create({ entryDesc: { fontSize: 13, color: colors.textSecondary, marginTop: 2 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, }); diff --git a/app/audit-report.tsx b/app/audit-report.tsx index 188ad31..d5b6333 100644 --- a/app/audit-report.tsx +++ b/app/audit-report.tsx @@ -4,7 +4,7 @@ import { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, View } from import { SafeAreaView } from 'react-native-safe-area-context'; import Svg, { Line, Path, Rect, Text as SvgText } from 'react-native-svg'; import { useAuditReport } from '../src/hooks'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import type { AuditKPI, AuditTrendPoint, RiskDistributionItem } from '../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -253,19 +253,19 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, backgroundColor: colors.white, }, headerBtn: { width: 36, height: 36, alignItems: 'center', justifyContent: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, scroll: { flex: 1 }, - content: { padding: 8 }, + content: { padding: spacing.card }, center: { flex: 1, alignItems: 'center', justifyContent: 'center' }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { marginTop: 12, paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -274,8 +274,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.success, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, gradeCircle: { width: 72, @@ -307,8 +307,8 @@ const styles = StyleSheet.create({ kpiCard: { width: '48%', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, kpiIconWrap: { @@ -326,8 +326,8 @@ const styles = StyleSheet.create({ kpiChange: { fontSize: 12, fontWeight: '600', marginLeft: 3 }, chartCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, chartGap: { height: 12 }, chartHeader: { diff --git a/app/candidate-detail.tsx b/app/candidate-detail.tsx index 174b7c0..4dd4535 100644 --- a/app/candidate-detail.tsx +++ b/app/candidate-detail.tsx @@ -385,13 +385,13 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 100, }, infoCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, infoHeader: { @@ -429,9 +429,9 @@ const styles = StyleSheet.create({ matchBox: { alignItems: 'center', backgroundColor: colors.successLight, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, matchValue: { fontSize: 20, @@ -470,8 +470,8 @@ const styles = StyleSheet.create({ }, scoreCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, flexDirection: 'row', justifyContent: 'space-between', @@ -502,8 +502,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardTitle: { @@ -594,7 +594,7 @@ const styles = StyleSheet.create({ marginBottom: 8, }, reviewTag: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 4, borderRadius: 12, backgroundColor: colors.primaryLight, @@ -612,8 +612,8 @@ const styles = StyleSheet.create({ suggestionRow: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.borderLight, marginBottom: 8, @@ -639,8 +639,8 @@ const styles = StyleSheet.create({ }, salaryBox: { marginTop: 8, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.infoLight, }, salaryLabel: { diff --git a/app/chat/[id].tsx b/app/chat/[id].tsx index 1f3a399..6e6f636 100644 --- a/app/chat/[id].tsx +++ b/app/chat/[id].tsx @@ -15,7 +15,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useConversation } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { ChatCard, ChatMessage } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -427,7 +427,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 52, backgroundColor: colors.white, borderBottomWidth: 1, @@ -487,8 +487,8 @@ const styles = StyleSheet.create({ alignItems: 'center', marginHorizontal: 8, marginTop: 8, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.successLight, }, bannerIconWrap: { @@ -517,7 +517,7 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 8, }, systemWrap: { @@ -579,8 +579,8 @@ const styles = StyleSheet.create({ cardBase: { width: 260, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, cardHeader: { @@ -608,7 +608,7 @@ const styles = StyleSheet.create({ cardBullet: { width: 16, height: 16, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.successLight, alignItems: 'center', justifyContent: 'center', @@ -634,8 +634,8 @@ const styles = StyleSheet.create({ cardOffer: { width: 260, backgroundColor: colors.actionLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, cardOfferHeader: { @@ -674,7 +674,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 6, - paddingVertical: 8, + paddingVertical: spacing.card, backgroundColor: colors.white, borderTopWidth: 1, borderTopColor: colors.borderLight, @@ -737,7 +737,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/enterprise-certification.tsx b/app/enterprise-certification.tsx index 0b45157..905ef7c 100644 --- a/app/enterprise-certification.tsx +++ b/app/enterprise-certification.tsx @@ -13,7 +13,7 @@ import { import { SafeAreaView } from 'react-native-safe-area-context'; import { useEnterpriseCertification } from '../src/hooks'; import { useAuth } from '../src/context/AuthContext'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import type { EnterpriseCertificationForm, EnterpriseCertificationStatus } from '../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -250,7 +250,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, backgroundColor: colors.white, }, headerBtn: { width: 36, height: 36, alignItems: 'center', justifyContent: 'center' }, @@ -261,7 +261,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 12, paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -269,8 +269,8 @@ const styles = StyleSheet.create({ topCard: { margin: 8, backgroundColor: colors.primary, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, topHeader: { flexDirection: 'row', alignItems: 'center', marginBottom: 16 }, shieldWrap: { @@ -290,7 +290,7 @@ const styles = StyleSheet.create({ statusBadge: { alignSelf: 'flex-start', marginTop: 6, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, borderRadius: 10, }, @@ -298,8 +298,8 @@ const styles = StyleSheet.create({ formCard: { marginHorizontal: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, formTitle: { fontSize: 16, fontWeight: '700', color: colors.textPrimary, marginBottom: 16 }, field: { marginBottom: 16 }, @@ -326,8 +326,8 @@ const styles = StyleSheet.create({ successCard: { marginHorizontal: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, successTitle: { fontSize: 18, fontWeight: '700', color: colors.textPrimary, marginTop: 16 }, @@ -343,8 +343,8 @@ const styles = StyleSheet.create({ pendingCard: { marginHorizontal: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, pendingTitle: { fontSize: 18, fontWeight: '700', color: colors.textPrimary, marginTop: 16 }, diff --git a/app/favorites.tsx b/app/favorites.tsx index 0dcd848..4793294 100644 --- a/app/favorites.tsx +++ b/app/favorites.tsx @@ -5,7 +5,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { useFavorites } from '../src/hooks'; import { JobCard } from '../src/components/JobCard'; import { LoadingState, ErrorState, EmptyState } from '../src/components/StateView'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; /** * 我的收藏页(职位) @@ -58,7 +58,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -79,7 +79,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 12, paddingBottom: 24, }, diff --git a/app/game.tsx b/app/game.tsx index b929e7a..13d8ee8 100644 --- a/app/game.tsx +++ b/app/game.tsx @@ -10,7 +10,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useGameData } from '../src/hooks'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import type { GameLevel, GameLevelStatus, GameProgress } from '../src/types'; /** 关卡状态 → 样式配置 */ @@ -180,7 +180,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -201,13 +201,13 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, progressCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, progressHead: { @@ -242,8 +242,8 @@ const styles = StyleSheet.create({ levelCard: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, borderWidth: 1, backgroundColor: colors.white, }, @@ -289,7 +289,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/game/level.tsx b/app/game/level.tsx index b338124..96d64f7 100644 --- a/app/game/level.tsx +++ b/app/game/level.tsx @@ -12,7 +12,7 @@ import { import { SafeAreaView } from 'react-native-safe-area-context'; import { useMemo, useState } from 'react'; import { useGameData } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { GameAnswer, GameQuestion } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -262,7 +262,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -283,7 +283,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, levelDesc: { @@ -291,14 +291,14 @@ const styles = StyleSheet.create({ lineHeight: 20, color: colors.textSecondary, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, questionCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, questionIndex: { @@ -321,9 +321,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, - paddingVertical: 8, - borderRadius: 8, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.border, backgroundColor: colors.white, @@ -368,8 +368,8 @@ const styles = StyleSheet.create({ }, explanation: { marginTop: 8, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.infoLight, }, explanationLabel: { @@ -386,8 +386,8 @@ const styles = StyleSheet.create({ resultCard: { alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, resultTitle: { @@ -406,7 +406,7 @@ const styles = StyleSheet.create({ submitBtn: { marginTop: 8, height: 48, - borderRadius: 8, + borderRadius: spacing.card, alignItems: 'center', justifyContent: 'center', backgroundColor: colors.primaryBtn, @@ -422,7 +422,7 @@ const styles = StyleSheet.create({ nextBtn: { marginTop: 8, height: 48, - borderRadius: 8, + borderRadius: spacing.card, alignItems: 'center', justifyContent: 'center', backgroundColor: colors.successBtn, @@ -445,7 +445,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/history.tsx b/app/history.tsx index 1693634..2b1956f 100644 --- a/app/history.tsx +++ b/app/history.tsx @@ -5,7 +5,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { useHistory } from '../src/hooks'; import { JobCard } from '../src/components/JobCard'; import { LoadingState, ErrorState, EmptyState } from '../src/components/StateView'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; /** * 浏览历史页(职位) @@ -58,7 +58,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -79,7 +79,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 12, paddingBottom: 24, }, diff --git a/app/holland-result.tsx b/app/holland-result.tsx index bf0815a..0cbe5b9 100644 --- a/app/holland-result.tsx +++ b/app/holland-result.tsx @@ -15,7 +15,7 @@ import Svg, { Circle, Line, Polygon } from 'react-native-svg'; import { useHollandAssessment } from '../src/hooks'; import { buildHollandReportText } from '../src/api'; import { shareText } from '../src/lib/shareFile'; -import { colors, headerGradientShort, hollandTypeColors } from '../src/theme'; +import { colors, headerGradientShort, hollandTypeColors , spacing } from '../src/theme'; import type { HollandAction, HollandDimension, HollandTypeAnalysis } from '../src/types'; const RADAR_SIZE = 160; @@ -310,10 +310,10 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, heroCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, flexDirection: 'row', alignItems: 'center', marginBottom: 8, @@ -327,8 +327,8 @@ const styles = StyleSheet.create({ sectionTitle: { fontSize: 18, fontWeight: '700', color: colors.textPrimary, marginBottom: 12 }, typeCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -356,8 +356,8 @@ const styles = StyleSheet.create({ careerTagText: { fontSize: 12, color: colors.primaryText }, jobCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -368,15 +368,15 @@ const styles = StyleSheet.create({ matchTag: { backgroundColor: colors.successLight, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, }, matchText: { fontSize: 11, color: colors.successText, fontWeight: '600' }, jobTags: { flexDirection: 'row', gap: 8, marginTop: 10 }, tag: { backgroundColor: colors.pageBg, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 2, }, tagText: { fontSize: 11, color: colors.textSecondary }, @@ -385,8 +385,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -396,6 +396,6 @@ const styles = StyleSheet.create({ actionDesc: { fontSize: 12, color: colors.textSecondary, marginTop: 2 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, }); diff --git a/app/holland.tsx b/app/holland.tsx index 4780871..b3c6827 100644 --- a/app/holland.tsx +++ b/app/holland.tsx @@ -173,15 +173,15 @@ const styles = StyleSheet.create({ headerBtn: { width: 50, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, headerRecord: { fontSize: 14, color: colors.primary, fontWeight: '500' }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, heroCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginBottom: 8, }, @@ -228,8 +228,8 @@ const styles = StyleSheet.create({ dimItem: { width: '30.8%', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, dimBadge: { @@ -264,8 +264,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, featureIcon: { width: 44, @@ -292,8 +292,8 @@ const styles = StyleSheet.create({ }, advantageCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, advantageTitle: { fontSize: 15, diff --git a/app/holland/question.tsx b/app/holland/question.tsx index 8f8b687..2d444a5 100644 --- a/app/holland/question.tsx +++ b/app/holland/question.tsx @@ -11,7 +11,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useHollandAssessment } from '../../src/hooks'; -import { colors, hollandTypeColors } from '../../src/theme'; +import { colors, hollandTypeColors , spacing } from '../../src/theme'; import type { HollandDimension, HollandOption } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -200,11 +200,11 @@ const styles = StyleSheet.create({ headerCenter: { alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, headerSub: { fontSize: 12, color: colors.textHint, marginTop: 2 }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, dimCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -244,8 +244,8 @@ const styles = StyleSheet.create({ }, questionCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -265,9 +265,9 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'space-between', backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, + paddingHorizontal: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -306,7 +306,7 @@ const styles = StyleSheet.create({ tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, diff --git a/app/hr-evaluation.tsx b/app/hr-evaluation.tsx index c08d528..e0a707f 100644 --- a/app/hr-evaluation.tsx +++ b/app/hr-evaluation.tsx @@ -321,12 +321,12 @@ const styles = StyleSheet.create({ backgroundColor: colors.primaryLight, }, headerAppealText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, - body: { paddingHorizontal: 8, paddingBottom: 100, paddingTop: 12 }, + body: { paddingHorizontal: spacing.card, paddingBottom: 100, paddingTop: 12 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -336,8 +336,8 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -361,16 +361,16 @@ const styles = StyleSheet.create({ scoreIcon: { alignItems: 'center', justifyContent: 'center' }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, }, chartCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -388,8 +388,8 @@ const styles = StyleSheet.create({ dimScore: { fontSize: 14, fontWeight: '700', color: colors.textPrimary, marginRight: 8 }, dimTag: { backgroundColor: colors.pageBg, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 2, marginRight: 8, }, @@ -404,8 +404,8 @@ const styles = StyleSheet.create({ sectionHeader: { marginBottom: 10, marginTop: 4 }, emptyBox: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', gap: 8, }, @@ -413,8 +413,8 @@ const styles = StyleSheet.create({ sectionTitle: { fontSize: 16, fontWeight: '700', color: colors.textPrimary }, reviewCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -437,8 +437,8 @@ const styles = StyleSheet.create({ reviewTags: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, marginTop: 10 }, reviewTag: { backgroundColor: colors.primaryLight, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, paddingVertical: 2, }, reviewTagText: { fontSize: 11, color: colors.primaryText }, diff --git a/app/interview-score.tsx b/app/interview-score.tsx index 6759dbb..d6f0faa 100644 --- a/app/interview-score.tsx +++ b/app/interview-score.tsx @@ -391,13 +391,13 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 100, }, infoCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, infoRow: { @@ -419,8 +419,8 @@ const styles = StyleSheet.create({ }, scoreCard: { backgroundColor: colors.primary, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, flexDirection: 'row', justifyContent: 'space-between', @@ -447,8 +447,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardTitle: { @@ -536,8 +536,8 @@ const styles = StyleSheet.create({ suggestionRow: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.borderLight, marginBottom: 8, @@ -566,8 +566,8 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', alignItems: 'center', backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, salaryRange: { fontSize: 24, @@ -615,9 +615,9 @@ const styles = StyleSheet.create({ backgroundColor: colors.infoLight, borderWidth: 1, borderColor: colors.infoBorder, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, marginBottom: 8, }, draftBannerBody: { flex: 1 }, diff --git a/app/interview.tsx b/app/interview.tsx index 4393de2..e4b437f 100644 --- a/app/interview.tsx +++ b/app/interview.tsx @@ -377,12 +377,12 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { paddingHorizontal: 8, paddingBottom: 100, paddingTop: 12 }, + body: { paddingHorizontal: spacing.card, paddingBottom: 100, paddingTop: 12 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -393,8 +393,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -413,8 +413,8 @@ const styles = StyleSheet.create({ modeDesc: { fontSize: 12, color: colors.textSecondary, marginTop: 2 }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -436,7 +436,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.white, borderWidth: 1, @@ -446,7 +446,7 @@ const styles = StyleSheet.create({ typeTextActive: { color: colors.white, fontWeight: '600' }, specialTag: { paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.pageBg, borderWidth: 1, @@ -458,7 +458,7 @@ const styles = StyleSheet.create({ improvementRow: { flexDirection: 'row', alignItems: 'center', - paddingVertical: 8, + paddingVertical: spacing.card, }, improvementLabel: { width: 70, fontSize: 13, color: colors.textPrimary }, improvementTrack: { @@ -484,7 +484,7 @@ const styles = StyleSheet.create({ }, recentDate: { width: 60, fontSize: 12, color: colors.textHint }, recentTitle: { flex: 1, fontSize: 14, color: colors.textPrimary }, - recentTag: { borderRadius: 10, paddingHorizontal: 8, paddingVertical: 2 }, + recentTag: { borderRadius: 10, paddingHorizontal: spacing.card, paddingVertical: 2 }, recentResult: { fontSize: 12, fontWeight: '600' }, footer: { position: 'absolute', diff --git a/app/job-evaluations.tsx b/app/job-evaluations.tsx index 1783353..8409e97 100644 --- a/app/job-evaluations.tsx +++ b/app/job-evaluations.tsx @@ -544,13 +544,13 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 32, }, scoreCard: { backgroundColor: colors.primary, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, scoreMain: { @@ -605,8 +605,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardTitle: { @@ -617,15 +617,15 @@ const styles = StyleSheet.create({ }, chartCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, alignItems: 'center', }, radarCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, alignItems: 'center', }, @@ -710,7 +710,7 @@ const styles = StyleSheet.create({ marginBottom: 10, }, reviewTag: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 4, borderRadius: 12, backgroundColor: colors.primaryLight, @@ -750,8 +750,8 @@ const styles = StyleSheet.create({ /* ---- 回复内容块 ---- */ replyBlock: { marginTop: 8, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.successLight, }, replyBlockLabel: { @@ -774,8 +774,8 @@ const styles = StyleSheet.create({ }, modalCard: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, modalTitle: { fontSize: 16, @@ -791,7 +791,7 @@ const styles = StyleSheet.create({ modalInput: { marginTop: 12, minHeight: 88, - borderRadius: 8, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.border, paddingHorizontal: 12, @@ -833,7 +833,7 @@ const styles = StyleSheet.create({ marginBottom: 16, }, emptyTabContent: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 12, gap: 8, }, @@ -869,8 +869,8 @@ const styles = StyleSheet.create({ }, emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginTop: 8, }, @@ -905,8 +905,8 @@ const styles = StyleSheet.create({ tipCard: { width: '100%', backgroundColor: colors.actionLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'flex-start', }, tipHeader: { diff --git a/app/job-preference.tsx b/app/job-preference.tsx index e19e38b..e2818d7 100644 --- a/app/job-preference.tsx +++ b/app/job-preference.tsx @@ -11,7 +11,7 @@ import { View, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import { useAuth } from '../src/context/AuthContext'; import { useJobPreference } from '../src/hooks'; import { @@ -195,12 +195,12 @@ export default function JobPreferenceScreen() { const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, diff --git a/app/job-publish.tsx b/app/job-publish.tsx index d1de561..6721fcd 100644 --- a/app/job-publish.tsx +++ b/app/job-publish.tsx @@ -431,13 +431,13 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 100, }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardTitle: { @@ -480,7 +480,7 @@ const styles = StyleSheet.create({ }, radioTag: { paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, borderWidth: 1, borderColor: colors.border, diff --git a/app/jobs/[id].tsx b/app/jobs/[id].tsx index 20f3f83..6effdad 100644 --- a/app/jobs/[id].tsx +++ b/app/jobs/[id].tsx @@ -369,7 +369,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -418,21 +418,21 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingBottom: 24, }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, /* ---- 空态 ---- */ emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, + paddingHorizontal: spacing.card, marginBottom: 8, alignItems: 'center', gap: 8, @@ -465,7 +465,7 @@ const styles = StyleSheet.create({ }, statusTag: { backgroundColor: colors.successLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, borderRadius: 10, }, diff --git a/app/jobs/compare.tsx b/app/jobs/compare.tsx index a437928..0897a4e 100644 --- a/app/jobs/compare.tsx +++ b/app/jobs/compare.tsx @@ -193,7 +193,7 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 32, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '500', color: colors.textPrimary }, - content: { padding: 8, paddingBottom: 32 }, + content: { padding: spacing.card, paddingBottom: 32 }, stateWrap: { flex: 1, alignItems: 'center', @@ -204,8 +204,8 @@ const styles = StyleSheet.create({ stateText: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 20, - paddingVertical: 8, - borderRadius: 8, + paddingVertical: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, retryText: { fontSize: 14, color: colors.primaryText }, @@ -231,8 +231,8 @@ const styles = StyleSheet.create({ jobRow: { flexDirection: 'row', gap: 8 }, jobCard: { flex: 1, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.surface, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.borderLight, @@ -252,11 +252,11 @@ const styles = StyleSheet.create({ }, sectionTitle: { fontSize: 15, fontWeight: '500', color: colors.textPrimary }, card: { - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.surface, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.borderLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, }, scoreRow: { paddingVertical: 12, @@ -296,7 +296,7 @@ const styles = StyleSheet.create({ benefitJob: { fontSize: 13, color: colors.textPrimary, marginBottom: 8 }, benefitTags: { flexDirection: 'row', flexWrap: 'wrap', gap: 6 }, benefitTag: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, borderRadius: 4, backgroundColor: colors.primaryLight, diff --git a/app/jobs/offer-compare.tsx b/app/jobs/offer-compare.tsx index 625602d..79c0d2b 100644 --- a/app/jobs/offer-compare.tsx +++ b/app/jobs/offer-compare.tsx @@ -15,7 +15,7 @@ import { useOfferCompareData } from '../../src/hooks'; import { buildOfferCompareText } from '../../src/api'; import { shareText } from '../../src/lib/shareFile'; import { EmptyState } from '../../src/components/StateView'; -import { colors, headerGradientSolid } from '../../src/theme'; +import { colors, headerGradientSolid , spacing } from '../../src/theme'; import type { OfferBenefitGroup, OfferItem, OfferScore, WorkLifeBalanceRow } from '../../src/types'; /* ===================== 子组件 ===================== */ @@ -335,7 +335,7 @@ const styles = StyleSheet.create({ height: 48, flexDirection: 'row', alignItems: 'center', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, backgroundColor: colors.pageBg, }, headerBtn: { @@ -368,7 +368,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -383,7 +383,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingTop: 8, paddingBottom: 12, }, @@ -398,8 +398,8 @@ const styles = StyleSheet.create({ }, offerCard: { width: 150, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -447,8 +447,8 @@ const styles = StyleSheet.create({ /* ---- 通用卡片与分区标题 ---- */ card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, sectionHeader: { @@ -536,9 +536,9 @@ const styles = StyleSheet.create({ flex: 1, alignItems: 'center', justifyContent: 'center', - paddingVertical: 8, + paddingVertical: spacing.card, marginHorizontal: 2, - borderRadius: 8, + borderRadius: spacing.card, }, tableHeaderText: { fontSize: 13, @@ -576,8 +576,8 @@ const styles = StyleSheet.create({ /* ---- AI 建议 ---- */ aiCard: { marginTop: 8, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, aiHeader: { flexDirection: 'row', diff --git a/app/jobs/rank.tsx b/app/jobs/rank.tsx index b8a27a5..d650c10 100644 --- a/app/jobs/rank.tsx +++ b/app/jobs/rank.tsx @@ -394,7 +394,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 4, }, headerBtn: { @@ -436,7 +436,7 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingBottom: 40, }, bottomSpacer: { @@ -460,8 +460,8 @@ const styles = StyleSheet.create({ /* ---- 综合排名卡片 ---- */ rankCard: { backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.primaryBorder, }, @@ -494,7 +494,7 @@ const styles = StyleSheet.create({ }, levelBadge: { backgroundColor: colors.successLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, borderRadius: 4, marginLeft: 8, @@ -523,8 +523,8 @@ const styles = StyleSheet.create({ /* ---- 分区 ---- */ section: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, sectionTitle: { @@ -628,8 +628,8 @@ const styles = StyleSheet.create({ }, emptyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', }, emptyIconWrap: { @@ -667,8 +667,8 @@ const styles = StyleSheet.create({ }, progressCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, }, progressTitle: { @@ -754,7 +754,7 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', alignItems: 'center', backgroundColor: colors.primaryLight, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 14, paddingVertical: 12, marginTop: 8, diff --git a/app/jobs/weight-settings.tsx b/app/jobs/weight-settings.tsx index 1fccde8..b82660d 100644 --- a/app/jobs/weight-settings.tsx +++ b/app/jobs/weight-settings.tsx @@ -183,13 +183,13 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 32, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '500', color: colors.textPrimary }, - content: { padding: 8, paddingBottom: 24 }, + content: { padding: spacing.card, paddingBottom: 24 }, stateWrap: { flex: 1, alignItems: 'center', justifyContent: 'center', gap: 12 }, stateText: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 20, - paddingVertical: 8, - borderRadius: 8, + paddingVertical: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, retryText: { fontSize: 14, color: colors.primaryText }, @@ -197,8 +197,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, summaryCardWarn: { backgroundColor: colors.dangerLight }, @@ -218,8 +218,8 @@ const styles = StyleSheet.create({ templateRow: { gap: 8, paddingRight: 16 }, templateCard: { width: 140, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.surface, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.borderLight, @@ -227,11 +227,11 @@ const styles = StyleSheet.create({ templateName: { fontSize: 14, fontWeight: '500', color: colors.textPrimary, marginBottom: 4 }, templateDesc: { fontSize: 11, color: colors.textSecondary }, dimensionCard: { - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.surface, borderWidth: StyleSheet.hairlineWidth, borderColor: colors.borderLight, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, }, dimRow: { paddingVertical: 14, diff --git a/app/legal.tsx b/app/legal.tsx index c0daa52..c73d48c 100644 --- a/app/legal.tsx +++ b/app/legal.tsx @@ -11,7 +11,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData, useLegalMembership } from '../src/hooks'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import type { LegalFAQ, LegalPlan, LegalService, LegalTemplate } from '../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -336,7 +336,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -357,15 +357,15 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, brandCard: { flexDirection: 'row', alignItems: 'center', backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.primaryBorder, @@ -424,8 +424,8 @@ const styles = StyleSheet.create({ }, emptyHint: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', gap: 8, }, @@ -436,8 +436,8 @@ const styles = StyleSheet.create({ serviceCard: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, }, serviceCardFree: { @@ -494,8 +494,8 @@ const styles = StyleSheet.create({ templateCard: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, }, templateBody: { @@ -514,8 +514,8 @@ const styles = StyleSheet.create({ }, faqCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, faqItem: { paddingVertical: 12, @@ -546,8 +546,8 @@ const styles = StyleSheet.create({ }, planCard: { flex: 1, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -571,9 +571,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', gap: 6, - paddingHorizontal: 8, - paddingVertical: 8, - borderRadius: 8, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.actionLight, borderWidth: 1, borderColor: colors.action, @@ -646,7 +646,7 @@ const styles = StyleSheet.create({ gap: 8, marginTop: 20, height: 48, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryBtn, }, consultText: { @@ -667,7 +667,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/legal/chat.tsx b/app/legal/chat.tsx index 8eb7b15..fda043a 100644 --- a/app/legal/chat.tsx +++ b/app/legal/chat.tsx @@ -14,7 +14,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { LegalMessage } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -151,7 +151,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -172,7 +172,7 @@ const styles = StyleSheet.create({ flex: 1, }, scrollContent: { - padding: 8, + padding: spacing.card, paddingBottom: 16, }, tipCard: { @@ -180,8 +180,8 @@ const styles = StyleSheet.create({ alignItems: 'center', gap: 8, backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, tipText: { @@ -243,7 +243,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', gap: 8, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 10, backgroundColor: colors.white, borderTopWidth: 1, @@ -257,7 +257,7 @@ const styles = StyleSheet.create({ borderWidth: 1, borderColor: colors.border, paddingHorizontal: 14, - paddingVertical: 8, + paddingVertical: spacing.card, fontSize: 14, color: colors.textPrimary, backgroundColor: colors.pageBg, @@ -286,7 +286,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/legal/checkout.tsx b/app/legal/checkout.tsx index b91c872..bb40b3f 100644 --- a/app/legal/checkout.tsx +++ b/app/legal/checkout.tsx @@ -5,7 +5,7 @@ import { ActivityIndicator, Alert, Pressable, ScrollView, StyleSheet, Text, View import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData, useLegalMembership } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { LegalPaymentChannel } from '../../src/types'; /* ===================== 付款方式 ===================== */ @@ -198,7 +198,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -219,12 +219,12 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, summaryCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -280,8 +280,8 @@ const styles = StyleSheet.create({ channelRow: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -353,7 +353,7 @@ const styles = StyleSheet.create({ }, payBtn: { height: 48, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryBtn, alignItems: 'center', justifyContent: 'center', diff --git a/app/legal/faq.tsx b/app/legal/faq.tsx index 16814db..ce54fb3 100644 --- a/app/legal/faq.tsx +++ b/app/legal/faq.tsx @@ -5,7 +5,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { useState } from 'react'; import { useLegalData } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { LegalFAQ } from '../../src/types'; /* ===================== 顶部导航 ===================== */ @@ -82,7 +82,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -103,13 +103,13 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, faqCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, faqItem: { paddingVertical: 12, diff --git a/app/legal/service.tsx b/app/legal/service.tsx index d01e330..36c240d 100644 --- a/app/legal/service.tsx +++ b/app/legal/service.tsx @@ -14,7 +14,7 @@ import { import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData, useLegalMembership, useLegalServiceRequests } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 顶部导航 ===================== */ @@ -233,7 +233,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -254,12 +254,12 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, card: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -310,7 +310,7 @@ const styles = StyleSheet.create({ input: { minHeight: 120, padding: 12, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -327,7 +327,7 @@ const styles = StyleSheet.create({ submitBtn: { marginTop: 16, height: 48, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryBtn, alignItems: 'center', justifyContent: 'center', @@ -347,8 +347,8 @@ const styles = StyleSheet.create({ marginTop: 16, }, emptyCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, alignItems: 'center', }, @@ -357,8 +357,8 @@ const styles = StyleSheet.create({ color: colors.textSecondary, }, errorCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.dangerLight, borderWidth: 1, borderColor: colors.dangerBorder, @@ -378,8 +378,8 @@ const styles = StyleSheet.create({ gap: 8, }, requestCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -397,7 +397,7 @@ const styles = StyleSheet.create({ marginRight: 8, }, statusTag: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, borderRadius: 4, backgroundColor: colors.primaryLight, diff --git a/app/legal/template.tsx b/app/legal/template.tsx index 7bc27fa..d25a77c 100644 --- a/app/legal/template.tsx +++ b/app/legal/template.tsx @@ -4,7 +4,7 @@ import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 顶部导航 ===================== */ @@ -78,7 +78,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -99,14 +99,14 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, headCard: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, marginBottom: 8, }, @@ -125,8 +125,8 @@ const styles = StyleSheet.create({ color: colors.textSecondary, }, contentCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.borderLight, diff --git a/app/legal/templates.tsx b/app/legal/templates.tsx index 57223ad..c85fbb3 100644 --- a/app/legal/templates.tsx +++ b/app/legal/templates.tsx @@ -4,7 +4,7 @@ import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { LegalTemplate } from '../../src/types'; /* ===================== 顶部导航 ===================== */ @@ -81,7 +81,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -102,7 +102,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, templateGrid: { @@ -111,8 +111,8 @@ const styles = StyleSheet.create({ templateCard: { flexDirection: 'row', alignItems: 'center', - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, }, templateBody: { diff --git a/app/legal/upgrade.tsx b/app/legal/upgrade.tsx index eb2aaa9..fdd1db8 100644 --- a/app/legal/upgrade.tsx +++ b/app/legal/upgrade.tsx @@ -5,7 +5,7 @@ import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useLegalData, useLegalMembership } from '../../src/hooks'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { LegalPlan } from '../../src/types'; /* ===================== 顶部导航 ===================== */ @@ -126,7 +126,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -147,7 +147,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, tip: { @@ -159,8 +159,8 @@ const styles = StyleSheet.create({ gap: 8, }, planCard: { - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 1, borderColor: colors.border, @@ -184,9 +184,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', gap: 6, - paddingHorizontal: 8, - paddingVertical: 8, - borderRadius: 8, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.actionLight, borderWidth: 1, borderColor: colors.action, diff --git a/app/onboarding.tsx b/app/onboarding.tsx index d05483a..0d06376 100644 --- a/app/onboarding.tsx +++ b/app/onboarding.tsx @@ -434,17 +434,17 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { paddingHorizontal: 8, paddingBottom: 100, paddingTop: 12 }, + body: { paddingHorizontal: spacing.card, paddingBottom: 100, paddingTop: 12 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, - countdownCard: { borderRadius: 8, padding: 8, marginBottom: 8 }, + countdownCard: { borderRadius: spacing.card, padding: spacing.card, marginBottom: 8 }, countdownTop: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }, countdownLabel: { fontSize: 13, color: colors.textInverse, opacity: 0.9 }, countdownValueRow: { flexDirection: 'row', alignItems: 'baseline', marginTop: 6 }, @@ -477,7 +477,7 @@ const styles = StyleSheet.create({ countdownFill: { height: 8, borderRadius: 4, backgroundColor: colors.white }, groupCard: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -510,15 +510,15 @@ const styles = StyleSheet.create({ itemTitleDone: { textDecorationLine: 'line-through', color: colors.textHint }, requiredTag: { backgroundColor: colors.dangerLight, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 6, paddingVertical: 2, }, requiredText: { fontSize: 10, color: colors.dangerText, fontWeight: '600' }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -577,7 +577,7 @@ const styles = StyleSheet.create({ justifyContent: 'center', paddingHorizontal: 32, }, - modalCard: { backgroundColor: colors.white, borderRadius: 8, padding: 8 }, + modalCard: { backgroundColor: colors.white, borderRadius: spacing.card, padding: spacing.card }, modalTitle: { fontSize: 16, fontWeight: '700', color: colors.textPrimary }, modalInput: { marginTop: 14, @@ -590,13 +590,13 @@ const styles = StyleSheet.create({ color: colors.textPrimary, }, modalActions: { flexDirection: 'row', justifyContent: 'flex-end', gap: 12, marginTop: 18 }, - modalCancel: { paddingHorizontal: spacing.framework, paddingVertical: 8 }, + modalCancel: { paddingHorizontal: spacing.framework, paddingVertical: spacing.card }, modalCancelText: { fontSize: 14, color: colors.textSecondary }, modalConfirm: { backgroundColor: colors.primaryBtn, borderRadius: 18, paddingHorizontal: 20, - paddingVertical: 8, + paddingVertical: spacing.card, }, modalConfirmText: { fontSize: 14, fontWeight: '700', color: colors.white }, }); diff --git a/app/operation-rules.tsx b/app/operation-rules.tsx index 2461afe..21b732c 100644 --- a/app/operation-rules.tsx +++ b/app/operation-rules.tsx @@ -326,7 +326,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, backgroundColor: colors.white, }, headerBtn: { width: 36, height: 36, alignItems: 'center', justifyContent: 'center' }, @@ -337,7 +337,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 12, paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, @@ -354,9 +354,9 @@ const styles = StyleSheet.create({ card: { marginHorizontal: 8, backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, modeRow: { flexDirection: 'row', @@ -375,7 +375,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.successLight, paddingHorizontal: 6, paddingVertical: 2, - borderRadius: 8, + borderRadius: spacing.card, }, recommendedText: { fontSize: 10, fontWeight: '600', color: colors.successText }, modeDesc: { fontSize: 12, color: colors.textSecondary, lineHeight: 18 }, @@ -414,7 +414,7 @@ const styles = StyleSheet.create({ marginLeft: -8, width: 16, height: 16, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.white, borderWidth: 2, borderColor: colors.primary, @@ -439,7 +439,7 @@ const styles = StyleSheet.create({ height: 32, borderWidth: 1, borderColor: colors.border, - borderRadius: 8, + borderRadius: spacing.card, textAlign: 'center', fontSize: 14, color: colors.textPrimary, @@ -476,7 +476,7 @@ const styles = StyleSheet.create({ alignItems: 'center', backgroundColor: colors.textPrimary, paddingHorizontal: spacing.framework, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, }, savingText: { marginLeft: 8, fontSize: 13, color: colors.textInverse }, diff --git a/app/personal-data-export.tsx b/app/personal-data-export.tsx index e078f0e..c6a802e 100644 --- a/app/personal-data-export.tsx +++ b/app/personal-data-export.tsx @@ -387,7 +387,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -405,7 +405,7 @@ const styles = StyleSheet.create({ color: colors.textPrimary, }, body: { - padding: 8, + padding: spacing.card, paddingBottom: 100, }, center: { @@ -418,7 +418,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 8, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -426,8 +426,8 @@ const styles = StyleSheet.create({ introCard: { flexDirection: 'row', backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, introIconWrap: { @@ -470,7 +470,7 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, rowBorder: { @@ -519,8 +519,8 @@ const styles = StyleSheet.create({ formatCard: { flex: 1, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -594,8 +594,8 @@ const styles = StyleSheet.create({ }, previewCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, previewTitle: { fontSize: 14, @@ -659,7 +659,7 @@ const styles = StyleSheet.create({ statusTag: { paddingHorizontal: 6, paddingVertical: 2, - borderRadius: 8, + borderRadius: spacing.card, }, statusCompleted: { backgroundColor: colors.successLight, diff --git a/app/progress.tsx b/app/progress.tsx index 2913597..236d475 100644 --- a/app/progress.tsx +++ b/app/progress.tsx @@ -12,7 +12,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useJobProgress } from '../src/hooks'; -import { colors, headerGradientShort } from '../src/theme'; +import { colors, headerGradientShort , spacing } from '../src/theme'; import type { JobProgressCompany, JobProgressStage } from '../src/types'; const TABS: { key: 'all' | JobProgressStage; label: string }[] = [ @@ -344,7 +344,7 @@ const styles = StyleSheet.create({ }, headerBtn: { width: 40, alignItems: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, viewAllBtn: { flexDirection: 'row', alignItems: 'center', @@ -359,8 +359,8 @@ const styles = StyleSheet.create({ marginRight: 2, }, statsCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, statsRow: { flexDirection: 'row', justifyContent: 'space-between' }, @@ -371,8 +371,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.actionBorder, @@ -396,8 +396,8 @@ const styles = StyleSheet.create({ tabTextActive: { color: colors.white, fontWeight: '600' }, emptyBox: { backgroundColor: colors.surface, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', gap: 8, }, @@ -413,8 +413,8 @@ const styles = StyleSheet.create({ sectionTitle: { fontSize: 16, fontWeight: '700', color: colors.textPrimary }, companyCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -448,8 +448,8 @@ const styles = StyleSheet.create({ nextAction: { fontSize: 12, color: colors.textSecondary }, offerCard: { backgroundColor: colors.successLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.successBorder, @@ -459,7 +459,7 @@ const styles = StyleSheet.create({ offerTag: { backgroundColor: colors.success, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, }, offerTagText: { fontSize: 11, fontWeight: '700', color: colors.white }, @@ -469,8 +469,8 @@ const styles = StyleSheet.create({ offerDeadline: { fontSize: 12, color: colors.actionText, marginLeft: 4 }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -493,6 +493,6 @@ const styles = StyleSheet.create({ barValue: { width: 20, fontSize: 11, color: colors.textSecondary, textAlign: 'right' }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, }); diff --git a/app/resume.tsx b/app/resume.tsx index 87a8b77..8f7bfe2 100644 --- a/app/resume.tsx +++ b/app/resume.tsx @@ -886,23 +886,23 @@ const styles = StyleSheet.create({ headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, headerActions: { flexDirection: 'row', gap: 4 }, headerActionBtn: { width: 36, alignItems: 'center' }, - body: { padding: 8, paddingBottom: 100 }, + body: { padding: spacing.card, paddingBottom: 100 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, }, scoreCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -926,7 +926,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.primaryBtn, borderRadius: 16, paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, }, optimizeBtnDisabled: { backgroundColor: colors.textDisabled }, optimizeBtnText: { fontSize: 14, fontWeight: '700', color: colors.white }, @@ -986,7 +986,7 @@ const styles = StyleSheet.create({ alignSelf: 'flex-start', backgroundColor: colors.successLight, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, }, intentionTagText: { fontSize: 12, color: colors.successText, fontWeight: '600' }, @@ -1014,9 +1014,9 @@ const styles = StyleSheet.create({ alignItems: 'center', marginTop: 8, backgroundColor: colors.infoLight, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, aiTipText: { flex: 1, fontSize: 12, color: colors.infoText, marginLeft: 6 }, aiOptimizeMiniBtn: { @@ -1033,7 +1033,7 @@ const styles = StyleSheet.create({ marginTop: 8, backgroundColor: colors.successLight, borderRadius: 10, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, }, optimizedText: { fontSize: 12, color: colors.successText, marginLeft: 4 }, diff --git a/app/resume/basic.tsx b/app/resume/basic.tsx index b120426..611ecf2 100644 --- a/app/resume/basic.tsx +++ b/app/resume/basic.tsx @@ -5,7 +5,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { PrimaryButton } from '../../components/onboarding/ui/PrimaryButton'; import { CenterState, EditHeader, Field, FormNote, PageFooter } from '../../components/resume/EditKit'; import { useResume } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import { isValidEmail, isValidPhone } from '../../src/utils'; /** @@ -131,6 +131,6 @@ interface BasicForm { const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, formError: { fontSize: 13, color: colors.dangerText, marginBottom: 8 }, }); diff --git a/app/resume/education.tsx b/app/resume/education.tsx index 312134e..0304a72 100644 --- a/app/resume/education.tsx +++ b/app/resume/education.tsx @@ -12,7 +12,7 @@ import { PageFooter, } from '../../components/resume/EditKit'; import { useResume } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { ResumeEducation } from '../../src/types'; /** @@ -250,13 +250,13 @@ const toForm = (edu: ResumeEducation): EduForm => ({ const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, row: { flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, diff --git a/app/resume/experience.tsx b/app/resume/experience.tsx index 5df5d05..e4e9df7 100644 --- a/app/resume/experience.tsx +++ b/app/resume/experience.tsx @@ -13,7 +13,7 @@ import { PageFooter, } from '../../components/resume/EditKit'; import { useResume } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { ResumeExperience } from '../../src/types'; import { splitYearMonth, yearMonthValue } from '../../src/utils'; @@ -296,7 +296,7 @@ const toForm = (exp: ResumeExperience): ExpForm => { const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, section: { marginBottom: 18 }, label: { fontSize: 15, fontWeight: '700', color: colors.textPrimary }, labelTop: { marginTop: 14, marginBottom: 10 }, @@ -308,8 +308,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, diff --git a/app/resume/export.tsx b/app/resume/export.tsx index b5641a8..750a652 100644 --- a/app/resume/export.tsx +++ b/app/resume/export.tsx @@ -622,15 +622,15 @@ const styles = StyleSheet.create({ headerBtn: { width: 60, justifyContent: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, headerSave: { fontSize: 14, color: colors.primary, textAlign: 'right' }, - body: { padding: 8, paddingBottom: 100 }, + body: { padding: spacing.card, paddingBottom: 100 }, center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 40, gap: 12 }, tip: { fontSize: 14, color: colors.textSecondary }, - retryBtn: { paddingHorizontal: 18, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + retryBtn: { paddingHorizontal: 18, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, retryText: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, previewCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginBottom: 8, borderWidth: 1, @@ -661,8 +661,8 @@ const styles = StyleSheet.create({ formatCard: { flex: 1, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', borderWidth: 1, borderColor: colors.borderLight, @@ -678,8 +678,8 @@ const styles = StyleSheet.create({ templateCard: { flex: 1, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', borderWidth: 1, borderColor: colors.borderLight, @@ -688,7 +688,7 @@ const styles = StyleSheet.create({ templateThumb: { width: '100%', height: 80, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primary, padding: 12, marginBottom: 8, @@ -700,8 +700,8 @@ const styles = StyleSheet.create({ templateNameActive: { color: colors.primaryText, fontWeight: '700' }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, diff --git a/app/resume/preview.tsx b/app/resume/preview.tsx index 15580cc..9c6b49b 100644 --- a/app/resume/preview.tsx +++ b/app/resume/preview.tsx @@ -5,7 +5,7 @@ import { PrimaryButton } from '../../components/onboarding/ui/PrimaryButton'; import { CenterState, EditHeader, PageFooter } from '../../components/resume/EditKit'; import { useResume } from '../../src/hooks'; import { UNSET_LABEL } from '../../src/constants'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { Resume, ResumeEducation, ResumeExperience, ResumeProject } from '../../src/types'; /** @@ -198,10 +198,10 @@ function hasIntention(intention: Resume['jobIntention']): boolean { const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, paper: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, padding: 20, borderWidth: 1, borderColor: colors.borderLight, diff --git a/app/resume/project.tsx b/app/resume/project.tsx index 9927bb1..8aa8b6a 100644 --- a/app/resume/project.tsx +++ b/app/resume/project.tsx @@ -12,7 +12,7 @@ import { PageFooter, } from '../../components/resume/EditKit'; import { useResume } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { ResumeProject } from '../../src/types'; /** @@ -205,13 +205,13 @@ const toForm = (proj: ResumeProject): ProjForm => ({ const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.pageBg }, - body: { padding: 8, paddingBottom: 24 }, + body: { padding: spacing.card, paddingBottom: 24 }, row: { flexDirection: 'row', alignItems: 'center', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, diff --git a/app/settings.tsx b/app/settings.tsx index 71f290b..739a75f 100644 --- a/app/settings.tsx +++ b/app/settings.tsx @@ -2,7 +2,7 @@ import { Ionicons } from '@expo/vector-icons'; import { useRouter } from 'expo-router'; import { Alert, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; -import { colors } from '../src/theme'; +import { colors , spacing } from '../src/theme'; import { useAppCache } from '../src/hooks'; import { formatBytes } from '../src/utils'; import { useAuth } from '../src/context/AuthContext'; @@ -240,7 +240,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, }, headerBtn: { width: 36, @@ -261,7 +261,7 @@ const styles = StyleSheet.create({ }, group: { marginTop: 16, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, }, groupTitle: { marginBottom: 8, @@ -271,8 +271,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.surface, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, row: { flexDirection: 'row', @@ -287,7 +287,7 @@ const styles = StyleSheet.create({ iconWrap: { width: 32, height: 32, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, alignItems: 'center', justifyContent: 'center', @@ -308,7 +308,7 @@ const styles = StyleSheet.create({ marginTop: 24, marginHorizontal: 8, backgroundColor: colors.surface, - borderRadius: 8, + borderRadius: spacing.card, paddingVertical: 14, alignItems: 'center', }, diff --git a/app/settings/about.tsx b/app/settings/about.tsx index f7bc433..30d4c1a 100644 --- a/app/settings/about.tsx +++ b/app/settings/about.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'expo-router'; import { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useAboutInfo } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -124,7 +124,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -145,14 +145,14 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, brandCard: { alignItems: 'center', - paddingVertical: 8, + paddingVertical: spacing.card, backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, marginBottom: 8, }, brandLogo: { @@ -176,9 +176,9 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, marginBottom: 8, }, cardTitle: { @@ -251,7 +251,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/settings/account-cancel.tsx b/app/settings/account-cancel.tsx index 7ae62ac..63b354e 100644 --- a/app/settings/account-cancel.tsx +++ b/app/settings/account-cancel.tsx @@ -11,7 +11,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useAccountCancel } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -180,7 +180,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -203,7 +203,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, stateBox: { @@ -222,7 +222,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -235,8 +235,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', gap: 8, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, warnText: { @@ -256,7 +256,7 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, bulletRow: { diff --git a/app/settings/account.tsx b/app/settings/account.tsx index 05e82d8..b1a8b0a 100644 --- a/app/settings/account.tsx +++ b/app/settings/account.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'expo-router'; import { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useAccountSecurity } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -104,7 +104,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -125,7 +125,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, tip: { @@ -137,8 +137,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, row: { flexDirection: 'row', @@ -188,7 +188,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/settings/delete-data.tsx b/app/settings/delete-data.tsx index 335b765..cd9948a 100644 --- a/app/settings/delete-data.tsx +++ b/app/settings/delete-data.tsx @@ -12,7 +12,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useDeleteAllData } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -199,7 +199,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -222,7 +222,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, stateBox: { @@ -241,7 +241,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -252,8 +252,8 @@ const styles = StyleSheet.create({ }, introCard: { backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, introText: { @@ -272,9 +272,9 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', - padding: 8, + padding: spacing.card, }, row: { flexDirection: 'row', @@ -319,8 +319,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'flex-start', gap: 8, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, warnText: { diff --git a/app/settings/notification.tsx b/app/settings/notification.tsx index b0ff3a0..a3b9462 100644 --- a/app/settings/notification.tsx +++ b/app/settings/notification.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'expo-router'; import { ActivityIndicator, Pressable, ScrollView, StyleSheet, Switch, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useNotificationSettings } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -90,7 +90,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -111,7 +111,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, tip: { @@ -123,8 +123,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, }, row: { flexDirection: 'row', @@ -165,7 +165,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/app/settings/password.tsx b/app/settings/password.tsx index 35c9394..704e2ca 100644 --- a/app/settings/password.tsx +++ b/app/settings/password.tsx @@ -6,7 +6,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { useChangePassword } from '../../src/hooks'; import { useAuth } from '../../src/context/AuthContext'; import { PasswordField } from '../../src/components/PasswordField'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -132,7 +132,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -155,7 +155,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, tip: { @@ -167,9 +167,9 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - paddingHorizontal: 8, - paddingVertical: 8, + borderRadius: spacing.card, + paddingHorizontal: spacing.card, + paddingVertical: spacing.card, }, gap: { height: 6, diff --git a/app/settings/privacy.tsx b/app/settings/privacy.tsx index 6224b80..accc6b1 100644 --- a/app/settings/privacy.tsx +++ b/app/settings/privacy.tsx @@ -6,7 +6,7 @@ import { usePrivacyCenter } from '../../src/hooks'; import { buildPrivacySummaryText } from '../../src/api'; import { shareText } from '../../src/lib/shareFile'; import { ErrorState, LoadingState } from '../../src/components/StateView'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { PrivacyLevelInfo, PrivacySettingItem, PrivacySection } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -206,7 +206,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -227,12 +227,12 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, levelCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, levelRow: { @@ -276,7 +276,7 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, row: { @@ -321,8 +321,8 @@ const styles = StyleSheet.create({ }, explanationCard: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, explanationTitle: { diff --git a/app/settings/privacy/[id].tsx b/app/settings/privacy/[id].tsx index b7a9455..4bbaf0c 100644 --- a/app/settings/privacy/[id].tsx +++ b/app/settings/privacy/[id].tsx @@ -11,7 +11,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { usePrivacyDetailSetting } from '../../../src/hooks'; -import { colors } from '../../../src/theme'; +import { colors , spacing } from '../../../src/theme'; import type { PrivacyDetailOption } from '../../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -159,7 +159,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -182,7 +182,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, stateBox: { @@ -199,7 +199,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -210,8 +210,8 @@ const styles = StyleSheet.create({ }, introCard: { backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, introText: { @@ -230,7 +230,7 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, row: { @@ -266,8 +266,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'flex-start', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, gap: 8, }, noteText: { diff --git a/app/settings/privacy/dnd.tsx b/app/settings/privacy/dnd.tsx index a9242b1..dc30126 100644 --- a/app/settings/privacy/dnd.tsx +++ b/app/settings/privacy/dnd.tsx @@ -12,7 +12,7 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useDndSetting } from '../../../src/hooks'; -import { colors } from '../../../src/theme'; +import { colors , spacing } from '../../../src/theme'; /* ===================== 子组件:顶部导航 ===================== */ @@ -165,7 +165,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -188,7 +188,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 24, }, stateBox: { @@ -205,7 +205,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -215,8 +215,8 @@ const styles = StyleSheet.create({ color: colors.white, }, statCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginBottom: 8, }, @@ -240,7 +240,7 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, overflow: 'hidden', }, row: { @@ -276,14 +276,14 @@ const styles = StyleSheet.create({ fontWeight: '600', color: colors.primary, paddingVertical: 4, - paddingHorizontal: 8, + paddingHorizontal: spacing.card, }, noteCard: { flexDirection: 'row', alignItems: 'flex-start', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, gap: 8, }, noteText: { diff --git a/app/settings/privacy/keywords.tsx b/app/settings/privacy/keywords.tsx index 6964047..278862f 100644 --- a/app/settings/privacy/keywords.tsx +++ b/app/settings/privacy/keywords.tsx @@ -185,7 +185,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -208,7 +208,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 16, }, stateBox: { @@ -225,7 +225,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -235,8 +235,8 @@ const styles = StyleSheet.create({ color: colors.white, }, statCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginBottom: 8, }, @@ -251,8 +251,8 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, cardTitle: { @@ -309,8 +309,8 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'flex-start', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, gap: 8, }, noteText: { diff --git a/app/settings/qualifications.tsx b/app/settings/qualifications.tsx index 9ee2e1b..4292528 100644 --- a/app/settings/qualifications.tsx +++ b/app/settings/qualifications.tsx @@ -4,7 +4,7 @@ import { Image, Pressable, ScrollView, StyleSheet, Text, View } from 'react-nati import { SafeAreaView } from 'react-native-safe-area-context'; import { EmptyState, ErrorState, LoadingState } from '../../src/components/StateView'; import { useQualifications } from '../../src/hooks'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; import type { QualificationLicense } from '../../src/types'; /* ===================== 子组件:顶部导航 ===================== */ @@ -127,7 +127,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -148,16 +148,16 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 32, gap: 8, }, companyCard: { backgroundColor: colors.primaryLight, - borderRadius: 8, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.primaryBorder, - padding: 8, + padding: spacing.card, }, companyLabel: { fontSize: 12, @@ -179,10 +179,10 @@ const styles = StyleSheet.create({ }, card: { backgroundColor: colors.surface, - borderRadius: 8, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.border, - padding: 8, + padding: spacing.card, }, cardHeader: { flexDirection: 'row', @@ -198,21 +198,21 @@ const styles = StyleSheet.create({ marginTop: 8, width: '100%', height: 180, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.pageBg, }, /* 图片占位:用「提醒卡片底 + 弱警示描边」语义色,一眼看出「这里是待办」 */ imagePlaceholder: { marginTop: 8, height: 132, - borderRadius: 8, + borderRadius: spacing.card, borderWidth: 1, borderStyle: 'dashed', borderColor: colors.actionBorder, backgroundColor: colors.actionLight, alignItems: 'center', justifyContent: 'center', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, gap: 8, }, placeholderText: { diff --git a/app/tools/salary-calculator.tsx b/app/tools/salary-calculator.tsx index cf0a3d5..2680e8c 100644 --- a/app/tools/salary-calculator.tsx +++ b/app/tools/salary-calculator.tsx @@ -16,7 +16,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { useSalaryCalculator, useSalaryRecords, useSalaryToolLinks } from '../../src/hooks'; import { clampSocialBase } from '../../src/api'; import { LoadingState, ErrorState, EmptyState } from '../../src/components/StateView'; -import { colors, headerGradientShort } from '../../src/theme'; +import { colors, headerGradientShort , spacing } from '../../src/theme'; import { CITIES, DEFAULT_SOCIAL_PROFILE, @@ -569,11 +569,11 @@ const styles = StyleSheet.create({ headerBtn: { width: 60, justifyContent: 'center' }, headerTitle: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, headerAction: { fontSize: 14, color: colors.primary, textAlign: 'right' }, - body: { padding: 8, paddingBottom: 32 }, + body: { padding: spacing.card, paddingBottom: 32 }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -594,7 +594,7 @@ const styles = StyleSheet.create({ backgroundColor: colors.pageBg, borderRadius: 10, paddingHorizontal: 12, - paddingVertical: 8, + paddingVertical: spacing.card, }, input: { minWidth: 80, @@ -607,8 +607,8 @@ const styles = StyleSheet.create({ selectBox: { flexDirection: 'row', alignItems: 'center' }, selectValue: { fontSize: 15, fontWeight: '600', color: colors.textPrimary, marginRight: 4 }, resultCard: { - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, alignItems: 'center', marginBottom: 8, }, @@ -637,15 +637,15 @@ const styles = StyleSheet.create({ taxItem: { flex: 1, backgroundColor: colors.pageBg, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, }, taxItemLabel: { fontSize: 12, color: colors.textSecondary, marginBottom: 6 }, taxItemValue: { fontSize: 18, fontWeight: '800', color: colors.textPrimary }, taxRow: { flexDirection: 'row', justifyContent: 'space-between', - paddingVertical: 8, + paddingVertical: spacing.card, }, taxRowLabel: { fontSize: 14, color: colors.textPrimary }, taxRowValue: { fontSize: 15, fontWeight: '700', color: colors.textPrimary }, diff --git a/app/tools/skill-cloud.tsx b/app/tools/skill-cloud.tsx index 9a40cab..0ac8b60 100644 --- a/app/tools/skill-cloud.tsx +++ b/app/tools/skill-cloud.tsx @@ -547,7 +547,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', backgroundColor: colors.pageBg, - borderRadius: 8, + borderRadius: spacing.card, paddingHorizontal: 10, paddingVertical: 5, }, @@ -564,13 +564,13 @@ const styles = StyleSheet.create({ categoryTabActive: { backgroundColor: colors.primaryLight, borderColor: colors.primary }, categoryText: { fontSize: 12, color: colors.textSecondary }, categoryTextActive: { color: colors.primaryText, fontWeight: '600' }, - body: { paddingHorizontal: 8, paddingBottom: 32 }, + body: { paddingHorizontal: spacing.card, paddingBottom: 32 }, sectionTitle: { fontSize: 15, fontWeight: '700', color: colors.textPrimary, marginBottom: 10 }, cloudCard: { backgroundColor: colors.white, - borderRadius: 8, - paddingVertical: 8, - paddingHorizontal: 8, + borderRadius: spacing.card, + paddingVertical: spacing.card, + paddingHorizontal: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -579,8 +579,8 @@ const styles = StyleSheet.create({ card: { marginTop: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -588,7 +588,7 @@ const styles = StyleSheet.create({ skillRow: { flexDirection: 'row', alignItems: 'center', - paddingVertical: 8, + paddingVertical: spacing.card, borderTopWidth: 1, borderTopColor: colors.borderLight, }, @@ -623,8 +623,8 @@ const styles = StyleSheet.create({ matchCard: { marginTop: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -663,16 +663,16 @@ const styles = StyleSheet.create({ backgroundColor: colors.pageBg, borderRadius: 10, paddingHorizontal: 12, - paddingVertical: 8, + paddingVertical: spacing.card, fontSize: 14, color: colors.textPrimary, }, searchEmpty: { alignItems: 'center', gap: 10, - padding: 8, + padding: spacing.card, backgroundColor: colors.white, - borderRadius: 8, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.borderLight, }, @@ -698,8 +698,8 @@ const styles = StyleSheet.create({ modalBody: { paddingHorizontal: spacing.framework, paddingBottom: 12 }, pathSummary: { backgroundColor: colors.primaryLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginTop: 8, marginBottom: 8, }, @@ -728,8 +728,8 @@ const styles = StyleSheet.create({ detailCard: { marginTop: 8, backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, borderWidth: 1, borderColor: colors.successBorder, }, @@ -757,7 +757,7 @@ const styles = StyleSheet.create({ tip: { fontSize: 14, color: colors.textSecondary }, retryBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, diff --git a/components/onboarding/screens/B1Wechat.tsx b/components/onboarding/screens/B1Wechat.tsx index 1187d68..70ffe38 100644 --- a/components/onboarding/screens/B1Wechat.tsx +++ b/components/onboarding/screens/B1Wechat.tsx @@ -32,7 +32,7 @@ export function B1Wechat() { const styles = StyleSheet.create({ center: { flex: 1, alignItems: 'center', justifyContent: 'center', gap: spacing.block, paddingBottom: 40 }, - preview: { flexDirection: 'row', alignItems: 'center', gap: spacing.block, backgroundColor: colors.white, padding: 8, borderRadius: 8, borderWidth: 1, borderColor: colors.border }, + preview: { flexDirection: 'row', alignItems: 'center', gap: spacing.block, backgroundColor: colors.white, padding: spacing.card, borderRadius: spacing.card, borderWidth: 1, borderColor: colors.border }, previewText: { gap: 4 }, nick: { fontSize: 15, fontWeight: '700', color: colors.textPrimary }, tip: { fontSize: 12, color: colors.textHint }, diff --git a/components/onboarding/screens/P12Company.tsx b/components/onboarding/screens/P12Company.tsx index 3bff561..8f02a0f 100644 --- a/components/onboarding/screens/P12Company.tsx +++ b/components/onboarding/screens/P12Company.tsx @@ -1,5 +1,5 @@ import { StyleSheet, Text, View } from 'react-native'; -import { colors } from '../../../src/theme'; +import { colors , spacing } from '../../../src/theme'; import { useOnboarding } from '../../../src/hooks'; import { ScreenShell } from '../ui/ScreenShell'; import { SearchInput } from '../ui/SearchInput'; @@ -34,8 +34,8 @@ export function P12Company() { const styles = StyleSheet.create({ notice: { marginTop: 8, - padding: 8, - borderRadius: 8, + padding: spacing.card, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, noticeText: { fontSize: 12, color: colors.primaryText, lineHeight: 18 }, diff --git a/components/onboarding/screens/P17Reference.tsx b/components/onboarding/screens/P17Reference.tsx index afd63e8..7e76b94 100644 --- a/components/onboarding/screens/P17Reference.tsx +++ b/components/onboarding/screens/P17Reference.tsx @@ -80,8 +80,8 @@ const styles = StyleSheet.create({ swapText: { fontSize: 13, color: colors.primary, fontWeight: '600' }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, gap: spacing.block, borderWidth: 1, borderColor: colors.border, diff --git a/components/onboarding/screens/P1Login.tsx b/components/onboarding/screens/P1Login.tsx index d75477c..522b121 100644 --- a/components/onboarding/screens/P1Login.tsx +++ b/components/onboarding/screens/P1Login.tsx @@ -76,7 +76,7 @@ export function P1Login() { const styles = StyleSheet.create({ screen: { flex: 1, backgroundColor: colors.pageBg }, topGlow: { position: 'absolute', top: 0, left: 0, right: 0, height: 200 }, - content: { flexGrow: 1, paddingHorizontal: 8, paddingBottom: spacing.block }, + content: { flexGrow: 1, paddingHorizontal: spacing.card, paddingBottom: spacing.block }, brandArea: { alignItems: 'center', marginTop: '22%' }, flexSpacer: { flex: 1, minHeight: 28 }, quickBtn: { diff --git a/components/onboarding/screens/P2WechatCode.tsx b/components/onboarding/screens/P2WechatCode.tsx index 8c8113a..f6f9732 100644 --- a/components/onboarding/screens/P2WechatCode.tsx +++ b/components/onboarding/screens/P2WechatCode.tsx @@ -132,7 +132,7 @@ const styles = StyleSheet.create({ marginTop: 30, paddingHorizontal: 18, paddingVertical: spacing.sm, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.borderLight, }, toastText: { fontSize: 13, color: colors.textDisabled }, diff --git a/components/onboarding/screens/P3Identity.tsx b/components/onboarding/screens/P3Identity.tsx index a280189..6d7026b 100644 --- a/components/onboarding/screens/P3Identity.tsx +++ b/components/onboarding/screens/P3Identity.tsx @@ -70,7 +70,7 @@ export function P3Identity() { const styles = StyleSheet.create({ heading: { fontSize: 22, fontWeight: '800', color: colors.textPrimary, textAlign: 'center', marginVertical: 16 }, - card: { backgroundColor: colors.white, borderRadius: 8, padding: 8, alignItems: 'center', borderWidth: 1, borderColor: colors.border }, + card: { backgroundColor: colors.white, borderRadius: spacing.card, padding: spacing.card, alignItems: 'center', borderWidth: 1, borderColor: colors.border }, cardTop: { marginBottom: 16 }, cardBtn: { width: '100%', diff --git a/components/onboarding/ui/BrandHeader.tsx b/components/onboarding/ui/BrandHeader.tsx index 50f6a7a..78bb40a 100644 --- a/components/onboarding/ui/BrandHeader.tsx +++ b/components/onboarding/ui/BrandHeader.tsx @@ -14,7 +14,7 @@ export function BrandHeader({ slogan }: { slogan?: string }) { } const styles = StyleSheet.create({ - wrap: { alignItems: 'center', gap: spacing.block, paddingVertical: 8 }, + wrap: { alignItems: 'center', gap: spacing.block, paddingVertical: spacing.card }, name: { fontSize: 26, fontWeight: '800', color: colors.textPrimary }, slogan: { fontSize: 13, color: colors.textHint }, }); diff --git a/components/onboarding/ui/CountdownButton.tsx b/components/onboarding/ui/CountdownButton.tsx index e2533c9..50e6a17 100644 --- a/components/onboarding/ui/CountdownButton.tsx +++ b/components/onboarding/ui/CountdownButton.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from 'react'; import { Pressable, StyleSheet, Text } from 'react-native'; -import { colors } from '../../../src/theme'; +import { colors , spacing } from '../../../src/theme'; interface Props { disabled?: boolean; @@ -47,7 +47,7 @@ export function CountdownButton({ disabled = false, onSend, seconds = 60 }: Prop } const styles = StyleSheet.create({ - btn: { paddingHorizontal: 14, paddingVertical: 8, borderRadius: 16, backgroundColor: colors.primaryLight }, + btn: { paddingHorizontal: 14, paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight }, btnDisabled: { backgroundColor: colors.borderLight }, text: { fontSize: 13, fontWeight: '600', color: colors.primaryText }, textDisabled: { color: colors.textDisabled }, diff --git a/components/onboarding/ui/Modal.tsx b/components/onboarding/ui/Modal.tsx index 91fa498..42924ce 100644 --- a/components/onboarding/ui/Modal.tsx +++ b/components/onboarding/ui/Modal.tsx @@ -31,8 +31,8 @@ const styles = StyleSheet.create({ card: { width: '84%', backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, maxHeight: '80%', }, title: { fontSize: 18, fontWeight: '800', color: colors.textPrimary, marginBottom: spacing.block, textAlign: 'center' }, diff --git a/components/onboarding/ui/RadioRow.tsx b/components/onboarding/ui/RadioRow.tsx index 8d8fa22..660ff78 100644 --- a/components/onboarding/ui/RadioRow.tsx +++ b/components/onboarding/ui/RadioRow.tsx @@ -1,6 +1,6 @@ import { Ionicons } from '@expo/vector-icons'; import { Pressable, StyleSheet, Text, View } from 'react-native'; -import { colors } from '../../../src/theme'; +import { colors , spacing } from '../../../src/theme'; interface Props { label: string; @@ -29,9 +29,9 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingVertical: 8, - paddingHorizontal: 8, - borderRadius: 8, + paddingVertical: spacing.card, + paddingHorizontal: spacing.card, + borderRadius: spacing.card, borderWidth: 1, borderColor: colors.border, backgroundColor: colors.white, diff --git a/components/onboarding/ui/ScreenShell.tsx b/components/onboarding/ui/ScreenShell.tsx index 9ac4caa..5faee9a 100644 --- a/components/onboarding/ui/ScreenShell.tsx +++ b/components/onboarding/ui/ScreenShell.tsx @@ -47,6 +47,6 @@ const styles = StyleSheet.create({ titleInline: { fontSize: 17, fontWeight: '700', color: colors.textPrimary }, titleCenter: { fontSize: 18, fontWeight: '800', color: colors.textPrimary, textAlign: 'center', paddingVertical: spacing.block }, scroll: { flex: 1 }, - scrollContent: { flexGrow: 1, padding: 8, paddingBottom: 28 }, + scrollContent: { flexGrow: 1, padding: spacing.card, paddingBottom: 28 }, footer: { padding: 16, paddingBottom: spacing.section, backgroundColor: colors.pageBg }, }); diff --git a/components/resume/EditKit.tsx b/components/resume/EditKit.tsx index d0736a9..d82a484 100644 --- a/components/resume/EditKit.tsx +++ b/components/resume/EditKit.tsx @@ -7,7 +7,7 @@ import { Ionicons } from '@expo/vector-icons'; import type { ReactNode } from 'react'; import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native'; -import { colors } from '../../src/theme'; +import { colors , spacing } from '../../src/theme'; /** 顶部导航:返回 + 居中标题(右侧留同宽占位,保证标题居中) */ export function EditHeader({ title, onBack }: { title: string; onBack: () => void }) { @@ -176,8 +176,8 @@ const styles = StyleSheet.create({ note: { fontSize: 12, color: colors.textHint, lineHeight: 18 }, card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -200,7 +200,7 @@ const styles = StyleSheet.create({ centerText: { fontSize: 14, color: colors.textSecondary }, centerBtn: { paddingHorizontal: 18, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 16, backgroundColor: colors.primaryLight, }, diff --git a/src/components/JobCard.tsx b/src/components/JobCard.tsx index a007126..f8eedaf 100644 --- a/src/components/JobCard.tsx +++ b/src/components/JobCard.tsx @@ -1,3 +1,4 @@ +import { spacing } from '../../src/theme'; import { Pressable, StyleSheet, Text, View } from 'react-native'; import { colors } from '../theme'; import type { Job } from '../types'; @@ -49,8 +50,8 @@ export function JobCard({ job, onPress }: { job: JobSummary; onPress: () => void const styles = StyleSheet.create({ card: { backgroundColor: colors.white, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, borderWidth: 1, borderColor: colors.borderLight, @@ -68,9 +69,9 @@ const styles = StyleSheet.create({ marginRight: 8, }, scoreBadge: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 2, - borderRadius: 8, + borderRadius: spacing.card, backgroundColor: colors.primaryLight, }, scoreText: { @@ -110,7 +111,7 @@ const styles = StyleSheet.create({ marginTop: 10, }, tag: { - paddingHorizontal: 8, + paddingHorizontal: spacing.card, paddingVertical: 3, borderRadius: 6, backgroundColor: colors.borderLight, diff --git a/src/components/LegalDocScreen.tsx b/src/components/LegalDocScreen.tsx index 2bf910f..4e5c6d5 100644 --- a/src/components/LegalDocScreen.tsx +++ b/src/components/LegalDocScreen.tsx @@ -1,3 +1,4 @@ +import { spacing } from '../../src/theme'; import { Ionicons } from '@expo/vector-icons'; import { useRouter } from 'expo-router'; import { @@ -111,7 +112,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', - paddingHorizontal: 8, + paddingHorizontal: spacing.card, height: 48, backgroundColor: colors.white, borderBottomWidth: 1, @@ -134,7 +135,7 @@ const styles = StyleSheet.create({ flex: 1, }, content: { - padding: 8, + padding: spacing.card, paddingBottom: 32, }, stateBox: { @@ -151,7 +152,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, @@ -171,8 +172,8 @@ const styles = StyleSheet.create({ }, preambleCard: { backgroundColor: colors.infoLight, - borderRadius: 8, - padding: 8, + borderRadius: spacing.card, + padding: spacing.card, marginBottom: 8, }, preambleText: { diff --git a/src/components/StateView.tsx b/src/components/StateView.tsx index cc02650..06a2f84 100644 --- a/src/components/StateView.tsx +++ b/src/components/StateView.tsx @@ -1,3 +1,4 @@ +import { spacing } from '../../src/theme'; import { Ionicons } from '@expo/vector-icons'; import type { ReactNode } from 'react'; import { ActivityIndicator, Pressable, StyleSheet, Text, View } from 'react-native'; @@ -95,7 +96,7 @@ const styles = StyleSheet.create({ retryBtn: { marginTop: 16, paddingHorizontal: 24, - paddingVertical: 8, + paddingVertical: spacing.card, borderRadius: 18, backgroundColor: colors.primaryBtn, }, diff --git a/项目开发状态.md b/项目开发状态.md index 112e749..f88d059 100644 --- a/项目开发状态.md +++ b/项目开发状态.md @@ -1804,7 +1804,7 @@ deep-link 只能到 P1。**临时**把初始步改成目标页截图,**看完 `tsc` 0 · `eslint` 0 · `npm test` 26 套件 / 365 用例 · `check:spacing` 卡片全 8px · `check:routes` · `check:affordances` · `check:icons` 全绿。 **6. 残留 / 待跟进** -- ① **卡片未批量迁移到 `spacing.card`**:保留字面量 `8`,审计仍能拦(迁移是纯机械替换,风险低但非必须,留待后续)。 +- ① **卡片未批量迁移到 `spacing.card`**:~~保留字面量 `8`~~ **已于 2026-09-21 收尾完成(见 4.23)—— 全仓卡片 `borderRadius / padding(含 Horizontal/Vertical): 8` 收敛为 `spacing.card`,审计令牌引用命中 954 处且仍 0 违规,审计网未撕裂**。 - ② B5 已完成(见第 4 条,2026-09-21 补做)。 - ③ `AGENTS.md` 第 10 行仍写「边距间隔一致,为 8px」,现非卡片块间距为 12,措辞略偏——非阻断,待文档对齐(可改成「卡片间距 8px / 块间距 12px」)。 @@ -1898,3 +1898,24 @@ npx expo export --platform android --output-dir <临时目录> # 启动 npm start # 即 expo start ``` + +--- + +### 4.23 卡片间隔令牌化收尾(2026-09-21 批次,接 4.21 残留 ①) + +**目标**:把 4.21 起新增的 `spacing` 令牌层彻底闭环——卡片相关的字面量 `8` 全部收敛为 `spacing.card`(值恒 8,纯令牌化、零视觉变化),消除「卡片圆角/内边距仍写死数字」的最后残留,统一走 `src/theme` 单一来源。 + +**改动范围(82 个 .tsx 文件)** +- 目标属性:`borderRadius: 8` / `padding: 8` / `paddingHorizontal: 8` / `paddingVertical: 8` → `spacing.card`(正则按属性名精确匹配,不动 `margin` / `gap` / 其它数字,避免误伤非卡片间距)。 +- 自动补齐 `spacing` 的 theme 导入:已有 theme 导入则并入命名列表;无则按文件目录深度计算相对路径(`../` 层数)插入 `import { spacing } from '<相对路径>src/theme'`。 +- 数值恒等(8 === spacing.card),故 tsc / eslint / 运行行为均无变化,仅代码形态令牌化。 + +**防回归(与 4.21 同一顾虑)** +- `scripts/check-spacing.mjs` 的 `resolveSpacing` 已支持解析 `spacing.card`(SPACING_TOKENS.card = 8),令牌化后审计仍能解析数值,不会把卡片静默跳过。 +- 迁移后审计输出「令牌引用命中 954 处」且仍为 0 违规,证明令牌化后审计网未撕裂、仍在工作。 + +**验收**:tsc 0 · eslint 0 · check:spacing 0(196 卡片全 8px、令牌命中 954)· check:routes 0 · check:affordances 0 · check:icons 0 · check:backend-stubs 0 · 365 测试全绿(26 套件)。 + +**残留 / 待跟进** +- ① `AGENTS.md` 第 10 行仍写「边距间隔一致,为 8px」,现非卡片块间距为 12,措辞略偏——非阻断,待文档对齐(可改成「卡片间距 8px / 块间距 12px」)。(同 4.21 残留 ③,仍未动) +- ② 本次为机械令牌化,未逐屏核对视觉(行为不变,风险低);如需 100% 把握可补一次真机走查,但非必须。