Browse Source

feat(home): 重构首页为 2×2 卡片,新增导航与备案 footer

- 四张分流卡片改为 2×2 小卡片(图标+标题+描述+CTA)
- 顶部导航:左 logo(深色副本 wikipali_logo_dark.svg)、右「进入旧版」+ 语言切换
- footer:版权 + ICP 备案号 + 公安备案号
- i18n:新增 legacy 文案,library CTA 改为「我要读经」
visuddhinanda 2 weeks ago
parent
commit
28bfc50ec4

+ 4 - 8
api-v13/app/Http/Controllers/PageIndexController.php

@@ -13,9 +13,8 @@ class PageIndexController extends Controller
                 'eyebrow' => 'Library',
                 'eyebrow' => 'Library',
                 'title' => __('home.cards.library.title'),
                 'title' => __('home.cards.library.title'),
                 'lead' => __('home.cards.library.lead'),
                 'lead' => __('home.cards.library.lead'),
-                'image' => 'library',
+                'icon' => 'ti-books',
                 'tint' => '#2E4A63',
                 'tint' => '#2E4A63',
-                'align' => 'start',
                 'href' => '/library',
                 'href' => '/library',
                 'cta' => __('home.cards.library.cta'),
                 'cta' => __('home.cards.library.cta'),
                 'available' => true,
                 'available' => true,
@@ -25,9 +24,8 @@ class PageIndexController extends Controller
                 'eyebrow' => 'Course',
                 'eyebrow' => 'Course',
                 'title' => __('home.cards.course.title'),
                 'title' => __('home.cards.course.title'),
                 'lead' => __('home.cards.course.lead'),
                 'lead' => __('home.cards.course.lead'),
-                'image' => 'course',
+                'icon' => 'ti-school',
                 'tint' => '#2A5257',
                 'tint' => '#2A5257',
-                'align' => 'end',
                 'href' => '/library/course',
                 'href' => '/library/course',
                 'cta' => __('home.cards.course.cta'),
                 'cta' => __('home.cards.course.cta'),
                 'available' => true,
                 'available' => true,
@@ -37,9 +35,8 @@ class PageIndexController extends Controller
                 'eyebrow' => 'Workspace',
                 'eyebrow' => 'Workspace',
                 'title' => __('home.cards.workspace.title'),
                 'title' => __('home.cards.workspace.title'),
                 'lead' => __('home.cards.workspace.lead'),
                 'lead' => __('home.cards.workspace.lead'),
-                'image' => 'workspace',
+                'icon' => 'ti-tools',
                 'tint' => '#2C4A3C',
                 'tint' => '#2C4A3C',
-                'align' => 'start',
                 'href' => '/pcd-v2026/workspace',
                 'href' => '/pcd-v2026/workspace',
                 'cta' => __('home.cards.workspace.cta'),
                 'cta' => __('home.cards.workspace.cta'),
                 'available' => true,
                 'available' => true,
@@ -49,9 +46,8 @@ class PageIndexController extends Controller
                 'eyebrow' => 'Development',
                 'eyebrow' => 'Development',
                 'title' => __('home.cards.development.title'),
                 'title' => __('home.cards.development.title'),
                 'lead' => __('home.cards.development.lead'),
                 'lead' => __('home.cards.development.lead'),
-                'image' => 'development',
+                'icon' => 'ti-code',
                 'tint' => '#4A4A48',
                 'tint' => '#4A4A48',
-                'align' => 'end',
                 'href' => null,
                 'href' => null,
                 'cta' => __('home.cards.development.cta'),
                 'cta' => __('home.cards.development.cta'),
                 'available' => false,
                 'available' => false,

