:root{
  --bg:#0a0a0b;--fg:#f4f1ea;--muted:#a8a29e;--line:rgba(244,241,234,.12);
  --accent:#c4a574;--sky:#7ea0c4;--card:rgba(244,241,234,.04);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;color:var(--fg);background:var(--bg);
  font-family:"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background-image:
    radial-gradient(1100px 700px at 80% -10%, rgba(196,165,116,.14), transparent 55%),
    radial-gradient(900px 600px at -10% 40%, rgba(126,160,196,.12), transparent 50%);
}
a{color:inherit;text-decoration:none}
.wrap{width:min(1120px,92vw);margin:0 auto}
.topnav{
  position:sticky;top:0;z-index:40;backdrop-filter:blur(14px);
  background:rgba(10,10,11,.72);border-bottom:1px solid var(--line);
}
.topnav .inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 0}
.brand{font-weight:650;letter-spacing:.04em}
.navlinks{display:flex;gap:1rem;flex-wrap:wrap;color:var(--muted);font-size:.95rem}
.navlinks a:hover{color:var(--fg)}
.hero-stage{position:relative;min-height:92vh;overflow:hidden}
.hero-copy{
  position:relative;z-index:3;min-height:92vh;display:flex;flex-direction:column;justify-content:center;
  padding:clamp(2rem,7vw,5rem) 0;max-width:38rem;
}
.hero-copy h1{font-size:clamp(2.8rem,8vw,5.4rem);line-height:1.02;margin:0 0 1rem;font-weight:650}
.hero-copy p{margin:0 0 1.6rem;color:var(--muted);font-size:clamp(1rem,2.2vw,1.2rem);line-height:1.65}
.cta{
  display:inline-flex;align-items:center;justify-content:center;
  border:1px solid rgba(244,241,234,.28);background:rgba(244,241,234,.06);
  padding:.85rem 1.35rem;border-radius:999px;width:fit-content;
}
.cta:hover{border-color:var(--accent);background:rgba(196,165,116,.16)}
#source{position:absolute;inset:0;width:100%;height:100%;z-index:1}
#source.is-texture-only{opacity:0;pointer-events:none}
#source[data-hidden="true"],#fallback[data-hidden="true"]{display:none}
#fallback{position:relative;min-height:92vh;z-index:0}
#fallback.is-capture-live .hero-copy{z-index:0}
#output{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:2;transition:opacity .25s ease;background:transparent}
#objectCanvas{position:absolute;inset:0;width:100%;height:100%;z-index:2}
.section{padding:4.5rem 0 2rem}
.section h2{margin:0 0 .4rem;font-size:clamp(1.6rem,3vw,2.2rem)}
.section .lead{margin:0 0 1.6rem;color:var(--muted);max-width:36rem;line-height:1.6}
.grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;
}
.card{
  border:1px solid var(--line);background:var(--card);border-radius:18px;padding:1.1rem 1.15rem;
  min-height:150px;display:flex;flex-direction:column;gap:.55rem;transition:border-color .2s ease, transform .2s ease;
}
.card:hover{border-color:rgba(196,165,116,.45);transform:translateY(-2px)}
.card b{font-size:1.05rem}
.card span{color:var(--muted);font-size:.92rem;line-height:1.5;flex:1}
.card em{font-style:normal;color:var(--accent);font-size:.78rem;letter-spacing:.04em}
.footer{padding:3rem 0 4rem;color:var(--muted);border-top:1px solid var(--line);margin-top:2rem;font-size:.9rem}
.badge{
  position:fixed;right:1rem;bottom:1rem;z-index:50;font-size:.75rem;color:var(--muted);
  background:rgba(10,10,11,.75);border:1px solid var(--line);padding:.4rem .65rem;border-radius:8px;
}
.effect-page .hero-stage{min-height:100vh;background:#0d121c}
.effect-page .hero-copy,.effect-page #fallback{min-height:100vh}
/* Polyfill: content is #fallback. If pointer-events:none, only .cta/.back receive
   events — so glass/bubble/magnify look “dead” until hovering 返回目录. */
.effect-page #fallback{position:relative;z-index:1;pointer-events:none}
.effect-page #fallback.is-capture-live{
  pointer-events:auto;
  height:100vh;
  max-height:100vh;
  overflow-x:hidden;
  overflow-y:auto;
  overscroll-behavior:contain;
}
.effect-page #fallback .back,
.effect-page #fallback .cta{pointer-events:auto}
.effect-page .scroll-demo-spacer{
  height:130vh;width:100%;pointer-events:none;visibility:hidden;
}
.back{color:var(--muted);margin-bottom:1.2rem;display:inline-block}
.back:hover{color:var(--fg)}
.under-layer{
  position:absolute;inset:0;z-index:0;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1a1510,#0d1a22);color:var(--fg);font-size:clamp(1.4rem,3vw,2rem);
}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  #output,#source,#objectCanvas{display:none!important}
  #fallback{display:block!important}
  .card{transition:none}
}
