Files
everything-is-suitable/index.html
T
张翔 d79b3f183a feat: 添加落地页与国际化脚本
- index.html 多语言落地页
- i18n.js 国际化配置脚本
2026-04-29 21:16:49 +08:00

1162 lines
36 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>万物皆宜 — 中华传统命理智慧,掌中可及</title>
<meta name="description" content="万物皆宜,一款融合紫微斗数排盘、黄历查询、运势分析的中国传统命理分析 App。一次买断,永久使用。">
<link rel="icon" type="image/jpeg" href="assets/logo.jpg">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@200;300;400;500;600;700;900&family=Ma+Shan+Zheng&display=swap" rel="stylesheet">
<style>
/* ========== CSS Variables ========== */
:root {
--ink: #0d1b2a;
--ink-light: #1a1a2e;
--ink-mid: #16213e;
--gold: #c9a96e;
--gold-light: #e8d5a3;
--gold-dark: #a07d4a;
--vermillion: #c0392b;
--vermillion-light: #e74c3c;
--parchment: #f5f0e8;
--parchment-dark: #e8dfd0;
--jade: #2d6a4f;
--cloud: rgba(201, 169, 110, 0.08);
--text-light: rgba(245, 240, 232, 0.95);
--text-muted: rgba(220, 215, 205, 0.75);
--text-dark: #2c2c2c;
--text-dark-muted: #6b6b6b;
--font-display: 'Ma Shan Zheng', 'Noto Serif SC', serif;
--font-body: 'Noto Serif SC', 'Georgia', serif;
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--max-width: 1200px;
--section-pad: clamp(4rem, 10vw, 8rem);
}
/* ========== Reset & Base ========== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
html {
scroll-behavior: smooth;
font-size: 16px;
-webkit-font-smoothing: antialiased;
}
body {
font-family: var(--font-body);
color: var(--text-light);
background: var(--ink);
overflow-x: hidden;
line-height: 1.8;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; }
/* ========== Scrollbar ========== */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: var(--ink); }
::-webkit-scrollbar-thumb { background: var(--gold-dark); border-radius: 3px; }
/* ========== Utility ========== */
.container {
max-width: var(--max-width);
margin: 0 auto;
padding: 0 clamp(1.5rem, 4vw, 3rem);
}
.section-label {
font-family: var(--font-sans);
font-size: 0.75rem;
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--gold);
margin-bottom: 1rem;
}
.section-title {
font-family: var(--font-display);
font-size: clamp(2rem, 5vw, 3.5rem);
line-height: 1.3;
margin-bottom: 1.5rem;
}
.section-desc {
font-size: clamp(0.95rem, 1.5vw, 1.1rem);
color: var(--text-muted);
max-width: 640px;
line-height: 2;
}
/* ========== Decorative Elements ========== */
.ornament-line {
display: flex;
align-items: center;
gap: 1rem;
margin: 2rem 0;
}
.ornament-line::before,
.ornament-line::after {
content: '';
flex: 1;
height: 1px;
background: linear-gradient(90deg, transparent, var(--gold-dark), transparent);
}
.ornament-line .diamond {
width: 8px;
height: 8px;
background: var(--gold);
transform: rotate(45deg);
flex-shrink: 0;
}
/* ========== Navigation ========== */
.nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
padding: 1rem 0;
transition: all 0.4s ease;
backdrop-filter: blur(0px);
}
.nav.scrolled {
background: rgba(13, 27, 42, 0.92);
backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(201, 169, 110, 0.1);
padding: 0.7rem 0;
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
}
.nav-brand {
display: flex;
align-items: center;
gap: 0.75rem;
}
.nav-brand-icon {
width: 36px;
height: 36px;
border: 1.5px solid var(--gold);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-display);
font-size: 1.1rem;
color: var(--gold);
}
.nav-brand-text {
font-family: var(--font-display);
font-size: 1.3rem;
color: var(--parchment);
}
.nav-links {
display: flex;
gap: 2.5rem;
list-style: none;
}
.nav-links a {
font-family: var(--font-sans);
font-size: 0.85rem;
color: var(--text-muted);
letter-spacing: 0.05em;
transition: color 0.3s;
position: relative;
}
.nav-links a::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 1px;
background: var(--gold);
transition: width 0.3s;
}
.nav-links a:hover { color: var(--gold); }
.nav-links a:hover::after { width: 100%; }
.nav-cta {
padding: 0.5rem 1.5rem;
background: transparent;
border: 1px solid var(--gold) !important;
color: var(--gold) !important;
font-family: var(--font-sans);
font-size: 0.85rem;
letter-spacing: 0.05em;
border-radius: 2px;
transition: all 0.3s;
}
.nav-cta:hover {
background: var(--gold) !important;
color: var(--ink) !important;
}
/* Mobile nav */
.nav-toggle {
display: none;
flex-direction: column;
gap: 5px;
background: none;
padding: 4px;
}
.nav-toggle span {
width: 24px;
height: 1.5px;
background: var(--parchment);
transition: all 0.3s;
}
/* ========== Hero Section ========== */
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.hero-bg {
position: absolute;
inset: 0;
background: url('assets/hero-bg.jpg') center/cover no-repeat;
}
.hero-bg::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
rgba(13, 27, 42, 0.3) 0%,
rgba(13, 27, 42, 0.6) 50%,
rgba(13, 27, 42, 0.95) 100%
);
}
.hero-content {
position: relative;
z-index: 2;
text-align: center;
padding: 0 1.5rem;
max-width: 800px;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.4rem 1.2rem;
border: 1px solid rgba(201, 169, 110, 0.3);
border-radius: 100px;
font-family: var(--font-sans);
font-size: 0.75rem;
color: var(--gold-light);
letter-spacing: 0.15em;
margin-bottom: 2rem;
backdrop-filter: blur(10px);
background: rgba(201, 169, 110, 0.05);
}
.hero-badge .dot {
width: 6px;
height: 6px;
background: var(--gold);
border-radius: 50%;
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
.hero-title {
font-family: var(--font-display);
font-size: clamp(3rem, 8vw, 6rem);
line-height: 1.15;
margin-bottom: 0.5rem;
color: var(--parchment);
text-shadow: 0 0 80px rgba(201, 169, 110, 0.15);
margin-top: 0.5rem;
}
.hero-subtitle {
font-family: var(--font-display);
font-size: clamp(1.2rem, 3vw, 1.8rem);
color: var(--gold);
margin-bottom: 2rem;
font-weight: 400;
letter-spacing: 0.15em;
}
.hero-desc {
font-size: clamp(0.95rem, 1.5vw, 1.15rem);
color: var(--text-muted);
max-width: 560px;
margin: 0 auto 3rem;
line-height: 2;
}
.hero-actions {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
.btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 1rem 2.5rem;
font-family: var(--font-sans);
font-size: 0.95rem;
letter-spacing: 0.05em;
border-radius: 2px;
transition: all 0.35s ease;
position: relative;
overflow: hidden;
}
.btn-primary {
background: linear-gradient(135deg, var(--gold), var(--gold-dark));
color: var(--ink);
font-weight: 600;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(201, 169, 110, 0.3);
}
.btn-secondary {
background: transparent;
border: 1px solid rgba(201, 169, 110, 0.4);
color: var(--parchment);
}
.btn-secondary:hover {
border-color: var(--gold);
background: rgba(201, 169, 110, 0.05);
}
.hero-scroll {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
z-index: 2;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
color: var(--text-muted);
font-family: var(--font-sans);
font-size: 0.7rem;
letter-spacing: 0.2em;
animation: float 3s ease-in-out infinite;
}
.hero-scroll .line {
width: 1px;
height: 40px;
background: linear-gradient(to bottom, var(--gold), transparent);
}
@keyframes float {
0%, 100% { transform: translateX(-50%) translateY(0); }
50% { transform: translateX(-50%) translateY(8px); }
}
/* ========== Features / Selling Points ========== */
.features {
padding: var(--section-pad) 0;
background: var(--ink);
position: relative;
}
.features::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--gold-dark), transparent);
}
.features-header {
text-align: center;
margin-bottom: 4rem;
}
.features-header .section-desc {
margin: 0 auto;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 2rem;
}
.feature-card {
padding: 2.5rem 2rem;
border: 1px solid rgba(201, 169, 110, 0.1);
border-radius: 4px;
background: linear-gradient(135deg, rgba(26, 26, 46, 0.6), rgba(22, 33, 62, 0.4));
transition: all 0.4s ease;
position: relative;
overflow: hidden;
}
.feature-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(--gold), transparent);
opacity: 0;
transition: opacity 0.4s;
}
.feature-card:hover {
border-color: rgba(201, 169, 110, 0.25);
transform: translateY(-4px);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}
.feature-card:hover::before { opacity: 1; }
.feature-icon {
width: 56px;
height: 56px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1.5rem;
font-size: 1.8rem;
border: 1px solid rgba(201, 169, 110, 0.2);
border-radius: 50%;
background: rgba(201, 169, 110, 0.05);
}
.feature-card h3 {
font-family: var(--font-display);
font-size: 1.4rem;
margin-bottom: 0.75rem;
color: var(--parchment);
}
.feature-card p {
font-size: 0.9rem;
color: var(--text-muted);
line-height: 1.9;
}
/* ========== Product Showcase ========== */
.showcase {
padding: var(--section-pad) 0;
background: linear-gradient(180deg, var(--ink) 0%, var(--ink-light) 50%, var(--ink) 100%);
position: relative;
}
.showcase-item {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
margin-bottom: 6rem;
}
.showcase-item:last-child { margin-bottom: 0; }
.showcase-item.reverse .showcase-text { order: 2; }
.showcase-item.reverse .showcase-visual { order: 1; }
.showcase-visual {
position: relative;
border-radius: 4px;
overflow: hidden;
border: 1px solid rgba(201, 169, 110, 0.15);
aspect-ratio: 4/3;
}
.showcase-visual img {
width: 100%;
height: 100%;
object-fit: cover;
}
.showcase-visual::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(201, 169, 110, 0.05), transparent);
pointer-events: none;
}
.showcase-text .section-label { margin-bottom: 0.75rem; }
.showcase-text h3 {
font-family: var(--font-display);
font-size: clamp(1.6rem, 3vw, 2.2rem);
margin-bottom: 1rem;
color: var(--parchment);
}
.showcase-text p {
color: var(--text-muted);
margin-bottom: 1.5rem;
line-height: 2;
}
.showcase-list {
list-style: none;
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.showcase-list li {
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 0.9rem;
color: var(--text-muted);
}
.showcase-list li .check {
width: 20px;
height: 20px;
border: 1px solid var(--gold-dark);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.7rem;
color: var(--gold);
flex-shrink: 0;
}
/* ========== Cultural Statement ========== */
.culture {
padding: var(--section-pad) 0;
background: var(--ink-light);
position: relative;
overflow: hidden;
}
.culture::before,
.culture::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--gold-dark), transparent);
}
.culture::after { top: auto; bottom: 0; }
.culture-inner {
max-width: 720px;
margin: 0 auto;
text-align: center;
}
.culture-icon {
font-size: 3rem;
margin-bottom: 2rem;
opacity: 0.7;
}
.culture blockquote {
font-family: var(--font-display);
font-size: clamp(1.3rem, 3vw, 1.8rem);
line-height: 2;
color: var(--parchment);
margin-bottom: 2rem;
}
.culture blockquote em {
color: var(--gold);
font-style: normal;
}
.culture p {
font-size: 0.95rem;
color: var(--text-muted);
line-height: 2;
max-width: 560px;
margin: 0 auto;
}
.culture-badges {
display: flex;
justify-content: center;
gap: 1.5rem;
margin-top: 2.5rem;
flex-wrap: wrap;
}
.culture-badge {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem 1.2rem;
border: 1px solid rgba(201, 169, 110, 0.15);
border-radius: 100px;
font-family: var(--font-sans);
font-size: 0.78rem;
color: var(--text-muted);
background: rgba(201, 169, 110, 0.03);
}
.culture-badge .badge-icon {
font-size: 1rem;
}
/* ========== CTA Section ========== */
.cta {
padding: var(--section-pad) 0;
background: var(--ink);
text-align: center;
position: relative;
}
.cta::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--gold-dark), transparent);
}
.cta-title {
font-family: var(--font-display);
font-size: clamp(2rem, 5vw, 3rem);
margin-bottom: 1rem;
color: var(--parchment);
}
.cta-desc {
color: var(--text-muted);
margin-bottom: 2.5rem;
font-size: 1rem;
}
/* ========== Footer ========== */
.footer {
padding: 3rem 0;
background: var(--ink);
border-top: 1px solid rgba(201, 169, 110, 0.08);
}
.footer-inner {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 1rem;
}
.footer-brand {
display: flex;
align-items: center;
gap: 0.6rem;
}
.footer-brand-icon {
width: 28px;
height: 28px;
border: 1px solid var(--gold-dark);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-display);
font-size: 0.85rem;
color: var(--gold);
}
.footer-brand-text {
font-family: var(--font-display);
font-size: 1rem;
color: var(--text-muted);
}
.footer-copy {
font-family: var(--font-sans);
font-size: 0.78rem;
color: var(--text-muted);
opacity: 0.5;
}
.footer-links {
display: flex;
gap: 1.5rem;
list-style: none;
}
.footer-links a {
font-family: var(--font-sans);
font-size: 0.78rem;
color: var(--text-muted);
opacity: 0.6;
transition: opacity 0.3s;
}
.footer-links a:hover { opacity: 1; }
/* ========== Language Switcher ========== */
.lang-switcher-nav,
.lang-switcher-footer {
position: relative;
}
.lang-switcher-nav select,
.lang-switcher-footer select {
appearance: none;
-webkit-appearance: none;
background: rgba(201, 169, 110, 0.08);
border: 1px solid rgba(201, 169, 110, 0.25);
color: var(--text-muted);
font-family: var(--font-sans);
font-size: 0.78rem;
padding: 0.35rem 1.8rem 0.35rem 0.7rem;
border-radius: 2px;
cursor: pointer;
transition: all 0.3s;
background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%23c9a96e' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 0.6rem center;
}
.lang-switcher-nav select:hover,
.lang-switcher-footer select:hover {
border-color: var(--gold);
color: var(--gold-light);
}
.lang-switcher-nav select:focus,
.lang-switcher-footer select:focus {
outline: none;
border-color: var(--gold);
}
.lang-switcher-nav select option,
.lang-switcher-footer select option {
background: var(--ink);
color: var(--parchment);
}
.lang-switcher-footer {
display: flex;
align-items: center;
}
@media (max-width: 768px) {
.lang-switcher-nav {
display: none;
}
.lang-switcher-nav.open {
display: block;
position: absolute;
top: 100%;
left: 0;
right: 0;
padding: 0 2rem 1.2rem;
background: rgba(13, 27, 42, 0.98);
backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(201, 169, 110, 0.1);
}
}
/* ========== Animations ========== */
.fade-up {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.8s ease, transform 0.8s ease;
}
.fade-up.visible {
opacity: 1;
transform: translateY(0);
}
.fade-up-delay-1 { transition-delay: 0.1s; }
.fade-up-delay-2 { transition-delay: 0.2s; }
.fade-up-delay-3 { transition-delay: 0.3s; }
.fade-up-delay-4 { transition-delay: 0.4s; }
/* ========== Responsive ========== */
@media (max-width: 900px) {
.showcase-item {
grid-template-columns: 1fr;
gap: 2rem;
}
.showcase-item.reverse .showcase-text { order: 1; }
.showcase-item.reverse .showcase-visual { order: 2; }
}
@media (max-width: 768px) {
.nav-links { display: none; }
.nav-toggle { display: flex; }
.nav-links.open {
display: flex;
flex-direction: column;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: rgba(13, 27, 42, 0.98);
backdrop-filter: blur(20px);
padding: 1.5rem 2rem;
gap: 1.2rem;
border-bottom: 1px solid rgba(201, 169, 110, 0.1);
}
.hero-title { font-size: clamp(2.5rem, 10vw, 4rem); }
.features-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<!-- ===== Navigation ===== -->
<nav class="nav" id="nav">
<div class="container nav-inner">
<a href="#" class="nav-brand">
<img src="assets/logo.jpg" alt="万物皆宜" style="width:36px; height:36px; border-radius:50%; border:1.5px solid var(--gold);">
<span class="nav-brand-text">万物皆宜</span>
</a>
<ul class="nav-links" id="navLinks">
<li><a href="#features" data-i18n="nav.features">核心优势</a></li>
<li><a href="#showcase" data-i18n="nav.showcase">功能展示</a></li>
<li><a href="#culture" data-i18n="nav.about">关于我们</a></li>
<li><a href="#cta" class="nav-cta" data-i18n="nav.cta">前往 App Store</a></li>
</ul>
<div class="lang-switcher-nav">
<select data-locale-switcher aria-label="Language">
<option value="zh-CN">简体中文</option>
<option value="zh-TW">繁體中文</option>
<option value="en">English</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="de">Deutsch</option>
<option value="fr">Français</option>
<option value="es">Español</option>
<option value="pt">Português</option>
</select>
</div>
<button class="nav-toggle" id="navToggle" aria-label="菜单">
<span></span><span></span><span></span>
</button>
</div>
</nav>
<!-- ===== Hero ===== -->
<section class="hero" id="hero">
<div class="hero-bg"></div>
<div class="hero-content">
<div class="hero-logo fade-up">
<img src="assets/logo.jpg" alt="万物皆宜" style="width:80px; height:80px; border-radius:50%; border:2px solid var(--gold); margin:0 auto 2rem; display:block; box-shadow: 0 0 60px rgba(201,169,110,0.2);">
</div>
<div class="hero-badge fade-up">
<span class="dot"></span>
<span data-i18n="hero.badge">一次买断 · 永久使用 · 无广告</span>
</div>
<h1 class="hero-title fade-up fade-up-delay-1" data-i18n="hero.title">万物皆宜</h1>
<p class="hero-subtitle fade-up fade-up-delay-2" data-i18n="hero.subtitle">千年智慧,掌中可鉴</p>
<p class="hero-desc fade-up fade-up-delay-3" data-i18n="hero.desc">
融合紫微斗数排盘、黄历宜忌、运势推演于一体的中国传统命理分析工具。随时随地,为您呈现千年术数智慧的精妙与深邃。
</p>
<div class="hero-actions fade-up fade-up-delay-4">
<a href="#cta" class="btn btn-primary">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"/><path d="M8 12l3 3 5-5"/></svg>
<span data-i18n="hero.cta">前往 App Store</span>
</a>
<a href="#showcase" class="btn btn-secondary" data-i18n="hero.learn_more">了解更多</a>
</div>
</div>
<div class="hero-scroll">
<span data-i18n="hero.scroll">向下探索</span>
<div class="line"></div>
</div>
</section>
<!-- ===== Features ===== -->
<section class="features" id="features">
<div class="container">
<div class="features-header fade-up">
<p class="section-label" data-i18n="features.label">核心优势</p>
<h2 class="section-title" data-i18n="features.title">为何选择万物皆宜</h2>
<div class="ornament-line"><span class="diamond"></span></div>
<p class="section-desc" data-i18n="features.desc">我们以最严谨的态度传承中华术数文化,用最现代的技术守护您的每一次探索。</p>
</div>
<div class="features-grid">
<div class="feature-card fade-up fade-up-delay-1">
<div class="feature-icon"></div>
<h3 data-i18n="features.algo.title">专业命理算法</h3>
<p data-i18n="features.algo.desc">基于紫微斗数千年传承的理论体系,十四主星、四化星、辅星体系完整实现。大限流限推演精确到流时,每一颗星的安星法则均有典可查。</p>
</div>
<div class="feature-card fade-up fade-up-delay-2">
<div class="feature-icon"></div>
<h3 data-i18n="features.privacy.title">隐私安全保护</h3>
<p data-i18n="features.privacy.desc">您的个人信息绝不离开您的手机。无需联网即可使用全部功能,无需注册账号,无需上传任何数据,安心探索,无后顾之忧。</p>
</div>
<div class="feature-card fade-up fade-up-delay-3">
<div class="feature-icon"></div>
<h3 data-i18n="features.daily.title">日常运势指导</h3>
<p data-i18n="features.daily.desc">每日黄历宜忌、吉神方位、财神方位一目了然。事业、财运、感情、健康多维度运势分析,让传统智慧融入您的日常生活。</p>
</div>
<div class="feature-card fade-up fade-up-delay-4">
<div class="feature-icon"></div>
<h3 data-i18n="features.aesthetic.title">文化传承美学</h3>
<p data-i18n="features.aesthetic.desc">新中式视觉设计语言,将水墨意境与古典纹样融入每一个界面细节。这不仅仅是一个工具,更是一扇窥见中华传统文化之美的窗口。</p>
</div>
</div>
</div>
</section>
<!-- ===== Showcase ===== -->
<section class="showcase" id="showcase">
<div class="container">
<div class="showcase-header fade-up" style="text-align:center; margin-bottom:4rem;">
<p class="section-label" data-i18n="showcase.label">功能展示</p>
<h2 class="section-title" data-i18n="showcase.title">掌中术数,尽在指尖</h2>
<div class="ornament-line"><span class="diamond"></span></div>
</div>
<div class="showcase-item fade-up">
<div class="showcase-text">
<p class="section-label" data-i18n="showcase.ziwei.label">紫微斗数</p>
<h3 data-i18n="showcase.ziwei.title">千年星象,一屏尽览</h3>
<p data-i18n="showcase.ziwei.desc">输入出生年月日时,即刻生成完整的紫微斗数命盘。十二宫位、十四主星、百余辅星精确安星,四化飞星系统完整呈现。</p>
<ul class="showcase-list">
<li><span class="check"></span> <span data-i18n="showcase.ziwei.f1">自动排盘,支持农历与公历</span></li>
<li><span class="check"></span> <span data-i18n="showcase.ziwei.f2">十二宫位完整展示</span></li>
<li><span class="check"></span> <span data-i18n="showcase.ziwei.f3">十四主星 + 全部辅星体系</span></li>
<li><span class="check"></span> <span data-i18n="showcase.ziwei.f4">大限、流年、流月、流日、流时推演</span></li>
</ul>
</div>
<div class="showcase-visual">
<img src="assets/feature-ziwei.jpg" alt="紫微斗数排盘功能展示" loading="lazy">
</div>
</div>
<div class="showcase-item reverse fade-up">
<div class="showcase-text">
<p class="section-label" data-i18n="showcase.almanac.label">黄历查询</p>
<h3 data-i18n="showcase.almanac.title">择吉避凶,顺天应时</h3>
<p data-i18n="showcase.almanac.desc">每日宜忌一目了然,涵盖嫁娶、出行、动土、开市等二十余项传统事项。吉神方位、财神方位、胎神方位精准标注。</p>
<ul class="showcase-list">
<li><span class="check"></span> <span data-i18n="showcase.almanac.f1">每日宜忌二十余项</span></li>
<li><span class="check"></span> <span data-i18n="showcase.almanac.f2">吉神方位与财神方位</span></li>
<li><span class="check"></span> <span data-i18n="showcase.almanac.f3">支持条件搜索与收藏</span></li>
<li><span class="check"></span> <span data-i18n="showcase.almanac.f4">农历与节气精确对照</span></li>
</ul>
</div>
<div class="showcase-visual">
<img src="assets/feature-almanac.jpg" alt="黄历查询功能展示" loading="lazy">
</div>
</div>
<div class="showcase-item fade-up">
<div class="showcase-text">
<p class="section-label" data-i18n="showcase.fortune.label">运势分析</p>
<h3 data-i18n="showcase.fortune.title">多维洞察,趋吉避凶</h3>
<p data-i18n="showcase.fortune.desc">从事业、财运、感情、健康四大维度,提供每日、每月、每年的运势分析。结合紫微斗数与黄历信息,给出综合性的生活参考建议。</p>
<ul class="showcase-list">
<li><span class="check"></span> <span data-i18n="showcase.fortune.f1">每日 / 每月 / 每年运势</span></li>
<li><span class="check"></span> <span data-i18n="showcase.fortune.f2">事业 · 财运 · 感情 · 健康</span></li>
<li><span class="check"></span> <span data-i18n="showcase.fortune.f3">基于命盘的个性化分析</span></li>
<li><span class="check"></span> <span data-i18n="showcase.fortune.f4">历史记录与趋势追踪</span></li>
</ul>
</div>
<div class="showcase-visual" style="background: linear-gradient(135deg, var(--ink-mid), var(--ink-light)); display:flex; align-items:center; justify-content:center;">
<div style="text-align:center; padding:2rem;">
<div style="font-family:var(--font-display); font-size:3rem; margin-bottom:1rem; opacity:0.4; color:var(--gold);"></div>
<div style="font-family:var(--font-display); font-size:1.5rem; color:var(--gold); opacity:0.5;" data-i18n="showcase.fortune.label">运势分析</div>
<div style="font-size:0.8rem; color:var(--text-muted); margin-top:0.5rem; opacity:0.4;" data-i18n="showcase.fortune.placeholder">功能截图即将上线</div>
</div>
</div>
</div>
</div>
</section>
<!-- ===== Cultural Statement ===== -->
<section class="culture" id="culture">
<div class="container">
<div class="culture-inner fade-up">
<blockquote data-i18n-html="culture.quote">
「万物皆宜」致力于以现代科技手段<em>传承与弘扬中华传统文化</em>,让千年术数智慧以全新的方式走进当代人的生活。
</blockquote>
<p data-i18n="culture.disclaimer">
我们尊重科学精神,反对一切形式的迷信活动与邪教组织。本应用所提供的命理分析内容,仅供文化研究、个人兴趣参考之用,不构成任何决策建议。我们鼓励用户以理性、客观的态度看待传统文化,取其精华,让古老的智慧在新时代焕发新的光彩。
</p>
<div class="culture-badges">
<div class="culture-badge">
<span data-i18n="culture.badge1">弘扬传统文化</span>
</div>
<div class="culture-badge">
<span data-i18n="culture.badge2">倡导科学理性</span>
</div>
<div class="culture-badge">
<span data-i18n="culture.badge3">反对迷信邪教</span>
</div>
<div class="culture-badge">
<span data-i18n="culture.badge4">仅供文化参考</span>
</div>
<div class="culture-badge">
<span data-i18n="culture.badge5">仅供娱乐</span>
</div>
</div>
</div>
</div>
</section>
<!-- ===== CTA ===== -->
<section class="cta" id="cta">
<div class="container fade-up">
<h2 class="cta-title" data-i18n="cta.title">开启您的命理探索之旅</h2>
<p class="cta-desc" data-i18n="cta.desc">前往 App Store,搜索「万物皆宜」即可下载。</p>
<div style="display:flex; gap:1rem; justify-content:center; flex-wrap:wrap;">
<a href="https://apps.apple.com" target="_blank" rel="noopener noreferrer" class="btn btn-primary" style="gap:0.75rem;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg>
<span data-i18n="cta.appstore">App Store</span>
</a>
<a href="https://play.google.com/store" target="_blank" rel="noopener noreferrer" class="btn btn-secondary" style="gap:0.75rem;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3.609 1.814L13.792 12 3.61 22.186a.996.996 0 0 1-.61-.92V2.734a1 1 0 0 1 .609-.92zm10.89 10.893l2.302 2.302-10.937 6.333 8.635-8.635zm3.199-3.199l2.807 1.626a1 1 0 0 1 0 1.732l-2.807 1.626L15.206 12l2.492-2.492zM5.864 2.658L16.8 8.99l-2.302 2.302-8.634-8.634z"/></svg>
<span data-i18n="cta.googleplay">Google Play</span>
</a>
</div>
</div>
</section>
<!-- ===== Footer ===== -->
<footer class="footer">
<div class="container footer-inner">
<div class="footer-brand">
<img src="assets/logo.jpg" alt="万物皆宜" style="width:28px; height:28px; border-radius:50%; border:1px solid var(--gold-dark);">
<span class="footer-brand-text">万物皆宜</span>
</div>
<ul class="footer-links">
<li><a href="#" data-i18n="footer.privacy">隐私政策</a></li>
<li><a href="#" data-i18n="footer.terms">用户协议</a></li>
<li><a href="#" data-i18n="footer.contact">联系我们</a></li>
</ul>
<div class="lang-switcher-footer">
<select data-locale-switcher aria-label="Language">
<option value="zh-CN">简体中文</option>
<option value="zh-TW">繁體中文</option>
<option value="en">English</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="de">Deutsch</option>
<option value="fr">Français</option>
<option value="es">Español</option>
<option value="pt">Português</option>
</select>
</div>
<p class="footer-copy" data-i18n="footer.copy">© 2026 万物皆宜. 保留所有权利.</p>
</div>
</footer>
<!-- ===== Scripts ===== -->
<script src="i18n.js"></script>
<script>
// Initialize i18n
document.addEventListener('DOMContentLoaded', () => {
window.I18N.init();
// Bind locale switcher events
document.querySelectorAll('[data-locale-switcher]').forEach(select => {
select.addEventListener('change', (e) => {
window.I18N.apply(e.target.value);
});
});
});
// Nav scroll effect
const nav = document.getElementById('nav');
window.addEventListener('scroll', () => {
nav.classList.toggle('scrolled', window.scrollY > 50);
});
// Mobile nav toggle
const navToggle = document.getElementById('navToggle');
const navLinks = document.getElementById('navLinks');
navToggle.addEventListener('click', () => {
navLinks.classList.toggle('open');
});
// Close mobile nav on link click
navLinks.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
navLinks.classList.remove('open');
});
});
// Scroll reveal animation
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
}, observerOptions);
document.querySelectorAll('.fade-up').forEach(el => observer.observe(el));
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
</script>
</body>
</html>