+ 89 - 0
api-v13/public/assets/images/wikipali_logo_dark.svg

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="wikipali_logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" viewBox="0 0 100 50" style="enable-background:new 0 0 100 50;" xml:space="preserve">
+<g id="圖層_1">
+	<g id="Group_12" transform="translate(-396 -320)">
+		<g id="Group_2" transform="translate(396 320)">
+			<g id="Group_1" transform="translate(39.472 12.369)">
+				<g id="Path_1">
+					<path style="fill:#2B2318;" d="M-5.9,19.5c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.2-0.3-0.4l-2.2-8.2v-0.1c0-0.1,0-0.2,0.1-0.3
+						c0.1-0.1,0.2-0.2,0.3-0.2h0.8c0.2,0,0.3,0.1,0.5,0.2c0.1,0.1,0.2,0.2,0.3,0.4l1.1,4.5c0,0,0.2,0.9,0.5,2.6l0,0l0,0l0,0l0,0
+						c0.4-1.7,0.6-2.6,0.6-2.6l1.2-4.5c0.1-0.3,0.4-0.6,0.7-0.6h0.6c0.3,0,0.6,0.2,0.7,0.6l1.2,4.5c0.1,0.3,0.2,0.7,0.3,1.3
+						c0.1,0.6,0.2,1,0.3,1.3l0,0l0,0c0,0,0,0,0.1,0c0-0.2,0.1-0.6,0.2-1.2c0.3-0.6,0.4-1,0.5-1.4l1.1-4.5c0.1-0.3,0.4-0.6,0.7-0.6
+						h0.7c0.1,0,0.3,0.1,0.3,0.2c0,0.1,0.1,0.2,0.1,0.3v0.1l-2.1,8.2c0,0.2-0.1,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.2H0
+						c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.2-0.3-0.4l-1-4.1c-0.1-0.4-0.3-1.3-0.6-2.7c0,0,0,0-0.1,0c0,0,0,0-0.1,0
+						c-0.2,1.2-0.4,2.1-0.6,2.7l-1,4.1c0,0.2-0.1,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.2H-5.9L-5.9,19.5z"/>
+				</g>
+				<g id="Path_2">
+					<path style="fill:#2B2318;" d="M8.1,8.1C7.8,8.3,7.5,8.4,7.2,8.4S6.6,8.3,6.3,8.1C6.1,7.9,5.9,7.6,5.9,7.3S6,6.7,6.2,6.5
+						c0.2-0.2,0.6-0.3,0.9-0.3c0.3,0,0.7,0.1,0.9,0.3C8.2,6.7,8.4,7,8.4,7.3C8.4,7.6,8.3,7.9,8.1,8.1z M6.8,19.5
+						c-0.3,0-0.6-0.3-0.6-0.6l0,0v-8.2c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h0.7c0.2,0,0.3,0.1,0.4,0.2
+						c0.1,0.1,0.2,0.3,0.2,0.4v8.2c0,0.3-0.3,0.6-0.6,0.6l0,0H6.8z"/>
+				</g>
+				<g id="Path_3">
+					<path style="fill:#2B2318;" d="M11.8,19.5c-0.3,0-0.6-0.3-0.6-0.6l0,0V6.5c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h0.7
+						c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4v8.1l0,0l0,0l3.3-4.1c0.2-0.3,0.6-0.5,1-0.4h1c0.1,0,0.2,0.1,0.2,0.2
+						c0.1,0.1,0,0.2,0,0.3l-2.8,3.3V14l3.2,5c0,0,0,0.1,0.1,0.2c0,0.1,0,0.1-0.1,0.2s-0.2,0.2-0.3,0.2h-0.9c-0.4,0-0.7-0.2-0.9-0.5
+						l-2.2-3.7c0,0,0,0-0.1,0l-1.5,1.7c0,0,0,0.1-0.1,0.1v1.7c0,0.3-0.3,0.6-0.6,0.6l0,0L11.8,19.5z"/>
+				</g>
+				<g id="Path_4">
+					<path style="fill:#2B2318;" d="M23,8.1c-0.2,0.2-0.6,0.3-0.9,0.3s-0.6-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.3-0.8s0.1-0.6,0.3-0.8
+						c0.2-0.2,0.6-0.3,0.9-0.3s0.7,0.1,0.9,0.3c0.2,0.2,0.4,0.5,0.4,0.8C23.4,7.6,23.3,7.9,23,8.1z M21.8,19.5
+						c-0.3,0-0.6-0.3-0.6-0.6l0,0v-8.2c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h0.7c0.2,0,0.3,0.1,0.4,0.2
+						c0.1,0.1,0.2,0.3,0.2,0.4v8.2c0,0.3-0.3,0.6-0.6,0.6l0,0H21.8z"/>
+				</g>
+				<g id="Path_5">
+					<path style="fill:#2B2318;" d="M26.8,23.3c-0.3,0-0.6-0.3-0.6-0.6l0,0v-12c0-0.3,0.3-0.6,0.6-0.6l0,0h0.4
+						c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4v0.4l0,0l0,0c0.8-0.7,1.8-1.2,2.9-1.2c1.1,0,2.1,0.4,2.7,1.3c0.7,1,1,2.2,1,3.5
+						c0,0.7-0.1,1.4-0.3,2.1c-0.2,0.6-0.5,1.1-0.9,1.6c-0.4,0.4-0.8,0.7-1.3,1c-0.5,0.2-1,0.3-1.5,0.3c-0.9,0-1.8-0.4-2.4-1l0,0l0,0
+						l0,0v1.5v2.4c0,0.3-0.3,0.6-0.6,0.6l0,0L26.8,23.3L26.8,23.3z M30.2,18.2c0.7,0,1.3-0.3,1.7-0.9c0.5-0.7,0.7-1.6,0.7-2.5
+						c0-2.1-0.7-3.2-2.2-3.2c-0.8,0.1-1.6,0.5-2.2,1.1l-0.1,0.1v4.4c0,0,0,0.1,0.1,0.1C28.8,17.8,29.5,18.1,30.2,18.2L30.2,18.2z"/>
+				</g>
+				<g id="Path_6">
+					<path style="fill:#2B2318;" d="M39.1,19.7c-0.7,0-1.4-0.2-2-0.7c-1.1-1.1-1-2.8,0.1-3.9c0.1-0.1,0.3-0.3,0.5-0.4
+						c1.3-0.7,2.7-1.1,4.2-1.2c0,0,0.1,0,0.1-0.1c0-1.3-0.6-2-1.8-2c-0.8,0-1.5,0.2-2.2,0.6c-0.1,0.1-0.3,0.1-0.4,0.1
+						c-0.2,0-0.3-0.1-0.3-0.3L37,11.6c-0.1-0.1-0.1-0.3-0.1-0.5s0.1-0.3,0.3-0.4c1-0.6,2.1-0.9,3.3-0.9c1-0.1,1.9,0.3,2.6,1
+						c0.6,0.9,0.9,1.9,0.8,2.9v5c0,0.3-0.3,0.6-0.6,0.6l0,0h-0.4c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4l-0.1-0.5l0,0l0,0
+						C41.3,19.2,40.2,19.7,39.1,19.7z M38.5,8.1c-0.3,0-0.6-0.3-0.6-0.6l0,0V7.3c0-0.3,0.3-0.6,0.6-0.6l0,0h4.1
+						c0.3,0,0.6,0.3,0.6,0.6l0,0v0.1c0,0.3-0.3,0.6-0.6,0.6l0,0h-4.1V8.1z M39.7,18.2c0.8-0.1,1.6-0.4,2.2-1c0,0,0.1-0.1,0-0.1V15
+						c0-0.1,0-0.1-0.1-0.1c-1,0.1-1.9,0.3-2.8,0.8c-0.5,0.3-0.8,0.8-0.8,1.3c0,0.4,0.1,0.7,0.4,1C38.9,18.1,39.3,18.2,39.7,18.2
+						L39.7,18.2z"/>
+				</g>
+				<g id="Path_7">
+					<path style="fill:#2B2318;" d="M48.8,19.7c-0.6,0.1-1.1-0.2-1.5-0.6c-0.3-0.5-0.5-1.2-0.5-1.8V6.5c0-0.2,0.1-0.3,0.2-0.4
+						c0.1-0.1,0.3-0.2,0.4-0.2h0.7c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4v10.9c0,0.3,0.1,0.5,0.3,0.7c0,0,0.1,0,0.1,0.1
+						c0.1,0,0.1,0.1,0.2,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.4v0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.2,0.2-0.4,0.2
+						C49.1,19.7,48.9,19.7,48.8,19.7z"/>
+				</g>
+				<g id="Path_8">
+					<path style="fill:#2B2318;" d="M53.9,8.1c-0.2,0.2-0.6,0.3-0.9,0.3c-0.3,0-0.6-0.1-0.9-0.3c-0.2-0.2-0.4-0.5-0.3-0.8
+						c0-0.3,0.1-0.6,0.3-0.8c0.2-0.2,0.6-0.3,0.9-0.3c0.3,0,0.7,0.1,0.9,0.3c0.2,0.2,0.4,0.5,0.4,0.8C54.3,7.6,54.2,7.9,53.9,8.1z
+						 M52.7,19.5c-0.3,0-0.6-0.3-0.6-0.6l0,0v-8.2c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h0.7c0.2,0,0.3,0.1,0.4,0.2
+						c0.1,0.1,0.2,0.3,0.2,0.4v8.2c0,0.3-0.3,0.6-0.6,0.6l0,0H52.7z"/>
+				</g>
+			</g>
+			<g id="Path_9">
+				<path style="fill:#F1CA23;" d="M18.9,34.4c-0.5,0-1-0.4-1-1l0,0v-3.6c0-5.6,2.7-8.8,7.3-8.8c0.5,0,1,0.4,1,1c0,0.5-0.4,1-1,1
+					l0,0c-3.5,0-5.3,2.3-5.3,6.8v3.6C19.8,34,19.4,34.4,18.9,34.4L18.9,34.4z"/>
+			</g>
+			<g id="Path_10">
+				<path style="fill:#F1CA23;" d="M20.8,45.5c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1l0,0c1.9,0,3.3-2.6,3.3-6.3V26.6c0-0.5,0.4-1,1-1
+					c0.5,0,1,0.4,1,1v10.6C26.1,42.9,23.4,45.5,20.8,45.5z"/>
+			</g>
+			<g id="Path_11">
+				<path style="fill:#F1CA23;" d="M14.6,34.4c-0.5,0-1-0.4-1-1l0,0V11.3c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1v22.1
+					C15.6,34,15.1,34.4,14.6,34.4L14.6,34.4z"/>
+			</g>
+			<g id="Path_12">
+				<path style="fill:#F1CA23;" d="M10.3,34.4c-0.5,0-1-0.4-1-1l0,0V11.3c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1v22.1
+					C11.3,34,10.9,34.4,10.3,34.4L10.3,34.4z"/>
+			</g>
+			<g id="Path_13">
+				<path style="fill:#F1CA23;" d="M6.1,34.4c-0.5,0-1-0.4-1-1l0,0V11.3c0-0.5,0.4-1,1-1s1,0.4,1,1v22.1C7.1,34,6.6,34.4,6.1,34.4z"
+					/>
+			</g>
+		</g>
+	</g>
+</g>
+</svg>

