
:root{--ink:#0b0b0a;--gold:#c9a45b;--paper:#f1eadc;--paper2:#e6dcc8;--red:#8b251f;--muted:#766d60;--line:rgba(85,65,38,.22)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#090909;color:#eee;font-family:"Noto Serif SC","Songti SC","STSong",serif;line-height:1.75}a{color:inherit;text-decoration:none}.dj-header{height:64px;position:fixed;z-index:80;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(18px,4vw,64px);background:linear-gradient(#080808e8,#08080890,transparent);border-bottom:1px solid #ffffff18}.dj-brand{display:flex;gap:8px;align-items:baseline;font-size:19px;letter-spacing:.16em}.dj-brand small{font-family:Georgia,serif;letter-spacing:.05em;color:#d8c6a0}.dj-brand img{max-width:180px;max-height:42px;width:auto;height:auto;object-fit:contain}.dj-nav{display:flex;gap:30px}.dj-nav a{font-size:15px;letter-spacing:.16em;color:#e9e1d3}.dj-nav a:hover,.dj-nav a[aria-current=page]{color:#e2bd6f}.dj-menu-btn{display:none;background:none;border:0;color:white;font-size:24px}.dj-hero{height:min(820px,100vh);min-height:680px;position:relative;overflow:hidden;background:#050505}.dj-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:brightness(.42) saturate(.78)}.dj-vignette{position:absolute;inset:0;background:radial-gradient(circle at 50% 42%,transparent 0 32%,#0008 72%,#000e 100%),linear-gradient(to bottom,#0005 0,#0000 35%,#000b 100%)}.dj-taiji{position:absolute;width:min(43vw,600px);aspect-ratio:1;left:50%;top:45%;transform:translate(-50%,-50%);opacity:.18;filter:saturate(.6)}.dj-taiji img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.dj-taiji-outer{animation:djspin 42s linear infinite}.dj-taiji-inner{animation:djspinrev 18s linear infinite;transform:scale(.78)}@keyframes djspin{to{transform:rotate(360deg)}}@keyframes djspinrev{from{transform:scale(.78) rotate(360deg)}to{transform:scale(.78) rotate(0)}}.dj-title{position:absolute;z-index:8;top:105px;left:50%;transform:translateX(-50%);text-align:center;width:90%}.dj-title h1{font-size:clamp(46px,6vw,82px);font-weight:400;letter-spacing:.18em;margin:0;text-shadow:0 4px 20px #000}.dj-title p{letter-spacing:.22em;color:#e5d9c4;margin:4px 0}.dj-sanqing{position:absolute;z-index:5;left:50%;bottom:132px;transform:translateX(-50%);display:flex;align-items:flex-end;justify-content:center;width:min(920px,78vw)}.dj-sanqing img{width:34%;max-height:510px;object-fit:contain;filter:brightness(.72) saturate(.72) drop-shadow(0 20px 25px #000)}.dj-sanqing .dj-center{width:37%;filter:brightness(.78) saturate(.76) drop-shadow(0 20px 25px #000)}.dj-altar{position:absolute;z-index:14;bottom:22px;left:50%;transform:translateX(-50%);width:min(1050px,92vw);height:210px;display:flex;align-items:flex-end;justify-content:center;gap:3vw}.dj-altar button{background:none;border:0;padding:0;cursor:pointer;position:relative;transition:.25s}.dj-altar button:hover{transform:translateY(-7px);filter:drop-shadow(0 0 12px #d2a85b88)}.dj-artifact img{width:100%;height:100%;object-fit:contain}.dj-bell{width:105px;height:145px}.dj-sword{width:82px;height:170px}.dj-bagua{width:120px;height:120px}.dj-talisman{width:90px;height:145px}.dj-incense{width:200px;height:190px}.dj-incense>img:first-child{position:absolute;bottom:0;left:0;width:100%;height:100%;object-fit:contain}.dj-smoke{position:absolute;z-index:-1;width:180%!important;height:220%!important;left:-40%!important;bottom:35%!important;object-fit:contain;opacity:0;transition:opacity 1s;animation:djsmoke 7s ease-in-out infinite}.dj-incense.is-burning .dj-smoke{opacity:.62}.dj-incense span{position:absolute;bottom:0;left:50%;transform:translateX(-50%);padding:2px 13px;border:1px solid #c9a45b88;background:#0b0907cc;color:#e7c47d;letter-spacing:.18em;white-space:nowrap}@keyframes djsmoke{0%,100%{transform:translateY(10px) scale(.96);opacity:.25}50%{transform:translateY(-12px) scale(1.04);opacity:.7}}.dj-scroll{position:absolute;z-index:20;bottom:10px;left:50%;transform:translateX(-50%);font-size:13px;letter-spacing:.25em;color:#e5cf9c}.dj-classics,.dj-list,.dj-article{background:radial-gradient(circle at top,#fffdf7,#eee5d4 70%);color:#2c2822;min-height:520px;padding:54px max(6vw,24px) 80px}.dj-section-title{display:flex;align-items:center;justify-content:center;gap:18px;margin-bottom:28px}.dj-section-title span{width:min(150px,15vw);height:1px;background:#7b6947}.dj-section-title h2{font-weight:400;letter-spacing:.22em}.dj-grid{max-width:1160px;margin:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:22px}.dj-card{background:#f8f4e9aa;border:1px solid var(--line);box-shadow:0 8px 24px #604b2b12;overflow:hidden;transition:.25s}.dj-card:hover{transform:translateY(-4px);box-shadow:0 14px 32px #604b2b20}.dj-card>div{padding:24px}.dj-card-cover{width:100%;height:180px;object-fit:cover;filter:saturate(.65)}.dj-card time{font-size:12px;color:#8b7a62}.dj-card h2,.dj-card h3{font-weight:500;letter-spacing:.06em;margin:6px 0 8px}.dj-card p{color:#655d52;font-size:14px}.dj-read{font-size:13px;color:#6f4b2b}.dj-footer{text-align:center;padding:40px 20px;background:#0a0908;color:#a99b83;border-top:1px solid #ffffff12}.dj-seal{display:inline-grid;place-items:center;width:32px;height:32px;border:1px solid #8e342a;color:#a84336;margin-bottom:5px}.dj-footer p{margin:4px}.dj-page-heading{text-align:center;max-width:850px;margin:35px auto 45px}.dj-page-heading span{color:#9a7144;letter-spacing:.25em;font-size:12px}.dj-page-heading h1{font-weight:400;font-size:clamp(32px,5vw,56px);letter-spacing:.08em;margin:10px}.dj-prose{max-width:820px;margin:auto;background:#fffaf0b8;border:1px solid var(--line);padding:clamp(28px,5vw,64px);font-size:17px}.dj-prose img{max-width:100%;height:auto}.dj-adjacent{max-width:820px;margin:26px auto;display:grid;grid-template-columns:1fr 1fr;gap:14px}.dj-adjacent a{padding:18px;border:1px solid var(--line);background:#fff9}.dj-adjacent small{display:block;color:#8a6d45}.dj-adjacent strong{font-weight:500}.dj-pagination{display:flex;justify-content:center;gap:8px;margin-top:36px}.dj-pagination a{padding:7px 12px;border:1px solid var(--line)}.dj-pagination a[aria-current=page]{background:#2b241b;color:#fff}.dj-error{min-height:75vh;background:#eee5d4;color:#2c2822;display:grid;place-items:center;align-content:center;text-align:center}.dj-error b{font-size:90px;color:#a68a58}.dj-modal{position:fixed;z-index:200;inset:0;background:#000c;display:grid;place-items:center;padding:20px}.dj-modal[hidden]{display:none}.dj-modal-card{position:relative;width:min(520px,94vw);padding:34px;background:#15120e;border:1px solid #b88c46;color:#eee;text-align:center;box-shadow:0 20px 80px #000}.dj-close{position:absolute;right:12px;top:8px;border:0;background:none;color:#d7c29a;font-size:30px;cursor:pointer}.dj-modal-visual img{max-width:190px;max-height:240px;object-fit:contain}.dj-modal h3{color:#dfbd76;font-weight:400;letter-spacing:.12em}.dj-modal p{color:#c8bdad;text-align:left}.dj-bell.is-active{animation:djbell .18s ease-in-out 5}@keyframes djbell{25%{transform:rotate(-7deg)}75%{transform:rotate(7deg)}}.dj-sword.is-active{filter:drop-shadow(0 0 18px #ffe39a)}.dj-bagua.is-active{animation:djflash .8s ease}@keyframes djflash{50%{transform:scale(1.12) rotate(15deg);filter:drop-shadow(0 0 30px #e8c273)}}.dj-empty{text-align:center;color:#766d60}
@media(max-width:760px){.dj-header{height:56px;padding:0 16px}.dj-nav{display:none;position:absolute;top:56px;left:0;right:0;padding:18px;background:#090909ee;flex-direction:column;gap:12px}.dj-nav.is-open{display:flex}.dj-menu-btn{display:block}.dj-hero{min-height:690px}.dj-title{top:80px}.dj-title h1{font-size:44px}.dj-title p{font-size:12px;letter-spacing:.1em}.dj-taiji{width:92vw;top:43%}.dj-sanqing{width:125vw;bottom:180px}.dj-sanqing img{width:34%}.dj-altar{height:170px;gap:1vw}.dj-bell{width:62px;height:100px}.dj-sword{width:50px;height:110px}.dj-bagua{width:72px;height:72px}.dj-talisman{width:58px;height:95px}.dj-incense{width:120px;height:130px}.dj-grid{grid-template-columns:1fr}.dj-classics,.dj-list,.dj-article{padding-left:18px;padding-right:18px}.dj-adjacent{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.dj-taiji img,.dj-smoke,.dj-bell.is-active,.dj-bagua.is-active{animation:none!important}}


/* Daojia 1.1 — 无框法器演出 / 点香状态 / 克制太极 */
.dj-taiji{opacity:.095;filter:sepia(.2) saturate(.45) brightness(.9)}
.dj-taiji-outer{animation-duration:48s}
.dj-taiji-inner{animation-duration:20s}
.dj-incense{transform:none!important;filter:none!important}
.dj-incense:hover{transform:none!important;filter:none!important}
.dj-incense .dj-smoke{pointer-events:none}
.dj-incense::before,.dj-incense::after{content:"";position:absolute;z-index:5;left:50%;border-radius:50%;opacity:0;pointer-events:none}
.dj-incense::before{width:8px;height:8px;top:24%;margin-left:-4px;background:#ff3d0a;box-shadow:0 0 7px #ff3d0a,0 0 15px #ffb14b}
.dj-incense::after{width:12px;height:22px;top:20%;margin-left:-6px;background:radial-gradient(ellipse at 50% 70%,#fff2a2 0 18%,#ff7b17 38%,#d52d00 63%,transparent 70%);filter:blur(.3px);transform-origin:50% 100%}
.dj-incense.is-igniting::after{animation:djflame .7s ease-in-out 2}
.dj-incense.is-burning::before{opacity:1;animation:djember 1.8s ease-in-out infinite}
.dj-incense.is-burning .dj-smoke{opacity:.5}
@keyframes djflame{0%,100%{opacity:0;transform:scale(.4)}35%{opacity:1;transform:scale(1) rotate(-4deg)}65%{opacity:.9;transform:scale(.8) rotate(5deg)}}
@keyframes djember{50%{box-shadow:0 0 12px #ff3d0a,0 0 24px #ffb14b;filter:brightness(1.5)}}

.dj-stage{position:fixed;z-index:220;inset:0;overflow:hidden;pointer-events:auto}
.dj-stage[hidden]{display:none}.dj-stage-shade{position:absolute;inset:0;background:radial-gradient(circle at center,#0002 0 18%,#0009 70%,#000b 100%);backdrop-filter:blur(1px)}
.dj-stage-object{position:absolute;z-index:3;left:50%;top:50%;width:min(36vw,420px);height:min(58vh,560px);transform:translate(-50%,-50%);display:grid;place-items:center;filter:drop-shadow(0 0 24px #d8ae5a55)}
.dj-stage-object img{max-width:100%;max-height:100%;object-fit:contain}.dj-stage-name{position:absolute;z-index:6;left:50%;bottom:10%;transform:translateX(-50%);font-size:20px;letter-spacing:.3em;color:#e6c47d;text-shadow:0 2px 12px #000;opacity:0;animation:djname 2.8s ease}
.dj-stage-close{position:absolute;z-index:10;right:26px;top:20px;width:44px;height:44px;border:0;background:transparent;color:#d8c8a9;font-size:32px;cursor:pointer}.dj-stage-fx{position:absolute;z-index:4;inset:0;pointer-events:none}
@keyframes djname{15%,75%{opacity:1}100%{opacity:0}}

/* 铃：三摆 + 三圈声波 */
.dj-stage.is-bell .dj-stage-object{width:min(28vw,320px);animation:djbellstage 2.7s ease-in-out}
.dj-wave{position:absolute;left:50%;top:50%;width:80px;height:80px;border:1px solid #e4bf72;border-radius:50%;transform:translate(-50%,-50%);opacity:0;animation:djwave 1.3s ease-out forwards}
.dj-wave.w2{animation-delay:.55s}.dj-wave.w3{animation-delay:1.1s}
@keyframes djbellstage{0%{transform:translate(-50%,-50%) scale(.25);opacity:0}18%{transform:translate(-50%,-50%) scale(1)}28%{transform:translate(-50%,-50%) rotate(-12deg)}42%{transform:translate(-50%,-50%) rotate(12deg)}56%{transform:translate(-50%,-50%) rotate(-10deg)}70%{transform:translate(-50%,-50%) rotate(8deg)}82%{transform:translate(-50%,-50%) rotate(0)}100%{transform:translate(-50%,-50%) scale(.3);opacity:0}}
@keyframes djwave{0%{opacity:.75;transform:translate(-50%,-50%) scale(.4)}100%{opacity:0;transform:translate(-50%,-50%) scale(8)}}

/* 剑：穿屏、剑花、剑芒 */
.dj-stage.is-sword .dj-stage-object{width:min(22vw,250px);animation:djsword 3.1s cubic-bezier(.3,.7,.2,1)}
.dj-slash{position:absolute;left:50%;top:50%;width:min(70vw,900px);height:3px;background:linear-gradient(90deg,transparent,#fff7cf,#d9b967,transparent);box-shadow:0 0 10px #fff,0 0 28px #d9b967;transform-origin:center;opacity:0;animation:djslash .7s ease-out forwards}
.dj-slash.s2{transform:rotate(58deg);animation-delay:.7s}.dj-slash.s3{transform:rotate(-42deg);animation-delay:1.35s}
.dj-sword-ring{position:absolute;left:50%;top:50%;width:250px;height:250px;border:2px solid #e2bd70;border-left-color:transparent;border-bottom-color:transparent;border-radius:50%;opacity:0;animation:djring 1s ease-out 1.45s forwards}
@keyframes djsword{0%{transform:translate(-170vw,30vh) rotate(-70deg) scale(.5)}25%{transform:translate(-50%,-50%) rotate(20deg) scale(1)}45%{transform:translate(-50%,-50%) rotate(380deg) scale(1.05)}65%{transform:translate(-50%,-50%) rotate(740deg)}82%{transform:translate(-50%,-50%) rotate(720deg)}100%{transform:translate(150vw,-50vh) rotate(790deg) scale(.5)}}
@keyframes djslash{0%{opacity:0;transform:translate(-50%,-50%) scaleX(.1) rotate(-18deg)}35%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scaleX(1.1) rotate(-18deg)}}
@keyframes djring{0%{opacity:.8;transform:translate(-50%,-50%) scale(.3) rotate(0)}100%{opacity:0;transform:translate(-50%,-50%) scale(2.2) rotate(540deg)}}

/* 八卦镜：八卦文字逐位显现 */
.dj-stage.is-bagua .dj-stage-object{width:min(38vw,430px);height:min(55vh,500px);animation:djmirror 4.4s ease-in-out}
.dj-trigram{position:absolute;z-index:5;left:50%;top:50%;width:52px;height:52px;margin:-26px;color:#f1d083;font-size:25px;display:grid;place-items:center;text-shadow:0 0 8px #d6a94e,0 0 20px #d6a94e;opacity:0;transform:rotate(var(--a)) translateY(-230px) rotate(calc(-1 * var(--a)));animation:djgua .45s ease-out forwards;animation-delay:var(--d)}
@keyframes djgua{from{opacity:0;filter:blur(6px);transform:rotate(var(--a)) translateY(-170px) rotate(calc(-1 * var(--a))) scale(.5)}to{opacity:1;filter:blur(0);transform:rotate(var(--a)) translateY(-230px) rotate(calc(-1 * var(--a))) scale(1)}}
@keyframes djmirror{0%{transform:translate(-50%,-50%) scale(.2) rotate(-90deg);opacity:0}18%{transform:translate(-50%,-50%) scale(1) rotate(0);opacity:1}75%{transform:translate(-50%,-50%) scale(1) rotate(0)}88%{transform:translate(-50%,-50%) scale(1.08) rotate(360deg);filter:drop-shadow(0 0 40px #e3bd6d)}100%{transform:translate(-50%,-50%) scale(.2) rotate(450deg);opacity:0}}

/* 符：符纹光路覆盖 */
.dj-stage.is-talisman .dj-stage-object{width:min(28vw,300px);animation:djtalisman 3.8s ease-in-out}
.dj-talisman-trace{position:absolute;z-index:5;left:50%;top:50%;width:min(25vw,270px);height:440px;transform:translate(-50%,-50%);filter:drop-shadow(0 0 8px #ffdf75)}
.dj-talisman-trace path{fill:none;stroke:#ffdf75;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:900;stroke-dashoffset:900;animation:djtrace 2.2s ease-in-out .65s forwards}
@keyframes djtrace{0%{stroke-dashoffset:900;opacity:.3}70%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:.15}}
@keyframes djtalisman{0%{transform:translate(-50%,-50%) scale(.25) rotate(-8deg);opacity:0}20%{transform:translate(-50%,-50%) scale(1) rotate(0);opacity:1}78%{transform:translate(-50%,-50%) scale(1.03);filter:drop-shadow(0 0 22px #ffcc5c)}100%{transform:translate(-50%,-50%) scale(.3);opacity:0}}

@media(max-width:760px){.dj-stage-object{width:min(65vw,320px)}.dj-trigram{transform:rotate(var(--a)) translateY(-150px) rotate(calc(-1 * var(--a)));font-size:21px}@keyframes djgua{from{opacity:0;transform:rotate(var(--a)) translateY(-100px) rotate(calc(-1 * var(--a))) scale(.5)}to{opacity:1;transform:rotate(var(--a)) translateY(-150px) rotate(calc(-1 * var(--a))) scale(1)}}}


/* Daojia 1.2 — interaction acceptance fixes */
.dj-incense .dj-smoke{display:none!important}
.dj-incense .dj-flames,.dj-incense .dj-wisps{position:absolute;inset:0;pointer-events:none;z-index:7}
.dj-flame{position:absolute;width:7px;height:19px;border-radius:55% 45% 60% 40%;background:radial-gradient(ellipse at 50% 72%,#fff7ba 0 18%,#ff9b23 35%,#f0440a 62%,transparent 70%);filter:drop-shadow(0 0 5px #ff7a16);opacity:0;transform-origin:50% 100%}
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{opacity:1;animation:djLiveFlame .36s ease-in-out infinite alternate}
.dj-flame.f1{left:46%;top:23%;animation-delay:-.1s}.dj-flame.f2{left:49.5%;top:21.5%;height:23px;animation-delay:-.23s}.dj-flame.f3{left:53%;top:23.5%;height:17px;animation-delay:-.31s}
.dj-incense.is-burning .dj-flame{height:10px;opacity:.72}
@keyframes djLiveFlame{0%{transform:scale(.72,1.08) rotate(-7deg)}50%{transform:scale(1.05,.82) translateY(-2px) rotate(4deg)}100%{transform:scale(.8,1.18) translateY(1px) rotate(8deg)}}
.dj-wisp{position:absolute;width:3px;height:115px;bottom:62%;border-radius:50%;opacity:0;background:linear-gradient(to top,rgba(235,230,220,.58),rgba(235,230,220,.18) 55%,transparent);filter:blur(1.8px);transform-origin:50% 100%}
.dj-incense.is-burning .dj-wisp{opacity:1;animation:djWisp 3.7s ease-out infinite}
.dj-wisp.w1{left:47%;animation-delay:0s}.dj-wisp.w2{left:50%;animation-delay:-1.25s}.dj-wisp.w3{left:53%;animation-delay:-2.4s}
@keyframes djWisp{0%{opacity:.52;transform:translateY(0) scaleX(1) rotate(-2deg)}25%{transform:translate(-7px,-24px) scaleX(2.5) rotate(8deg)}55%{opacity:.35;transform:translate(9px,-62px) scaleX(4) rotate(-8deg)}100%{opacity:0;transform:translate(-4px,-120px) scaleX(6) rotate(7deg)}}
.dj-incense::before,.dj-incense::after{display:none!important}

/* Bell: object visible before any wave */
.dj-stage.is-bell .dj-stage-object{opacity:0;animation:djBellEntrance 2.9s ease-in-out forwards}
.dj-stage.is-bell .dj-wave{animation-name:djWaveLate;animation-duration:1s;animation-fill-mode:forwards}
.dj-stage.is-bell .dj-wave:not(.w2):not(.w3){animation-delay:.78s}.dj-stage.is-bell .dj-wave.w2{animation-delay:1.32s}.dj-stage.is-bell .dj-wave.w3{animation-delay:1.86s}
@keyframes djBellEntrance{0%{opacity:0;transform:translate(-50%,-50%) scale(.45)}16%{opacity:1;transform:translate(-50%,-50%) scale(1)}28%{transform:translate(-50%,-50%) rotate(0)}36%{transform:translate(-50%,-50%) rotate(-12deg)}45%{transform:translate(-50%,-50%) rotate(12deg)}55%{transform:translate(-50%,-50%) rotate(-10deg)}65%{transform:translate(-50%,-50%) rotate(9deg)}75%{transform:translate(-50%,-50%) rotate(0)}88%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(.72)}}
@keyframes djWaveLate{0%{opacity:.72;transform:translate(-50%,-50%) scale(.55)}100%{opacity:0;transform:translate(-50%,-50%) scale(7)}}

/* Seal-script feeling for gua labels, with old-style serif fallbacks */
.dj-trigram{font-family:"STKaiti","Kaiti SC","FangSong","STFangsong","Songti SC",serif;font-weight:700;border:1px solid rgba(221,183,101,.24);border-radius:50%;background:rgba(22,15,8,.25);text-shadow:0 0 7px #d3a651,0 0 18px #d3a651;letter-spacing:0}

/* Talisman true redraw layer: many independent strokes, not random zigzags */
.dj-talisman-trace{height:min(62vh,500px);width:min(31vw,330px)}
.dj-talisman-trace .trace{fill:none;stroke:#ffd76b;stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 5px #ff9b1f);stroke-dasharray:1200;stroke-dashoffset:1200;animation:djTraceReal 2.5s ease-in-out forwards;animation-delay:var(--delay)}
.dj-talisman-trace .thin{stroke-width:2}.dj-talisman-trace .seal{stroke:#ffb631;stroke-width:2.5}
@keyframes djTraceReal{0%{stroke-dashoffset:1200;opacity:.15}72%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:.35}}
.dj-stage.is-talisman .dj-stage-object img{filter:brightness(.62) saturate(.9)}
.dj-stage.is-talisman .dj-stage-object{animation:djTal120 4.7s ease-in-out}
@keyframes djTal120{0%{transform:translate(-50%,-50%) scale(.3);opacity:0}15%{transform:translate(-50%,-50%) scale(1);opacity:1}72%{filter:drop-shadow(0 0 8px #e7a833)}82%{filter:drop-shadow(0 0 35px #ffd56e);transform:translate(-50%,-50%) scale(1.04)}100%{opacity:0;transform:translate(-50%,-50%) scale(.55)}}

/* Hero bottom spacing: keep altar and scroll label separate */
.dj-scroll{bottom:2px;z-index:30;background:rgba(5,4,3,.68);padding:2px 10px;border-radius:2px}
.dj-altar{bottom:34px}


/* Daojia 1.3 — 法器各有自己的动作语言 */

/* 烟脱离按钮盒子，Hero 层自由上升，不再被截断 */
.dj-hero-smoke{position:absolute;z-index:13;left:50%;bottom:150px;width:260px;height:430px;transform:translateX(-50%);pointer-events:none;overflow:visible;opacity:0;transition:opacity .7s}
.dj-hero.is-incense-burning .dj-hero-smoke{opacity:1}
.dj-hero-smoke .dj-wisp{position:absolute;bottom:0;width:4px;height:190px;background:linear-gradient(to top,rgba(235,231,220,.62),rgba(230,227,220,.25) 52%,transparent);filter:blur(2.4px);border-radius:50%;transform-origin:50% 100%;opacity:0}
.dj-hero.is-incense-burning .dj-hero-smoke .dj-wisp{animation:djHeroSmoke 5.2s ease-out infinite}
.dj-hero-smoke .w1{left:44%;animation-delay:0s!important}.dj-hero-smoke .w2{left:48%;animation-delay:-1.35s!important}.dj-hero-smoke .w3{left:52%;animation-delay:-2.65s!important}.dj-hero-smoke .w4{left:56%;animation-delay:-3.9s!important}
@keyframes djHeroSmoke{0%{opacity:.42;transform:translate(0,0) scaleX(.7) rotate(-2deg)}18%{opacity:.5;transform:translate(-12px,-35px) scaleX(1.8) rotate(7deg)}42%{opacity:.36;transform:translate(15px,-100px) scaleX(3.3) rotate(-9deg)}70%{opacity:.2;transform:translate(-18px,-185px) scaleX(5.2) rotate(8deg)}100%{opacity:0;transform:translate(10px,-290px) scaleX(7) rotate(-5deg)}}

/* 铃：先现身，再由大到小自然摇摆，波纹逐次衰减 */
.dj-stage.is-bell .dj-stage-object{animation:djBellNatural 3.35s ease-in-out forwards}
.dj-stage.is-bell .dj-wave{border-color:rgba(230,196,126,.7)}
.dj-stage.is-bell .dj-wave:not(.w2):not(.w3){animation-delay:.82s}.dj-stage.is-bell .dj-wave.w2{animation-delay:1.5s;opacity:.65}.dj-stage.is-bell .dj-wave.w3{animation-delay:2.12s;opacity:.45}
@keyframes djBellNatural{0%{opacity:0;transform:translate(-50%,-55%) scale(.55)}15%{opacity:1;transform:translate(-50%,-50%) scale(1)}25%{transform:translate(-50%,-50%) rotate(-13deg)}37%{transform:translate(-50%,-50%) rotate(11deg)}49%{transform:translate(-50%,-50%) rotate(-8deg)}60%{transform:translate(-50%,-50%) rotate(6deg)}70%{transform:translate(-50%,-50%) rotate(-3deg)}80%{transform:translate(-50%,-50%) rotate(2deg)}88%{transform:translate(-50%,-50%) rotate(0);opacity:1}100%{opacity:0;transform:translate(-50%,-47%) scale(.88)}}

/* 剑：高速穿梭只显示残影；最后本体才显形，不再原地转圈 */
.dj-stage.is-sword .dj-stage-object{opacity:0;animation:djSwordReveal 3.9s ease forwards}
.dj-sword-ghost{position:absolute;z-index:5;left:50%;top:50%;width:90px;height:330px;opacity:0;filter:blur(1px) drop-shadow(0 0 12px #dbeaff);transform-origin:50% 50%}
.dj-sword-ghost img{width:100%;height:100%;object-fit:contain}
.dj-sword-ghost.g1{animation:djFly1 .62s ease-out .1s forwards}.dj-sword-ghost.g2{animation:djFly2 .65s ease-out .68s forwards}.dj-sword-ghost.g3{animation:djFly3 .58s ease-out 1.27s forwards}.dj-sword-ghost.g4{animation:djFly4 .55s ease-out 1.78s forwards}
.dj-sword-final-glint{position:absolute;z-index:7;left:50%;top:28%;width:3px;height:0;background:linear-gradient(#fff,rgba(191,221,255,.7),transparent);box-shadow:0 0 9px #fff,0 0 20px #b9dfff;opacity:0;animation:djBladeSweep .8s ease-out 2.7s forwards}
@keyframes djFly1{0%{opacity:0;transform:translate(-800px,350px) rotate(50deg) scale(.65)}25%{opacity:.75}100%{opacity:0;transform:translate(650px,-390px) rotate(50deg) scale(.9)}}
@keyframes djFly2{0%{opacity:0;transform:translate(700px,100px) rotate(-72deg) scale(.6)}25%{opacity:.65}100%{opacity:0;transform:translate(-720px,-250px) rotate(-72deg) scale(.9)}}
@keyframes djFly3{0%{opacity:0;transform:translate(-650px,-250px) rotate(92deg)}25%{opacity:.7}100%{opacity:0;transform:translate(700px,160px) rotate(92deg)}}
@keyframes djFly4{0%{opacity:0;transform:translate(500px,-430px) rotate(-25deg)}25%{opacity:.55}100%{opacity:0;transform:translate(-450px,400px) rotate(-25deg)}}
@keyframes djSwordReveal{0%,58%{opacity:0;transform:translate(-50%,-50%) scale(.78)}68%{opacity:1;transform:translate(-50%,-50%) scale(1.05)}86%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-46%) scale(.92)}}
@keyframes djBladeSweep{0%{opacity:0;height:0}20%{opacity:1;height:60px}70%{opacity:.9;height:300px;transform:translateY(170px)}100%{opacity:0;height:340px;transform:translateY(230px)}}

/* 镜：绝不旋转。镜面扫光、卦名浮现、最后显“道” */
.dj-stage.is-bagua .dj-stage-object{animation:djMirrorStill 5.3s ease forwards!important}
.dj-mirror-sheen{position:absolute;z-index:6;left:50%;top:50%;width:360px;height:360px;border-radius:50%;overflow:hidden;transform:translate(-50%,-50%);opacity:0;animation:djMirrorSheen 1.15s ease .5s forwards}
.dj-mirror-sheen::after{content:"";position:absolute;top:-25%;left:-60%;width:28%;height:150%;background:linear-gradient(90deg,transparent,rgba(255,248,215,.8),transparent);transform:rotate(18deg);animation:djSweepMirror 1.05s ease .5s forwards}
.dj-dao-char{position:absolute;z-index:8;left:50%;top:50%;transform:translate(-50%,-50%) scale(.4);font-family:"STKaiti","Kaiti SC","FangSong","STFangsong",serif;font-size:118px;color:#d7ad5c;text-shadow:0 0 10px #e7c779,0 0 32px #c8973d;opacity:0;animation:djDaoAppear 1.6s ease 3.15s forwards}
@keyframes djMirrorStill{0%{opacity:0;transform:translate(-50%,-50%) scale(.55)}15%{opacity:1;transform:translate(-50%,-50%) scale(1)}85%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-47%) scale(.9)}}
@keyframes djMirrorSheen{0%{opacity:0}20%,75%{opacity:1}100%{opacity:0}}
@keyframes djSweepMirror{from{left:-60%}to{left:135%}}
@keyframes djDaoAppear{0%{opacity:0;transform:translate(-50%,-50%) scale(.4);filter:blur(8px)}35%,72%{opacity:.92;transform:translate(-50%,-50%) scale(1);filter:blur(0)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.08)}}


/* Daojia 1.4 — new ancient artifacts + smoke-free censer */
.dj-incense>img:first-child{bottom:0;height:auto;max-height:68%;object-fit:contain}
.dj-incense-sticks{position:absolute;z-index:6;left:50%;bottom:43%;width:48px;height:92px;transform:translateX(-50%);pointer-events:none}
.dj-incense-sticks>i{position:absolute;bottom:0;width:3px;height:82px;border-radius:2px;background:linear-gradient(to top,#5d2617 0 72%,#d74920 73% 96%,#27201b 97%);box-shadow:0 0 1px #000}
.dj-incense-sticks>i:nth-child(1){left:9px;transform:rotate(-2deg)}.dj-incense-sticks>i:nth-child(2){left:22px;height:90px}.dj-incense-sticks>i:nth-child(3){left:35px;transform:rotate(2deg);height:84px}
.dj-flame.f1{left:42%;top:23%}.dj-flame.f2{left:49%;top:19%}.dj-flame.f3{left:56%;top:22%}

/* Smoke uses wide SVG-like wisps in hero space, fading before their path ends */
.dj-hero-smoke{height:520px;width:360px;bottom:155px;overflow:visible}
.dj-hero-smoke .dj-wisp{height:260px;width:6px;background:linear-gradient(to top,rgba(237,233,224,.52) 0%,rgba(232,228,219,.34) 28%,rgba(225,222,216,.16) 58%,rgba(220,220,220,.05) 78%,transparent 100%);filter:blur(3px)}
@keyframes djHeroSmoke{0%{opacity:0;transform:translate(0,15px) scaleX(.6)}10%{opacity:.42}28%{opacity:.38;transform:translate(-18px,-65px) scaleX(2.2) rotate(8deg)}55%{opacity:.22;transform:translate(22px,-165px) scaleX(4.4) rotate(-9deg)}78%{opacity:.08;transform:translate(-15px,-270px) scaleX(6.4) rotate(7deg)}100%{opacity:0;transform:translate(12px,-390px) scaleX(8.5) rotate(-5deg)}}

/* New bell proportions */
.dj-bell{width:84px;height:155px}.dj-stage.is-bell .dj-stage-object{width:min(22vw,250px);height:min(62vh,580px)}

/* New old sword: narrow vertical body, ghost paths feel like fast passes */
.dj-sword{width:58px;height:175px}.dj-stage.is-sword .dj-stage-object{width:min(18vw,205px);height:min(70vh,650px)}

/* 10-second mirror ritual. Mirror itself never rotates. */
.dj-stage.is-bagua .dj-stage-object{width:min(44vw,520px);height:min(66vh,610px);animation:djMirror10 10.2s ease forwards!important}
.dj-stage.is-bagua .dj-trigram{animation-delay:var(--d)!important}
.dj-mirror-sheen{width:min(36vw,430px);height:min(36vw,430px);animation:djMirrorSheenLong 1.7s ease 1.1s forwards}
.dj-mirror-sheen::after{animation:djSweepMirrorLong 1.45s ease 1.1s forwards}
.dj-dao-char{font-size:clamp(100px,12vw,158px);color:#d8b66e;opacity:0;animation:djDaoDeep 4.25s ease 4.65s forwards!important;mix-blend-mode:screen}
.dj-mirror-mist{position:absolute;z-index:7;left:50%;top:50%;width:min(30vw,350px);height:min(30vw,350px);transform:translate(-50%,-50%);border-radius:50%;overflow:hidden;opacity:0;animation:djMistWake 6.2s ease 2.7s forwards}
.dj-mirror-mist::before,.dj-mirror-mist::after{content:"";position:absolute;width:140%;height:42%;left:-20%;border-radius:50%;background:radial-gradient(ellipse,rgba(210,218,220,.18),rgba(150,160,165,.06) 55%,transparent 72%);filter:blur(12px);animation:djMistDrift 5s ease-in-out infinite alternate}
.dj-mirror-mist::before{top:28%}.dj-mirror-mist::after{top:48%;animation-delay:-2.2s}
@keyframes djMirror10{0%{opacity:0;transform:translate(-50%,-46%) scale(.62)}10%{opacity:1;transform:translate(-50%,-50%) scale(1)}88%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-47%) scale(.92)}}
@keyframes djMirrorSheenLong{0%{opacity:0}18%,72%{opacity:1}100%{opacity:0}}
@keyframes djSweepMirrorLong{from{left:-65%}to{left:140%}}
@keyframes djMistWake{0%{opacity:0}18%,82%{opacity:1}100%{opacity:0}}
@keyframes djMistDrift{from{transform:translateX(-12%) scale(1)}to{transform:translateX(14%) scale(1.15)}}
@keyframes djDaoDeep{0%{opacity:0;transform:translate(-50%,-50%) scale(.62);filter:blur(13px)}22%{opacity:.9;transform:translate(-50%,-50%) scale(.96);filter:blur(2px)}35%,76%{opacity:.95;transform:translate(-50%,-50%) scale(1);filter:blur(0)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.04);filter:blur(8px)}}

/* Exact talisman ink glow: overlay is derived from the actual red ink pixels */
.dj-stage.is-talisman .dj-stage-object{width:min(62vw,760px);height:min(54vh,430px);animation:djTalAncient 8s ease forwards}
.dj-stage.is-talisman .dj-stage-object img{filter:brightness(.72) saturate(.9)}
.dj-talisman-exact{position:absolute;z-index:7;left:50%;top:50%;width:min(62vw,760px);max-height:min(54vh,430px);object-fit:contain;transform:translate(-50%,-50%);opacity:0;filter:drop-shadow(0 0 5px #ffb43b) drop-shadow(0 0 12px #d9461e);clip-path:inset(0 0 100% 0);animation:djExactTrace 5.1s ease 1.1s forwards}
.dj-talisman-flash{position:absolute;z-index:8;left:50%;top:50%;width:min(64vw,790px);height:min(56vh,450px);transform:translate(-50%,-50%);background:radial-gradient(ellipse,rgba(255,184,68,.25),transparent 66%);opacity:0;animation:djTalFlash 1.8s ease 5.7s forwards}
@keyframes djExactTrace{0%{opacity:.15;clip-path:inset(0 0 100% 0)}10%{opacity:1}82%{opacity:1;clip-path:inset(0 0 0 0)}100%{opacity:.4;clip-path:inset(0 0 0 0)}}
@keyframes djTalFlash{0%{opacity:0}35%,68%{opacity:1}100%{opacity:0}}
@keyframes djTalAncient{0%{opacity:0;transform:translate(-50%,-48%) scale(.7)}12%{opacity:1;transform:translate(-50%,-50%) scale(1)}88%{opacity:1}100%{opacity:0;transform:translate(-50%,-47%) scale(.94)}}

/* Daojia 1.5.1 — reference altar composition */
.dj-sanqing{bottom:205px}
.dj-altar-furniture{position:absolute;z-index:11;left:50%;bottom:15px;transform:translateX(-50%);width:min(1280px,100vw);height:220px;pointer-events:none}
.dj-altar-top{position:absolute;left:0;right:0;top:25px;height:42px;background:linear-gradient(#4b1f12,#251008 55%,#120806);border-top:5px solid #6b321c;border-bottom:4px solid #130704;box-shadow:0 -9px 24px #0009,0 12px 18px #000b}
.dj-altar-apron{position:absolute;left:4%;right:4%;top:66px;height:112px;background:linear-gradient(90deg,#160906,#35170d 12%,#281108 50%,#35170d 88%,#160906);border:4px solid #160906;box-shadow:inset 0 0 0 2px #61301a,inset 0 0 35px #000}
.dj-altar-apron:before{content:"☯　☁　☯　☁　☯";position:absolute;inset:12px 8%;display:grid;place-items:center;border:1px solid #7c4a2766;color:#8d633c88;font-size:32px;letter-spacing:.8em;text-shadow:0 2px 2px #000}
.dj-altar-leg{position:absolute;top:170px;width:88px;height:55px;background:linear-gradient(90deg,#130704,#3b1b10,#180906);border:2px solid #0d0503}.dj-altar-leg.left{left:8%}.dj-altar-leg.right{right:8%}
.dj-runner{position:absolute;z-index:2;left:50%;top:22px;width:180px;height:190px;transform:translateX(-50%);background:linear-gradient(90deg,#52180f,#8a3020 15%,#692116 50%,#8a3020 85%,#52180f);border-left:3px solid #b07a3b88;border-right:3px solid #b07a3b88;box-shadow:0 10px 20px #0008}
.dj-runner:after{content:"☯";position:absolute;top:82px;left:50%;transform:translateX(-50%);font-size:54px;color:#c99a55aa}
.dj-altar{z-index:16;bottom:72px;width:min(1180px,96vw);height:180px;display:block}
.dj-altar button{position:absolute;bottom:0}.dj-altar button:hover{transform:translateY(-5px)}
.dj-bell{left:6%;width:105px;height:150px}.dj-sword{left:25%;width:62px;height:174px}.dj-incense{left:50%;transform:translateX(-50%)!important;width:220px;height:190px}.dj-incense:hover{transform:translateX(-50%)!important}.dj-bagua{right:23%;width:145px;height:145px}.dj-talisman{right:3%;width:145px;height:92px;transform:rotate(-90deg)}.dj-talisman:hover{transform:rotate(-90deg) translateY(-5px)!important}
.dj-artifact-label{position:absolute;bottom:-28px;font-style:normal;font-size:13px;letter-spacing:.14em;color:#e7c47d;background:#0b0907e8;border:1px solid #b88c4666;padding:1px 9px;white-space:nowrap;pointer-events:none}.label-bell{left:6%}.label-sword{left:22.5%}.label-incense{left:50%;transform:translateX(-50%)}.label-bagua{right:23%}.label-talisman{right:5%}
.dj-incense span{display:none}.dj-incense-sticks{bottom:39%}
.dj-flame{opacity:.92!important;animation:djLiveFlame .36s ease-in-out infinite alternate!important;filter:drop-shadow(0 0 7px #ff6b0d) drop-shadow(0 0 13px #ffb22e)}
.dj-incense.is-burning .dj-flame{height:19px;opacity:1}.dj-flame.f2{height:25px!important}
.dj-hero-smoke{bottom:205px}
/* stage: talisman follows altar orientation; mirror gua remain readable */
.dj-stage.is-talisman .dj-stage-object,.dj-talisman-exact{transform:translate(-50%,-50%) rotate(-90deg)}
.dj-stage.is-talisman .dj-stage-object{animation:djTalHorizontal 8s ease forwards}.dj-talisman-exact{animation:djExactHorizontal 5.1s ease 1.1s forwards}
@keyframes djTalHorizontal{0%{opacity:0;transform:translate(-50%,-48%) rotate(-90deg) scale(.7)}12%,88%{opacity:1;transform:translate(-50%,-50%) rotate(-90deg) scale(1)}100%{opacity:0;transform:translate(-50%,-47%) rotate(-90deg) scale(.94)}}
@keyframes djExactHorizontal{0%{opacity:.15;clip-path:inset(0 0 100% 0);transform:translate(-50%,-50%) rotate(-90deg)}10%{opacity:1}82%{opacity:1;clip-path:inset(0);transform:translate(-50%,-50%) rotate(-90deg)}100%{opacity:.4;clip-path:inset(0);transform:translate(-50%,-50%) rotate(-90deg)}}
.dj-stage.is-bagua .dj-trigram{z-index:9!important;color:#f3d68d!important;background:#1a1008aa!important;border-color:#d8ae5a99!important}
@media(max-width:760px){.dj-sanqing{bottom:220px}.dj-altar-furniture{height:190px}.dj-altar{bottom:72px;width:100vw;height:145px}.dj-bell{left:3%;width:60px;height:95px}.dj-sword{left:22%;width:42px;height:110px}.dj-incense{width:120px;height:125px}.dj-bagua{right:20%;width:76px;height:76px}.dj-talisman{right:1%;width:78px;height:50px}.dj-artifact-label{font-size:9px;padding:0 3px;bottom:-20px}.label-bell{left:2%}.label-sword{left:18%}.label-bagua{right:18%}.label-talisman{right:1%}.dj-altar-apron:before{font-size:20px}.dj-runner{width:110px}.dj-hero-smoke{bottom:190px}}

/* Daojia 1.5.2 — altar placement + interaction corrections */
/* The altar surface is the single baseline: every ritual object physically sits on it. */
.dj-sanqing{bottom:222px}
.dj-altar-furniture{bottom:0;height:236px;width:min(1320px,100vw)}
.dj-altar-top{top:24px;height:48px;border-top-width:6px}
.dj-altar-apron{top:71px;height:116px}
.dj-altar-leg{top:184px;height:52px}
.dj-runner{top:20px;height:205px;width:190px}
.dj-altar{bottom:198px;width:min(1160px,94vw);height:168px;overflow:visible}
.dj-altar button{bottom:0;transform-origin:50% 100%}
.dj-bell{left:6%;width:92px;height:132px}
.dj-sword{left:25%;width:54px;height:158px}
.dj-incense{left:50%;width:210px;height:158px;transform:translateX(-50%)!important}
.dj-incense:hover{transform:translateX(-50%) translateY(-4px)!important}
.dj-bagua{right:23%;width:132px;height:132px}
.dj-talisman{right:3%;width:158px;height:82px;transform:none!important}
.dj-talisman:hover{transform:translateY(-4px)!important}
.dj-artifact-label{bottom:-31px}
.label-bell{left:5.8%}.label-sword{left:22.7%}.label-incense{left:50%;transform:translateX(-50%)}.label-bagua{right:22.3%}.label-talisman{right:4.1%}

/* Incense is unlit on load. Visible flames and smoke only appear after click. */
.dj-incense .dj-flame{opacity:0!important;animation:none!important}
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{opacity:1!important;animation:djLiveFlame .36s ease-in-out infinite alternate!important}
.dj-incense.is-burning .dj-flame{height:19px!important}.dj-incense.is-burning .dj-flame.f2{height:25px!important}
.dj-incense .dj-smoke{opacity:0!important}
.dj-incense.is-burning .dj-smoke{opacity:.62!important}
.dj-hero-smoke{bottom:203px}

/* Talisman stays horizontal everywhere, matching the altar reference. */
.dj-stage.is-talisman .dj-stage-object,.dj-talisman-exact{transform:translate(-50%,-50%) rotate(0deg)!important}
.dj-stage.is-talisman .dj-stage-object{animation:djTalHorizontal152 8s ease forwards!important}
.dj-talisman-exact{animation:djExactHorizontal152 5.1s ease 1.1s forwards!important}
@keyframes djTalHorizontal152{0%{opacity:0;transform:translate(-50%,-48%) scale(.7)}12%,88%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-47%) scale(.94)}}
@keyframes djExactHorizontal152{0%{opacity:.15;clip-path:inset(0 0 100% 0);transform:translate(-50%,-50%)}10%{opacity:1}82%{opacity:1;clip-path:inset(0);transform:translate(-50%,-50%)}100%{opacity:.4;clip-path:inset(0);transform:translate(-50%,-50%)}}

/* Sword finale: light is drawn directly up the blade, from hilt toward tip. */
.dj-stage.is-sword .dj-sword-final-glint{left:50%;top:66%;width:5px;height:0;transform:translateX(-50%);border-radius:99px;background:linear-gradient(to top,rgba(255,220,132,.25),#fff 52%,rgba(200,226,255,.9));box-shadow:0 0 8px #fff,0 0 18px #c6e2ff,0 0 30px #dfbd72;opacity:0;animation:djBladeTrace152 1.05s cubic-bezier(.2,.7,.15,1) 2.55s forwards!important}
.dj-stage.is-sword .dj-sword-final-glint:after{content:"";position:absolute;left:50%;top:-12px;width:18px;height:18px;border-radius:50%;transform:translateX(-50%);background:#fff;box-shadow:0 0 14px 5px #d9ecff,0 0 30px 9px #d4b366}
@keyframes djBladeTrace152{0%{opacity:0;top:66%;height:0}12%{opacity:1}62%{opacity:1;top:24%;height:42%}82%{opacity:.92;top:19%;height:47%}100%{opacity:0;top:16%;height:50%}}

@media(max-width:760px){
 .dj-sanqing{bottom:214px}.dj-altar-furniture{height:220px}.dj-altar{bottom:184px;height:130px;width:100vw}
 .dj-bell{left:3%;width:58px;height:82px}.dj-sword{left:21%;width:38px;height:104px}.dj-incense{width:118px;height:92px}.dj-bagua{right:19%;width:74px;height:74px}.dj-talisman{right:1%;width:88px;height:46px}
 .dj-artifact-label{bottom:-24px;font-size:9px}.label-bell{left:1.5%}.label-sword{left:17%}.label-bagua{right:17%}.label-talisman{right:.5%}
 .dj-hero-smoke{bottom:184px}
}
\n/* === Daojia 1.5.3 final altar refinement === */
/* one shared tabletop baseline: 16 / 33 / 50 / 67 / 84 */
.dj-altar{bottom:198px!important;width:min(1100px,90vw)!important;height:165px!important;display:block!important;overflow:visible!important}
.dj-altar button{bottom:0!important;position:absolute!important;transform-origin:50% 100%}
.dj-bell{left:16%!important;width:86px!important;height:115px!important;transform:translateX(-50%)!important}
.dj-sword{left:33%!important;width:58px!important;height:165px!important;transform:translateX(-50%)!important;overflow:visible!important}
.dj-incense{left:50%!important;width:205px!important;height:150px!important;transform:translateX(-50%)!important}
.dj-bagua{left:67%!important;right:auto!important;width:130px!important;height:130px!important;transform:translateX(-50%)!important}
.dj-talisman{left:84%!important;right:auto!important;width:150px!important;height:78px!important;transform:translateX(-50%)!important;overflow:visible!important}
.dj-talisman>img{transform:rotate(-90deg);transform-origin:center;width:78px!important;height:150px!important;position:absolute;left:36px;bottom:-36px}
.dj-altar button:hover{filter:drop-shadow(0 0 12px #d2a85b88)}
.dj-bell:hover,.dj-sword:hover,.dj-bagua:hover,.dj-talisman:hover{transform:translateX(-50%) translateY(-4px)!important}
.dj-incense:hover{transform:translateX(-50%) translateY(-4px)!important}
/* labels track the same slots */
.label-bell{left:16%!important;transform:translateX(-50%)}.label-sword{left:33%!important;transform:translateX(-50%)}.label-incense{left:50%!important}.label-bagua{left:67%!important;right:auto!important;transform:translateX(-50%)}.label-talisman{left:84%!important;right:auto!important;transform:translateX(-50%)}
/* altar: darker carved timber and narrow runner, no modern cabinet face */
.dj-altar-furniture{bottom:0!important;height:236px!important;width:min(1200px,96vw)!important}
.dj-altar-top{top:24px!important;height:48px!important;background:linear-gradient(#4b2417,#2c130c 55%,#160906)!important;border-top:6px solid #744126!important}
.dj-altar-apron{top:71px!important;height:116px!important;background:linear-gradient(90deg,#160906,#30150d 12%,#231008 50%,#30150d 88%,#160906)!important}
.dj-altar-apron:before{content:""!important;inset:12px 5%!important;border:1px solid #7c4a2766!important;background:repeating-linear-gradient(90deg,transparent 0 26px,#8d633c18 27px 29px)!important}
.dj-runner{width:160px!important;background:linear-gradient(90deg,#54100e,#781817 50%,#54100e)!important;border-color:#9c6b31!important}
/* bell swings from suspension point */
.dj-bell.animating img{animation:djBell153 2.2s cubic-bezier(.36,.07,.19,.97);transform-origin:50% 8%}
@keyframes djBell153{0%,100%{transform:rotate(0)}20%{transform:rotate(11deg)}40%{transform:rotate(-9deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-2deg)}}
/* short glint travels along blade */
.dj-sword-short-spark{position:absolute;z-index:4;left:50%;bottom:18px;width:5px;height:25px;border-radius:4px;background:linear-gradient(to top,transparent,#fff 52%,#ffd66e);box-shadow:0 0 8px #fff,0 0 16px #e6bd60;opacity:0;pointer-events:none;transform:translateX(-50%)}
.dj-sword.animating .dj-sword-short-spark{animation:djBladeScan153 1s cubic-bezier(.25,.46,.45,.94)}
@keyframes djBladeScan153{0%{transform:translateX(-50%) translateY(0);opacity:0}15%,85%{opacity:1}100%{transform:translateX(-50%) translateY(-135px);opacity:0}}
/* incense: absolutely no CSS flame/smoke until interaction */
.dj-incense:not(.is-igniting):not(.is-burning) .dj-flame,.dj-incense:not(.is-igniting):not(.is-burning)::before,.dj-incense:not(.is-igniting):not(.is-burning)::after,.dj-incense:not(.is-burning) .dj-smoke{opacity:0!important;animation:none!important}
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{opacity:1!important;animation:djLiveFlame .36s ease-in-out infinite alternate!important}
/* static eight directions around mirror; mirror image itself never rotates */
.dj-static-trigrams{position:absolute;z-index:5;inset:0;pointer-events:none}.dj-static-trigrams b{position:absolute;font-style:normal;font-size:12px;color:#d9b55c;text-shadow:0 1px 4px #000,0 0 5px #9f7a32}.dj-static-trigrams .qian{left:50%;top:0;transform:translateX(-50%)}.dj-static-trigrams .dui{right:10%;top:14%}.dj-static-trigrams .li{right:0;top:50%;transform:translateY(-50%)}.dj-static-trigrams .zhen{right:10%;bottom:14%}.dj-static-trigrams .xun{left:50%;bottom:0;transform:translateX(-50%)}.dj-static-trigrams .kan{left:10%;bottom:14%}.dj-static-trigrams .gen{left:0;top:50%;transform:translateY(-50%)}.dj-static-trigrams .kun{left:10%;top:14%}
.dj-bagua.is-active{animation:none!important}.dj-bagua.animating img{filter:drop-shadow(0 0 16px #d6b363)}
/* low wooden talisman stand */
.dj-talisman-stand{position:absolute;z-index:-1;left:50%;bottom:-2px;transform:translateX(-50%);width:130px;height:13px;border:1px solid #6e3a1b;border-radius:3px;background:linear-gradient(#4a2511,#291206);box-shadow:0 3px 7px #000b}.dj-talisman-stand:before,.dj-talisman-stand:after{content:"";position:absolute;top:-5px;width:11px;height:6px;background:#3a1c0c;border:1px solid #5a2e15}.dj-talisman-stand:before{left:9px}.dj-talisman-stand:after{right:9px}
@media(max-width:760px){.dj-altar{bottom:184px!important;width:100vw!important;height:130px!important}.dj-bell{left:10%!important;width:52px!important;height:78px!important}.dj-sword{left:29%!important;width:36px!important;height:104px!important}.dj-incense{left:50%!important;width:116px!important;height:92px!important}.dj-bagua{left:70%!important;width:74px!important;height:74px!important}.dj-talisman{left:90%!important;width:82px!important;height:46px!important}.dj-talisman>img{width:46px!important;height:82px!important;left:18px;bottom:-18px}.dj-static-trigrams b{font-size:8px}.dj-talisman-stand{width:72px;height:8px}.dj-artifact-label{display:none}}

/* === Daojia 1.6.0 — real altar asset + restored interaction baseline === */
.dj-hero{min-height:720px}
.dj-sanqing{bottom:238px}
.dj-altar-furniture{position:absolute!important;z-index:12!important;left:50%!important;bottom:-8px!important;transform:translateX(-50%)!important;width:min(1450px,98vw)!important;height:285px!important;pointer-events:none!important}
.dj-altar-table-image{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:100%;height:100%;object-fit:contain;object-position:center bottom;filter:brightness(.72) saturate(.78) drop-shadow(0 -5px 14px rgba(0,0,0,.5))}
/* one physical tabletop baseline across all five artifacts */
.dj-altar{position:absolute!important;z-index:18!important;left:50%!important;bottom:188px!important;transform:translateX(-50%)!important;width:min(1250px,88vw)!important;height:178px!important;display:block!important;overflow:visible!important;pointer-events:none}
.dj-altar button{position:absolute!important;bottom:0!important;pointer-events:auto!important;margin:0!important;padding:0!important;background:none!important;border:0!important;cursor:pointer!important;transform-origin:50% 100%}
.dj-bell{left:10%!important;width:104px!important;height:128px!important;transform:translateX(-50%)!important}
.dj-sword{left:30%!important;width:56px!important;height:170px!important;transform:translateX(-50%)!important;overflow:visible!important}
.dj-incense{left:50%!important;width:220px!important;height:145px!important;transform:translateX(-50%)!important}
.dj-bagua{left:70%!important;right:auto!important;width:132px!important;height:132px!important;transform:translateX(-50%)!important}
.dj-talisman{left:90%!important;right:auto!important;width:160px!important;height:82px!important;transform:translateX(-50%)!important;overflow:visible!important}
.dj-talisman>img{position:absolute!important;left:0!important;bottom:7px!important;width:160px!important;height:auto!important;transform:none!important;object-fit:contain!important}
.dj-talisman-stand{display:block!important;position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:145px;height:12px;border:1px solid #76502f;background:linear-gradient(#57351f,#25130b);box-shadow:0 5px 9px #0009;border-radius:3px;z-index:-1}
.dj-artifact-label{z-index:25!important;bottom:-30px!important;font-size:11px!important;background:#090704e8!important;border-color:#9d713d99!important;color:#e8c985!important}
.label-bell{left:10%!important;transform:translateX(-50%)!important}.label-sword{left:30%!important;transform:translateX(-50%)!important}.label-incense{left:50%!important;transform:translateX(-50%)!important}.label-bagua{left:70%!important;right:auto!important;transform:translateX(-50%)!important}.label-talisman{left:90%!important;right:auto!important;transform:translateX(-50%)!important}
/* keep altar object itself steady on hover; only a small lift */
.dj-bell:hover,.dj-sword:hover,.dj-bagua:hover,.dj-talisman:hover{transform:translateX(-50%) translateY(-3px)!important}.dj-incense:hover{transform:translateX(-50%) translateY(-3px)!important}
/* incense starts fully unlit; the existing JS alone enables flames and smoke */
.dj-incense .dj-flames,.dj-incense .dj-smoke{opacity:0!important;visibility:hidden!important}
.dj-incense.is-igniting .dj-flames,.dj-incense.is-burning .dj-flames{opacity:1!important;visibility:visible!important}
.dj-incense.is-burning .dj-smoke{opacity:.58!important;visibility:visible!important}
/* clear, visible flame tongues */
.dj-flame{background:radial-gradient(ellipse at 50% 70%,#fff7bd 0 16%,#ffad22 34%,#f04a14 66%,transparent 72%)!important;filter:drop-shadow(0 0 5px #ff8a18) drop-shadow(0 0 9px #e33b0d);width:10px!important;opacity:0!important}
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{opacity:1!important;height:22px!important;animation:djLiveFlame .32s ease-in-out infinite alternate!important}.dj-incense.is-burning .dj-flame.f2{height:28px!important}
/* bell direct interaction */
.dj-bell.animating img{animation:djBell160 2.2s cubic-bezier(.36,.07,.19,.97)!important;transform-origin:50% 7%}
@keyframes djBell160{0%,100%{transform:rotate(0)}18%{transform:rotate(13deg)}38%{transform:rotate(-10deg)}58%{transform:rotate(7deg)}78%{transform:rotate(-4deg)}90%{transform:rotate(2deg)}}
/* sword: a short spark travels over the blade from hilt to tip */
.dj-sword-short-spark{display:block!important;position:absolute!important;z-index:5!important;left:50%!important;bottom:22px!important;width:7px!important;height:24px!important;border-radius:50%!important;background:linear-gradient(to top,transparent,#fff 45%,#fff6b0 70%,transparent)!important;box-shadow:0 0 8px 2px #fff,0 0 16px 4px #e8c45f!important;opacity:0!important;pointer-events:none!important;transform:translateX(-50%)!important}
.dj-sword.animating .dj-sword-short-spark{animation:djBladeScan160 1.05s ease-out!important}
@keyframes djBladeScan160{0%{transform:translateX(-50%) translateY(0);opacity:0}12%{opacity:1}88%{opacity:1}100%{transform:translateX(-50%) translateY(-142px);opacity:0}}
/* mirror: static body, readable eight directions; stage animation remains cloud/Dao only */
.dj-bagua{animation:none!important}.dj-bagua img{transform:none!important;animation:none!important}
.dj-static-trigrams{display:block!important;position:absolute!important;inset:-5px!important;z-index:4!important;pointer-events:none!important}.dj-static-trigrams b{font-size:11px!important;color:#e5c66f!important;text-shadow:0 1px 3px #000,0 0 5px #9b6c1c!important}
/* talisman remains horizontal on altar and in stage */
.dj-stage.is-talisman .dj-stage-object,.dj-talisman-exact{transform:translate(-50%,-50%) rotate(0deg)!important}
@media(max-width:760px){.dj-sanqing{bottom:205px}.dj-altar-furniture{height:215px!important;width:108vw!important}.dj-altar{bottom:143px!important;width:96vw!important;height:125px!important}.dj-bell{left:8%!important;width:58px!important;height:78px!important}.dj-sword{left:29%!important;width:35px!important;height:105px!important}.dj-incense{width:118px!important;height:82px!important}.dj-bagua{left:71%!important;width:76px!important;height:76px!important}.dj-talisman{left:91%!important;width:92px!important;height:48px!important}.dj-talisman>img{width:92px!important}.dj-talisman-stand{width:84px;height:8px}.dj-artifact-label{display:none!important}}

/* === Daojia 1.6.1 — foreground altar spacing === */
/* Pull the altar toward the viewer: lower and larger, leaving a clear gap from Sanqing. */
.dj-sanqing{bottom:270px!important}
.dj-altar-furniture{bottom:-48px!important;width:min(1540px,102vw)!important;height:315px!important;z-index:12!important}
.dj-altar{bottom:174px!important;width:min(1320px,92vw)!important;height:184px!important;z-index:19!important}
/* direct talisman feedback without changing its horizontal resting pose */
.dj-talisman.animating>img{animation:djTalismanPulse161 1.6s ease-in-out!important}
@keyframes djTalismanPulse161{0%,100%{filter:drop-shadow(0 6px 10px #0009)}35%{filter:drop-shadow(0 0 9px #e3bb62) drop-shadow(0 0 18px #b54828);transform:scale(1.035)}70%{filter:drop-shadow(0 0 5px #e3bb62);transform:scale(1)}}
@media(max-width:760px){.dj-sanqing{bottom:225px!important}.dj-altar-furniture{bottom:-30px!important;height:235px!important;width:112vw!important}.dj-altar{bottom:136px!important}}

/* === Daojia 1.6.2 — foreground depth + tighter ritual grouping === */
/* Bring the real altar further toward the viewer without moving Sanqing forward. */
.dj-altar-furniture{bottom:-78px!important;width:min(1660px,108vw)!important;height:350px!important}
/* Keep all five objects on the tabletop, but group them more tightly around the censer. */
.dj-altar{bottom:174px!important;width:min(1160px,84vw)!important;height:184px!important}
.dj-bell{left:16%!important}.dj-sword{left:33%!important}.dj-incense{left:50%!important}.dj-bagua{left:67%!important}.dj-talisman{left:84%!important}
.label-bell{left:16%!important}.label-sword{left:33%!important}.label-incense{left:50%!important}.label-bagua{left:67%!important}.label-talisman{left:84%!important}
/* Raise the visible flame tongues so they sit on the actual incense tips. */
.dj-flame.f1{top:15%!important}.dj-flame.f2{top:11%!important}.dj-flame.f3{top:14%!important}
@media(max-width:760px){.dj-altar-furniture{bottom:-48px!important;height:255px!important;width:118vw!important}.dj-altar{bottom:139px!important;width:92vw!important}.dj-bell{left:12%!important}.dj-sword{left:31%!important}.dj-incense{left:50%!important}.dj-bagua{left:69%!important}.dj-talisman{left:88%!important}.dj-flame.f1{top:13%!important}.dj-flame.f2{top:9%!important}.dj-flame.f3{top:12%!important}}

/* === Daojia 1.6.3 — requested depth / flame / sword alignment === */
/* Altar: 50% stronger foreground treatment than 1.6.2. */
.dj-altar-furniture{bottom:-117px!important;width:min(1850px,120vw)!important;height:525px!important}
/* Flames: raise by 50% relative to their 1.6.2 top offsets. */
.dj-flame.f1{top:7.5%!important}.dj-flame.f2{top:5.5%!important}.dj-flame.f3{top:7%!important}
/* Sword light: shift 20% left from its previous horizontal position (50% -> 40%). */
.dj-sword-short-spark{left:40%!important}
@media(max-width:760px){.dj-altar-furniture{bottom:-72px!important;height:382px!important;width:132vw!important}.dj-flame.f1{top:6.5%!important}.dj-flame.f2{top:4.5%!important}.dj-flame.f3{top:6%!important}.dj-sword-short-spark{left:40%!important}}

/* === Daojia 1.6.4 — reference-image tabletop placement === */
/* The altar image is the furniture. Ritual objects now sit on the visible TOP surface,
   not on the carved front apron. */
.dj-altar{bottom:292px!important;width:min(1110px,82vw)!important;height:190px!important;z-index:22!important}
/* Five objects form one compact ceremonial row, centered on the censer. */
.dj-bell{left:14%!important;width:112px!important;height:142px!important}
.dj-sword{left:32%!important;width:62px!important;height:182px!important}
.dj-incense{left:50%!important;width:232px!important;height:158px!important}
.dj-bagua{left:68%!important;width:142px!important;height:142px!important}
.dj-talisman{left:86%!important;width:170px!important;height:88px!important}
.dj-talisman>img{width:170px!important;bottom:8px!important}
.label-bell{left:14%!important}.label-sword{left:32%!important}.label-incense{left:50%!important}.label-bagua{left:68%!important}.label-talisman{left:86%!important}
/* Labels rest immediately below each object, still over the tabletop rather than the apron. */
.dj-artifact-label{bottom:-25px!important}
/* Keep requested FX calibration from 1.6.3. */
.dj-flame.f1{top:7.5%!important}.dj-flame.f2{top:5.5%!important}.dj-flame.f3{top:7%!important}
.dj-sword-short-spark{left:40%!important}
@media(max-width:760px){
 .dj-altar{bottom:205px!important;width:94vw!important;height:132px!important}
 .dj-bell{left:10%!important;width:58px!important;height:82px!important}
 .dj-sword{left:30%!important;width:38px!important;height:112px!important}
 .dj-incense{left:50%!important;width:124px!important;height:88px!important}
 .dj-bagua{left:70%!important;width:80px!important;height:80px!important}
 .dj-talisman{left:90%!important;width:96px!important;height:50px!important}
 .dj-talisman>img{width:96px!important}
}

/* === Daojia 1.6.5 — altar detail polish, layout locked === */
/* Keep the 1.6.4 tabletop geometry. Only refine scale, spacing, grounding and FX. */
.dj-altar{width:min(1080px,80vw)!important}
.dj-bell{left:15%!important;width:120px!important;height:150px!important}
.dj-sword{left:32.5%!important;width:72px!important;height:188px!important}
.dj-incense{left:50%!important;width:242px!important;height:164px!important}
.dj-bagua{left:67.5%!important;width:148px!important;height:148px!important}
.dj-talisman{left:85%!important;width:176px!important;height:92px!important}
.dj-talisman>img{width:176px!important;bottom:9px!important}
.label-bell{left:15%!important}.label-sword{left:32.5%!important}.label-incense{left:50%!important}.label-bagua{left:67.5%!important}.label-talisman{left:85%!important}
/* Give every object a soft contact shadow so it visually sits on the wood. */
.dj-altar button:after{content:"";position:absolute;z-index:-2;left:50%;bottom:-3px;transform:translateX(-50%);width:72%;height:11px;border-radius:50%;background:radial-gradient(ellipse,rgba(0,0,0,.68),rgba(0,0,0,0) 72%);filter:blur(2px);pointer-events:none}
.dj-incense:after{width:66%!important;height:14px!important;bottom:-2px!important}
.dj-bagua:after{width:76%!important}.dj-talisman:after{width:82%!important}
/* Slightly warmer shared lighting, without changing the source artwork. */
.dj-altar .dj-artifact>img,.dj-incense>img:first-child{filter:drop-shadow(0 5px 6px rgba(0,0,0,.72)) saturate(.94) brightness(.96)}
.dj-altar .dj-artifact:hover>img,.dj-incense:hover>img:first-child{filter:drop-shadow(0 5px 8px rgba(0,0,0,.72)) drop-shadow(0 0 7px rgba(212,175,55,.28)) saturate(1) brightness(1)}
/* Sword is intentionally more present; keep its calibrated scan 20% left. */
.dj-sword-short-spark{left:40%!important;width:6px!important;height:22px!important;box-shadow:0 0 7px 2px #fff,0 0 14px 3px #e8c45f!important}
/* Flame tips remain high but become narrower and more flame-like. */
.dj-flame{width:8px!important}
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{height:24px!important}.dj-incense.is-burning .dj-flame.f2{height:30px!important}
/* Mirror lettering stays readable without overwhelming the bronze rim. */
.dj-static-trigrams{inset:-2px!important}.dj-static-trigrams b{font-size:10px!important;color:#e8c96e!important}
/* Labels share one visual baseline and feel like small altar plaques. */
.dj-artifact-label{bottom:-27px!important;min-width:58px;text-align:center;padding:2px 9px!important;border-color:#a5793f99!important;box-shadow:0 2px 6px #0008}
@media(max-width:760px){
 .dj-altar{width:92vw!important}
 .dj-bell{left:11%!important;width:62px!important;height:86px!important}
 .dj-sword{left:30.5%!important;width:42px!important;height:116px!important}
 .dj-incense{left:50%!important;width:130px!important;height:92px!important}
 .dj-bagua{left:69.5%!important;width:84px!important;height:84px!important}
 .dj-talisman{left:89%!important;width:100px!important;height:52px!important}
 .dj-talisman>img{width:100px!important}
}


/* === Daojia 1.6.6 — runner Taiji + five-artifact interaction polish === */
/* Move the existing two-layer Taiji from the Sanqing backdrop onto the exact center of the red altar runner. */
.dj-taiji{z-index:18!important;left:50%!important;top:auto!important;bottom:54px!important;width:112px!important;height:112px!important;aspect-ratio:1!important;transform:translateX(-50%)!important;opacity:.72!important;filter:saturate(.78) sepia(.12) drop-shadow(0 0 7px rgba(222,178,82,.28))!important;pointer-events:none!important}
.dj-taiji-outer{animation:djspin 58s linear infinite!important}.dj-taiji-inner{animation:djspinrev 31s linear infinite!important;transform:scale(.78)}
/* Bell: pivot from its upper hanging point, with damped movement. */
.dj-bell.animating>img{transform-origin:50% 12%!important;animation:djBellFine166 2.2s cubic-bezier(.22,.8,.28,1)!important}
@keyframes djBellFine166{0%,100%{transform:rotate(0)}14%{transform:rotate(10deg)}30%{transform:rotate(-8deg)}48%{transform:rotate(5deg)}66%{transform:rotate(-3deg)}82%{transform:rotate(1.3deg)}}
/* Sword: keep the body still; scan the calibrated blade and finish with a brief tip flare. */
.dj-sword.animating>img{filter:drop-shadow(0 5px 6px #000b) drop-shadow(0 0 7px rgba(230,202,126,.38))!important}
.dj-sword.animating .dj-sword-short-spark{animation:djBladeFine166 1.1s cubic-bezier(.2,.65,.25,1)!important}
@keyframes djBladeFine166{0%{transform:translateX(-50%) translateY(0) scaleY(.45);opacity:0}12%{opacity:1}78%{opacity:1}92%{transform:translateX(-50%) translateY(-146px) scaleY(.8);opacity:1;box-shadow:0 0 10px 3px #fff,0 0 22px 6px #e8c45f}100%{transform:translateX(-50%) translateY(-151px) scaleY(.35);opacity:0}}
/* Incense: ignition remains click-only; make three visible flames settle before smoke dominates. */
.dj-incense.is-igniting .dj-flame,.dj-incense.is-burning .dj-flame{animation:djFlameFine166 .46s ease-in-out infinite alternate!important}
@keyframes djFlameFine166{from{transform:translateX(-50%) scale(.86) rotate(-2deg);filter:brightness(.95)}to{transform:translateX(-50%) scale(1.08) rotate(2deg);filter:brightness(1.18)}}
.dj-incense.is-burning .dj-smoke{opacity:.48!important;animation-duration:8.5s!important}
/* Mirror: body never rotates. Direct click produces a misty Dao glyph while the full stage remains available. */
.dj-bagua-dao{position:absolute;z-index:8;left:50%;top:50%;transform:translate(-50%,-50%) scale(.78);font-style:normal;font-size:30px;line-height:1;color:#ead8a8;text-shadow:0 0 8px #d7ad55,0 0 16px #fff8;opacity:0;filter:blur(7px);pointer-events:none}
.dj-bagua.animating .dj-bagua-dao{animation:djDaoFine166 8s ease-in-out!important}
@keyframes djDaoFine166{0%,100%{opacity:0;filter:blur(8px);transform:translate(-50%,-50%) scale(.76)}25%{opacity:.72;filter:blur(2px);transform:translate(-50%,-50%) scale(.96)}42%,70%{opacity:.9;filter:blur(.8px);transform:translate(-50%,-50%) scale(1)}85%{opacity:.35;filter:blur(4px)}}
.dj-bagua.animating,.dj-bagua.animating>img{transform:none!important;animation:none!important}
/* Talisman: keep it horizontal; trace-like warm aura without lifting or spinning the paper. */
.dj-talisman-aura{position:absolute;z-index:3;inset:10% 3%;border-radius:10px;background:linear-gradient(90deg,transparent,rgba(229,72,38,.18),rgba(242,192,82,.28),rgba(229,72,38,.18),transparent);filter:blur(6px);opacity:0;pointer-events:none}
.dj-talisman.animating .dj-talisman-aura{animation:djTalAura166 1.6s ease-in-out!important}
.dj-talisman.animating>img{animation:djTalInk166 1.6s ease-in-out!important}
@keyframes djTalAura166{0%,100%{opacity:0;transform:scaleX(.2)}35%{opacity:.85;transform:scaleX(.72)}65%{opacity:.55;transform:scaleX(1)}}
@keyframes djTalInk166{0%,100%{filter:drop-shadow(0 5px 6px #000b)}45%{filter:drop-shadow(0 0 5px #d94b2d) drop-shadow(0 0 10px #e7bd61) brightness(1.08)}75%{filter:drop-shadow(0 0 5px #e7bd61)}}
/* Click affordance: restrained warm edge light only. */
.dj-altar button:focus-visible{outline:1px solid #d8b568;outline-offset:4px;border-radius:4px}
@media(max-width:760px){.dj-taiji{bottom:38px!important;width:72px!important;height:72px!important}.dj-bagua-dao{font-size:20px}}
@media(prefers-reduced-motion:reduce){.dj-taiji-outer,.dj-taiji-inner{animation:none!important}.dj-bell.animating>img,.dj-sword.animating .dj-sword-short-spark,.dj-bagua.animating .dj-bagua-dao,.dj-talisman.animating .dj-talisman-aura,.dj-talisman.animating>img{animation:none!important}}

/* === Daojia 1.6.7 — Taiji eye / Xuanmen opening === */
/* The printed Taiji on the runner remains visually native; this is only the invisible/soft interactive eye. */
.dj-taiji-eye{position:absolute;z-index:31;left:50%;bottom:74px;transform:translateX(-50%);width:92px;height:92px;border:0;border-radius:50%;background:transparent;cursor:pointer;padding:0;pointer-events:auto}
.dj-taiji-eye::before{content:"";position:absolute;inset:12px;border-radius:50%;box-shadow:0 0 0 1px rgba(222,184,101,.24),0 0 13px rgba(222,184,101,.18);animation:djEyeBreath 3.6s ease-in-out infinite}
.dj-taiji-eye::after{content:"阵眼 · 启";position:absolute;left:50%;top:100%;transform:translate(-50%,8px);white-space:nowrap;font:12px/1.2 "Noto Serif SC","Songti SC",serif;letter-spacing:.2em;color:#e7c985;background:#080604d9;border:1px solid #b8894777;padding:3px 8px;opacity:0;transition:.35s;pointer-events:none}
.dj-taiji-eye:hover::after,.dj-taiji-eye:focus-visible::after{opacity:1;transform:translate(-50%,4px)}
.dj-taiji-eye:hover::before,.dj-taiji-eye:focus-visible::before{box-shadow:0 0 0 1px rgba(239,201,116,.55),0 0 20px rgba(226,180,82,.42)}
.dj-taiji-eye:focus-visible{outline:1px solid #e2bd6f;outline-offset:4px}
.dj-eye-hint{position:absolute;z-index:32;left:50%;bottom:46px;transform:translateX(-50%);color:#e8cf96;font-size:12px;letter-spacing:.18em;text-shadow:0 2px 8px #000;background:#080604b8;border:1px solid #b8894744;padding:2px 8px;pointer-events:none;animation:djHintOut 4.8s ease forwards}
@keyframes djEyeBreath{0%,100%{opacity:.35;transform:scale(.92)}50%{opacity:1;transform:scale(1.08)}}
@keyframes djHintOut{0%,48%{opacity:0}58%,82%{opacity:1}100%{opacity:0}}
/* remove the 1.6.6 always-on overlay Taiji; the runner's printed Taiji is the visible eye */
.dj-taiji{display:none!important}
.dj-xuanmen{position:absolute;z-index:95;inset:0;pointer-events:none;opacity:0;transition:opacity .35s;background:rgba(0,0,0,.24)}
.dj-xuanmen.is-active{opacity:1;pointer-events:auto}
.dj-xuanmen-taiji{position:absolute;left:50%;top:50%;width:min(42vw,520px);aspect-ratio:1;transform:translate(-50%,-50%) scale(.25);opacity:0;filter:drop-shadow(0 0 24px rgba(224,180,83,.38));transition:transform 1.15s cubic-bezier(.2,.7,.2,1),opacity .65s}
.dj-xuanmen.is-forming .dj-xuanmen-taiji{transform:translate(-50%,-50%) scale(1);opacity:.94}
.dj-xuanmen-taiji img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.dj-xuanmen-taiji .outer{animation:djGateSpin 8s linear infinite}.dj-xuanmen-taiji .inner{animation:djGateSpinRev 5.5s linear infinite;transform:scale(.78)}
@keyframes djGateSpin{to{transform:rotate(360deg)}}@keyframes djGateSpinRev{from{transform:scale(.78) rotate(360deg)}to{transform:scale(.78) rotate(0)}}
.dj-hero-gate-half{position:absolute;z-index:90;top:0;bottom:0;width:50%;overflow:hidden;pointer-events:none;transition:transform 1.75s cubic-bezier(.72,0,.18,1);will-change:transform}
.dj-hero-gate-half.left{left:0}.dj-hero-gate-half.right{right:0}
.dj-hero-gate-copy{position:absolute;top:0;width:200%;height:100%;overflow:hidden}.dj-hero-gate-half.left .dj-hero-gate-copy{left:0}.dj-hero-gate-half.right .dj-hero-gate-copy{right:0}
.dj-hero-gate-copy>.dj-gate-snapshot{position:absolute;inset:0;background:rgba(5,5,5,.01)}
.dj-hero.is-gate-opening .dj-hero-gate-half.left{transform:translateX(-101%)}.dj-hero.is-gate-opening .dj-hero-gate-half.right{transform:translateX(101%)}
.dj-hero.is-gate-opening>.dj-bg,.dj-hero.is-gate-opening>.dj-vignette,.dj-hero.is-gate-opening>.dj-title,.dj-hero.is-gate-opening>.dj-sanqing,.dj-hero.is-gate-opening>.dj-altar-furniture,.dj-hero.is-gate-opening>.dj-hero-smoke,.dj-hero.is-gate-opening>.dj-altar,.dj-hero.is-gate-opening>.dj-scroll,.dj-hero.is-gate-opening>.dj-taiji-eye,.dj-hero.is-gate-opening>.dj-eye-hint{transition:opacity .45s;opacity:0!important}
.dj-hero.is-open{height:0!important;min-height:0!important;overflow:hidden!important;transition:height .7s ease,min-height .7s ease}
@media(max-width:760px){.dj-taiji-eye{bottom:48px;width:68px;height:68px}.dj-eye-hint{bottom:24px}.dj-xuanmen-taiji{width:min(76vw,380px)}}
@media(prefers-reduced-motion:reduce){.dj-taiji-eye::before,.dj-xuanmen-taiji .outer,.dj-xuanmen-taiji .inner{animation:none!important}}

/* === Daojia 1.6.8 — simple Taiji + true twin-door opening + quiet Bagua === */
/* 清静无为：八卦方位字平时完全隐藏，只在点击演出期间出现 */
.dj-static-trigrams{opacity:0!important;visibility:hidden!important;transition:opacity .55s ease!important}
.dj-bagua.animating .dj-static-trigrams{opacity:1!important;visibility:visible!important}
.dj-bagua.animating .dj-static-trigrams b{animation:djTrigramReveal168 5.8s ease both!important}
.dj-bagua.animating .dj-static-trigrams .dui{animation-delay:.12s!important}.dj-bagua.animating .dj-static-trigrams .li{animation-delay:.24s!important}.dj-bagua.animating .dj-static-trigrams .zhen{animation-delay:.36s!important}.dj-bagua.animating .dj-static-trigrams .xun{animation-delay:.48s!important}.dj-bagua.animating .dj-static-trigrams .kan{animation-delay:.60s!important}.dj-bagua.animating .dj-static-trigrams .gen{animation-delay:.72s!important}.dj-bagua.animating .dj-static-trigrams .kun{animation-delay:.84s!important}
@keyframes djTrigramReveal168{0%,100%{opacity:0;filter:blur(4px)}18%,76%{opacity:1;filter:blur(0)}}
/* 大阵改为最普通的黑白太极，不再使用花哨内外双环 */
.dj-xuanmen{background:transparent!important;overflow:hidden!important}
.dj-xuanmen-taiji{width:min(34vw,420px)!important;filter:drop-shadow(0 0 12px rgba(255,255,255,.22)) drop-shadow(0 0 24px rgba(0,0,0,.55))!important;transition:transform 1.05s cubic-bezier(.2,.7,.2,1),opacity .55s!important}
.dj-xuanmen-taiji img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;animation:djSimpleTaijiSpin168 4.8s linear infinite!important}
@keyframes djSimpleTaijiSpin168{to{transform:rotate(360deg)}}
.dj-gate-seam{position:absolute;z-index:4;left:50%;top:7%;bottom:7%;width:2px;transform:translateX(-50%) scaleY(0);transform-origin:center;background:linear-gradient(transparent,#e6c875 15%,#fff0b1 50%,#e6c875 85%,transparent);box-shadow:0 0 8px #e4bf61,0 0 22px rgba(228,191,97,.7);opacity:0;transition:transform .7s ease,opacity .4s}
.dj-xuanmen.is-seaming .dj-gate-seam{transform:translateX(-50%) scaleY(1);opacity:1}
/* 真正的左右门：点击时由 JS 克隆当前完整 Hero，各自裁成半屏再向两侧打开 */
.dj-hero-gate-half{z-index:92!important;background:#050505;transition:transform 1.9s cubic-bezier(.68,0,.18,1)!important;box-shadow:none}
.dj-hero-gate-half.left{clip-path:inset(0 0 0 0);box-shadow:10px 0 22px rgba(0,0,0,.38)}
.dj-hero-gate-half.right{clip-path:inset(0 0 0 0);box-shadow:-10px 0 22px rgba(0,0,0,.38)}
.dj-hero-gate-copy{width:200%!important;height:100%!important;pointer-events:none!important}
.dj-hero-gate-copy .dj-hero{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:0!important;overflow:hidden!important}
.dj-hero-gate-half.right .dj-hero-gate-copy .dj-hero{transform:translateX(-50%)!important}
.dj-hero.is-gate-opening>.dj-bg,.dj-hero.is-gate-opening>.dj-vignette,.dj-hero.is-gate-opening>.dj-title,.dj-hero.is-gate-opening>.dj-sanqing,.dj-hero.is-gate-opening>.dj-altar-furniture,.dj-hero.is-gate-opening>.dj-hero-smoke,.dj-hero.is-gate-opening>.dj-altar,.dj-hero.is-gate-opening>.dj-scroll,.dj-hero.is-gate-opening>.dj-taiji-eye,.dj-hero.is-gate-opening>.dj-eye-hint{opacity:1!important}
.dj-hero.is-gate-opening>.dj-xuanmen{opacity:0!important;transition:opacity .45s ease!important}
.dj-hero.is-gate-opening .dj-hero-gate-half.left{transform:translateX(-102%)!important}.dj-hero.is-gate-opening .dj-hero-gate-half.right{transform:translateX(102%)!important}
.dj-hero.is-open{transition:height .85s cubic-bezier(.4,0,.2,1),min-height .85s cubic-bezier(.4,0,.2,1)!important}
@media(max-width:760px){.dj-xuanmen-taiji{width:min(64vw,300px)!important}}

/* === Daojia 1.6.9 — Sanqing composition refinement === */
/* Keep the sacred center completely free of typography. */
.dj-title{display:none!important}
.dj-side-motto{position:absolute;z-index:9;top:29%;writing-mode:vertical-rl;text-orientation:upright;font-size:clamp(28px,2.7vw,44px);font-weight:400;letter-spacing:.22em;color:#eadfca;text-shadow:0 3px 16px #000,0 0 12px rgba(197,151,73,.16);pointer-events:none;white-space:nowrap}
.dj-side-motto.left{left:clamp(42px,7vw,118px)}
.dj-side-motto.right{right:clamp(42px,7vw,118px)}
/* Give the figures more breathing room above the altar and subtly strengthen the center axis. */
.dj-sanqing{bottom:286px!important;width:min(900px,76vw)!important;align-items:flex-end!important}
.dj-sanqing img{width:33.2%!important;max-height:500px!important;filter:brightness(.74) saturate(.72) drop-shadow(0 20px 25px #000)!important}
.dj-sanqing .dj-center{width:36.8%!important;transform:translateY(-10px) scale(1.035);transform-origin:bottom center;filter:brightness(.80) saturate(.76) drop-shadow(0 20px 26px #000) drop-shadow(0 0 10px rgba(218,177,91,.10))!important}
@media(max-width:760px){.dj-side-motto{top:22%;font-size:22px;letter-spacing:.12em}.dj-side-motto.left{left:12px}.dj-side-motto.right{right:12px}.dj-sanqing{bottom:238px!important;width:120vw!important}.dj-sanqing .dj-center{transform:translateY(-5px) scale(1.02)}}

/* === Daojia 1.7.0 — temple composition + real twin-door Xuanmen === */
/* Let the architecture speak: remove duplicate floating mottos. */
.dj-side-motto{display:none!important}
/* Reveal more of the temple plaque and the Sanqing name plaques by lowering the foreground altar. */
.dj-bg{object-position:center 43%!important;filter:brightness(.46) saturate(.80)!important}
.dj-sanqing{bottom:224px!important;width:min(920px,78vw)!important}
.dj-sanqing img{max-height:520px!important}
.dj-sanqing .dj-center{transform:translateY(-8px) scale(1.03)!important}
.dj-altar-furniture{bottom:-112px!important;width:min(1740px,114vw)!important;height:420px!important}
.dj-altar{bottom:238px!important;width:min(1040px,78vw)!important;height:164px!important}
.dj-bell{width:92px!important;height:126px!important}.dj-sword{width:76px!important;height:150px!important}.dj-incense{width:178px!important;height:168px!important}.dj-bagua{width:108px!important;height:108px!important}.dj-talisman{width:118px!important;height:78px!important}
.dj-artifact-label{bottom:-25px!important}
/* Gate layers: the article section is already behind the hero; these two frozen-looking halves are the doors. */
.dj-hero{perspective:1800px}
.dj-hero-gate-half{position:absolute!important;top:0!important;bottom:0!important;width:50%!important;overflow:hidden!important;z-index:120!important;background:#050505!important;pointer-events:none!important;will-change:transform!important;transition:transform 2.35s cubic-bezier(.62,0,.18,1)!important}
.dj-hero-gate-half.left{left:0!important;transform-origin:left center!important;box-shadow:12px 0 30px rgba(0,0,0,.48)!important}
.dj-hero-gate-half.right{right:0!important;transform-origin:right center!important;box-shadow:-12px 0 30px rgba(0,0,0,.48)!important}
.dj-hero-gate-copy{position:absolute!important;top:0!important;width:200%!important;height:100%!important;overflow:hidden!important;pointer-events:none!important}
.dj-hero-gate-half.left .dj-hero-gate-copy{left:0!important}.dj-hero-gate-half.right .dj-hero-gate-copy{right:0!important}
.dj-hero-gate-copy>.dj-hero{position:absolute!important;top:0!important;left:0!important;width:100%!important;height:100%!important;min-height:100%!important;overflow:hidden!important;perspective:none!important}
.dj-hero-gate-half.right .dj-hero-gate-copy>.dj-hero{left:-100%!important}
/* Do not fade the real hero before the doors cover it. */
.dj-hero.is-gate-opening>.dj-bg,.dj-hero.is-gate-opening>.dj-vignette,.dj-hero.is-gate-opening>.dj-sanqing,.dj-hero.is-gate-opening>.dj-altar-furniture,.dj-hero.is-gate-opening>.dj-hero-smoke,.dj-hero.is-gate-opening>.dj-altar,.dj-hero.is-gate-opening>.dj-scroll{opacity:1!important}
.dj-hero.is-gate-opening .dj-hero-gate-half.left{transform:translateX(-104%) rotateY(-5deg)!important}.dj-hero.is-gate-opening .dj-hero-gate-half.right{transform:translateX(104%) rotateY(5deg)!important}
.dj-xuanmen{background:transparent!important}
.dj-xuanmen.is-active{background:transparent!important}
.dj-xuanmen-taiji{z-index:3!important}
.dj-gate-seam{z-index:4!important}
/* Only after the doors have visibly cleared do we collapse the hero. */
.dj-hero.is-open{height:0!important;min-height:0!important;overflow:hidden!important;transition:height .8s ease,min-height .8s ease!important}
@media(max-width:760px){.dj-sanqing{bottom:190px!important}.dj-altar-furniture{bottom:-70px!important;height:300px!important;width:128vw!important}.dj-altar{bottom:172px!important;width:94vw!important;height:120px!important}.dj-bell{width:66px!important;height:92px!important}.dj-sword{width:58px!important;height:108px!important}.dj-incense{width:125px!important;height:118px!important}.dj-bagua{width:82px!important;height:82px!important}.dj-talisman{width:88px!important;height:58px!important}}

/* === Daojia 1.7.1 — TRUE TAIJI EYE / SEALED CLASSICS === */
html.dj-sealed,html.dj-sealed body{overflow:hidden!important;overscroll-behavior:none!important}
body.dj-sealed .dj-classics{visibility:hidden!important;opacity:0!important;pointer-events:none!important;height:0!important;min-height:0!important;overflow:hidden!important;margin:0!important;padding:0!important}
body.dj-sealed .dj-scroll{pointer-events:none!important}
.dj-hero.dj-taiji-opening>.dj-bg,.dj-hero.dj-taiji-opening>.dj-vignette,.dj-hero.dj-taiji-opening>.dj-sanqing,.dj-hero.dj-taiji-opening>.dj-altar-furniture,.dj-hero.dj-taiji-opening>.dj-hero-smoke,.dj-hero.dj-taiji-opening>.dj-altar,.dj-hero.dj-taiji-opening>.dj-scroll,.dj-hero.dj-taiji-opening>.dj-taiji-eye,.dj-hero.dj-taiji-opening>.dj-eye-hint{opacity:0!important;transition:opacity .45s ease!important}
.dj-xuanmen{background:#050505!important}
.dj-xuanmen.is-active{opacity:1!important;pointer-events:auto!important}
.dj-xuanmen-taiji{width:min(44vw,540px)!important;transform:translate(-50%,-50%) scale(.72)!important;opacity:0!important;transition:opacity .45s ease,transform .7s cubic-bezier(.2,.7,.2,1)!important;filter:none!important}
.dj-xuanmen.is-forming .dj-xuanmen-taiji{opacity:1!important;transform:translate(-50%,-50%) scale(1)!important}
.dj-xuanmen-taiji img{animation:djTaiji171Spin 3.2s linear infinite!important;filter:none!important}
@keyframes djTaiji171Spin{to{transform:rotate(360deg)}}
.dj-taiji-half{position:absolute;left:50%;top:50%;width:min(44vw,540px);aspect-ratio:1;transform:translate(-50%,-50%);opacity:0;pointer-events:none;z-index:6;transition:transform 1.45s cubic-bezier(.66,0,.2,1),opacity .25s ease;background:center/contain no-repeat url('../images/taiji-simple.svg')}
.dj-taiji-half.left{clip-path:inset(0 50% 0 0)}.dj-taiji-half.right{clip-path:inset(0 0 0 50%)}
.dj-xuanmen.is-splitting .dj-xuanmen-taiji{opacity:0!important}
.dj-xuanmen.is-splitting .dj-taiji-half{opacity:1}
.dj-xuanmen.is-opened .dj-taiji-half.left{transform:translate(calc(-50% - 58vw),-50%)}
.dj-xuanmen.is-opened .dj-taiji-half.right{transform:translate(calc(-50% + 58vw),-50%)}
.dj-xuanmen.is-opened{background:transparent!important;transition:background .25s ease!important}
.dj-gate-seam,.dj-hero-gate-half{display:none!important}
body.dj-unsealed .dj-classics{visibility:visible!important;opacity:1!important;pointer-events:auto!important;height:auto!important;overflow:visible!important;transition:opacity .5s ease!important}
.dj-eye-nudge{animation:djEyeNudge171 .85s ease}
@keyframes djEyeNudge171{0%,100%{filter:none}35%,70%{filter:drop-shadow(0 0 14px #e6c875) brightness(1.45)}}
@media(max-width:760px){.dj-xuanmen-taiji,.dj-taiji-half{width:min(76vw,360px)!important}}
@media(prefers-reduced-motion:reduce){.dj-xuanmen-taiji img{animation-duration:8s!important}}

/* === Daojia 1.7.2 — 太极生两仪：沿阴阳 S 形分界快速分开 === */
.dj-xuanmen-taiji img{animation:djTaiji172Spin .62s linear infinite!important}
@keyframes djTaiji172Spin{to{transform:rotate(360deg)}}
/* Each moving piece is now a real yin/yang lobe, not a rectangular half. */
.dj-taiji-half{width:min(44vw,540px)!important;aspect-ratio:1!important;opacity:0!important;transition:transform .38s cubic-bezier(.2,.85,.25,1),opacity .08s linear!important;background-position:center!important;background-size:contain!important;background-repeat:no-repeat!important;filter:drop-shadow(0 0 8px rgba(255,255,255,.18))}
.dj-taiji-half.left{clip-path:none!important;background-image:url('../images/taiji-yang.svg')!important}
.dj-taiji-half.right{clip-path:none!important;background-image:url('../images/taiji-yin.svg')!important}
.dj-xuanmen.is-splitting .dj-xuanmen-taiji{opacity:0!important;transition:opacity .06s linear!important}
.dj-xuanmen.is-splitting .dj-taiji-half{opacity:1!important}
/* The S-boundary appears, then the two instruments separate immediately. */
.dj-xuanmen.is-splitting::after{content:'';position:absolute;left:50%;top:50%;width:min(44vw,540px);aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;z-index:7;background:radial-gradient(circle at 50% 24%,transparent 0 20%,rgba(236,205,126,.9) 20.4% 20.9%,transparent 21.3%),radial-gradient(circle at 50% 76%,transparent 0 20%,rgba(236,205,126,.9) 20.4% 20.9%,transparent 21.3%);opacity:.5;animation:djBoundaryFlash172 .18s ease-out forwards}
@keyframes djBoundaryFlash172{0%{opacity:0;filter:brightness(2)}45%{opacity:.85}100%{opacity:0}}
.dj-xuanmen.is-opened .dj-taiji-half.left{transform:translate(calc(-50% - 64vw),-50%)!important}
.dj-xuanmen.is-opened .dj-taiji-half.right{transform:translate(calc(-50% + 64vw),-50%)!important}
.dj-xuanmen.is-opened{background:transparent!important;transition:background .08s linear!important}
@media(max-width:760px){.dj-taiji-half{width:min(76vw,360px)!important}}
