/* ============================================================
   合成元素 II · v3 追加样式
   主线剧情 / 终极任务 / 终焉主题 / 通关界面 / 通关海报
   ============================================================ */

/* ---------------- 终焉主题（body[data-world="finale"]） ---------------- */
body[data-world="finale"] {
  --ink: #fff9ea;
  --muted: #d4c9b6;
  --faint: #9c907c;
  --panel: rgba(20, 16, 34, .58);
  --panel-strong: rgba(18, 14, 32, .86);
  --panel-solid: #171227;
  --panel-deep: rgba(10, 8, 20, .9);
  --line: rgba(255, 226, 170, .19);
  --line-strong: rgba(255, 226, 170, .36);
  --accent: #f6d38a;
  --accent-2: #ffb3d9;
  --accent-soft: rgba(246, 211, 138, .12);
  --accent-rgb: 246, 211, 138;
  --accent-ink: #241705;
  --sky-1: #2c2452;
  --sky-2: #1a1332;
  --sky-3: #06050c;
  --glow-1: rgba(255, 214, 140, .42);
  --glow-2: rgba(255, 120, 200, .24);
  --shadow-tint: rgba(0, 0, 0, .62);
  --scroll: rgba(255, 226, 170, .24);
}
body[data-world="finale"] .world-sky {
  background:
    radial-gradient(42% 30% at 18% 12%, rgba(255, 150, 90, .22), transparent 70%),
    radial-gradient(38% 28% at 82% 18%, rgba(140, 120, 255, .28), transparent 72%),
    radial-gradient(30% 24% at 50% 6%, rgba(255, 245, 200, .3), transparent 70%),
    linear-gradient(180deg, #241c40 0%, #150f28 52%, #05040a 100%);
}
body[data-world="finale"] .world-orb {
  width: 62vw; right: 19vw; top: 12vh; opacity: .3;
  background: conic-gradient(from 0deg, rgba(255, 200, 120, .5), rgba(180, 140, 255, .32), rgba(120, 220, 255, .3), rgba(255, 140, 210, .36), rgba(255, 200, 120, .5));
  filter: blur(40px);
  animation: finale-halo 26s linear infinite;
}
.finale-swirl { opacity: .3; }
.finale-swirl.f2 { width: min(40vw, 560px); animation-direction: reverse; animation-duration: 46s; opacity: .24; }
.finale-spark { width: 4px; height: 7px; box-shadow: 0 0 16px 5px rgba(255, 220, 150, .55); }
@keyframes finale-halo { to { transform: rotate(360deg); } }

/* ---------------- 终极任务面板 ---------------- */
.final-quest {
  position: relative;
  flex: 0 0 auto;
  overflow: hidden;
  border: 1px solid rgba(246, 211, 138, .34);
  border-radius: var(--radius-lg);
  background:
    radial-gradient(70% 140% at 50% 0%, rgba(255, 214, 140, .16), transparent 62%),
    linear-gradient(150deg, rgba(255, 236, 196, .06), transparent 46%),
    var(--panel);
  box-shadow: 0 16px 44px var(--shadow-tint), inset 0 1px 0 rgba(255, 255, 255, .14);
  padding: 14px 18px 12px;
  animation: panel-in .9s .16s var(--ease-spring) both;
}
.final-quest::before {
  content: "";
  position: absolute; inset: 0;
  background: repeating-conic-gradient(from 0deg at 50% 0%, rgba(255, 226, 170, .05) 0deg .5deg, transparent .5deg 9deg);
  mask-image: radial-gradient(80% 120% at 50% 0%, #000, transparent 78%);
  -webkit-mask-image: radial-gradient(80% 120% at 50% 0%, #000, transparent 78%);
  pointer-events: none;
}
.final-quest.flash { animation: fq-flash .9s var(--ease) both; }
.final-quest.blazing { animation: fq-blazing 4s var(--ease) both; }
.fq-aura { position: absolute; width: 320px; height: 320px; right: 6%; top: -220px; border-radius: 50%; background: radial-gradient(circle, rgba(255, 214, 140, .24), transparent 68%); filter: blur(10px); pointer-events: none; }
.fq-head { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.fq-kicker span:last-child { color: #ffe9b4; font-size: 10px; letter-spacing: .06em; }
.fq-kicker { display: flex; align-items: center; gap: 9px; color: var(--muted); font-size: 9.5px; letter-spacing: .1em; white-space: nowrap; }
.fq-kicker span:first-child { color: #241705; background: linear-gradient(120deg, #f6d38a, #ffe9b8); padding: 2px 9px; border-radius: 99px; font-size: 9px; letter-spacing: .14em; }
.fq-kicker i { width: 18px; height: 1px; background: rgba(246, 211, 138, .45); }
.final-quest h3 { margin-top: 6px; font-family: var(--font-display); font-size: clamp(16px, 1.5vw, 20px); font-weight: 500; letter-spacing: .12em; color: #fff3d4; }
.final-quest #fq-desc { display: none; }
.fq-track { position: relative; display: flex; justify-content: space-between; gap: 4px; list-style: none; margin: 11px 0 8px; padding: 0; }
.fq-track::before { content: ""; position: absolute; left: 3%; right: 3%; top: 22px; height: 1px; background: linear-gradient(90deg, transparent, rgba(255, 226, 170, .32), transparent); }
.fq-item {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 5px 2px 4px;
  border-radius: 14px;
  border: 1px solid transparent;
  color: rgba(255, 246, 222, .4);
  transition: .35s var(--ease);
  cursor: default;
}
.fq-item .fq-emoji {
  width: 34px; height: 34px;
  display: grid; place-items: center;
  border-radius: 11px;
  font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", sans-serif;
  font-size: 19px;
  border: 1px solid rgba(255, 226, 170, .18);
  background: rgba(255, 255, 255, .04);
  filter: grayscale(1) opacity(.5);
  transition: .45s var(--ease);
}
.fq-item .fq-name { font-family: var(--font-display); font-size: 10.5px; letter-spacing: .04em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.final-quest h3 { display: none; }
.fq-item .fq-name { position: relative; z-index: 1; }
.fq-item .fq-order { position: absolute; left: 6px; top: 3px; font-family: var(--font-num); font-size: 7px; opacity: .55; }
.fq-item .fq-mark { position: absolute; right: 5px; top: 2px; font-size: 9px; color: var(--fa); }
.fq-item.current {
  color: #fff3d4;
  border-color: rgba(246, 211, 138, .4);
  background: radial-gradient(circle at 50% 0%, rgba(246, 211, 138, .18), transparent 70%);
  box-shadow: 0 0 0 3px rgba(246, 211, 138, .07), 0 8px 22px rgba(0, 0, 0, .26);
}
.fq-item.current .fq-emoji {
  filter: none;
  color: #fff;
  border-color: rgba(246, 211, 138, .6);
  background: linear-gradient(150deg, var(--fa), var(--fb));
  box-shadow: 0 0 18px rgba(246, 211, 138, .35);
  animation: fq-current 2.6s ease-in-out infinite;
}
.fq-item.done { color: rgba(255, 246, 222, .82); }
.fq-item.done .fq-emoji {
  filter: none;
  color: #fff;
  border-color: rgba(255, 255, 255, .4);
  background: linear-gradient(150deg, var(--fa), var(--fb));
  box-shadow: 0 0 14px rgba(255, 214, 140, .3), inset 0 1px 0 rgba(255, 255, 255, .4);
}
.fq-item.done .fq-mark { color: #fff7d9; }
.fq-item.pulse { animation: fq-pulse 1s ease-in-out 2; }
.fq-foot { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--muted); font-size: 9.5px; letter-spacing: .06em; }
/* 顺序箭头：让十件终章看起来是一条可以被逐件点亮的星轨 */
.fq-item:not(:last-child)::after { content: ""; position: absolute; right: -6px; top: 21px; width: 8px; height: 1px; background: rgba(255, 226, 170, .3); }
.final-quest .fq-item.done + .fq-item::after { background: rgba(255, 226, 170, .7); }
.fq-status { color: #ffe9b4; }
.fq-abandon { height: 24px; padding: 0 9px; font-size: 8.5px; }
@keyframes fq-current { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
@keyframes fq-pulse { 0%, 100% { transform: scale(1); } 40% { transform: scale(1.1); box-shadow: 0 0 0 5px rgba(246, 211, 138, .18); } }
@keyframes fq-flash { 0% { box-shadow: 0 0 0 0 rgba(255, 222, 150, .7); } 40% { box-shadow: 0 0 60px 12px rgba(255, 222, 150, .28), inset 0 0 40px rgba(255, 222, 150, .16); } 100% { box-shadow: 0 16px 44px var(--shadow-tint); } }
@keyframes fq-blazing {
  0% { box-shadow: 0 16px 44px var(--shadow-tint); }
  30% { box-shadow: 0 0 90px 24px rgba(255, 226, 160, .45), inset 0 0 60px rgba(255, 236, 190, .3); border-color: #fff3d0; }
  100% { box-shadow: 0 16px 44px var(--shadow-tint); }
}

/* ---------------- 主线剧情 ---------------- */
.story {
  position: fixed;
  inset: 0;
  z-index: 410;
  display: grid;
  place-items: center;
  overflow: hidden;
  background:
    radial-gradient(70% 60% at 50% 38%, rgba(255, 232, 190, .1), transparent 62%),
    linear-gradient(180deg, rgba(3, 5, 12, .86), rgba(3, 4, 9, .95));
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  animation: story-in .5s var(--ease) both;
}
.story.out { animation: story-out .3s var(--ease) both; }
.story .story-fx { position: absolute; inset: 0; pointer-events: none; }
.sfx-rings { position: absolute; left: 50%; top: 46%; width: min(96vw, 980px); aspect-ratio: 1; transform: translate(-50%, -50%); opacity: .5; }
.sfx-rings i { position: absolute; inset: 0; border-radius: 50%; border: 1px solid rgba(255, 236, 196, .14); }
.sfx-rings i:nth-child(1) { animation: story-ring 18s linear infinite; }
.sfx-rings i:nth-child(2) { inset: 12%; border-style: dashed; border-color: rgba(190, 214, 255, .14); animation: story-ring 26s linear infinite reverse; }
.sfx-rings i:nth-child(3) { inset: 26%; border-color: rgba(255, 200, 240, .1); animation: story-ring 34s linear infinite; }
.sfx-particles i { position: absolute; bottom: -5vh; width: var(--s, 2px); height: var(--s, 2px); border-radius: 50%; background: #fff6d6; box-shadow: 0 0 12px 3px rgba(255, 232, 190, .4); animation: story-rise var(--d, 8s) linear infinite; animation-delay: var(--de, 0s); }
.sfx-scan { position: absolute; inset: 0; background: repeating-linear-gradient(180deg, rgba(255, 255, 255, .025) 0 1px, transparent 1px 4px); opacity: .5; }
.story.fx-ultra .sfx-particles i { background: #ffe6a8; box-shadow: 0 0 16px 4px rgba(255, 196, 92, .5); }
.story.fx-finale .sfx-particles i { background: #fff; box-shadow: 0 0 18px 5px rgba(255, 214, 150, .6); }
.story.fx-finale .sfx-rings i { border-color: rgba(255, 226, 160, .26); }
.story-frame { position: relative; z-index: 1; width: min(900px, calc(100vw - 32px)); max-height: calc(100vh - 40px); display: flex; flex-direction: column; }
.story-stage { position: relative; padding: 24px 28px 18px; border-radius: 26px 26px 0 0; border: 1px solid rgba(255, 226, 170, .2); border-bottom: 0; background: linear-gradient(160deg, rgba(20, 18, 34, .72), rgba(8, 8, 16, .82)); min-height: min(52vh, 440px); overflow: hidden; }
.story-stage::after { content: ""; position: absolute; inset: 0; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.25'/%3E%3C/svg%3E"); opacity: .06; pointer-events: none; }
.story-sigil { position: absolute; right: 22px; top: 16px; font-family: var(--font-display); font-size: 44px; color: rgba(255, 232, 180, .18); line-height: 1; pointer-events: none; }
.story-boot { display: flex; align-items: center; gap: 9px; color: rgba(255, 226, 170, .55); font-family: var(--font-num); font-size: 8.5px; letter-spacing: .3em; margin-bottom: 10px; }
.story-boot::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #ffd98a; box-shadow: 0 0 12px 2px rgba(255, 217, 138, .6); animation: story-dot 1.8s ease-in-out infinite; }
.story-lines { display: flex; flex-direction: column; gap: 7px; max-height: min(42vh, 360px); overflow-y: auto; scrollbar-width: none; padding-right: 4px; }
.story-line-wrap { animation: story-line-in .5s var(--ease-spring) both; }
.story-line-wrap.old { opacity: .32; transition: opacity .4s; }
.story-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; width: fit-content; max-width: 100%; border-radius: 13px; padding: 8px 11px; }
.story-who { flex: 0 0 auto; padding: 2px 8px; border-radius: 99px; font-family: var(--font-display); font-size: 10px; letter-spacing: .06em; color: #241705; background: linear-gradient(120deg, #f6d38a, #ffeec0); }
.story-text { color: #fff6e4; font-size: 14px; line-height: 1.72; letter-spacing: .02em; }
.story-text b { color: #ffe08d; font-weight: 600; text-shadow: 0 0 18px rgba(255, 214, 120, .4); }
.story-line.story-quote { padding-left: 0; padding-right: 14px; }
.story-line.story-quote .story-text { font-family: var(--font-display); color: #f5ecd8; }
.story-prompts { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; }
.story-prompts .story-line { background: rgba(255, 255, 255, .04); border: 1px solid rgba(255, 226, 170, .18); }
.story-prompts .story-line::before { content: "待办"; font-family: var(--font-display); font-size: 8px; letter-spacing: .1em; color: #241705; background: rgba(246, 211, 138, .85); border-radius: 99px; padding: 2px 7px; }
.story-prompts .story-text { font-size: 11px; color: #ffeec4; }
.story-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 18px; border-radius: 0 0 24px 24px; border: 1px solid rgba(255, 226, 170, .2); background: linear-gradient(160deg, rgba(30, 26, 48, .86), rgba(12, 11, 22, .92)); }
.story-meta { color: rgba(255, 236, 200, .7); font-size: 10px; letter-spacing: .1em; white-space: nowrap; }
.story-chapter { font-family: var(--font-display); }
.story-dots { flex: 1; display: flex; align-items: center; justify-content: center; gap: 5px; }
.story-dots i { width: 6px; height: 3px; border-radius: 99px; background: rgba(255, 226, 170, .24); transition: .3s; }
.story-dots i.on { background: rgba(255, 226, 170, .7); }
.story-dots i.cur { width: 18px; background: #ffe2a3; box-shadow: 0 0 10px rgba(255, 226, 163, .6); }
.story-ctrls { display: flex; align-items: center; gap: 8px; }
.story-skip { color: rgba(255, 236, 200, .55); font-size: 9.5px; letter-spacing: .08em; padding: 6px 10px; border-radius: 99px; border: 1px solid rgba(255, 226, 170, .18); transition: .2s; }
.story-skip:hover { color: #fff3d4; border-color: rgba(255, 226, 170, .4); }
.story-next { padding: 8px 16px; border-radius: 99px; border: 1px solid rgba(255, 230, 165, .5); background: linear-gradient(120deg, #e9c06a, #ffe7ab); color: #271804; font-size: 11px; font-weight: 600; letter-spacing: .1em; box-shadow: 0 6px 22px rgba(230, 190, 100, .26); transition: .2s var(--ease); }
.story-next:hover { transform: translateY(-1px); box-shadow: 0 10px 28px rgba(230, 190, 100, .36); }
.story.chap-end .story-frame { width: min(760px, calc(100vw - 32px)); }
.story.chap-end .story-text { font-size: 16px; line-height: 1.85; }
.story.chap-ultra .story-stage { background: linear-gradient(160deg, rgba(36, 26, 52, .8), rgba(10, 8, 18, .86)); }
@keyframes story-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes story-out { to { opacity: 0; } }
@keyframes story-line-in { from { opacity: 0; transform: translateY(10px); filter: blur(3px); } to { opacity: 1; transform: none; filter: blur(0); } }
@keyframes story-ring { to { transform: rotate(360deg); } }
@keyframes story-rise { 0% { transform: translateY(0); opacity: 0; } 12% { opacity: .85; } 100% { transform: translateY(-96vh); opacity: 0; } }
@keyframes story-dot { 0%, 100% { opacity: .4; } 50% { opacity: 1; } }

/* ---------------- 通关界面 ---------------- */
.endgame-modal { z-index: 335; overflow: hidden; background: rgba(2, 3, 8, .8); backdrop-filter: blur(10px); }
.endgame-bg { position: absolute; inset: 0; background:
  radial-gradient(55% 45% at 50% 30%, rgba(255, 228, 160, .2), transparent 62%),
  radial-gradient(36% 30% at 18% 70%, rgba(255, 120, 200, .14), transparent 70%),
  radial-gradient(36% 30% at 82% 66%, rgba(120, 200, 255, .14), transparent 70%); animation: finale-bg-in 1.6s var(--ease) both; }
.endgame-rays { position: absolute; left: 50%; top: 40%; width: 1500px; height: 1500px; transform: translate(-50%, -50%); background: repeating-conic-gradient(from 0deg, rgba(255, 228, 164, .07) 0deg .4deg, transparent .4deg 10deg); mask-image: radial-gradient(circle, #000 0 22%, transparent 62%); -webkit-mask-image: radial-gradient(circle, #000 0 22%, transparent 62%); animation: finale-rays 70s linear infinite; }
.endgame-card {
  position: relative;
  z-index: 1;
  width: min(640px, 100%);
  max-height: calc(100vh - 28px);
  overflow-y: auto;
  padding: 22px 26px 20px;
  text-align: center;
  border-radius: 28px;
  border: 1px solid rgba(255, 228, 168, .35);
  background:
    radial-gradient(70% 40% at 50% 0%, rgba(255, 224, 160, .2), transparent 62%),
    linear-gradient(165deg, rgba(30, 25, 38, .93), rgba(9, 8, 14, .95));
  box-shadow: 0 44px 120px rgba(0, 0, 0, .66), inset 0 1px 0 rgba(255, 255, 255, .16);
  animation: finale-card-in .9s var(--ease-spring) both;
}
.eg-kicker { color: rgba(240, 201, 124, .7); font-family: var(--font-num); font-size: 8.5px; letter-spacing: .32em; }
.eg-crest { margin: 8px auto 4px; font-family: var(--font-display); font-size: 28px; color: #ffe6a8; text-shadow: 0 0 28px rgba(255, 208, 110, .6); animation: sigil-float 5s ease-in-out infinite; }
.endgame-card h2 { font-family: var(--font-display); font-size: clamp(28px, 3.2vw, 40px); font-weight: 500; letter-spacing: .18em; color: #fff4d6; text-shadow: 0 0 40px rgba(255, 214, 130, .35); }
.endgame-card h2 span { color: #ffe09a; }
.eg-sub { margin: 8px auto 0; max-width: 92%; color: rgba(255, 242, 216, .68); font-size: 10.5px; line-height: 1.8; }
.eg-emblem { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; margin: 12px auto 10px; max-width: 520px; }
.eg-el { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 7px 3px; border-radius: 14px; border: 1px solid rgba(255, 255, 255, .2); background: linear-gradient(155deg, var(--fa), var(--fb)); box-shadow: 0 0 18px rgba(255, 220, 150, .18), inset 0 1px 0 rgba(255, 255, 255, .42); animation: eg-el-in .7s var(--ease-spring) both; animation-delay: var(--dl, 0s); }
.eg-el i { font-style: normal; font-size: 21px; line-height: 1; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, .35)); }
.eg-el b { font-family: var(--font-display); font-size: 9px; font-weight: 500; color: #fff; letter-spacing: .04em; text-shadow: 0 1px 3px rgba(0, 0, 0, .35); }
.endgame-card blockquote { margin: 4px 0 0; padding-top: 9px; border-top: 1px solid rgba(255, 228, 168, .16); color: rgba(255, 236, 200, .62); font-family: var(--font-display); font-size: 11.5px; letter-spacing: .06em; }
.eg-stats { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 10px; }
.eg-stats span { padding: 4px 10px; border-radius: 99px; border: 1px solid rgba(255, 228, 168, .2); color: rgba(255, 242, 216, .78); font-size: 9px; letter-spacing: .05em; }
.eg-actions { display: flex; gap: 9px; margin-top: 14px; }
.eg-actions > * { flex: 1; }
.eg-actions .ghost-btn { border-color: rgba(255, 228, 168, .24); color: rgba(255, 240, 210, .75); }
.eg-actions .primary-btn { background: linear-gradient(120deg, #e2b45f, #ffe9b0 52%, #d49a42); color: #2a1904; border-color: rgba(255, 232, 172, .6); box-shadow: 0 10px 30px rgba(226, 168, 70, .3); }
.eg-foot { margin-top: 10px; color: rgba(255, 232, 190, .42); font-size: 8.5px; letter-spacing: .08em; }
@keyframes eg-el-in { from { opacity: 0; transform: translateY(10px) scale(.8); } to { opacity: 1; transform: none; } }

/* ---------------- 通关海报 ---------------- */
.poster-modal { z-index: 340; }
.poster-wrap { position: relative; z-index: 1; width: min(430px, calc(100vw - 28px)); display: flex; flex-direction: column; gap: 10px; animation: modal-card-in .5s var(--ease-spring) both; }
.poster-wrap .modal-x { top: -2px; right: 0; z-index: 2; }
.poster-frame { border-radius: 20px; overflow: hidden; border: 1px solid rgba(255, 228, 168, .4); box-shadow: 0 30px 80px rgba(0, 0, 0, .6); background: #08070d; }
.poster-frame canvas { display: block; width: 100%; height: auto; aspect-ratio: 1080 / 1350; }
.poster-actions { display: flex; gap: 8px; }
.poster-actions > * { flex: 1; }
.poster-actions .ghost-btn { border-color: rgba(255, 228, 168, .22); color: rgba(255, 240, 210, .8); }
.poster-actions .primary-btn { background: linear-gradient(120deg, #e2b45f, #ffe9b0 52%, #d49a42); color: #2a1904; border-color: rgba(255, 232, 172, .6); }
.poster-actions .primary-btn[disabled] { opacity: .6; }
.poster-tip { text-align: center; color: rgba(255, 236, 200, .45); font-size: 8.5px; letter-spacing: .04em; }

/* ---------------- 终焉主题卡 / 全屏光芒 ---------------- */
.theme-card.special .theme-preview::before { width: 92%; top: -52%; right: -24%; opacity: .9; }
.theme-card.special { border-color: rgba(255, 220, 150, .45); box-shadow: 0 0 0 1px rgba(255, 220, 150, .18), 0 16px 40px var(--shadow-tint); }
.theme-card.special::after { content: "通关奖励"; position: absolute; right: 12px; top: 12px; padding: 2px 7px; border-radius: 99px; background: linear-gradient(120deg, #f6d38a, #ffeec0); color: #241705; font-size: 8px; letter-spacing: .08em; }
.theme-card.special.selected::after { display: none; }
body.finale-light::after {
  content: "";
  position: fixed; inset: 0; z-index: 305; pointer-events: none;
  background:
    radial-gradient(circle at 50% 46%, rgba(255, 255, 255, .85), rgba(255, 236, 186, .5) 16%, rgba(255, 200, 130, .16) 36%, transparent 62%);
  animation: finale-flash 3s var(--ease) both;
}
@keyframes finale-flash { 0% { opacity: 0; transform: scale(.6); } 18% { opacity: 1; transform: scale(1); } 70% { opacity: .5; } 100% { opacity: 0; transform: scale(1.08); } }

/* ---------------- 响应式 ---------------- */
@media (max-width: 880px) {
  .final-quest { padding: 12px 13px 10px; border-radius: 24px; }
  .fq-head { gap: 6px; }
  .fq-track { overflow-x: auto; justify-content: flex-start; scrollbar-width: none; padding-bottom: 2px; }
  .fq-item { flex: 0 0 62px; }
  .fq-item .fq-name { font-size: 9px; }
  .fq-item .fq-emoji { width: 30px; height: 30px; font-size: 16px; }
  .story-stage { padding: 18px 16px 12px; min-height: min(46vh, 360px); }
  .story-text { font-size: 12.5px; }
  .story-sigil { font-size: 32px; right: 14px; top: 12px; }
  .story-lines { max-height: min(38vh, 300px); }
  .story-bar { gap: 8px; padding: 10px 12px; }
  .story-dots { display: none; }
  .story-meta { font-size: 9px; overflow: hidden; text-overflow: ellipsis; }
  .story-skip { padding: 5px 8px; font-size: 9px; }
  .story-next { padding: 7px 12px; font-size: 10px; }
  .story.chap-end .story-text { font-size: 13.5px; }
  .endgame-card { padding: 18px 15px 16px; border-radius: 22px; }
  .eg-emblem { max-width: 100%; gap: 6px; }
  .eg-el i { font-size: 18px; }
  .eg-el b { font-size: 8px; }
  .eg-actions { flex-direction: column-reverse; }
  .poster-actions { flex-wrap: wrap; }
  .poster-actions > * { flex: 1 1 40%; }
}
@media (max-width: 520px) {
  .fq-kicker { font-size: 8px; white-space: normal; }
  .final-quest h3 { font-size: 15px; }
  .story-frame { max-height: calc(100vh - 24px); }
  .story-stage { min-height: 0; max-height: 62vh; }
  .story-lines { max-height: 44vh; }
  .story-line { padding: 7px 9px; }
  .story-text { font-size: 12px; }
  .eg-sub { font-size: 9.5px; }
}
