.v2-item, .v2-censer { position: absolute; }
.v2-stage[data-v2-id="04"] .v2-couplet-correction,
.v2-stage[data-v2-id="09"] .v2-couplet-correction {
  position:absolute; z-index:1; pointer-events:none;
  mask-image:linear-gradient(to right,transparent,#000 9%,#000 91%,transparent),linear-gradient(to bottom,transparent,#000 9%,#000 91%,transparent);
  mask-composite:intersect;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 9%,#000 91%,transparent),linear-gradient(to bottom,transparent,#000 9%,#000 91%,transparent);
  -webkit-mask-composite:source-in;
}
.v2-item img, .v2-censer img { width: 100%; height: auto; }
.v2-contact { position: absolute; left: 8%; right: 8%; bottom: -2.5px; height: 6px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(12, 4, 1, .82), rgba(12, 4, 1, .32) 60%, transparent); filter: blur(.7px); }
.v2-reflect { position: absolute; left: 0; top: 100%; transform: scaleY(-1); transform-origin: 50% 0; opacity: .24; pointer-events: none; margin-top: -1.5px;
  -webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, .9), transparent 8px); mask-image: linear-gradient(to top, rgba(0, 0, 0, .9), transparent 8px);
  filter: blur(.6px) saturate(.8) brightness(.75); }
.v2-shade, .v2-light, .v2-round { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none;
  -webkit-mask: var(--m) 0 0 / 100% 100% no-repeat; mask: var(--m) 0 0 / 100% 100% no-repeat; }
.v2-shade { mix-blend-mode: multiply; background: linear-gradient(180deg, rgba(255, 236, 214, 0) 45%, rgba(110, 58, 30, .5) 100%); }
.v2-light { mix-blend-mode: soft-light; background: radial-gradient(70% 45% at 50% 0%, rgba(255, 214, 160, .55), transparent 100%); }

/* ---------------------------------------------------------------- front tier: bronze censer (fixed altar furnishing) */
.v2-censer { z-index: 5; left: 154.8px; top: 420px; width: 80px; --m: url(/assets/opus01/censer.webp); }
.v2-censer-img { position: relative; filter: brightness(.82) contrast(1.1) saturate(.9); }
.v2-censer .v2-contact { left: 12%; right: 12%; bottom: -2.5px; height: 7px; }

/* incense: three thick ancestral-hall sticks (red bamboo stem, dark incense paste, grey ash tip over a thin glowing ring)
   set into the ash behind the censer's front lip (rim front edge = canvas y 430.9). Heights and tilts differ so the
   three tips never line up as a row of dots. */
.v2-incense { z-index: 6; left: 174.8px; top: 357px; width: 40px; height: 74px; clip-path: inset(-60px -20px 0 -20px); --full: 58px; --handle: .3; --burn: 1;
  --len: calc(var(--full) * var(--burn)); }
