/* Next 前端补充样式；全站布局、主题变量和基础按钮仍由 web-src/static/styles.css 提供。 */
.next-preserve-lines { white-space: pre-line; overflow-wrap: anywhere; }
.buy-status, .buy-disclosure { margin: 4px 10px 8px; max-width: 230px; font-size: 12px; line-height: 1.6; white-space: normal; overflow-wrap: anywhere; }
.buy-status:empty { display: none; }
.buy-disclosure a { display: block; }
.buy-menu .buy-item { max-width: 250px; white-space: normal; overflow-wrap: anywhere; }
.pg-store-button.btn:focus-visible, .pg-store-coupon:focus-visible { outline: 3px solid oklch(var(--primary-500)); outline-offset: 3px; }
.pg-store-button.btn { position: relative; color: #fff; background: oklch(var(--primary-600)); border-color: oklch(var(--primary-600)); }
/* 角标定位在购买按钮的包装层内，活动说明用 fixed 定位，不参与操作栏排版。 */
.pg-store-wrap { position: relative; display: inline-flex; max-width: 100%; }
.pg-store-perk { position: absolute; top: -9px; right: -5px; padding: 1px 5px; border: 1px solid var(--surface); border-radius: 7px; background: oklch(var(--primary-700)); color: #fff; font-family: inherit; font-size: 10px; font-weight: 600; line-height: 1.5; white-space: nowrap; cursor: pointer; }
.pg-store-perk:focus-visible, .pg-store-close:focus-visible { outline: 2px solid oklch(var(--primary-500)); outline-offset: 3px; }
.pg-store-popover { position: fixed; z-index: 75; box-sizing: border-box; width: min(310px, calc(100vw - 24px)); max-height: min(340px, calc(100dvh - 24px)); overflow: auto; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); color: var(--text); box-shadow: var(--shadow); font-size: 13px; line-height: 1.7; overflow-wrap: anywhere; }
.pg-store-popover-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.pg-store-close { display: grid; place-items: center; flex-shrink: 0; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 6px; background: var(--surface-2); color: var(--text); font: inherit; font-size: 20px; cursor: pointer; }
.pg-store-popover p { margin: 9px 0; }
.pg-store-campaign { font-weight: 600; }
.pg-store-provider { font-size: 12px; }
.pg-store-button.btn:hover { background: oklch(var(--primary-700)); border-color: oklch(var(--primary-700)); }
.pg-store-button.btn:focus-visible { outline-color: oklch(var(--primary-500)); }
html.kun-dark-mode .pg-store-button.btn, html.kun-dark-mode .pg-store-perk { color: oklch(.215 .09 355); }
.pg-aliases { margin: 6px 0 10px; font-size: 13px; overflow-wrap: anywhere; }
.pg-overview p { line-height: 1.8; overflow-wrap: anywhere; }
.pg-source-list, .pg-related-list { padding-left: 22px; line-height: 1.9; overflow-wrap: anywhere; }
#patch-overview, #sources, #related-games, .pg-main section[id^="patch-"] { scroll-margin-top: 90px; }
.about-main { padding-top: 24px; padding-bottom: 48px; line-height: 1.8; overflow-wrap: anywhere; }
.about-main h1 { font-size: clamp(23px, 4vw, 32px); }
.next-fact-pair { display: contents; }
.wish-btn { width: fit-content; max-width: 100%; flex-shrink: 0; }
.wish-btn.note-btn { right: auto; max-width: calc(100% - 24px); }
.next-prose-section, .next-prose { display: contents; }
.next-text-button { padding: 0; border: 0; background: none; font: inherit; color: oklch(var(--primary-600)); cursor: pointer; text-align: left; }
.next-notice { padding: 0; border: 0; border-radius: var(--radius); max-width: min(480px, calc(100% - 28px)); color: var(--text); background: var(--surface); }
.next-notice::backdrop { background: rgb(0 0 0 / .45); backdrop-filter: blur(3px); }
.next-lightbox { border: 0; margin: 0; padding: 0; width: 100%; height: 100%; max-width: none; max-height: none; }
.next-lightbox:not([open]) { display: none; }
.next-lightbox[open] { display: flex; }
.shot { padding: 0; border: 0; cursor: pointer; background: transparent; }
/* 560ms 与 Banner.tsx 的退场保留时间一致；隐藏旧帧前需要等这段过渡结束。 */
.next-banner-enter { animation: next-banner-enter .56s cubic-bezier(.22, 1, .36, 1) both; }
.next-banner-enter .latest-copy > * { animation: next-banner-copy .38s ease both; animation-delay: .08s; }
@keyframes next-banner-enter { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: translateX(0); } }
@keyframes next-banner-copy { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) { .next-banner-enter, .next-banner-enter .latest-copy > * { animation: none; } }
@media (max-width: 600px) { .pg-actions { flex-wrap: wrap; } .pg-facts dd { overflow-wrap: anywhere; } }
