diff --git a/app.js b/app.js
index bb6c702..bfe34f3 100644
--- a/app.js
+++ b/app.js
@@ -1037,3 +1037,64 @@ function openAdmin() {
loadStats();
card.querySelector("#admin-refresh").addEventListener("click", loadStats);
}
+
+// ===== 分享与 PWA 安装提示 =====
+const btnShare = document.getElementById("btn-share");
+let installPromptEvt = null; // beforeinstallprompt 事件暂存,供分享卡片内"安装到主屏幕"使用
+window.addEventListener("beforeinstallprompt", (e) => {
+ e.preventDefault();
+ installPromptEvt = e;
+});
+
+/** 分享本站:两端统一弹二维码卡片,手机端贴底升起;支持系统分享时另有"发送给朋友"。 */
+btnShare.addEventListener("click", () => {
+ openShareCard(location.origin + "/");
+});
+
+/** 分享卡片:二维码扫码即达 + 复制链接 + 系统分享(如可用)+ 可安装时显示安装按钮。 */
+function openShareCard(url) {
+ const mask = document.createElement("div");
+ mask.className = "admin-mask share";
+ const card = document.createElement("div");
+ card.className = "admin-card share-card";
+ card.setAttribute("role", "dialog");
+ card.setAttribute("aria-label", "分享本站");
+ card.innerHTML = `
+
分享本站
+
+ ${url}
+
+ ${navigator.share ? '' : ""}
+
+ ${installPromptEvt ? '' : ""}
+
+
`;
+ mask.appendChild(card);
+ document.body.appendChild(mask);
+ const close = () => mask.remove();
+ mask.addEventListener("click", (e) => { if (e.target === mask) close(); });
+ card.querySelector("#share-close").addEventListener("click", close);
+ card.querySelector("#share-native")?.addEventListener("click", async () => {
+ try {
+ await navigator.share({
+ title: "经典诵读",
+ text: "心经、金刚经、道德经等经典在线诵读:千问语音合成,逐字高亮跟读,山寺配乐。",
+ url,
+ });
+ } catch { /* 用户取消分享 */ }
+ });
+ card.querySelector("#share-copy").addEventListener("click", async (e) => {
+ try {
+ await navigator.clipboard.writeText(url);
+ e.target.textContent = "已复制";
+ } catch {
+ e.target.textContent = "复制失败";
+ }
+ });
+ card.querySelector("#share-install")?.addEventListener("click", async () => {
+ installPromptEvt.prompt();
+ await installPromptEvt.userChoice;
+ installPromptEvt = null;
+ close();
+ });
+}
diff --git a/bg-m.jpg b/bg-m.jpg
new file mode 100644
index 0000000..baa718f
Binary files /dev/null and b/bg-m.jpg differ
diff --git a/bg.jpg b/bg.jpg
new file mode 100644
index 0000000..2dfb0e5
Binary files /dev/null and b/bg.jpg differ
diff --git a/deploy.sh b/deploy.sh
index 6af91c9..d8d3a06 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -14,7 +14,7 @@ HOST=154.8.162.18
USER=root
DEST=/opt/fj
# 注意:不同步 .env —— 服务器端 PORT=8018 与本地开发配置不同,避免覆盖。
-FILES=(index.html style.css app.js server.py sw.js manifest.json icon.svg icon-180.png icon-192.png icon-512.png README.md run.md)
+FILES=(index.html style.css app.js server.py sw.js manifest.json icon.svg icon-180.png icon-192.png icon-512.png README.md run.md robots.txt sitemap.xml og.png qr.png poster.png bg.jpg bg-m.jpg)
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=15"
SSH_CMD="ssh $SSH_OPTS"
diff --git a/index.html b/index.html
index b4e38e3..c6f3730 100644
--- a/index.html
+++ b/index.html
@@ -5,7 +5,13 @@
-心经
+经典诵读 · 心经
+
+
+
+
+
+
@@ -13,7 +19,7 @@
-
+
@@ -90,6 +96,7 @@
+