.v2-stick { position: absolute; bottom: -1.5px; left: 19.1px; width: 1.8px; height: var(--len); transform-origin: 50% 100%; border-radius: .8px .8px 0 0;
  background:
    linear-gradient(90deg, rgba(0, 0, 0, .55), rgba(0, 0, 0, 0) 30%, rgba(255, 220, 190, .3) 45%, rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, .6)),
    linear-gradient(to top, #7a160c 0, #b02a18 calc(var(--full) * var(--handle) - 1px), #6a2412 calc(var(--full) * var(--handle)), #8a3418 55%, #6c2814); }
.v2-stick.s1 { transform: translateX(-4.6px) rotate(-5.2deg); height: calc(var(--len) * .92); }
.v2-stick.s2 { transform: rotate(.6deg); }
.v2-stick.s3 { transform: translateX(4.8px) rotate(4.4deg); height: calc(var(--len) * .86); }
/* tip: 3px of grey ash with a thin ember ring at its base; the glow stays tight (no halo dots) */
.v2-ember { position: absolute; left: -.1px; right: -.1px; top: -2.6px; height: 3.8px; border-radius: 1px 1px .3px .3px;
  background: linear-gradient(to top, #ff7a24 0, #ffb04a .9px, #d65a22 1.5px, #8c8178 1.9px, #b5aca2 3.2px, #9b9288 100%);
  box-shadow: 0 1.4px 1.6px -.2px rgba(255, 110, 30, .75); animation: v2-ember 2.2s ease-in-out infinite; }
.v2-stick.s1 .v2-ember { animation-duration: 2.7s; }
.v2-stick.s3 .v2-ember { animation-duration: 1.9s; }
.v2-wisp { position: absolute; left: -.2px; bottom: calc(100% + 1.5px); width: 2.7px; height: 9px; pointer-events: none; transform-origin: 50% 100%; opacity: .5;
  background: linear-gradient(to top, rgba(196, 186, 174, 0), rgba(196, 186, 174, .45) 25%, rgba(196, 186, 174, .18) 70%, transparent);
  filter: blur(.7px); animation: v2-wisp 3.8s ease-in-out infinite; }
.v2-stick.s1 .v2-wisp { animation-duration: 4.4s; animation-delay: -1.3s; }
.v2-stick.s3 .v2-wisp { animation-duration: 3.3s; animation-delay: -2.1s; height: 8px; }
/* the centre stick hands its first millimetres of smoke over to the live footage */
.v2-stick.s2 .v2-wisp { height: 16px; opacity: .62; width: 3.2px; left: -.45px; filter: blur(.9px); }
@keyframes v2-wisp { 0%, 100% { transform: skewX(0) scaleY(1); } 30% { transform: skewX(-9deg) scaleY(1.06); } 62% { transform: skewX(6deg) scaleY(.94); } }
@keyframes v2-ember { 0%, 100% { filter: brightness(1); } 50% { filter: brightness(1.25); } }

/* the layer is display:none until incense exists, so a transition would never run: fade in with an animation instead,
   after the embers and the CSS wisps are lit (also skips the broad opening curl of the footage) */
.v2-smoke { position: absolute; inset: 0; z-index: 8; pointer-events: none; opacity: 0; }
.v2-stage.has-incense .v2-smoke { animation: v2-smoke-in 2.4s ease var(--smoke-delay, 0s) both; }
@keyframes v2-smoke-in { from { opacity: 0; } to { opacity: 1; } }
.v2-smoke canvas { filter: blur(1px); }

/* ---------------------------------------------------------------- back tier: a pair of red candles flanking the censer
   Round three: candlestick + pillar are rendered at 4 px per CSS px (tools/opus01-assets/lathe.py), the flame is SVG. */
.v2-candle { z-index: 3; top: 348.5px; width: 36px; height: 92px; --m: url(/assets/opus01/candle-hd-left.webp); }
.v2-candle-left { left: 117.4px; }
.v2-candle-right { left: 236.2px; --m: url(/assets/opus01/candle-hd-right.webp); }
.v2-candle-body { position: absolute; left: 0; top: 0; width: 36px; height: 92px; filter: brightness(.9) saturate(.86) contrast(1.04); }
.v2-candle .v2-contact { left: 16%; right: 16%; bottom: -1.5px; height: 5px; }
/* the flame breathes: the top of the wax brightens and dims with it */
.v2-wax-glow { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; mix-blend-mode: screen;
  -webkit-mask: var(--m) 0 0 / 100% 100% no-repeat; mask: var(--m) 0 0 / 100% 100% no-repeat;
  background: radial-gradient(30% 14% at 50% 6%, rgba(255, 150, 70, .45), rgba(255, 110, 50, .08) 70%, transparent 100%);
  animation: v2-glow 3.4s ease-in-out infinite; }
.v2-flame-wrap { position: absolute; left: 13.8px; top: -14.5px; width: 8.4px; height: 21.8px; transform-origin: 50% 96%; }
.v2-flame-wrap::before { content: ""; position: absolute; left: 50%; top: 58%; width: 34px; height: 40px; margin: -20px 0 0 -17px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(255, 214, 140, .42), rgba(255, 170, 90, .12) 55%, transparent); mix-blend-mode: screen; }
.v2-flame { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow: visible; transform-origin: 50% 94%; animation: v2-flicker 2.6s ease-in-out infinite; }
.v2-candle-right .v2-flame { animation-duration: 3.1s; animation-delay: -1.2s; }
/* the candle's light on its surroundings: one round, soft pool centred on the flame (no wide horizontal ellipses) */
.v2-candle-light { position: absolute; left: 50%; top: -10px; width: 110px; height: 110px; margin-left: -55px; margin-top: -55px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(255, 190, 110, .26), rgba(255, 160, 80, .09) 50%, transparent 100%); mix-blend-mode: screen; animation: v2-glow 3.4s ease-in-out infinite; }
@keyframes v2-flicker {
  0%, 100% { transform: scale(1, 1) skewX(0deg); opacity: .97; }
  18% { transform: scale(.95, 1.07) skewX(-2.4deg); opacity: 1; }
  33% { transform: scale(1.03, .95) skewX(1.4deg); opacity: .93; }
  52% { transform: scale(.96, 1.09) skewX(2.6deg); opacity: 1; }
  71% { transform: scale(1.01, .97) skewX(-1.2deg); opacity: .95; }
  86% { transform: scale(.99, 1.03) skewX(.7deg); opacity: .98; }
}
@keyframes v2-glow { 0%, 100% { opacity: .88; } 40% { opacity: 1; } 65% { opacity: .8; } }

