/* ============================================================
   天成记官网 · React Bits 风格动效样式
   ============================================================ */

/* ---------- Split Flap Text（数字翻牌） ---------- */
.split-flap {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    font-size: clamp(36px, 4vw, 56px);
    font-weight: 700;
    line-height: 1;
    color: var(--sf-color, #f8fafc);
    vertical-align: middle;
}
.split-flap-tile {
    position: relative;
    display: inline-block;
    width: .78em;
    height: 1.24em;
    perspective: 340px;
    border-radius: 7px;
    overflow: hidden;
    background: var(--sf-bg, #111827);
    box-shadow: 0 6px 18px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.10);
}
/* 上下两个半高遮罩，内部放一个整字高的数字层，靠裁剪得到"上半/下半" */
.split-flap-tile .sf-half {
    position: absolute;
    left: 0; right: 0;
    height: 50%;
    overflow: hidden;
    background: var(--sf-bg, #111827);
    backface-visibility: hidden;
}
.split-flap-tile .sf-half i {
    display: block;
    height: 1.24em;
    line-height: 1.24em;
    text-align: center;
    font-style: normal;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--sf-color, #f8fafc);
}
.split-flap-tile .sf-top { top: 0; border-radius: 7px 7px 0 0; }
.split-flap-tile .sf-bottom { bottom: 0; border-radius: 0 0 7px 7px; }
/* 下半遮罩：把整字往上推半格，露出数字的下半部分 */
.split-flap-tile .sf-bottom i { margin-top: -.62em; }
/* 翻页叶片：往下翻 90° 后隐藏 */
.split-flap-tile .sf-flap {
    top: 0; z-index: 2;
    border-radius: 7px 7px 0 0;
    transform-origin: bottom center;
    will-change: transform;
}
/* 中缝 */
.split-flap-tile .sf-top::after {
    content: ''; position: absolute; left: 0; right: 0; bottom: 0;
    height: 1px; background: rgba(0,0,0,.58); z-index: 4;
}
@keyframes sfFlip {
    0%   { transform: rotateX(0deg); }
    100% { transform: rotateX(-90deg); }
}
.split-flap-sep {
    align-self: flex-end;
    margin: 0 1px 0 0;
    line-height: .8;
    opacity: .75;
    color: var(--sf-color, #f8fafc);
}
.hero-stats { position: relative; }
.hero-stats li .split-flap { display: inline-flex; margin-bottom: 8px; }

/* ---------- Accordion Gallery ---------- */
.accordion-gallery {
    display: flex;
    width: 100%;
    height: 220px;
    gap: var(--ag-gap, 10px);
    padding: 0;
}
.ag-item {
    position: relative;
    flex: var(--ag-flex, 1);
    min-width: 72px;
    border-radius: var(--ag-radius, 16px);
    overflow: hidden;
    transition: flex var(--ag-dur, .6s) cubic-bezier(.22,.8,.28,1);
    cursor: pointer;
}
.ag-item img {
    width: 100%; height: 100%;
    object-fit: cover;
    transition: transform var(--ag-dur, .6s) cubic-bezier(.22,.8,.28,1);
}
.ag-item:hover img { transform: scale(1.08); }
/* 品牌 logo：必须完整可见，不能按 cover 裁切 */
.accordion-gallery .brand-cell {
    background: #fff;
    border: 1px solid var(--line);
    display: grid;
    place-items: center;
}
.accordion-gallery .brand-cell::before { display: none; }
.accordion-gallery .brand-cell img {
    position: static;
    width: auto; height: auto;
    max-width: 70%; max-height: 58%;
    object-fit: contain;
    filter: none; opacity: 1;
    transform: none;
    transition: transform var(--ag-dur, .6s) cubic-bezier(.22,.8,.28,1);
}
.accordion-gallery .brand-cell:hover img { transform: scale(1.12); }
.ag-item .ag-title {
    position: absolute; left: 14px; right: 14px; bottom: 14px;
    color: #fff; font-size: 15px; font-weight: 600;
    opacity: 0; transform: translateY(12px);
    transition: all var(--ag-dur, .6s) cubic-bezier(.22,.8,.28,1) .1s;
    text-shadow: 0 2px 12px rgba(0,0,0,.5);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ag-item:hover .ag-title { opacity: 1; transform: translateY(0); }
.ag-item::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(180deg, transparent 50%, rgba(0,0,0,.55) 100%);
    opacity: 0; transition: opacity var(--ag-dur, .6s);
    pointer-events: none;
}
.ag-item:hover::after { opacity: 1; }
.accordion-gallery .brand-cell::after { display: none; }
.ag-gray { filter: grayscale(1); }
.ag-item.ag-gray:hover { filter: grayscale(0); }
@media (max-width: 768px) {
    /* 窄屏改宫格：手风琴横排会因 min-width 撑破容器 */
    .accordion-gallery {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        height: auto;
        gap: 10px;
    }
    .ag-item { min-width: 0; aspect-ratio: 1 / 1; }
    .ag-item .ag-title { opacity: 1; transform: none; font-size: 12px; }
    .accordion-gallery .brand-cell img { max-width: 78%; max-height: 50%; }
}
@media (max-width: 480px) {
    .accordion-gallery { grid-template-columns: repeat(2, 1fr); }
}

/* ---------- 合作品牌：每行固定 5 个 ---------- */
.partner-grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 16px;
}
.partner-grid .brand-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    min-height: 118px;
    padding: 20px 16px;
    text-align: center;
}
.partner-grid .brand-cell img { max-height: 46px; }
.brand-name {
    position: relative; z-index: 2;
    font-size: 13px; font-weight: 500; line-height: 1.35;
    color: var(--txt-2);
    transition: color .45s var(--ease);
    /* 长品牌名最多两行，超出省略，避免撑高格子 */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.partner-grid .brand-cell:hover .brand-name { color: var(--ink); }
@media (max-width: 768px) {
    .partner-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
    .partner-grid .brand-cell { min-height: 104px; padding: 16px 12px; gap: 8px; }
    .partner-grid .brand-cell img { max-height: 38px; }
    .brand-name { font-size: 12px; }
}
@media (max-width: 480px) {
    .partner-grid { grid-template-columns: repeat(2, 1fr); }
    .partner-grid .brand-cell { min-height: 96px; }
}

/* ---------- Particle Text ---------- */
/* 只铺在首页 hero 内、位于文案之下，滚出 hero 后淡出 */
.hero { isolation: isolate; }
.particle-text {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    pointer-events: none; z-index: 1;
    mix-blend-mode: screen;
    opacity: 0; transition: opacity 1.1s ease;
}
.particle-text.formed { opacity: .8; }
.particle-text.is-hidden { opacity: 0; }
@media (max-width: 768px) { .particle-text { display: none; } }

/* ---------- Nav Ripple（导航聚焦涟漪）：已退役 ----------
   原实现在 hover 时往 .gooey-layer 里注入 1~2 圈描边圆环浮层，压在按钮之上。
   本轮要求「不留任何可见描边圆环 / 圆形跟随元素」，故整块下线；
   导航与按钮的 hover 反馈改由 site.css「交互反馈」段 + .nav-a span::after + .btn 液态填充承担。 */


/* ---------- Liquid Ether ---------- */
.liquid-ether {
    position: absolute; inset: 0; z-index: 1; pointer-events: none;
    width: 100%; height: 100%;
    mix-blend-mode: screen;
    opacity: .6;
}

/* ---------- Silk Background ---------- */
.silk-bg { position: relative; overflow: hidden; }
.silk-canvas {
    position: absolute; inset: 0; z-index: 0; pointer-events: none;
    width: 100%; height: 100%;
    opacity: .38; mix-blend-mode: soft-light;
}
.silk-bg > .wrap { position: relative; z-index: 1; }
/* 带媒体背景的区块（.sec-media）：图片层是 z-index:0 的兄弟节点、且排在丝绸之后，
   同级同序会让图片盖掉丝绸纹理。这里把该区块内的丝绸抬到 z-index:1 ——
   仍在 .sec-dark::before（极光，同为 1 且 DOM 更早）与 .wrap（1，DOM 更晚）之间，
   层级关系与其它区块一致，不影响未使用 .sec-media 的区块。 */
.sec-media > .silk-canvas { z-index: 1; }

/* ---------- Bento Grid ---------- */
.bento-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-auto-rows: 220px;
    gap: 18px;
}
.bento-grid .case { border-radius: var(--r-m, 16px); overflow: hidden; }
/* Bento 模式下高度由网格行决定，必须解除原来的 4/3 比例，否则会溢出破版 */
.bento-grid .case { aspect-ratio: auto; height: 100%; }
.bento-grid .case.bento-featured {
    grid-column: span 2; grid-row: span 2;
}
.bento-grid .case img { width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 1024px) {
    .bento-grid { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 180px; }
    .bento-grid .case.bento-featured { grid-column: span 2; grid-row: span 2; }
}
@media (max-width: 640px) {
    .bento-grid { grid-template-columns: 1fr; grid-auto-rows: 200px; }
    .bento-grid .case.bento-featured { grid-column: span 1; grid-row: span 1; }
}

/* ============================================================
   React Bits 风格 UI 层：按钮 / 文字 / 卡片 / 区块氛围
   ============================================================ */

/* ---------- 1. 按钮：发光描边 + 呼吸光晕 ---------- */
.btn-gold {
    background: linear-gradient(120deg, var(--gold-l) 0%, var(--gold) 58%, var(--gold-d) 100%);
    background-size: 200% 100%;
    box-shadow: 0 0 0 1px rgba(224,199,149,.45), 0 10px 30px rgba(194,160,106,.34), inset 0 1px 0 rgba(255,255,255,.5);
    transition: background-position .6s var(--ease), color .45s var(--ease), box-shadow .45s var(--ease);
}
.btn-gold:hover {
    background-position: 100% 0;
    box-shadow: 0 0 0 1px rgba(244,230,201,.85), 0 0 30px rgba(224,199,149,.5), 0 16px 44px rgba(194,160,106,.48), inset 0 1px 0 rgba(255,255,255,.7);
}
.btn-dark:hover,
.btn:hover {
    box-shadow: 0 0 0 1px rgba(244,230,201,.6), 0 0 26px rgba(224,199,149,.42), 0 14px 38px rgba(194,160,106,.45), inset 0 1px 0 rgba(255,255,255,.6);
}
.btn-ghost {
    backdrop-filter: blur(10px) saturate(1.25);
    -webkit-backdrop-filter: blur(10px) saturate(1.25);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.18);
}
.btn-ghost:hover {
    box-shadow: inset 0 1px 0 rgba(255,255,255,.26), 0 0 24px rgba(224,199,149,.32), 0 12px 32px rgba(194,160,106,.34);
}