+ 201 - 168
api-v13/resources/css/home.css

@@ -1,7 +1,7 @@
 /* resources/css/home.css
 /* resources/css/home.css
    WikiPāli 首页(next.wikipali.org)样式入口。
    WikiPāli 首页(next.wikipali.org)样式入口。
-   只服务于首页:品牌 hero + 四张通栏分流卡片。
-   平面、哑光、克制,无渐变 / 发光 / 阴影 / 圆角卡片
+   只服务于首页:顶部导航 + 品牌 hero + 2×2 分流卡片。
+   平面、哑光、克制,无渐变 / 发光 / 大面积投影
 */
 */
 
 
 /* 1. Tabler(Bootstrap 5 底座)+ Tabler Icons */
 /* 1. Tabler(Bootstrap 5 底座)+ Tabler Icons */
@@ -14,9 +14,11 @@
     --home-text: #2B2318;
     --home-text: #2B2318;
     --home-text-secondary: #63594A;
     --home-text-secondary: #63594A;
     --home-text-muted: #6F6555;
     --home-text-muted: #6F6555;
-    --home-border-muted: #B6AB98;
+    --home-border: #E4DCCD;
+    --home-card-bg: #FFFDF9;
+    --home-brand: #C8860A;
+    --home-brand-dark: #9A6508;
     --home-cta-hover-text: #F6F1E7;
     --home-cta-hover-text: #F6F1E7;
-    --home-hero-tint: #8A6A3C;
 }
 }
 
 
 /* 3. 页面底色 */
 /* 3. 页面底色 */
@@ -30,284 +32,315 @@
     background: var(--home-bg);
     background: var(--home-bg);
 }
 }
 
 
-/* 3.5 右上角语言选择(复用 x-language-switcher,改为浅底深字) */
 .home {
 .home {
     position: relative;
     position: relative;
 }
 }
 
 
-.home-lang {
-    position: absolute;
-    top: 1rem;
-    right: 1.5rem;
-    z-index: 10;
+/* 4. 顶部导航:浅底、深色 logo / 文案;内容限宽与下方一致 */
+.home-nav {
+    color: var(--home-text);
 }
 }
 
 