/* ---------------------------------------------------------------- front tier: a pair of small lotus oil lamps (全年供奉), same tier as the censer */
.v2-lamp { z-index: 6; top: 447px; width: 14px; height: 30px; }
.v2-lamp-left { left: 138.4px; }
.v2-lamp-right { left: 237.2px; }
.v2-lamp img { position: relative; width: 14px; height: 30px; filter: brightness(.94); }
.v2-lamp .v2-contact { left: 10%; right: 10%; bottom: -1.5px; height: 4px; }
/* the flame burns inside the glass (no post crosses the centre line) */
.v2-lamp .v2-flame-wrap { left: 5.5px; top: 9.6px; width: 3px; height: 7.6px; opacity: .92; }
.v2-lamp .v2-flame-wrap::before { width: 14px; height: 16px; margin: -8px 0 0 -7px; }
.v2-lamp-right .v2-flame { animation-duration: 2.9s; animation-delay: -.7s; }
.v2-lamp-light { position: absolute; left: 50%; top: 15px; width: 60px; height: 60px; margin: -30px 0 0 -30px; border-radius: 50%; pointer-events: none; mix-blend-mode: screen;
  background: radial-gradient(closest-side, rgba(255, 190, 110, .22), transparent); animation: v2-glow 3s ease-in-out infinite; }

/* ---------------------------------------------------------------- back tier: two bouquets at the outer ends */
/* Independent HD PNGs keep their native proportions. Equal 98px height and mirrored centres
   (82.6 / 307) put both vase bases on the rear bench, clear of candles and the right rail. */
.v2-flowers { z-index: 3; top: 342.5px; width: calc(98px * 782 / 1046); --m: url(/assets/opus01/flowers-hd-left.png); }
.v2-flowers-left { left: calc(82.6px - 98px * 782 / 1046 / 2); }
.v2-flowers-right { left: calc(307px - 98px * 767 / 1041 / 2); width: calc(98px * 767 / 1041); --m: url(/assets/opus01/flowers-hd-right.png); }
/* white chrysanthemums in a dim, warm hall: ivory, never paper-white */
.v2-flowers-img { position: relative; filter: brightness(.8) sepia(.22) saturate(.95) contrast(1.06); }
.v2-stage[data-v2-id="03"] .v2-flowers-img { filter: none; }
.v2-flowers .v2-contact { left: 30%; right: 30%; bottom: -2px; height: 5.5px; }
.v2-flowers .v2-shade { background: linear-gradient(180deg, rgba(255, 236, 214, 0) 55%, rgba(110, 60, 30, .4) 100%); }
.v2-flowers-left .v2-shade { background: linear-gradient(180deg, rgba(255, 236, 214, 0) 55%, rgba(110, 60, 30, .4) 100%), linear-gradient(90deg, rgba(90, 46, 20, .36), transparent 50%); }
.v2-flowers-right .v2-shade { background: linear-gradient(180deg, rgba(255, 236, 214, 0) 55%, rgba(110, 60, 30, .4) 100%), linear-gradient(270deg, rgba(90, 46, 20, .36), transparent 50%); }

/* ---------------------------------------------------------------- front tier: two plates of red apples */
.v2-fruit { z-index: 6; top: 427px; width: 62px; --m: url(/assets/opus01/fruit-left.webp); }
.v2-fruit-left { left: 74px; }
.v2-fruit-right { left: 253.6px; --m: url(/assets/opus01/fruit-right.webp); }
.v2-fruit-img { position: relative; filter: brightness(.97) saturate(1.04) contrast(1.08); }
.v2-fruit .v2-contact { left: 22%; right: 22%; bottom: -2.5px; height: 6.5px; }
/* light from the nearer candle: the inner shoulders of the apples catch it */
.v2-fruit-left .v2-light { background: radial-gradient(60% 46% at 74% 4%, rgba(255, 210, 160, .6), transparent 100%); }
.v2-fruit-right .v2-light { background: radial-gradient(60% 46% at 26% 4%, rgba(255, 210, 160, .6), transparent 100%); }



