From 3394a1f6b05db4311e1680f22b148823a60fea4b Mon Sep 17 00:00:00 2001 From: Karlcarlo Date: Thu, 1 Oct 2026 07:57:59 +0000 Subject: [PATCH] =?UTF-8?q?feat(=E9=A6=96=E9=A1=B5):=203D=20=E5=A9=B4?= =?UTF-8?q?=E5=84=BF=E6=88=BF=E5=85=A5=E5=8F=A3=E6=94=B9=E7=89=88=E2=80=94?= =?UTF-8?q?=E2=80=94=E9=A6=96=E9=A1=B5=E6=9C=80=E5=BA=95=E7=9A=84=E3=80=8C?= =?UTF-8?q?=E8=B5=B0=E5=BB=8A=E5=B0=BD=E5=A4=B4=E7=9A=84=E9=97=A8=E3=80=8D?= =?UTF-8?q?=EF=BC=9A=E9=97=A8=E7=BC=9D=E9=87=8C=E6=88=BF=E9=97=B4=E9=9A=8F?= =?UTF-8?q?=E5=AD=95=E5=91=A8=E5=B8=83=E7=BD=AE=E3=80=81=E6=9C=A8=E7=89=8C?= =?UTF-8?q?+=E5=85=A5=E4=BD=8F=E5=80=92=E8=AE=A1=E6=97=B6=E6=97=A5?= =?UTF-8?q?=E5=8E=86=E3=80=81=E5=AE=9D=E5=AE=9D=E6=B0=94=E6=B3=A1=E8=BD=AE?= =?UTF-8?q?=E6=92=AD=E3=80=81=E7=82=B9=E5=87=BB=E6=8E=A8=E9=97=A8=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=20(v26100111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- assets/img/nursery-room.jpg | Bin 14495 -> 0 bytes index.html | 80 +++++++++++------- js/app.js | 109 ++++++++++++++++++++---- mama-box.css | 160 +++++++++++++++++++++++------------- 4 files changed, 246 insertions(+), 103 deletions(-) delete mode 100644 assets/img/nursery-room.jpg diff --git a/assets/img/nursery-room.jpg b/assets/img/nursery-room.jpg deleted file mode 100644 index 0c74cff84b57934552c13fd950473e1efddb5ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14495 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 NtO#QPPH*29{|AFx6N>-< diff --git a/index.html b/index.html index 75e465f..c99cfcb 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ 兜爸心选 · 孕育陪伴 - + @@ -456,33 +456,6 @@ ⚠️ 纸团飞进树洞的动画靠 Element.animate;不支持的老内核直接跳到「已收好」,不影响收存。 --> - -
- -
-

128 份孕育资料等你来领 · 查看全部 ›

+ + +
+ +
diff --git a/js/app.js b/js/app.js index d891989..6a128b2 100644 --- a/js/app.js +++ b/js/app.js @@ -3,7 +3,7 @@ (function () { 'use strict'; /* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */ - var VER = '26100110'; + var VER = '26100111'; const $ = (s, c) => (c || document).querySelector(s); const $$ = (s, c) => Array.from((c || document).querySelectorAll(s)); @@ -1053,7 +1053,7 @@ function syncPregnancy() { /* 孕期小知识:只认真实孕周(自己判显隐,见 renderTips) */ renderTips(); - nurseryCopy(); + nurseryRender(); /* ---- 产后态:宝宝已出生 → 一律不显示孕周数字(2026-09-22) ---- ⚠️ 必须放在 pregEmpty 之前:产后返回体的 week 也是 null, 落到空态分支会给**已经生产**的用户弹「完善孕期信息」引导。 @@ -3098,30 +3098,105 @@ }, 2600); })(); - /* ================= 3D 婴儿房 · 入口(2026-10-01)================= - 地址由「3D 婴儿房」会话(33d6c837)维护;对方目前不读任何参数,jumpApp 多带的 openid 无害(以后接后端正好用上)。 - · 昼夜:北京时间 19:00–6:00 挂 .is-night(和婴儿房里的昼夜灯光呼应);每 10 分钟查一次,跨点时自己换。 - · 文案:syncPregnancy() 调 nurseryCopy(),只认真实孕周(同孕期小知识的口径)。 */ + /* ================= 3D 婴儿房 · 入口(2026-10-01 二版:走廊尽头的门)================= + 设计和取舍写在 index.html 的 #nursery 注释里。地址由「3D 婴儿房」会话(33d6c837)维护,对方目前不读任何参数。 + · 布置进度**只按孕周推演**(首页读不到房里真实摆了什么);syncPregnancy() 每次都会调 nurseryRender()。 + · 三态:preg(有真实孕周)/ born(产后,全布置好、门敞开)/ empty(没建档,空房间 + 引导填预产期)。 */ const NURSERY_URL = 'https://beian3.douba.top/yef/'; const NURSERY_ID = 'yef-nursery'; - function nurseryCopy() { - const sub = $('#nySub'); - if (!sub) return; - const left = (state.pregEmpty === false && !state.postpartum) ? 40 - (state.week || 0) : -1; - sub.innerHTML = left > 1 ? '再过 ' + left + ' 周 TA 就要住进来啦,
攒兜豆换小床、墙纸和挂饰' - : left >= 0 ? 'TA 马上就要住进来啦,
攒兜豆换小床、墙纸和挂饰' - : '做孕期任务攒兜豆,
换小床、墙纸和挂饰'; - } - (function nurseryCard() { + const NY_STEPS = [ + { w: 4, k: 'wall', n: '粉墙', t: '粉墙刷好了' }, + { w: 12, k: 'curtain', n: '小窗帘', t: '小窗帘挂上了' }, + { w: 16, k: 'rug', n: '软地毯', t: '软地毯铺好了' }, + { w: 20, k: 'crib', n: '小床', t: '小床搬进来了' }, + { w: 24, k: 'mobile', n: '床头风铃', t: '床头风铃挂上了' }, + { w: 28, k: 'lamp', n: '小夜灯', t: '小夜灯装好了' }, + { w: 32, k: 'bear', n: '玩偶熊', t: '玩偶熊住进来了' }, + { w: 36, k: 'bag', n: '待产包', t: '待产包放在门口了' }, + { w: 39, k: 'stars', n: '星星灯', t: '星星灯亮起来了' } + ]; + let nyLines = [], nyLineIdx = 0; + function nurseryRender() { const sec = $('#nursery'); if (!sec) return; - $('#nyCard').addEventListener('click', () => jumpApp(NURSERY_URL, NURSERY_ID)); + const nm = state.babyName || '宝宝'; + const mode = state.postpartum ? 'born' : (state.pregEmpty === false && state.week) ? 'preg' : 'empty'; + const wk = mode === 'born' ? 99 : mode === 'preg' ? state.week : 0; + const done = NY_STEPS.filter(st => wk >= st.w); + const last = done[done.length - 1], next = NY_STEPS[done.length]; + sec.classList.toggle('is-born', mode === 'born'); + $$('#nursery [data-k]').forEach((g) => { + const k = g.getAttribute('data-k'); + g.classList.toggle('on', done.some(st => st.k === k)); + g.classList.toggle('new', mode === 'preg' && !!last && last.k === k && done.length > 1); + }); + const dots = $('#nyDots'); + dots.innerHTML = NY_STEPS.map((st, i) => + '').join(''); + dots.style.setProperty('--p', done.length ? ((done.length - 1) / (NY_STEPS.length - 1) * 100).toFixed(1) + '%' : '0%'); + $('#nySign').textContent = nm + '的房间'; + /* 入住倒计时:预产期 − 今天(按手机本地日期取整天) */ + let days = null; + if (mode === 'preg' && state.due) { + const t = new Date(); t.setHours(0, 0, 0, 0); + days = Math.round((state.due - t) / 864e5); + } + const cal = (top, num, unit, foot) => { + $('#nyCalTop').textContent = top; $('#nyCalNum').textContent = num; + $('#nyCalUnit').textContent = unit; $('#nyCalFoot').textContent = foot; + }; + if (mode === 'born') cal('已入住', state.babyAgeDays == null ? '♥' : state.babyAgeDays, state.babyAgeDays == null ? '' : '天', '欢迎回家'); + else if (days != null && days > 0) cal('入住倒计时', days, '天', (state.due.getMonth() + 1) + '月' + state.due.getDate() + '日'); + else if (days != null) cal('入住倒计时', '0', '天', '随时入住'); + else cal('入住日', '?', '', '填预产期'); + if (mode === 'born') { + $('#nyTitle').textContent = nm + '已经住进来啦'; + $('#nyProg').innerHTML = '房间布置好了 9/9,再给 TA 添点新东西吧'; + nyLines = ['这是我的房间!', '妈妈,再给我添件新玩具吧~']; + } else if (mode === 'preg') { + $('#nyTitle').textContent = '第 ' + wk + ' 周 · ' + (last ? last.t : '房间开始布置啦'); + $('#nyProg').innerHTML = '已布置 ' + done.length + '/9' + + (next ? ' · 下一件 ' + next.n : ' · 全都布置好啦'); + nyLines = ['妈妈,我的房间布置好了吗?']; + if (last && done.length > 1) nyLines.push('听说' + last.n + '到了,我能看看吗?'); + if (next) nyLines.push('我还想要' + next.n + '~'); + if (days > 0) nyLines.push('再过 ' + days + ' 天,我就搬进来啦'); + } else { + $('#nyTitle').textContent = nm + '的房间 · 还空着呢'; + $('#nyProg').innerHTML = '填好预产期,房间会跟着孕周一件件布置好'; + nyLines = ['妈妈,我的房间在哪呀?', '告诉我预产期,我就知道哪天搬进来啦']; + } + nyLineIdx = 0; + $('#nyBubble').textContent = nyLines[0]; + } + (function nurseryInit() { + const sec = $('#nursery'); + if (!sec) return; + const card = $('#nyCard'), bub = $('#nyBubble'); + const still = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches; + card.addEventListener('click', () => { + if (card.classList.contains('is-opening')) return; + card.classList.add('is-opening'); + setTimeout(() => jumpApp(NURSERY_URL, NURSERY_ID), still ? 0 : 700); + }); + /* 从婴儿房返回(bfcache 恢复)时把门关回虚掩 */ + window.addEventListener('pageshow', () => card.classList.remove('is-opening')); const tick = () => { const h = new Date(Date.now() + 8 * 3600e3).getUTCHours(); // 北京时间 sec.classList.toggle('is-night', h >= 19 || h < 6); }; tick(); setInterval(tick, 600e3); - nurseryCopy(); + /* 气泡轮播:一句 4.5 秒,淡出换下一句 */ + if (!still) setInterval(() => { + if (nyLines.length < 2 || document.hidden) return; + bub.classList.add('out'); + setTimeout(() => { + nyLineIdx = (nyLineIdx + 1) % nyLines.length; + bub.textContent = nyLines[nyLineIdx]; + bub.classList.remove('out'); + }, 350); + }, 4500); + nurseryRender(); })(); /* ================= 此刻,孕妈们在做什么(2026-10-01,需求文档 v1.0 第二节) ================= diff --git a/mama-box.css b/mama-box.css index 9f0ac27..21e82a9 100644 --- a/mama-box.css +++ b/mama-box.css @@ -414,7 +414,7 @@ a.skip:focus{left:16px;top:16px} 对齐的是内容,出血的是底色,这两件事要分开。 ⚠️ 三块的圆角、底色、左右内边距改成在这里一处定义。以后要调,改这一条, 别再回到各自的规则里单独写,那正是上一稿乱掉的原因。 */ -.tool-dock,.game-promo,.preg-tips,.today-line,.nursery,.shelf{ +.tool-dock,.game-promo,.preg-tips,.today-line,.shelf,.nursery{ margin:0 -26px;padding:16px 26px 18px;border-radius:26px; background-color:#fff; /* ⚠️ 这两条是一对,缺一不可,而且必须一起看: @@ -428,7 +428,7 @@ a.skip:focus{left:16px;top:16px} /* 块间距。给后两块,第一块的上间距另有规则(来信卡收放要用)。 ⚠️ 这是**块与块之间**的缝。某一块自己内部觉得挤,要调的是那块的 padding, 不是这里 —— 改这里会把三块的关系一起改掉。 */ -.tool-dock,.game-promo,.preg-tips,.today-line,.nursery,.shelf{margin-top:16px} +.tool-dock,.game-promo,.preg-tips,.today-line,.shelf,.nursery{margin-top:16px} /* ===== 后两块的暖色渐变底(本批新增)===== 用户原话:「在那个宝宝的今日脚印那块,稍微给背景它加一点渐变」 @@ -560,62 +560,106 @@ a.skip:focus{left:16px;top:16px} @keyframes gpTw{0%,100%{opacity:0;transform:scale(.6)}50%{opacity:1;transform:scale(1)}} @media (prefers-reduced-motion:reduce){.gp-cta,.gp-spark{animation:none}.gp-spark{opacity:.8}} -/* ============ 3D 婴儿房 · 入口(2026-10-01)============ - 奶油粉(取婴儿房自己的主色 #E0708A / 背景 #FFF9F3)。右边一座小房子:三角屋顶 + 冒烟的烟囱 + 窗户里的房间截图, - 截图慢慢左右平移(暗示 360° 可转)。.is-night = 北京时间 19:00–6:00:深色底、窗户里亮暖灯、两颗小星星。 */ -.ny-card{position:relative;display:flex;align-items:center;gap:8px;width:100%;overflow:hidden; - border:0;border-radius:22px;padding:16px 14px 16px 18px;text-align:left;font:inherit;color:#6B5048; - background:linear-gradient(135deg,#FFF9F3 0%,#FFEDE8 60%,#FDE0E4 100%);box-shadow:0 8px 22px rgba(224,112,138,.16); - transition:transform .2s var(--ease)} -.ny-card:active{transform:scale(.98)} -.ny-card::before{content:"";position:absolute;left:0;right:0;bottom:0;height:22px;background:#F9E3D6;opacity:.7} -.ny-text{position:relative;z-index:1;flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start} -.ny-tag{font-size:10.5px;font-weight:800;color:#E0708A;background:#fff;border-radius:999px;padding:2px 9px;letter-spacing:.3px} -.ny-name{margin-top:7px;font-size:19px;font-weight:900;line-height:1.25;letter-spacing:.3px;color:#5A3E37} -.ny-sub{margin-top:5px;font-size:12px;line-height:1.5;color:#8A6C63} -.ny-sub b{color:#E0708A;font-weight:900} -.ny-cta{margin-top:10px;display:inline-flex;align-items:center;gap:3px;border-radius:999px;padding:6px 14px; - font-size:13px;font-weight:800;color:#fff;background:linear-gradient(135deg,#F9B4C1,#F18DA2);box-shadow:0 4px 10px rgba(224,112,138,.3)} -.ny-house{position:relative;z-index:1;flex:0 0 auto;width:128px;height:132px;margin-bottom:-4px} -.ny-roof{position:absolute;left:0;right:0;top:12px;height:46px;background:linear-gradient(180deg,#F59AA9,#E0708A); - clip-path:polygon(50% 0,100% 100%,0 100%);border-radius:6px} -.ny-chim{position:absolute;right:28px;top:14px;width:14px;height:34px;background:#FFE3D3;border-radius:3px 3px 0 0} -.ny-chim i{position:absolute;left:3px;top:-4px;width:9px;height:9px;border-radius:50%;background:#fff;opacity:0; - animation:nySmoke 3.6s ease-out infinite} -.ny-chim i:nth-child(2){animation-delay:1.2s}.ny-chim i:nth-child(3){animation-delay:2.4s} -@keyframes nySmoke{0%{opacity:0;transform:translate(0,0) scale(.5)}20%{opacity:.9}100%{opacity:0;transform:translate(10px,-26px) scale(1.4)}} -.ny-body{position:absolute;left:12px;right:12px;top:56px;bottom:0;background:#FFF9F3;border-radius:0 0 12px 12px; - box-shadow:inset 0 0 0 3px #fff} -.ny-win{position:absolute;left:10px;right:10px;top:8px;bottom:10px;overflow:hidden;border-radius:30px 30px 8px 8px; - border:3px solid #fff;background:#FDE7DD;box-shadow:0 3px 8px rgba(160,90,90,.18)} -.ny-win img{position:absolute;top:50%;left:50%;width:148px;height:148px;max-width:none;object-fit:cover; - transform:translate(-50%,-46%);animation:nyPan 9s ease-in-out infinite alternate} -@keyframes nyPan{from{transform:translate(-62%,-46%)}to{transform:translate(-38%,-46%)}} -.ny-win::after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgba(255,255,255,.35),rgba(255,255,255,0) 45%);pointer-events:none} -.ny-360{position:absolute;left:-6px;bottom:10px;font-size:10px;font-weight:900;color:#E0708A;background:#fff; - border-radius:999px;padding:2px 7px;box-shadow:0 2px 6px rgba(224,112,138,.25);animation:nyBob 2.4s ease-in-out infinite} -@keyframes nyBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}} -.ny-stars{display:none} -/* 夜间版 */ -.nursery.is-night .ny-card{color:#F4E3E7;background:linear-gradient(135deg,#3A2F4F 0%,#4B3756 60%,#5E3D5A 100%); - box-shadow:0 8px 22px rgba(58,47,79,.3)} -.nursery.is-night .ny-card::before{background:#2E2540} -.nursery.is-night .ny-name{color:#FFF3F5} -.nursery.is-night .ny-sub{color:#D9C5D0} -.nursery.is-night .ny-sub b{color:#FFB3C3} -.nursery.is-night .ny-tag{background:rgba(255,255,255,.14);color:#FFC6D2} -.nursery.is-night .ny-body{background:#4A3B5C;box-shadow:inset 0 0 0 3px #6A5478} -.nursery.is-night .ny-chim{background:#6A5478} -.nursery.is-night .ny-chim i{background:#B9A9C9} -.nursery.is-night .ny-win{border-color:#FFE2A8;box-shadow:0 0 16px rgba(255,200,120,.55)} -.nursery.is-night .ny-win img{filter:brightness(.85) sepia(.25) saturate(1.2)} -.nursery.is-night .ny-win::after{background:radial-gradient(circle at 50% 30%,rgba(255,210,140,.35),rgba(40,20,60,.25) 75%)} -.nursery.is-night .ny-stars{display:block} -.ny-stars i{position:absolute;width:10px;height:10px;background:#FFE2A8;animation:gpTw 2s ease-in-out infinite; - clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)} -.ny-stars i:first-child{left:-22px;top:-50px} -.ny-stars i:last-child{right:-14px;top:-36px;width:7px;height:7px;animation-delay:.9s} -@media (prefers-reduced-motion:reduce){.ny-win img,.ny-chim i,.ny-360,.ny-stars i{animation:none}.ny-win img{transform:translate(-50%,-46%)}} +/* ============ 3D 婴儿房 · 入口(2026-10-01 二版:走廊尽头的门)============ + 配色取婴儿房自己的奶油粉:主色 #E0708A、按钮 #F9B4C1→#F18DA2、底 #FFF9F3、蜜桃 #F9C9A8、薄荷 #A9DCC7、字 #6B5048。 + 场景坐标都是绝对定位,改尺寸时门(.ny-way)、气泡、木牌、日历四样一起看,别互相压住。 */ +.nursery{padding-top:14px;padding-bottom:16px} +.ny{position:relative;display:block;width:100%;overflow:hidden;border:0;border-radius:22px;padding:14px 16px 12px; + text-align:left;font:inherit;color:#6B5048;background:linear-gradient(180deg,#FFF9F3 0%,#FFEEE9 100%); + box-shadow:0 8px 22px rgba(224,112,138,.15);-webkit-tap-highlight-color:transparent} +.ny-head{display:flex;flex-direction:column;align-items:flex-start} +.ny-eyebrow{font-size:10.5px;font-weight:800;color:#E0708A;background:#fff;border-radius:999px;padding:2px 9px;letter-spacing:.3px} +.ny-title{margin-top:6px;font-size:17px;font-weight:900;color:#5A3E37;letter-spacing:.3px} +.ny-scene{position:relative;display:block;height:192px;margin:6px -16px 0} +.ny-scene::after{content:"";position:absolute;left:0;right:0;bottom:0;height:26px;background:linear-gradient(180deg,#F5DCCB,#F9E6DA)} +/* 门洞:拱形,白色门框;里面是房间,外面盖一扇虚掩的门 */ +.ny-way{position:absolute;left:28px;bottom:26px;width:112px;height:158px;border-radius:56px 56px 3px 3px; + box-shadow:0 0 0 6px #fff,0 6px 16px rgba(160,90,90,.18);z-index:1} +.ny-room{position:absolute;inset:0;overflow:hidden;border-radius:inherit;background:#FCE1E4} +.ny-room svg{position:absolute;left:0;bottom:0;width:100%;height:100%;transform-origin:50% 70%;transition:transform .7s var(--ease)} +.ny-room [data-k]{opacity:0;transform-box:fill-box;transform-origin:50% 100%} +.ny-room [data-k].on{opacity:1} +.ny-room [data-k].new{animation:nyPop 2.6s ease-in-out infinite} +@keyframes nyPop{0%,70%,100%{transform:translateY(0) scale(1)}78%{transform:translateY(-4px) scale(1.06)}86%{transform:translateY(0) scale(.98)}} +.ny-room [data-k="mobile"].on{transform-origin:50% 0;animation:nySwing 4s ease-in-out infinite} +@keyframes nySwing{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}} +.ny-room .r-moon{opacity:0} +.ny-door{position:absolute;inset:0;border-radius:inherit;background:linear-gradient(90deg,#FFF6EF,#FBE6DA); + transform-origin:0 50%;transform:perspective(380px) rotateY(62deg);transition:transform .7s var(--ease); + box-shadow:inset 0 0 0 2px #F3D3C2,6px 0 12px rgba(120,60,60,.18)} +.ny-door::before,.ny-door::after{content:"";position:absolute;left:14px;right:14px;border:2px solid #F3D3C2} +.ny-door::before{top:16px;height:58px;border-radius:40px 40px 6px 6px} +.ny-door::after{bottom:14px;height:52px;border-radius:6px} +.ny-knob{position:absolute;right:11px;top:56%;width:9px;height:9px;border-radius:50%;background:#E3AC72;box-shadow:inset -2px -2px 0 rgba(0,0,0,.08)} +.ny-heart{position:absolute;left:50%;top:38px;width:12px;height:12px;margin-left:-6px;background:#F18DA2; + clip-path:path("M6 11L1.2 6.2A3 3 0 0 1 6 2.4 3 3 0 0 1 10.8 6.2Z")} +/* 门缝里漏出来的暖光,铺在走廊地上 */ +.ny-glow{position:absolute;left:46px;bottom:0;width:150px;height:28px;z-index:0;opacity:.75;transition:opacity .5s; + background:linear-gradient(180deg,rgba(255,214,150,.75),rgba(255,214,150,0));clip-path:polygon(0 0,62% 0,100% 100%,6% 100%)} +.ny-glow{z-index:1} +/* 宝宝从门缝里说话 */ +.ny-bubble{position:absolute;left:116px;top:52px;z-index:3;box-sizing:border-box;max-width:104px;padding:6px 10px;border-radius:12px 12px 12px 3px; + background:#fff;color:#6B5048;font-size:11.5px;font-weight:700;line-height:1.45;box-shadow:0 4px 12px rgba(160,90,90,.18); + transition:opacity .35s,transform .35s} +.ny-bubble.out{opacity:0;transform:translateY(4px)} +/* 木牌 */ +.ny-sign{position:absolute;right:18px;top:16px;z-index:2;transform-origin:50% -14px;animation:nySwing 5s ease-in-out infinite} +.ny-sign::before{content:"";position:absolute;left:22%;right:22%;top:-13px;height:13px;border:1.5px solid #C99A7A;border-bottom:0;border-radius:50% 50% 0 0} +.ny-sign::after{content:"";position:absolute;left:50%;top:-17px;width:6px;height:6px;margin-left:-3px;border-radius:50%;background:#B9876A} +.ny-sign b{display:block;padding:6px 12px;border-radius:8px;background:linear-gradient(180deg,#EBC09A,#DCA683);color:#fff; + font-size:13px;font-weight:900;letter-spacing:.5px;white-space:nowrap;text-shadow:0 1px 0 rgba(150,90,60,.35); + box-shadow:inset 0 0 0 2px rgba(255,255,255,.35),0 3px 6px rgba(150,90,60,.2)} +/* 撕页日历 = 入住倒计时 */ +.ny-cal{position:absolute;right:22px;bottom:34px;z-index:2;width:80px;border-radius:9px;background:#fff;overflow:hidden; + display:flex;flex-direction:column;align-items:center;box-shadow:0 5px 12px rgba(160,90,90,.18);transform:rotate(2deg)} +.ny-cal-top{align-self:stretch;text-align:center;padding:4px 0 3px;font-size:10px;font-weight:800;color:#fff; + background:linear-gradient(135deg,#F9B4C1,#F18DA2);position:relative} +.ny-cal-num{display:flex;align-items:baseline;gap:1px;margin-top:2px;color:#E0708A} +.ny-cal-num b{font-size:28px;font-weight:900;line-height:1.1;font-variant-numeric:tabular-nums} +.ny-cal-num i{font-style:normal;font-size:11px;font-weight:800} +.ny-cal-foot{width:100%;text-align:center;padding:2px 0 5px;font-size:10px;color:#A0857C;border-top:1px dashed #F3D3C2} +/* 进度:9 颗点 */ +.ny-track{display:block;margin-top:10px} +.ny-dots{position:relative;display:flex;justify-content:space-between;align-items:center} +.ny-dots::before{content:"";position:absolute;left:4px;right:4px;top:50%;height:2px;margin-top:-1px;background:#F6DCD3} +.ny-dots::after{content:"";position:absolute;left:4px;top:50%;height:2px;margin-top:-1px;width:var(--p,0%);background:#F18DA2;border-radius:2px} +.ny-dots i{position:relative;z-index:1;width:8px;height:8px;border-radius:50%;background:#fff;box-shadow:inset 0 0 0 2px #F6DCD3} +.ny-dots i.on{background:#F18DA2;box-shadow:none} +.ny-dots i.cur{width:12px;height:12px;box-shadow:0 0 0 3px rgba(241,141,162,.28);animation:nyPulse 1.8s ease-in-out infinite} +@keyframes nyPulse{50%{box-shadow:0 0 0 6px rgba(241,141,162,0)}} +.ny-foot{display:flex;align-items:center;gap:8px;margin-top:9px} +.ny-prog{flex:1;min-width:0;font-size:12px;color:#8A6C63;line-height:1.4} +.ny-prog b{color:#E0708A;font-weight:900} +.ny-cta{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;border-radius:999px;padding:6px 13px;font-size:12.5px;font-weight:800; + color:#fff;background:linear-gradient(135deg,#F9B4C1,#F18DA2);box-shadow:0 4px 10px rgba(224,112,138,.3)} +/* 点击:门推开、房间凑近 */ +.ny.is-opening .ny-door{transform:perspective(380px) rotateY(88deg)} +.ny.is-opening .ny-room svg{transform:scale(1.22)} +.ny.is-opening .ny-glow{opacity:1} +.ny.is-opening .ny-bubble{opacity:0} +/* 已出生:门敞开 */ +.nursery.is-born .ny-door{transform:perspective(380px) rotateY(80deg)} +/* 夜间(北京时间 19:00–6:00) */ +.nursery.is-night .ny{color:#F4E3E7;background:linear-gradient(180deg,#3A2F4F 0%,#4B3756 100%);box-shadow:0 8px 22px rgba(58,47,79,.3)} +.nursery.is-night .ny-scene::after{background:linear-gradient(180deg,#2E2540,#3A2E4A)} +.nursery.is-night .ny-title{color:#FFF3F5} +.nursery.is-night .ny-eyebrow{background:rgba(255,255,255,.14);color:#FFC6D2} +.nursery.is-night .ny-prog{color:#D9C5D0} +.nursery.is-night .ny-prog b{color:#FFB3C3} +.nursery.is-night .ny-way{box-shadow:0 0 0 6px #6A5478,0 0 26px rgba(255,200,120,.45)} +.nursery.is-night .ny-door{background:linear-gradient(90deg,#6A5478,#5A4868);box-shadow:inset 0 0 0 2px #7D6690} +.nursery.is-night .ny-door::before,.nursery.is-night .ny-door::after{border-color:#7D6690} +.nursery.is-night .ny-room .r-wall{fill:#E7C2CF} +.nursery.is-night .ny-room .r-floor{fill:#DDB89E} +.nursery.is-night .ny-room .r-sky{fill:#3E3A66} +.nursery.is-night .ny-room .r-moon{opacity:1} +.nursery.is-night .ny-room .r-glow{opacity:.75} +.nursery.is-night .ny-room svg{filter:sepia(.18) saturate(1.15)} +.nursery.is-night .ny-glow{opacity:1} +.nursery.is-night .ny-dots::before{background:#5E4A70} +.nursery.is-night .ny-dots i{background:#4B3756;box-shadow:inset 0 0 0 2px #6A5478} +.nursery.is-night .ny-dots i.on{background:#F18DA2;box-shadow:none} +@media (prefers-reduced-motion:reduce){.ny-room [data-k],.ny-sign,.ny-dots i.cur{animation:none!important}} /* ============ 孕期小知识(2026-09-30)============ 外壳是公共白色通栏。里面三层: