/* Shu pre-Snow chat appearance, retained independently of Snow receipts. */
.row.ai .bubble,.row.human .bubble{background:transparent;color:var(--text);border:0;box-shadow:none;max-width:min(86vw,680px);padding-left:2px;padding-right:2px;}

/* 白天五格 v3 —— 内联版。教训:vendor 文件在 SW 里是缓存优先,更新要两次重开才到;
   index.html 是网络优先,一次就到。所以白天格的 CSS 全部住进这里,不求外文件。
   每格 = 浓纱(::before 盖底色) + 天气线(屏幕上沿细色带) + 一样静态花活(::after,零动画)。 */
body[data-mood="qing"] .chat-wallpaper::before,
body[data-mood="yue"] .chat-wallpaper::before,
body[data-mood="zhuan"] .chat-wallpaper::before,
body[data-mood="yi"] .chat-wallpaper::before,
body[data-mood="jing"] .chat-wallpaper::before,
body[data-mood="qing"] .chat-wallpaper::after,
body[data-mood="yue"] .chat-wallpaper::after,
body[data-mood="zhuan"] .chat-wallpaper::after,
body[data-mood="yi"] .chat-wallpaper::after,
body[data-mood="jing"] .chat-wallpaper::after{
  content:""; position:absolute; inset:0; pointer-events:none;
}
/* —— 晴·香槟金 v5:轻纱 + 顶上一团晨光晕。
   v3 的教训(2026-08-17 翎儿实拍否决):浓金纱displays土黄;天气线+描边圈像贴了条膏药。
   线和框全下岗;金要淡、要亮、要洋气——香槟那一路,不是芥末那一路。 —— */
/* 晴 v6「晨光绢·燕麦版」(08-18 傍晚,她拍板粉色定稿后点名平移方子):
   顶部向白渐融接系统白条 + 左上不对称光池 + 右下轻沉 + 真 PNG 颗粒(燕麦褐,
   浓度直接用她验收过的半档;同种子同布局,全家同一张纸各染各的色)。 */
body[data-mood="qing"] .chat-wallpaper::before{
  background:
    url("assets/grain-oat.png") top left / 120px 120px repeat,   /* 纸绒定妆(三试后她拍板「用第一种」;织纹/纤维贴片留在assets备着) */
    linear-gradient(180deg, rgba(255,254,250,.85), rgba(255,254,250,0) 30%),   /* v6.2 顶端再提半档,近白不全白(她点单) */
    radial-gradient(95vw 34vh at 24% -4%, rgba(255,255,255,.5), transparent 68%),
    radial-gradient(130% 85% at 82% 100%, rgba(150,124,70,.07), transparent 62%),
    linear-gradient(180deg, rgba(251,247,238,.50), rgba(244,235,212,.36) 55%, rgba(251,248,241,.48));
}
/* v6.1(08-18 晚,她两图对比抓出 v6 比纯色版还深):绢底退回 v5 的浅度,右下沉也减半——
   铁律:晴的底色以 v5 为上限,只准更淡,不准更深;纱一薄,底下的水波光自己回来。 */
/* 晴的底纹 v3 毛茸蒲公英(v2 被评「太抽象」):绒球=18根伞骨,每根骨梢一把三线小绒扇——
   这把扇就是「毛茸茸」本体;飘的种子同构造(绒扇+梗+籽)。全静态,燕麦金族。 */
html body[data-mood="qing"] .chat-wallpaper::after{
  background:
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 230 190'><g stroke='%23a89468' stroke-opacity='.3' stroke-width='2' fill='none' stroke-linecap='round'><path d='M150 66 C 153 110, 148 150, 147 192'/><path d='M84 114 C 83 140, 85 166, 84 192'/></g><g stroke='%23a89468' stroke-opacity='.3' stroke-width='.8' fill='none' stroke-linecap='round'><path d='M150 62L163.4 63.8M150 62L162.0 68.2M150 62L159.1 71.9M150 62L155.2 74.5M150 62L150.6 75.5M150 62L146.0 74.9M150 62L141.8 72.7M150 62L138.6 69.3M150 62L136.8 64.9M150 62L136.6 60.2M150 62L138.0 55.8M150 62L140.9 52.1M150 62L144.8 49.5M150 62L149.4 48.5M150 62L154.0 49.1M150 62L158.2 51.3M150 62L161.4 54.7M150 62L163.2 59.1M84 110L93.9 111.3M84 110L92.7 115.0M84 110L90.1 117.9M84 110L86.6 119.7M84 110L82.7 119.9M84 110L79.0 118.7M84 110L76.1 116.1M84 110L74.3 112.6M84 110L74.1 108.7M84 110L75.3 105.0M84 110L77.9 102.1M84 110L81.4 100.3M84 110L85.3 100.1M84 110L89.0 101.3M84 110L91.9 103.9M84 110L93.7 107.4'/></g><g stroke='%23b7a67e' stroke-opacity='.26' stroke-width='.7' fill='none' stroke-linecap='round'><path d='M163.4 63.8L166.7 63.2M163.4 63.8L166.8 64.2M163.4 63.8L166.5 65.1M162.0 68.2L165.3 68.9M162.0 68.2L165.0 69.8M162.0 68.2L164.4 70.6M159.1 71.9L162.0 73.7M159.1 71.9L161.4 74.4M159.1 71.9L160.6 75.0M155.2 74.5L157.3 77.1M155.2 74.5L156.5 77.6M155.2 74.5L155.6 77.8M150.6 75.5L151.7 78.7M150.6 75.5L150.8 78.9M150.6 75.5L149.8 78.8M146.0 74.9L145.9 78.3M146.0 74.9L144.9 78.1M146.0 74.9L144.1 77.7M141.8 72.7L140.5 75.9M141.8 72.7L139.7 75.4M141.8 72.7L139.1 74.7M138.6 69.3L136.4 71.8M138.6 69.3L135.8 71.1M138.6 69.3L135.4 70.2M136.8 64.9L133.8 66.6M136.8 64.9L133.5 65.7M136.8 64.9L133.4 64.7M136.6 60.2L133.3 60.8M136.6 60.2L133.2 59.8M136.6 60.2L133.5 58.9M138.0 55.8L134.7 55.1M138.0 55.8L135.0 54.2M138.0 55.8L135.6 53.4M140.9 52.1L138.0 50.3M140.9 52.1L138.6 49.6M140.9 52.1L139.4 49.0M144.8 49.5L142.7 46.9M144.8 49.5L143.5 46.4M144.8 49.5L144.4 46.2M149.4 48.5L148.3 45.3M149.4 48.5L149.2 45.1M149.4 48.5L150.2 45.2M154.0 49.1L154.1 45.7M154.0 49.1L155.1 45.9M154.0 49.1L155.9 46.3M158.2 51.3L159.5 48.1M158.2 51.3L160.3 48.6M158.2 51.3L160.9 49.3M161.4 54.7L163.6 52.2M161.4 54.7L164.2 52.9M161.4 54.7L164.6 53.8M163.2 59.1L166.2 57.4M163.2 59.1L166.5 58.3M163.2 59.1L166.6 59.3M93.9 111.3L96.7 110.9M93.9 111.3L96.7 111.7M93.9 111.3L96.5 112.4M92.7 115.0L95.4 115.7M92.7 115.0L95.1 116.4M92.7 115.0L94.6 117.0M90.1 117.9L92.3 119.6M90.1 117.9L91.8 120.1M90.1 117.9L91.1 120.5M86.6 119.7L88.0 122.1M86.6 119.7L87.3 122.4M86.6 119.7L86.6 122.5M82.7 119.9L83.1 122.7M82.7 119.9L82.3 122.7M82.7 119.9L81.6 122.5M79.0 118.7L78.3 121.4M79.0 118.7L77.6 121.1M79.0 118.7L77.0 120.6M76.1 116.1L74.4 118.3M76.1 116.1L73.9 117.8M76.1 116.1L73.5 117.1M74.3 112.6L71.9 114.0M74.3 112.6L71.6 113.3M74.3 112.6L71.5 112.6M74.1 108.7L71.3 109.1M74.1 108.7L71.3 108.3M74.1 108.7L71.5 107.6M75.3 105.0L72.6 104.3M75.3 105.0L72.9 103.6M75.3 105.0L73.4 103.0M77.9 102.1L75.7 100.4M77.9 102.1L76.2 99.9M77.9 102.1L76.9 99.5M81.4 100.3L80.0 97.9M81.4 100.3L80.7 97.6M81.4 100.3L81.4 97.5M85.3 100.1L84.9 97.3M85.3 100.1L85.7 97.3M85.3 100.1L86.4 97.5M89.0 101.3L89.7 98.6M89.0 101.3L90.4 98.9M89.0 101.3L91.0 99.4M91.9 103.9L93.6 101.7M91.9 103.9L94.1 102.2M91.9 103.9L94.5 102.9M93.7 107.4L96.1 106.0M93.7 107.4L96.4 106.7M93.7 107.4L96.5 107.4'/></g><g stroke='%23a89468' stroke-opacity='.3' stroke-width='.9' fill='none' stroke-linecap='round'><path d='M55 32L55 26M55 26L52.1 23.9M55 26L53.3 22.8M55 26L55.0 22.4M55 26L56.7 22.8M55 26L57.9 23.9M108 16L108 11M108 11L105.4 9.2M108 11L106.5 8.2M108 11L108.0 7.8M108 11L109.5 8.2M108 11L110.6 9.2'/></g><g fill='%23b7a67e' fill-opacity='.4'><circle cx='150' cy='62' r='2.6'/><circle cx='84' cy='110' r='2.1'/><circle cx='55' cy='32' r='1.3'/><circle cx='108' cy='16' r='1.2'/></g></svg>") right -6px bottom calc(var(--composer-zone, 96px) - 24px) / 155px auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 150'><g stroke='%23a89468' stroke-opacity='.28' stroke-width='1.8' fill='none' stroke-linecap='round'><path d='M55 62 C 56 95, 54 120, 55 152'/></g><g stroke='%23a89468' stroke-opacity='.3' stroke-width='.8' fill='none' stroke-linecap='round'><path d='M55 58L66.4 59.5M55 58L65.0 63.7M55 58L62.0 67.1M55 58L58.0 69.1M55 58L53.5 69.4M55 58L49.3 68.0M55 58L45.9 65.0M55 58L43.9 61.0M55 58L43.6 56.5M55 58L45.0 52.3M55 58L48.0 48.9M55 58L52.0 46.9M55 58L56.5 46.6M55 58L60.7 48.0M55 58L64.1 51.0M55 58L66.1 55.0'/></g><g stroke='%23b7a67e' stroke-opacity='.26' stroke-width='.65' fill='none' stroke-linecap='round'><path d='M66.4 59.5L69.4 59.0M66.4 59.5L69.4 59.9M66.4 59.5L69.2 60.7M65.0 63.7L67.9 64.5M65.0 63.7L67.6 65.2M65.0 63.7L67.1 65.9M62.0 67.1L64.4 68.9M62.0 67.1L63.8 69.5M62.0 67.1L63.1 69.9M58.0 69.1L59.5 71.7M58.0 69.1L58.8 72.0M58.0 69.1L57.9 72.1M53.5 69.4L54.0 72.4M53.5 69.4L53.1 72.4M53.5 69.4L52.3 72.2M49.3 68.0L48.5 70.9M49.3 68.0L47.8 70.6M49.3 68.0L47.1 70.1M45.9 65.0L44.1 67.4M45.9 65.0L43.5 66.8M45.9 65.0L43.1 66.1M43.9 61.0L41.3 62.5M43.9 61.0L41.0 61.8M43.9 61.0L40.9 60.9M43.6 56.5L40.6 57.0M43.6 56.5L40.6 56.1M43.6 56.5L40.8 55.3M45.0 52.3L42.1 51.5M45.0 52.3L42.4 50.8M45.0 52.3L42.9 50.1M48.0 48.9L45.6 47.1M48.0 48.9L46.2 46.5M48.0 48.9L46.9 46.1M52.0 46.9L50.5 44.3M52.0 46.9L51.2 44.0M52.0 46.9L52.1 43.9M56.5 46.6L56.0 43.6M56.5 46.6L56.9 43.6M56.5 46.6L57.7 43.8M60.7 48.0L61.5 45.1M60.7 48.0L62.2 45.4M60.7 48.0L62.9 45.9M64.1 51.0L65.9 48.6M64.1 51.0L66.5 49.2M64.1 51.0L66.9 49.9M66.1 55.0L68.7 53.5M66.1 55.0L69.0 54.2M66.1 55.0L69.1 55.1'/></g><g stroke='%23a89468' stroke-opacity='.3' stroke-width='.9' fill='none' stroke-linecap='round'><path d='M92 24L92 19M92 19L89.4 17.2M92 19L90.5 16.2M92 19L92.0 15.8M92 19L93.5 16.2M92 19L94.6 17.2'/></g><g fill='%23b7a67e' fill-opacity='.38'><circle cx='55' cy='58' r='2.2'/><circle cx='92' cy='24' r='1.2'/></g></svg>") left 5vw bottom calc(var(--composer-zone, 96px) + 30px) / 80px auto no-repeat !important;
}
/* 缝合线:情绪激活时 .wall 整个让位(background transparent!important),
   body 底色从头顶漏出来——那就是「白边长缝」。
   注意:后文 762 行有 body[data-mood]{background-color:var(--bg)} 同权重且靠后,
   会盖掉平级的染色——所以这里用 html body 抬一级权重,别改回去。
   色值配 v6 莫兰迪档(08-18 晨,她点单「豆沙粉+低饱和黄」):在 v5 香槟/淡粉基础上
   降一成饱和、掺一点灰,亮度不动——豆沙不是深粉,燕麦不是芥末。改前值在 pre-morandi 快照里。 */