/* ---------------------------------------------------------------- entrances (once; renewals stay settled). --d = sweep step offset */
.v2-incense .v2-stick { animation: v2-enter-insert 1s calc(var(--d, 0s) + var(--i, 0s)) cubic-bezier(.25, .8, .3, 1) both; }
.v2-stick.s1 { --i: .12s; } .v2-stick.s3 { --i: .24s; }
.v2-incense .v2-ember { animation: v2-enter-ember .8s calc(var(--d, 0s) + .95s + var(--i, 0s)) ease-out both, v2-ember 2.2s calc(var(--d, 0s) + 2s) ease-in-out infinite; }
.v2-incense .v2-wisp { animation: v2-enter-fade 1.2s calc(var(--d, 0s) + 1.4s) ease-out both, v2-wisp 3.8s calc(var(--d, 0s) + 2.6s) ease-in-out infinite; }
.v2-candle { animation: v2-enter-rise .9s var(--d, 0s) cubic-bezier(.2, .7, .2, 1) both; }
.v2-candle-right { --j: .18s; animation-delay: calc(var(--d, 0s) + .18s); }
.v2-candle .v2-flame-wrap { animation: v2-enter-ignite .8s calc(var(--d, 0s) + var(--j, 0s) + .75s) cubic-bezier(.3, 1.4, .5, 1) both; }
.v2-lamp { animation: v2-enter-rise .8s var(--d, 0s) cubic-bezier(.2, .7, .2, 1) both; }
.v2-lamp .v2-flame-wrap { animation: v2-enter-ignite .7s calc(var(--d, 0s) + .55s) cubic-bezier(.3, 1.4, .5, 1) both; }
.v2-lamp .v2-lamp-light { animation: v2-enter-glow 1s calc(var(--d, 0s) + .6s) ease-out both, v2-glow 3s calc(var(--d, 0s) + 1.6s) ease-in-out infinite; }
.v2-stage .is-settled .v2-lamp-light { animation: v2-glow 3s ease-in-out infinite !important; }
.v2-candle .v2-candle-light, .v2-candle .v2-wax-glow { animation: v2-enter-glow 1.2s calc(var(--d, 0s) + var(--j, 0s) + .8s) ease-out both, v2-glow 3.4s calc(var(--d, 0s) + 2.2s) ease-in-out infinite; }
.v2-flowers { animation: v2-enter-flowers 1.1s var(--d, 0s) cubic-bezier(.2, .7, .2, 1) both; }
.v2-flowers-right { animation-delay: calc(var(--d, 0s) + .2s); }
.v2-fruit { animation: v2-enter-fruit 1s var(--d, 0s) cubic-bezier(.2, .8, .25, 1) both; }
.v2-fruit-right { animation-delay: calc(var(--d, 0s) + .2s); }
.v2-fruit .v2-contact { animation: v2-enter-contact 1.1s var(--d, 0s) ease-out both; }
.v2-fruit-right .v2-contact { animation-delay: calc(var(--d, 0s) + .2s); }
.v2-stage .v2-item.is-settled, .v2-stage .is-settled .v2-stick, .v2-stage .is-settled .v2-flame-wrap, .v2-stage .is-settled .v2-contact { animation: none !important; }
.v2-stage .is-settled .v2-ember { animation: v2-ember 2.2s ease-in-out infinite !important; }
.v2-stage .is-settled .v2-wisp { animation: v2-wisp 3.8s ease-in-out infinite !important; }
.v2-stage .is-settled .v2-candle-light, .v2-stage .is-settled .v2-wax-glow { animation: v2-glow 3.4s ease-in-out infinite !important; }
@keyframes v2-enter-insert { 0% { opacity: 0; translate: 0 -20px; } 35% { opacity: 1; } 100% { opacity: 1; translate: 0 0; } }
@keyframes v2-enter-ember { 0% { opacity: 0; filter: brightness(.4); } 100% { opacity: 1; filter: brightness(1); } }
@keyframes v2-enter-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes v2-enter-rise { from { opacity: 0; translate: 0 5px; } to { opacity: 1; translate: 0 0; } }
@keyframes v2-enter-ignite { 0% { opacity: 0; transform: scale(.15, .1); } 100% { opacity: 1; transform: none; } }
@keyframes v2-enter-glow { from { opacity: 0; } to { opacity: .9; } }
/* set down by hand: short lift, quick opacity (no blur — a half-transparent dark bouquet reads as a smudge) */
@keyframes v2-enter-flowers { 0% { opacity: 0; translate: 0 -5px; } 30% { opacity: 1; } 100% { opacity: 1; translate: 0 0; } }
@keyframes v2-enter-fruit { 0% { opacity: 0; translate: 0 -6px; } 28% { opacity: 1; } 100% { opacity: 1; translate: 0 0; } }
@keyframes v2-enter-contact { 0% { opacity: 0; scale: .5 1; } 60% { opacity: .4; } 100% { opacity: 1; scale: 1 1; } }



