/* Shared 2.5D presentation rig: actor travel > body breathing > textured art. */
.lq-sprite{display:block;width:100%;height:100%;background-image:url('assets/duel-v171.webp');background-repeat:no-repeat;background-size:200% 100%;filter:drop-shadow(0 8px 7px #05091d88)}
.lq-swordsman{background-position:left center}.lq-shadow{background-position:right center}
.character-emoji>.lq-sprite{width:180px;height:215px}.boss-emoji>.lq-sprite{width:210px;height:220px}
.lq-cinema{width:min(100%,520px);margin:auto;color:#f2ebdc;background:linear-gradient(145deg,#1b2440,#0b1121 70%);border:1px solid #a7996b66;border-radius:24px;padding:18px;box-shadow:0 30px 120px #000b;overflow:auto;max-height:calc(100dvh - 28px);font-family:inherit}
#battle-scene{width:min(100%,520px)}
.lq-top{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;letter-spacing:.12em;color:#ead5a3}.lq-top small{display:block;color:#a1afca;font-size:9px;letter-spacing:.13em;margin-top:4px}
.lq-skip{min-height:44px;background:#ffffff09;border:1px solid #c6c6db38;color:#dfdfeb;border-radius:12px;padding:8px 13px;cursor:pointer;font:inherit;letter-spacing:0}
.lq-quest{font-size:14px;line-height:1.6;margin:17px 0;color:#fff0d2}.lq-quest small{display:block;color:#93a8bd;font-size:10px;margin-top:3px}
.lq-enemy-head{display:flex;justify-content:space-between;font-size:11px;letter-spacing:.05em;color:#e8c4e5;margin-bottom:7px}.lq-hp{height:7px;border-radius:9px;background:#060b15;position:relative;overflow:hidden}.lq-hp>*{position:absolute;inset:0 auto 0 0;border-radius:9px;transition:width .45s ease}.lq-hp i{background:#f7d5a6;transition-delay:.22s}.lq-hp b{background:linear-gradient(90deg,#9b64dd,#f1a7cd);box-shadow:0 0 13px #d473e6}
.lq-arena{position:relative;isolation:isolate;height:310px;overflow:hidden;margin:15px -18px 0;background:radial-gradient(ellipse at 70% 25%,#5b346a88,transparent 47%),linear-gradient(#11182e,#233044 65%,#121b2c)}
.lq-moon{position:absolute;width:110px;height:110px;border-radius:50%;top:10px;left:calc(50% - 55px);background:radial-gradient(circle at 35% 30%,#c4c7c6,#60617a 60%,#242b47);box-shadow:0 0 65px #c3c5ee22;opacity:.65}
.lq-columns{position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 16%,#080f23a6 17% 20%,#69738e18 21% 23%,transparent 24% 34%);mask-image:linear-gradient(#000,transparent 90%);-webkit-mask-image:linear-gradient(#000,transparent 90%)}
.lq-floor{position:absolute;width:140%;height:160px;left:-20%;bottom:-45px;border-radius:50%;transform:perspective(400px) rotateX(50deg);border:1px solid #ab997760;background:repeating-radial-gradient(ellipse,#5d637b11 0 24px,#abb7db22 25px 26px,#111a2a55 27px 50px);box-shadow:0 0 30px #a0a5d322}
.lq-runes{position:absolute;bottom:28px;left:8%;right:8%;text-align:center;color:#bea6ff66;letter-spacing:20px;font-size:25px;animation:lq-rune 4s ease-in-out infinite}
.lq-actor{position:absolute;width:49%;height:254px;bottom:25px;z-index:3;transform-origin:50% 85%}.lq-hero{left:0}.lq-enemy{right:0}
.lq-actor:after{content:'';position:absolute;bottom:9px;left:22%;width:56%;height:14px;z-index:-1;border-radius:50%;background:#01061399;filter:blur(4px)}
.lq-body{height:100%;transform-origin:50% 85%;animation:lq-breathe 3.8s ease-in-out infinite}.lq-enemy .lq-body{animation:lq-hover 3.5s ease-in-out infinite;filter:drop-shadow(0 0 12px #985fea44)}
.lq-actor small,.lq-ally small,.lq-heal-target small{position:absolute;bottom:-10px;left:0;right:0;text-align:center;font-size:10px;color:#d0d4e1;text-shadow:0 2px 5px #000}
.lq-body>img{width:100%;height:100%;object-fit:contain;mask-image:radial-gradient(ellipse,#000 45%,transparent 74%);-webkit-mask-image:radial-gradient(ellipse,#000 45%,transparent 74%)}
.lq-body>.hero-new-art{width:100%;height:100%}
.lq-ally,.lq-heal-target{position:absolute;left:0;bottom:25px;width:42%;height:230px;z-index:5;opacity:0;pointer-events:none}.lq-heal-target{left:25%;width:32%;height:185px;bottom:20px}
.lq-slash{position:absolute;width:53%;height:15px;left:34%;top:41%;z-index:7;opacity:0;border-radius:50%;background:#fff;box-shadow:0 0 10px #b9efff,0 0 26px #76b9ff;transform:rotate(-38deg)}
.lq-shield{position:absolute;z-index:8;left:32%;top:24%;width:82px;height:120px;display:grid;place-items:center;border:2px solid #bceeff;border-radius:45% 45% 48% 48%;background:linear-gradient(130deg,#c7f0ff77,#89c8ff11);box-shadow:0 0 24px #77caff88;color:white;font-size:50px;opacity:0}
.lq-light{position:absolute;inset:0;z-index:6;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 32% 80%,#acffcd99,transparent 65%)}
.lq-number,.lq-counter-number{position:absolute;left:59%;top:20%;font-weight:900;font-size:36px;color:#fff3cc;text-shadow:0 3px 0 #462e5b,0 0 20px #ffd98d;z-index:9;opacity:0;white-space:nowrap}.lq-counter-number{left:18%;top:36%;color:#ffb6c8;font-size:27px}
.lq-result-mark{position:absolute;inset:0;display:grid;place-items:center;font-size:118px;color:#ffe2a2;text-shadow:0 0 50px #ffd37e;pointer-events:none;z-index:10}
.lq-caption{min-height:52px;display:grid;place-items:center;text-align:center;font-size:17px;font-weight:800;letter-spacing:.04em;color:#f6dfb0;margin-top:14px}.lq-progress{height:2px;background:#ffffff12;margin:8px 25%}.lq-progress i{display:block;height:100%;background:#cab98d;transition:width .3s}.lq-footer{text-align:center;font-size:10px;color:#9aa9c0;line-height:1.7;margin:14px 0}.lq-close{width:100%;min-height:44px}
.lq-cinema[data-phase=prepare] .lq-hero{animation:lq-ready .65s both}.lq-cinema[data-phase=attack] .lq-hero{animation:lq-dash .26s both}.lq-cinema[data-phase=impact] .lq-hero{animation:lq-return .4s both}.lq-cinema[data-phase=impact] .lq-enemy{animation:lq-hit .45s}.lq-cinema[data-phase=impact] .lq-slash{animation:lq-slash .36s both}.lq-cinema[data-phase=impact] .lq-number{animation:lq-number .65s both}
.lq-cinema[data-phase=counter] .lq-enemy{animation:lq-counter .5s}.lq-cinema[data-phase=counter]:not(.lq-guarding):not(.lq-missed) .lq-hero{animation:lq-hit .45s}.lq-cinema[data-phase=counter] .lq-counter-number{animation:lq-number .55s both}
.lq-guarding .lq-ally{opacity:1;transform:translateX(52%);animation:lq-cover .5s both}.lq-guarding .lq-hero{filter:brightness(.7);transform:translateX(-12%)}.lq-guarding .lq-shield,.lq-cinema[data-phase=shield] .lq-shield{opacity:1;animation:lq-glow .5s both}
.lq-cinema[data-phase=heal] .lq-light,.lq-cinema[data-phase=support] .lq-light,.lq-cinema[data-phase=retry] .lq-light{animation:lq-heal 1s both}.lq-cinema[data-phase=heal] .lq-hero,.lq-cinema[data-phase=support] .lq-hero{animation:lq-pray 1s both}.lq-cinema[data-phase=heal] .lq-number,.lq-cinema[data-phase=support] .lq-number{left:10%;font-size:28px;color:#b7ffd4;animation:lq-number 1s both}.lq-healing-other .lq-heal-target{opacity:1}.lq-cinema[data-phase=dodge] .lq-hero{animation:lq-evade .5s}
.lq-cinema[data-phase=victory] .lq-enemy{animation:lq-dissolve 1.15s both}.lq-cinema[data-phase=victory] .lq-result-mark,.lq-cinema[data-phase=level] .lq-result-mark,.lq-cinema[data-phase=learn] .lq-result-mark{animation:lq-glow 1s both}.lq-cinema[data-phase=defeat] .lq-hero{animation:lq-fall .8s both}.lq-cinema[data-phase=retry] .lq-hero{animation:lq-glow .8s}
@keyframes lq-breathe{50%{transform:translateY(-3px) rotate(.65deg) scaleY(1.012)}}@keyframes lq-hover{50%{transform:translateY(-9px) rotate(-1deg)}}@keyframes lq-ready{to{transform:translateX(-7px) rotate(-4deg);filter:brightness(1.2) drop-shadow(0 0 9px #87ceff)}}@keyframes lq-dash{to{transform:translate(35%,-8px) rotate(9deg)}}@keyframes lq-return{from{transform:translate(35%,-8px) rotate(9deg)}}@keyframes lq-hit{20%,60%{transform:translateX(10px) rotate(3deg);filter:brightness(1.9)}40%{transform:translateX(-5px)}}@keyframes lq-counter{45%{transform:translateX(-25%) rotate(-8deg)}}@keyframes lq-slash{0%{opacity:0;transform:rotate(-38deg) scaleX(.1)}25%{opacity:1}100%{opacity:0;transform:rotate(-38deg) scaleX(1.3)}}@keyframes lq-number{15%,65%{opacity:1;transform:translateY(-12px) scale(1.05)}100%{opacity:0;transform:translateY(-30px)}}@keyframes lq-cover{from{opacity:0;transform:translateX(-50%)}to{opacity:1;transform:translateX(52%)}}@keyframes lq-heal{40%,70%{opacity:1;transform:scale(1.1)}}@keyframes lq-pray{50%{transform:translateY(3px) rotate(-5deg);filter:drop-shadow(0 0 14px #b3ffc9)}}@keyframes lq-glow{from{opacity:0;transform:scale(.7)}60%{opacity:1;transform:scale(1.05)}}@keyframes lq-dissolve{40%{filter:brightness(2) drop-shadow(0 0 30px #d1a7ff)}100%{opacity:0;transform:translateY(-35px) scale(.75)}}@keyframes lq-fall{to{transform:rotate(-15deg) translateY(20px);opacity:.3}}@keyframes lq-evade{50%{transform:translateX(-22%);opacity:.4}}@keyframes lq-rune{50%{opacity:.3;transform:translateY(-3px)}}
.hero-panel .character-card{animation:lq-breathe 4s ease-in-out infinite}.growth-line:first-of-type .goal-track{box-shadow:0 0 15px #a791f533}.goal-track>div{position:relative;overflow:hidden;box-shadow:0 0 12px #b9a2ff66}.goal-track>div:after{content:'';position:absolute;inset:0;background:linear-gradient(100deg,transparent,#ffffff66,transparent);animation:lq-shimmer 4s ease-in-out infinite}.goal-ticks .lit{box-shadow:0 0 8px #d7bbff88}@keyframes lq-shimmer{from{transform:translateX(-100%)}65%,100%{transform:translateX(100%)}}
.lq-celebration{position:fixed;inset:20% 12px auto;max-width:430px;margin:auto;z-index:1100;pointer-events:none;display:grid;justify-items:center;padding:20px;border:1px solid #e4cb8f88;border-radius:22px;background:radial-gradient(ellipse,#384563f5,#111c35f5);box-shadow:0 0 65px #b6a2ff44;color:#ffe8ae;animation:lq-celebrate 2.6s both;text-align:center}.lq-celebration span{font-size:76px;text-shadow:0 0 30px #e5c580}.lq-celebration b{font-size:16px}.lq-celebrate-rebirth{border-color:#d0b4ff}.lq-celebrate-guild{color:#b7f2e6}@keyframes lq-celebrate{0%{opacity:0;transform:translateY(12px) scale(.9)}15%,80%{opacity:1;transform:none}100%{opacity:0;transform:translateY(-10px)}}
@media(max-width:380px){.lq-cinema{padding:12px}.lq-arena{margin-left:-12px;margin-right:-12px;height:270px}.lq-actor{height:224px}.lq-caption{font-size:15px}}
@media(prefers-reduced-motion:reduce){.lq-cinema *,.lq-celebration,.hero-panel .character-card,.goal-track>div:after{animation:none!important;transition:none!important}.lq-cinema[data-phase=impact] .lq-number,.lq-cinema[data-phase=counter] .lq-counter-number,.lq-cinema[data-phase=heal] .lq-number{opacity:1}.lq-cinema[data-phase=victory] .lq-enemy{opacity:0}.lq-cinema[data-phase=defeat] .lq-hero{opacity:.3}.lq-celebration{opacity:1}}

.lq-cinema.lq-slain:not([data-phase=victory]) .lq-enemy{opacity:0}
.quest.done .quest-check,.quick-task.done>span{box-shadow:0 0 12px #94e7c955;transition:box-shadow .4s,background .4s}
@media(max-height:700px){.lq-arena{height:230px}.lq-actor{height:200px}.lq-quest{margin:9px 0}.lq-caption{min-height:38px;margin-top:5px}.lq-footer{margin:8px 0}}