-.home-lang .language-link,
-.home-lang .language-link:hover {
+.home-nav__inner {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    gap: 1rem;
+    max-width: 64rem;
+    margin: 0 auto;
+    padding: 0.75rem 1.5rem;
+}
+
+.home-nav__brand {
+    display: inline-flex;
+    align-items: center;
+    color: var(--home-text);
+}
+
+.home-nav__logo {
+    display: block;
+    height: 64px;
+    width: auto;
+}
+
+.home-nav__actions {
+    display: flex;
+    align-items: center;
+    gap: 1rem;
+}
+
+/* “旧版入口”显著按钮:品牌金填充 */
+.home-nav__legacy {
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    min-height: 36px;
+    padding: 0.5rem 1.25rem;
+    border-radius: 999px;
+    background: var(--home-brand);
+    color: #fff;
+    font-size: 14px;
+    font-weight: 600;
+    line-height: 1;
+    text-decoration: none;
+    white-space: nowrap;
+    transition: background-color 0.2s ease;
+}
+
+.home-nav__legacy:hover,
+.home-nav__legacy:focus {
+    background: var(--home-brand-dark);
+    color: #fff;
+    text-decoration: none;
+}
+
+.home-nav__legacy:focus-visible {
+    outline: 2px solid var(--home-text);
+    outline-offset: 2px;
+}
+
+/* 语言切换在浅色导航下保持深字、深色下拉 */
+.home-nav__lang .language-link,
+.home-nav__lang .language-link:hover {
     color: var(--home-text);
     color: var(--home-text);
 }
 }
 
 
 @media (max-width: 768px) {
 @media (max-width: 768px) {
-    .home-lang {
-        top: .75rem;
-        right: 1rem;
+    .home-nav__inner {
+        padding: 0.75rem 1rem;
+    }
+
+    .home-nav__logo {
+        height: 52px;
+    }
+
+    .home-nav__actions {
+        gap: 0.75rem;
+    }
+
+    .home-nav__legacy {
+        min-height: 32px;
+        padding: 0.5rem 1rem;
     }
     }
 
 
     /* 组件移动端默认展开为静态列表,首页仍保持下拉 */
     /* 组件移动端默认展开为静态列表,首页仍保持下拉 */
-    .home-lang .language-switcher {
+    .home-nav__lang .language-switcher {
         width: auto;
         width: auto;
     }
     }
 
 
-    .home-lang .language-dropdown {
+    .home-nav__lang .language-dropdown {
         position: absolute;
         position: absolute;
         right: 0;
         right: 0;
         opacity: 0;
         opacity: 0;
         visibility: hidden;
         visibility: hidden;
         transform: translateY(-10px);
         transform: translateY(-10px);
-        background: rgba(0, 0, 0, .85);
+        background: rgba(0, 0, 0, 0.85);
         -webkit-backdrop-filter: blur(10px);
         -webkit-backdrop-filter: blur(10px);
         backdrop-filter: blur(10px);
         backdrop-filter: blur(10px);
-        border: 1px solid rgba(255, 255, 255, .1);
-        margin-top: .5rem;
-        padding: .5rem 0;
+        border: 1px solid rgba(255, 255, 255, 0.1);
+        margin-top: 0.5rem;
+        padding: 0.5rem 0;
     }
     }
 
 
-    .home-lang .language-switcher:hover .language-dropdown {
+    .home-nav__lang .language-switcher:hover .language-dropdown {
         opacity: 1;
         opacity: 1;
         visibility: visible;
         visibility: visible;
         transform: translateY(0);
         transform: translateY(0);
     }
     }
 }
 }
 
 
-/* 4. 品牌 Hero */
+/* 5. 品牌 Hero */
 .home-hero {
 .home-hero {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;
     text-align: center;
     text-align: center;
-    height: 44vh;
-    min-height: 280px;
-    padding: 2rem 1.5rem;
-    background: color-mix(in srgb, var(--home-hero-tint) 16%, var(--home-bg));
+    padding: 4rem 1.5rem 3rem;
 }
 }
 
 
 .home-hero__title {
 .home-hero__title {
-    margin: 0 0 .75rem;
+    margin: 0 0 0.75rem;
     color: var(--home-text);
     color: var(--home-text);
-    font-size: clamp(2rem, 5vw, 3.5rem);
+    font-size: clamp(2rem, 5vw, 3rem);
     font-weight: 500;
     font-weight: 500;
     line-height: 1.2;
     line-height: 1.2;
-    letter-spacing: .02em;
+    letter-spacing: 0.02em;
 }
 }
 
 
 .home-hero__lead {
 .home-hero__lead {
     margin: 0;
     margin: 0;
+    max-width: 36rem;
     color: var(--home-text-secondary);
     color: var(--home-text-secondary);
-    font-size: clamp(.95rem, 1.6vw, 1.125rem);
+    font-size: clamp(0.95rem, 1.6vw, 1.125rem);
     line-height: 1.5;
     line-height: 1.5;
 }
 }
 
 
-/* 5. 通栏卡片 */
+/* 6. 2×2 卡片网格 */
+.home-grid {
+    display: grid;
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+    gap: 1.5rem;
+    max-width: 64rem;
+    margin: 0 auto;
+    padding: 0 1.5rem 4rem;
+}
+
+/* 7. 卡片:浅底、细边框、圆角,克制投影仅用于 hover */
 .home-card {
 .home-card {
-    position: relative;
     display: flex;
     display: flex;
-    align-items: center;
-    height: 40vh;
-    min-height: 320px;
-    max-height: 480px;
-    overflow: hidden;
+    flex-direction: column;
+    align-items: flex-start;
+    gap: 0.75rem;
+    padding: 1.5rem;
+    background: var(--home-card-bg);
+    border: 1px solid var(--home-border);
+    border-radius: 12px;
     color: var(--home-text);
     color: var(--home-text);
+    text-decoration: none;
 }
 }
 
 
-/* 末卡(二次开发)高度略矮 */
-#card-development {
-    height: 36vh;
-    min-height: 280px;
-    max-height: none;
-}
-
-/* 底图:通栏满铺 */
-.home-card__media-wrap {
-    position: absolute;
-    inset: 0;
-    display: block;
-    margin: 0;
-    padding: 0;
-}
-
-.home-card__media {
-    display: block;
-    width: 100%;
-    height: 100%;
-    object-fit: cover;
-}
-
-/* 文字在左 → 图的视觉重心在右;文字在右 → 视觉重心在左 */
-.home-card--start .home-card__media {
-    object-position: 70% center;
+.home-card--link {
+    transition: border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
 }
 }
 
 
-.home-card--end .home-card__media {
-    object-position: 30% center;
+.home-card--link:hover,
+.home-card--link:focus-visible {
+    border-color: var(--home-brand);
+    transform: translateY(-2px);
+    box-shadow: 0 8px 24px rgba(43, 35, 24, 0.08);
+    color: var(--home-text);
+    text-decoration: none;
 }
 }
 
 