/* R2 integration only: geometry is supplied from immutable layout data via CSP-safe attributes. */
html body .sa-visit .v2-stage.sa-stage.shrine-stage{position:relative;width:100%;margin:0 auto;height:auto;min-height:0;aspect-ratio:auto;overflow:visible;background:transparent;isolation:isolate}
.v2-canvas{position:absolute;left:0;top:0;width:390px;transform-origin:0 0;transform:scale(var(--k));isolation:isolate;overflow:hidden}
.v2-canvas *{box-sizing:border-box}
.v2-background,.v2-clean-patch{position:absolute;inset:0;display:block;width:390px;height:100%}
.v2-clean-patch{z-index:1;pointer-events:none}
.v2-ink{position:absolute;inset:0;pointer-events:none}
html body .sa-visit .shrine-stage.v2-stage .memorial-photo-frame.v2-portrait{position:absolute;z-index:2;padding:1.5px!important;border:0;border-radius:0;margin:0;transform:none;min-height:0;max-height:none;background:linear-gradient(140deg,#b7a691,#655d51);box-shadow:0 1px 2px #0005;overflow:hidden}
.v2-stage .v2-portrait::before,.v2-stage .v2-portrait::after{content:none!important}
html body .sa-visit .v2-stage .v2-portrait img{width:100%;height:100%;object-fit:cover;object-position:50% 45%;display:block;filter:grayscale(1);border:0}
html body .sa-visit .v2-stage .v2-bound-info.memorial-photo-inscription{position:absolute;inset:0;transform:none;width:390px;height:100%;min-height:0;max-height:none;display:block;padding:0;margin:0;gap:0;background:none;border:0;border-radius:0;box-shadow:none;overflow:visible}
.v2-bound-info::before,.v2-stage::before,.v2-stage::after{content:none!important}
html body .sa-visit .v2-stage .v2-name,.v2-stage .v2-dates-live{position:absolute;z-index:2;text-align:center;white-space:nowrap;font-family:'Noto Serif CJK SC','Songti SC','SimSun',serif;transform:none;margin:0;padding:0;text-shadow:none;filter:none}
html body .sa-visit .v2-stage .v2-name{font-weight:600;letter-spacing:1px}
.v2-stage .v2-dates-live{font-size:11.5px;font-weight:500;letter-spacing:.1px}
.v2-dates-live span{display:block}
html body .sa-visit .v2-stage .ritual-effects{position:absolute;inset:0;pointer-events:none;z-index:auto}
html body .sa-visit .v2-stage .ritual-scene.v2-offerings{position:absolute;inset:0;width:390px;height:100%;transform:none;z-index:auto}
.v2-stage .v2-item img,.v2-stage .v2-censer img{display:block}
.v2-stage .v2-contact{bottom:-1px;height:3px;filter:blur(.4px);opacity:.75}
.v2-stage .v2-censer-img{filter:brightness(.91) contrast(1.05) saturate(.95)}
.v2-stage .v2-flowers-img{filter:brightness(.94) saturate(.96)}
.v2-stage.dark .v2-flowers-img{filter:brightness(.85) sepia(.12) saturate(.96)}
.v2-stage .v2-fruit-img{filter:brightness(.97) saturate(1.04) contrast(1.06)}
.v2-stage .v2-fruit img{position:relative}
.v2-stage .v2-candle-light{opacity:.65}
.v2-stage .v2-lamp-group{position:absolute;z-index:8;width:20px;height:42.8571429px}
.v2-lamp-group .v2-lamp{left:0;top:0;transform:scale(1.42857143);transform-origin:0 0;position:absolute;animation:none}
.v2-lamp-group{animation:v2-enter-rise .8s var(--d,0s) cubic-bezier(.2,.7,.2,1) both}
.v2-smoke{width:390px;height:100%;z-index:8}
.v2-controls.sa-rail{position:absolute;left:auto;right:4px;bottom:auto;transform:none;width:44px;z-index:20;display:flex;flex-direction:column;gap:2px;padding:0;box-sizing:border-box}
.v2-controls.sa-rail button{width:44px;min-height:44px;height:48px;padding:2px;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#ecd9b5;background:#35291fed;border:1px solid #a58a61}
.v2-controls img{width:28px;height:28px;object-fit:contain}.v2-controls span{font-size:11px;line-height:12px}
.v2-sweep.sa-sweep{position:absolute;left:50%;transform:translateX(-50%);width:220px;height:48px;bottom:auto;z-index:15}
/* R2 has no leading sweep icon: center both lines on the unchanged outer frame. */
.v2-stage .v2-sweep.sa-sweep{padding-inline:0;gap:2px}
.v2-stage .v2-sweep.sa-sweep>b{width:100%;padding:0;text-align:center;font-size:17px;line-height:22px;letter-spacing:normal}
.v2-stage .v2-sweep.sa-sweep>small{width:100%;padding:0;text-align:center;font-size:9.5px;line-height:13px;letter-spacing:normal}
.v2-stage .sa-sweep-progress{top:auto;bottom:14px;left:50%;transform:translateX(-50%);z-index:16}
@media(min-width:701px){html body .sa-visit .v2-stage.sa-stage.shrine-stage{width:536px}html body .sa-visit .v2-stage .v2-controls.sa-rail{right:0}.v2-stage .v2-sweep.sa-sweep,.v2-stage .sa-sweep-progress{left:240px}}

/* Frozen 01 brand interaction: R2-only namespace, same zero-height collapse and arrow. */
.v2-brand-toggle { display: none; }
html.v2-brand-doc body.sa-page .top { overflow: visible; z-index: 40;
  transition: height .32s cubic-bezier(.3, .7, .2, 1), border-bottom-width .32s step-end, box-shadow .32s; }
html.v2-brand-doc body.sa-page .top .brand { transition: opacity .2s ease .1s, transform .32s cubic-bezier(.3, .7, .2, 1), visibility 0s; }
html.v2-brand-doc.v2-brand-collapsed body.sa-page .top { height: 0; border-bottom-width: 0; box-shadow: none;
  transition: height .32s cubic-bezier(.3, .7, .2, 1), border-bottom-width .32s step-start, box-shadow .32s; }
html.v2-brand-doc.v2-brand-collapsed body.sa-page .top .brand { opacity: 0; transform: translateY(-18px); visibility: hidden; pointer-events: none;
  transition: opacity .14s ease, transform .32s cubic-bezier(.3, .7, .2, 1), visibility 0s .32s; }

html.v2-brand-doc .top .v2-brand-toggle { all: unset; box-sizing: border-box; position: absolute; z-index: 41; right: 6px; top: 100%;
  width: 44px; height: 44px; display: grid; place-items: center; cursor: pointer; -webkit-tap-highlight-color: transparent;
  transform: translateY(-48px); transition: transform .32s cubic-bezier(.3, .7, .2, 1); }
html.v2-brand-doc.v2-brand-collapsed .top .v2-brand-toggle { transform: translateY(0); }
.v2-brand-toggle i { box-sizing: border-box; width: 34px; height: 22px; display: grid; place-items: center; border-radius: 11px;
  background: linear-gradient(#2c150b, #1e0d06); border: 1px solid rgba(204, 160, 92, .42);
  box-shadow: 0 1px 0 rgba(255, 220, 160, .08) inset, 0 2px 6px rgba(0, 0, 0, .28);
  transition: transform .32s cubic-bezier(.3, .7, .2, 1), border-radius .32s, background .32s; }
.v2-brand-toggle svg { width: 12px; height: 7px; fill: none; stroke: #d9ae68; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;
  transition: transform .32s cubic-bezier(.3, .7, .2, 1); }
/* collapsed: flush with the top edge, square top corners → reads as a tab hanging from the lintel */
html.v2-brand-doc.v2-brand-collapsed .v2-brand-toggle i { transform: translateY(-11px); height: 24px; border-radius: 0 0 11px 11px; border-top-width: 0;
  background: linear-gradient(rgba(30, 13, 6, .9), rgba(38, 17, 8, .82)); }
html.v2-brand-doc.v2-brand-collapsed .v2-brand-toggle svg { transform: translateY(2px) rotate(180deg); }
.v2-brand-toggle:active i { filter: brightness(1.18); }
.v2-brand-toggle:focus-visible i { box-shadow: 0 0 0 1.5px #e4c58e, 0 2px 6px rgba(0, 0, 0, .28); }
@media(min-width:701px){html.v2-brand-doc .top .v2-brand-toggle{display:none}}

/* Candidate materials only; frozen 03 retains its original rule. */
.v2-stage[data-v2-id="05"] .v2-flowers-img,
.v2-stage[data-v2-id="06"] .v2-flowers-img,
.v2-stage[data-v2-id="07"] .v2-flowers-img,
.v2-stage[data-v2-id="08"] .v2-flowers-img{filter:none}

/* 02/09 isolated review candidates; approved templates unchanged. */
.v2-stage[data-v2-id="02"] .v2-flowers-img,
.v2-stage[data-v2-id="09"] .v2-flowers-img{filter:none}

.v2-stage[data-v2-id="04"] .v2-flowers-img { filter: brightness(.93) saturate(.96); }

/* Round 2 review candidates, explicitly scoped to 02--09.
   The opaque red wax occupies image y~4.5--53 at its unchanged 36x92 display size.
   A wider silhouette-masked falloff reaches the upper and middle wax while keeping
   its original texture. No change to assets, geometry, flame/entry animation or smoke.
   06 is the inspected benchmark; other scenes have distinct illumination levels. */
.v2-stage[data-v2-id="02"] { --r2-wax:0.94; --r2-wax-mid:0.57; --r2-wax-low:0.23; --r2-halo:0.8; --r2-halo-mid:0.27; --r2-spill:0.3; --r2-ember:0.78; --r2-tip-edge:0.34; --r2-flame:1.13; }
.v2-stage[data-v2-id="03"] { --r2-wax:0.8; --r2-wax-mid:0.49; --r2-wax-low:0.19; --r2-halo:0.64; --r2-halo-mid:0.22; --r2-spill:0.2; --r2-ember:0.66; --r2-tip-edge:0.25; --r2-flame:1.08; }
.v2-stage[data-v2-id="04"] { --r2-wax:0.86; --r2-wax-mid:0.53; --r2-wax-low:0.21; --r2-halo:0.73; --r2-halo-mid:0.24; --r2-spill:0.26; --r2-ember:0.73; --r2-tip-edge:0.29; --r2-flame:1.1; }
.v2-stage[data-v2-id="05"] { --r2-wax:0.98; --r2-wax-mid:0.62; --r2-wax-low:0.25; --r2-halo:0.84; --r2-halo-mid:0.29; --r2-spill:0.33; --r2-ember:0.8; --r2-tip-edge:0.36; --r2-flame:1.14; }
.v2-stage[data-v2-id="06"] { --r2-wax:0.9; --r2-wax-mid:0.55; --r2-wax-low:0.22; --r2-halo:0.78; --r2-halo-mid:0.26; --r2-spill:0.3; --r2-ember:0.76; --r2-tip-edge:0.33; --r2-flame:1.12; }
.v2-stage[data-v2-id="07"] { --r2-wax:0.76; --r2-wax-mid:0.46; --r2-wax-low:0.18; --r2-halo:0.6; --r2-halo-mid:0.2; --r2-spill:0.18; --r2-ember:0.63; --r2-tip-edge:0.23; --r2-flame:1.07; }
.v2-stage[data-v2-id="08"] { --r2-wax:0.96; --r2-wax-mid:0.59; --r2-wax-low:0.24; --r2-halo:0.82; --r2-halo-mid:0.28; --r2-spill:0.31; --r2-ember:0.79; --r2-tip-edge:0.35; --r2-flame:1.13; }
.v2-stage[data-v2-id="09"] { --r2-wax:0.88; --r2-wax-mid:0.54; --r2-wax-low:0.21; --r2-halo:0.75; --r2-halo-mid:0.25; --r2-spill:0.28; --r2-ember:0.74; --r2-tip-edge:0.3; --r2-flame:1.11; }

.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-candle .v2-wax-glow {
  background: radial-gradient(ellipse 52% 60% at 50% 7%,
    rgba(255,198,101,var(--r2-wax)) 0%, rgba(255,156,60,var(--r2-wax-mid)) 25%,
    rgba(255,119,34,var(--r2-wax-low)) 50%, rgba(255,101,28,.045) 78%, transparent 100%);
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-candle .v2-flame-wrap::before {
  width:34px; height:44px; margin:-22px 0 0 -17px;
  background:radial-gradient(ellipse at center,rgba(255,211,135,var(--r2-halo)) 0%,rgba(255,173,73,var(--r2-halo-mid)) 30%,rgba(255,151,58,.055) 62%,transparent 100%);
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-candle .v2-flame {
  filter:brightness(var(--r2-flame)) drop-shadow(0 0 1.3px rgba(255,175,70,.48));
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-candle-light {
  width:72px; height:86px; margin-left:-36px; margin-top:-43px;
  background:radial-gradient(ellipse at center,rgba(255,193,106,var(--r2-spill)) 0%,rgba(255,165,67,.10) 32%,rgba(255,145,51,.025) 62%,transparent 100%);
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-ember {
  background:linear-gradient(to bottom,#9e8875 0%,#be9b74 18%,#ed994d 36%,#ffbd63 56%,#ff942e 76%,#d94713 100%);
  box-shadow:0 .4px 1.2px .3px rgba(255,132,34,var(--r2-ember)),0 1px 3.4px .8px rgba(255,107,28,var(--r2-tip-edge));
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-ember::after {
  content:"";position:absolute;left:0;right:0;top:100%;height:4.5px;pointer-events:none;
  background:linear-gradient(to bottom,rgba(255,98,23,.70),rgba(221,58,14,.26) 42%,transparent 100%);mix-blend-mode:screen;
}
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-stick.s1 .v2-ember { opacity:.94; }
.v2-stage:is([data-v2-id="02"],[data-v2-id="03"],[data-v2-id="04"],[data-v2-id="05"],[data-v2-id="06"],[data-v2-id="07"],[data-v2-id="08"],[data-v2-id="09"]) .v2-stick.s3 .v2-ember { opacity:.88; }

/* Final-detail candidate: 05 and 08 only. Keep the approved halo, silhouettes,
   source SVG and animation clocks. A small masked wax-pool highlight distinguishes
   the wick contact from the upper wax; red heat retains an ash cap and dark edge.
   No new element, filter, animation or smoke-coordinate change. */
.v2-stage[data-v2-id="05"] { --detail-pool:.42; --detail-shoulder:.69; --detail-flame:1.08; }
.v2-stage[data-v2-id="08"] { --detail-pool:.38; --detail-shoulder:.65; --detail-flame:1.07; }
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-candle .v2-wax-glow {
  background:
    radial-gradient(ellipse 23% 8% at 50% 7%,rgba(255,225,162,var(--detail-pool)),rgba(255,182,79,.12) 48%,transparent 100%),
    radial-gradient(ellipse 48% 58% at 50% 7%,rgba(255,202,119,var(--r2-wax)) 0%,
      rgba(255,164,72,var(--detail-shoulder)) 20%,rgba(250,119,37,var(--r2-wax-low)) 49%,
      rgba(243,93,25,.045) 78%,transparent 100%);
}
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-candle .v2-flame {
  filter:brightness(var(--detail-flame)) drop-shadow(0 0 1.1px rgba(255,166,63,.44));
}
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-candle .v2-flame > path:nth-of-type(2) { opacity:.70; }
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-candle .v2-flame > path:last-child { stroke:#392015; }
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-ember {
  background:
    linear-gradient(90deg,rgba(78,26,12,.22),transparent 38%,transparent 66%,rgba(82,25,10,.16)),
    linear-gradient(to bottom,#a18d78 0%,#bc9167 16%,#e88c3d 35%,#ffb456 53%,#f48429 70%,#bd3712 100%);
  box-shadow:0 .4px 1.2px .3px rgba(255,125,29,var(--r2-ember)),0 1px 3.4px .8px rgba(244,91,22,var(--r2-tip-edge));
}
.v2-stage:is([data-v2-id="05"],[data-v2-id="08"]) .v2-ember::after {
  background:linear-gradient(to bottom,rgba(242,86,20,.74),rgba(185,43,12,.32) 42%,transparent 100%);
}

/* 24h burn: original 36x92 asset, stationary stand at y=52; only wax shortens.
   At burn=1 both clips exactly reconstruct the original image. */
.v2-stage .v2-candle { --wax-burn:1; --burn-drop:0px; }
.v2-stage .v2-candle-body { clip-path:inset(52px 0 0); }
.v2-stage .v2-candle-wax { position:absolute; left:0; top:0; width:36px; height:92px;
  filter:brightness(.9) saturate(.86) contrast(1.04); clip-path:inset(0 0 40px);
  transform-origin:50% 52px; transform:scaleY(var(--wax-burn)); }
.v2-stage .v2-candle .v2-wax-glow { transform-origin:50% 52px;
  transform:scaleY(var(--wax-burn)); }
.v2-stage .v2-candle .v2-flame-wrap,
.v2-stage .v2-candle .v2-candle-light { translate:0 var(--burn-drop); }
