/* 2026-10-03 客户祭台返修 — 最终祭台层（仅 .visit 祭拜页；家属端/后台预览不受影响）。
   位置见 altar-revision-layout.css（脚本生成）；本文件负责外观、入场与燃烧动画。
   参照 docs/customer-reference/2026-10-03-客户祭台参考图.jpg：大红高烛、红苹果果盘、混色鲜花、真实焚香烟。 */

/* ---------- 通用：新陈设的图像层与接触阴影 ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.candle,.fruit-plate,.flower-gift,.wreath-gift){background:none!important;filter:none!important;box-shadow:none!important;border:0;border-radius:0;aspect-ratio:auto}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.candle,.fruit-plate,.flower-gift,.wreath-gift)::before{content:"";display:block;position:absolute;inset:auto;left:0;top:0;width:100%;height:100%;margin:0;background-color:transparent;background-repeat:no-repeat;background-position:center bottom;background-size:100% 100%;clip-path:none;transform:none;transform-origin:50% 100%;filter:none;opacity:1;z-index:0;border-radius:0}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.candle,.fruit-plate,.flower-gift,.wreath-gift,.eternal-lamp,.paper-gift,.floating-lantern,.censer)::after{content:"";display:block;position:absolute;inset:auto;left:6%;top:92%;width:88%;height:12%;margin:0;background:radial-gradient(closest-side,rgba(18,10,4,.5),rgba(18,10,4,0))!important;clip-path:none;transform:none;filter:none;opacity:1;border-radius:50%;z-index:-2}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.eternal-lamp,.paper-gift,.floating-lantern,.censer)::before{clip-path:none!important}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer::after{left:2%;top:86%;width:96%;height:20%}
html body .visit .shrine-stage .ritual-effects .altar-revision .candle::after{left:-10%;top:93%;width:120%;height:9%}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.flower-gift,.wreath-gift)::after{left:12%;top:95%;width:76%;height:7%}

/* ---------- 大红蜡烛 + 自然火焰（出现 → 点燃） ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .candle::before{background-image:url('/assets/altar-candle-red.svg');animation:altar-rise .7s cubic-bezier(.2,.7,.3,1) both}
html body .visit .shrine-stage .ritual-effects .altar-revision .candle .flame{display:block;position:absolute;left:50%;top:auto;bottom:88.6%;width:30%;height:auto;aspect-ratio:1/2.3;margin:0;translate:-50% 0;border:0;border-radius:50% 50% 45% 45%/64% 64% 36% 36%;background:radial-gradient(ellipse 60% 55% at 50% 74%,#fffbea 0 22%,#ffe08a 36%,#ffad3d 58%,rgba(255,110,30,.55) 74%,rgba(255,90,20,0) 86%);box-shadow:0 0 8px 3px rgba(255,176,82,.38),0 0 22px 9px rgba(255,140,50,.14);filter:blur(.2px);opacity:1;transform-origin:50% 92%;animation:altar-ignite .6s .75s ease-out both,altar-flicker 2.4s 1.35s ease-in-out infinite alternate;z-index:2}
html body .visit .shrine-stage .ritual-effects .altar-revision .candle .flame::after{content:"";position:absolute;left:34%;width:32%;bottom:4%;height:24%;border-radius:50%;background:radial-gradient(closest-side,rgba(110,150,255,.55),rgba(110,150,255,0));display:block}
html body .visit .shrine-stage .ritual-effects .altar-revision .candle-right .flame{animation-delay:.85s,1.6s;animation-duration:.6s,2.9s}

/* ---------- 香炉 + 完整高香（出现 → 香头点亮 → 起烟） ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .censer{isolation:isolate}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks{position:absolute;display:block;left:var(--incense-anchor,50%);right:auto;top:auto;bottom:60%;width:16px;height:var(--incense-full,40px);margin:0;transform:none;translate:-50% 0;rotate:var(--incense-lean,0deg);transform-origin:50% 100%;z-index:-1;animation:altar-incense-in .6s ease-out both}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i{position:absolute;display:block;left:50%;bottom:0;top:auto;width:2px;margin:0 0 0 -1px;height:calc((var(--incense-handle,.3) + (1 - var(--incense-handle,.3)) * var(--burn,1)) * 100%);border-radius:1px 1px 0 0;background:linear-gradient(to top,#8c1d21 0,#bb3430 calc(var(--incense-handle,.3) * var(--incense-full,40px)),#714529 calc(var(--incense-handle,.3) * var(--incense-full,40px)),#80553a 100%);box-shadow:none;transform-origin:50% 100%}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(1){transform:translateX(-4px) rotate(-1deg);height:calc((var(--incense-handle,.3) + (1 - var(--incense-handle,.3)) * var(--burn,1)) * 96%)}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(3){transform:translateX(4px) rotate(1deg);height:calc((var(--incense-handle,.3) + (1 - var(--incense-handle,.3)) * var(--burn,1)) * 97%)}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks .ember{position:absolute;display:block;left:50%;top:-2px;width:3.2px;height:4.6px;translate:-50% 0;border-radius:50%;background:radial-gradient(circle at 50% 62%,#fff4c8 0 18%,#ffa040 44%,#cf461b 74%,#5c2a1a 100%);box-shadow:0 0 4px 1.5px rgba(255,122,42,.8),0 0 10px 3px rgba(255,106,26,.28);animation:altar-ember-on .5s .7s ease-out both,altar-ember-breathe 3.2s 1.2s ease-in-out infinite alternate}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(2) .ember{animation-delay:.78s,1.6s}
html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(3) .ember{animation-delay:.86s,2.1s}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.incense-smoke,.censer-bowl,.censer-foot){display:none}

/* ---------- 红苹果果盘（出现 → 落定祭台） ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .fruit-plate::before{background-image:url('/assets/altar-fruit-apples.svg');animation:altar-settle .85s cubic-bezier(.3,.7,.35,1) both}
html body .visit .shrine-stage .ritual-effects .altar-revision .fruit-plate::after{animation:altar-shadow-settle .85s ease-out both}
html body .visit .shrine-stage .ritual-effects .altar-revision .fruit-plate :is(i,b){display:none}

/* ---------- 鲜花：祭台花束 + 落地花篮；花圈以白菊花篮陈设（出现 → 自然落定） ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .flower-gift.flower-altar::before{background-image:url('/assets/altar-bouquet-mixed.svg');animation:altar-bloom .95s cubic-bezier(.25,.7,.3,1) both}
html body .visit .shrine-stage .ritual-effects .altar-revision .flower-gift.flower-floor::before{background-image:url('/assets/altar-floral-stand-mixed.svg');animation:altar-bloom 1s .1s cubic-bezier(.25,.7,.3,1) both}
html body .visit .shrine-stage .ritual-effects .altar-revision .wreath-gift::before{background-image:url('/assets/altar-floral-stand-white.svg');animation:altar-bloom 1s .15s cubic-bezier(.25,.7,.3,1) both}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.flower-gift,.wreath-gift) svg{display:none}
html body .visit .shrine-stage .ritual-effects .altar-revision .flower-gift.flower-altar{z-index:4}
html body .visit .shrine-stage .ritual-effects .altar-revision :is(.flower-gift.flower-floor,.wreath-gift){z-index:7}

/* ---------- 香炉同层成对长明灯、烧纸、祈福灯 ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .eternal-lamp{z-index:5}
html body .visit .shrine-stage .ritual-effects .altar-revision .eternal-lamp::before{left:0!important;top:0!important;width:100%!important;height:100%!important}
html body .visit .shrine-stage .ritual-effects .altar-revision .paper-gift{z-index:7}
@media (max-width:700px){
  /* 手机取消地面小灯及呈灯形的地面祭纸炉（仅视觉；权益、DOM、商品不变） */
  html body .visit .shrine-stage .ritual-effects .altar-revision :is(.floating-lantern,.paper-gift){display:none!important}
  html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks{width:12px}
  html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i{width:1.6px;margin-left:-.8px}
  html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(1){transform:translateX(-3px) rotate(-1deg)}
  html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks i:nth-child(3){transform:translateX(3px) rotate(1deg)}
  html body .visit .shrine-stage .ritual-effects .altar-revision .censer .incense-sticks .ember{width:2.6px;height:3.8px}
}