/* ---------- 2. 文字：ShinyText 流光眉标 ---------- */
.eyebrow {
    background: linear-gradient(90deg,
        rgba(156,127,76,.7) 0%, rgba(224,199,149,1) 40%,
        rgba(246,236,214,1) 50%, rgba(224,199,149,1) 60%, rgba(156,127,76,.7) 100%);
    background-size: 240% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: rbShine 5.5s linear infinite;
}
@keyframes rbShine {
    0%   { background-position: 180% 0; }
    100% { background-position: -60% 0; }
}

/* ---------- 3. 暗色区块：极光呼吸 ---------- */
.sec-dark { position: relative; overflow: hidden; }
/* z-index 必须是 1：.silk-canvas 是 .sec-dark 的普通子元素且同为 z-index:0，
   靠 DOM 顺序它会盖在 ::before 上面，把极光整块压掉（表现为"没有用到渐变"）。 */
.sec-dark::before {
    content: ''; position: absolute; inset: -30% -12%; z-index: 1; pointer-events: none;
    background:
        radial-gradient(38% 44% at 16% 26%, rgba(194,160,106,.28), transparent 66%),
        radial-gradient(34% 40% at 84% 70%, rgba(126,158,225,.18), transparent 68%),
        radial-gradient(30% 34% at 54% 98%, rgba(224,199,149,.22), transparent 70%);
    filter: blur(12px);
    animation: rbAurora 24s ease-in-out infinite alternate;
}
@keyframes rbAurora {
    0%   { transform: translate3d(-2%, -1.5%, 0) scale(1); }
    50%  { transform: translate3d(2%, 2.5%, 0) scale(1.07); }
    100% { transform: translate3d(-1%, 1%, 0) scale(1.03); }
}
.sec-dark > .wrap { position: relative; z-index: 2; }

