/* 节气 / 节日加载场景：轻量 SVG，主界面与后台预览共用。
   视觉层次由环境光、叙事主体、前景细节构成；只动画 transform/opacity，避免影响加载性能。 */

.term-scene svg,
.theme-preview-wrap svg {
    overflow: visible;
}

.term-scene svg g,
.term-scene svg circle,
.term-scene svg path,
.term-scene svg ellipse,
.term-scene svg rect,
.theme-preview-wrap svg g,
.theme-preview-wrap svg circle,
.theme-preview-wrap svg path,
.theme-preview-wrap svg ellipse,
.theme-preview-wrap svg rect {
    transform-box: fill-box;
    transform-origin: center;
}

.seasonal-scene { display: block; }

.seasonal-scene .sc-atmosphere {
    transform-origin: 50% 18%;
    animation: sc-atmosphere-k 7.2s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-orbit,
.seasonal-scene .sc-orbit-reverse {
    fill: none;
    stroke: rgba(255, 255, 255, 0.58);
    stroke-width: 0.8;
    stroke-dasharray: 2 5;
    transform-origin: 120px 90px;
}

.seasonal-scene .sc-orbit { animation: sc-orbit-k 12s linear infinite; }
.seasonal-scene .sc-orbit-reverse { opacity: 0.58; animation: sc-orbit-reverse-k 16s linear infinite; }

.seasonal-scene .sc-frame {
    fill: none;
    stroke: rgba(255, 255, 255, 0.72);
    stroke-width: 0.8;
    stroke-dasharray: 78 520;
    stroke-linecap: round;
    animation: sc-frame-k 9s ease-in-out infinite;
}

.seasonal-scene .sc-horizon,
.seasonal-scene .sc-contour {
    fill: none;
    stroke: rgba(255, 255, 255, 0.5);
    stroke-width: 0.75;
    stroke-linecap: round;
    stroke-dasharray: 2 5;
}

.seasonal-scene .sc-horizon { animation: sc-horizon-k 8s ease-in-out infinite; }
.seasonal-scene .sc-contour { animation: sc-contour-k 6s ease-in-out infinite; }

.sc-sway { animation: sc-sway-k 4.8s cubic-bezier(0.42, 0, 0.25, 1) infinite; }
.sc-sway.sc-d2, .sc-d2 { animation-delay: -1.25s; }
.sc-pulse { animation: sc-pulse-k 3.6s cubic-bezier(0.42, 0, 0.32, 1) infinite; }
.sc-fall { animation: sc-fall-k 4.4s cubic-bezier(0.3, 0, 0.64, 1) infinite; }
.sc-drift { animation: sc-drift-k 7.2s cubic-bezier(0.42, 0, 0.24, 1) infinite; }
.sc-grow { transform-origin: bottom; animation: sc-grow-k 4.8s cubic-bezier(0.16, 1, 0.3, 1) infinite; }
.sc-rise { animation: sc-rise-k 4.4s cubic-bezier(0.16, 1, 0.3, 1) infinite; }
.sc-twinkle { animation: sc-twinkle-k 3.1s ease-in-out infinite; }
.sc-float { animation: sc-float-k 5.2s cubic-bezier(0.42, 0, 0.24, 1) infinite; }
.sc-flash { animation: sc-flash-k 4.8s cubic-bezier(0.22, 1, 0.36, 1) infinite; }

.sc-draw {
    fill: none;
    stroke-dasharray: 160;
    stroke-dashoffset: 160;
    animation: sc-draw-k 5.8s cubic-bezier(0.16, 1, 0.3, 1) infinite;
}

.sc-ripple { transform-origin: center; animation: sc-ripple-k 4.2s ease-out infinite; }
.sc-ripple.sc-d2 { animation-delay: -2.1s; }
.sc-lantern { transform-origin: top center; animation: sc-lantern-k 4.6s cubic-bezier(0.42, 0, 0.24, 1) infinite; }
.sc-firefly { animation: sc-firefly-k 5.8s cubic-bezier(0.42, 0, 0.24, 1) infinite; }
.sc-firefly.sc-d2 { animation-delay: -2.2s; }
.sc-water { transform-origin: center; animation: sc-water-k 5s ease-in-out infinite; }
.sc-wind { animation: sc-wind-k 5.6s cubic-bezier(0.42, 0, 0.24, 1) infinite; }

@keyframes sc-atmosphere-k {
    0%, 100% { opacity: 0.38; transform: scale(0.92) translateY(2px); }
    48% { opacity: 0.8; transform: scale(1.06) translateY(-3px); }
}

@keyframes sc-orbit-k { to { transform: rotate(360deg); } }
@keyframes sc-orbit-reverse-k { to { transform: rotate(-360deg); } }
@keyframes sc-frame-k { 0%, 100% { stroke-dashoffset: 0; opacity: 0.38; } 50% { stroke-dashoffset: -188; opacity: 0.86; } }
@keyframes sc-horizon-k { 0%, 100% { opacity: 0.35; transform: translateX(-2px); } 50% { opacity: 0.72; transform: translateX(2px); } }
@keyframes sc-contour-k { 0%, 100% { opacity: 0.25; transform: translateY(1px); } 50% { opacity: 0.7; transform: translateY(-1px); } }
@keyframes sc-sway-k { 0%, 100% { transform: rotate(-1.6deg) translateY(1px); } 50% { transform: rotate(1.8deg) translateY(-1px); } }
@keyframes sc-pulse-k { 0%, 100% { opacity: 0.68; transform: scale(0.96); } 48% { opacity: 1; transform: scale(1.055); } }
@keyframes sc-fall-k { 0% { transform: translate3d(4px, -12px, 0) rotate(-5deg); opacity: 0; } 18% { opacity: 0.9; } 82% { opacity: 0.82; } 100% { transform: translate3d(-8px, 30px, 0) rotate(8deg); opacity: 0; } }
@keyframes sc-drift-k { 0%, 100% { transform: translate3d(-4px, 1px, 0); } 50% { transform: translate3d(5px, -2px, 0); } }
@keyframes sc-grow-k { 0%, 18% { opacity: 0; transform: scaleY(0.68) translateY(7px); } 52%, 100% { opacity: 1; transform: scaleY(1) translateY(0); } }
@keyframes sc-rise-k { 0%, 16% { transform: translateY(8px); opacity: 0; } 48%, 100% { transform: translateY(0); opacity: 1; } }
@keyframes sc-twinkle-k { 0%, 100% { opacity: 0.18; transform: scale(0.78); } 46% { opacity: 1; transform: scale(1.12); } }
@keyframes sc-float-k { 0%, 100% { transform: translateY(1px) rotate(-0.5deg); } 50% { transform: translateY(-5px) rotate(0.7deg); } }
@keyframes sc-flash-k { 0%, 42%, 100% { opacity: 0.14; transform: scale(0.94); } 47% { opacity: 0.94; transform: scale(1.03); } 53% { opacity: 0.32; transform: scale(0.98); } }
@keyframes sc-draw-k { 0%, 14% { stroke-dashoffset: 160; opacity: 0.16; } 52%, 100% { stroke-dashoffset: 0; opacity: 1; } }
@keyframes sc-ripple-k { 0% { opacity: 0.78; transform: scale(0.58); } 76%, 100% { opacity: 0; transform: scale(1.38); } }
@keyframes sc-lantern-k { 0%, 100% { transform: rotate(-2.2deg) translateX(-1px); } 50% { transform: rotate(2.2deg) translateX(1px); } }
@keyframes sc-firefly-k { 0%, 100% { opacity: 0.15; transform: translate3d(-3px, 2px, 0) scale(0.72); } 45% { opacity: 1; transform: translate3d(4px, -4px, 0) scale(1.14); } }
@keyframes sc-water-k { 0%, 100% { transform: scaleX(0.94); opacity: 0.6; } 50% { transform: scaleX(1.04); opacity: 1; } }
@keyframes sc-wind-k { 0%, 100% { transform: translateX(-6px); opacity: 0; } 24%, 74% { opacity: 0.9; } 50% { transform: translateX(8px); opacity: 1; } }

/* 现代东方数据画卷：覆盖早期图标化动效，所有运动保持低幅、低频、无滤镜。 */
.seasonal-scene .sc-paper {
    fill-opacity: 0.52;
    stroke: rgba(255, 255, 255, 0.52);
    stroke-width: 0.65;
}

.seasonal-scene .sc-grain { opacity: 0.22; }

.seasonal-scene .sc-guide {
    fill: none;
    stroke: rgba(255, 255, 255, 0.7);
    stroke-width: 1;
    stroke-linecap: round;
}

.seasonal-scene .sc-frame {
    fill: none;
    stroke: rgba(255, 255, 255, 0.82);
    stroke-width: 1.05;
    stroke-dasharray: none;
    opacity: 0.74;
    animation: none;
}

.seasonal-scene .sc-atmosphere {
    transform-origin: 73% 20%;
    animation: sc-ambient-breathe 12s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-mist,
.seasonal-scene .sc-cloud,
.seasonal-scene .sc-field,
.seasonal-scene .sc-depth {
    animation: sc-drift-editorial 15s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-ink,
.seasonal-scene .sc-branch,
.seasonal-scene .sc-reed,
.seasonal-scene .sc-wheat,
.seasonal-scene .sc-sower,
.seasonal-scene .sc-sundial,
.seasonal-scene .sc-structure,
.seasonal-scene .sc-pavilion,
.seasonal-scene .sc-paper-cut {
    transform-origin: 50% 100%;
    animation: sc-ink-breathe 11s cubic-bezier(0.42, 0, 0.25, 1) infinite;
}

.seasonal-scene .sc-sun,
.seasonal-scene .sc-moon,
.seasonal-scene .sc-equator,
.seasonal-scene .sc-window {
    animation: sc-luminous-breathe 10s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-spark,
.seasonal-scene .sc-firefly,
.seasonal-scene .sc-dew {
    animation: sc-light-glimmer 5.8s ease-in-out infinite;
}

.seasonal-scene .sc-rain,
.seasonal-scene .sc-snow,
.seasonal-scene .sc-petal {
    animation: sc-soft-fall 9.4s cubic-bezier(0.35, 0.05, 0.25, 1) infinite;
}

.seasonal-scene .sc-ripple,
.seasonal-scene .sc-water,
.seasonal-scene .sc-ice,
.seasonal-scene .sc-arc,
.seasonal-scene .sc-heat {
    transform-origin: 50% 76%;
    animation: sc-waterline 12s ease-in-out infinite;
}

.seasonal-scene .sc-lotus,
.seasonal-scene .sc-leaf,
.seasonal-scene .sc-maple,
.seasonal-scene .sc-kite,
.seasonal-scene .sc-boat {
    animation: sc-focal-float 10s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-lantern {
    transform-origin: top center;
    animation: sc-lantern-editorial 9s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-lightning {
    animation: sc-lightning-editorial 8.6s cubic-bezier(0.22, 1, 0.36, 1) infinite;
}

.seasonal-scene .sc-wind {
    animation: sc-wind-editorial 12s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

@keyframes sc-ambient-breathe {
    0%, 100% { opacity: 0.5; transform: scale(0.96) translateY(1px); }
    50% { opacity: 0.9; transform: scale(1.025) translateY(-1px); }
}

@keyframes sc-drift-editorial {
    0%, 100% { transform: translate3d(-2px, 1px, 0); opacity: 0.9; }
    50% { transform: translate3d(3px, -1px, 0); opacity: 1; }
}

@keyframes sc-ink-breathe {
    0%, 100% { transform: rotate(-0.45deg) translateY(1px); }
    50% { transform: rotate(0.5deg) translateY(-1px); }
}

@keyframes sc-luminous-breathe {
    0%, 100% { opacity: 0.84; transform: scale(0.985); }
    50% { opacity: 1; transform: scale(1.022); }
}

@keyframes sc-light-glimmer {
    0%, 100% { opacity: 0.38; transform: scale(0.86); }
    46% { opacity: 0.98; transform: scale(1.05); }
}

@keyframes sc-soft-fall {
    0%, 100% { opacity: 0.14; transform: translate3d(2px, -2px, 0); }
    22% { opacity: 0.76; }
    70% { opacity: 0.62; transform: translate3d(-2px, 4px, 0); }
}

@keyframes sc-waterline {
    0%, 100% { opacity: 0.66; transform: scaleX(0.985) translateY(1px); }
    50% { opacity: 1; transform: scaleX(1.018) translateY(-1px); }
}

@keyframes sc-focal-float {
    0%, 100% { transform: translateY(1px) rotate(-0.35deg); }
    50% { transform: translateY(-3px) rotate(0.35deg); }
}

@keyframes sc-lantern-editorial {
    0%, 100% { transform: rotate(-1deg) translateX(-0.5px); }
    50% { transform: rotate(1deg) translateX(0.5px); }
}

@keyframes sc-lightning-editorial {
    0%, 39%, 100% { opacity: 0.22; transform: scale(0.98); }
    44% { opacity: 0.96; transform: scale(1.015); }
    49% { opacity: 0.42; transform: scale(1); }
}

@keyframes sc-wind-editorial {
    0%, 100% { opacity: 0.18; transform: translateX(-3px); }
    48% { opacity: 0.88; transform: translateX(4px); }
}

.term-title {
    background: linear-gradient(90deg, var(--navy), var(--teal));
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    animation: term-title-in 1s cubic-bezier(0.16, 1, 0.3, 1) both;
}

html[data-theme="dark"] .term-title {
    background: linear-gradient(90deg, #3CC8BE, #7FE0FF);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}

@keyframes term-title-in { from { opacity: 0; transform: translateY(10px) scale(0.92); letter-spacing: 20px; } to { opacity: 1; transform: none; letter-spacing: 10px; } }
.term-quote { animation: term-quote-in 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.25s both; }
@keyframes term-quote-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* 自定义主题：画框按上传图片比例动态调整，保持完整展示。 */
.custom-scene {
    position: relative;
    width: 320px;
    height: 240px;
    max-width: 100%;
    margin: 0 auto;
    border-radius: 18px;
    overflow: hidden;
    background: rgba(4, 20, 94, 0.05);
    box-shadow: 0 10px 30px rgba(4, 20, 94, 0.14);
    transition: width 0.55s cubic-bezier(0.16, 1, 0.3, 1), height 0.55s cubic-bezier(0.16, 1, 0.3, 1);
}

.custom-scene img { display: block; width: 100%; height: 100%; object-fit: contain; opacity: 0; transition: opacity 0.45s ease; }
.custom-scene.img-loaded img { opacity: 1; }
.custom-scene.img-error img { display: none; }

.custom-info {
    width: 320px;
    max-width: 100%;
    margin: 12px auto 0;
    padding: 10px 12px;
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.7);
    box-shadow: 0 6px 18px rgba(4, 20, 94, 0.08);
    transition: width 0.55s cubic-bezier(0.16, 1, 0.3, 1);
}

.custom-info .custom-quote { margin: 0 0 8px; font-size: 13px; letter-spacing: 1px; color: var(--text-2); text-align: center; overflow-wrap: anywhere; animation: term-quote-in 1.2s cubic-bezier(0.16, 1, 0.3, 1) 0.25s both; }
.custom-info-row { display: flex; align-items: center; gap: 10px; }
.custom-info .ps-loading-pct { margin: 0; font-size: 16px; }
.custom-info .ps-loading-bar { flex: 1; width: auto; height: 6px; margin: 0; }
.custom-info .ps-loading-text { margin-top: 6px; text-align: center; }
html[data-theme="dark"] .custom-info { background: rgba(16, 22, 48, 0.72); }

/* 统一底标（主页目录页脚 / admin 侧边栏底部 / admin 登录页共用）。 */
.brand-row {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    flex-wrap: wrap;
    white-space: nowrap;
}

.brand-live {
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--teal);
    animation: brandLivePulse 2.4s ease-in-out infinite;
}

.brand-version {
    padding: 2px 10px;
    border-radius: 999px;
    border: 1px solid rgba(60, 200, 190, 0.5);
    background: rgba(60, 200, 190, 0.12);
    color: var(--navy);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.4px;
    font-family: Consolas, monospace;
    animation: brandGlowPulse 2.8s ease-in-out infinite;
}

.brand-version:empty { display: none; }
.brand-sep { opacity: 0.5; color: var(--text-3, rgba(0, 0, 40, 0.35)); }

.brand-powered {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.8px;
    background: linear-gradient(90deg, var(--teal), var(--sand, #F5DCBE), var(--teal));
    background-size: 200% auto;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: brandShimmer 4s linear infinite;
}

@keyframes brandLivePulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(60, 200, 190, 0.45); }
    50% { box-shadow: 0 0 6px 1px rgba(60, 200, 190, 0.4); }
}

@keyframes brandGlowPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(60, 200, 190, 0.3); }
    50% { box-shadow: 0 0 10px 1px rgba(60, 200, 190, 0.32); }
}

@keyframes brandShimmer { to { background-position: 200% center; } }

@media (prefers-reduced-motion: reduce) {
    .seasonal-scene *,
    .term-title,
    .term-quote,
    .custom-info .custom-quote,
    .brand-live,
    .brand-version,
    .brand-powered {
        animation: none !important;
    }
}

/* 20260903a · 二十四节气重绘：东方博物画卡
   绢光、纸张、地形线与二十四枚独立节气印记构成统一画面语法。 */
.seasonal-scene {
    --sc-seal: #237E78;
    --sc-seal-soft: rgba(255, 255, 255, 0.42);
}

.seasonal-scene .sc-canvas {
    stroke: rgba(255, 255, 255, 0.55);
    stroke-width: 0.7;
}

.seasonal-scene .sc-vellum {
    stroke: rgba(255, 255, 255, 0.58);
    stroke-width: 0.75;
    animation: sc-vellum-breathe 12s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-grain {
    opacity: 0.28;
}

.seasonal-scene .sc-night-veil {
    opacity: 0;
    transition: opacity 420ms ease;
}

.seasonal-scene .sc-silk path {
    fill: none;
    stroke: rgba(255, 255, 255, 0.34);
    stroke-width: 8;
    stroke-linecap: round;
    opacity: 0.34;
    animation: sc-silk-flow 14s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-silk .sc-d2 {
    stroke-width: 5;
    opacity: 0.22;
    animation-delay: -6s;
}

.seasonal-scene .sc-cartography path {
    fill: none;
    stroke: rgba(62, 100, 111, 0.19);
    stroke-width: 0.75;
    stroke-linecap: round;
    stroke-dasharray: 2 5;
    animation: sc-map-drift 12s ease-in-out infinite;
}

.seasonal-scene .sc-cartography path:last-child {
    opacity: 0.62;
    animation-delay: -5s;
}

.seasonal-scene .sc-scene-body {
    animation: sc-art-breathe 11s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-season-seal {
    color: var(--sc-seal);
    animation: sc-seal-float 8s cubic-bezier(0.42, 0, 0.24, 1) infinite;
}

.seasonal-scene .sc-season-seal > circle:first-child {
    fill: var(--sc-seal-soft);
    stroke: rgba(255, 255, 255, 0.7);
    stroke-width: 0.8;
}

.seasonal-scene .sc-season-seal .sc-seal-ring {
    fill: none;
    stroke: var(--sc-seal);
    stroke-width: 0.8;
    stroke-dasharray: 1 2.4;
    opacity: 0.68;
}

.seasonal-scene .sc-season-seal path {
    fill: none;
    stroke: var(--sc-seal);
    stroke-width: 1.25;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.seasonal-scene .sc-season-seal circle:not(:first-child):not(.sc-seal-ring) {
    fill: var(--sc-seal);
    stroke: none;
}

.seasonal-scene .sc-lightline {
    fill: none;
    stroke-width: 1.25;
    stroke-linecap: round;
    animation: sc-lightline-scan 7s ease-in-out infinite;
}

.seasonal-scene .sc-frame {
    stroke-width: 0.9;
    opacity: 0.68;
}

/* 四时仅调整印记墨色，主体仍保留每一节气自己的颜色与叙事。 */
.seasonal-scene-xiaohan,
.seasonal-scene-dahan,
.seasonal-scene-lidong,
.seasonal-scene-xiaoxue,
.seasonal-scene-daxue,
.seasonal-scene-dongzhi { --sc-seal: #456F96; --sc-seal-soft: rgba(235, 247, 255, 0.56); }

.seasonal-scene-lichun,
.seasonal-scene-yushui,
.seasonal-scene-jingzhe,
.seasonal-scene-chunfen,
.seasonal-scene-qingming,
.seasonal-scene-guyu { --sc-seal: #287D68; --sc-seal-soft: rgba(235, 255, 246, 0.52); }

.seasonal-scene-lixia,
.seasonal-scene-xiaoman,
.seasonal-scene-mangzhong,
.seasonal-scene-xiazhi,
.seasonal-scene-xiaoshu,
.seasonal-scene-dashu { --sc-seal: #A16B24; --sc-seal-soft: rgba(255, 249, 223, 0.56); }

.seasonal-scene-liqiu,
.seasonal-scene-chushu,
.seasonal-scene-bailu,
.seasonal-scene-qiufen,
.seasonal-scene-hanlu,
.seasonal-scene-shuangjiang { --sc-seal: #8E593C; --sc-seal-soft: rgba(255, 244, 228, 0.54); }

html[data-theme="dark"] .seasonal-scene .sc-night-veil {
    opacity: 0.48;
}

html[data-theme="dark"] .seasonal-scene .sc-vellum {
    opacity: 0.68;
}

html[data-theme="dark"] .seasonal-scene .sc-cartography path {
    stroke: rgba(178, 226, 229, 0.2);
}

html[data-theme="dark"] .seasonal-scene .sc-season-seal {
    --sc-seal: #8FE3DC;
    --sc-seal-soft: rgba(7, 18, 48, 0.58);
}

html[data-theme="dark"] .seasonal-scene .sc-season-seal > circle:first-child {
    stroke: rgba(143, 227, 220, 0.4);
}

@keyframes sc-vellum-breathe {
    0%, 100% { transform: scale(0.995); opacity: 0.86; }
    50% { transform: scale(1.004); opacity: 1; }
}

@keyframes sc-silk-flow {
    0%, 100% { transform: translate3d(-5px, 1px, 0) scaleX(0.98); opacity: 0.18; }
    50% { transform: translate3d(5px, -2px, 0) scaleX(1.025); opacity: 0.42; }
}

@keyframes sc-map-drift {
    0%, 100% { transform: translate3d(-2px, 1px, 0); opacity: 0.34; }
    50% { transform: translate3d(2px, -1px, 0); opacity: 0.78; }
}

@keyframes sc-art-breathe {
    0%, 100% { transform: translateY(0) scale(0.996); }
    50% { transform: translateY(-1px) scale(1.004); }
}

@keyframes sc-seal-float {
    0%, 100% { opacity: 0.74; transform: translate(202px, 36px) scale(0.97) rotate(-1deg); }
    50% { opacity: 1; transform: translate(202px, 36px) scale(1.035) rotate(1deg); }
}

@keyframes sc-lightline-scan {
    0%, 100% { opacity: 0.28; stroke-dasharray: 18 70; stroke-dashoffset: 0; }
    50% { opacity: 0.88; stroke-dasharray: 46 70; stroke-dashoffset: -22; }
}

@media (prefers-reduced-motion: reduce) {
    .seasonal-scene .sc-vellum,
    .seasonal-scene .sc-silk path,
    .seasonal-scene .sc-cartography path,
    .seasonal-scene .sc-scene-body,
    .seasonal-scene .sc-season-seal,
    .seasonal-scene .sc-lightline {
        animation: none !important;
    }
}