-/* 蒙版:保证文字对比度 ≥ 4.5:1 */
-.home-card__veil {
-    position: absolute;
-    inset: 0;
-    background: color-mix(in srgb, var(--card-tint) 16%, rgba(246, 241, 231, .8));
+.home-card--link:focus-visible {
+    outline: 2px solid var(--home-brand);
+    outline-offset: 3px;
 }
 }
 
 
-/* 文字块:垂直居中,横向贴边 */
-.home-card__body {
-    position: relative;
-    z-index: 1;
-    display: flex;
+/* 图标:卡片 tint 的低饱和底色 + 同色图标 */
+.home-card__icon {
+    display: inline-flex;
     align-items: center;
     align-items: center;
-    width: 100%;
-    padding: 2rem clamp(1.5rem, 6vw, 5rem);
-}
-
-.home-card--start .home-card__body {
-    justify-content: flex-start;
-    padding-left: calc(clamp(1.5rem, 6vw, 5rem) + 300px);
-}
-
-.home-card--end .home-card__body {
-    justify-content: flex-end;
-    padding-right: calc(clamp(1.5rem, 6vw, 5rem) + 300px);
-}
-
-.home-card__text {
-    width: 100%;
-    max-width: 26rem;
-}
-
-.home-card--start .home-card__text {
-    text-align: left;
-}
-
-.home-card--end .home-card__text {
-    text-align: right;
+    justify-content: center;
+    width: 44px;
+    height: 44px;
+    border-radius: 10px;
+    background: color-mix(in srgb, var(--card-tint) 12%, #fff);
+    color: var(--card-tint);
+    font-size: 22px;
+    line-height: 1;
 }
 }
 
 
 .home-card__eyebrow {
 .home-card__eyebrow {
-    margin: 0 0 .5rem;
+    margin: 0;
     color: var(--home-text-muted);
     color: var(--home-text-muted);
     font-size: 12px;
     font-size: 12px;
-    letter-spacing: .22em;
+    letter-spacing: 0.18em;
     text-transform: uppercase;
     text-transform: uppercase;
 }
 }
 
 
 .home-card__title {
 .home-card__title {
-    margin: 0 0 .75rem;
+    margin: 0;
     color: var(--home-text);
     color: var(--home-text);
-    font-size: clamp(1.5rem, 3.2vw, 2.5rem);
-    font-weight: 500;
+    font-size: 1.25rem;
+    font-weight: 600;
     line-height: 1.3;
     line-height: 1.3;
 }
 }
 
 
 .home-card__lead {
 .home-card__lead {
-    margin: 0 0 1.5rem;
+    margin: 0;
+    flex: 1;
     color: var(--home-text-secondary);
     color: var(--home-text-secondary);
-    font-size: clamp(.9rem, 1.4vw, 1.0625rem);
+    font-size: 0.9375rem;
     line-height: 1.5;
     line-height: 1.5;
 }
 }
 
 
-/* CTA / 状态角标:胶囊形 */
 .home-card__cta,
 .home-card__cta,
 .home-card__badge {
 .home-card__badge {
     display: inline-flex;
     display: inline-flex;
     align-items: center;
     align-items: center;
-    gap: .5rem;
-    border-radius: 999px;
-    padding: .55rem 1.25rem;
+    gap: 0.5rem;
+    margin-top: 0.25rem;
     font-size: 14px;
     font-size: 14px;
     line-height: 1;
     line-height: 1;
 }
 }
 
 
 .home-card__cta {
 .home-card__cta {
-    border: 1px solid var(--home-text);
-    color: var(--home-text);
-    text-decoration: none;
-    transition: background-color .2s ease, color .2s ease;
+    color: var(--home-brand);
+    font-weight: 600;
 }
 }
 
 
-.home-card__cta:hover,
-.home-card__cta:focus {
-    background: var(--home-text);
-    color: var(--home-cta-hover-text);
-    text-decoration: none;
+.home-card__cta .ti {
+    transition: transform 0.2s ease;
 }
 }
 
 
-.home-card__cta:focus-visible {
-    outline: 2px solid var(--home-text);
-    outline-offset: 3px;
+.home-card--link:hover .home-card__cta .ti {
+    transform: translateX(3px);
 }
 }
 
 
 .home-card__badge {
 .home-card__badge {
-    border: 1px solid var(--home-border-muted);
     color: var(--home-text-muted);
     color: var(--home-text-muted);
 }
 }
 
 
-/* 6. 响应式:768–991px(高度不变,文字块收窄) */
-@media (max-width: 991.98px) {
-    .home-card__text {
-        max-width: 20rem;
-    }
-}
-
-/* 7. 响应式:<768px(全部左对齐,换移动端高度,蒙版加深) */
+/* 8. 响应式:<768px 单列 */
 @media (max-width: 767.98px) {
 @media (max-width: 767.98px) {
     .home-hero {
     .home-hero {
-        height: 40vh;
-        min-height: 240px;
-    }
-
-    .home-card {
-        height: 52vh;
-        min-height: 300px;
-        max-height: none;
+        padding: 3rem 1.5rem 2rem;
     }
     }
 
 
-    #card-development {
-        height: 46vh;
-        min-height: 260px;
+    .home-grid {
+        grid-template-columns: 1fr;
+        padding-bottom: 3rem;
     }
     }
+}
 
 
-    .home-card__body {
-        justify-content: flex-start;
-        padding: 2rem 1.5rem;
-    }
+/* 9. Footer:备案号(ICP / 公安备案) */
+.home-footer {
+    border-top: 1px solid var(--home-border);
+    color: var(--home-text-muted);
+}
 
 
-    .home-card--start .home-card__body,
-    .home-card--end .home-card__body {
-        padding-left: 1.5rem;
-        padding-right: 1.5rem;
-    }
+.home-footer__inner {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
+    justify-content: center;
+    gap: 0.5rem 1.5rem;
+    max-width: 64rem;
+    margin: 0 auto;
+    padding: 1.5rem;
+    font-size: 0.875rem;
+    line-height: 1.5;
+}
 
 
-    .home-card__text {
-        max-width: 100%;
-        text-align: left;
-    }
+.home-footer__item {
+    display: inline-flex;
+    align-items: center;
+    gap: 0.5rem;
+}
 
 
-    .home-card__media {
-        object-position: 75% center;
-    }
+.home-footer__icon {
+    display: block;
+    width: 20px;
+    height: 20px;
+}
 
 
-    .home-card__veil {
-        background: color-mix(in srgb, var(--card-tint) 20%, rgba(246, 241, 231, .88));
-    }
+.home-footer a {
+    color: var(--home-text-muted);
+    text-decoration: none;
+    transition: color 0.2s ease;
+}
 
 
-    .home-card__eyebrow {
-        font-size: 11px;
-    }
+.home-footer a:hover {
+    color: var(--home-text);
+    text-decoration: underline;
 }
 }
 
 
