:root{--ink:#16221f;--paper:#f3efe3;--gold:#e5c36f}*{box-sizing:border-box}html{scroll-behavior:smooth}html.xf-locked,html.xf-locked body{overflow:hidden}body.xf-theme{margin:0;background:#0d1716;color:var(--ink);font-family:"Noto Serif SC","Songti SC",Georgia,serif}.xf-site-header{position:fixed;z-index:90;top:0;left:0;right:0;padding:18px 22px;opacity:0;pointer-events:none;transition:opacity 1s}.xf-unlocked .xf-site-header{opacity:1;pointer-events:auto}.xf-brand{color:#fff;text-decoration:none;text-shadow:0 2px 16px #000}.xf-brand img{max-height:42px;width:auto}.xf-scene{position:relative;height:100svh;height:100dvh;min-height:620px;overflow:hidden;isolation:isolate;background:#101817}.xf-layer{position:absolute;pointer-events:none;user-select:none}.xf-depth{position:absolute;inset:-1.5%;pointer-events:none;background:center center/cover no-repeat url('../scene/scene-base-locked.webp');will-change:transform;transition:filter 2.4s ease,transform .35s ease-out}.xf-depth-far{z-index:1;filter:saturate(.72) brightness(.74) contrast(.92);transform:scale(1.035) translate(calc(var(--px,0)*-2px),calc(var(--py,0)*-1px))}.xf-depth-mid{z-index:3;clip-path:polygon(0 27%,100% 27%,100% 68%,0 68%);filter:saturate(.82) brightness(.82) contrast(.96);transform:scale(1.024) translate(calc(var(--px,0)*-4px),calc(var(--py,0)*-2px))}.xf-depth-water{z-index:5;clip-path:polygon(0 55%,100% 55%,100% 84%,0 84%);filter:saturate(.9) brightness(.88) contrast(.98);transform:scale(1.014) translate(calc(var(--px,0)*-6px),calc(var(--py,0)*-3px))}.xf-water-shade{position:absolute;z-index:6;left:0;right:0;top:55%;height:30%;pointer-events:none;background:linear-gradient(180deg,rgba(87,119,118,.06),rgba(37,75,78,.18) 48%,rgba(12,38,42,.08));mix-blend-mode:multiply}.xf-turtle{z-index:7;width:min(26vw,410px);left:8%;bottom:20%;opacity:.30;filter:saturate(.62) brightness(.64) blur(.55px);mix-blend-mode:multiply;animation:turtle 58s ease-in-out infinite alternate;clip-path:inset(0 round 18%)}.xf-jieyin{z-index:20;width:min(11vw,174px);left:43%;bottom:43.5%;transform:translateX(-50%) translate(calc(var(--px,0)*2px),calc(var(--py,0)*1px));filter:saturate(.74) brightness(.80) drop-shadow(0 12px 18px rgba(0,0,0,.18));transition:filter 2s,transform .35s ease-out}.xf-zhunti{z-index:21;width:min(8vw,126px);left:57%;bottom:43.2%;transform:translateX(-50%) translate(calc(var(--px,0)*2.5px),calc(var(--py,0)*1.2px));filter:saturate(.74) brightness(.80) drop-shadow(0 12px 18px rgba(0,0,0,.18));transition:filter 2s,transform .35s ease-out}.xf-tree{z-index:22;width:min(5.2vw,82px);left:58.1%;bottom:48.2%;opacity:.82;transform-origin:18% 84%;transform:rotate(-9deg);filter:saturate(.76) brightness(.80);transition:filter 2s}.xf-sarira{z-index:28;width:min(6vw,96px);left:43%;bottom:55.5%;opacity:0;transform:translate(-50%,38px) scale(.65)}.xf-mist{z-index:30;left:-8%;bottom:27%;width:116%;opacity:.18;mix-blend-mode:screen}.xf-mist-a{animation:mist 34s ease-in-out infinite alternate}.xf-mist-b{bottom:31%;opacity:.08;transform:scaleX(-1);animation:mist 46s ease-in-out infinite alternate-reverse}.xf-light{z-index:34;left:50%;top:-4%;width:min(92vw,1420px);transform:translateX(-50%);opacity:0;mix-blend-mode:screen}.xf-buddha{position:absolute;z-index:38;top:15%;left:50%;width:1.08em;height:1.15em;transform:translateX(-50%) scale(.82);color:#fff7d4;font:500 clamp(62px,6vw,104px)/1 "STKaiti","KaiTi",serif;text-shadow:0 0 8px #fff8d8,0 0 26px #e7bd56,0 0 58px rgba(231,189,86,.65);opacity:0;filter:blur(4px)}.xf-ren,.xf-fu{position:absolute;top:0;opacity:0;transform:translateY(8px)}.xf-ren{left:0}.xf-fu{left:.34em}.xf-lotus-field{position:absolute;z-index:16;inset:0}.xf-lotus{position:absolute;left:var(--left);bottom:34%;width:clamp(24px,2.5vw,42px);transform:translateX(-50%)}.xf-lotus img{position:absolute;left:50%;bottom:0;width:100%;transform:translateX(-50%);transition:opacity .8s,transform 1.2s}.xf-lotus-open{opacity:0;transform:translateX(-50%) scale(.65)!important}.xf-gate{position:absolute;z-index:60;left:50%;bottom:31%;transform:translateX(-50%);text-align:center;color:#fff9df;text-shadow:0 2px 12px #000,0 0 22px rgba(229,195,111,.48)}.xf-gate-hint{margin:0 0 10px;font-size:clamp(12px,1vw,15px);letter-spacing:.26em;opacity:.62}.xf-choice-row{display:flex;gap:clamp(64px,9vw,130px);justify-content:center}.xf-choice{border:0;background:transparent;color:#fff9df;font:500 clamp(34px,3.5vw,54px)/1 "STKaiti","KaiTi",serif;cursor:pointer;padding:8px 12px;min-width:70px;text-shadow:0 0 10px rgba(255,250,221,.62),0 0 26px rgba(229,195,111,.4);animation:breathe 3.8s ease-in-out infinite}.xf-choice:nth-child(2){animation-delay:-1.9s}.xf-choice:focus-visible{outline:2px solid #fff2b5;outline-offset:7px}.xf-status{position:absolute;z-index:65;left:50%;bottom:24%;transform:translateX(-50%);color:#fff9df;font-size:13px;letter-spacing:.18em;text-shadow:0 2px 10px #000}.xf-establishing .xf-gate{animation:gateAway .6s forwards}.xf-establishing .xf-sarira{animation:sariraRise 1.1s .8s forwards,orbit 4s 1.9s linear infinite}.xf-establishing .xf-tree{animation:treeBrush .8s 2.15s cubic-bezier(.2,.8,.2,1) forwards}.xf-establishing .xf-buddha{animation:buddhaBody 1.15s 3.05s forwards}.xf-establishing .xf-ren{animation:glyph .48s 3.05s forwards}.xf-establishing .xf-fu{animation:glyph .58s 3.35s forwards}.xf-establishing .xf-light{animation:lightReveal 2.5s 4.05s forwards}.xf-establishing .xf-depth-far{filter:saturate(.90) brightness(.88) contrast(.96)}.xf-establishing .xf-depth-mid{filter:saturate(.96) brightness(.94) contrast(.98)}.xf-establishing .xf-depth-water{filter:saturate(1.02) brightness(.98) contrast(1)}.xf-establishing .xf-jieyin,.xf-establishing .xf-zhunti,.xf-establishing .xf-tree{filter:saturate(.95) brightness(.96)}.xf-establishing .xf-lotus-open{animation:lotusOpen .9s calc(4.75s + var(--delay)) forwards}.xf-establishing .xf-lotus-closed{animation:lotusClose .65s calc(4.75s + var(--delay)) forwards}.xf-unlocked .xf-light{opacity:.22}.xf-unlocked .xf-lotus-open{opacity:1;transform:translateX(-50%) scale(1)!important}.xf-unlocked .xf-lotus-closed{opacity:0}.xf-unlocked .xf-gate{display:none}@keyframes turtle{0%{transform:translateX(-4vw) translateY(4px) rotate(-.8deg)}100%{transform:translateX(42vw) translateY(-7px) rotate(.8deg)}}@keyframes mist{to{transform:translateX(5%)}}@keyframes breathe{50%{opacity:.55;transform:translateY(-3px)}}@keyframes gateAway{to{opacity:0;filter:blur(8px);transform:translate(-50%,10px) scale(.94)}}@keyframes sariraRise{to{opacity:.9;transform:translate(-50%,-24px) scale(1)}}@keyframes orbit{50%{transform:translate(-50%,-30px) rotate(4deg) scale(1.03)}}@keyframes treeBrush{0%{transform:rotate(-9deg)}48%{transform:rotate(20deg) scale(1.03)}100%{transform:rotate(-2deg)}}@keyframes buddhaBody{to{opacity:.88;filter:blur(0);transform:translateX(-50%) scale(1)}}@keyframes glyph{to{opacity:1;transform:translateY(0)}}@keyframes lightReveal{0%{opacity:0}45%{opacity:.32}100%{opacity:.20}}@keyframes lotusOpen{to{opacity:1;transform:translateX(-50%) scale(1)}}@keyframes lotusClose{to{opacity:0;transform:translateX(-50%) scale(.72)}}
.xf-content{background:linear-gradient(#f3efe3,#e8e1d2);padding:88px max(20px,calc((100% - 1120px)/2)) 120px;min-height:70vh}.xf-content-head{text-align:center;margin-bottom:36px}.xf-content-head p{letter-spacing:.3em;color:#7b6b47}.xf-content-head h1{font-size:clamp(36px,6vw,72px);margin:.15em 0}.xf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:22px}.xf-card{background:#fffdf6db;border:1px solid #5b4a2d2e;padding:18px}.xf-card img{width:100%;aspect-ratio:16/10;object-fit:cover}.xf-card a{color:inherit}.xf-establishing .xf-gate{animation:gateAway .6s forwards}.xf-establishing .xf-sarira{animation:sariraRise 1.1s .8s forwards,orbit 4s 1.9s linear infinite}.xf-establishing .xf-tree{animation:treeBrush .8s 2.15s cubic-bezier(.2,.8,.2,1) forwards}.xf-establishing .xf-buddha{animation:buddhaBody 1.15s 3.05s forwards}.xf-establishing .xf-ren{animation:glyph .48s 3.05s forwards}.xf-establishing .xf-fu{animation:glyph .58s 3.35s forwards}.xf-establishing .xf-light{animation:lightReveal 2.5s 4.05s forwards}.xf-establishing .xf-base{filter:saturate(1.02) brightness(1.01);transform:scale(1)}.xf-establishing .xf-jieyin,.xf-establishing .xf-zhunti,.xf-establishing .xf-tree{filter:saturate(.95) brightness(.96)}.xf-establishing .xf-lotus-open{animation:lotusOpen .9s calc(4.75s + var(--delay)) forwards}.xf-establishing .xf-lotus-closed{animation:lotusClose .65s calc(4.75s + var(--delay)) forwards}.xf-unlocked .xf-light{opacity:.22}.xf-unlocked .xf-lotus-open{opacity:1;transform:translateX(-50%) scale(1)!important}.xf-unlocked .xf-lotus-closed{opacity:0}.xf-unlocked .xf-skip,.xf-unlocked .xf-gate{display:none}@keyframes turtle{to{transform:translateX(17vw) translateY(-7px) rotate(.6deg)}}@keyframes mist{to{transform:translateX(5%)}}@keyframes breathe{50%{opacity:.55;transform:translateY(-3px)}}@keyframes gateAway{to{opacity:0;filter:blur(8px);transform:translate(-50%,10px) scale(.94)}}@keyframes sariraRise{to{opacity:.9;transform:translate(-50%,-24px) scale(1)}}@keyframes orbit{50%{transform:translate(-50%,-30px) rotate(4deg) scale(1.03)}}@keyframes treeBrush{0%{transform:rotate(-9deg)}48%{transform:rotate(20deg) scale(1.03)}100%{transform:rotate(-2deg)}}@keyframes buddhaBody{to{opacity:.88;filter:blur(0);transform:translateX(-50%) scale(1)}}@keyframes glyph{to{opacity:1;transform:translateY(0)}}@keyframes lightReveal{0%{opacity:0}45%{opacity:.32}100%{opacity:.20}}@keyframes lotusOpen{to{opacity:1;transform:translateX(-50%) scale(1)}}@keyframes lotusClose{to{opacity:0;transform:translateX(-50%) scale(.72)}}
@media(max-width:720px){.xf-scene{min-height:560px}.xf-depth{background-position:50% center}.xf-turtle{width:38vw;left:-4%;bottom:23%;opacity:.28}.xf-jieyin{width:18vw;left:41%;bottom:44%}.xf-zhunti{width:14vw;left:60%;bottom:43.8%}.xf-tree{width:11vw;left:62%;bottom:49.5%}.xf-sarira{width:12vw;left:41%;bottom:57%}.xf-buddha{top:18%;font-size:clamp(54px,15vw,82px)}.xf-lotus{bottom:35%;width:30px}.xf-gate{bottom:30%}.xf-gate-hint{font-size:11px;white-space:nowrap}.xf-choice-row{gap:44px}.xf-choice{font-size:38px;min-width:60px}.xf-status{bottom:23%;font-size:11px;white-space:nowrap}.xf-content{padding-top:64px}}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}.xf-turtle,.xf-mist{animation:none!important}}
\n/* 0.1.7 visual separation: keep the world composition, pull the two sages forward, reveal the submerged turtle. */
.xf-jieyin{
  filter:saturate(.98) brightness(1.04) contrast(1.16) drop-shadow(0 3px 5px rgba(10,18,17,.56)) drop-shadow(0 0 12px rgba(244,231,192,.22));
}
.xf-zhunti{
  filter:saturate(.92) brightness(1.00) contrast(1.18) drop-shadow(0 3px 5px rgba(10,18,17,.58)) drop-shadow(0 0 11px rgba(238,224,184,.18));
}
.xf-tree{filter:saturate(1.02) brightness(.98) contrast(1.08) drop-shadow(0 2px 4px rgba(0,0,0,.28));}
.xf-turtle{
  width:min(35vw,550px);
  left:2%;
  bottom:16.5%;
  opacity:.52;
  filter:saturate(.72) brightness(.76) contrast(1.10) blur(.28px);
  mix-blend-mode:multiply;
  animation:turtle17 58s ease-in-out infinite alternate;
}
.xf-water-shade{background:linear-gradient(180deg,rgba(87,119,118,.035),rgba(37,75,78,.115) 48%,rgba(12,38,42,.045));}
@keyframes turtle17{
  0%{transform:translateX(-5vw) translateY(5px) rotate(-.7deg);opacity:.43}
  38%{opacity:.54}
  52%{transform:translateX(22vw) translateY(-5px) rotate(.1deg);opacity:.66;filter:saturate(.78) brightness(.84) contrast(1.12) blur(.18px)}
  66%{opacity:.57}
  100%{transform:translateX(48vw) translateY(-8px) rotate(.7deg);opacity:.44}
}
.xf-establishing .xf-jieyin,.xf-establishing .xf-zhunti{filter:saturate(1.04) brightness(1.09) contrast(1.15) drop-shadow(0 3px 6px rgba(0,0,0,.48)) drop-shadow(0 0 16px rgba(255,239,192,.30));}
@media(max-width:720px){.xf-turtle{width:49vw;left:-10%;bottom:20%;opacity:.50}.xf-jieyin{filter:saturate(.98) brightness(1.04) contrast(1.14) drop-shadow(0 2px 4px rgba(0,0,0,.52))}.xf-zhunti{filter:saturate(.92) brightness(1.01) contrast(1.16) drop-shadow(0 2px 4px rgba(0,0,0,.54))}}


/* 0.1.9 — continuous ritual orbit + true Seven-Treasure Branch hand anchor. */
/* Keep both sages at exactly the same visual exposure before and during the rite. */
.xf-jieyin,
.xf-establishing .xf-jieyin{
  filter:saturate(.98) brightness(1.04) contrast(1.16)
    drop-shadow(0 3px 5px rgba(10,18,17,.56))
    drop-shadow(0 0 12px rgba(244,231,192,.22));
  transition:transform .35s ease-out;
}
.xf-zhunti,
.xf-establishing .xf-zhunti{
  filter:saturate(.92) brightness(1.00) contrast(1.18)
    drop-shadow(0 3px 5px rgba(10,18,17,.58))
    drop-shadow(0 0 11px rgba(238,224,184,.18));
  transition:transform .35s ease-out;
}
/* Zhunti's anatomical right hand is on the viewer's left in the source cutout. */
.xf-tree{
  z-index:23;
  width:min(5.0vw,78px);
  left:54.25%;
  bottom:47.15%;
  opacity:.96;
  transform-origin:12% 92%;
  transform:rotate(-18deg);
  filter:saturate(1.02) brightness(.98) contrast(1.08) drop-shadow(0 2px 4px rgba(0,0,0,.28));
  animation:none!important;
  transition:none!important;
  will-change:transform,opacity,filter;
}
.xf-sarira{
  z-index:28;
  left:43%;
  bottom:51.5%;
  opacity:0;
  transform:translate(-50%,0) scale(.76);
  filter:brightness(.94) saturate(.82);
  animation:none!important;
  transition:none!important;
  will-change:transform,opacity,filter;
}
/* JS owns the two continuous orbits. CSS only owns the later world response. */
.xf-establishing .xf-tree,.xf-establishing .xf-sarira{animation:none!important;}
.xf-establishing .xf-buddha{animation:buddhaBody 1.15s 4.55s forwards;}
.xf-establishing .xf-ren{animation:glyph .48s 4.55s forwards;}
.xf-establishing .xf-fu{animation:glyph .58s 4.85s forwards;}
.xf-establishing .xf-light{animation:lightReveal 2.5s 5.45s forwards;}
.xf-establishing .xf-lotus-open{animation:lotusOpen .9s calc(6.05s + var(--delay)) forwards;}
.xf-establishing .xf-lotus-closed{animation:lotusClose .65s calc(6.05s + var(--delay)) forwards;}
@media(max-width:720px){
  .xf-tree{left:55.7%;bottom:47.9%;width:10vw;}
  .xf-sarira{left:41%;bottom:52.5%;width:12vw;}
}


/* 0.1.10 — overhead orbit -> collision -> Buddha birth. */
/* Disable every legacy delayed relic/tree/Buddha animation; JS owns the ritual timing. */
.xf-establishing .xf-sarira,.xf-establishing .xf-tree{animation:none!important;transition:none!important;}
.xf-establishing .xf-buddha,.xf-establishing .xf-ren,.xf-establishing .xf-fu{animation:none!important;}
.xf-establishing .xf-light{animation:none!important;opacity:0;}
/* Sages never become light sources. */
.xf-jieyin,.xf-establishing .xf-jieyin{filter:saturate(.98) brightness(1.04) contrast(1.16) drop-shadow(0 3px 5px rgba(10,18,17,.56)) drop-shadow(0 0 10px rgba(244,231,192,.16));}
.xf-zhunti,.xf-establishing .xf-zhunti{filter:saturate(.92) brightness(1.00) contrast(1.18) drop-shadow(0 3px 5px rgba(10,18,17,.58)) drop-shadow(0 0 9px rgba(238,224,184,.14));}
/* Collision flash is small and local, not a full-screen lamp. */
.xf-scene::after{content:"";position:absolute;z-index:37;left:50%;top:24.5%;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%) scale(.25);opacity:0;pointer-events:none;background:#fffbe8;box-shadow:0 0 18px 8px rgba(255,245,194,.72),0 0 48px 18px rgba(229,195,111,.34);}
.xf-impact::after{animation:xfImpactFlash .72s ease-out forwards;}
.xf-impact .xf-buddha{animation:xfBuddhaBirth 1.15s .28s cubic-bezier(.2,.8,.2,1) forwards!important;}
.xf-impact .xf-ren{animation:xfGlyphBirth .42s .30s ease-out forwards!important;}
.xf-impact .xf-fu{animation:xfGlyphBirth .52s .52s ease-out forwards!important;}
.xf-impact .xf-light{animation:xfLightAfterBirth 2.2s 1.0s ease-out forwards!important;}
.xf-impact .xf-lotus-open{animation:lotusOpen .9s calc(1.75s + var(--delay)) forwards!important;}
.xf-impact .xf-lotus-closed{animation:lotusClose .65s calc(1.75s + var(--delay)) forwards!important;}
@keyframes xfImpactFlash{0%{opacity:0;transform:translate(-50%,-50%) scale(.2)}28%{opacity:1;transform:translate(-50%,-50%) scale(2.2)}100%{opacity:0;transform:translate(-50%,-50%) scale(5)}}
@keyframes xfBuddhaBirth{0%{opacity:0;filter:blur(9px);transform:translateX(-50%) scale(.62)}45%{opacity:.52;filter:blur(2px);transform:translateX(-50%) scale(.9)}100%{opacity:.9;filter:blur(0);transform:translateX(-50%) scale(1)}}
@keyframes xfGlyphBirth{from{opacity:0;transform:translateY(10px) scale(.82)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes xfLightAfterBirth{0%{opacity:0}48%{opacity:.24}100%{opacity:.18}}


/* 0.1.11 — readable gate on the near Bodhi path + Buddha burst -> article list. */
.xf-gate{
  bottom:10.5%;
  min-width:min(92vw,560px);
  padding:10px 18px 12px;
  border-radius:999px;
  background:radial-gradient(ellipse at center,rgba(8,18,17,.34) 0%,rgba(8,18,17,.16) 58%,rgba(8,18,17,0) 78%);
  backdrop-filter:blur(1.4px);
}
.xf-gate-hint{
  margin:0 0 9px;
  color:#fff8dc;
  font-size:clamp(14px,1.18vw,18px);
  font-weight:600;
  letter-spacing:.18em;
  opacity:.98;
  text-shadow:0 2px 4px rgba(0,0,0,.95),0 0 12px rgba(0,0,0,.85),0 0 18px rgba(229,195,111,.34);
}
.xf-choice-row{gap:clamp(72px,10vw,150px)}
.xf-choice{
  color:#fff5ce;
  font-size:clamp(38px,4vw,60px);
  font-weight:600;
  text-shadow:0 2px 5px rgba(0,0,0,.9),0 0 12px rgba(255,247,205,.62),0 0 30px rgba(229,195,111,.46);
}
.xf-status{bottom:20%;font-weight:600;text-shadow:0 2px 5px #000,0 0 12px #000;}
/* Final Buddha burst: the glyph becomes the doorway, then the browser enters /articles. */
.xf-scene::before{
  content:"";
  position:absolute;inset:0;z-index:88;pointer-events:none;opacity:0;
  background:radial-gradient(circle at 50% 25%,rgba(255,255,244,1) 0%,rgba(255,247,204,.98) 11%,rgba(239,205,116,.82) 28%,rgba(255,255,255,.36) 48%,rgba(255,255,255,0) 70%);
  transform:scale(.12);
}
.xf-burst::before{animation:xfWorldBurst .76s cubic-bezier(.18,.76,.22,1) forwards;}
.xf-burst .xf-buddha{z-index:89;animation:xfBuddhaBurst .72s cubic-bezier(.18,.76,.22,1) forwards!important;}
@keyframes xfWorldBurst{
  0%{opacity:0;transform:scale(.12)}
  28%{opacity:.92;transform:scale(.52)}
  72%{opacity:1;transform:scale(1.55)}
  100%{opacity:1;transform:scale(3.2);background:rgba(255,252,232,1)}
}
@keyframes xfBuddhaBurst{
  0%{opacity:.92;filter:blur(0) brightness(1);transform:translateX(-50%) scale(1)}
  45%{opacity:1;filter:blur(.5px) brightness(1.55);transform:translateX(-50%) scale(1.7)}
  100%{opacity:0;filter:blur(10px) brightness(2.2);transform:translateX(-50%) scale(5.2)}
}
@media(max-width:720px){
  .xf-gate{bottom:11%;min-width:88vw;padding:8px 12px 10px}
  .xf-gate-hint{font-size:12px;letter-spacing:.12em}
  .xf-choice-row{gap:54px}.xf-choice{font-size:40px}
  .xf-status{bottom:21%;font-size:11px}
}

/* 0.1.12 — composition lock, collision energy return, finished content UI. */
.xf-jieyin{left:41.5%!important;bottom:43.5%!important;width:min(11vw,174px)!important}.xf-zhunti{left:58.5%!important;bottom:43.2%!important;width:min(8vw,126px)!important}.xf-tree{left:55.75%!important;bottom:47.15%!important}.xf-sarira{left:41.5%!important}
.xf-energy-return{position:absolute;z-index:39;inset:0;pointer-events:none}.xf-energy-line{position:absolute;top:24.5%;left:50%;height:3px;width:0;opacity:0;transform-origin:0 50%;border-radius:999px;background:linear-gradient(90deg,#fffbe8 0%,rgba(255,236,166,.9) 28%,rgba(255,255,255,.18) 100%);box-shadow:0 0 8px #fff7cf,0 0 20px rgba(229,195,111,.55)}.xf-energy-j{transform:rotate(147deg)}.xf-energy-z{transform:rotate(33deg)}.xf-impact .xf-energy-j{animation:xfEnergyJ 1.05s .18s ease-out forwards}.xf-impact .xf-energy-z{animation:xfEnergyZ 1.05s .18s ease-out forwards}@keyframes xfEnergyJ{0%{width:0;opacity:0}18%{opacity:1}58%{width:20vw;opacity:.95}100%{width:20vw;opacity:0}}@keyframes xfEnergyZ{0%{width:0;opacity:0}18%{opacity:1}58%{width:19vw;opacity:.95}100%{width:19vw;opacity:0}}
.xf-impact .xf-jieyin{animation:xfSageReceive 1.15s .35s ease-out 1}.xf-impact .xf-zhunti{animation:xfSageReceiveZ 1.15s .35s ease-out 1}@keyframes xfSageReceive{0%,100%{filter:saturate(.98) brightness(1.04) contrast(1.16) drop-shadow(0 3px 5px rgba(10,18,17,.56))}48%{filter:saturate(1.03) brightness(1.11) contrast(1.17) drop-shadow(0 0 12px rgba(255,240,188,.52))}}@keyframes xfSageReceiveZ{0%,100%{filter:saturate(.92) brightness(1) contrast(1.18) drop-shadow(0 3px 5px rgba(10,18,17,.58))}48%{filter:saturate(1) brightness(1.08) contrast(1.18) drop-shadow(0 0 11px rgba(255,235,170,.46))}}
body.xf-content-page{margin:0;min-height:100vh;color:#26312d;background:#e8e4d7;font-family:"Noto Serif SC","Songti SC",Georgia,serif;background-image:linear-gradient(rgba(241,238,226,.88),rgba(241,238,226,.96)),url('../scene/scene-base-locked.webp');background-size:cover;background-position:center 18%;background-attachment:fixed}.xf-inner-hero{position:relative;min-height:300px;padding:28px clamp(24px,6vw,90px) 48px;display:flex;flex-direction:column;justify-content:flex-end;color:#fff9e6;overflow:hidden;background:linear-gradient(180deg,rgba(7,20,20,.22),rgba(7,20,20,.68)),url('../scene/scene-base-locked.webp') center 24%/cover no-repeat;box-shadow:0 16px 40px rgba(25,35,32,.16)}.xf-inner-hero::after{content:"";position:absolute;inset:auto 0 0;height:70px;background:linear-gradient(transparent,#e8e4d7)}.xf-inner-hero>div,.xf-inner-brand{position:relative;z-index:1}.xf-inner-brand{position:absolute;top:24px;left:clamp(24px,6vw,90px);color:#fff9e6;text-decoration:none;font-size:18px;letter-spacing:.14em;text-shadow:0 2px 12px #000}.xf-inner-hero span{font-size:13px;letter-spacing:.34em;color:#f1d993}.xf-inner-hero h1{margin:10px 0 8px;font-size:clamp(38px,5vw,68px);font-weight:600;letter-spacing:.06em;text-shadow:0 3px 20px rgba(0,0,0,.55)}.xf-inner-hero p{margin:0;color:#eee7d3;letter-spacing:.08em}.xf-inner-hero-small{min-height:250px}.xf-inner-hero-small h1{font-size:clamp(30px,4vw,52px);max-width:1000px}
.xf-archive,.xf-article-shell{width:min(1160px,calc(100% - 36px));margin:-18px auto 0;position:relative;z-index:2}.xf-archive{padding:28px 0 70px}.xf-archive-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;color:#6d634d;font-size:13px;letter-spacing:.16em}.xf-article-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.xf-article-card{overflow:hidden;display:grid;grid-template-columns:minmax(0,170px) 1fr;min-height:170px;background:rgba(255,253,245,.86);border:1px solid rgba(136,113,62,.18);border-radius:18px;box-shadow:0 12px 32px rgba(44,55,49,.09);backdrop-filter:blur(10px);transition:.25s}.xf-article-card:hover{transform:translateY(-3px);box-shadow:0 16px 38px rgba(44,55,49,.14)}.xf-card-cover{display:block;min-height:170px}.xf-card-cover img{width:100%;height:100%;object-fit:cover;display:block}.xf-card-body{padding:22px 24px}.xf-card-body time{font-size:12px;color:#94825a}.xf-card-body h2{margin:8px 0 10px;font-size:21px;line-height:1.45}.xf-card-body h2 a{color:#27352f;text-decoration:none}.xf-card-body p{margin:0 0 16px;color:#68716c;line-height:1.8;font-size:14px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.xf-read{color:#9a7635;text-decoration:none;font-size:13px}.xf-pagination{display:flex;justify-content:center;gap:8px;margin-top:34px;flex-wrap:wrap}.xf-pagination a,.xf-pagination span{min-width:38px;height:38px;padding:0 12px;display:grid;place-items:center;border-radius:999px;text-decoration:none;border:1px solid rgba(130,104,50,.25);background:rgba(255,253,245,.75);color:#6f5a30}.xf-pagination span[aria-current]{background:#7f6a3a;color:#fff}.xf-empty{padding:60px;text-align:center;background:rgba(255,253,245,.78);border-radius:18px;color:#746c5b}
.xf-article-shell{padding:34px 0 72px}.xf-prose{background:rgba(255,253,245,.92);border:1px solid rgba(136,113,62,.18);border-radius:20px;padding:clamp(28px,5vw,64px);box-shadow:0 16px 42px rgba(44,55,49,.10);font-size:17px;line-height:2;color:#303b36}.xf-prose h2,.xf-prose h3{color:#26352f;margin-top:2em}.xf-prose img{max-width:100%;height:auto;border-radius:12px}.xf-prose a{color:#8a682c}.xf-prose blockquote{margin:1.8em 0;padding:12px 22px;border-left:3px solid #b8954d;background:#f5f0e2}.xf-adjacent{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:20px}.xf-adjacent a{padding:18px 20px;border-radius:14px;background:rgba(255,253,245,.82);border:1px solid rgba(136,113,62,.18);text-decoration:none;color:#35413c}.xf-adjacent small{display:block;color:#9a7d43;margin-bottom:6px}.xf-inner-footer{text-align:center;padding:26px 18px 44px;color:#776a4c}.xf-inner-footer a{color:#77613a;text-decoration:none}
@media(max-width:800px){.xf-article-grid{grid-template-columns:1fr}.xf-article-card{grid-template-columns:120px 1fr}.xf-inner-hero{min-height:250px;padding-bottom:38px}.xf-adjacent{grid-template-columns:1fr}.xf-jieyin{left:39.5%!important}.xf-zhunti{left:61%!important}.xf-tree{left:57.4%!important}}
@media(max-width:520px){.xf-article-card{display:block}.xf-card-cover{height:190px}.xf-card-body{padding:18px}.xf-archive,.xf-article-shell{width:min(100% - 24px,1160px)}.xf-prose{padding:24px 20px}.xf-inner-brand{font-size:15px}}


/* 0.1.13 — correct causal chain: 立 -> energy into sages -> ritual -> collision -> 佛 -> world awakening. */
.xf-energy-return{display:none!important}
.xf-founding-energy{position:absolute;z-index:58;inset:0;pointer-events:none;overflow:visible}
.xf-founding-bolt{position:absolute;height:4px;width:0;opacity:0;transform-origin:0 50%;border-radius:999px;background:linear-gradient(90deg,rgba(255,248,208,.16),#fff7c8 34%,#fff 70%,rgba(236,199,99,.28));box-shadow:0 0 8px rgba(255,249,217,.95),0 0 20px rgba(229,195,111,.72);will-change:transform,opacity,filter}
.xf-choice-fired{animation:xfEstablishPulse .72s ease-out!important}
@keyframes xfEstablishPulse{0%{filter:brightness(1);transform:scale(1)}30%{filter:brightness(2);transform:scale(1.18);text-shadow:0 0 16px #fff,0 0 42px #e5c36f}100%{filter:brightness(1);transform:scale(.96);opacity:.18}}
/* Receiving the user's '立' energy is a brief edge response, never a lamp effect. */
.xf-energy-injecting .xf-jieyin,.xf-energy-injecting .xf-zhunti{animation:none!important}
.xf-sages-primed .xf-jieyin{animation:xfPrimeJ .52s ease-out 1!important}
.xf-sages-primed .xf-zhunti{animation:xfPrimeZ .52s ease-out 1!important}
@keyframes xfPrimeJ{0%,100%{filter:saturate(.98) brightness(1.04) contrast(1.16) drop-shadow(0 3px 5px rgba(10,18,17,.56))}45%{filter:saturate(1.04) brightness(1.08) contrast(1.18) drop-shadow(0 0 9px rgba(255,241,190,.48))}}
@keyframes xfPrimeZ{0%,100%{filter:saturate(.92) brightness(1) contrast(1.18) drop-shadow(0 3px 5px rgba(10,18,17,.58))}45%{filter:saturate(.98) brightness(1.06) contrast(1.19) drop-shadow(0 0 8px rgba(255,237,176,.44))}}
/* Remove the incorrect post-Buddha energy return from 0.1.12. */
.xf-impact .xf-jieyin,.xf-impact .xf-zhunti{animation:none!important}
/* Collision is the cause of Buddha birth; keep it crisp and local. */
.xf-impact::after{animation:xfImpactFlash13 .62s ease-out forwards!important}
@keyframes xfImpactFlash13{0%{opacity:0;transform:translate(-50%,-50%) scale(.16)}24%{opacity:1;transform:translate(-50%,-50%) scale(2.7)}52%{opacity:.68;transform:translate(-50%,-50%) scale(4.2)}100%{opacity:0;transform:translate(-50%,-50%) scale(7)}}
/* Give Buddha a readable hold before the doorway burst; JS controls final redirect. */
.xf-impact .xf-buddha{animation:xfBuddhaBirth13 1.05s .22s cubic-bezier(.2,.8,.2,1) forwards!important}
@keyframes xfBuddhaBirth13{0%{opacity:0;filter:blur(9px);transform:translateX(-50%) scale(.62)}52%{opacity:.72;filter:blur(1.5px);transform:translateX(-50%) scale(.94)}100%{opacity:.94;filter:blur(0);transform:translateX(-50%) scale(1)}}
/* The turtle becomes discoverable only when Buddha light reaches the Eight-Virtue Pool. */
.xf-impact .xf-turtle{animation:turtle17 58s ease-in-out infinite alternate,xfTurtleReveal13 2.1s 1.15s ease-in-out 1!important}
@keyframes xfTurtleReveal13{0%,100%{opacity:.46;filter:saturate(.72) brightness(.70) contrast(1.08) blur(.35px)}45%,70%{opacity:.70;filter:saturate(.88) brightness(.88) contrast(1.16) blur(.18px)}}
/* Faster white-field handoff after the Buddha burst. */
.xf-burst::before{animation:xfWorldBurst13 .46s cubic-bezier(.18,.76,.22,1) forwards!important}
.xf-burst .xf-buddha{animation:xfBuddhaBurst13 .46s cubic-bezier(.18,.76,.22,1) forwards!important}
@keyframes xfWorldBurst13{0%{opacity:0;transform:scale(.15)}35%{opacity:.92;transform:scale(.72)}100%{opacity:1;transform:scale(3);background:rgba(255,252,232,1)}}
@keyframes xfBuddhaBurst13{0%{opacity:.94;filter:blur(0) brightness(1);transform:translateX(-50%) scale(1)}55%{opacity:1;filter:blur(.4px) brightness(1.5);transform:translateX(-50%) scale(1.8)}100%{opacity:0;filter:blur(9px) brightness(2.1);transform:translateX(-50%) scale(5)}}
\n\n/* 0.1.14 — animation polish: readable founding energy, explicit sage hit feedback, tighter Buddha hold and handoff. */
.xf-founding-bolt{
  height:7px!important;
  background:linear-gradient(90deg,rgba(255,246,188,.08) 0%,#f4d77e 20%,#fffbd8 52%,#ffffff 76%,rgba(229,195,111,.22) 100%)!important;
  box-shadow:0 0 7px #fff,0 0 16px rgba(255,238,166,.95),0 0 34px rgba(229,195,111,.74)!important;
}
.xf-founding-bolt::after{content:"";position:absolute;right:-7px;top:50%;width:15px;height:15px;transform:translateY(-50%);border-radius:50%;background:#fffbe5;box-shadow:0 0 10px #fff,0 0 24px #e5c36f,0 0 44px rgba(229,195,111,.72)}
.xf-sages-primed .xf-jieyin,.xf-sages-primed .xf-zhunti{animation:none!important}
.xf-impact .xf-turtle{animation:turtle17 58s ease-in-out infinite alternate,xfTurtleReveal14 1.65s .72s ease-in-out 1!important}
@keyframes xfTurtleReveal14{0%,100%{opacity:.48;filter:saturate(.74) brightness(.72) contrast(1.08) blur(.3px)}38%,68%{opacity:.78;filter:saturate(.94) brightness(.94) contrast(1.18) blur(.12px)}}
.xf-burst::before{animation:xfWorldBurst14 .38s cubic-bezier(.18,.76,.22,1) forwards!important}
.xf-burst .xf-buddha{animation:xfBuddhaBurst14 .38s cubic-bezier(.18,.76,.22,1) forwards!important}
@keyframes xfWorldBurst14{0%{opacity:0;transform:scale(.18)}42%{opacity:.96;transform:scale(.88)}100%{opacity:1;transform:scale(3.1);background:rgba(255,252,232,1)}}
@keyframes xfBuddhaBurst14{0%{opacity:.94;filter:blur(0) brightness(1);transform:translateX(-50%) scale(1)}58%{opacity:1;filter:blur(.3px) brightness(1.55);transform:translateX(-50%) scale(1.85)}100%{opacity:0;filter:blur(8px) brightness(2.05);transform:translateX(-50%) scale(5.1)}}


/* 0.1.15 — COMPOSITION LOCK. Scene geometry is immutable across ritual states. */
:root{
  --xf-jieyin-left:39%;
  --xf-zhunti-left:61%;
  --xf-tree-left:58.25%;
  --xf-sarira-left:39%;
}
.xf-jieyin,
.xf-energy-injecting .xf-jieyin,
.xf-sages-primed .xf-jieyin,
.xf-establishing .xf-jieyin,
.xf-impact .xf-jieyin,
.xf-burst .xf-jieyin{
  left:var(--xf-jieyin-left)!important;
  bottom:43.5%!important;
  width:min(11vw,174px)!important;
}
.xf-zhunti,
.xf-energy-injecting .xf-zhunti,
.xf-sages-primed .xf-zhunti,
.xf-establishing .xf-zhunti,
.xf-impact .xf-zhunti,
.xf-burst .xf-zhunti{
  left:var(--xf-zhunti-left)!important;
  bottom:43.2%!important;
  width:min(8vw,126px)!important;
}
.xf-tree{left:var(--xf-tree-left)!important;bottom:47.15%!important}
.xf-sarira{left:var(--xf-sarira-left)!important}
@media(max-width:800px){
  :root{--xf-jieyin-left:37%;--xf-zhunti-left:63%;--xf-tree-left:59.6%;--xf-sarira-left:37%}
}