/* ---------- 3b. 页面顶部横幅：无 banner 时的渐变兜底 ---------- */
/* 后台未给该页面上传 banner 时，用品牌金极光渐变替代原来的纯深色平面 */
.page-hero-fallback {
    background:
        radial-gradient(1100px 560px at 14% -12%, rgba(224,199,149,.40), transparent 62%),
        radial-gradient(880px 460px at 86% 2%, rgba(126,158,225,.20), transparent 64%),
        radial-gradient(780px 420px at 52% 120%, rgba(194,160,106,.24), transparent 68%),
        linear-gradient(115deg, transparent 30%, rgba(224,199,149,.075) 46%, transparent 61%),
        linear-gradient(142deg, #17140f 0%, #1e1912 44%, #0e0d0b 100%);
    border-bottom: 1px solid rgba(224,199,149,.14);
}
/* 细网格纹理：向上淡出，给平面渐变一点质感 */
.page-hero-fallback::before {
    content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none;
    background-image:
        linear-gradient(rgba(255,255,255,.055) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,.055) 1px, transparent 1px);
    background-size: 58px 58px;
    -webkit-mask-image: radial-gradient(130% 95% at 50% 0%, #000 26%, transparent 76%);
    mask-image: radial-gradient(130% 95% at 50% 0%, #000 26%, transparent 76%);
}
/* 光晕缓慢漂移，避免大面积色块显得死板；底部压暗只为托住白色标题，别压太狠 */
.page-hero-fallback::after {
    background:
        radial-gradient(46% 60% at 22% 18%, rgba(224,199,149,.24), transparent 70%),
        radial-gradient(40% 54% at 80% 62%, rgba(126,158,225,.12), transparent 72%),
        linear-gradient(180deg, rgba(10,10,12,0) 0%, rgba(10,10,12,.18) 58%, rgba(10,10,12,.55) 100%);
    animation: rbAurora 26s ease-in-out infinite alternate;
}

/* ---------- 4. 卡片：流光描边 + 聚光光斑 ---------- */
@property --rb-ang {
    syntax: '<angle>'; inherits: false; initial-value: 0deg;
}
.cap::before {
    background: conic-gradient(from var(--rb-ang, 0deg),
        transparent 0%, rgba(224,199,149,.9) 16%, transparent 34%,
        transparent 62%, rgba(224,199,149,.6) 80%, transparent 100%);
    opacity: 0;
}
.cap:hover::before { opacity: 1; animation: rbMarch 5s linear infinite; }
@keyframes rbMarch { to { --rb-ang: 360deg; } }

/* 案例卡：hover 聚光（压在图片之上、文案遮罩之下） */
.case { position: relative; }
.case > .case-mask { z-index: 2; }
.case > .case-tag { z-index: 3; }
/* ⚠️ 从「跟随指针的 var(--mx)/var(--my)」改为**居中固定**：
   全站只保留一条跟随指针的光带（site.js 的 .cursor-glow），卡片再各自跟一遍
   就会变成一屏十几个互不同步的光点 —— 这正是此前「光效零散、焦点不清晰」的成因。
   现在每张卡的 hover 表现完全一致，指针反馈统一由光带负责。 */
.case::after {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 1;
    background: radial-gradient(340px circle at 50% 30%, rgba(224,199,149,.26), transparent 64%);
    opacity: 0; transition: opacity .45s var(--ease);
}
.case:hover::after { opacity: 1; }
.biz, .cap { position: relative; }
.biz::after, .cap::after {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background: radial-gradient(260px circle at 50% 28%, rgba(224,199,149,.13), transparent 64%);
    opacity: 0; transition: opacity .45s var(--ease);
}
.biz:hover::after, .cap:hover::after { opacity: 1; }

/* 业务卡：hover 金色描边外发光 */
.biz:hover {
    box-shadow: 0 0 0 1px rgba(194,160,106,.35), 0 24px 56px rgba(16,16,20,.10), 0 0 34px rgba(224,199,149,.22);
}

/* 新闻条目：玻璃拟态 */
.news:hover {
    background: rgba(255,255,255,.74);
    backdrop-filter: blur(14px) saturate(1.15);
    -webkit-backdrop-filter: blur(14px) saturate(1.15);
}

/* ---------- React Bits 扩展效果 ---------- */
.rb-spark {
    position: fixed; z-index: 9999; pointer-events: none; border-radius: 50%;
    animation: rbSparkPop .7s ease-out forwards;
}
@keyframes rbSparkPop {
    0% { transform: translate(-50%, -50%) scale(1); opacity: 1; }
    100% { transform: translate(calc(-50% + var(--sx, 0)), calc(-50% + var(--sy, 0))) scale(0); opacity: 0; }
}

/* 点击涟漪：双圈同心水波（::before 略慢 90ms 跟进） */
.rb-ripple { position: fixed; z-index: 9999; pointer-events: none; border-radius: 50%; }
.rb-ripple::before,
.rb-ripple::after {
    content: ''; position: absolute; inset: 0; border-radius: 50%;
    border: 1.5px solid var(--rp-color, #c2a06a);
    animation: rbRippleOut var(--rp-duration, .7s) cubic-bezier(.22,.61,.36,1) forwards;
}
.rb-ripple::after { animation-delay: calc(var(--rp-duration, .7s) * .14); }
.rb-ripple--single::after { display: none; }
@keyframes rbRippleOut {
    0% { transform: scale(.12); opacity: .9; }
    100% { transform: scale(1); opacity: 0; }
}

/* 点击光环脉冲：细描边圆环放大 + 中心亮点回缩 */
.rb-halo {
    position: fixed; z-index: 9999; pointer-events: none; border-radius: 50%;
    border: var(--hl-width, 2px) solid var(--hl-color, #c2a06a);
    animation: rbHaloOut var(--hl-duration, .55s) cubic-bezier(.2,.7,.3,1) forwards;
}
.rb-halo::after {
    content: ''; position: absolute; left: 50%; top: 50%;
    width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%;
    background: var(--hl-color, #c2a06a);
    animation: rbHaloDot var(--hl-duration, .55s) ease-out forwards;
}
@keyframes rbHaloOut {
    0% { transform: translate(-50%, -50%) scale(.15); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }
}
@keyframes rbHaloDot {
    0% { transform: scale(1.4); opacity: .95; }
    100% { transform: scale(0); opacity: 0; }
}

/* 点击金色彩屑：小矩形喷洒 + 旋转 + 抛物线下坠 */
.rb-confetti {
    position: fixed; z-index: 9999; pointer-events: none; border-radius: 1px;
    animation: rbConfettiFly .85s cubic-bezier(.16,.6,.4,1) forwards;
}
@keyframes rbConfettiFly {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 1; }
    70% { opacity: 1; }
    100% { transform: translate(calc(-50% + var(--cx, 0)), calc(-50% + var(--cy, 0))) rotate(var(--rot, 360deg)) scale(.7); opacity: 0; }
}

.rb-blur-text {
    filter: blur(8px); opacity: 0;
    animation: rbBlurIn var(--rb-blur-duration, 1.2s) ease forwards;
    animation-delay: var(--rb-blur-delay, 0.2s);
}
@keyframes rbBlurIn { to { filter: blur(0); opacity: 1; } }

.rb-shiny-text {
    background: linear-gradient(90deg, var(--rb-shiny-color, #c2a06a) 0%, #fff 50%, var(--rb-shiny-color, #c2a06a) 100%);
    background-size: 200% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: rbShinySweep var(--rb-shiny-speed, 4s) linear infinite;
}
@keyframes rbShinySweep { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

.rb-gradient-text {
    background: linear-gradient(90deg, var(--rb-gradient-from, #c2a06a), var(--rb-gradient-to, #fff), var(--rb-gradient-from, #c2a06a));
    background-size: 200% 100%;
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: rbGradientFlow var(--rb-gradient-speed, 6s) linear infinite;
}
@keyframes rbGradientFlow { 0% { background-position: 0% 50%; } 100% { background-position: 200% 50%; } }

.rb-reveal {
    opacity: 0; transform: translateY(var(--rb-reveal-distance, 40px));
    transition: opacity var(--rb-reveal-duration, .8s) cubic-bezier(.22,.61,.36,1), transform var(--rb-reveal-duration, .8s) cubic-bezier(.22,.61,.36,1);
    transition-delay: var(--rb-reveal-stagger, 0s);
}
.rb-reveal.in { opacity: 1; transform: translateY(0); }

.rb-aurora {
    position: absolute; inset: 0; z-index: 0; pointer-events: none;
    background:
        radial-gradient(38% 44% at 16% 26%, color-mix(in srgb, var(--rb-aurora-c1, #c2a06a) 28%, transparent), transparent 66%),
        radial-gradient(34% 40% at 84% 70%, color-mix(in srgb, var(--rb-aurora-c2, #7c3aed) 18%, transparent), transparent 68%),
        radial-gradient(30% 34% at 54% 98%, color-mix(in srgb, var(--rb-aurora-c3, #2563eb) 22%, transparent), transparent 70%);
    opacity: var(--rb-aurora-opacity, .18);
    animation: rbAuroraMove var(--rb-aurora-speed, 20s) ease-in-out infinite alternate;
    mix-blend-mode: screen;
}
@keyframes rbAuroraMove {
    0% { transform: translate3d(-2%, -1.5%, 0) scale(1); }
    50% { transform: translate3d(2%, 2.5%, 0) scale(1.07); }
    100% { transform: translate3d(-1%, 1%, 0) scale(1.03); }
}

.rb-particles {
    position: absolute; inset: 0; z-index: 1; pointer-events: none;
    width: 100%; height: 100%;
    opacity: .7;
}

/* ---------- 新增粒子衍生动效（星网 / 金粉 / 光波） ----------
   与粒子文字同源：铺在 hero 内文案之下、用 screen 混合让金线在深色 hero 上发光。
   窄屏一律关闭（移动端为省电，且 hero 在手机上本就窄）。 */
.rb-constellation, .rb-golddust, .rb-wave {
    position: absolute; inset: 0; z-index: 1; pointer-events: none;
    width: 100%; height: 100%;
    mix-blend-mode: screen;
}
.rb-constellation { opacity: .72; }
.rb-golddust { opacity: .85; }
.rb-wave { opacity: .7; }
@media (max-width: 768px) {
    .rb-constellation, .rb-golddust, .rb-wave { display: none; }
}

@media (prefers-reduced-motion: reduce) {
    .eyebrow { animation: none; }
    .sec-dark::before { animation: none; }
    .cap:hover::before { animation: none; }
    .rb-blur-text, .rb-shiny-text, .rb-gradient-text { animation: none; }
    .rb-aurora { animation: none; }
}
