/* ambience.css —— 氛围引擎装饰层（v0.23.69 P1，规格书唯一事实源）
   铁律：只动背景/插画/点缀——文字颜色、对比度、字号、布局、组件结构一寸不动；
   降级链永不破图（地标缺失=纯色渐变）；性能：粒子 ≤12 纯 CSS 动画，prefers-reduced-motion 全静止，
   Save-Data 降到纯色兜底；暗色模式有对应压暗变体；运行时零 AI、零外部图床（全本地自托管）。 */

/* ---------- ① 四季背景渐变（登录页全屏 / 页头轻带） ---------- */
:root{
  --amb-sky1:#FBF7EE; --amb-sky2:#FBF7EE;            /* 季节渐变两端（默认=品牌纸底） */
  --amb-accent:#2E6B4F;                              /* 当季点缀色（取品牌色谱，不新造） */
  --amb-lm-op:.2;                                    /* 地标水印不透明度（15~25% 规格书口径） */
  --amb-card-tint:transparent;
}
html[data-amb-season="spring"]{--amb-sky1:#EAF3E6;--amb-sky2:#FBF7EE;--amb-accent:#2E6B4F;--amb-card-tint:rgba(46,107,79,.06)}
html[data-amb-season="summer"]{--amb-sky1:#F7EFD8;--amb-sky2:#FBF7EE;--amb-accent:#8A5A12;--amb-card-tint:rgba(138,90,18,.06)}
html[data-amb-season="autumn"]{--amb-sky1:#F3E8D3;--amb-sky2:#FBF0E3;--amb-accent:#B03A2E;--amb-card-tint:rgba(176,58,46,.05)}
html[data-amb-season="winter"]{--amb-sky1:#E8EEF4;--amb-sky2:#F7F9FB;--amb-accent:#1F4E79;--amb-card-tint:rgba(31,78,121,.06)}

/* E1 四时流转：仅背景层渐变偏移（不动任何文字色） */
html[data-amb-part="dawn"]{--amb-sky1:color-mix(in srgb, var(--amb-sky1) 78%, #F7E7C3)}
html[data-amb-part="day"]{/* 正午=本色 */}
html[data-amb-part="dusk"]{--amb-sky1:color-mix(in srgb, var(--amb-sky1) 75%, #EFC9A8);--amb-sky2:color-mix(in srgb, var(--amb-sky2) 88%, #F2D8C2)}
html[data-amb-part="night"]{--amb-sky1:#1C2433;--amb-sky2:#242E40;--amb-lm-op:.28}
/* 暗色模式：装饰层自动压暗（不亮瞎） */
html[data-theme="dark"]{--amb-lm-op:.16}
html[data-theme="dark"][data-amb-season]{--amb-sky1:#232B38;--amb-sky2:#1E2530}
html[data-theme="dark"][data-amb-part="night"]{--amb-sky1:#171D28;--amb-sky2:#1B2230}

/* ---------- ② 登录页全屏氛围（渐变+地标水印+粒子） ---------- */
/* v0.23.73 P5 修复：业务页 html/body 自带不透明底色会把 z-index:-1 的 .amb-bg 整个盖死——
   全屏氛围态下剥掉 html/body 底色让氛围层透出（指针事件本就 none，内容层级不受影响） */
html:has(> body.amb-full), html:has(> body.amb-full) > body{background:transparent !important}
body.amb-full .login-stage{background:transparent !important}   /* P5 修复：登录舞台自带不透明底色同盖 */
.amb-bg{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;
  background:linear-gradient(160deg, var(--amb-sky1), var(--amb-sky2))}
.amb-landmark{position:absolute;left:50%;bottom:0;transform:translateX(-50%);
  width:min(920px,96vw);opacity:var(--amb-lm-op);filter:grayscale(.35) contrast(.92)}
.amb-landmark img{width:100%;display:block}
html[data-amb-part="night"] .amb-landmark{filter:grayscale(.6) brightness(1.12)}

/* 粒子层（≤12 个，纯 CSS 动画） */
.amb-particles{position:absolute;inset:0}
.amb-particles i{position:absolute;display:block;width:9px;height:9px;border-radius:50%;
  background:var(--amb-accent);opacity:.5;animation:amb-fall 11s linear infinite}
html[data-amb-season="summer"] .amb-particles i{border-radius:50%;box-shadow:0 0 10px 2px rgba(138,90,18,.35);animation-name:amb-float}
html[data-amb-season="autumn"] .amb-particles i{border-radius:0 60% 60% 60%;animation-name:amb-sway}
html[data-amb-season="winter"] .amb-particles i{background:#FFF;opacity:.85;box-shadow:0 0 3px rgba(31,78,121,.25)}
.amb-particles i:nth-child(1){left:6%;animation-delay:-1s}
.amb-particles i:nth-child(2){left:14%;animation-delay:-5s;animation-duration:13s}
.amb-particles i:nth-child(3){left:23%;animation-delay:-8s}
.amb-particles i:nth-child(4){left:31%;animation-delay:-3s;animation-duration:9s}
.amb-particles i:nth-child(5){left:40%;animation-delay:-10s}
.amb-particles i:nth-child(6){left:49%;animation-delay:-6s;animation-duration:12s}
.amb-particles i:nth-child(7){left:57%;animation-delay:-2s}
.amb-particles i:nth-child(8){left:65%;animation-delay:-9s;animation-duration:10s}
.amb-particles i:nth-child(9){left:73%;animation-delay:-4s}
.amb-particles i:nth-child(10){left:81%;animation-delay:-11s;animation-duration:14s}
.amb-particles i:nth-child(11){left:88%;animation-delay:-7s}
.amb-particles i:nth-child(12){left:95%;animation-delay:-12s;animation-duration:12s}
@keyframes amb-fall{0%{top:-4%;transform:translateX(0) rotate(0)}100%{top:104%;transform:translateX(4vw) rotate(300deg)}}
@keyframes amb-sway{0%{top:-4%;transform:translateX(0) rotate(0)}50%{transform:translateX(3vw) rotate(160deg)}100%{top:104%;transform:translateX(-2vw) rotate(320deg)}}
@keyframes amb-float{0%{top:104%;transform:translateY(0) scale(.8)}50%{transform:translateY(-46vh) scale(1.05)}100%{top:-4%;transform:translateY(-100vh) scale(.8)}}

/* ---------- ③ 页头/工作台氛围（渐变轻带+卡片边角点缀，正文区一寸不动） ---------- */
html[data-amb-on="1"] .page-h{position:relative;background:linear-gradient(90deg, var(--amb-card-tint), transparent 55%);border-radius:10px}
html[data-amb-on="1"] .page-h::after{content:"";position:absolute;right:10px;top:8px;width:26px;height:26px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%, var(--amb-accent), transparent 70%);opacity:.28;pointer-events:none}
html[data-amb-on="1"] .card{border-color:color-mix(in srgb, var(--amb-accent) 14%, var(--bd))}

/* ---------- ⑤ P2 节日主题粒子（v0.23.70；生日优先级最高盖过节日——bday 时不设 data-amb-fest） ---------- */
/* 春节：中国红金灯笼（红圆点+金光晕） */
html[data-amb-fest="cny"]{--amb-accent:#B03A2E;--amb-card-tint:rgba(176,58,46,.07)}
html[data-amb-fest="cny"] .amb-particles i{background:#B03A2E;box-shadow:0 0 8px 2px rgba(217,164,65,.55);border-radius:45% 45% 50% 50%}
/* 圣诞：白雪+松绿金 */
html[data-amb-fest="christmas"]{--amb-accent:#2E6B4F;--amb-card-tint:rgba(46,107,79,.07)}
html[data-amb-fest="christmas"] .amb-particles i{background:#FFF;opacity:.9;box-shadow:0 0 3px rgba(46,107,79,.3)}
/* 新年：金色礼花（上升光点） */
html[data-amb-fest="newyear"]{--amb-accent:#8A5A12;--amb-card-tint:rgba(138,90,18,.07)}
html[data-amb-fest="newyear"] .amb-particles i{background:#D9A441;box-shadow:0 0 10px 2px rgba(217,164,65,.6);animation-name:amb-float}
/* 感恩节：暖橙麦穗（旋落） */
html[data-amb-fest="thanksgiving"]{--amb-accent:#B03A2E;--amb-card-tint:rgba(176,58,46,.06)}
html[data-amb-fest="thanksgiving"] .amb-particles i{background:#C77B2E;border-radius:0 60% 60% 60%;animation-name:amb-sway}
/* 狂欢节：彩带（三色轮换小方块） */
html[data-amb-fest="carnival"]{--amb-accent:#8A5A12;--amb-card-tint:rgba(138,90,18,.06)}
html[data-amb-fest="carnival"] .amb-particles i{border-radius:2px;animation-name:amb-sway}
html[data-amb-fest="carnival"] .amb-particles i:nth-child(3n){background:#2E6B4F}
html[data-amb-fest="carnival"] .amb-particles i:nth-child(3n+1){background:#B03A2E}
html[data-amb-fest="carnival"] .amb-particles i:nth-child(3n+2){background:#D9A441}
/* 亡灵节：万寿菊橙紫 */
html[data-amb-fest="marigold"]{--amb-accent:#C77B2E;--amb-card-tint:rgba(199,123,46,.07)}
html[data-amb-fest="marigold"] .amb-particles i{background:#D98E2B;box-shadow:0 0 6px 1px rgba(107,63,160,.35)}
html[data-amb-fest="marigold"] .amb-particles i:nth-child(4n){background:#6B3FA0}
/* 啤酒节：麦芽金+蓝白菱格感（金/白轮换） */
html[data-amb-fest="malt"]{--amb-accent:#8A5A12;--amb-card-tint:rgba(138,90,18,.07)}
html[data-amb-fest="malt"] .amb-particles i{background:#D9A441;border-radius:2px}
html[data-amb-fest="malt"] .amb-particles i:nth-child(3n){background:#F4F7FB;box-shadow:0 0 3px rgba(31,78,121,.35)}
/* 黑五：深底金纹（促销联动时再加强边框） */
html[data-amb-fest="bf"]{--amb-accent:#8A5A12;--amb-sky1:#EFE6D2;--amb-card-tint:rgba(138,90,18,.08)}
html[data-amb-fest="bf"] .amb-particles i{background:#8A5A12;box-shadow:0 0 8px 2px rgba(217,164,65,.5)}
html[data-amb-promo="1"] .card{border-color:color-mix(in srgb, #8A5A12 38%, var(--bd))}
/* 生日：气球（多色上升，盖过一切主题） */
html[data-amb-bday="1"]{--amb-accent:#B03A2E;--amb-card-tint:rgba(176,58,46,.07)}
html[data-amb-bday="1"] .amb-particles i{border-radius:50% 50% 48% 52%;animation-name:amb-float;animation-duration:9s}
html[data-amb-bday="1"] .amb-particles i:nth-child(4n){background:#B03A2E}
html[data-amb-bday="1"] .amb-particles i:nth-child(4n+1){background:#D9A441}
html[data-amb-bday="1"] .amb-particles i:nth-child(4n+2){background:#2E6B4F}
html[data-amb-bday="1"] .amb-particles i:nth-child(4n+3){background:#1F4E79}

/* ---------- ⑥ P2 横幅层（门户页头一行，可关闭；优先级叠放：生日→周年→节日→旅途） ---------- */
.amb-banners{position:fixed;top:8px;left:50%;transform:translateX(-50%);z-index:900;
  display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none;max-width:94vw}
.amb-ban{pointer-events:auto;display:flex;align-items:center;gap:10px;padding:6px 12px;border-radius:999px;
  background:var(--card,#FFFDF6);border:1px solid color-mix(in srgb, var(--amb-accent) 35%, var(--bd));
  box-shadow:0 2px 10px rgba(31,78,121,.12);font-size:12.5px;color:var(--tx);white-space:nowrap;max-width:94vw;overflow:hidden;text-overflow:ellipsis}
.amb-ban button{border:0;background:transparent;color:var(--tx2,#8a8a8a);cursor:pointer;font-size:10.5px;padding:2px 4px;border-radius:50%}
.amb-ban button:hover{color:var(--tx)}
.amb-ban-bday{border-color:rgba(176,58,46,.45);background:linear-gradient(90deg, rgba(176,58,46,.08), var(--card,#FFFDF6))}
.amb-ban-anniv{border-color:rgba(138,90,18,.45);background:linear-gradient(90deg, rgba(217,164,65,.12), var(--card,#FFFDF6))}
.amb-ban-travel{border-color:rgba(31,78,121,.4)}
/* E7 节气小标签（页头角落，不喧哗） */
.amb-st-chip{margin-left:auto;font-size:10.5px;color:var(--amb-accent);border:1px solid color-mix(in srgb, var(--amb-accent) 40%, var(--bd));
  border-radius:999px;padding:1px 8px;opacity:.85}
@media (max-width:760px){
  .amb-banners{top:4px;width:96vw}
  .amb-ban{font-size:11.5px;padding:5px 10px}
}

/* ---------- ⑦ P3 天气叠加/月相/彩蛋/工厂角落（v0.23.71） ---------- */
/* E2 雨：斜细点快速下落（与季节/节日粒子共存于同一层——覆盖形状与动画） */
html[data-amb-wx="rain"] .amb-particles i{width:2px;height:12px;border-radius:2px;background:#7A92AE;opacity:.55;
  box-shadow:none;animation-name:amb-rain;animation-duration:1.6s}
@keyframes amb-rain{0%{top:-5%;transform:translateX(0) rotate(12deg)}100%{top:105%;transform:translateX(-3vw) rotate(12deg)}}
/* E2 雪：慢速大白点摇摆落（比冬季雪更慢更实） */
html[data-amb-wx="snow"] .amb-particles i{background:#FFF;opacity:.95;box-shadow:0 0 4px rgba(31,78,121,.3);animation-duration:7s}
/* E2 晴：暖金光斑缓慢上浮 */
html[data-amb-wx="clear"] .amb-particles i{background:#D9A441;opacity:.4;box-shadow:0 0 14px 4px rgba(217,164,65,.35);animation-name:amb-float;animation-duration:14s}

/* E3 月相：登录页全屏夜空右上角（SVG 由 ambience.js 按真实月相生成） */
.amb-moon{position:absolute;top:7%;right:9%;width:min(72px,12vw);height:min(72px,12vw);opacity:.9;
  filter:drop-shadow(0 0 14px rgba(244,233,200,.35))}

/* E4 彩蛋：涟漪+音名浮字 */
.amb-ripple{position:fixed;z-index:950;pointer-events:none;transform:translate(-50%,-50%)}
.amb-ripple i{display:block;width:14px;height:14px;margin:0 auto;border-radius:50%;
  border:2px solid var(--amb-accent);animation:amb-rip 1.2s ease-out forwards}
.amb-ripple b{display:block;margin-top:6px;text-align:center;font-size:12.5px;color:var(--amb-accent);
  text-shadow:0 1px 4px rgba(255,255,255,.6);animation:amb-noteup 1.5s ease-out forwards}
@keyframes amb-rip{0%{transform:scale(.4);opacity:.85}100%{transform:scale(6);opacity:0}}
@keyframes amb-noteup{0%{transform:translateY(0);opacity:.9}100%{transform:translateY(-46px);opacity:0}}
.amb-snd{position:fixed;right:12px;bottom:12px;z-index:951;width:34px;height:34px;border-radius:50%;
  border:1px solid color-mix(in srgb, var(--amb-accent) 35%, var(--bd));background:var(--card,#FFFDF6);
  cursor:pointer;font-size:15px;line-height:1;opacity:.75}
.amb-snd:hover{opacity:1}

/* E9 此刻的工厂：左下角小字（登录后门户/后台通用，不喧哗） */
.amb-factory{position:fixed;left:12px;bottom:10px;z-index:900;font-size:10.5px;color:var(--tx2,#8a8577);
  opacity:.75;pointer-events:none}
@media (max-width:760px){ .amb-factory{display:none} }   /* 窄屏不占地（移动端适配铁律） */

/* ---------- ⑧ P4 里程碑礼花/时光册/环境音（v0.23.72） ---------- */
/* E6 礼花层（一次性 2.8s，指针穿透） */
.amb-confetti{position:fixed;inset:0;z-index:990;pointer-events:none;overflow:hidden}
.amb-confetti i{position:absolute;top:-3%;width:10px;height:14px;opacity:.95;animation:amb-confetti-fall linear forwards}
@keyframes amb-confetti-fall{0%{transform:translateY(0) rotate(0)}100%{transform:translateY(108vh) rotate(720deg)}}
/* E6 里程碑徽章（下单成功页卡内） */
.milestone-badge{margin:10px auto 0;padding:8px 18px;border-radius:12px;text-align:center;max-width:340px;
  background:linear-gradient(120deg, rgba(217,164,65,.18), rgba(176,58,46,.10));
  border:1px solid rgba(138,90,18,.45);color:#8A5A12;font-size:13.5px;font-weight:600}
.milestone-badge .ms-sub{display:block;font-size:10.5px;font-weight:400;color:var(--tx2,#8a8577);margin-top:2px}
/* E10 明信片墙（我的信息侧栏） */
.pc-wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.pc-card{border:1px solid var(--bd);border-radius:10px;overflow:hidden;text-align:center;padding-bottom:6px;background:var(--card,#FFFDF6)}
.pc-card .pc-art{height:44px;margin-bottom:5px}
.pc-card b{display:block;font-size:10.5px;padding:0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pc-card .hint{font-size:9px}
/* 明信片微缩氛围渲染（与季节/节日色谱同源） */
.pc-season-spring .pc-art{background:linear-gradient(160deg,#EAF3E6,#FBF7EE)}
.pc-season-summer .pc-art{background:linear-gradient(160deg,#F7EFD8,#FBF7EE)}
.pc-season-autumn .pc-art{background:linear-gradient(160deg,#F3E8D3,#FBF0E3)}
.pc-season-winter .pc-art{background:linear-gradient(160deg,#E8EEF4,#F7F9FB)}
.pc-festival-cny .pc-art{background:linear-gradient(160deg,#B03A2E33,#D9A44122)}
.pc-festival-christmas .pc-art{background:linear-gradient(160deg,#2E6B4F2E,#FFFFFF)}
.pc-festival-newyear .pc-art{background:linear-gradient(160deg,#D9A44140,#FBF7EE)}
.pc-festival-blackfriday .pc-art{background:linear-gradient(160deg,#3A3325,#8A5A1266)}
.pc-festival-thanksgiving .pc-art{background:linear-gradient(160deg,#C77B2E33,#FBF7EE)}
.pc-festival-carnival .pc-art{background:linear-gradient(160deg,#B03A2E2E,#2E6B4F2E,#D9A4412E)}
.pc-festival-marigold .pc-art{background:linear-gradient(160deg,#D98E2B33,#6B3FA022)}
.pc-festival-malt .pc-art{background:linear-gradient(160deg,#D9A44133,#F4F7FB)}
.pc-birthday-bday .pc-art{background:linear-gradient(160deg,#B03A2E2E,#D9A4412E,#2E6B4F2E)}
.pc-card[class*="pc-anniversary"] .pc-art{background:linear-gradient(160deg,#D9A44130,#8A5A1218)}
/* E11 环境音小喇叭（页头右侧，与节气 chip 同排） */
.amb-envsnd{margin-left:8px;border:1px solid color-mix(in srgb, var(--amb-accent) 40%, var(--bd));background:transparent;
  border-radius:999px;padding:1px 8px;cursor:pointer;font-size:10.5px;line-height:1.6}
@media (prefers-reduced-motion: reduce){
  .amb-confetti i{animation-duration:.01s !important;opacity:0}
}

/* ---------- ④ 降级与无障碍（铁律） ---------- */
html[data-amb-on="0"] .amb-bg, html[data-amb-on="0"] .amb-landmark{display:none}   /* 用户关闭=纯色兜底 */
@media (prefers-reduced-motion: reduce){
  .amb-particles i{animation:none !important;top:6% !important;opacity:.25}      /* 减弱动效=全静止 */
}
@media (prefers-reduced-data: reduce){
  .amb-landmark{display:none}                                                     /* Save-Data=不要背景图 */
}
/* 移动端：地标锚下中不压表单不压按钮，窄屏等比缩小不裁主体 */
@media (max-width:760px){
  .amb-landmark{width:130vw;left:50%;bottom:-2vw}
  html[data-amb-on="1"] .page-h::after{display:none}
}