-/* 8. 尊重减少动态偏好:关闭过渡 */
+/* 10. 尊重减少动态偏好:关闭过渡 */
 @media (prefers-reduced-motion: reduce) {
 @media (prefers-reduced-motion: reduce) {
-    .home-card__cta {
+    .home-card--link,
+    .home-card__cta .ti {
         transition: none;
         transition: none;
     }
     }
 }
 }

+ 1 - 0
api-v13/resources/lang/en/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · Pali Buddhist Encyclopedia',
     'title' => 'WikiPāli · Pali Buddhist Encyclopedia',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'Pali Buddhist Encyclopedia — step by step into the world of the Pali canon',
     'hero_lead' => 'Pali Buddhist Encyclopedia — step by step into the world of the Pali canon',
+    'legacy' => 'Legacy version',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'Tipiṭaka Library',
             'title' => 'Tipiṭaka Library',

+ 1 - 0
api-v13/resources/lang/lo/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · ສາລານຸກົມຄຳພີປາລີ',
     'title' => 'WikiPāli · ສາລານຸກົມຄຳພີປາລີ',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'ສາລານຸກົມຄຳພີປາລີ — ຈາກງ່າຍໄປຫາຍາກ ເຂົ້າສູ່ໂລກແຫ່ງຄຳພີປາລີ',
     'hero_lead' => 'ສາລານຸກົມຄຳພີປາລີ — ຈາກງ່າຍໄປຫາຍາກ ເຂົ້າສູ່ໂລກແຫ່ງຄຳພີປາລີ',
+    'legacy' => 'ລຸ້ນເກົ່າ',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'ຫໍສະໝຸດພຣະໄຕຣປິດົກ',
             'title' => 'ຫໍສະໝຸດພຣະໄຕຣປິດົກ',

+ 1 - 0
api-v13/resources/lang/my/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · ပါဠိဗုဒ္ဓစာပေ စွယ်စုံကျမ်း',
     'title' => 'WikiPāli · ပါဠိဗုဒ္ဓစာပေ စွယ်စုံကျမ်း',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'ပါဠိဗုဒ္ဓစာပေ စွယ်စုံကျမ်း — အလွယ်မှ အခက်သို့ ပါဠိစာပေလောကထဲ ဝင်ရောက်ပါ',
     'hero_lead' => 'ပါဠိဗုဒ္ဓစာပေ စွယ်စုံကျမ်း — အလွယ်မှ အခက်သို့ ပါဠိစာပေလောကထဲ ဝင်ရောက်ပါ',
+    'legacy' => 'ဗားရှင်းဟောင်း',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'ပိဋကတ် စာကြည့်တိုက်',
             'title' => 'ပိဋကတ် စာကြည့်တိုက်',

+ 1 - 0
api-v13/resources/lang/si/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · පාලි බෞද්ධ විශ්වකෝෂය',
     'title' => 'WikiPāli · පාලි බෞද්ධ විශ්වකෝෂය',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'පාලි බෞද්ධ විශ්වකෝෂය — පියවරෙන් පියවර පාලි ත්‍රිපිටක ලෝකයට',
     'hero_lead' => 'පාලි බෞද්ධ විශ්වකෝෂය — පියවරෙන් පියවර පාලි ත්‍රිපිටක ලෝකයට',
+    'legacy' => 'පැරණි අනුවාදය',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'ග්‍රන්ථ පුස්තකාලය',
             'title' => 'ග්‍රන්ථ පුස්තකාලය',

+ 1 - 0
api-v13/resources/lang/th/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · สารานุกรมพระไตรปิฎกบาลี',
     'title' => 'WikiPāli · สารานุกรมพระไตรปิฎกบาลี',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'สารานุกรมพระไตรปิฎกบาลี — จากง่ายไปยาก เข้าสู่โลกแห่งพระบาลี',
     'hero_lead' => 'สารานุกรมพระไตรปิฎกบาลี — จากง่ายไปยาก เข้าสู่โลกแห่งพระบาลี',
+    'legacy' => 'เวอร์ชันเก่า',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'คลังพระคัมภีร์',
             'title' => 'คลังพระคัมภีร์',

+ 1 - 0
api-v13/resources/lang/vi/home.php