/* ---------- 刷新时已在场的祭品不重复入场 ---------- */
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled::before,
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled::after,
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled .incense-sticks,
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled .ember{animation:none!important}
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled .ember{animation:altar-ember-breathe 3.2s ease-in-out infinite alternate!important}
html body .visit .shrine-stage .ritual-effects .altar-revision .is-settled .flame{animation:altar-flicker 2.4s ease-in-out infinite alternate!important}

/* ---------- 焚香烟雾：香头近段集中 → 上升翻卷 → 扩散消散；避开遗像与人物信息 ---------- */
.visit .incense-plume{display:none;position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:8;overflow:hidden;mix-blend-mode:normal;--smoke-ink:#d7cdc0;animation:plume-in 1.6s 1.25s ease-out both}
.visit :is(.scene-4,.scene-7) .incense-plume{--smoke-ink:#535f65}
.visit .scene-1 .incense-plume,.visit .scene-5 .incense-plume,.visit .scene-8 .incense-plume{--smoke-ink:#89928c}
.visit .scene-2 .incense-plume{--smoke-ink:#c3cbd1}
.visit .scene-7 .incense-plume{--smoke-ink:#4e636e}
.visit .incense-plume .plume-ink{stop-color:var(--smoke-ink)}
.visit .shrine-stage:has(.censer.burning) .incense-plume.desktop-smoke{display:block}
@media (max-width:700px){
  .visit .shrine-stage:has(.censer.burning) .incense-plume.desktop-smoke{display:none}
  .visit .shrine-stage:has(.censer.burning) .incense-plume.mobile-smoke{display:block}
}
.visit .incense-plume .plume-stream{transform-box:fill-box;transform-origin:50% 100%;--strand-strength:1;animation:plume-sway 3.6s ease-in-out infinite alternate}
.visit .incense-plume .plume-stream.strand-2{--strand-strength:.42;animation-duration:4.4s;animation-delay:-1.3s}
.visit .incense-plume .plume-stream.strand-3{--strand-strength:.25;animation-duration:5.1s;animation-delay:-2.6s}
.visit .incense-plume .plume-puff{transform-box:fill-box;transform-origin:50% 50%;opacity:0;animation:plume-rise-a 9s linear infinite}
.visit .incense-plume .plume-puff:nth-child(3n+2){animation-name:plume-rise-b}
.visit .incense-plume .plume-puff:nth-child(3n){animation-name:plume-rise-c}
.visit .incense-plume .puff-1{animation-delay:0s}.visit .incense-plume .puff-2{animation-delay:-.9s}.visit .incense-plume .puff-3{animation-delay:-1.8s}.visit .incense-plume .puff-4{animation-delay:-2.7s}.visit .incense-plume .puff-5{animation-delay:-3.6s}
.visit .incense-plume .puff-6{animation-delay:-4.5s}.visit .incense-plume .puff-7{animation-delay:-5.4s}.visit .incense-plume .puff-8{animation-delay:-6.3s}.visit .incense-plume .puff-9{animation-delay:-7.2s}.visit .incense-plume .puff-10{animation-delay:-8.1s}

/* ---------- 08 云水归心：浅色石质墓碑主体（遗像、姓名、日期、寄语嵌入） ---------- */
.visit .altar-tombstone{display:block;visibility:hidden;position:absolute;z-index:3;pointer-events:none;border-radius:46% 46% 5% 5%/13% 13% 2.5% 2.5%;
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' seed='4'/%3E%3CfeColorMatrix values='0 0 0 0 .32 0 0 0 0 .37 0 0 0 0 .37 0 0 0 .42 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E"),
    radial-gradient(130% 70% at 34% 14%,#fbfcfb 0,#e8eceb 38%,#d3dad9 72%,#bcc6c5 100%);
  background-size:120px 120px,100% 100%;
  box-shadow:inset 2px 2px 0 rgba(255,255,255,.75),inset -3px -4px 0 rgba(140,154,153,.6),inset 0 0 0 1px #a6b1b0,0 7px 12px -5px rgba(40,54,56,.45),0 1px 2px rgba(40,54,56,.35)}
.visit .altar-tombstone[data-placed]{visibility:visible}
.visit .altar-tombstone::before{content:"";position:absolute;left:7%;right:7%;top:6.5%;bottom:11.5%;border-radius:42% 42% 4% 4%/10% 10% 2% 2%;background:linear-gradient(#eef2f1,#e0e6e5);box-shadow:inset 1px 1px 2px rgba(122,136,135,.7),inset -1px -1px 1px rgba(255,255,255,.85)}
.visit .altar-tombstone .tombstone-plinth{position:absolute;display:block;left:-7%;right:-7%;bottom:-1.5%;height:8%;border-radius:2px;background:linear-gradient(#e6ebea,#c3cccb);box-shadow:inset 0 1px 0 #fff,inset 0 -1px 0 #9fabaa,0 3px 6px -2px rgba(40,54,56,.45)}
html body .visit .shrine-stage.scene-7 .portrait-support{display:none!important}
html body .visit .shrine-stage.scene-7 .redwood-tablet-text{background:transparent!important;border:0!important;box-shadow:none!important}

/* ---------- 动画 ---------- */
@keyframes altar-rise{0%{opacity:0;transform:translateY(7%)}100%{opacity:1;transform:none}}
@keyframes altar-ignite{0%{opacity:0;transform:scale(.15,.1)}100%{opacity:1;transform:none}}
@keyframes altar-flicker{0%{transform:rotate(-2.5deg) scale(.97,1)}30%{transform:rotate(2deg) scale(1,.94)}60%{transform:rotate(-1deg) scale(.95,1.05)}100%{transform:rotate(1.5deg) scale(1,.98)}}
@keyframes altar-incense-in{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:none}}
@keyframes altar-ember-on{0%{opacity:0;filter:brightness(.4)}60%{opacity:1;filter:brightness(1.6)}100%{opacity:1;filter:none}}
@keyframes altar-ember-breathe{0%{filter:brightness(.88)}100%{filter:brightness(1.22)}}
@keyframes altar-settle{0%{opacity:0;transform:translateY(-16%)}70%{opacity:1;transform:translateY(-1%)}100%{opacity:1;transform:none}}
@keyframes altar-shadow-settle{0%{opacity:0;transform:scaleX(.55)}70%{opacity:1;transform:scaleX(.96)}100%{opacity:1;transform:none}}
@keyframes altar-bloom{0%{opacity:0;transform:translateY(-5%)}70%{opacity:1;transform:translateY(-.5%)}100%{opacity:1;transform:none}}
@keyframes plume-in{0%{opacity:0}100%{opacity:1}}
@keyframes plume-sway{0%{transform:skewX(-6deg) scaleY(.94);opacity:calc(var(--strand-strength)*.6)}50%{transform:skewX(4deg) scaleY(1.04);opacity:var(--strand-strength)}100%{transform:skewX(-2deg) scaleY(.98);opacity:calc(var(--strand-strength)*.75)}}
@keyframes plume-rise-a{0%{transform:translate(0,0) scale(.35);opacity:0}12%{opacity:.7}30%{transform:translate(-4.0px,-20px) scale(.8) rotate(12deg);opacity:.65}60%{transform:translate(-12.0px,-49px) scale(1.5) rotate(-16deg);opacity:.4}100%{transform:translate(-20px,-90px) scale(2.3) rotate(28deg);opacity:0}}
@keyframes plume-rise-b{0%{transform:translate(0,0) scale(.35);opacity:0}12%{opacity:.7}30%{transform:translate(2.4000000000000004px,-20px) scale(.8) rotate(12deg);opacity:.65}60%{transform:translate(7.199999999999999px,-49px) scale(1.5) rotate(-16deg);opacity:.4}100%{transform:translate(12px,-90px) scale(2.3) rotate(28deg);opacity:0}}
@keyframes plume-rise-c{0%{transform:translate(0,0) scale(.35);opacity:0}12%{opacity:.7}30%{transform:translate(-1.8px,-20px) scale(.8) rotate(12deg);opacity:.65}60%{transform:translate(-5.3999999999999995px,-49px) scale(1.5) rotate(-16deg);opacity:.4}100%{transform:translate(-9px,-90px) scale(2.3) rotate(28deg);opacity:0}}

@media (prefers-reduced-motion:reduce){
  html body .visit .shrine-stage .ritual-effects .altar-revision :is(.candle,.fruit-plate,.flower-gift,.wreath-gift)::before,
  html body .visit .shrine-stage .ritual-effects .altar-revision :is(.candle,.fruit-plate,.flower-gift,.wreath-gift)::after,
  html body .visit .shrine-stage .ritual-effects .altar-revision :is(.flame,.incense-sticks,.ember),
  .visit .incense-plume,.visit .incense-plume :is(.plume-stream,.plume-puff){animation:none!important}
  .visit .incense-plume .plume-puff{opacity:.22;transform:translate(-8px,-40px) scale(.9)}
  .visit .incense-plume .plume-puff:nth-child(n+4){opacity:0}
}

.visit .incense-established .incense-plume{animation:none}

.visit .memorial-portrait-composition > .altar-tombstone{z-index:-1}
