From 9013a84dea0747f1acf4f31a16a1223f9e5732d6 Mon Sep 17 00:00:00 2001 From: Karlcarlo Date: Thu, 1 Oct 2026 02:21:09 +0000 Subject: [PATCH] =?UTF-8?q?fix(=E9=A6=96=E9=A1=B5):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=A6=88=E5=A6=88=E7=9A=84=E6=A0=91=E6=B4=9E=20/=20=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E9=A1=B5=E4=B8=8D=E5=86=8D=E8=87=AA=E5=8A=A8=E8=B7=B3?= =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E5=BA=94=E7=94=A8=20/=20=E3=80=8C=E6=88=91?= =?UTF-8?q?=E7=9A=84=E3=80=8D=E5=8A=A0=E7=9B=B2=E7=9B=92=E5=8D=A1=E5=86=8C?= =?UTF-8?q?=E5=B8=B8=E9=A9=BB=E5=85=A5=E5=8F=A3=20(v26100103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 妈妈的树洞整块删除(HTML/CSS/JS),需要恢复看 git 历史 - 预览页 /mama-box-preview/ 跳过冷启动恢复上次应用,避免一打开链接就跳到孕检日历 - 「我的」设置与服务里加「我的孕期卡册 N/37」,与首页横幅同一入口;未建档/未到孕周时隐藏 Co-Authored-By: Claude Opus 5.5 --- index.html | 55 +++-------------- js/app.js | 166 ++++----------------------------------------------- mama-box.css | 97 ++---------------------------- 3 files changed, 24 insertions(+), 294 deletions(-) diff --git a/index.html b/index.html index 02c4d49..7bc42f1 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ 兜爸心选 · 孕育陪伴 - + @@ -455,53 +455,7 @@ ⚠️ 唯一的例外是安全提示:内容里出现明显的轻生字眼时,收好之后在卡内显示一行援助热线 (12356 全国心理援助热线),这不是「回应心事」,是兜底,别删。 ⚠️ 纸团飞进树洞的动画靠 Element.animate;不支持的老内核直接跳到「已收好」,不影响收存。 --> - -
-
-

妈妈的树洞

- 只存在你的手机里 -
-
- - - -

说不出口的话,扔进来
每一句,都会变成一颗星

- -
- - -
-
-
- -
-
-
    -

    持续低落、睡不好或有伤害自己的念头,请告诉家人或医生,也可拨打心理援助热线 12356

    -
    + + + diff --git a/js/app.js b/js/app.js index fa71cd2..c29625a 100644 --- a/js/app.js +++ b/js/app.js @@ -3,7 +3,7 @@ (function () { 'use strict'; /* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */ - var VER = '26100102'; + var VER = '26100103'; const $ = (s, c) => (c || document).querySelector(s); const $$ = (s, c) => Array.from((c || document).querySelectorAll(s)); @@ -198,6 +198,9 @@ function resumeLastApp() { try { if (sessionStorage.getItem(RESUME_DONE_KEY)) return; // 同一 web-view 会话只尝试一次 + /* 预览页(/mama-box-preview/)是直接发链接给人看的,不在小程序里冷启动 —— 不恢复上次应用, + 否则一打开就被送去上次进过的应用(2026-10-01 用户反馈:打开预览链接直接跳到孕检日历)。 */ + if (location.pathname.indexOf('/mama-box-preview/') === 0) return; const oid = hashParam('openid'); if (!oid) return; // 无身份不跳(宿主拿不到 openid 时也不会加载本页) /* 先置闸门再请求/再判 norestore: @@ -3287,6 +3290,9 @@ ban.classList.toggle('is-calm', !!calm); ban.classList.remove('hide'); }; + const me = $('#meBoxCard'); + me.classList.toggle('hide', !BB || !BB.enabled || !!BB.notYet || !!BB.needProfile); + if (BB && BB.totalWeeks) $('#meBoxV').textContent = (BB.collected || 0) + '/' + BB.totalWeeks; if (!BB || !BB.enabled || BB.notYet) { ban.classList.add('hide'); return; } if (!$('#bbGift').firstChild) $('#bbGift').innerHTML = giftSVG(); const badge = $('#bbBadge'); @@ -3300,13 +3306,16 @@ else if (op.length) set('还有 ' + op.length + ' 个盲盒没开', '错过的周也能补开 · ' + got, '去补开', true); else set(BB.nextIn ? '下一个盲盒 ' + BB.nextIn + ' 天后到' : '本周盲盒已开启', got + (BB.flash ? ' · 闪卡 ' + BB.flash + ' 张' : ''), '看卡册', false, true); } - $('#bbBanner').addEventListener('click', () => { + /* 盲盒入口:首页横幅 + 「我的」页卡册行(#meBoxCard)走同一条路 */ + function openBoxEntry() { if (!BB) return; if (BB.needProfile) { openModal('modalProfile'); return; } bbSel = null; renderBox(); openPanel('detailBox'); - }); + } + $('#bbBanner').addEventListener('click', openBoxEntry); + $('#meBoxCard').addEventListener('click', openBoxEntry); function renderBox() { if (!BB || BB.needProfile) return; const op = BB.openable || []; @@ -3571,157 +3580,6 @@ io.observe(g); } - /* ================= 妈妈的树洞 · 星夜版(2026-09-30 首版,2026-10-01 重做 UI) ================= - 用户选定:心事**只存在本机**(localStorage,不上传),扔进去后只有「已收好」动画、不回应。 - 唯一例外:出现明显轻生字眼时,在「已收好」下面多一行援助热线 —— 兜底,不是回应。 - 星夜版:天幕上每颗亮星 = 一条心事(位置由时间戳哈希定,刷新不跳);扔进去时字逐个被吸进树洞漩涡, - 洞口爆亮,一颗新星从洞口射上天空。 */ - (function treeHole() { - const KEY = 'mmbox.treehole.v1', MAX = 200, SHOW = 40; - const ta = $('#thText'), send = $('#thSend'), list = $('#thList'), done = $('#thDone'); - const night = $('#thNight'), sky = $('#thSky'); - if (!ta || !send) return; - const SOS = /想死|不想活|自杀|轻生|结束生命|活不下去|去死|割腕|跳楼/; - const RM = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches; - const load = () => { try { const a = JSON.parse(localStorage.getItem(KEY) || '[]'); return Array.isArray(a) ? a : []; } catch (e) { return []; } }; - const save = a => { try { localStorage.setItem(KEY, JSON.stringify(a.slice(0, MAX))); return true; } catch (e) { return false; } }; - const pad = n => (n < 10 ? '0' : '') + n; - const when = ts => { const d = new Date(ts); return (d.getMonth() + 1) + '月' + d.getDate() + '日 ' + pad(d.getHours()) + ':' + pad(d.getMinutes()); }; - /* 确定性伪随机:同一个种子永远落在同一个位置 */ - const rnd = seed => { let x = (seed % 2147483647) || 1; return () => (x = x * 16807 % 2147483647) / 2147483647; }; - /* 星星避开右下角的树、底部输入条和左上角的月亮:x 4~66%,y 6~58% */ - const starPos = seed => { const r = rnd(seed); r(); const x = 4 + r() * 62, y = 6 + r() * 52; return [x < 20 && y < 30 ? x + 22 : x, y]; }; // 左上角让给月亮 - function count() { $('#thCount').textContent = load().length; } - function paintSky() { - if (!sky) return; - sky.textContent = ''; - const bg = rnd(20261001); - for (let i = 0; i < 26; i++) { // 背景小星,固定一套 - const s = document.createElement('i'); - s.style.left = (bg() * 100) + '%'; s.style.top = (bg() * 70) + '%'; - s.style.setProperty('--o', (0.25 + bg() * 0.5).toFixed(2)); - s.style.animationDelay = (bg() * 3.2).toFixed(2) + 's'; - sky.appendChild(s); - } - load().slice(0, SHOW).forEach(e => addStar(e.t, false)); - } - function addStar(t, fresh) { - const p = starPos(t), s = document.createElement('i'); - s.className = 'me' + (fresh ? ' is-new' : ''); - s.style.left = p[0] + '%'; s.style.top = p[1] + '%'; - s.style.animationDelay = fresh ? '' : ((t % 3200) / 1000).toFixed(2) + 's'; - sky.appendChild(s); - return s; - } - function renderList() { - const a = load(); - list.textContent = ''; - if (!a.length) { - const li = document.createElement('li'); li.className = 'th-empty'; li.textContent = '天上还没有你的星星'; - list.appendChild(li); return; - } - a.forEach(e => { - const li = document.createElement('li'); - const t = document.createElement('time'); t.textContent = when(e.t); - const p = document.createElement('p'); p.textContent = e.x; - const del = document.createElement('button'); del.className = 'th-del'; del.type = 'button'; - del.setAttribute('aria-label', '删除这条'); del.textContent = '×'; - del.addEventListener('click', () => { - if (!window.confirm('删掉这条心事?删了就找不回来了')) return; - save(load().filter(x => x.t !== e.t)); renderList(); count(); paintSky(); - }); - li.appendChild(t); li.appendChild(p); li.appendChild(del); - list.appendChild(li); - }); - } - function showDone(sos, n) { - done.classList.toggle('is-sos', !!sos); - done.textContent = '已收好,化成了第 ' + n + ' 颗星'; - if (sos) { - const s = document.createElement('div'); s.className = 'th-sos'; - s.textContent = '如果你现在很难受,请告诉身边的人,或拨打 12356 心理援助热线,有人愿意听你说。'; - done.appendChild(s); - } - done.classList.add('is-on'); - clearTimeout(showDone._t); - if (!sos) showDone._t = setTimeout(() => done.classList.remove('is-on'), 3200); - } - const center = el => { const r = el.getBoundingClientRect(); return [r.left + r.width / 2, r.top + r.height / 2]; }; - /* ① 字一个个从输入条飞起,绕一道弧被吸进漩涡 */ - function suck(text, cb) { - const hole = $('#thHole'); - if (RM || !hole || !document.body.animate) { cb(); return; } - const chars = Array.from(text.replace(/\s+/g, '')).slice(0, 14); - const a = ta.getBoundingClientRect(), h = center(hole); - let left = chars.length; - if (!left) { cb(); return; } - chars.forEach((c, i) => { - const el = document.createElement('span'); - el.className = 'th-ch'; el.textContent = c; - document.body.appendChild(el); - const x0 = a.left + 6 + Math.min(i * 14, a.width - 20), y0 = a.top + 4; - const mx = (x0 + h[0]) / 2 + (i % 2 ? 24 : -18), my = Math.min(y0, h[1]) - 40 - (i % 3) * 14; - const anim = el.animate([ - { transform: 'translate(' + x0 + 'px,' + y0 + 'px) scale(1) rotate(0)', opacity: 0 }, - { transform: 'translate(' + x0 + 'px,' + (y0 - 10) + 'px) scale(1.1) rotate(0)', opacity: 1, offset: .12 }, - { transform: 'translate(' + mx + 'px,' + my + 'px) scale(.8) rotate(' + (i % 2 ? 160 : -160) + 'deg)', opacity: 1, offset: .55 }, - { transform: 'translate(' + (h[0] - 6) + 'px,' + (h[1] - 8) + 'px) scale(.1) rotate(' + (i % 2 ? 540 : -540) + 'deg)', opacity: 0 } - ], { duration: 900, delay: i * 55, easing: 'cubic-bezier(.5,0,.3,1)', fill: 'forwards' }); - anim.onfinish = () => { el.remove(); if (--left === 0) cb(); }; - }); - } - /* ② 洞口爆亮 → 新星从洞口划一道弧射上天空 */ - function shoot(t, cb) { - const tree = $('#thTree'), hole = $('#thHole'); - if (tree) { tree.classList.remove('is-eat'); void tree.getBoundingClientRect(); tree.classList.add('is-eat'); setTimeout(() => tree.classList.remove('is-eat'), 1000); } - const star = addStar(t, true); - if (RM || !hole || !document.body.animate) { cb(); return; } - star.style.visibility = 'hidden'; - const h = center(hole), d = center(star); - const el = document.createElement('i'); el.className = 'th-shoot'; - document.body.appendChild(el); - const mx = (h[0] + d[0]) / 2 + 30, my = Math.min(h[1], d[1]) - 30; - el.animate([ - { transform: 'translate(' + h[0] + 'px,' + h[1] + 'px) scale(.4)', opacity: 0 }, - { transform: 'translate(' + h[0] + 'px,' + (h[1] - 6) + 'px) scale(1.6)', opacity: 1, offset: .15 }, - { transform: 'translate(' + mx + 'px,' + my + 'px) scale(1)', opacity: 1, offset: .6 }, - { transform: 'translate(' + d[0] + 'px,' + d[1] + 'px) scale(1.2)', opacity: 1 } - ], { duration: 900, delay: 250, easing: 'cubic-bezier(.3,.1,.3,1)', fill: 'forwards' }).onfinish = () => { - el.remove(); - star.style.visibility = ''; - star.classList.remove('is-new'); void star.offsetWidth; star.classList.add('is-new'); - cb(); - }; - } - const sync = () => { send.disabled = !ta.value.trim(); }; - ta.addEventListener('input', sync); - ta.addEventListener('focus', () => night && night.classList.add('is-typing')); - ta.addEventListener('blur', () => { if (night && !ta.value.trim()) night.classList.remove('is-typing'); }); - let busy = false; - send.addEventListener('mousedown', e => e.preventDefault()); // 点按钮时别先 blur 收起输入框,免得按钮跳位 - send.addEventListener('click', () => { - const x = ta.value.trim(); - if (!x || busy) return; - const t = Date.now(); - const a = load(); a.unshift({ t: t, x: x }); - if (!save(a)) { toast('手机存储空间不足,没能收好'); return; } - busy = true; haptic(); - suck(x, () => shoot(t, () => { - busy = false; - showDone(SOS.test(x), load().length); - count(); - if (!list.classList.contains('hide')) renderList(); - })); - ta.value = ''; sync(); ta.blur(); - if (night) night.classList.remove('is-typing'); - }); - $('#thMine').addEventListener('click', () => { - const open = list.classList.toggle('hide') === false; - if (open) renderList(); - }); - sync(); count(); paintSky(); - })(); - /* 拉卡片数据(与其它远程数据一起打;失败静默,卡上保留现有值) */ /* 预览环境专用的一组示例数据(2026-09-30 用户要求:五张工具卡填一组示例数据,看排版效果)。 ⚠️ 只在 /mama-box-preview/ 路径下生效,正式首页(/mama-box/)永远走不到这里 —— diff --git a/mama-box.css b/mama-box.css index 285feac..6425bf1 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,.tree-hole,.shelf{ +.tool-dock,.game-promo,.preg-tips,.today-line,.shelf{ 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,.tree-hole,.shelf{margin-top:16px} +.tool-dock,.game-promo,.preg-tips,.today-line,.shelf{margin-top:16px} /* ===== 后两块的暖色渐变底(本批新增)===== 用户原话:「在那个宝宝的今日脚印那块,稍微给背景它加一点渐变」 @@ -618,95 +618,9 @@ a.skip:focus{left:16px;top:16px} .pt-grid.is-shown .pt-card:nth-child(4){transition-delay:.24s} .pt-foot{margin-top:9px;font-size:11px;color:var(--muted);text-align:center} -/* ============ 妈妈的树洞 · 星夜版(2026-10-01 重做)============ - 外层仍是统一的白块;里面一块深夜蓝小天幕 .th-night(高约 190px,比旧版矮)。 - 天幕层次(下→上):渐变夜空 → 月亮光晕 → 星星(#thSky,每颗亮星 = 一条心事)→ 萤火虫 → 剪影树 + 漩涡树洞 → 输入条。 - 动效:星星各自眨眼;萤火虫游走;树冠轻晃;树洞漩涡一直慢转、光晕呼吸; - 扔进去时字逐个被吸进漩涡(JS),洞口爆亮(.is-eat),新星从洞口射上天(JS)。 */ -.th-head{display:flex;align-items:center;gap:8px} -.th-title{font-size:16.5px;font-weight:800;letter-spacing:-.2px} -.th-lock{margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600; - color:#6C6FA8;background:#EFEFFB;border-radius:999px;padding:3px 9px} -.th-night{position:relative;overflow:hidden;margin-top:10px;height:188px;border-radius:22px;isolation:isolate; - background:radial-gradient(120% 90% at 85% 100%,#4B3F7E 0%,rgba(75,63,126,0) 60%), - linear-gradient(170deg,#141632 0%,#1E2150 48%,#36306A 100%); - box-shadow:inset 0 0 0 1px rgba(255,255,255,.06),0 10px 24px rgba(40,36,90,.22)} -.th-sky{position:absolute;inset:0;z-index:0} -.th-sky i{position:absolute;width:2px;height:2px;border-radius:50%;background:#fff;opacity:.5; - animation:thTw 3.2s ease-in-out infinite} -.th-sky i.me{width:5px;height:5px;background:#FFF1C9;opacity:1; - box-shadow:0 0 6px 2px rgba(255,214,140,.75),0 0 14px 4px rgba(255,190,120,.25)} -.th-sky i.me::before,.th-sky i.me::after{content:"";position:absolute;left:50%;top:50%;background:rgba(255,236,190,.7); - transform:translate(-50%,-50%);border-radius:2px} -.th-sky i.me::before{width:13px;height:1px}.th-sky i.me::after{width:1px;height:13px} -.th-sky i.me.is-new{animation:thBorn 1.4s var(--ease) both,thTw 3.2s 1.4s ease-in-out infinite} -@keyframes thTw{0%,100%{opacity:var(--o,.55);transform:scale(1)}50%{opacity:.15;transform:scale(.7)}} -@keyframes thBorn{0%{transform:scale(3.2);opacity:1;filter:brightness(2)}100%{transform:scale(1);filter:none}} -.th-moon{position:absolute;z-index:0;left:18px;top:14px;width:26px;height:26px;border-radius:50%; - background:radial-gradient(circle at 35% 35%,#FFF7DD,#F6DFA8);box-shadow:0 0 18px 6px rgba(255,226,160,.22)} -.th-moon::after{content:"";position:absolute;left:8px;top:-3px;width:24px;height:24px;border-radius:50%;background:#18193A} -.th-fly{position:absolute;z-index:1;width:4px;height:4px;border-radius:50%;background:#FFE7A0; - box-shadow:0 0 8px 3px rgba(255,220,120,.6);opacity:0;animation:thFly 7s ease-in-out infinite} -.th-fly.f1{left:52%;top:62%}.th-fly.f2{left:70%;top:40%;animation-delay:2.4s;animation-duration:8s} -.th-fly.f3{left:36%;top:46%;animation-delay:4.6s;animation-duration:9s} -@keyframes thFly{0%{opacity:0;transform:translate(0,0)}20%{opacity:.95}50%{transform:translate(16px,-14px)} - 80%{opacity:.8}100%{opacity:0;transform:translate(-8px,-30px)}} -.th-lead{position:absolute;z-index:2;left:18px;top:52px;margin:0;font-size:13px;line-height:1.7;font-weight:700;color:#F3F0FF; - text-shadow:0 1px 8px rgba(10,10,40,.5)} -.th-lead em{font-style:normal;font-weight:500;font-size:11.5px;color:#BDB8E8} -.th-tree{position:absolute;z-index:1;right:-6px;bottom:44px;width:118px;height:128px;overflow:visible} -.th-crown{transform-origin:60px 74px;animation:thSway 6s ease-in-out infinite} -@keyframes thSway{0%,100%{transform:rotate(-1.4deg)}50%{transform:rotate(1.4deg)}} -.th-halo{transform-origin:60px 102px;animation:thBreath 3s ease-in-out infinite} -@keyframes thBreath{0%,100%{opacity:.55;transform:scale(.9)}50%{opacity:1;transform:scale(1.12)}} -.th-vortex{transform-origin:60px 102px;animation:thSpin 4s linear infinite} -@keyframes thSpin{to{transform:rotate(360deg)}} -.th-tree.is-eat .th-halo{animation:thBurst .9s ease-out} -.th-tree.is-eat .th-vortex{animation-duration:.5s} -.th-tree.is-eat .th-crown{animation:thShake .7s ease-in-out} -@keyframes thBurst{0%{opacity:1;transform:scale(1)}35%{opacity:1;transform:scale(2.3)}100%{opacity:.55;transform:scale(.9)}} -@keyframes thShake{0%,100%{transform:rotate(0)}25%{transform:rotate(-4deg)}60%{transform:rotate(3deg)}} -.th-form{position:absolute;z-index:3;left:10px;right:10px;bottom:10px;display:flex;align-items:flex-end;gap:8px; - padding:5px 5px 5px 14px;border-radius:20px;background:rgba(255,255,255,.1); - -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)} -.th-form textarea{flex:1;min-width:0;display:block;border:0;outline:0;resize:none;background:transparent; - font:inherit;font-size:13.5px;line-height:20px;height:20px;max-height:60px;margin:6px 0;color:#fff;transition:height .25s var(--ease)} -.th-form textarea::placeholder{color:rgba(230,226,255,.55)} -.th-night.is-typing .th-form textarea{height:60px} -.th-night.is-typing .th-lead{opacity:0;transform:translateY(-6px)} -.th-lead{transition:opacity .25s,transform .25s} -.th-send{flex:0 0 auto;width:34px;height:34px;border:0;border-radius:50%;display:grid;place-items:center;color:#3A2A12; - background:linear-gradient(135deg,#FFE3A1,#FFAE6E);box-shadow:0 0 14px rgba(255,190,110,.55);transition:transform .2s,opacity .2s} -.th-send:disabled{opacity:.35;box-shadow:none} -.th-send:not(:disabled){animation:thPing 2s ease-in-out infinite} -@keyframes thPing{0%,100%{box-shadow:0 0 10px rgba(255,190,110,.45)}50%{box-shadow:0 0 20px 3px rgba(255,190,110,.8)}} -.th-send:active{transform:scale(.9)} -.th-row{display:flex;align-items:center;gap:8px;margin-top:9px;min-height:20px} -.th-mine{border:0;background:none;padding:0;font:inherit;font-size:12px;font-weight:600;color:#6C6FA8} -.th-mine b{font-weight:800;color:#4B3F9E} -.th-done{margin-left:auto;font-size:12px;font-weight:700;color:#7A6BD0;opacity:0;transform:translateY(4px);transition:opacity .3s,transform .3s} -.th-done.is-on{opacity:1;transform:none} -.th-done.is-sos{margin-left:0} -.th-done .th-sos{font-weight:500;color:var(--ink-2);margin-top:2px} -.th-row{flex-wrap:wrap}.th-done.is-sos{flex-basis:100%} -.th-ch{position:fixed;z-index:60;left:0;top:0;pointer-events:none;font-size:14px;font-weight:700;color:#FFF1C9; - text-shadow:0 0 8px rgba(255,200,120,.9)} -.th-shoot{position:fixed;z-index:60;left:0;top:0;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;pointer-events:none; - background:#FFF4D2;box-shadow:0 0 10px 4px rgba(255,210,130,.8)} -.th-list{list-style:none;margin:8px 0 0;padding:0} -.th-list.hide{display:none} -.th-list li{position:relative;background:#F6F5FD;border-radius:14px;padding:9px 34px 9px 30px;margin-top:8px} -.th-list li::before{content:"";position:absolute;left:12px;top:15px;width:6px;height:6px;border-radius:50%; - background:#FFC978;box-shadow:0 0 6px 2px rgba(255,200,120,.6)} -.th-list time{display:block;font-size:11px;color:#9A97C2} -.th-list p{margin:3px 0 0;font-size:13px;line-height:1.6;color:var(--ink-2);white-space:pre-wrap;word-break:break-all} -.th-list .th-del{position:absolute;right:8px;top:8px;border:0;background:none;padding:2px 4px;font-size:15px;color:#B8B6D6} -.th-list .th-empty{text-align:center;color:var(--muted);font-size:12px;background:none;padding:6px} -.th-list .th-empty::before{display:none} -.th-help{margin:8px 0 0;font-size:10.5px;line-height:1.55;color:var(--muted)} -.th-help a{color:#6C6FA8;font-weight:700} + @media (prefers-reduced-motion:reduce){ - .pt-float,.pt-day.is-today i,.th-crown,.th-halo,.th-vortex,.th-fly,.th-sky i,.th-send{animation:none!important} + .pt-float,.pt-day.is-today i{animation:none!important} .pt-grid .pt-card{opacity:1;transform:none;transition:none} } @@ -2768,5 +2682,4 @@ a.skip:focus{left:16px;top:16px} .pt-foot{margin-top:6px;font-size:10.5px} .pt-card.is-open p{-webkit-line-clamp:unset;display:block} .pt-grid{scroll-padding:0 26px} -.th-tree{bottom:50px} -.th-crown{filter:drop-shadow(0 -1px 0 rgba(170,160,255,.35)) drop-shadow(0 0 10px rgba(120,110,230,.25))} +.li.hide{display:none}