/* R15 首页「轨道调度图」。由 build_home_r15.py 复制自已确认的 v2 方案。只作用于 .xinai-home.r15；首页固定深色。
   参考了蜂巢 / Flow 的动效手法（流光粒子、核心呼吸、光带扫过、慢速漂移），图形与文案为 XinAI 自有。 */
.xinai-home.r15 { --g:#050807; --ink:#eef3f0; --mut:#8b9690; --line:rgba(255,255,255,.08); --line2:rgba(255,255,255,.14); --mint:#6ee7b7; --mint2:#34d399; --brand:#466b58; --glass:rgba(255,255,255,.035);
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; --ease:cubic-bezier(.2,.7,0,1); background:var(--g) !important; color:var(--ink); color-scheme:dark; overflow-x:clip; }
.xinai-home.r15 .xinai-auth-header { position:relative; z-index:5; background:transparent !important; border-color:transparent !important; color:var(--ink) !important; }
.xinai-home.r15 .xinai-auth-header a:not(.btn), .xinai-home.r15 .xinai-auth-header button { color:#c9d4ce !important; background:transparent !important; }
.xinai-home.r15 .xinai-auth-header .btn-primary { background:var(--brand) !important; color:#fff !important; }
.xinai-home.r15 .xinai-auth-footer { position:relative; z-index:1; color:var(--mut) !important; border-color:var(--line) !important; background:transparent !important; }
.r15 .r15-main { position:relative; display:block; max-width:none; min-height:0; margin:0; padding:0; text-align:left; color:var(--ink); }

/* 背景：极光漂移 + 星点闪烁 */
.r15-sky { position:absolute; left:0; right:0; top:-81px; height:1000px; overflow:hidden; pointer-events:none; z-index:0; }
.r15-aurora { position:absolute; border-radius:50%; filter:blur(72px); opacity:.6; }
.r15-aurora.a { width:760px; height:540px; left:50%; top:20px; background:radial-gradient(closest-side, rgba(52,211,153,.42), transparent); }
.r15-aurora.b { width:680px; height:480px; left:4%; top:300px; background:radial-gradient(closest-side, rgba(70,107,88,.6), transparent); }
.r15-aurora.c { width:420px; height:420px; left:72%; top:420px; background:radial-gradient(closest-side, rgba(45,212,191,.22), transparent); }
.r15.motion .r15-aurora.a { animation:r15-drift-a 18s ease-in-out infinite alternate; }
.r15.motion .r15-aurora.b { animation:r15-drift-b 22s ease-in-out infinite alternate; }
.r15.motion .r15-aurora.c { animation:r15-drift-a 26s ease-in-out infinite alternate-reverse; }
@keyframes r15-drift-a { to { transform:translate(-130px, 70px) scale(1.14); } }
@keyframes r15-drift-b { to { transform:translate(150px, -50px) scale(.9); } }
.r15-stars { position:absolute; inset:0; width:100%; height:100%; }
.r15-stars circle { fill:#dcfce7; }
.r15.motion .r15-stars circle { animation:r15-tw 4.5s ease-in-out infinite; }
@keyframes r15-tw { 50% { opacity:.12; } }
.r15-sky::after { content:""; position:absolute; left:0; right:0; bottom:0; height:260px; background:linear-gradient(transparent, var(--g)); }

/* 首屏 */
.r15-hero { position:relative; z-index:1; max-width:1240px; margin:0 auto; padding:28px 40px 56px; display:grid; grid-template-columns:minmax(0,1fr) 600px; gap:40px; align-items:center; }
.r15-kicker { display:inline-flex; align-items:center; gap:10px; height:32px; padding:0 14px; border-radius:999px; border:1px solid var(--line2); background:var(--glass); font-size:13px; color:#c3cec8; }
.r15-kicker i { width:6px; height:6px; border-radius:50%; background:var(--mint); box-shadow:0 0 10px var(--mint); }
.r15.motion .r15-kicker i { animation:r15-blink 2.4s ease-in-out infinite; }
@keyframes r15-blink { 50% { opacity:.35; } }
.r15 h1 { margin:22px 0 0; font-size:68px; line-height:1.07; letter-spacing:-.035em; font-weight:750; color:var(--ink); }
.r15-grad { background:linear-gradient(115deg, #f4fff9 8%, #a7f3d0 46%, #34d399 92%); -webkit-background-clip:text; background-clip:text; color:transparent; }
.r15-swap { display:inline-grid; vertical-align:bottom; height:1.1em; overflow:hidden; padding-right:.06em; }
.r15-swap > span { grid-area:1/1; transition:transform .65s var(--ease), opacity .45s, filter .45s; }
.r15-swap > span:not(.is-in) { transform:translateY(100%); opacity:0; filter:blur(6px); }
.r15-swap > span.is-out { transform:translateY(-100%); }
.r15-lead { margin:22px 0 0; max-width:30em; font-size:18px; line-height:1.65; color:var(--mut); }
.r15-actions { display:flex; flex-wrap:wrap; gap:12px; margin-top:30px; }
.r15-actions a { position:relative; display:inline-flex; align-items:center; gap:8px; height:50px; padding:0 24px; border-radius:10px; font-size:15px; font-weight:650; text-decoration:none; overflow:hidden; transition:transform .25s var(--ease), box-shadow .25s, border-color .25s; }
.r15-primary { background:linear-gradient(180deg, #86efc4, #34d399); color:#03140c; box-shadow:0 0 0 1px rgba(110,231,183,.55), 0 12px 40px -12px rgba(52,211,153,.7); }
.r15-primary::after { content:""; position:absolute; top:0; bottom:0; width:40%; left:-50%; background:linear-gradient(100deg, transparent, rgba(255,255,255,.55), transparent); transform:skewX(-20deg); }
.r15.motion .r15-primary::after { animation:r15-sheen 4.2s var(--ease) infinite 2s; }
@keyframes r15-sheen { 0%, 70% { left:-50%; } 100% { left:130%; } }
.r15-primary:hover { transform:translateY(-1px); box-shadow:0 0 0 1px rgba(110,231,183,.8), 0 16px 48px -12px rgba(52,211,153,.85); }
.r15-primary svg { transition:transform .25s var(--ease); }
.r15-primary:hover svg { transform:translateX(3px); }
.r15-secondary { color:var(--ink); border:1px solid var(--line2); background:var(--glass); }
.r15-secondary:hover { border-color:rgba(110,231,183,.5); }

/* 请求卡片 */
.r15-term { margin-top:30px; max-width:470px; border-radius:14px; border:1px solid var(--line2); background:rgba(12,18,15,.72); backdrop-filter:blur(10px); overflow:hidden; }
.r15-term .bar { display:flex; align-items:center; gap:6px; height:34px; padding:0 14px; border-bottom:1px solid var(--line); font:12px var(--mono); color:var(--mut); }
.r15-term .bar i { width:9px; height:9px; border-radius:50%; background:rgba(255,255,255,.14); }
.r15-term .bar span { margin-left:8px; }
.r15-term pre { margin:0; padding:14px 16px 6px; font:13px/1.75 var(--mono); color:#9aa6a0; white-space:pre; overflow:hidden; }
.r15-term pre b { color:var(--ink); font-weight:500; }
.r15-term pre .s { color:var(--mint); }
.r15-term .m::after { content:""; display:inline-block; width:7px; height:1.05em; margin-left:2px; vertical-align:-2px; background:var(--mint); }
.r15.motion .r15-term .m::after { animation:r15-caret 1s steps(1) infinite; }
@keyframes r15-caret { 50% { opacity:0; } }
.r15-term .st { display:flex; align-items:center; gap:8px; padding:4px 16px 14px; font:12.5px var(--mono); color:var(--mut); transition:color .3s; }
.r15-term .st i { width:7px; height:7px; border-radius:50%; background:rgba(255,255,255,.2); transition:background-color .3s, box-shadow .3s; }
.r15-term .st.ok { color:#c9f7e2; }
.r15-term .st.ok i { background:var(--mint); box-shadow:0 0 10px var(--mint); }

/* 轨道调度图 */
.r15-orbit { position:relative; width:600px; aspect-ratio:1; justify-self:center; }
.r15-orbit svg { position:absolute; inset:0; width:100%; height:100%; overflow:visible; }
.r15-rings .ring { fill:none; stroke:rgba(255,255,255,.075); stroke-width:1; }
.r15-rings .ring.dash { stroke:rgba(110,231,183,.22); stroke-dasharray:2 9; }
.r15-rings .ring, .r15-rings .comet { transform-box:fill-box; transform-origin:center; }
.r15-rings .comet { fill:none; stroke:var(--mint); stroke-width:2.2; stroke-linecap:round; stroke-dasharray:9 91; filter:drop-shadow(0 0 6px rgba(110,231,183,.9)); }
.r15.motion .r15-rings .comet.c1 { animation:r15-spin 9s linear infinite; }
.r15.motion .r15-rings .comet.c2 { animation:r15-spin 15s linear infinite reverse; }
.r15.motion .r15-rings .comet.c3 { animation:r15-spin 21s linear infinite; }
.r15.motion .r15-rings .ring.dash { animation:r15-spin 90s linear infinite; }
@keyframes r15-spin { to { transform:rotate(360deg); } }
.r15-beams .ingress-base { fill:none; stroke:rgba(255,255,255,.1); stroke-width:1.2; stroke-dasharray:3 6; }
.r15-beams .ingress, .r15-beams .beam, .r15-beams .beam-glow { fill:none; stroke-dasharray:1 1; stroke-dashoffset:1; opacity:0; transition:opacity .35s; }
.r15-beams .ingress { stroke:var(--mint); stroke-width:1.8; }
.r15-beams .beam { stroke:#bbf7d0; stroke-width:2; stroke-linecap:round; }
.r15-beams .beam-glow { stroke:rgba(52,211,153,.35); stroke-width:9; stroke-linecap:round; filter:blur(4px); }
.r15-beams .on { opacity:1; }
.r15-beams .pk { fill:#f0fff8; filter:drop-shadow(0 0 6px #6ee7b7) drop-shadow(0 0 14px rgba(52,211,153,.8)); opacity:0; }
.r15-beams .pk-glow { fill:rgba(110,231,183,.22); opacity:0; }
.r15-aura { position:absolute; left:50%; top:50%; width:320px; height:320px; margin:-160px 0 0 -160px; border-radius:50%; background:radial-gradient(closest-side, rgba(52,211,153,.24), transparent); pointer-events:none; }
.r15.motion .r15-aura { animation:r15-breathe 6.4s ease-in-out infinite; }
@keyframes r15-breathe { 50% { transform:scale(1.18); opacity:.55; } }
.r15-core { position:absolute; left:50%; top:50%; z-index:2; width:116px; height:116px; margin:-58px 0 0 -58px; border-radius:50%; display:grid; place-items:center;
  background:radial-gradient(circle at 35% 28%, #1d2e26, #08100c 72%); border:1px solid rgba(110,231,183,.38);
  box-shadow:0 0 0 10px rgba(110,231,183,.035), 0 0 64px rgba(52,211,153,.28), inset 0 1px 0 rgba(255,255,255,.1); transition:box-shadow .4s, border-color .4s; }
.r15-core img { width:46px; height:46px; }
.r15-core::before, .r15-core::after { content:""; position:absolute; inset:-1px; border-radius:50%; border:1px solid rgba(110,231,183,.55); opacity:0; pointer-events:none; }
.r15.motion .r15-core::before { animation:r15-ripple 3.2s var(--ease) infinite; }
.r15.motion .r15-core::after { animation:r15-ripple 3.2s var(--ease) 1.6s infinite; }
@keyframes r15-ripple { 0% { transform:scale(1); opacity:.7; } 100% { transform:scale(2.5); opacity:0; } }
.r15-core.hit { border-color:var(--mint); box-shadow:0 0 0 10px rgba(110,231,183,.09), 0 0 110px rgba(52,211,153,.6), inset 0 1px 0 rgba(255,255,255,.14); }
.r15-core-label { position:absolute; left:50%; top:calc(50% + 72px); z-index:2; transform:translateX(-50%); text-align:center; white-space:nowrap; }
.r15-core-label b { display:block; font-size:14px; font-weight:650; }
.r15-core-label small { font:11.5px var(--mono); color:var(--mut); }
.r15-node { position:absolute; left:0; top:0; z-index:3; display:flex; align-items:center; gap:8px; height:40px; padding:0 14px 0 10px; border-radius:999px; background:rgba(13,19,16,.82);
  border:1px solid var(--line2); backdrop-filter:blur(8px); font-size:14px; font-weight:650; white-space:nowrap; color:var(--ink); transition:border-color .3s, background-color .3s, box-shadow .3s; will-change:transform; }
.r15-node > svg { width:18px; height:18px; flex:none; color:var(--ink); }
.r15-node .mono { display:grid; place-items:center; width:18px; height:18px; border-radius:5px; background:rgba(255,255,255,.14); font-size:11px; font-weight:750; }
.r15-node .x { display:inline-flex; align-items:baseline; gap:8px; max-width:0; overflow:hidden; opacity:0; transition:max-width .55s var(--ease), opacity .35s; }
.r15-node .x code { font:12px var(--mono); color:#a7f3d0; font-weight:500; }
.r15-node .x em { font-style:normal; font-size:13px; color:#f0fff8; font-variant-numeric:tabular-nums; }
.r15-node .x s { font-size:11px; color:var(--mut); }
.r15-node.on { border-color:var(--mint); background:rgba(14,38,28,.92); box-shadow:0 0 0 4px rgba(110,231,183,.08), 0 0 34px rgba(52,211,153,.4); }
.r15-node.on .x { max-width:300px; opacity:1; }

/* 数字 + 模型跑马灯 */
.r15-band { position:relative; z-index:1; padding:8px 0 0; }
.r15-stats { display:flex; justify-content:center; gap:96px; margin:0 auto 34px; padding:0; list-style:none; }
.r15-stats li { display:grid; justify-items:center; gap:4px; }
.r15-stats b { font-size:44px; font-weight:700; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.r15-stats span { font-size:14px; color:var(--mut); }
.r15-marquee { display:grid; gap:12px; padding:26px 0; border-block:1px solid var(--line); overflow:hidden; -webkit-mask-image:linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image:linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
.r15-marquee .row { display:flex; overflow:hidden; }
.r15-marquee .track { display:flex; flex:none; gap:12px; padding-right:12px; }
.r15.motion .r15-marquee .track { animation:r15-marq 44s linear infinite; }
.r15.motion .r15-marquee .rev .track { animation-direction:reverse; animation-duration:52s; }
@keyframes r15-marq { to { transform:translateX(-50%); } }
.r15-pill { display:inline-flex; align-items:center; gap:9px; height:42px; padding:0 18px 0 14px; border-radius:999px; border:1px solid var(--line); background:var(--glass); font:13px var(--mono); color:#c9d4ce; white-space:nowrap; }
.r15-pill svg { width:16px; height:16px; color:var(--ink); }
.r15-pill i { width:6px; height:6px; border-radius:50%; background:var(--mint2); }

/* 通用区块 */
.r15-sec { position:relative; z-index:1; max-width:1240px; margin:0 auto; padding:120px 40px 0; }
.r15-sec-head { display:flex; justify-content:space-between; align-items:flex-end; gap:40px; margin-bottom:34px; }
.r15 h2 { margin:0; font-size:40px; line-height:1.18; letter-spacing:-.025em; font-weight:720; color:var(--ink); }
.r15-sec-head p { margin:0; max-width:32em; font-size:15px; line-height:1.65; color:var(--mut); text-align:right; }

/* 价格 */
.r15-prices { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:14px; margin:0; padding:0; list-style:none; }
.r15-prices li { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:18px 20px; padding:24px 26px; border-radius:16px; border:1px solid var(--line); background:var(--glass); }
.r15-pm { display:flex; align-items:center; gap:12px; }
.r15-pm > svg, .r15-pm > .mono { width:24px; height:24px; flex:none; color:var(--ink); }
.r15-pm .mono { display:grid; place-items:center; border-radius:6px; background:rgba(255,255,255,.14); font-size:13px; font-weight:750; }
.r15-pm strong { display:block; font:600 15px var(--mono); }
.r15-pm small { font-size:12px; color:var(--mut); }
.r15-ratio { align-self:center; font-size:34px; font-weight:750; letter-spacing:-.02em; font-variant-numeric:tabular-nums; transition:opacity .45s, transform .6s var(--ease); }
.r15-bars { grid-column:1/-1; display:grid; gap:10px; }
.r15-bar { display:grid; grid-template-columns:minmax(0,1fr) 120px; align-items:center; gap:16px; font-size:13px; font-variant-numeric:tabular-nums; color:var(--mut); }
.r15-bar i { display:block; height:8px; border-radius:4px; background:rgba(255,255,255,.12); transform-origin:left center; }
.r15-bar.a i { background:linear-gradient(90deg, #34d399, #a7f3d0); box-shadow:0 0 16px rgba(52,211,153,.55); transform:scaleX(var(--r)); }
.r15-bar.a span { color:var(--ink); font-weight:650; }
.r15-bar em { font-style:normal; }

/* 功能入口：光斑跟随鼠标 */
.r15-feat { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:14px; margin:0; padding:0; list-style:none; }
.r15-feat a { position:relative; display:grid; gap:8px; min-height:132px; padding:26px; border-radius:16px; border:1px solid var(--line); background:var(--glass); color:var(--ink); text-decoration:none; overflow:hidden; transition:border-color .3s, transform .35s var(--ease); }
.r15-feat a::before { content:""; position:absolute; inset:0; background:radial-gradient(280px circle at var(--mx, 50%) var(--my, 50%), rgba(110,231,183,.16), transparent 62%); opacity:0; transition:opacity .3s; pointer-events:none; }
.r15-feat a:hover { border-color:rgba(110,231,183,.4); transform:translateY(-3px); }
.r15-feat a:hover::before { opacity:1; }
.r15-feat strong { position:relative; font-size:17px; font-weight:650; }
.r15-feat span { position:relative; font-size:14px; line-height:1.6; color:var(--mut); }
.r15-feat svg { position:absolute; right:24px; top:28px; width:18px; height:18px; color:var(--mint); transition:transform .3s var(--ease); }
.r15-feat a:hover svg { transform:translateX(4px); }

/* 收尾 CTA */
.r15-cta { position:relative; z-index:1; max-width:1160px; margin:120px auto 96px; padding:64px 40px; border-radius:24px; border:1px solid rgba(110,231,183,.22); text-align:center; overflow:hidden;
  background:radial-gradient(600px 260px at 50% 0%, rgba(52,211,153,.2), transparent 70%), rgba(255,255,255,.02); }
.r15-cta h2 { font-size:44px; }
.r15-cta p { margin:16px auto 0; max-width:30em; font-size:16px; line-height:1.6; color:var(--mut); }
.r15-cta .r15-actions { justify-content:center; }
.r15-cta::after { content:""; position:absolute; top:-1px; left:-30%; width:30%; height:1px; background:linear-gradient(90deg, transparent, var(--mint), transparent); }
.r15.motion .r15-cta::after { animation:r15-line 5s var(--ease) infinite; }
@keyframes r15-line { to { left:130%; } }

/* 入场与滚动显现（只有 .motion 时隐藏初始状态，脚本失败内容照常可见） */
.r15.motion .r15-in { animation:r15-up .9s var(--ease) backwards; animation-delay:calc(var(--d, 0) * 100ms + .1s); }
@keyframes r15-up { from { opacity:0; transform:translateY(26px); filter:blur(8px); } }
.r15.motion .r15-core { animation:r15-pop 1s var(--ease) backwards .35s; }
@keyframes r15-pop { from { opacity:0; transform:scale(.55); } }
.r15.motion .r15-node { animation:r15-fade .9s var(--ease) backwards; animation-delay:calc(.7s + var(--d, 0) * 90ms); }
@keyframes r15-fade { from { opacity:0; filter:blur(10px); } }
.r15.motion .r15-rings .ring:not(.dash) { stroke-dasharray:1 1; stroke-dashoffset:1; animation:r15-draw 1.6s var(--ease) forwards; animation-delay:calc(.2s + var(--d, 0) * 160ms); }
@keyframes r15-draw { to { stroke-dashoffset:0; } }
.r15.motion .r15-rv { opacity:0; transform:translateY(28px); transition:opacity .8s var(--ease), transform .9s var(--ease); transition-delay:calc(var(--d, 0) * 80ms); }
.r15.motion .r15-rv.seen { opacity:1; transform:none; }
.r15.motion .r15-price:not(.go) .r15-bar i { transform:scaleX(0); }
.r15.motion .r15-price.go:not(.cut) .r15-bar.a i { transform:scaleX(1); }
.r15.motion .r15-bar i { transition:transform 1.1s var(--ease); transition-delay:calc(var(--d, 0) * 110ms); }
.r15.motion .r15-price:not(.cut) .r15-ratio { opacity:0; transform:translateY(10px) scale(.9); }
@media (prefers-reduced-motion: reduce) { .r15 *, .r15 *::before, .r15 *::after { animation:none !important; transition:none !important; } }

/* 手机 */
@media (max-width: 767px) {
  .r15-sky { height:1200px; }
  .r15-hero { grid-template-columns:minmax(0,1fr); gap:28px; padding:20px 20px 40px; }
  .r15 h1 { font-size:42px; }
  .r15-lead { font-size:16px; }
  .r15-actions a { flex:1; justify-content:center; height:48px; }
  .r15-term { max-width:none; }
  .r15-term pre { font-size:11.5px; }
  .r15-orbit { width:100%; max-width:360px; }
  .r15-core { width:84px; height:84px; margin:-42px 0 0 -42px; }
  .r15-core img { width:34px; height:34px; }
  .r15-core-label { top:calc(50% + 52px); }
  .r15-aura { width:220px; height:220px; margin:-110px 0 0 -110px; }
  .r15-node { height:34px; padding:0 11px 0 8px; font-size:12.5px; gap:6px; }
  .r15-node > svg { width:15px; height:15px; }
  .r15-node .x code { display:none; }
  .r15-stats { gap:0; justify-content:space-around; padding:0 12px; }
  .r15-stats b { font-size:30px; }
  .r15-stats span { font-size:12.5px; }
  .r15-sec { padding:80px 20px 0; }
  .r15-sec-head { display:block; }
  .r15-sec-head p { text-align:left; margin-top:10px; }
  .r15 h2 { font-size:28px; }
  .r15-prices, .r15-feat { grid-template-columns:minmax(0,1fr); }
  .r15-prices li { padding:18px; }
  .r15-ratio { font-size:26px; }
  .r15-cta { margin:80px 16px 64px; padding:44px 20px; }
  .r15-cta h2 { font-size:30px; }
}

/* 发布版：原首页内容隐藏（脚本出错时不加 .r15，原首页照常显示）；跑马灯用两段相同轨道无缝循环 */
.xinai-home.r15 > .xinai-home-main { display:none !important; }
.r15-sr { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.r15.motion .r15-marquee .track { animation-name:r15-marq2; }
@keyframes r15-marq2 { to { transform:translateX(-100%); } }