@@ -14,6 +14,7 @@ return [
     'title' => 'WikiPāli · Bách khoa Thánh điển Pāli',
     'title' => 'WikiPāli · Bách khoa Thánh điển Pāli',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => 'Bách khoa Thánh điển Pāli — từ dễ đến khó, bước vào thế giới kinh điển Pāli',
     'hero_lead' => 'Bách khoa Thánh điển Pāli — từ dễ đến khó, bước vào thế giới kinh điển Pāli',
+    'legacy' => 'Phiên bản cũ',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => 'Thư viện Tam Tạng',
             'title' => 'Thư viện Tam Tạng',

+ 2 - 1
api-v13/resources/lang/zh-Hans/home.php

@@ -14,11 +14,12 @@ return [
     'title' => 'WikiPāli · 巴利典籍百科',
     'title' => 'WikiPāli · 巴利典籍百科',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => '巴利典籍百科 —— 由浅入深,进入巴利典籍的世界',
     'hero_lead' => '巴利典籍百科 —— 由浅入深,进入巴利典籍的世界',
+    'legacy' => '进入旧版',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => '典籍文库',
             'title' => '典籍文库',
             'lead' => '三藏 · 义注 · 复注 · 字典',
             'lead' => '三藏 · 义注 · 复注 · 字典',
-            'cta' => '进入文库',
+            'cta' => '我要读经',
         ],
         ],
         'course' => [
         'course' => [
             'title' => '次第课程',
             'title' => '次第课程',

+ 2 - 1
api-v13/resources/lang/zh-Hant/home.php

@@ -14,11 +14,12 @@ return [
     'title' => 'WikiPāli · 巴利典籍百科',
     'title' => 'WikiPāli · 巴利典籍百科',
     'hero_title' => 'WikiPāli',
     'hero_title' => 'WikiPāli',
     'hero_lead' => '巴利典籍百科 —— 由淺入深,進入巴利典籍的世界',
     'hero_lead' => '巴利典籍百科 —— 由淺入深,進入巴利典籍的世界',
+    'legacy' => '進入舊版',
     'cards' => [
     'cards' => [
         'library' => [
         'library' => [
             'title' => '典籍文庫',
             'title' => '典籍文庫',
             'lead' => '三藏 · 義註 · 複註 · 字典',
             'lead' => '三藏 · 義註 · 複註 · 字典',
-            'cta' => '進入文庫',
+            'cta' => '我要讀經',
         ],
         ],
         'course' => [
         'course' => [
             'title' => '次第課程',
             'title' => '次第課程',

+ 24 - 97
api-v13/resources/views/components/home/card.blade.php

@@ -1,115 +1,42 @@
 {{-- resources/views/components/home/card.blade.php
 {{-- resources/views/components/home/card.blade.php
-     WikiPāli 首页通栏卡片。底图满铺,文字压在图上。
-     available && href 非空 → 渲染链接按钮;否则渲染不可点击的状态角标。
-
-     底图按「存在的文件」动态输出:优先 AVIF → WebP → JPEG 兜底。
-     有底图时直接显示底图(不加颜色混合蒙版);素材未就位时才用蒙版纯色块占位,不引用任何不存在的文件,
-     避免浏览器选中 AVIF 源却 404 导致整张图不显示。
+     WikiPāli 首页 2×2 分流卡片(DeepSeek 风格:图标 + 标题 + 描述 + CTA)。
+     available && href 非空 → 整卡可点击;否则渲染不可点击的状态角标。
 --}}
 --}}
 @props([
 @props([
     'slug',
     'slug',
     'eyebrow',
     'eyebrow',
     'title',
     'title',
     'lead',
     'lead',
-    'image',
+    'icon',
     'tint',
     'tint',
-    'align',
     'href' => null,
     'href' => null,
     'cta',
     'cta',
     'available' => false,
     'available' => false,
-    'eager' => false,
 ])
 ])
 
 
 @php
 @php
-    $sizes = [640, 1280, 2560];
-    $formats = ['avif' => 'image/avif', 'webp' => 'image/webp', 'jpg' => 'image/jpeg'];
-
-    // 收集磁盘上实际存在的底图文件
-    $byFormat = []; // ext => [ ['url'=>..., 'width'=>...], ... ]
-    foreach ($formats as $ext => $mime) {
-        $found = [];
-        foreach ($sizes as $width) {
-            $url = "/img/home/{$image}-{$width}.{$ext}";
-            if (is_file(public_path("img/home/{$image}-{$width}.{$ext}"))) {
-                $found[] = ['url' => $url, 'width' => $width];
-            }
-        }
-        if ($found !== []) {
-            $byFormat[$ext] = $found;
-        }
-    }
-
-    // 每种存在格式的 srcset 串
-    $sets = [];
-    foreach ($byFormat as $ext => $entries) {
-        $parts = [];
-        foreach ($entries as $e) {
-            $parts[] = $e['url'].' '.$e['width'].'w';
-        }
-        $sets[$ext] = implode(', ', $parts);
-    }
-
-    // <img> 兜底:优先 jpg,其次 webp,再次 avif;尺寸优先 1280
-    $fallbackFormat = null;
-    foreach (['jpg', 'webp', 'avif'] as $ext) {
-        if (isset($byFormat[$ext])) {
-            $fallbackFormat = $ext;
-            break;
-        }
-    }
-
-    $fallbackSrc = null;
-    if ($fallbackFormat !== null) {
-        foreach ($byFormat[$fallbackFormat] as $e) {
-            if ($e['width'] === 1280) {
-                $fallbackSrc = $e['url'];
-                break;
-            }
-        }
-        $fallbackSrc ??= $byFormat[$fallbackFormat][0]['url'];
-    }
-
     $titleId = "{$slug}-title";
     $titleId = "{$slug}-title";
 @endphp
 @endphp
 
 
-<section id="card-{{ $slug }}"
-    class="home-card home-card--{{ $align }}"
-    style="--card-tint: {{ $tint }}"
-    aria-labelledby="{{ $titleId }}">
-
-    @if ($fallbackSrc !== null)
-    <picture class="home-card__media-wrap">
-        @if (isset($sets['avif']))
-        <source type="image/avif" srcset="{{ $sets['avif'] }}" sizes="100vw">
-        @endif
-        @if (isset($sets['webp']))
-        <source type="image/webp" srcset="{{ $sets['webp'] }}" sizes="100vw">
-        @endif
-        <img class="home-card__media"
-            src="{{ $fallbackSrc }}"
-            @if (isset($sets[$fallbackFormat])) srcset="{{ $sets[$fallbackFormat] }}" sizes="100vw" @endif
-            alt=""
-            decoding="async"
-            @if($eager) loading="eager" fetchpriority="high" @else loading="lazy" @endif>
-    </picture>
-    @else
-    <div class="home-card__veil" aria-hidden="true"></div>
-    @endif
-
-    <div class="home-card__body">
-        <div class="home-card__text">
-            <p class="home-card__eyebrow">{{ $eyebrow }}</p>
-            <h2 class="home-card__title" id="{{ $titleId }}">{{ $title }}</h2>
-            <p class="home-card__lead">{{ $lead }}</p>
-
-            @if ($available && filled($href))
-                <a class="home-card__cta" href="{{ $href }}">{{ $cta }}</a>
-            @else
-                <span class="home-card__badge">
-                    <i class="ti ti-clock" aria-hidden="true"></i>
-                    {{ $cta }}
-                </span>
-            @endif
-        </div>
+@if ($available && filled($href))
+    <a id="card-{{ $slug }}"
+        class="home-card home-card--link"
+        href="{{ $href }}"
+        style="--card-tint: {{ $tint }}">
+        <span class="home-card__icon" aria-hidden="true"><i class="ti {{ $icon }}"></i></span>
+        <p class="home-card__eyebrow">{{ $eyebrow }}</p>
+        <h2 class="home-card__title" id="{{ $titleId }}">{{ $title }}</h2>
+        <p class="home-card__lead">{{ $lead }}</p>
+        <span class="home-card__cta">{{ $cta }}<i class="ti ti-arrow-right" aria-hidden="true"></i></span>
+    </a>
+@else
+    <div id="card-{{ $slug }}"
+        class="home-card"
+        style="--card-tint: {{ $tint }}">
+        <span class="home-card__icon" aria-hidden="true"><i class="ti {{ $icon }}"></i></span>
+        <p class="home-card__eyebrow">{{ $eyebrow }}</p>
+        <h2 class="home-card__title" id="{{ $titleId }}">{{ $title }}</h2>
+        <p class="home-card__lead">{{ $lead }}</p>
+        <span class="home-card__badge"><i class="ti ti-clock" aria-hidden="true"></i>{{ $cta }}</span>
     </div>
     </div>
-</section>
+@endif

+ 58 - 21
api-v13/resources/views/pages/home.blade.php

@@ -1,5 +1,5 @@
 {{-- resources/views/pages/home.blade.php
 {{-- resources/views/pages/home.blade.php
-     WikiPāli 首页:品牌 hero + 四张通栏分流卡片。
+     WikiPāli 首页:顶部导航(logo + 旧版入口 + 语言切换)+ 品牌 hero + 2×2 分流卡片。
      卡片数据全部来自 PageIndexController 传入的 $cards,模板不硬编码栏目文案。
      卡片数据全部来自 PageIndexController 传入的 $cards,模板不硬编码栏目文案。
 --}}
 --}}
 @extends('layouts.base')
 @extends('layouts.base')
@@ -15,10 +15,26 @@
 @section('page')
 @section('page')
 <main class="home">
 <main class="home">
 
 
-    {{-- 右上角语言选择,复用 library 的切换组件 --}}
-    <div class="home-lang">
-        <x-language-switcher />
-    </div>
+    {{-- 顶部导航:左 logo,右 旧版入口 + 语言切换 --}}
+    <nav class="home-nav">
+        <div class="home-nav__inner">
+            <a class="home-nav__brand" href="/" aria-label="WikiPāli">
+                <img src="{{ asset('assets/images/wikipali_logo_dark.svg') }}" alt="WikiPāli" class="home-nav__logo" />
+            </a>
+
+            <div class="home-nav__actions">
+                <a class="home-nav__legacy"
+                    href="{{ config('mint.server.dashboard_base_path') }}"
+                    target="_blank"
+                    rel="noopener">
+                    {{ __('home.legacy') }}
+                </a>
+                <div class="home-nav__lang">
+                    <x-language-switcher />
+                </div>
+            </div>
+        </div>
+    </nav>
 
 
     {{-- 品牌 Hero:站名 + 一行说明,居中 --}}
     {{-- 品牌 Hero:站名 + 一行说明,居中 --}}
     <header class="home-hero">
     <header class="home-hero">
@@ -26,22 +42,43 @@
         <p class="home-hero__lead">{{ __('home.hero_lead') }}</p>
         <p class="home-hero__lead">{{ __('home.hero_lead') }}</p>
     </header>
     </header>
 
 
-    {{-- 四张通栏卡片,纵向排列 --}}
-    @foreach ($cards as $card)
-        <x-home.card
-            :slug="$card['slug']"
-            :eyebrow="$card['eyebrow']"
-            :title="$card['title']"
-            :lead="$card['lead']"
-            :image="$card['image']"
-            :tint="$card['tint']"
-            :align="$card['align']"
-            :href="$card['href']"
-            :cta="$card['cta']"
-            :available="$card['available']"
-            :eager="$loop->first"
-        />
-    @endforeach
+    {{-- 四张分流卡片,2×2 网格 --}}
+    <div class="home-grid">
+        @foreach ($cards as $card)
+            <x-home.card
+                :slug="$card['slug']"
+                :eyebrow="$card['eyebrow']"
+                :title="$card['title']"
+                :lead="$card['lead']"
+                :icon="$card['icon']"
+                :tint="$card['tint']"
+                :href="$card['href']"
+                :cta="$card['cta']"
+                :available="$card['available']"
+            />
+        @endforeach
+    </div>
+
+    {{-- Footer:版权 + 备案号(ICP / 公安备案),参考 typhoon 模板 --}}
+    <footer class="home-footer">
+        <div class="home-footer__inner">
+            <span class="home-footer__item">© {{ now()->year }} WikiPāli</span>
+            @if (!empty(config('mint.app.icp_code')))
+                <span class="home-footer__item">
+                    <span>ICP备案号:</span>
+                    <a href="https://beian.miit.gov.cn/" target="_blank" rel="noreferrer">{{ config('mint.app.icp_code') }}</a>
+                </span>
+                <span class="home-footer__item">
+                    <img src="{{ asset('assets/images/logo_mps.png') }}" alt="公安备案" class="home-footer__icon" />
+                    @if (empty(config('mint.app.mps_code')))
+                        <span>滇公网安备[审批中]号</span>
+                    @else
+                        <span>{{ config('mint.app.mps_code') }}</span>
+                    @endif
+                </span>
+            @endif
+        </div>
+    </footer>
 
 
 </main>
 </main>
 @endsection
 @endsection