fix: about/legal pages read from markdown, remove unused about translations

- AboutPage now reads from public/legal/{locale}/about_us.md
- LegalPage no longer depends on about translations, uses local maps
- Fixed email in LegalPage from ann@xunmee.com to feedback@xunmee.com
- Removed ICP number and wrong email from utils.ts about section
- Removed unused about section from Translations interface and all locales
This commit is contained in:
ZL-Q
2026-05-10 20:51:47 +08:00
parent 20abe0be0c
commit 982d10d37e
3 changed files with 63 additions and 54 deletions
+32 -40
View File
@@ -1,60 +1,52 @@
---
import { t, localePath, type Locale } from '../i18n/utils';
import fs from 'node:fs';
import path from 'node:path';
import { marked } from 'marked';
interface Props {
locale: Locale;
}
const { locale } = Astro.props;
const a = t(locale, 'about');
const footer = t(locale, 'footer');
const titleMap: Record<Locale, string> = {
zh: '关于我们',
zh_Hant: '關於我們',
en: 'About Us',
};
const filePath = path.resolve('public/legal', locale, 'about_us.md');
let raw = '';
try {
raw = fs.readFileSync(filePath, 'utf-8');
raw = raw.replace(/^#\s+.+\n*/m, '');
} catch {
raw = `Content not available.`;
}
const content = await marked(raw);
---
<section class="bg-gradient-to-b from-white to-violet-50 py-16 md:py-20 px-5 md:px-20 text-center">
<h1 class="reveal text-slate-900 text-4xl md:text-[48px] font-extrabold">{a.title}</h1>
<p class="reveal stagger-1 text-slate-500 text-lg mt-4">{a.subtitle}</p>
<!-- Header -->
<section class="w-full bg-gradient-to-b from-white to-violet-50 py-16 md:py-20 px-6 md:px-20 text-center">
<h1 class="reveal text-slate-900 text-4xl md:text-[48px] font-extrabold">{titleMap[locale]}</h1>
</section>
<section class="bg-white py-16 md:py-20 px-5 md:px-20">
<div class="max-w-[1200px] mx-auto flex flex-col md:flex-row gap-16">
<div class="reveal-left flex-1 flex flex-col gap-6">
<h2 class="text-slate-900 text-[28px] font-bold">{a.storyTitle}</h2>
<div class="w-12 h-1 bg-violet-600 rounded"></div>
<p class="text-slate-600 text-base leading-loose">{a.p1}</p>
<p class="text-slate-600 text-base leading-loose">{a.p2}</p>
<p class="text-slate-600 text-base leading-loose">{a.p3}</p>
</div>
<div class="reveal-right w-full md:w-[400px] bg-slate-50 border border-slate-200 rounded-2xl p-8 flex flex-col gap-6 shrink-0">
<h3 class="text-slate-900 text-xl font-bold">{a.companyInfo}</h3>
<div class="h-px bg-slate-200"></div>
<p class="text-slate-600 text-base">{a.company}</p>
<div>
<p class="text-slate-400 text-sm font-semibold">{a.emailLabel}</p>
<p class="text-slate-600 text-[15px]">{a.email}</p>
</div>
<div>
<p class="text-slate-400 text-sm font-semibold">{a.devLabel}</p>
<p class="text-slate-600 text-[15px]">{a.developer}</p>
</div>
<div>
<p class="text-slate-400 text-sm font-semibold">{a.icpLabel}</p>
<p class="text-slate-600 text-[15px]">{a.icp}</p>
</div>
</div>
<!-- Content -->
<section class="w-full py-16 md:py-20 px-6 md:px-20 bg-white">
<div class="max-w-4xl mx-auto reveal prose prose-slate
[&_h2]:text-[28px] [&_h2]:font-bold [&_h2]:text-slate-900 [&_h2]:mt-8 [&_h2]:mb-4
[&_p]:text-slate-600 [&_p]:text-base [&_p]:leading-loose
[&_strong]:text-slate-700 [&_hr]:border-slate-200 [&_hr]:my-8">
<Fragment set:html={content} />
</div>
</section>
<section class="bg-amber-50 py-20 px-5 md:px-20">
<div class="reveal max-w-[800px] mx-auto text-center flex flex-col gap-5">
<h3 class="text-amber-800 text-2xl font-bold">{a.warningTitle}</h3>
<p class="text-amber-700 text-[15px] leading-loose">{a.warningBody}</p>
</div>
</section>
<section class="bg-slate-50 py-12 px-5 md:px-20">
<!-- Legal Links -->
<section class="w-full bg-slate-50 py-12 px-6 md:px-20">
<div class="reveal max-w-[600px] mx-auto text-center flex flex-col gap-5">
<h3 class="text-slate-900 text-xl font-bold">{a.legalTitle}</h3>
<h3 class="text-slate-900 text-xl font-bold">{locale === 'en' ? 'Legal' : '法律条款'}</h3>
<div class="flex justify-center gap-8">
<a href={localePath(locale, '/privacy')} class="text-violet-600 text-[15px] hover:underline">{footer.col3Link1}</a>
<a href={localePath(locale, '/terms')} class="text-violet-600 text-[15px] hover:underline">{footer.col3Link2}</a>
+31 -10
View File
@@ -12,7 +12,6 @@ interface Props {
const { locale, docType } = Astro.props;
const footer = t(locale, 'footer');
const about = t(locale, 'about');
const titleMap: Record<string, Record<Locale, string>> = {
privacy_policy: { zh: '隐私政策', zh_Hant: '隱私政策', en: 'Privacy Policy' },
@@ -22,8 +21,30 @@ const subtitleMap: Record<string, Record<Locale, string>> = {
privacy_policy: { zh: '最后更新日期:2026年4月27日', zh_Hant: '最後更新日期:2026年4月27日', en: 'Last updated: April 27, 2026' },
terms_of_service: { zh: '最后更新日期:2026年4月27日', zh_Hant: '最後更新日期:2026年4月27日', en: 'Last updated: April 27, 2026' },
};
const warningMap: Record<Locale, { title: string; body: string }> = {
zh: {
title: '特别提醒',
body: '本 App 所有 AI 生成内容与文化解读资料,仅作娱乐、文化赏析与个人参考使用。本应用不提供任何专业指导建议,包括但不限于商业、金融、投资、医疗、心理、法律、职业及人生决策等领域。所有生成内容不得作为事实依据或行动决策的唯一标准。开发者不对用户的个人选择、行为及衍生后果承担任何法律责任。请理性看待传统文化,理性使用本应用。',
},
zh_Hant: {
title: '特別提醒',
body: '本 App 所有 AI 生成內容與文化解讀資料,僅作娛樂、文化賞析與個人參考使用。本應用不提供任何專業指導建議,包括但不限於商業、金融、投資、醫療、心理、法律、職業及人生決策等領域。所有生成內容不得作為事實依據或行動決策的唯一標準。開發者不對用戶的個人選擇、行為及衍生後果承擔任何法律責任。請理性看待傳統文化,理性使用本應用。',
},
en: {
title: 'Important Disclaimer',
body: 'All AI-generated content and cultural interpretation materials in this App are for entertainment, cultural appreciation, and personal reference only. This app does not provide any professional guidance or advice, including but not limited to business, finance, investment, medical, psychological, legal, career, and life decisions. All generated content should not be used as factual evidence or the sole basis for decision-making. The developer assumes no legal responsibility for users\' personal choices, actions, and consequences. Please approach traditional culture rationally and use this app wisely.',
},
};
const legalTitleMap: Record<Locale, string> = {
zh: '法律条款',
zh_Hant: '法律條款',
en: 'Legal',
};
const title = titleMap[docType]?.[locale] ?? '';
const subtitle = subtitleMap[docType]?.[locale] ?? '';
const warning = warningMap[locale];
const legalTitle = legalTitleMap[locale];
const filePath = path.resolve('public/legal', locale, `${docType}.md`);
let raw = '';
@@ -37,14 +58,14 @@ const content = await marked(raw);
const sideInfo: Record<string, Record<Locale, { type: string; date: string; law?: string; email: string }>> = {
privacy_policy: {
zh: { type: '隐私政策', date: '2026年4月27日', email: 'ann@xunmee.com' },
zh_Hant: { type: '隱私政策', date: '2026年4月27日', email: 'ann@xunmee.com' },
en: { type: 'Privacy Policy', date: 'April 27, 2026', email: 'ann@xunmee.com' },
zh: { type: '隐私政策', date: '2026年4月27日', email: 'feedback@xunmee.com' },
zh_Hant: { type: '隱私政策', date: '2026年4月27日', email: 'feedback@xunmee.com' },
en: { type: 'Privacy Policy', date: 'April 27, 2026', email: 'feedback@xunmee.com' },
},
terms_of_service: {
zh: { type: '服务条款', date: '2026年4月27日', law: '美国加利福尼亚州法律', email: 'ann@xunmee.com' },
zh_Hant: { type: '服務條款', date: '2026年4月27日', law: '美國加利福尼亞州法律', email: 'ann@xunmee.com' },
en: { type: 'Terms of Service', date: 'April 27, 2026', law: 'California, USA', email: 'ann@xunmee.com' },
zh: { type: '服务条款', date: '2026年4月27日', law: '美国加利福尼亚州法律', email: 'feedback@xunmee.com' },
zh_Hant: { type: '服務條款', date: '2026年4月27日', law: '美國加利福尼亞州法律', email: 'feedback@xunmee.com' },
en: { type: 'Terms of Service', date: 'April 27, 2026', law: 'California, USA', email: 'feedback@xunmee.com' },
},
};
const info = sideInfo[docType]?.[locale];
@@ -105,15 +126,15 @@ const isActive = (linkType: string) => linkType === docType;
<!-- Warning -->
<section class="w-full bg-amber-50 py-20 px-6 md:px-20">
<div class="reveal max-w-[800px] mx-auto text-center flex flex-col gap-5">
<h3 class="text-amber-600 text-2xl font-bold">{about.warningTitle}</h3>
<p class="text-amber-700 text-[15px] leading-loose">{about.warningBody}</p>
<h3 class="text-amber-600 text-2xl font-bold">{warning.title}</h3>
<p class="text-amber-700 text-[15px] leading-loose">{warning.body}</p>
</div>
</section>
<!-- Legal Links -->
<section class="w-full bg-slate-50 py-12 px-6 md:px-20">
<div class="reveal max-w-[600px] mx-auto text-center flex flex-col gap-5">
<h3 class="text-slate-900 text-xl font-bold">{about.legalTitle}</h3>
<h3 class="text-slate-900 text-xl font-bold">{legalTitle}</h3>
<div class="flex justify-center gap-8">
<a href={localePath(locale, '/privacy')} class={`text-[15px] hover:underline ${isActive('privacy_policy') ? 'text-violet-600 font-semibold' : 'text-slate-500'}`}>{footer.col3Link1}</a>
<a href={localePath(locale, '/terms')} class={`text-[15px] hover:underline ${isActive('terms_of_service') ? 'text-violet-600 font-semibold' : 'text-slate-500'}`}>{footer.col3Link2}</a>
-4
View File
@@ -26,7 +26,6 @@ export interface Translations {
footer: { brandName: string; desc: string; col1Title: string; col1Link1: string; col1Link2: string; col2Title: string; col2Link1: string; col2Link2: string; col3Title: string; col3Link1: string; col3Link2: string };
features: { title: string; subtitle: string; tagline: string; c1Title: string; c1Desc: string; c2Title: string; c2Desc: string; c3Title: string; c3Desc: string; c4Title: string; c4Desc: string; c5Title: string; c5Desc: string; c6Title: string; c6Desc: string };
pricing: { title: string; subtitle: string; p1Name: string; p1Badge: string; p1Price: string; p1Credits: string; p1Desc: string; p2Name: string; p2Price: string; p2Credits: string; p2Desc: string; p2Detail: string; p3Name: string; p3Badge: string; p3Price: string; p3Credits: string; p3Desc: string; p4Name: string; p4Price: string; p4Credits: string; p4Desc: string; p4Detail: string; buyNow: string };
about: { title: string; subtitle: string; storyTitle: string; p1: string; p2: string; p3: string; companyInfo: string; company: string; emailLabel: string; email: string; devLabel: string; developer: string; icpLabel: string; icp: string; warningTitle: string; warningBody: string; legalTitle: string };
login: { welcome: string; subtitle: string; emailLabel: string; emailPlaceholder: string; codeLabel: string; codePlaceholder: string; sendCode: string; submit: string; agreePrefix: string; privacy: string; agreeAnd: string; terms: string };
dashboard: { brandName: string; navHome: string; navStore: string; navDivination: string; navManual: string; navAuto: string; navHistory: string; navLanguage: string; navSettings: string; greeting: string; greetingSub: string; heroTitle: string; heroDesc: string; heroCta: string; historyTitle: string; historyViewAll: string; logout: string };
notifications: { title: string; loading: string; error: string; empty: string; markAllRead: string; markAllReadDone: string };
@@ -50,7 +49,6 @@ const translations: Record<Locale, Translations> = {
footer: { brandName: '觅爻签问', desc: '以古老智慧,解读今时困惑。让每一次签问,都成为与自己对话的机会。', col1Title: '产品', col1Link1: '功能介绍', col1Link2: '定价', col2Title: '支持', col2Link1: '帮助中心', col2Link2: '联系我们', col3Title: '法律', col3Link1: '隐私政策', col3Link2: '服务条款' },
features: { title: '功能特性', subtitle: '以古老智慧解读今时困惑,觅爻签问提供完整的易学体验', tagline: '从起卦到解读,每一步都精心设计', c1Title: '两种起卦方式', c1Desc: '手动起卦与自动起卦,灵活选择最适合你的方式。推荐使用手动起卦,卦象解读更准确。', c2Title: 'AI 解卦分析', c2Desc: '基于传统六爻卦象与周易哲学体系,结合AI智能分析,提供深度卦象解读与建议。', c3Title: '九类问题覆盖', c3Desc: '事业、情感、财富、运势、解梦、健康、学业、寻物等九大领域,全面覆盖日常生活所问。', c4Title: '追问互动', c4Desc: '每次解卦后可深入追问一次,针对卦象细节获取更多洞见,让解读更加全面深入。', c5Title: '历史记录', c5Desc: '自动保存所有解卦记录,包括卦象详情与AI解读。随时回顾历史,追踪问题变化趋势。', c6Title: '点数系统', c6Desc: '提供灵活积分套餐:新人专享、入门补充、常用加量、高频进阶。按需购买,自由使用。' },
pricing: { title: '选择适合你的套餐', subtitle: '灵活积分套餐,按需选择,随时可用', p1Name: '新人专享包', p1Badge: '限购一次', p1Price: '$0.99', p1Credits: '60 积分', p1Desc: '最适合初次体验', p2Name: '入门补充包', p2Price: '$4.99', p2Credits: '100 积分', p2Desc: '日常解卦补充', p2Detail: '适量点数补充,经济实惠之选', p3Name: '常用加量包', p3Badge: '推荐', p3Price: '$7.99', p3Credits: '210 积分', p3Desc: '最适合日常使用', p4Name: '高频进阶包', p4Price: '$12.99', p4Credits: '415 积分', p4Desc: '重度使用优选', p4Detail: '大量点数储备,超值单价', buyNow: '立即购买' },
about: { title: '关于觅爻签问', subtitle: '了解我们的理念与定位', storyTitle: '我们的故事', p1: '觅爻签问是一个借助于 AI 解读传统六爻卦象的平台,为用户了解中国传统易学文化提供一个窗口。六爻卦象源于《周易》深邃的哲学体系,是古人探索世界运行规律的一种独特方法。古人认为宇宙万物相互关联,在你起卦时,你的心念与时空信息会凝结成卦象的方式呈现出来。', p2: '觅爻签问基于这样的思路,帮助你跳出局限思维,从全局和演变趋势看清矛盾、机会与风险,为判断和行动提供参考。', p3: '用 AI 解锁古老智慧,让觅爻签问成为你探索趋势、明晰方向的现代助手。', companyInfo: '公司信息', company: '洵觅科技(深圳)有限公司', emailLabel: '联系邮箱', email: 'xuyunlong@xunmee.com', devLabel: '开发者', developer: 'Ann Lee', icpLabel: '备案号', icp: '粤ICP备2025428416号-1A', warningTitle: '特别提醒', warningBody: '卦象解读结果均由 AI 生成,仅供娱乐参考,切不可作为商业、医疗等专业领域的决策依据。理性看待卦象,自由掌握人生。', legalTitle: '法律条款' },
login: { welcome: '欢迎', subtitle: '使用邮箱验证码快速登录或注册', emailLabel: '邮箱地址', emailPlaceholder: '请输入邮箱地址', codeLabel: '验证码', codePlaceholder: '请输入验证码', sendCode: '获取验证码', submit: '登录 / 注册', agreePrefix: '我已阅读并同意', privacy: '《隐私政策》', agreeAnd: '和', terms: '《服务条款》' },
dashboard: { brandName: '觅爻签问', navHome: '首页', navStore: '商店', navDivination: '起卦', navManual: '手动起卦', navAuto: '自动起卦', navHistory: '历史解卦', navLanguage: '语言', navSettings: '设置', greeting: '下午好', greetingSub: '今天想要探寻什么方向?', heroTitle: '开始您的卦象之旅', heroDesc: '借助AI智能,探索未来的可能。心中有问,起卦便知。', heroCta: '立即起卦', historyTitle: '历史解卦', historyViewAll: '查看全部 →', logout: '退出登录' },
notifications: { title: '通知中心', loading: '加载中...', error: '加载失败', empty: '暂无通知', markAllRead: '全部已读', markAllReadDone: '已全部标记为已读' },
@@ -72,7 +70,6 @@ const translations: Record<Locale, Translations> = {
footer: { brandName: '覓爻簽問', desc: '以古老智慧,解讀今時困惑。讓每一次簽問,都成為與自己對話的機會。', col1Title: '產品', col1Link1: '功能介紹', col1Link2: '定價', col2Title: '支持', col2Link1: '幫助中心', col2Link2: '聯繫我們', col3Title: '法律', col3Link1: '隱私政策', col3Link2: '服務條款' },
features: { title: '功能特性', subtitle: '以古老智慧解讀今時困惑,覓爻簽問提供完整的易學體驗', tagline: '從起卦到解讀,每一步都精心設計', c1Title: '兩種起卦方式', c1Desc: '手動起卦與自動起卦,靈活選擇最適合你的方式。推薦使用手動起卦,卦象解讀更準確。', c2Title: 'AI 解卦分析', c2Desc: '基於傳統六爻卦象與周易哲學體系,結合AI智能分析,提供深度卦象解讀與建議。', c3Title: '九類問題覆蓋', c3Desc: '事業、情感、財富、運勢、解夢、健康、學業、尋物等九大領域,全面覆蓋日常生活所問。', c4Title: '追問互動', c4Desc: '每次解卦後可深入追問一次,針對卦象細節獲取更多洞見,讓解讀更加全面深入。', c5Title: '歷史記錄', c5Desc: '自動保存所有解卦記錄,包括卦象詳情與AI解讀。隨時回顧歷史,追蹤問題變化趨勢。', c6Title: '點數系統', c6Desc: '提供靈活積分套餐:新人專享、入門補充、常用加量、高頻進階。按需購買,自由使用。' },
pricing: { title: '選擇適合你的套餐', subtitle: '靈活積分套餐,按需選擇,隨時可用', p1Name: '新人專享包', p1Badge: '限購一次', p1Price: '$0.99', p1Credits: '60 積分', p1Desc: '最適合初次體驗', p2Name: '入門補充包', p2Price: '$4.99', p2Credits: '100 積分', p2Desc: '日常解卦補充', p2Detail: '適量點數補充,經濟實惠之選', p3Name: '常用加量包', p3Badge: '推薦', p3Price: '$7.99', p3Credits: '210 積分', p3Desc: '最適合日常使用', p4Name: '高頻進階包', p4Price: '$12.99', p4Credits: '415 積分', p4Desc: '重度使用優選', p4Detail: '大量點數儲備,超值單價', buyNow: '立即購買' },
about: { title: '關於覓爻簽問', subtitle: '了解我們的理念與定位', storyTitle: '我們的故事', p1: '覓爻簽問是一個借助於 AI 解讀傳統六爻卦象的平台,為用戶了解中國傳統易學文化提供一個窗口。六爻卦象源於《周易》深邃的哲學體系,是古人探索世界運行規律的一種獨特方法。古人認為宇宙萬物相互關聯,在你起卦時,你的心念與時空信息會凝結成卦象的方式呈現出來。', p2: '覓爻簽問基於這樣的思路,幫助你跳出局限思維,從全局和演變趨勢看清矛盾、機會與風險,為判斷和行動提供參考。', p3: '用 AI 解鎖古老智慧,讓覓爻簽問成為你探索趨勢、明晰方向的現代助手。', companyInfo: '公司信息', company: '洵覓科技(深圳)有限公司', emailLabel: '聯繫郵箱', email: 'xuyunlong@xunmee.com', devLabel: '開發者', developer: 'Ann Lee', icpLabel: '備案號', icp: '粵ICP備2025428416號-1A', warningTitle: '特別提醒', warningBody: '卦象解讀結果均由 AI 生成,僅供娛樂參考,切不可作為商業、醫療等專業領域的決策依據。理性看待卦象,自由掌握人生。', legalTitle: '法律條款' },
login: { welcome: '歡迎', subtitle: '使用郵箱驗證碼快速登錄或註冊', emailLabel: '郵箱地址', emailPlaceholder: '請輸入郵箱地址', codeLabel: '驗證碼', codePlaceholder: '請輸入驗證碼', sendCode: '獲取驗證碼', submit: '登錄 / 註冊', agreePrefix: '我已閱讀並同意', privacy: '《隱私政策》', agreeAnd: '和', terms: '《服務條款》' },
dashboard: { brandName: '覓爻簽問', navHome: '首頁', navStore: '商店', navDivination: '起卦', navManual: '手動起卦', navAuto: '自動起卦', navHistory: '歷史解卦', navLanguage: '語言', navSettings: '設置', greeting: '下午好', greetingSub: '今天想要探尋什麼方向?', heroTitle: '開始您的卦象之旅', heroDesc: '借助AI智能,探索未來的可能。心中有問,起卦便知。', heroCta: '立即起卦', historyTitle: '歷史解卦', historyViewAll: '查看全部 →', logout: '退出登錄' },
notifications: { title: '通知中心', loading: '加載中...', error: '加載失敗', empty: '暫無通知', markAllRead: '全部已讀', markAllReadDone: '已全部標記為已讀' },
@@ -94,7 +91,6 @@ const translations: Record<Locale, Translations> = {
footer: { brandName: 'MeiYao Divination', desc: 'Using ancient wisdom to interpret modern confusion. Let every divination become a chance to dialogue with yourself.', col1Title: 'Product', col1Link1: 'Features', col1Link2: 'Pricing', col2Title: 'Support', col2Link1: 'Help Center', col2Link2: 'Contact Us', col3Title: 'Legal', col3Link1: 'Privacy Policy', col3Link2: 'Terms of Service' },
features: { title: 'Features', subtitle: 'Ancient wisdom meets modern困惑, MeiYao provides a complete I Ching experience', tagline: 'From casting to interpretation, every step is carefully designed', c1Title: 'Two Casting Methods', c1Desc: 'Manual and auto casting — choose what suits you best. Manual casting is recommended for more accurate readings.', c2Title: 'AI Analysis', c2Desc: 'Combining traditional Six-Line hexagrams with AI intelligence for in-depth interpretation and suggestions.', c3Title: '9 Question Categories', c3Desc: 'Career, love, wealth, fortune, dreams, health, study, lost items, and more — covering all aspects of daily life.', c4Title: 'Follow-up Questions', c4Desc: 'Ask one follow-up question after each reading for deeper insights into specific hexagram details.', c5Title: 'History', c5Desc: 'All readings are automatically saved with full hexagram details and AI interpretations. Review anytime.', c6Title: 'Credits System', c6Desc: 'Flexible credit packages: starter, basic, popular, and premium. Purchase as needed, use freely.' },
pricing: { title: 'Choose Your Plan', subtitle: 'Flexible credit packages, pay as you go', p1Name: 'Starter Pack', p1Badge: 'Once Only', p1Price: '$0.99', p1Credits: '60 credits', p1Desc: 'Best for first-timers', p2Name: 'Basic Pack', p2Price: '$4.99', p2Credits: '100 credits', p2Desc: 'Daily supplement', p2Detail: 'Affordable credit refill', p3Name: 'Popular Pack', p3Badge: 'Popular', p3Price: '$7.99', p3Credits: '210 credits', p3Desc: 'Best for daily use', p4Name: 'Premium Pack', p4Price: '$12.99', p4Credits: '415 credits', p4Desc: 'Best value per credit', p4Detail: 'Bulk credits at best unit price', buyNow: 'Buy Now' },
about: { title: 'About MeiYao Divination', subtitle: 'Our vision and philosophy', storyTitle: 'Our Story', p1: 'MeiYao Divination is an AI-assisted platform for interpreting traditional Six-Line divination and opening a window into classical Chinese wisdom. Six-Line divination originates from the deep philosophical system of the I Ching.', p2: 'MeiYao Divination helps you step outside narrow thinking, understand contradictions, opportunities, and risks from a broader trend perspective, and make calmer, more thoughtful decisions.', p3: 'Unlock ancient wisdom with AI. Let MeiYao Divination be your modern companion for exploring trends and finding direction.', companyInfo: 'Company', company: 'Xunmee Technology (Shenzhen) Co., Ltd.', emailLabel: 'Email', email: 'xuyunlong@xunmee.com', devLabel: 'Developer', developer: 'Ann Lee', icpLabel: 'ICP filing', icp: '粤ICP备2025428416号-1A', warningTitle: 'Important Notice', warningBody: 'All divination interpretations are AI-generated for entertainment only. Do not use them as professional advice for business, medical, or legal decisions.', legalTitle: 'Legal' },
login: { welcome: 'Welcome', subtitle: 'Sign in or sign up with email verification code', emailLabel: 'Email', emailPlaceholder: 'Enter your email', codeLabel: 'Verification Code', codePlaceholder: 'Enter code', sendCode: 'Send Code', submit: 'Sign In / Sign Up', agreePrefix: 'I have read and agree to the ', privacy: 'Privacy Policy', agreeAnd: ' and ', terms: 'Terms of Service' },
dashboard: { brandName: 'MeiYao Divination', navHome: 'Home', navStore: 'Store', navDivination: 'Divination', navManual: 'Manual Cast', navAuto: 'Auto Cast', navHistory: 'History', navLanguage: 'Language', navSettings: 'Settings', greeting: 'Good afternoon', greetingSub: 'What would you like to explore today?', heroTitle: 'Begin Your Hexagram Journey', heroDesc: 'Explore future possibilities with AI. Ask your question, cast your hexagram.', heroCta: 'Start Divination', historyTitle: 'Recent Readings', historyViewAll: 'View All →', logout: 'Sign Out' },
notifications: { title: 'Notifications', loading: 'Loading...', error: 'Failed to load', empty: 'No notifications', markAllRead: 'Mark All Read', markAllReadDone: 'All marked as read' },