/* ================= 首页操作引导(2026-10-12) ================= 用户:「给首页加上引导操作步骤」。第一次进首页时,一步一步高亮讲 5 个地方: ① 头图孕周 ② 孕育工具 ③ 此刻 ④「记一下」圆钮 ⑤「我的」 · 只走一次:看完或点「跳过」都记 localStorage 'mmbox.coach.v1',以后不再出(同 onboarding-once-rule)。 · 调试 / 给人看:URL 带 ?coach=1 每次都出。 · 不抢别的弹层:授权、欢迎礼、孕期档案、记一下面板、详情页等开着时不计时, 全部关掉、首页安静 1.5 秒后才开始;引导进行中别的弹层冒出来 → 暂时收起,等它关了从当前步接着讲。 · 某一步的目标不在页面上(如「此刻」接口没数据整块隐藏)→ 自动跳过这一步,不留空框。 · 遮罩挂在 #phone 里(跟页面同一个坐标系),z-index 高于所有弹层;滚动交给首页 .screen,引导时锁住。 */ (function () { 'use strict'; const KEY = 'mmbox.coach.v1'; const FORCE = /[?&]coach=1\b/.test(location.search); try { if (!FORCE && localStorage.getItem(KEY)) return; } catch (e) { return; } const phone = document.getElementById('phone'); const scr = document.getElementById('screen-home'); if (!phone || !scr) return; /* 样式随脚本走(不动 mama-box.css)。z-index 140:高于 modal(125) / pk-sheet(131)。 */ const st = document.createElement('style'); st.textContent = '.mb-coach{position:absolute;inset:0;z-index:140;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s;-webkit-tap-highlight-color:transparent}' + '.mb-coach.show{opacity:1;visibility:visible}' + '.mbc-hole{position:absolute;border-radius:18px;box-shadow:0 0 0 2px rgba(255,255,255,.9),0 0 0 9999px rgba(40,22,16,.62);transition:left .3s,top .3s,width .3s,height .3s;pointer-events:none}' + '.mb-coach.is-moving .mbc-hole,.mb-coach.is-moving .mbc-card{transition:none}' + '.mbc-card{position:absolute;left:20px;right:20px;background:#fff;border-radius:18px;padding:16px 18px 12px;box-shadow:0 12px 32px rgba(0,0,0,.18);transition:top .3s}' + '.mbc-n{display:block;font-size:12px;color:#B08A7C;margin-bottom:4px}' + '.mbc-t{display:block;font-size:17px;color:var(--ink,#2B2320);margin-bottom:6px}' + '.mbc-d{margin:0;font-size:14px;line-height:1.6;color:#6B5A53}' + '.mbc-act{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}' + '.mbc-act button{min-height:40px;min-width:64px;padding:0 16px;border:0;border-radius:20px;font-size:14px;font-weight:600}' + '.mbc-skip{background:none;color:#9C8A83}' + '.mbc-next{background:var(--brand,#F4593C);color:#fff}' + '.screen.mbc-lock{overflow:hidden!important}' + '@media (prefers-reduced-motion:reduce){.mbc-hole,.mbc-card,.mb-coach{transition:none}}'; document.head.appendChild(st); const STEPS = [ { sel: '.hero-pane', t: '这是你的孕周', d: '孕几周、离见面还有几天、宝宝现在有多大,每天打开都会更新。' }, { sel: '.tool-dock', t: '常用孕育工具', d: '数胎动、孕检日历、体重这些常用工具都在这里,点卡片直接进。' }, /* 11-03「此刻」换成测一测 · 科普 · 计算器(js/kit.js);?kit=0 时 #kit 不显示,自动跳过 */ { sel: '#kit', t: '测一测 · 科普 · 计算器', d: '按你的孕周,每天推荐一个小测试、一篇科普和实用计算器。' }, { sel: '.tab-fab', t: '记一下', d: '想记点什么、找更多工具,点中间这颗按钮。' }, { sel: '.tabbar [data-tab="me"]', t: '我的', d: '孕期档案、头像、兜豆和兑换记录都在这里。' } ]; const visible = el => { if (!el) return false; const r = el.getBoundingClientRect(); if (!r.width || !r.height) return false; const cs = getComputedStyle(el); return cs.display !== 'none' && cs.visibility !== 'hidden' && !el.classList.contains('hide'); }; // 有别的弹层 / 不在首页 / 页面在后台 → 先别讲 function busy() { if (document.hidden || !scr.classList.contains('is-active')) return true; if (document.querySelector('.modal.show,.sheet.show,.detail.show,.pk-sheet.show,.search-layer.show,.bx-reveal.show')) return true; const wh = document.getElementById('whPage'); if (wh && wh.getAttribute('aria-hidden') === 'false') return true; return false; } let root, hole, card, idx = -1, on = false, timer = 0; function build() { root = document.createElement('div'); root.className = 'mb-coach'; root.setAttribute('role', 'dialog'); root.setAttribute('aria-modal', 'true'); root.setAttribute('aria-label', '首页使用引导'); root.innerHTML = '' + '