html body[data-mood="qing"]{ background-color:#fcfaf5; }   /* v6.2 顶部接白再提半档,近白不全白 */
html body[data-mood="yue"]{ background-color:#fdf7f7; }   /* v9 顶部接白:缝色跟着变近白,和系统白条自然过渡(她的方子) */
html body[data-mood="zhuan"]{ background-color:#f0f5f7; }   /* v6.1 压灰 */
html body[data-mood="yi"]{ background-color:#f4f1f8; }   /* v6.1 压灰 */
html body[data-mood="jing"]{ background-color:#f0f4f8; }   /* v6.1 压灰 */
body[data-mood="qing"] .topbar{ border-bottom-color: rgba(172,146,88,.22); }
body[data-mood="yue"] .topbar{ border-bottom-color: rgba(191,120,131,.26); }
body[data-mood="zhuan"] .topbar{ border-bottom-color: rgba(46,111,131,.25); }
body[data-mood="yi"] .topbar{ border-bottom-color: rgba(122,92,192,.25); }
body[data-mood="jing"] .topbar{ border-bottom-color: rgba(70,100,143,.25); }
/* —— 悦·蜜橙:纱 + 橙天气线;花活 = 四角花纹(双层圆环瓣) —— */
/* 悦 v2:蜜色被否(2026-08-17 夜,「腻」),改淡粉——她点名:很淡的粉,浅色系。
   花纹同步放大加实:四角双层圆环画粗一圈,顶角那对有一半在状态条后面,画大才露得出来。 */
/* 悦 v9「晨光绢」(08-18 午后,方子是她出的:①对称四角收深呆板,红皮肤的高级在「不规则」——
   左上一块浅、往別处渐深;②咱家粉已是最深档,渐变只能往浅里做;③顶部做浅还能顺手把
   「顶线」接进系统白条,一举两得。照抄:顶部向白渐融+左上不对称光池+右下轻沉+颗粒提到8.5%。
   金属质感浅底做不出(那要深色高对比),浅底的路是「晨光照在绢上」。 */
body[data-mood="yue"] .chat-wallpaper::before{
  /* 纸纹改真 PNG 贴片(第4版才破案:iOS 不渲染「背景图 SVG 里的 feTurbulence 滤镜」,
     前三版颗粒在她手机上全是空气——Chrome 里查不出来,病历记档) */
  background:
    url("assets/grain-rose.png?v=2") top left / 120px 120px repeat,
    linear-gradient(180deg, rgba(255,253,253,.72), rgba(255,253,253,0) 26%),
    radial-gradient(95vw 34vh at 24% -4%, rgba(255,255,255,.5), transparent 68%),
    radial-gradient(130% 85% at 82% 100%, rgba(158,104,112,.11), transparent 62%),
    linear-gradient(180deg, rgba(247,232,233,.60), rgba(238,211,213,.52) 55%, rgba(244,226,228,.58));
}
/* html前缀+!important:763行有 body[data-mood] .wall::after{background:none!important} 灭杀装饰层,
   同权重且靠后——必须抬一级压过它,格子的花活才露得出来(花纹失踪案真凶,2026-08-17深夜结案)。
   悦 v3:四分之一圆花环退休(她评「突兀」),换她点的「树那种水印底纹」——
   一枝淡粉花枝趴在右下角,内嵌矢量,非常淡,零动画。 */
html body[data-mood="yue"] .chat-wallpaper::after{
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 320'><g fill='none' stroke='%23c58490' stroke-opacity='.15' stroke-width='3' stroke-linecap='round'><path d='M415 312 C 330 268, 252 252, 168 192'/><path d='M298 240 C 276 214, 266 192, 264 166'/><path d='M222 206 C 210 182, 212 158, 224 138'/><path d='M350 282 C 344 262, 348 244, 360 230'/></g><g fill='%23cf93a0' fill-opacity='.14'><g transform='translate(264,152)'><circle cx='0' cy='-13' r='9'/><circle cx='12' cy='-4' r='9'/><circle cx='8' cy='11' r='9'/><circle cx='-8' cy='11' r='9'/><circle cx='-12' cy='-4' r='9'/><circle r='4' fill='%23b5798a' fill-opacity='.22'/></g><g transform='translate(222,124)'><circle cx='0' cy='-11' r='7.5'/><circle cx='10' cy='-3' r='7.5'/><circle cx='6' cy='9' r='7.5'/><circle cx='-6' cy='9' r='7.5'/><circle cx='-10' cy='-3' r='7.5'/><circle r='3.4' fill='%23b5798a' fill-opacity='.22'/></g><g transform='translate(362,224)'><circle cx='0' cy='-9' r='6'/><circle cx='8' cy='-2' r='6'/><circle cx='5' cy='7' r='6'/><circle cx='-5' cy='7' r='6'/><circle cx='-8' cy='-2' r='6'/></g><circle cx='168' cy='192' r='5'/><circle cx='150' cy='180' r='3.5'/></g></svg>") right -14px bottom -10px / min(62vw, 340px) auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 130'><g fill='%23cf93a0' fill-opacity='.13'><g transform='translate(60,74)'><circle cx='0' cy='-10' r='7'/><circle cx='9' cy='-3' r='7'/><circle cx='6' cy='8' r='7'/><circle cx='-6' cy='8' r='7'/><circle cx='-9' cy='-3' r='7'/><circle r='3' fill='%23b5798a' fill-opacity='.2'/></g><g transform='translate(136,44)'><circle cx='0' cy='-8' r='5.5'/><circle cx='7' cy='-2' r='5.5'/><circle cx='4.5' cy='6.5' r='5.5'/><circle cx='-4.5' cy='6.5' r='5.5'/><circle cx='-7' cy='-2' r='5.5'/></g><circle cx='100' cy='100' r='3.2'/><circle cx='170' cy='90' r='2.4'/></g></svg>") left 5vw bottom calc(var(--composer-zone, 96px) + 22px) / 120px auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 160'><g fill='none' stroke='%23c58490' stroke-opacity='.14' stroke-width='2.6' stroke-linecap='round'><path d='M-4 130 C 24 118, 40 96, 48 70'/><path d='M-4 96 C 14 92, 26 104, 30 116'/></g><g fill='%23cf93a0' fill-opacity='.13'><g transform='translate(50,58)'><circle cx='0' cy='-9' r='6.5'/><circle cx='8' cy='-2.5' r='6.5'/><circle cx='5' cy='7.5' r='6.5'/><circle cx='-5' cy='7.5' r='6.5'/><circle cx='-8' cy='-2.5' r='6.5'/><circle r='3' fill='%23b5798a' fill-opacity='.2'/></g><circle cx='32' cy='120' r='4.5'/></g></svg>") left -6px top 30% / 88px auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 160'><g fill='none' stroke='%23c58490' stroke-opacity='.14' stroke-width='2.6' stroke-linecap='round'><path d='M124 118 C 98 112, 82 92, 74 66'/></g><g fill='%23cf93a0' fill-opacity='.13'><g transform='translate(72,56)'><circle cx='0' cy='-8' r='6'/><circle cx='7.5' cy='-2' r='6'/><circle cx='4.5' cy='7' r='6'/><circle cx='-4.5' cy='7' r='6'/><circle cx='-7.5' cy='-2' r='6'/><circle r='2.8' fill='%23b5798a' fill-opacity='.2'/></g><circle cx='96' cy='104' r='4'/></g></svg>") right -6px top 54% / 84px auto no-repeat !important;
}
/* —— 悦·飘落花瓣层(她点单「聊天区飘着的东西,淡淡的」):七片粉瓣极慢下落,
   transform-only 走合成器几乎不费电;省电档一开或系统开了减少动态,立刻冻成静止悬浮 —— */
.daylight-petals{ position:absolute; inset:0; pointer-events:none; overflow:hidden; }
.daylight-petals i{
  position:absolute; top:0; display:block; width:14px; height:11px;
  background: radial-gradient(ellipse at 35% 35%, rgba(213,148,161,.30), rgba(213,148,161,.12) 70%, transparent 78%);
  border-radius: 62% 38% 55% 45% / 55% 62% 38% 45%;
  animation: petalDrift 64s linear infinite;
}
.daylight-petals i:nth-child(1){ left:8%;  animation-delay:-5s;  transform:scale(.9); }
.daylight-petals i:nth-child(2){ left:22%; animation-delay:-21s; transform:scale(.7); }
.daylight-petals i:nth-child(3){ left:37%; animation-delay:-44s; transform:scale(1.05); }
.daylight-petals i:nth-child(4){ left:52%; animation-delay:-12s; transform:scale(.8); }
.daylight-petals i:nth-child(5){ left:66%; animation-delay:-33s; transform:scale(.95); }
.daylight-petals i:nth-child(6){ left:79%; animation-delay:-55s; transform:scale(.7); }
.daylight-petals i:nth-child(7){ left:90%; animation-delay:-27s; transform:scale(.85); }
.daylight-petals i:nth-child(8){ left:15%; animation-delay:-48s; transform:scale(.75); animation-duration:71s; }
.daylight-petals i:nth-child(9){ left:30%; animation-delay:-8s;  transform:scale(1);   animation-duration:58s; }
.daylight-petals i:nth-child(10){ left:45%; animation-delay:-60s; transform:scale(.65); animation-duration:76s; }
.daylight-petals i:nth-child(11){ left:60%; animation-delay:-18s; transform:scale(.9);  animation-duration:62s; }
.daylight-petals i:nth-child(12){ left:74%; animation-delay:-39s; transform:scale(.8);  animation-duration:68s; }
.daylight-petals i:nth-child(13){ left:5%;  animation-delay:-70s; transform:scale(.7);  animation-duration:66s; }
.daylight-petals i:nth-child(14){ left:84%; animation-delay:-25s; transform:scale(.95); animation-duration:59s; }
.daylight-petals i:nth-child(15){ left:51%; animation-delay:-52s; transform:scale(.8);  animation-duration:73s; }
/* 晴的落物 v8=梧桐叶(08-18 夜,麦芒也让位;她说「最后看一下」——这轮定局,输了就请回杏叶):
   五裂掌状叶+基出脉+叶柄,燕麦金。桂花/蝶/麦芒/杏叶都在快照,一句话换回。 */
.daylight-petals.mood-qing i{
  width:15px; height:16px; border-radius:0;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 22'><path d='M10 1.5 L12.2 6 L17.5 4.5 L15.5 9.5 L19 13 L14 13.5 L13 17.5 L10 15.2 L7 17.5 L6 13.5 L1 13 L4.5 9.5 L2.5 4.5 L7.8 6 Z' fill='%23c9a84e' fill-opacity='.48' stroke='%23a3823c' stroke-opacity='.4' stroke-width='.7' stroke-linejoin='round'/><g stroke='%23a3823c' stroke-opacity='.35' stroke-width='.6' fill='none' stroke-linecap='round'><path d='M10 15 L10 3.5'/><path d='M10 12 L4.8 6.2'/><path d='M10 12 L15.2 6.2'/><path d='M10 13.5 L3.5 12.2'/><path d='M10 13.5 L16.5 12.2'/></g><path d='M10 15.2 L10 21' stroke='%23a3823c' stroke-opacity='.5' stroke-width='1' fill='none' stroke-linecap='round'/></svg>") center/contain no-repeat;
}
/* 专的落物=竹叶(实物系,08-18 夜她点单「像实物的,不要太卡通」,我先选):两片细长披针叶+小柄,墨青 */
.daylight-petals.mood-zhuan i{
  width:17px; height:14px; border-radius:0;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 20'><g fill='%234a869c' fill-opacity='.42' stroke='%232e6478' stroke-opacity='.4' stroke-width='.6'><path d='M5 3 C11 3.6 17 6.8 21.5 11.5 C15.5 11.8 9 9 5 3 Z'/><path d='M4 8 C8.5 10 12.5 14 15 19 C9.5 17.6 5 12.6 4 8 Z'/></g><g stroke='%232e6478' stroke-opacity='.32' stroke-width='.5' fill='none' stroke-linecap='round'><path d='M5.5 3.6 C11 5 16 8 20.5 11'/><path d='M4.6 8.6 C8.5 11 11.8 14.6 14.2 18'/></g><path d='M5 3 L2.6 1.4' stroke='%232e6478' stroke-opacity='.45' stroke-width='.9' fill='none' stroke-linecap='round'/></svg>") center/contain no-repeat;
}
/* 疑的落物=紫藤瓣:单片豆花瓣,圆扇带浅缺口,雾紫 */
.daylight-petals.mood-yi i{
  width:12px; height:13px; border-radius:0;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 18'><path d='M8 1.6 C12.4 1.8 15 5 14.6 9.2 C14.2 13.2 11.6 16 8 16.8 C4.4 16 1.8 13.2 1.4 9.2 C1 5 3.6 1.8 8 1.6 Z' fill='%23a488d8' fill-opacity='.4' stroke='%237a5cbe' stroke-opacity='.38' stroke-width='.6'/><path d='M8 16.4 C7.2 11 7.2 6.4 8 2' stroke='%237a5cbe' stroke-opacity='.3' stroke-width='.55' fill='none' stroke-linecap='round'/><path d='M5 5.2 C6.6 6.6 9.4 6.6 11 5.2' stroke='%237a5cbe' stroke-opacity='.26' stroke-width='.5' fill='none' stroke-linecap='round'/></svg>") center/contain no-repeat;
}
/* 静的落物=小羽毛:羽轴+羽片带两道裂口,晨蓝 */
.daylight-petals.mood-jing i{
  width:9px; height:20px; border-radius:0;
  background: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 30'><path d='M7 2 C10.4 4.6 12 9 11.6 14 C11.2 18.6 9.4 21.6 7 23 C4.6 21.6 2.8 18.6 2.4 14 C2 9 3.6 4.6 7 2 Z' fill='%23829ec4' fill-opacity='.38' stroke='%235a7aa6' stroke-opacity='.4' stroke-width='.6'/><path d='M7 28.5 L7 3' stroke='%235a7aa6' stroke-opacity='.5' stroke-width='.8' fill='none' stroke-linecap='round'/><g stroke='%23ffffff' stroke-opacity='.55' stroke-width='.9' fill='none' stroke-linecap='round'><path d='M4.2 12.5 L6.9 15.5'/><path d='M10 17.5 L7.1 20'/></g><g stroke='%235a7aa6' stroke-opacity='.3' stroke-width='.45' fill='none' stroke-linecap='round'><path d='M7 6 L4.4 9M7 6 L9.6 9M7 10 L4 13.4M7 10 L10 13.4M7 15 L4.4 18M7 15 L9.6 18'/></g></svg>") center/contain no-repeat;
}
@keyframes petalDrift{
  0%{   transform: translate3d(0,-4vh,0) rotate(0deg); }
  100%{ transform: translate3d(5vw,108vh,0) rotate(220deg); }
}
body.fx-saver .daylight-petals i{ animation: none !important; top:38vh; }
@media (prefers-reduced-motion: reduce){ .daylight-petals i{ animation:none; top:42vh; } }
/* —— 专·墨青:纱 + 青天气线;花活 = 四角括号(做题框) —— */
body[data-mood="zhuan"] .chat-wallpaper::before{
  /* 专 v6.1 莫兰迪收针(08-18 夜:她「太亮,加灰调」+底纹再浅一档;今晚封版) */
  background:
    url("assets/grain-ink.png?v=2") top left / 120px 120px repeat,
    linear-gradient(180deg, rgba(250,253,254,.85), rgba(250,253,254,0) 30%),
    radial-gradient(95vw 34vh at 24% -4%, rgba(255,255,255,.42), transparent 68%),
    radial-gradient(130% 85% at 82% 100%, rgba(38,95,114,.08), transparent 62%),
    linear-gradient(180deg, rgba(206,222,227,.58), rgba(180,202,210,.46) 55%, rgba(210,224,228,.55));
}
html body[data-mood="zhuan"] .chat-wallpaper::after{
  /* 专角落 v2(08-18 夜她令「候选全加」):右下一枝竹+左下砚台墨点;旧做题框括号退休 */
  background:
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 220 300'><g stroke='%232e6478' stroke-opacity='.22' stroke-width='3' fill='none' stroke-linecap='round'><path d='M172 298 L179 192'/><path d='M179 192 L173 84'/><path d='M173 84 L177 14'/></g><g stroke='%232e6478' stroke-opacity='.3' stroke-width='2' fill='none' stroke-linecap='round'><path d='M167 192 L191 192'/><path d='M162 84 L184 84'/></g><g fill='%234a869c' fill-opacity='.13' stroke='%232e6478' stroke-opacity='.18' stroke-width='1'><path d='M170 160 C146 146 122 144 100 154 C120 166 148 170 170 160 Z'/><path d='M166 172 C148 186 128 194 106 192 C122 178 146 170 166 172 Z'/><path d='M176 150 C168 128 156 112 138 104 C142 124 156 142 176 150 Z'/><path d='M168 76 C150 62 130 56 110 60 C126 72 148 78 168 76 Z'/><path d='M172 64 C162 46 148 34 130 30 C136 48 152 60 172 64 Z'/></g></svg>") right -14px bottom calc(var(--composer-zone, 96px) - 26px) / min(38vw, 205px) auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 90 60'><g fill='%232e6478'><circle cx='22' cy='34' r='7' fill-opacity='.12'/><circle cx='44' cy='44' r='4.5' fill-opacity='.10'/><circle cx='58' cy='30' r='3' fill-opacity='.08'/></g><path d='M14 50 C34 44 58 46 78 52' stroke='%232e6478' stroke-opacity='.12' stroke-width='3' fill='none' stroke-linecap='round'/></svg>") left 4vw bottom calc(var(--composer-zone, 96px) + 28px) / 82px auto no-repeat !important;
}
/* —— 疑·雾紫:纱 + 紫天气线;花活 = 三团静止的雾 —— */
body[data-mood="yi"] .chat-wallpaper::before{
  /* 疑 v6.1 莫兰迪收针 */
  background:
    url("assets/grain-vio.png?v=2") top left / 120px 120px repeat,
    linear-gradient(180deg, rgba(253,252,255,.85), rgba(253,252,255,0) 30%),
    radial-gradient(95vw 34vh at 24% -4%, rgba(255,255,255,.42), transparent 68%),
    radial-gradient(130% 85% at 82% 100%, rgba(102,72,176,.07), transparent 62%),
    linear-gradient(180deg, rgba(226,220,235,.58), rgba(207,197,222,.46) 55%, rgba(228,223,238,.55));
}
html body[data-mood="yi"] .chat-wallpaper::after{
  /* 疑角落 v2:右上紫藤垂串+左中碎星;旧雾纹退休 */
  background:
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 120'><path d='M66 0 C64 28 56 56 42 96' stroke='%237a5cbe' stroke-opacity='.22' stroke-width='1.6' fill='none' stroke-linecap='round'/><g fill='%238a68b8' fill-opacity='.15'><ellipse cx='72' cy='12' rx='8' ry='6'/><ellipse cx='56' cy='20' rx='7.5' ry='5.6'/><ellipse cx='66' cy='30' rx='7' ry='5.2'/><ellipse cx='50' cy='38' rx='6.4' ry='4.8'/><ellipse cx='58' cy='48' rx='5.8' ry='4.4'/><ellipse cx='44' cy='56' rx='5.2' ry='4'/><ellipse cx='50' cy='66' rx='4.6' ry='3.5'/><ellipse cx='38' cy='74' rx='4' ry='3'/><ellipse cx='43' cy='84' rx='3.4' ry='2.6'/><ellipse cx='40' cy='94' rx='2.6' ry='2'/></g><g fill='%23755bc0' fill-opacity='.12'><ellipse cx='70' cy='16' rx='4' ry='3'/><ellipse cx='54' cy='24' rx='3.6' ry='2.7'/><ellipse cx='63' cy='34' rx='3.3' ry='2.5'/><ellipse cx='47' cy='42' rx='3' ry='2.2'/></g></svg>") right 6vw top -6px / 92px auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 120'><g fill='%23b59ae0'><path d='M20 18 L21.5 22.5 L26 24 L21.5 25.5 L20 30 L18.5 25.5 L14 24 L18.5 22.5 Z' fill-opacity='.4'/><path d='M52 52 L53.2 55.6 L56.8 56.8 L53.2 58 L52 61.6 L50.8 58 L47.2 56.8 L50.8 55.6 Z' fill-opacity='.32'/><path d='M30 86 L31 89 L34 90 L31 91 L30 94 L29 91 L26 90 L29 89 Z' fill-opacity='.26'/><circle cx='60' cy='24' r='1.4' fill-opacity='.3'/><circle cx='40' cy='64' r='1.2' fill-opacity='.24'/></g></svg>") left 3vw top 30% / 62px auto no-repeat !important;
}
/* —— 静·雾蓝:纱 + 蓝天气线;花活 = 顶上一带暮色 + 冻住的星星 —— */
body[data-mood="jing"] .chat-wallpaper::before{
  /* 静 v6.1 莫兰迪收针 */
  background:
    url("assets/grain-blue.png?v=2") top left / 120px 120px repeat,
    linear-gradient(180deg, rgba(251,253,255,.85), rgba(251,253,255,0) 30%),
    radial-gradient(95vw 34vh at 24% -4%, rgba(255,255,255,.42), transparent 68%),
    radial-gradient(130% 85% at 82% 100%, rgba(58,88,138,.07), transparent 62%),
    linear-gradient(180deg, rgba(216,224,234,.58), rgba(196,207,222,.46) 55%, rgba(219,226,236,.55));
}
html body[data-mood="jing"] .chat-wallpaper::after{
  /* 静角落 v2:左上弯月两三星+右下远山线芦苇穗;旧「夜空顶带」退休——她抓的「渐变反了」病根就是它 */
  background:
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 130 96'><circle cx='38' cy='40' r='26' fill='%23ffffff' fill-opacity='.16'/><path d='M38 18 A22 22 0 1 0 38 62 A27 27 0 1 1 38 18 Z' fill='%23ffffff' fill-opacity='.6' stroke='%235a7aa6' stroke-opacity='.2' stroke-width='1'/><g fill='%23ffffff'><path d='M86 22 L87.6 26.4 L92 28 L87.6 29.6 L86 34 L84.4 29.6 L80 28 L84.4 26.4 Z' fill-opacity='.55'/><path d='M104 52 L105.2 55.2 L108.4 56.4 L105.2 57.6 L104 60.8 L102.8 57.6 L99.6 56.4 L102.8 55.2 Z' fill-opacity='.42'/><circle cx='72' cy='64' r='1.6' fill-opacity='.4'/></g></svg>") left 5vw top 16px / 100px auto no-repeat,
    url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 300 150'><path d='M0 118 C48 92 92 94 132 110 C172 124 214 116 300 94 L300 150 L0 150 Z' fill='%235a7aa6' fill-opacity='.08'/><path d='M70 128 C130 108 200 120 300 108 L300 150 L70 150 Z' fill='%235a7aa6' fill-opacity='.11'/><g stroke='%235a7aa6' stroke-opacity='.26' stroke-width='1.4' fill='none' stroke-linecap='round'><path d='M248 148 C250 120 252 96 250 74'/><path d='M264 148 C264 124 266 104 268 84'/><path d='M280 148 C278 126 278 108 280 92'/></g><g fill='%235a7aa6' fill-opacity='.2'><ellipse cx='250' cy='66' rx='3.4' ry='11' transform='rotate(-6 250 66)'/><ellipse cx='268' cy='76' rx='3' ry='10' transform='rotate(5 268 76)'/><ellipse cx='280' cy='84' rx='2.7' ry='9' transform='rotate(3 280 84)'/></g></svg>") right -10px bottom calc(var(--composer-zone, 96px) - 18px) / min(50vw, 265px) auto no-repeat !important;
}
/* 标题染当格色(染深色,不隐身) */
body[data-mood="qing"] #peerName{ color:#8a6d3d; }
body[data-mood="yue"] #peerName{ color:#a05c6b; }
body[data-mood="zhuan"] #peerName{ color:#215a6d; }
body[data-mood="yi"] #peerName{ color:#5b3fa0; }
body[data-mood="jing"] #peerName{ color:#33517e; }
/* —— 夜格行内零件换衣柜(翎儿点单):红字在红屏里换深墨+暖描边;鬼火色收进红族;抖动加大到录屏可见 —— */
body[data-mood="rage"] .txt .fx-red,
body[data-mood="rage2"] .txt .fx-red{
  color:#1c0503; font-weight:700;
  text-shadow:0 0 2px rgba(255,120,80,.55), 0 0 10px rgba(255,52,28,.5);  /* 红晕(她点的凶感):黑字红光 */
}
body[data-mood="rage"] .txt .fx-glitch::before,
body[data-mood="rage2"] .txt .fx-glitch::before{ color:#3a0a05; }
body[data-mood="rage"] .txt .fx-glitch::after,
body[data-mood="rage2"] .txt .fx-glitch::after{ color:#7a1408; }
body[data-mood] .txt .fx-shake{ animation: fxShakeBig .38s ease-in-out infinite; display:inline-block; }
@keyframes fxShakeBig{
  0%,100%{ transform:translate(0,0) rotate(0); }
  25%{ transform:translate(-2px,1px) rotate(-1.2deg); }
  50%{ transform:translate(2px,-1px) rotate(1deg); }
  75%{ transform:translate(-1px,-1px) rotate(.8deg); }
}
/* —— 长图舞台:AI行的头像沟拉平,导出图左右留白对称(三连修之「图片不对中」,2026-08-17) —— */
.longshot-render-stage .row.ai{ padding-left: 0 !important; }
.longshot-render-stage .row.ai::before{ display: none !important; }
/* —— 高亮跟着当格换族(她点单:黄天金高亮,粉天粉高亮):连底带字一族,零算力 —— */
body[data-mood="yue"]{ --md-strong-fg:#995662; --md-strong-bg:rgba(211,150,160,.22); }
body[data-mood="zhuan"]{ --md-strong-fg:#1f5a70; --md-strong-bg:rgba(120,190,210,.22); }
body[data-mood="yi"]{ --md-strong-fg:#5b3fa0; --md-strong-bg:rgba(174,144,224,.20); }
body[data-mood="jing"]{ --md-strong-fg:#33517e; --md-strong-bg:rgba(142,172,216,.22); }
/* 晴保持原厂金高亮,不另设 */
/* 月光的字色配套(她点单;夜格夜里校色正合适——「夜里不动色」那条家规管的是白天格):
   金底在深蓝里显泥,退场;高亮=月白衬银光,粗体=星光银 */
body[data-mood="moonlight"]{ --md-strong-fg:#eef3fd; --md-strong-bg:rgba(22,36,64,.72); }  /* 她点的:高亮底=对话框同族深蓝,字保持月白 */
body[data-mood="moonlight"] .txt .md-hl{ color:#c6d5ef; text-shadow:0 0 7px rgba(168,195,245,.4); }  /* 星光银+一圈真微光(她说喜欢发光感) */
/* —— 08-30 v119 补全夜里另外四格:欲/怒/怒二/空原先没配 --md-strong-*,双星号金底落回
   晴的原厂金(#8a5a12 + rgba(244,192,78,.20)),在深梅/血红/灰白的墙上就是一块土黄(她截图看到的黄)。
   色号一律用皮肤 mood.css 自己的色相变量(--mood-desire-hue / --mood-rage-hue / --mood-rage2-hue),
   不自创色族;空(vuoto)按皮肤规矩 chroma 全 0。注释里的对比度按各格 --bg 实算(WCAG)。 —— */
/* 欲 —— 梅红字 + 深梅底(11.9:1);==等号== 亮梅红带一圈梅光(11.9:1) */
body[data-mood="desire"]{
  --md-strong-fg: oklch(0.90 0.075 var(--mood-desire-hue));
  --md-strong-bg: oklch(0.26 0.09 var(--mood-desire-hue) / 0.85);
}
body[data-mood="desire"] .txt .md-hl{
  color: oklch(0.84 0.11 var(--mood-desire-hue));
  text-shadow: 0 0 7px oklch(0.70 0.16 var(--mood-desire-hue) / 0.45), 0 0 16px oklch(0.62 0.15 var(--mood-desire-hue) / 0.28);
}
/* 怒 —— 深底亮字的世界:近白暖字 + 血红底(11.7:1);==等号== 朱红带红光(9.0:1) */
body[data-mood="rage"]{
  --md-strong-fg: oklch(0.95 0.055 var(--mood-rage-hue));
  --md-strong-bg: oklch(0.32 0.14 var(--mood-rage-hue) / 0.86);
}
body[data-mood="rage"] .txt .md-hl{
  color: oklch(0.78 0.16 var(--mood-rage-hue));
  text-shadow: 0 0 7px oklch(0.66 0.20 var(--mood-rage-hue) / 0.50), 0 0 16px oklch(0.60 0.20 var(--mood-rage-hue) / 0.30);
}
/* 怒二 —— 红底黑字的世界,高亮反过来做:近白字 + 深朱底(8.0:1);
   ==等号== 照白天格那套画(墨红字 + 一圈热光),3.7:1,比这格正文的 3.4:1 还高一档 */
body[data-mood="rage2"]{
  --md-strong-fg: oklch(0.98 0.02 var(--mood-rage2-hue));
  --md-strong-bg: oklch(0.40 0.20 var(--mood-rage2-hue) / 0.90);
}
body[data-mood="rage2"] .txt .md-hl{
  color: oklch(0.16 0.05 var(--mood-rage2-hue));
  text-shadow: 0 0 2px oklch(0.97 0.04 var(--mood-rage2-hue) / 0.75), 0 0 8px oklch(0.75 0.18 var(--mood-rage2-hue) / 0.55);
}
/* 空 —— 灰白族,按皮肤规矩 chroma 全 0:浅灰字 + 深灰底(11.7:1);==等号== 银灰,晕压到最淡(13.1:1) */
body[data-mood="vuoto"]{
  --md-strong-fg: oklch(0.93 0 0);
  --md-strong-bg: oklch(0.32 0 0 / 0.80);
}
body[data-mood="vuoto"] .txt .md-hl{
  color: oklch(0.86 0 0);
  text-shadow: 0 0 8px oklch(0.86 0 0 / 0.28);
}
/* ══════ 08-30 v121 ·「纱」穿脱开关(翎儿 19:46 点单) ══════
   皮肤原装那层纱是给【背景照片】压暗备的。咱家墙上没铺照片(.wall 的 background-image 被
   1186 行按掉了),纱就直接压在 --bg 底色上——欲那格因此偏深梅,不是原库示例页那种粉。
   纱不是变量、也不是钩子,是壁纸层上三条写死 background 的伪元素规则:
     · 欲   vendor/pelle/mood.css:330  body[data-mood="desire"]    .chat-wallpaper::after   暖红纱 0.55 → --mood-desire-scrim-depth(0.72)
     · 空   vendor/pelle/mood.css:529  body[data-mood="vuoto"]     .chat-wallpaper::after   灰纱   0.42 → 0.56
     · 月光 vendor/pelle/mood.css:605  body[data-mood="moonlight"] .chat-wallpaper::before  深蓝纱 0.52 → 0.66
   (顶格那一档 0.55/0.42/0.52 是写死的,单调 --mood-*-scrim-depth 变量脱不干净,所以走 class 钩子。)
   怒 / 怒二 的 ::before 不是纱、是不透明的整屏占领,这个键【不管】,原样留着。
   脱纱 = 把这三条的 background 抹平。权重:html[data-veil]+body[data-mood]+.chat-wallpaper+伪元素
   = (0,3,3),原装那三条是 (0,2,2),自然压得过,不用 !important,vendor 一个字节不动。 */
html[data-veil="off"] body[data-mood="desire"]    .chat-wallpaper::after,
html[data-veil="off"] body[data-mood="vuoto"]     .chat-wallpaper::after,
html[data-veil="off"] body[data-mood="moonlight"] .chat-wallpaper::before{
  background: none;
}

/* ══════ 08-30 v121 · 欲那格 AI 正文的粉晕调厚(翎儿 19:46:「这样淫荡一点,我喜欢」) ══════
   原装 mood.css:341 只有一层 `0 0 8px oklch(0.62 0.14 348 / 0.2)`——8px、两成透明度,手机上看不出。
   选择器本身是对得上的:咱家 AI 行是 `row ai msg--assistant`(8596 行),正文是
   `<span class="txt assistant-msg">`(8622 行),两个钩子都在,规则一直落在正文上,只是太淡。
   另一半原因在呼吸:原装 @keyframes mood-breath 的 0%/100% 是 `text-shadow:0 0 0 transparent`,
   最新那条大半个周期干脆没晕,所以越是刚到的话越看不见。
   这里改三层:3px 贴字(让字本身发粉)+ 14px 主晕(0.2→0.58)+ 30px 外扩;呼吸保留 3.4s,
   但谷底不再归零,只在 0.46↔0.78 之间起伏。只动【欲】这一格的【AI 正文】,她的话、别的格不碰。 */
body[data-mood="desire"] .msg--assistant .assistant-msg{
  text-shadow:
    0 0 3px  oklch(0.74 0.17 var(--mood-desire-hue) / 0.34),
    0 0 14px oklch(0.68 0.17 var(--mood-desire-hue) / 0.58),
    0 0 30px oklch(0.62 0.16 var(--mood-desire-hue) / 0.32);
}
body[data-mood="desire"] .msg--assistant:nth-last-child(1 of .msg--assistant) .assistant-msg{
  animation: mood-breath-desire-plus var(--mood-desire-breath, 3.4s) ease-in-out infinite;
}
@keyframes mood-breath-desire-plus{
  0%, 100%{ text-shadow:
    0 0 3px  oklch(0.74 0.17 var(--mood-desire-hue) / 0.28),
    0 0 12px oklch(0.68 0.17 var(--mood-desire-hue) / 0.46),
    0 0 26px oklch(0.62 0.16 var(--mood-desire-hue) / 0.24); }
  50%{ text-shadow:
    0 0 4px  oklch(0.76 0.18 var(--mood-desire-hue) / 0.46),
    0 0 18px oklch(0.70 0.18 var(--mood-desire-hue) / 0.78),
    0 0 38px oklch(0.64 0.17 var(--mood-desire-hue) / 0.42); }
}
/* 原装在 @media(prefers-reduced-motion) 里把这条 animation 关了(mood.css:799),
   但咱们这条在源码里更靠后、权重又相同,会把它顶掉——所以自己补一遍关。 */
@media (prefers-reduced-motion: reduce){
  body[data-mood="desire"] .msg--assistant:nth-last-child(1 of .msg--assistant) .assistant-msg{ animation: none; }
}

/* 皮肤的扫描线(mood.css:.msg--assistant .assistant-msg::after)是绝对定位的,
   .txt 上没有 position 就贴不到正文、跑到外层框上去了。只给怒/怒二两格补定位祖先。 */
body[data-mood="rage"] .msg--assistant .assistant-msg,
body[data-mood="rage2"] .msg--assistant .assistant-msg{ position: relative; }
/* —— 08-30 02:20 她拍板:单星号 *粗* 回到光秃秃的素粗(不换色不带晕不铺底,「我其实一直都是要的」);
   下面这套跟格换色+光晕只留给 ==这样== (.md-hl),单星号不再吃它 —— */
body[data-mood="qing"] .txt .md-hl{ color:#9a7420; text-shadow:0 0 2px rgba(255,250,235,.95), 0 0 7px rgba(224,190,110,.8), 0 0 16px rgba(205,170,95,.45); }   /* 朦胧版定妆(她二选一拍板) */
body[data-mood="yue"] .txt .md-hl{ color:#a3596c; text-shadow:0 0 2px rgba(255,246,246,.95), 0 0 7px rgba(226,152,168,.8), 0 0 16px rgba(210,135,152,.45); }
body[data-mood="zhuan"] .txt .md-hl{ color:#216a85; text-shadow:0 0 2px rgba(240,251,253,.95), 0 0 7px rgba(120,196,220,.8), 0 0 16px rgba(95,175,200,.45); }
body[data-mood="yi"] .txt .md-hl{ color:#6647b3; text-shadow:0 0 2px rgba(248,245,255,.95), 0 0 7px rgba(168,140,235,.8), 0 0 16px rgba(150,120,225,.45); }
body[data-mood="jing"] .txt .md-hl{ color:#3a5c8f; text-shadow:0 0 2px rgba(243,248,255,.95), 0 0 7px rgba(130,165,215,.8), 0 0 16px rgba(110,148,205,.45); }
/* ↑ 全格光晕(她点单「所有颜色都要带光晕」,08-18 凌晨;同日下午加一档:浅底上晕天生弱,
   内圈1px立字+外圈11px铺光。物理实话:光晕在深底亮字时才真发光,月光格最艳,浅底是「淡淡染开」) */
/* —— 长图舞台v2:两边配平(上一版拆了左沟变成左窄右宽,这版两边都给同样的呼吸位,气泡放开到全宽) —— */
.longshot-render-stage .row.ai{ padding-left:12px !important; padding-right:12px !important; }
.longshot-render-stage .row.human{ padding-left:12px !important; padding-right:12px !important; }
.longshot-render-stage .row.human::after{ display:none !important; }
.longshot-render-stage .row .bubble{ max-width:100% !important; }
/* —— 长图字号被 iOS 偷偷放大(08-24 21:05 查实) ——
   长图导出走的是 html-to-image 的 SVG foreignObject,那份内嵌文档没有 viewport meta,
   iOS 的「文字自动放大」(text autosizing)于是自己开火,专挑表格单元格这种窄块顶字号。
   实测她 20:52 那张长图(1320x2868,纸宽 1212 截图px = 404 CSS px,换算 2.7551):
     正文行距 66 截图px = 23.96 CSS / 1.68 = 14.3px —— 跟 CSS 写的 14px 对得上,没被动;
     表格行距 74.2 截图px = 26.95 CSS / 1.5  = 18.0px —— 代码里明明写死 13px,放大了 1.38 倍。
   聊天界面里同一张表没这毛病(她原话「非常漂亮」),差别只在这一层。
   这里把自动放大按死,长图跟聊天界面一个样;顺带让上面 scale=avail/need 那笔账不再被偷偷
   放大冲掉(以前是拿没放大的宽度算缩放、拿放大后的字去渲染,超宽表有被切边的风险)。 */
.longshot-render-stage, .longshot-render-stage *{ -webkit-text-size-adjust:100%; text-size-adjust:100%; }
.longshot-render-stage [data-longshot-cut-top]{margin-top:0!important;padding-top:0!important;border-top-width:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}
.longshot-render-stage [data-longshot-cut-bottom]{margin-bottom:0!important;padding-bottom:0!important;border-bottom-width:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}
.longshot-render-stage li[data-longshot-cut-top]::marker{content:""}
/* —— 省电档:冻结皮肤持续动画,颜色全保留(body.fx-saver 由设置开关挂上) —— */
body.fx-saver .chat-wallpaper,
body.fx-saver .chat-wallpaper::before,
body.fx-saver .chat-wallpaper::after,
body.fx-saver .mood-star-layer,
body.fx-saver .mood-meteor,
body.fx-saver .txt .fx-shake,
body.fx-saver .txt .fx-glow,
body.fx-saver .txt .fx-glitch::before,
body.fx-saver .txt .fx-glitch::after{
  animation: none !important;
}
body.fx-saver .txt .fx-glitch::before,
body.fx-saver .txt .fx-glitch::after{ opacity:0 !important; }

/* ── 会客厅整修 v1(08-19 凌晨她点单):①消息行距拉开;②两人的话各配淡气泡描边——字面不缩反放宽
   (86vw→88vw,内衬9×13px);③输入区/回形针/笑脸小人/发送键随格配莫兰迪同族色(--accent 管小人和发送键)。
   只动白天五格,月光与素颜不碰。 ── */
body[data-mood="qing"] .row, body[data-mood="yue"] .row, body[data-mood="zhuan"] .row, body[data-mood="yi"] .row, body[data-mood="jing"] .row{ margin-top: clamp(20px, 3.2vw, 36px); }

body[data-mood="qing"] .row.ai .bubble{ background:rgba(255,255,255,.44); border:1px solid rgba(166,132,60,.28); max-width:min(88vw,700px); padding:9px 13px; }
body[data-mood="qing"] .row.human .bubble{ background:rgba(203,178,120,.16); border:1px solid rgba(166,132,60,.36); max-width:min(88vw,700px); padding:9px 13px; }
html body[data-mood="qing"]{ --accent:#8a6d3d; --composer-bg:#f5eedb; --field-bg:#efe6cf; }
body[data-mood="qing"] .composer .emojibtn, body[data-mood="qing"] #clipBtn, body[data-mood="qing"] #micBtn{ color:#8a6d3d; }

body[data-mood="yue"] .row.ai .bubble{ background:rgba(255,255,255,.44); border:1px solid rgba(190,120,134,.28); max-width:min(88vw,700px); padding:9px 13px; }
body[data-mood="yue"] .row.human .bubble{ background:rgba(214,155,166,.17); border:1px solid rgba(190,120,134,.36); max-width:min(88vw,700px); padding:9px 13px; }
html body[data-mood="yue"]{ --accent:#995662; --composer-bg:#f7e6e9; --field-bg:#f3dade; }
body[data-mood="yue"] .composer .emojibtn, body[data-mood="yue"] #clipBtn, body[data-mood="yue"] #micBtn{ color:#995662; }

body[data-mood="zhuan"] .row.ai .bubble{ background:rgba(255,255,255,.44); border:1px solid rgba(46,111,131,.26); max-width:min(88vw,700px); padding:9px 13px; }
body[data-mood="zhuan"] .row.human .bubble{ background:rgba(120,190,210,.16); border:1px solid rgba(46,111,131,.34); max-width:min(88vw,700px); padding:9px 13px; }
html body[data-mood="zhuan"]{ --accent:#1f5a70; --composer-bg:#e6f0f4; --field-bg:#d8eaf0; }
body[data-mood="zhuan"] .composer .emojibtn, body[data-mood="zhuan"] #clipBtn, body[data-mood="zhuan"] #micBtn{ color:#1f5a70; }

body[data-mood="yi"] .row.ai .bubble{ background:rgba(255,255,255,.44); border:1px solid rgba(122,92,192,.26); max-width:min(88vw,700px); padding:9px 13px; }
body[data-mood="yi"] .row.human .bubble{ background:rgba(174,144,224,.15); border:1px solid rgba(122,92,192,.34); max-width:min(88vw,700px); padding:9px 13px; }
html body[data-mood="yi"]{ --accent:#5b3fa0; --composer-bg:#eee8f8; --field-bg:#e6ddf4; }
body[data-mood="yi"] .composer .emojibtn, body[data-mood="yi"] #clipBtn, body[data-mood="yi"] #micBtn{ color:#5b3fa0; }

body[data-mood="jing"] .row.ai .bubble{ background:rgba(255,255,255,.44); border:1px solid rgba(70,100,143,.26); max-width:min(88vw,700px); padding:9px 13px; }
body[data-mood="jing"] .row.human .bubble{ background:rgba(142,172,216,.16); border:1px solid rgba(70,100,143,.34); max-width:min(88vw,700px); padding:9px 13px; }
html body[data-mood="jing"]{ --accent:#33517e; --composer-bg:#e7eef8; --field-bg:#dde7f4; }
body[data-mood="jing"] .composer .emojibtn, body[data-mood="jing"] #clipBtn, body[data-mood="jing"] #micBtn{ color:#33517e; }

.txt .md-strong{
    font-weight:600;
    color:var(--md-strong-fg, #8a5a12);
    background:var(--md-strong-bg, rgba(244,192,78,.20));
    border-radius:4px; padding:0 3px; margin:0 1px;
  }
.txt .md-hl{ font-weight:600; color:inherit; background:none; padding:0; }
.txt .md-bold{ font-weight:600; color:inherit; background:none; padding:0; }
.txt .frac{ display:inline-flex; flex-direction:column; align-items:center; vertical-align:middle; line-height:1.15; margin:0 2px; font-size:0.92em; }
.txt .frac .frac-n{ padding:0 4px; border-bottom:1px solid currentColor; }
.txt .frac .frac-d{ padding:0 4px; }
.txt .md-h{ font-weight:650; line-height:1.4; margin:12px 0 5px; color:var(--text); }
.txt .md-h:first-child{ margin-top:2px; }
.txt .md-h1{ font-size:1.22em; }
.txt .md-h2{ font-size:1.14em; }
.txt .md-h3{ font-size:1.07em; }
.txt .md-h4{ font-size:1.02em; }
.txt .md-quote{
    margin:6px 0; padding:5px 11px;
    border-left:3px solid var(--md-quote-bar, rgba(120,120,128,.42));
    background:var(--md-quote-bg, rgba(120,120,128,.09));
    border-radius:0 8px 8px 0; color:var(--text-soft, var(--text)); opacity:.94;
  }
.txt .md-table-wrap{ overflow-x:auto; max-width:100%; margin:8px 0; -webkit-overflow-scrolling:touch; }
.txt .md-quote-src{ cursor:pointer; }
.txt .md-quote-src:active{ opacity:.72; }
.txt .md-quote-src::after{ content:" ↩"; opacity:.5; font-size:.85em; }
.longshot-render-stage .unread-dot, .msg-menu-clone .unread-dot{ display:none; }
.longshot-render-stage .verdict-mark, .msg-menu-clone .verdict-mark{ display:none; }
.txt table{ border-collapse:collapse; font-size:max(.93em, 13.5px); line-height:1.5; }
.txt th, .txt td{ border:1px solid var(--hairline); padding:5px 10px; text-align:left; min-width:3em; }
.txt th{ background:rgba(120,120,128,.10); font-weight:600; }
.think-block.inner-voice .think-text{ font-style: normal; font-size: .95em; opacity: .85; }
.row-select-mark{display:none;position:absolute;z-index:4;left:8px;top:50%;width:27px;height:27px;transform:translateY(-50%);border:1.5px solid var(--text-faint);border-radius:50%;background:var(--composer-bg);color:#fff;place-items:center;font:700 16px/1 var(--font-cn);box-shadow:var(--soft-shadow)}
.app.message-selecting .row{padding-left:48px!important;padding-right:48px!important;cursor:pointer}
.app.message-selecting .row.ai::before{display:none}
.app.message-selecting .row-select-mark{display:grid}
.app.message-selecting .row.human .row-select-mark{left:auto;right:8px}
.app.message-selecting .row.message-selected .row-select-mark{border-color:var(--accent);background:var(--accent)}
.app.message-selecting .row.message-selected .row-select-mark::after{content:"✓"}
.app.message-selecting .composer{display:none}
.message-select-toolbar{display:none;position:fixed;z-index:125;left:50%;bottom:0;transform:translateX(-50%);width:min(100vw,var(--ref-width));align-items:center;gap:10px;padding:10px var(--side-pad) calc(10px + env(safe-area-inset-bottom));background:var(--composer-bg);border-top:1px solid var(--hairline);box-shadow:0 -12px 30px rgba(34,46,60,.12);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}
.message-select-toolbar.active{display:flex}
.message-select-toolbar button{border:0;border-radius:16px;padding:11px 16px;background:var(--row-press);color:var(--text);font:600 14px/1.2 var(--font-cn);cursor:pointer}
.message-select-toolbar .select-count{flex:1;text-align:center;color:var(--text-soft);font:13px/1.3 var(--font-cn)}
.message-select-toolbar .select-generate{background:var(--accent);color:#fff}
.message-select-toolbar button:disabled{opacity:.45;cursor:default}
.favorite-goto{margin-top:9px;padding:4px 0 0;border:0;background:transparent;color:var(--accent);font:12px/1.3 var(--font-cn);cursor:pointer}
/* 长图跟随皮肤：背景与正文分层，避免墙纸滤镜连正文一起压暗。 */
.longshot-render-stage .longshot-skin-background{
  position:absolute;inset:0;z-index:0;width:100%;height:100%;pointer-events:none;
  background-repeat:no-repeat;background-size:cover;background-position:center top;
}
.longshot-render-stage .longshot-skin-clip{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;background:var(--bg)}
/* 皮肤层只留「便宜」的那几层:底色 / 渐变 / 星点 / 花瓣。
   遮罩(mask)、混合模式(mix-blend-mode)、背景虚化(backdrop-filter)这三样,
   白天五格(晴/悦/专/疑/静)和白墙一条都没用到 —— 对它们这条规则是空操作,出图不变;
   夜格(怒/怒二/欲/空/月光)用得很重,而它们恰好是 <foreignObject> 光栅化最容易
   直接放弃的地方:快渲染器一放弃就得整段重跑兼容路,底栏就卡在「正在截图」。
   这三样写在伪元素上,JS 的行内样式够不着,只能在这里按类统一压平。 */
.longshot-render-stage .longshot-skin-background,
.longshot-render-stage .longshot-skin-background::before,
.longshot-render-stage .longshot-skin-background::after,
.longshot-render-stage .longshot-skin-background *,
.longshot-render-stage .longshot-skin-background *::before,
.longshot-render-stage .longshot-skin-background *::after{
  animation:none!important;transition:none!important;
  -webkit-mask-image:none!important;mask-image:none!important;
  -webkit-mask:none!important;mask:none!important;
  mix-blend-mode:normal!important;background-blend-mode:normal!important;
  -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
}
/* 整块墙纸深拷贝之后,花瓣也跟着进了长图。动画一停它们全叠在顶上(top:0),
   照 body.fx-saver 那条老路给一个静止落点,顺着长图铺开就跟聊天里差不多。 */
.longshot-render-stage .longshot-skin-background .daylight-petals i{top:14%!important}
.longshot-render-stage .longshot-skin-background .daylight-petals i:nth-child(2n){top:41%!important}
.longshot-render-stage .longshot-skin-background .daylight-petals i:nth-child(3n){top:68%!important}
.longshot-render-stage .longshot-skin-background .daylight-petals i:nth-child(5n){top:88%!important}
body[data-mood="rage"] .longshot-render-stage .longshot-skin-background,
body[data-mood="rage2"] .longshot-render-stage .longshot-skin-background,
body[data-mood="desire"] .longshot-render-stage .longshot-skin-background,
body[data-mood="vuoto"] .longshot-render-stage .longshot-skin-background,
body[data-mood="moonlight"] .longshot-render-stage .longshot-skin-background{
  background-image:var(--aurora)!important;background-size:cover
}
/* html2canvas 1.4.1 专用副本：主截图仍保留完整皮肤，兼容路关闭光晕与滤镜。
   【第六趟】这条以前连 background-image 一起 none 掉，夜格的极光就整层没了，
   长图底色成了一块近纯黑 —— 她说的「月光和欲带墙纸的时候底色非常深、有点偏黑，
   不像它们本身的颜色」。现在渐变留着，色标由 index.html 的
   prepareLongshotCanvasFallback 逐个从 oklch 换成 rgb() 再交给 html2canvas。
   ::before/::after 反正被下面那条 content:none 整片关掉，写在这里只是留个形。 */
.longshot-canvas-fallback .longshot-skin-background,
.longshot-canvas-fallback .longshot-skin-background::before,
.longshot-canvas-fallback .longshot-skin-background::after{
  box-shadow:none!important;text-shadow:none!important;filter:none!important
}
.longshot-canvas-fallback-document::before,.longshot-canvas-fallback-document::after,
.longshot-canvas-fallback::before,.longshot-canvas-fallback::after,
.longshot-canvas-fallback *::before,.longshot-canvas-fallback *::after{
  content:none!important;display:none!important;background:none!important;border-color:transparent!important;
  color:transparent!important;box-shadow:none!important;text-shadow:none!important;filter:none!important
}
/* ══════ 白纸模式的记号色 ══════
   【第六趟】把金底/等号强调/素粗全统一成一套固定的紫(取自「疑·雾紫」)，跟皮肤彻底脱钩。
   【第七趟·返工】她验完 13 张图说不对：「墨青即便是白墙，这一段紫色的字也是跟着它，
   颜色和聊天记录是一样的」。白纸要的是**看得清**，不是**都变成紫的**。
   所以这一趟改成「保留每款皮肤自己的色相，只把明度压到米色纸(#fbfaf7)上读得清的深度」。

   分两类：
   ① 白天五格(晴/悦/专/疑/静)的记号色本来就是给浅底调的(#9a7420 / #a3596c / #216a85 /
      #6647b3 / #3a5c8f)，这一趟**一个字都不写**，让它们自己的 body[data-mood=…] 规则原样生效
      —— 这就是她要的「墨青白纸的等号句还是墨青自己的青蓝」。第六趟的那套紫从这里全部撤掉。
   ② 夜格五款(月光/欲/怒/怒二/空)是「浅字压深底」，搬到米色纸上必然读不出，逐格压深：
      取皮肤自己的 OKLCH 色相不动，把明度压到 L≈0.42、彩度补到纸上还看得出是哪一族，
      再算回 sRGB 写成定值(html2canvas 认 hex/rgba，不用再过一遍色彩清洗)。
      色相来源：月光 261.5°(#c6d5ef 实算)、欲 348°、怒 22°、怒二 25°(三个都是皮肤自己的
      --mood-*-hue)、空 chroma=0(按皮肤规矩全灰)。
      Rec.709 亮度：月光 72.7 / 欲 66.9 / 怒 50.5 / 怒二 50.7 / 空 82.0，纸底是 250。
   选择器权重 body[data-mood]+.longshot-render-stage+.longshot-paper+.txt+.md-hl = (0,5,1)，
   压得过 body[data-mood=…] .txt .md-hl 的 (0,3,1)，再加 !important 保底。 */
.longshot-render-stage.longshot-paper{
  --md-quote-bar:rgba(120,120,128,.42)!important;
  --md-quote-bg:rgba(120,120,128,.09)!important;
}
/* —— 月光·白纸：星光银 → 深夜蓝 —— */
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper{
  --md-strong-fg:#2b4678!important; --md-strong-bg:rgba(170,191,226,.22)!important; --md-hl-fg:#2d4b83!important;
}
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .txt .md-strong{
  color:#2b4678!important;background:rgba(170,191,226,.22)!important;
}
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .txt .md-hl{
  color:#2d4b83!important;
  text-shadow:0 0 2px rgba(247,250,255,.95), 0 0 7px rgba(139,165,212,.8), 0 0 16px rgba(121,147,193,.45)!important;
}
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .txt .inner-voice-block{ border-left-color:#2b4678!important; }
/* —— 欲·白纸：粉梅 → 深玫红 —— */
body[data-mood="desire"] .longshot-render-stage.longshot-paper{
  --md-strong-fg:#7a2c58!important; --md-strong-bg:rgba(232,168,199,.22)!important; --md-hl-fg:#832d5f!important;
}
body[data-mood="desire"] .longshot-render-stage.longshot-paper .txt .md-strong{
  color:#7a2c58!important;background:rgba(232,168,199,.22)!important;
}
body[data-mood="desire"] .longshot-render-stage.longshot-paper .txt .md-hl{
  color:#832d5f!important;
  text-shadow:0 0 2px rgba(255,248,251,.95), 0 0 7px rgba(215,136,177,.8), 0 0 16px rgba(195,117,158,.45)!important;
}
body[data-mood="desire"] .longshot-render-stage.longshot-paper .txt .inner-voice-block{ border-left-color:#7a2c58!important; }
/* —— 怒·白纸：血红 —— */
body[data-mood="rage"] .longshot-render-stage.longshot-paper{
  --md-strong-fg:#7f1f26!important; --md-strong-bg:rgba(242,167,164,.22)!important; --md-hl-fg:#8d1925!important;
}
body[data-mood="rage"] .longshot-render-stage.longshot-paper .txt .md-strong{
  color:#7f1f26!important;background:rgba(242,167,164,.22)!important;
}
body[data-mood="rage"] .longshot-render-stage.longshot-paper .txt .md-hl{
  color:#8d1925!important;
  text-shadow:0 0 2px rgba(255,248,248,.95), 0 0 7px rgba(230,133,130,.8), 0 0 16px rgba(210,114,113,.45)!important;
}
body[data-mood="rage"] .longshot-render-stage.longshot-paper .txt .inner-voice-block{ border-left-color:#7f1f26!important; }
/* —— 怒二·白纸：警报红 —— */
body[data-mood="rage2"] .longshot-render-stage.longshot-paper{
  --md-strong-fg:#7f2021!important; --md-strong-bg:rgba(242,167,161,.22)!important; --md-hl-fg:#8d1a1e!important;
}
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .txt .md-strong{
  color:#7f2021!important;background:rgba(242,167,161,.22)!important;
}
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .txt .md-hl{
  color:#8d1a1e!important;
  text-shadow:0 0 2px rgba(255,248,248,.95), 0 0 7px rgba(230,133,126,.8), 0 0 16px rgba(210,115,108,.45)!important;
}
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .txt .inner-voice-block{ border-left-color:#7f2021!important; }
/* —— 空·白纸：灰白族，chroma 全 0 —— */
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper{
  --md-strong-fg:#4d4d4d!important; --md-strong-bg:rgba(190,190,190,.22)!important; --md-hl-fg:#525252!important;
}
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .txt .md-strong{
  color:#4d4d4d!important;background:rgba(190,190,190,.22)!important;
}
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .txt .md-hl{
  color:#525252!important;
  text-shadow:0 0 2px rgba(250,250,250,.95), 0 0 7px rgba(164,164,164,.8), 0 0 16px rgba(146,146,146,.45)!important;
}
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .txt .inner-voice-block{ border-left-color:#4d4d4d!important; }
/* 素粗是「光秃秃的粗」，颜色跟正文走(正文色由 applyLongshotPaperTokens 从 :root 拿的深色 token 给)。
   只在夜格上钉一遍：夜格的正文族色是浅字，万一哪条规则漏进来，纸上就成了一团灰。 */
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .txt .md-bold,
body[data-mood="desire"] .longshot-render-stage.longshot-paper .txt .md-bold,
body[data-mood="rage"] .longshot-render-stage.longshot-paper .txt .md-bold,
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .txt .md-bold,
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .txt .md-bold{ color:#33313a!important;background:none!important; }
/* ══════ 【第七趟·②】欲的白纸为什么不如「紫色心情」的白纸干净 ══════
   查出来是两件，都不在记号色上：
   1) 白天五格每一格都给气泡配了「半透明白卡片 + 一条同族细边」(本文件 359-380 行)，
      夜格五款一条都没有 —— 夜格靠的是整块深色墙纸把字衬出来，不需要卡片。
      白纸模式没有墙纸，于是「疑·雾紫」是白卡片配紫边(她说的干净漂亮)，
      「欲」是光溜溜的字直接躺在米色纸上，没有边界、没有分栏，自然显得散。
   2) 欲那格给**每一句 AI 正文**加了三层粉晕(本文件 286-291 行，她 08-30 点的「淫荡一点」)，
      那是给深梅色墙准备的：深底上是发光，米色纸上就是一圈粉雾把字糊住 —— 就是「发脏」。
      最后一条 AI 消息还挂着 mood-breath-desire-plus 呼吸动画，截图定格在哪一相都不好看。
   两件都只在白纸模式下改：给夜格补上和白天五格同一套卡片(边框用各自的色相)，
   把正文那层氛围光晕关掉。==等号强调== 自己的光晕留着(她说喜欢发光感)，那是记号不是氛围。

   【第八趟·①·她点的】她验完 v176 的 12 张图说：「第 4、5 张是欲的白墙，唯一的地方就是
   它有一个边框，要把边框去掉，宝宝。七八张是月光，它的白墙也是那个框，……最后是它的白墙，
   也是那个框，不行。」说的就是上面第七趟给夜格补的这道 1px 同族细边。
   这一趟**只去边、不去卡片**：半透明白卡片是欲白纸从「发脏」变干净的原因(第七趟②的正解)，
   拿掉卡片等于把第七趟白做一遍；她挑的只是那圈框。
   写成 border:0 而不是删掉声明 —— 基线 styles.css:675/702 的 .row.ai/.row.human .bubble
   本来就是 border:0，这里钉一遍是为了万一别的规则漏进来，纸上也不会再冒出一圈框。
   白天五格(晴/悦/专/疑/静)这一趟**一个字都没动**：她说豆沙粉白纸「很喜欢」，
   那格的边来自本文件 359-380 行的会客厅规则(聊天页和长图共用)，动它就动到聊天页了。 */
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .row.ai .bubble,
body[data-mood="desire"] .longshot-render-stage.longshot-paper .row.ai .bubble,
body[data-mood="rage"] .longshot-render-stage.longshot-paper .row.ai .bubble,
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .row.ai .bubble,
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .row.ai .bubble{
  background:rgba(255,255,255,.44)!important;padding:9px 13px!important;border:0!important;
}
body[data-mood="moonlight"] .longshot-render-stage.longshot-paper .row.human .bubble{ background:rgba(150,172,209,.17)!important;border:0!important;padding:9px 13px!important; }
body[data-mood="desire"] .longshot-render-stage.longshot-paper .row.human .bubble{ background:rgba(212,149,180,.17)!important;border:0!important;padding:9px 13px!important; }
body[data-mood="rage"] .longshot-render-stage.longshot-paper .row.human .bubble{ background:rgba(222,148,145,.17)!important;border:0!important;padding:9px 13px!important; }
body[data-mood="rage2"] .longshot-render-stage.longshot-paper .row.human .bubble{ background:rgba(222,149,142,.17)!important;border:0!important;padding:9px 13px!important; }
body[data-mood="vuoto"] .longshot-render-stage.longshot-paper .row.human .bubble{ background:rgba(171,171,171,.17)!important;border:0!important;padding:9px 13px!important; }
/* 氛围光晕(欲的粉雾、怒的扫描线、月光的字晕…)在白纸上只会把字糊脏，一律关掉；
   动画也关掉，免得定格在呼吸的某一相。记号自己的光晕不在这条里，上面单独给。 */
.longshot-render-stage.longshot-paper .msg--assistant .assistant-msg,
.longshot-render-stage.longshot-paper .row.ai .txt,
.longshot-render-stage.longshot-paper .row.human .txt{
  text-shadow:none!important;animation:none!important;
}
.longshot-render-stage.longshot-paper .msg--assistant .assistant-msg::before,
.longshot-render-stage.longshot-paper .msg--assistant .assistant-msg::after{
  content:none!important;display:none!important;background:none!important;
}
/* ══════ 【第七趟·③】怒 / 怒二「跟随皮肤」导出报 The operation is insecure. ══════
   这是 Safari 的 SecurityError：画布被「污染」之后 toDataURL / toBlob 就抛这一句。
   污染源是这两格独有的那层静噪 —— pelle/mood.css:202-213 给 .chat-wallpaper::after 铺了
   一张**转义(非 base64)的 SVG data-URI**(feTurbulence 灰噪点)。WebKit 上把这种内联 SVG
   画进画布会把画布标成 tainted(html2canvas 的老问题 #1575 / #1758 / PR #2683 记的就是它)，
   之后再 toDataURL 就是 The operation is insecure.。五格夜色里只有怒和怒二用了它，
   所以只有这两格从来出不了图 —— 她说「这两个从来没试过，刚刚试了一下，发现是报错的」。
   白天五格用的也是转义 SVG，但它们画在墙纸的 ::before/::after 上，
   现代 Safari 对**没有 filter 的**内联 SVG 已经不再污染，所以那几格一直是好的。
   修法：长图舞台里把这一层的图整条撤掉(只撤长图里的副本，聊天页原样保留)。
   噪点在长图里本来就是定格的一层灰砂，撤掉之后红世界(::before 的整屏占领)一点没动。 */
body[data-mood="rage"] .longshot-render-stage .longshot-skin-background::after,
body[data-mood="rage2"] .longshot-render-stage .longshot-skin-background::after{
  background-image:none!important;background-color:transparent!important;
}
.longshot-preview{display:none;position:fixed;inset:0;z-index:310;background:var(--bg);flex-direction:column}
.longshot-preview.open{display:flex}
.longshot-preview-top{flex:none;display:flex;align-items:center;gap:10px;padding:calc(10px + env(safe-area-inset-top)) 14px 10px;border-bottom:1px solid var(--hairline);background:var(--composer-bg)}
.longshot-preview-top strong{flex:1;text-align:center;color:var(--text);font:600 16px/1.3 var(--font-cn)}
.longshot-preview-top button,.longshot-preview-top a{border:0;border-radius:14px;padding:9px 13px;background:var(--row-press);color:var(--text);font:600 13px/1.2 var(--font-cn);text-decoration:none;cursor:pointer}
.longshot-preview-top .longshot-share{background:var(--accent);color:#fff}
.longshot-preview-scroll{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;padding:0;background:transparent;text-align:center}
.longshot-preview-scroll img{display:block;width:100%;max-width:none;height:auto;margin:0;background:transparent;box-shadow:none}
.longshot-preview-tip{flex:none;padding:8px 14px calc(8px + env(safe-area-inset-bottom));background:var(--composer-bg);color:var(--text-faint);font:11px/1.5 var(--font-cn);text-align:center}
.longshot-render-stage .row.ai::before,.longshot-render-stage .row.human::after{
    filter:none!important;-webkit-filter:none!important;opacity:1!important;image-rendering:auto!important;
  }

/* 心里话(<inner>…</inner>,Shu 补丁):气泡顶上一小块独白 */
.txt .inner-voice-block{ margin:0 0 10px; padding:8px 11px 8px 12px; border-left:3px solid var(--md-strong-fg,#8a5a12); border-radius:0 10px 10px 0; background:rgba(127,127,128,.08); font-style:normal; font-size:.95em; line-height:1.6; opacity:.9; }
.txt .inner-voice-block .inner-voice-label{ display:block; margin-bottom:3px; font-style:normal; font-size:.78em; letter-spacing:.08em; opacity:.6; }
.txt .inner-voice-block.inner-voice-live::after{ content:"…"; opacity:.5; }

/* Shu 原版消息操作：主层保持短，低频操作收进“更多”。 */
.msg-menu-clone{max-height:42vh;overflow:hidden}
.msg-menu-actions{max-height:min(72vh,560px);overflow-y:auto;border-radius:13px}
.msg-more-group{display:flex;flex-direction:column}
.msg-more-group[hidden]{display:none}
.msg-menu-sep{height:1px;margin:4px 8px;background:var(--hairline)}

/* 手动未读：只由用户在长按菜单里开关，不因看见或滚过而自动清除。 */
.unread-dot{position:absolute;right:-5px;top:-5px;width:10px;height:10px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);box-shadow:0 2px 6px rgba(24,46,67,.18);pointer-events:none}
.unread-badge{position:fixed;right:max(12px,var(--side-pad));top:calc(var(--header-h) + env(safe-area-inset-top) + 49px);z-index:124;display:none;align-items:center;justify-content:center;min-width:25px;height:25px;padding:0 7px;border:0;border-radius:999px;background:var(--accent);color:#fff;font:600 12px/1 var(--font-en),var(--font-cn);box-shadow:var(--soft-shadow);cursor:pointer}
.unread-badge.show{display:inline-flex}
.unread-list{position:fixed;z-index:251;display:flex;flex-direction:column;width:min(278px,calc(100vw - 24px));max-height:min(46vh,340px);padding:5px;border-radius:13px;background:var(--composer-bg);border:1px solid var(--hairline);box-shadow:var(--shadow);backdrop-filter:blur(20px) saturate(1.4);opacity:0;transform:translateY(8px) scale(.96);transform-origin:top right;transition:opacity .2s var(--ease-soft),transform .26s var(--ease-soft)}
.unread-list[hidden]{display:none}.unread-list.open{opacity:1;transform:none}
.unread-list-title{padding:6px 10px 5px;color:var(--text-soft);font:600 11px/1.4 var(--font-cn)}
.unread-list-body{overflow-y:auto;-webkit-overflow-scrolling:touch}
.unread-item{appearance:none;border:0;background:transparent;color:var(--text);display:flex;align-items:baseline;gap:8px;width:100%;padding:9px 10px;border-radius:9px;font:13px/1.4 var(--font-cn);text-align:left;cursor:pointer}
.unread-item:active{background:var(--row-press)}
.unread-item-text{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.unread-item-time{flex:none;color:var(--text-faint);font:10px/1.4 var(--font-en),var(--font-cn)}

/* 本机单条置顶，放在现有“屏蔽特效 / 我们的记忆”下一行，避免按钮重叠。 */
.pin-bar{position:fixed;z-index:123;left:max(12px,var(--side-pad));right:calc(max(12px,var(--side-pad)) + 38px);top:calc(var(--header-h) + env(safe-area-inset-top) + 49px);height:28px;padding:0 4px 0 9px;border:1px solid var(--card-line);border-radius:12px;background:color-mix(in srgb,var(--panel-bg) 92%,transparent);color:var(--text);display:flex;align-items:center;gap:7px;box-shadow:var(--soft-shadow);backdrop-filter:blur(12px);font:12px/1.2 var(--font-cn)}
.pin-bar[hidden]{display:none}.pin-bar .pin-ico{flex:none}.pin-bar .pin-text{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pin-bar .pin-x{flex:none;display:grid;place-items:center;width:25px;height:25px;border-radius:50%;font-size:17px;color:var(--text-faint)}
.pin-panel{position:fixed;z-index:126;left:max(12px,var(--side-pad));right:max(12px,var(--side-pad));top:calc(var(--header-h) + env(safe-area-inset-top) + 82px);max-height:55vh;display:flex;flex-direction:column;border:1px solid var(--card-line);border-radius:16px;background:var(--card-bg);box-shadow:0 14px 34px rgba(24,46,67,.18);overflow:hidden}.pin-panel[hidden]{display:none}
.pin-panel-top{flex:none;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px 9px 14px;border-bottom:1px solid var(--hairline);color:var(--text-soft);font:12px/1.3 var(--font-cn)}.pin-panel-top button{border:0;border-radius:12px;padding:7px 10px;margin-left:5px;background:var(--row-press);color:var(--text);font:600 12px/1.2 var(--font-cn)}
.pin-panel-body{overflow:auto;padding:13px 15px 18px;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);font:15px/1.75 var(--font-cn);-webkit-user-select:text;user-select:text}

/* “选取文字”在独立全屏页交给 iOS 原生选择手柄。 */
.picktext{position:fixed;inset:0;z-index:1600;background:var(--bg);display:none;flex-direction:column}.picktext[aria-hidden="false"]{display:flex}
.picktext-top{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:calc(env(safe-area-inset-top) + 10px) 14px 10px;border-bottom:1px solid var(--hairline);background:var(--composer-bg)}
.picktext-top strong{font-size:16px;color:var(--text)}.picktext-top button{border:0;background:var(--row-press);border-radius:10px;padding:8px 14px;font:15px/1.2 var(--font-cn);color:var(--text)}
.picktext-body{flex:1;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px calc(env(safe-area-inset-bottom) + 30px)}.picktext-body pre{margin:0;white-space:pre-wrap;word-break:break-word;font:17px/1.9 var(--font-cn);color:var(--text);-webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important}

/* 长图默认不带头像；用户切到“带”时才恢复真实头像。 */
html .longshot-render-stage .row.ai{padding-left:12px!important;padding-right:12px!important}
html .longshot-render-stage .row .message-avatar{display:none!important}
html .longshot-render-stage.longshot-with-avatar .row.ai{padding-left:calc(var(--avatar-size) + 12px)!important}
html .longshot-render-stage.longshot-with-avatar .row .message-avatar{display:block!important;filter:none!important;-webkit-filter:none!important;opacity:1!important;image-rendering:auto!important}
.longshot-render-stage .longshot-sticker-line{margin-block:0!important;min-height:0!important;line-height:inherit!important}
@media (max-width:540px){
  .message-select-toolbar{gap:4px;padding-left:8px;padding-right:8px}
  .message-select-toolbar button{padding:9px 6px;font-size:12px;white-space:nowrap}
  .message-select-toolbar .select-count{font-size:12px;white-space:nowrap}
  .longshot-preview-top{gap:6px}.longshot-preview-top button,.longshot-preview-top a{padding:8px 9px;font-size:12px}
}
