/* ============================================================
   ZHANG RENXU · 个人官网
   Hallmark · macrostructure: Scroll-World (3D corridor, ref joseph-san.com, light adaptation)
   theme: custom light — paper warm bone · ink near-black warm · accent terracotta
   fingerprint: pinned scroll-driven 3D corridor · giant serif display · mono EN kickers ·
                alternating work cards with big index numerals · one accent word per headline
   ============================================================ */
:root{
  --paper:      #f4f1ea;
  --paper-2:    #ece6d9;
  --paper-3:    #e6dfd0;
  --ink:        #1b1712;
  --ink-2:      #4c463a;
  --muted:      #8a8272;
  --line:       rgba(27,23,18,.14);
  --line-soft:  rgba(27,23,18,.08);
  --accent:     #b3561f;
  --accent-soft:#e9d8c6;
  --sage:       #8a9b6f;
  --font-display: 'Noto Serif SC','Songti SC','STSong','SimSun',serif;
  --font-body:    'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
  --font-en:      'Space Grotesk','Noto Sans SC',sans-serif;
  --ease: cubic-bezier(.22,.61,.21,1);
  --nav-h: 64px;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:auto}
html,body{height:100%}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-body);
  font-weight:400;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
::selection{background:var(--accent);color:#fff}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
.en{font-family:var(--font-en)}
em{font-style:normal}

/* ---------- 加载屏 ---------- */
#loader{
  position:fixed;inset:0;z-index:200;background:var(--paper);
  display:flex;align-items:center;justify-content:center;
  transition:opacity .8s var(--ease),visibility .8s;
}
#loader.done{opacity:0;visibility:hidden}
.loader-inner{text-align:center;width:min(420px,80vw)}
.loader-name{
  font-family:var(--font-en);font-size:clamp(20px,3vw,30px);
  letter-spacing:.34em;font-weight:500;color:var(--ink);
}
.loader-sub{margin-top:10px;font-size:13px;letter-spacing:.42em;color:var(--muted)}
.loader-bar{
  margin:26px auto 10px;height:1px;background:var(--line);position:relative;overflow:hidden;
}
.loader-bar i{
  position:absolute;left:0;top:0;bottom:0;width:0%;
  background:var(--accent);transition:width .3s ease;
}
.loader-pct{font-family:var(--font-en);font-size:12px;letter-spacing:.3em;color:var(--muted)}

/* ---------- 导航 ---------- */
#nav{
  position:fixed;top:0;left:0;right:0;z-index:120;height:var(--nav-h);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 clamp(20px,4vw,56px);
  mix-blend-mode:normal;
  pointer-events:none;
}
#nav > *{pointer-events:auto}
.nav-brand{display:flex;align-items:baseline;gap:12px}
.nav-brand-en{font-family:var(--font-en);font-size:14px;font-weight:600;letter-spacing:.22em;color:var(--ink)}
.nav-brand-cn{font-size:13px;letter-spacing:.2em;color:var(--muted)}
.nav-links{display:flex;gap:clamp(18px,3vw,40px)}
.nav-links a{
  position:relative;font-size:13px;letter-spacing:.18em;color:var(--ink-2);
  padding:6px 0;transition:color .3s;
}
.nav-links a::after{
  content:attr(data-hover);position:absolute;left:0;top:0;width:100%;
  color:var(--accent);transform:translateY(105%);opacity:0;
  transition:transform .35s var(--ease),opacity .35s;
}
.nav-links a:hover{color:transparent}
.nav-links a:hover::after{transform:translateY(0);opacity:1}
.nav-progress{display:flex;align-items:center;gap:10px;font-family:var(--font-en);font-size:11px;letter-spacing:.2em;color:var(--muted)}
.nav-progress i{width:56px;height:1px;background:var(--line);position:relative;display:inline-block}
.nav-progress i::after{content:'';position:absolute;left:0;top:0;bottom:0;background:var(--accent);width:0%}

/* ---------- 舞台与画布 ---------- */
#stage{position:fixed;inset:0;z-index:0;pointer-events:none}
#scene{position:absolute;inset:0;width:100%;height:100%;display:block;background:var(--paper)}
#overlay{position:relative;z-index:10;pointer-events:none}
.screen{height:100vh;position:relative;display:flex;align-items:center;pointer-events:none}
.screen > *{pointer-events:auto}

/* ---------- Hero ---------- */
.hero{align-items:center;justify-content:center;text-align:left}
.hero-ghost{
  position:absolute;right:-1%;bottom:-2%;z-index:-1;
  font-family:var(--font-en);font-weight:700;line-height:.82;
  font-size:clamp(90px,19vw,320px);letter-spacing:-.02em;
  color:transparent;-webkit-text-stroke:1px var(--line);
  user-select:none;pointer-events:none;
}
.hero-copy{position:relative;width:min(1080px,86vw);padding-top:var(--nav-h)}
.kicker{
  display:flex;align-items:center;gap:14px;
  font-family:var(--font-en);font-size:11px;letter-spacing:.34em;
  color:var(--muted);text-transform:uppercase;
}
.kicker::before{content:'';width:34px;height:1px;background:var(--accent)}
.hero-title{
  font-family:var(--font-display);font-weight:900;
  font-size:clamp(56px,11.5vw,168px);line-height:.98;letter-spacing:.01em;
  margin:26px 0 30px;
}
.hero-title .hero-line{display:block}
.hero-title em{
  color:var(--accent);position:relative;white-space:nowrap;
}
.hero-sub{font-size:clamp(14px,1.6vw,18px);letter-spacing:.12em;color:var(--ink-2);line-height:1.9}
.hero-cta{
  display:inline-block;margin-top:44px;
  font-size:12px;letter-spacing:.24em;color:var(--ink);
  padding-bottom:6px;border-bottom:1px solid var(--ink);
  transition:color .3s,border-color .3s;
}
.hero-cta:hover{color:var(--accent);border-color:var(--accent)}

/* ---------- Intro ---------- */
.intro{justify-content:flex-start}
.intro-inner{width:min(1120px,86vw);margin:0 auto}
.intro-statement{
  font-family:var(--font-display);font-weight:600;
  font-size:clamp(24px,4vw,52px);line-height:1.42;letter-spacing:.02em;
  max-width:22em;margin:28px 0 40px;
}
.intro-statement em{color:var(--accent)}
.intro-chips{display:flex;flex-wrap:wrap;gap:10px}
.intro-chips span{
  font-size:12px;letter-spacing:.14em;color:var(--ink-2);
  border:1px solid var(--line);border-radius:999px;padding:9px 18px;
  background:rgba(255,255,255,.35);
}

/* ---------- Works 走廊 ---------- */
.works-intro{justify-content:flex-start}
.works-intro-inner{width:min(1120px,86vw);margin:0 auto}
.works-title{
  font-family:var(--font-display);font-weight:900;
  font-size:clamp(48px,9vw,132px);line-height:1;margin:24px 0 26px;
}
.works-sub{font-size:clamp(14px,1.6vw,17px);line-height:1.9;color:var(--ink-2);letter-spacing:.06em}

#worksRail{position:relative}
.work{height:100vh;position:relative;display:flex;align-items:center}
.work-wrap{width:min(1180px,90vw);margin:0 auto;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(28px,5vw,80px);align-items:center}
.work--rev .work-wrap{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr)}
.work--rev .work-media{order:2}
.work--rev .work-info{order:1}
.work-media{position:relative;perspective:1200px}
.work-frame{
  position:relative;overflow:hidden;background:transparent;border:0;box-shadow:none;
  aspect-ratio:4/5;
}
.work--wide .work-frame{aspect-ratio:1/1}
.work-frame img{width:100%;height:100%;object-fit:cover;transform:scale(1.01);display:none}
.work-frame::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  box-shadow:inset 0 0 0 1px rgba(27,23,18,.05);
}
.work--txtcard .work-frame{
  aspect-ratio:4/5;background:var(--ink);display:flex;align-items:center;justify-content:center;
}
.no-3d .work-frame{background:var(--paper-2);border:1px solid var(--line);box-shadow:0 30px 60px -30px rgba(27,23,18,.28)}
.no-3d .work-frame img{display:block}
.work--txtcard .txtcard-inner{text-align:center;padding:10%}
.work--txtcard .txtcard-brand{
  font-family:var(--font-display);color:var(--paper);font-weight:900;
  font-size:clamp(26px,3.4vw,52px);line-height:1.2;letter-spacing:.04em;
}
.work--txtcard .txtcard-line{width:44px;height:1px;background:var(--accent);margin:26px auto}
.work--txtcard .txtcard-nums{
  font-family:var(--font-en);color:var(--muted);font-size:12px;letter-spacing:.3em;line-height:2;
}
.work-index{
  position:absolute;top:-34px;left:-14px;z-index:2;
  font-family:var(--font-en);font-weight:700;font-size:clamp(64px,9vw,120px);line-height:1;
  color:transparent;-webkit-text-stroke:1px rgba(27,23,18,.35);
  user-select:none;
}
.work--rev .work-index{left:auto;right:-14px}
.work-info{position:relative}
.work-tag{font-size:11px;letter-spacing:.3em;color:var(--accent);text-transform:uppercase}
.work-title{
  font-family:var(--font-display);font-weight:900;
  font-size:clamp(30px,4.4vw,62px);line-height:1.12;margin:16px 0 6px;
}
.work-sub{font-family:var(--font-en);font-size:12px;letter-spacing:.26em;color:var(--muted);text-transform:uppercase;margin-bottom:18px}
.work-desc{font-size:clamp(13px,1.4vw,15px);line-height:2;color:var(--ink-2);max-width:34em}
.work-tags{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 26px}
.work-tags span{font-size:11px;letter-spacing:.12em;color:var(--ink-2);border:1px solid var(--line);border-radius:999px;padding:6px 14px;background:rgba(255,255,255,.35)}
.work-btn{
  display:inline-flex;align-items:center;gap:10px;cursor:pointer;
  font-size:12px;letter-spacing:.22em;color:var(--ink);
  padding:12px 0;border-bottom:1px solid var(--ink);background:none;border-top:none;border-left:none;border-right:none;
  transition:color .3s,border-color .3s;
}
.work-btn:hover{color:var(--accent);border-color:var(--accent)}
.work--rev .work-media{grid-column:2}
.work--rev .work-info{grid-column:1}

/* ---------- Skills ---------- */
.skills{justify-content:flex-start}
.skills-inner{width:min(1120px,86vw);margin:0 auto}
.sec-title{
  font-family:var(--font-display);font-weight:900;
  font-size:clamp(48px,8vw,112px);line-height:1;margin:24px 0 52px;
}
.skill-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(20px,3vw,44px)}
.skill-col h3{
  font-family:var(--font-display);font-weight:600;font-size:clamp(17px,1.7vw,22px);
  padding-bottom:14px;margin-bottom:18px;border-bottom:1px solid var(--ink);
}
.skill-col ul{list-style:none}
.skill-col li{
  font-size:clamp(13px,1.3vw,15px);color:var(--ink-2);line-height:2.1;
  padding-left:18px;position:relative;
}
.skill-col li::before{content:'';position:absolute;left:0;top:1.05em;width:6px;height:6px;border:1px solid var(--accent);transform:rotate(45deg)}

/* ---------- About ---------- */
.about{justify-content:flex-start}
.about-inner{width:min(1120px,86vw);margin:0 auto}
.about-grid{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--ink)}
.about-cell{padding:clamp(22px,3vw,40px) clamp(20px,3vw,44px);border-bottom:1px solid var(--line);position:relative}
.about-cell:nth-child(odd){border-right:1px solid var(--line)}
.about-cell h3{font-family:var(--font-en);font-size:11px;letter-spacing:.3em;color:var(--muted);text-transform:uppercase;margin-bottom:16px}
.about-cell p{font-size:clamp(14px,1.5vw,17px);line-height:1.9;color:var(--ink-2)}
.about-cell p span{color:var(--muted);font-size:.92em}
.about-cell.awards ul{list-style:none}
.about-cell.awards li{
  font-size:clamp(13px,1.35vw,15px);line-height:1.8;color:var(--ink-2);
  padding-left:16px;position:relative;
}
.about-cell.awards li::before{content:'·';position:absolute;left:0;color:var(--accent);font-weight:700}

/* ---------- Contact ---------- */
.contact{justify-content:flex-start}
.contact-inner{width:min(1120px,86vw);margin:0 auto}
.contact-title{
  font-family:var(--font-display);font-weight:900;
  font-size:clamp(44px,8.6vw,124px);line-height:1.22;margin:26px 0 44px;
}
.contact-title em{color:var(--accent)}
.contact-mail{
  display:inline-block;font-size:clamp(18px,2.6vw,34px);letter-spacing:.06em;
  color:var(--ink);border-bottom:1px solid var(--ink);padding-bottom:8px;
  transition:color .3s,border-color .3s;
}
.contact-mail:hover{color:var(--accent);border-color:var(--accent)}
.contact-note{margin-top:26px;font-size:13px;letter-spacing:.14em;color:var(--muted)}

/* ---------- Footer ---------- */
#footer{
  position:relative;z-index:10;
  display:flex;justify-content:space-between;align-items:center;gap:8px 24px;flex-wrap:wrap;
  padding:18px clamp(20px,4vw,56px);
  border-top:1px solid var(--line);
  font-size:10px;letter-spacing:.2em;color:var(--muted);
}
.footer-meta{display:flex;justify-content:space-between;align-items:center;gap:8px 24px;flex-wrap:wrap;flex:1;min-width:200px}
.footer-meta span:first-child{white-space:nowrap}

/* ---------- 灯箱 ---------- */
#lightbox{
  position:fixed;inset:0;z-index:300;background:rgba(244,241,234,.96);
  backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;
  padding:clamp(16px,4vw,64px);
}
#lightbox[hidden]{display:none}
.lb-stage{
  width:min(1080px,94vw);max-height:88vh;display:flex;flex-direction:column;
  background:var(--paper);border:1px solid var(--line);
  box-shadow:0 40px 90px -40px rgba(27,23,18,.4);
  animation:lbIn .5s var(--ease);
}
@keyframes lbIn{from{opacity:0;transform:translateY(20px) scale(.98)}to{opacity:1;transform:none}}
.lb-imgwrap{
  flex:1;min-height:0;overflow:auto;background:var(--paper-2);
  display:flex;align-items:center;justify-content:center;padding:24px;
}
.lb-imgwrap img{max-width:100%;max-height:62vh;object-fit:contain;box-shadow:0 20px 50px -24px rgba(27,23,18,.4)}
.lb-meta{padding:20px 26px 22px;border-top:1px solid var(--line)}
.lb-title{font-family:var(--font-display);font-weight:900;font-size:clamp(18px,2.4vw,26px);margin-bottom:6px}
.lb-desc{font-size:13px;line-height:1.8;color:var(--ink-2);max-width:52em}
.lb-thumbs{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap}
.lb-thumbs button{
  width:64px;height:64px;padding:0;border:1px solid var(--line);background:var(--paper-2);
  overflow:hidden;cursor:pointer;opacity:.6;transition:opacity .3s,transform .3s;
}
.lb-thumbs button img{width:100%;height:100%;object-fit:cover}
.lb-thumbs button.on{opacity:1;border-color:var(--accent);transform:translateY(-2px)}
.lb-close,.lb-prev,.lb-next{
  position:fixed;z-index:301;border:1px solid var(--line);background:var(--paper);
  color:var(--ink);font-size:20px;cursor:pointer;width:46px;height:46px;
  display:flex;align-items:center;justify-content:center;transition:all .3s;
}
.lb-close:hover,.lb-prev:hover,.lb-next:hover{background:var(--ink);color:var(--paper)}
.lb-close{top:20px;right:20px}
.lb-prev{left:20px;top:50%;transform:translateY(-50%)}
.lb-next{right:20px;top:50%;transform:translateY(-50%)}

/* ---------- 入场动画（JS 挂载 .is-in） ---------- */
[data-reveal]{opacity:0;transform:translateY(28px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
[data-reveal].is-in{opacity:1;transform:none}

/* ---------- 响应式 ---------- */
@media (max-width:960px){
  .work-wrap,.work--rev .work-wrap{grid-template-columns:1fr;gap:22px}
  .work--rev .work-media{order:1}
  .work--rev .work-info{order:2}
  .work{height:auto;min-height:100vh;padding:90px 0 60px}
  .work-frame{aspect-ratio:4/5}
  .work-index{top:-26px;left:0}
  .work--rev .work-index{left:0;right:auto}
  .skill-cols{grid-template-columns:repeat(2,1fr)}
  .about-grid{grid-template-columns:1fr}
  .about-cell:nth-child(odd){border-right:none}
  .nav-links{display:none}
  .nav-progress{display:none}
  .hero-ghost{font-size:34vw}
  .work-media{perspective:none}
}
@media (max-width:560px){
  .skill-cols{grid-template-columns:1fr}
  .hero-title{font-size:clamp(44px,13vw,72px)}
}
/* 移动端：最后三个板块 → 自然高度 + 顶部避开固定导航，防止标题被遮挡/内容被裁切 */
@media (max-width:760px){
  .skills,.about,.contact{
    height:auto;min-height:100vh;
    align-items:flex-start;
    padding:calc(var(--nav-h) + 30px) 0 72px;
  }
  .skills-inner,.about-inner,.contact-inner{
    padding:clamp(24px,6vw,40px) clamp(20px,5vw,44px);
  }
  .sec-title{margin:16px 0 32px}
  .contact-title{margin:18px 0 34px}
  .about-cell{padding:clamp(20px,5vw,32px) clamp(16px,4vw,28px)}
  .about-cell.awards li{line-height:1.75}
  .contact-mail{word-break:break-all}
  #footer{padding:24px clamp(16px,4vw,28px) 20px}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;transition-duration:.01ms!important}
}

/* ============================================================
   完整作品画廊（每个作品的全部素材，一张不丢）
   ============================================================ */
.gallery{position:relative;padding:13vh 0 12vh;border-top:1px solid var(--line-soft)}
.gallery-inner{width:min(1280px,90vw);margin:0 auto}
.gallery-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:8px;padding-bottom:26px;border-bottom:1px solid var(--ink)}
.gallery-head .kicker{margin-bottom:14px}
.g-title{font-family:var(--font-display);font-weight:900;font-size:clamp(26px,3.4vw,46px);line-height:1.1}
.g-count{font-size:11px;letter-spacing:.26em;color:var(--muted);padding-bottom:6px}
.gallery-grid{display:flex;flex-wrap:wrap;gap:20px;margin-top:30px}
.gallery-grid figure{
  width:calc(33.333% - 14px);margin:0;cursor:zoom-in;position:relative;overflow:hidden;
  background:var(--paper-2);border:1px solid var(--line);
  transform:translateZ(0);
}
.gallery-grid .gallery-video{width:calc(33.333% - 14px)}
.gallery-grid figure img{width:100%;display:block;transition:transform .7s var(--ease)}
.gallery-grid figure:hover img{transform:scale(1.035)}
.gallery-grid figure::after{content:'';position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(27,23,18,.05);pointer-events:none}
.gallery-grid figcaption{
  position:absolute;left:0;right:0;bottom:0;padding:26px 12px 10px;
  font-family:var(--font-en);font-size:11px;letter-spacing:.18em;color:#fff;
  background:linear-gradient(transparent,rgba(20,16,10,.55));
  opacity:0;transform:translateY(6px);transition:opacity .4s,transform .4s;
}
.gallery-grid figure:hover figcaption{opacity:1;transform:none}
/* 视频素材 */
.gallery-grid .gallery-video{cursor:default;background:#17130e}
.gallery-grid .gallery-video video{width:100%;display:block;aspect-ratio:16/9;object-fit:cover;background:#000}
.gallery-grid .gallery-video:hover video{transform:none}
.gallery-grid .gallery-video figcaption{opacity:1;transform:none}
@media (max-width:960px){.gallery-grid{gap:14px}.gallery-grid figure,.gallery-grid .gallery-video{width:calc(50% - 7px)}}
@media (max-width:560px){.gallery-grid figure,.gallery-grid .gallery-video{width:100%}}

/* 灯箱计数 */
.lb-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap}
.lb-count{font-size:11px;letter-spacing:.3em;color:var(--muted)}

/* ============================================================
   主题模块系统：一个作品一个模块，背景色随作品切换 + 专属开场动画
   ============================================================ */
:root{
  --mod-mengniu:#f7f2e9; --mod-shengye:#f3e6cf; --mod-shisui:#f2e7c8;
  --mod-aurora:#141c2e;  --mod-lumora:#f7ecd9; --mod-texia:#f4e9dc;
  --mod-vess:#edf1ef;    --mod-vela:#e7e8ec;   --mod-mora:#e3edf0;
  --mod-forge:#0f1316;   --mod-comic:#f8efd6;  --mod-hand:#f4f0e5;
  --mod-aivideo:#141419;
}
.module{position:relative;overflow:hidden;background:var(--paper);pointer-events:auto}
.module[data-theme=mengniu]{background:var(--mod-mengniu)}
.module[data-theme=shengye]{background:var(--mod-shengye)}
.module[data-theme=shisui]{background:var(--mod-shisui)}
.module[data-theme=aurora]{background:var(--mod-aurora)}
.module[data-theme=lumora]{background:var(--mod-lumora)}
.module[data-theme=texia]{background:var(--mod-texia)}
.module[data-theme=vess]{background:var(--mod-vess)}
.module[data-theme=vela]{background:var(--mod-vela)}
.module[data-theme=mora]{background:var(--mod-mora)}
.module[data-theme=forge]{background:var(--mod-forge)}
.module[data-theme=comic]{background:var(--mod-comic)}
.module[data-theme=hand]{background:var(--mod-hand)}
.module[data-theme=aivideo]{background:var(--mod-aivideo)}
.module[data-theme=aurora],.module[data-theme=forge],.module[data-theme=aivideo]{color:#f2efe8}
.module[data-theme=aurora] .work-sub,.module[data-theme=forge] .work-sub,.module[data-theme=aivideo] .work-sub,
.module[data-theme=aurora] .work-desc,.module[data-theme=forge] .work-desc,.module[data-theme=aivideo] .work-desc{color:rgba(242,239,232,.82)}
.module[data-theme=aurora] .work-index{color:transparent;-webkit-text-stroke:1px rgba(242,239,232,.32)}
.module[data-theme=forge] .work-index{color:transparent;-webkit-text-stroke:1px rgba(120,255,214,.35)}
.module[data-theme=aivideo] .work-index{color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.30)}
.module[data-theme=aurora] .work-tag{color:#8fb4ff}
.module[data-theme=forge] .work-tag{color:#7dffd8}
.module[data-theme=aivideo] .work-tag{color:#ff8a6a}
.module[data-theme=aurora] .work-title em,.module[data-theme=forge] .work-title em,.module[data-theme=aivideo] .work-title em{color:inherit}
.module[data-theme=aurora] .work-title{color:#fff}
.module[data-theme=forge] .work-title{color:#eafff5}
.module[data-theme=aivideo] .work-title{color:#fff}
.module[data-theme=aurora] .work-tags span,.module[data-theme=forge] .work-tags span,.module[data-theme=aivideo] .work-tags span{color:rgba(242,239,232,.9);border-color:rgba(242,239,232,.25);background:rgba(255,255,255,.05)}
.module[data-theme=aurora] .work-btn,.module[data-theme=forge] .work-btn,.module[data-theme=aivideo] .work-btn{color:#f2efe8;border-color:#f2efe8}
.module[data-theme=aurora] .gallery-head{border-color:rgba(242,239,232,.35)}
.module[data-theme=forge] .gallery-head{border-color:rgba(122,255,216,.4)}
.module[data-theme=aivideo] .gallery-head{border-color:rgba(255,255,255,.3)}
.module[data-theme=aurora] .g-count,.module[data-theme=forge] .g-count,.module[data-theme=aivideo] .g-count{color:rgba(242,239,232,.6)}
.module[data-theme=aurora] .g-title,.module[data-theme=forge] .g-title,.module[data-theme=aivideo] .g-title{color:#fff}
.module .deco{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.module .gallery{position:relative;z-index:2}
.module .module-inner{position:relative;z-index:2}

/* ---------- 模块封面 ---------- */
.module-cover{min-height:100vh;display:flex;align-items:center}
.module-inner{width:min(1180px,90vw);margin:0 auto;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(28px,5vw,80px);align-items:center;padding:110px 0 60px}
.module-cover--rev .module-inner{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}
.module-cover--rev .work-media{order:2}
.module-cover--rev .work-info{order:1}
@media (max-width:960px){
  .module-inner,.module-cover--rev .module-inner{grid-template-columns:1fr;gap:24px}
  .module-cover--rev .work-media{order:1}
  .module-cover--rev .work-info{order:2}
  .module-cover{min-height:0;padding-top:90px}
}

/* ============================================================
   13 套专属开场动画（模块进入视口 .active 时播放一次）
   ============================================================ */

/* 01 蒙牛 · 奶滴 */
.module[data-theme=mengniu] .deco-drip{
  position:absolute;left:12%;top:-80px;width:26px;height:26px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);
  background:linear-gradient(135deg,#fff,#e8e0cf);opacity:0;
}
.module[data-theme=mengniu].active .deco-drip{animation:drip 1.8s var(--ease) .2s 1}
.module[data-theme=mengniu] .deco-ring{position:absolute;left:12%;top:70%;width:120px;height:40px;border:2px solid rgba(120,100,60,.35);border-radius:50%;opacity:0;transform:scale(.2)}
.module[data-theme=mengniu].active .deco-ring{animation:ripple 1.8s var(--ease) .9s 1}
@keyframes drip{0%{opacity:0;transform:rotate(-45deg) translateY(0)}15%{opacity:.9}100%{opacity:0;transform:rotate(-45deg) translateY(60vh)}}

/* 02 生椰 · 椰香波点 */
.module[data-theme=shengye] .deco-dots{
  position:absolute;inset:0;opacity:0;
  background-image:radial-gradient(rgba(150,110,60,.18) 2.5px,transparent 2.5px);
  background-size:34px 34px;
}
.module[data-theme=shengye].active .deco-dots{animation:dotsIn 1.6s ease .1s 1}
@keyframes dotsIn{0%{opacity:0;background-position:0 40px}60%{opacity:.8}100%{opacity:.65;background-position:0 0}}

/* 03 拾穗 · 麦粒飘落 */
.module[data-theme=shisui] .deco-grain{position:absolute;inset:0;opacity:0}
.module[data-theme=shisui] .deco-grain i{
  position:absolute;top:-16px;width:6px;height:16px;border-radius:60% 60% 0 0;
  background:linear-gradient(#c99a3d,#8a6a2a);transform:rotate(18deg);
}
.module[data-theme=shisui].active .deco-grain{animation:grainIn 1.4s ease .2s 1 forwards}
@keyframes grainIn{0%{opacity:0}30%{opacity:1}100%{opacity:.55}}
.module[data-theme=shisui].active .deco-grain i{animation:grainFall 4s linear infinite}
@keyframes grainFall{0%{transform:translateY(0) rotate(18deg)}100%{transform:translateY(115vh) rotate(220deg)}}

/* 04 AURORA · 极光流动（深空） */
.module[data-theme=aurora] .deco-aurora{position:absolute;inset:0;opacity:0;background:
  radial-gradient(60% 40% at 20% 20%,rgba(94,140,255,.28),transparent 60%),
  radial-gradient(50% 36% at 80% 30%,rgba(74,255,190,.18),transparent 60%),
  radial-gradient(40% 30% at 50% 85%,rgba(255,160,120,.14),transparent 60%)}
.module[data-theme=aurora].active .deco-aurora{animation:auroraIn 2s ease .2s 1 forwards}
@keyframes auroraIn{0%{opacity:0}100%{opacity:1}}
  background:linear-gradient(90deg,transparent,rgba(110,160,255,.5),rgba(90,255,200,.35),transparent);opacity:0}
@keyframes auroraSweep{0%,100%{transform:translateX(-8%) skewX(-14deg);opacity:.25}50%{transform:translateX(8%) skewX(-14deg);opacity:.85}}

/* 05 LUMORA · 灯光点亮 */
.module[data-theme=lumora] .deco-glow{position:absolute;left:50%;top:42%;width:560px;height:560px;margin:-280px 0 0 -280px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,196,110,.55) 0%,rgba(255,196,110,0) 65%);opacity:0;transform:scale(.15)}
.module[data-theme=lumora].active .deco-glow{animation:glowOn 2.2s var(--ease) .15s 1 forwards}
@keyframes glowOn{0%{opacity:0;transform:scale(.15)}45%{opacity:1;transform:scale(1)}100%{opacity:.55;transform:scale(1.05)}}

/* 06 TEXIA · 织纹横扫 */
.module[data-theme=texia] .deco-weave{position:absolute;inset:0;opacity:0;
  background:repeating-linear-gradient(90deg,rgba(150,110,70,.10) 0 2px,transparent 2px 26px)}
.module[data-theme=texia].active .deco-weave{animation:weaveIn 1.5s ease .15s 1 forwards}
@keyframes weaveIn{0%{opacity:0;background-position:-260px 0}60%{opacity:.7}100%{opacity:.5;background-position:0 0}}

/* 07 VESS · 热气上升 */
.module[data-theme=vess] .deco-steam{position:absolute;right:16%;bottom:20%;opacity:0}
.module[data-theme=vess] .deco-steam i{position:absolute;bottom:0;width:22px;height:46px;border-radius:50%;
  background:radial-gradient(rgba(255,255,255,.8),rgba(255,255,255,0));filter:blur(4px)}
.module[data-theme=vess].active .deco-steam{animation:steamIn 1.6s ease .3s 1 forwards}
.module[data-theme=vess].active .deco-steam i{animation:steam 3.4s ease-in-out infinite}
@keyframes steamIn{0%{opacity:0}100%{opacity:.8}}
@keyframes steam{0%{transform:translateY(0) translateX(0) scale(1);opacity:.85}100%{transform:translateY(-46vh) translateX(14px) scale(1.7);opacity:0}}

/* 08 VELA · 帘幕拉开 */
.module[data-theme=vela] .deco-curtain{position:absolute;inset:0;z-index:1;pointer-events:none}
.module[data-theme=vela] .deco-curtain span{position:absolute;top:0;bottom:0;width:51%;
  background:linear-gradient(90deg,#d9d7de,#c6c4cd);opacity:.0}
.module[data-theme=vela] .deco-curtain span:first-child{left:0;transform:translateX(0)}
.module[data-theme=vela] .deco-curtain span:last-child{right:0;transform:translateX(0)}
.module[data-theme=vela].active .deco-curtain span{animation:curtain 1.7s var(--ease) .2s 1 forwards}
@keyframes curtain{0%{opacity:.95}100%{opacity:0;transform:translateX(52%)}}
.module[data-theme=vela] .deco-curtain span:last-child{animation-name:curtainR}
@keyframes curtainR{0%{opacity:.95}100%{opacity:0;transform:translateX(-52%)}}

/* 09 MORA · 水滴与涟漪 */
.module[data-theme=mora] .deco-rain{position:absolute;left:8%;top:-30px;width:10px;height:34px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;
  background:linear-gradient(#d7ecf2,#9cc6d4);opacity:0}
.module[data-theme=mora].active .deco-rain{animation:rainDrop 1.7s ease .2s 1 forwards}
@keyframes rainDrop{0%{opacity:0;transform:translateY(0) scale(.7)}15%{opacity:1}100%{opacity:0;transform:translateY(72vh) scale(1)}}
.module[data-theme=mora] .deco-ripple{position:absolute;left:8%;top:74%;width:130px;height:40px;border:2px solid rgba(90,150,170,.4);border-radius:50%;opacity:0}
.module[data-theme=mora].active .deco-ripple{animation:ripple 1.7s ease .9s 1}
@keyframes ripple{0%{opacity:.8;transform:scale(.25)}100%{opacity:0;transform:scale(1.6)}}

/* 10 FORGE · 科技扫描 */
.module[data-theme=forge] .deco-grid{position:absolute;inset:0;opacity:0;
  background-image:linear-gradient(rgba(120,255,214,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(120,255,214,.08) 1px,transparent 1px);
  background-size:46px 46px}
.module[data-theme=forge].active .deco-grid{animation:gridIn 1.2s ease .1s 1 forwards}
@keyframes gridIn{0%{opacity:0;background-size:0 0}100%{opacity:1;background-size:46px 46px}}
.module[data-theme=forge] .deco-scan{position:absolute;left:0;right:0;top:-6%;height:120px;opacity:0;
  background:linear-gradient(180deg,transparent,rgba(120,255,214,.35),transparent)}
.module[data-theme=forge].active .deco-scan{animation:scanLine 1.6s ease .3s 1 forwards}
@keyframes scanLine{0%{opacity:0;top:-6%}25%{opacity:1}100%{opacity:0;top:106%}}

/* 11 漫画 · 分镜弹出 */
.module[data-theme=comic] .deco-dots-bg{position:absolute;inset:0;opacity:0;
  background-image:radial-gradient(rgba(90,70,40,.14) 1.6px,transparent 1.6px);background-size:12px 12px}
.module[data-theme=comic].active .deco-dots-bg{animation:dotsIn 1s ease .1s 1 forwards}
.module[data-theme=comic] .deco-panel{position:absolute;border:2.5px solid rgba(40,30,15,.5);background:rgba(255,255,255,.25);opacity:0}
.module[data-theme=comic] .deco-panel.p1{left:6%;top:12%;width:16vw;height:10vw;transform:rotate(-4deg)}
.module[data-theme=comic] .deco-panel.p2{right:7%;top:18%;width:13vw;height:16vw;transform:rotate(3deg)}
.module[data-theme=comic] .deco-panel.p3{left:16%;bottom:10%;width:20vw;height:12vw;transform:rotate(2deg)}
.module[data-theme=comic].active .deco-panel{animation:panelPop .7s var(--ease) both}
.module[data-theme=comic].active .deco-panel.p1{animation-delay:.25s}
.module[data-theme=comic].active .deco-panel.p2{animation-delay:.55s}
.module[data-theme=comic].active .deco-panel.p3{animation-delay:.85s}
@keyframes panelPop{0%{opacity:0;transform:scale(.4) rotate(0)}70%{opacity:1;transform:scale(1.06)}100%{opacity:.5;transform:scale(1)}}

/* 12 手绘 · 水墨开场 */
.module[data-theme=hand] .deco-ink{position:absolute;left:50%;top:44%;width:52vmin;height:52vmin;margin:-26vmin 0 0 -26vmin;border-radius:50%;opacity:0;
  background:radial-gradient(circle,rgba(20,16,10,.9) 0%,rgba(20,16,10,.55) 42%,rgba(20,16,10,0) 72%);
  filter:blur(6px)}
.module[data-theme=hand].active .deco-ink{animation:inkSpread 1.9s var(--ease) .1s 1 forwards}
@keyframes inkSpread{0%{opacity:0;transform:scale(.1);filter:blur(18px)}40%{opacity:.9}100%{opacity:0;transform:scale(4.6);filter:blur(0)}}
.module[data-theme=hand] .deco-brush{position:absolute;left:-20%;top:30%;width:140%;height:8px;opacity:0;transform:rotate(-8deg);
  background:linear-gradient(90deg,transparent,rgba(25,20,12,.75) 30%,rgba(25,20,12,0) 80%)}
.module[data-theme=hand].active .deco-brush{animation:brushStroke 1.3s var(--ease) .5s 1 forwards}
@keyframes brushStroke{0%{opacity:0;transform:rotate(-8deg) translateX(-10%)}30%{opacity:1}100%{opacity:0;transform:rotate(-8deg) translateX(12%)}}

/* 13 AI 视频 · 胶片放映 */
.module[data-theme=aivideo] .deco-film{position:absolute;left:0;right:0;height:26px;opacity:0;
  background:repeating-linear-gradient(90deg,#1c1c22 0 18px,transparent 18px 30px);border-top:1px solid rgba(255,255,255,.25);border-bottom:1px solid rgba(255,255,255,.25)}
.module[data-theme=aivideo] .deco-film.top{top:0}
.module[data-theme=aivideo] .deco-film.bottom{bottom:0}
.module[data-theme=aivideo].active .deco-film{animation:filmIn 1s ease .2s 1 forwards}
@keyframes filmIn{0%{opacity:0}100%{opacity:.9}}
.module[data-theme=aivideo] .deco-reel{position:absolute;right:8%;top:24%;width:120px;height:120px;border:3px solid rgba(255,255,255,.35);border-radius:50%;opacity:0}
.module[data-theme=aivideo].active .deco-reel{animation:reelSpin 1.6s linear .3s 1 forwards}
@keyframes reelSpin{0%{opacity:0;transform:rotate(0) scale(.4)}40%{opacity:.8}100%{opacity:.35;transform:rotate(360deg) scale(1)}}

/* ============================================================
   蒙牛专业乳品 · 信息面板（文案取自作品集 PDF）
   ============================================================ */
.mengniu-card{
  background:linear-gradient(160deg,#fbf8f2,#efe8da);border:1px solid rgba(120,100,60,.25);
  padding:clamp(26px,3.4vw,52px);aspect-ratio:4/5;display:flex;flex-direction:column;justify-content:space-between;
  box-shadow:0 30px 60px -30px rgba(27,23,18,.3);position:relative;overflow:hidden;
}
.mengniu-card::after{content:'';position:absolute;right:-18%;top:-22%;width:70%;height:70%;border-radius:50%;
  background:radial-gradient(circle,rgba(196,140,70,.16),transparent 70%);pointer-events:none}
.mcard-brand{font-family:var(--font-display);font-weight:900;font-size:clamp(28px,3.6vw,56px);line-height:1.1;color:var(--ink)}
.mcard-brand b{color:var(--accent)}
.mcard-sub{margin-top:10px;font-size:12px;letter-spacing:.28em;color:var(--muted)}
.mcard-stats{display:flex;gap:clamp(14px,2vw,30px);margin:26px 0;flex-wrap:wrap}
.mstat{flex:1;min-width:96px}
.mstat b{display:block;font-family:var(--font-en);font-size:clamp(26px,3.2vw,46px);font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1}
.mstat span{display:block;margin-top:8px;font-size:11px;letter-spacing:.06em;line-height:1.6;color:var(--muted)}
.mcard-account{border-top:1px solid var(--line);padding-top:16px;display:flex;align-items:baseline;gap:12px}
.mcard-account span{font-size:11px;letter-spacing:.24em;color:var(--muted)}
.mcard-account b{font-family:var(--font-display);font-weight:600;font-size:16px;color:var(--ink)}
.mengniu-sections{display:flex;flex-direction:column;gap:14px;margin:22px 0}
.msec h4{
  font-family:var(--font-en);font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent);
  display:flex;align-items:center;gap:10px;margin-bottom:6px;
}
.msec h4::before{content:'';width:18px;height:1px;background:var(--accent)}
.msec p{font-size:clamp(12px,1.25vw,14px);line-height:1.95;color:var(--ink-2);max-width:38em}
@media (max-width:960px){
  .mengniu-card{aspect-ratio:auto;min-height:340px}
}

/* ============================================================
   常驻氛围动画（.amb）——模块进入后持续循环，营造"每模块一个世界"
   ============================================================ */
.module .amb{position:absolute;pointer-events:none;opacity:0}
/* 蒙牛 · 奶白呼吸光 */
.module[data-theme=mengniu] .amb{left:50%;top:46%;width:520px;height:520px;margin:-260px 0 0 -260px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 62%)}
.module[data-theme=mengniu].active .amb{animation:milkBreathe 4.5s ease-in-out 2.2s infinite}
@keyframes milkBreathe{0%,100%{opacity:0;transform:scale(.85)}50%{opacity:.7;transform:scale(1.1)}}
/* 生椰 · 波点缓慢上浮 */
.module[data-theme=shengye] .amb{inset:0;
  background-image:radial-gradient(rgba(150,110,60,.16) 2.5px,transparent 2.5px);background-size:34px 34px}
.module[data-theme=shengye].active .amb{animation:dotsRise 11s linear 1.6s infinite}
@keyframes dotsRise{0%{opacity:.75;background-position:0 0}100%{opacity:.75;background-position:0 -68px}}
/* 拾穗 · 麦色流光 */
.module[data-theme=shisui] .amb{inset:0;background:linear-gradient(105deg,transparent 32%,rgba(201,154,61,.22) 50%,transparent 68%)}
.module[data-theme=shisui].active .amb{animation:wheatSheen 7s ease-in-out 1.8s infinite}
@keyframes wheatSheen{0%,100%{opacity:0;transform:translateX(-70%)}50%{opacity:.9;transform:translateX(70%)}}
/* AURORA · 极光呼吸 */
.module[data-theme=aurora] .amb{inset:0;background:
  radial-gradient(55% 38% at 18% 22%,rgba(94,140,255,.30),transparent 62%),
  radial-gradient(46% 34% at 82% 30%,rgba(74,255,190,.20),transparent 62%)}
.module[data-theme=aurora].active .amb{animation:auroraBreathe 6s ease-in-out 2.4s infinite}
@keyframes auroraBreathe{0%,100%{opacity:.35;transform:scale(1)}50%{opacity:.85;transform:scale(1.12)}}
/* LUMORA · 光晕呼吸 */
.module[data-theme=lumora] .amb{left:50%;top:44%;width:480px;height:480px;margin:-240px 0 0 -240px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,196,110,.45),rgba(255,196,110,0) 62%)}
.module[data-theme=lumora].active .amb{animation:lampPulse 4.2s ease-in-out 2.4s infinite}
@keyframes lampPulse{0%,100%{opacity:.25;transform:scale(.92)}50%{opacity:.75;transform:scale(1.14)}}
/* TEXIA · 织纹平移 */
.module[data-theme=texia] .amb{inset:0;
  background:repeating-linear-gradient(90deg,rgba(150,110,70,.10) 0 2px,transparent 2px 26px)}
.module[data-theme=texia].active .amb{animation:weaveSlide 10s linear 1.8s infinite}
@keyframes weaveSlide{0%{opacity:.6;background-position:0 0}100%{opacity:.6;background-position:-260px 0}}
/* VELA · 帘光扫过 */
.module[data-theme=vela] .amb{inset:0;background:linear-gradient(100deg,transparent 32%,rgba(255,255,255,.5) 50%,transparent 68%)}
.module[data-theme=vela].active .amb{animation:curtainSheen 6.5s ease-in-out 2s infinite}
@keyframes curtainSheen{0%,100%{opacity:0;transform:translateX(-70%)}50%{opacity:.8;transform:translateX(70%)}}
/* MORA · 细雨丝 */
.module[data-theme=mora] .amb{inset:0;
  background-image:linear-gradient(rgba(120,180,200,.22) 1px,transparent 1px);
  background-size:100% 46px}
.module[data-theme=mora].active .amb{animation:rainLines 3.2s linear 1.8s infinite}
@keyframes rainLines{0%{opacity:.7;background-position:0 -46px}100%{opacity:.7;background-position:0 0}}
/* 漫画 · 网点微闪 */
.module[data-theme=comic] .amb{inset:0;
  background-image:radial-gradient(rgba(90,70,40,.15) 1.6px,transparent 1.6px);background-size:12px 12px}
.module[data-theme=comic].active .amb{animation:halftoneBlink 3.6s ease-in-out 1.6s infinite}
@keyframes halftoneBlink{0%,100%{opacity:.3}50%{opacity:.65}}
/* 手绘 · 墨意呼吸 */
.module[data-theme=hand] .amb{left:50%;top:44%;width:46vmin;height:46vmin;margin:-23vmin 0 0 -23vmin;border-radius:50%;
  background:radial-gradient(circle,rgba(25,20,12,.5),rgba(25,20,12,0) 68%);filter:blur(8px)}
.module[data-theme=hand].active .amb{animation:inkBreathe 6s ease-in-out 2.2s infinite}
@keyframes inkBreathe{0%,100%{opacity:0;transform:scale(1.2)}50%{opacity:.3;transform:scale(2)}}
/* AI视频 · 扫描进度线 */
.module[data-theme=aivideo] .amb{left:0;right:0;top:0;height:90px;
  background:linear-gradient(180deg,transparent,rgba(255,255,255,.14),transparent)}
.module[data-theme=aivideo].active .amb{animation:reelScan 4.5s ease-in-out 1.6s infinite}
@keyframes reelScan{0%{opacity:0;top:0}12%{opacity:.8}88%{opacity:.8}100%{opacity:0;top:100%}}
/* FORGE：扫描线持续循环 */
.module[data-theme=forge].active .deco-scan{animation:scanLine 3.6s ease-in-out 1.4s infinite}
/* MORA：水滴/涟漪循环 */
.module[data-theme=mora].active .deco-rain{animation:rainDrop 2.4s ease-in-out .6s infinite}
.module[data-theme=mora].active .deco-ripple{animation:ripple 2.4s ease-in-out 1.5s infinite}
/* AIVIDEO：胶片盘持续旋转 */
.module[data-theme=aivideo].active .deco-reel{animation:reelSpin 5s linear .5s infinite}

/* ============================================================
   自然转场：模块 HTML 背景透明，颜色全部由 3D canvas 平滑渐变
   （滚动时色彩连续流动，不再硬切）+ 动效收敛（hallmark）
   ============================================================ */
.module{background:transparent}
.module[data-theme=mengniu]{background:transparent}
.module[data-theme=shengye]{background:transparent}
.module[data-theme=shisui]{background:transparent}
.module[data-theme=aurora]{background:transparent}
.module[data-theme=lumora]{background:transparent}
.module[data-theme=texia]{background:transparent}
.module[data-theme=vess]{background:transparent}
.module[data-theme=vela]{background:transparent}
.module[data-theme=mora]{background:transparent}
.module[data-theme=forge]{background:transparent}
.module[data-theme=comic]{background:transparent}
.module[data-theme=hand]{background:transparent}
.module[data-theme=aivideo]{background:transparent}

/* 一次性开场收敛：更短 + expo 缓动 */
.module[data-theme=mengniu].active .deco-drip{animation:drip 1.2s cubic-bezier(.16,1,.3,1) .15s 1}
.module[data-theme=mengniu].active .deco-ring{animation:ripple 1.2s cubic-bezier(.16,1,.3,1) .7s 1}
.module[data-theme=shisui].active .deco-grain{animation:grainIn 1s ease .15s 1 forwards}
.module[data-theme=aurora].active .deco-aurora{animation:auroraIn 1.2s ease .15s 1 forwards}
.module[data-theme=lumora].active .deco-glow{animation:glowOn 1.4s cubic-bezier(.16,1,.3,1) .12s 1 forwards}
.module[data-theme=texia].active .deco-weave{animation:weaveIn 1.1s ease .12s 1 forwards}
.module[data-theme=vela].active .deco-curtain span{animation:curtain 1.15s cubic-bezier(.16,1,.3,1) .15s 1 forwards}
.module[data-theme=mora].active .deco-rain{animation:rainDrop 1.2s ease .15s infinite}
.module[data-theme=mora].active .deco-ripple{animation:ripple 1.2s ease .75s infinite}
.module[data-theme=forge].active .deco-grid{animation:gridIn 1s ease .1s 1 forwards}
.module[data-theme=forge].active .deco-scan{animation:scanLine 3.8s ease-in-out 1.2s infinite}
.module[data-theme=comic].active .deco-panel{animation:panelPop .55s cubic-bezier(.16,1,.3,1) both}
.module[data-theme=hand].active .deco-ink{animation:inkSpread 1.3s cubic-bezier(.16,1,.3,1) .1s 1 forwards}
.module[data-theme=hand].active .deco-brush{animation:brushStroke 1s cubic-bezier(.16,1,.3,1) .5s 1 forwards}
.module[data-theme=aivideo].active .deco-film{animation:filmIn .9s ease .15s 1 forwards}
.module[data-theme=aivideo].active .deco-reel{animation:reelSpin 1.6s cubic-bezier(.16,1,.3,1) .25s 1 forwards}
.module[data-theme=shengye].active .deco-dots{animation:dotsIn 1.1s ease .12s 1 forwards}

/* 常驻氛围（.amb）改为慢速间歇：大部分时间静止，偶发浮现（不抓眼球） */
.module[data-theme=mengniu].active .amb{animation:milkBreathe 8s ease-in-out 2s infinite}
@keyframes milkBreathe{0%,76%,100%{opacity:0;transform:scale(.88)}38%{opacity:.5;transform:scale(1.06)}}
.module[data-theme=shengye].active .amb{animation:dotsRise 12s linear 1.5s infinite}
.module[data-theme=shisui].active .amb{animation:wheatSheen 8s ease-in-out 1.6s infinite}
@keyframes wheatSheen{0%,74%,100%{opacity:0;transform:translateX(-70%)}37%{opacity:.75;transform:translateX(70%)}}
.module[data-theme=aurora].active .amb{animation:auroraBreathe 7s ease-in-out 2s infinite}
@keyframes auroraBreathe{0%,72%,100%{opacity:.28;transform:scale(1)}36%{opacity:.7;transform:scale(1.08)}}
.module[data-theme=lumora].active .amb{animation:lampPulse 7s ease-in-out 2s infinite}
@keyframes lampPulse{0%,74%,100%{opacity:.2;transform:scale(.94)}37%{opacity:.6;transform:scale(1.1)}}
.module[data-theme=texia].active .amb{animation:weaveSlide 11s linear 1.6s infinite}
.module[data-theme=vela].active .amb{animation:curtainSheen 8s ease-in-out 1.8s infinite}
@keyframes curtainSheen{0%,74%,100%{opacity:0;transform:translateX(-70%)}37%{opacity:.65;transform:translateX(70%)}}
.module[data-theme=mora].active .amb{animation:rainLines 4.5s linear 1.6s infinite}
.module[data-theme=comic].active .amb{animation:halftoneBlink 5s ease-in-out 1.5s infinite}
@keyframes halftoneBlink{0%,70%,100%{opacity:.25}35%{opacity:.55}}
.module[data-theme=hand].active .amb{animation:inkBreathe 8s ease-in-out 2s infinite}
@keyframes inkBreathe{0%,76%,100%{opacity:0;transform:scale(1.3)}38%{opacity:.26;transform:scale(2)}}
.module[data-theme=aivideo].active .amb{animation:reelScan 6s ease-in-out 1.5s infinite}
@keyframes reelScan{0%,78%,100%{opacity:0;top:0}39%{opacity:.6;top:90%}}

/* ============================================================
   模块互动：每个作品一个专属玩法（点击 / 移动鼠标）
   ============================================================ */
.ix{position:absolute;pointer-events:none;transform:translate(-50%,-50%);z-index:1;opacity:0}
.ix-hint{
  display:inline-flex;align-items:center;gap:8px;margin-top:16px;
  font-size:11px;letter-spacing:.16em;color:var(--muted);
}
.ix-hint::before{content:'';width:9px;height:9px;border-radius:50%;border:1px solid currentColor;position:relative;flex:none;
  animation:hintBlink 2.4s ease-in-out infinite}
@keyframes hintBlink{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}
.module[data-theme=aurora] .ix-hint,.module[data-theme=forge] .ix-hint,.module[data-theme=aivideo] .ix-hint{color:rgba(242,239,232,.55)}

/* 蒙牛 · 奶滴 */
.ixd{width:14px;height:19px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;
  background:linear-gradient(#fff,#dfd6c2);animation:ixDrip 1.1s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixDrip{0%{opacity:.95;transform:translate(-50%,-50%) translateY(0) scale(.7)}100%{opacity:0;transform:translate(-50%,-50%) translateY(80px) scale(1)}}
/* 生椰 · 气泡上浮 */
.ixbubble{width:18px;height:18px;border:1.5px solid rgba(150,110,60,.5);border-radius:50%;animation:ixUp 1.2s ease-in forwards}
@keyframes ixUp{0%{opacity:.9;transform:translate(-50%,-50%) translateY(0) scale(.55)}100%{opacity:0;transform:translate(-50%,-50%) translateY(-90px) scale(1.25)}}
/* 拾穗 · 麦粒飘落 */
.ixwheat{width:5px;height:14px;border-radius:60% 60% 0 0;background:linear-gradient(#d9a83c,#8a6a2a);animation:ixWheat 1.4s ease-in forwards}
@keyframes ixWheat{0%{opacity:0;transform:translate(-50%,-50%) translateY(-24px) rotate(0)}18%{opacity:.95}100%{opacity:0;transform:translate(-50%,-50%) translateY(64px) rotate(140deg)}}
/* AURORA · 极光光斑 */
.ixaurora{width:96px;height:96px;border-radius:50%;
  background:radial-gradient(circle,rgba(110,160,255,.45),rgba(74,255,190,.15) 45%,transparent 70%);animation:ixFade .7s ease-out forwards}
@keyframes ixFade{0%{opacity:.9;transform:translate(-50%,-50%) scale(.5)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.7)}}
/* LUMORA · 点亮闪光 */
.ixflash{width:120px;height:120px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,196,110,.75),rgba(255,196,110,0) 65%);animation:ixFlash .9s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixFlash{0%{opacity:0;transform:translate(-50%,-50%) scale(.15)}35%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.7)}}
/* TEXIA · 织纹滑条 */
.ixthread{width:60px;height:2px;background:rgba(150,110,70,.5);animation:ixThread 1s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixThread{0%{opacity:0;transform:translate(-50%,-50%) translateX(-40px) scaleX(.3)}25%{opacity:.9}100%{opacity:0;transform:translate(-50%,-50%) translateX(46px) scaleX(1)}}
/* VESS · 温度跳动 */
.ixtemp{font-family:var(--font-en);font-size:28px;font-weight:700;color:var(--ink);text-shadow:0 2px 12px rgba(27,23,18,.18);animation:ixTemp 1.2s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixTemp{0%{opacity:.95;transform:translate(-50%,-50%) translateY(0) scale(.8)}100%{opacity:0;transform:translate(-50%,-50%) translateY(-84px) scale(1.15)}}
/* VELA · 帘光 */
.ixsheen{width:120px;height:60vh;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:ixSheen .8s ease-out forwards}
@keyframes ixSheen{0%{opacity:0;transform:translate(-50%,-50%) translateX(-30px)}30%{opacity:.9}100%{opacity:0;transform:translate(-50%,-50%) translateX(34px)}}
/* MORA · 水滴 + 涟漪 */
.ixdrop{width:10px;height:24px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;
  background:linear-gradient(#d7ecf2,#9cc6d4);animation:ixDrop 1.2s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixDrop{0%{opacity:.95;transform:translate(-50%,-50%) translateY(0) scale(.7)}100%{opacity:0;transform:translate(-50%,-50%) translateY(70px) scale(1)}}
.ixripple{width:70px;height:22px;border:2px solid rgba(90,150,170,.5);border-radius:50%;animation:ixRipple 1.1s ease-out forwards}
@keyframes ixRipple{0%{opacity:.85;transform:translate(-50%,-50%) scale(.3)}100%{opacity:0;transform:translate(-50%,-50%) scale(2)}}
/* FORGE · 能量脉冲 */
.ixpulse{width:30px;height:30px;border-radius:50%;background:radial-gradient(circle,rgba(120,255,214,.55),transparent 70%);animation:ixFade .7s ease-out forwards}
.ixzap{width:140px;height:140px;border:2px solid rgba(120,255,214,.85);border-radius:50%;
  box-shadow:0 0 30px rgba(120,255,214,.35) inset;animation:ixZap .9s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixZap{0%{opacity:.95;transform:translate(-50%,-50%) scale(.2)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.9)}}
/* 漫画 · 星芒 */
.ixstar{width:20px;height:20px;background:radial-gradient(circle,#fff 0 2px,transparent 3.5px);
  box-shadow:0 0 0 1px rgba(40,30,15,.35);animation:ixStar .8s cubic-bezier(.16,1,.3,1) forwards}
@keyframes ixStar{0%{opacity:.95;transform:translate(-50%,-50%) scale(.4) rotate(0)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.7) rotate(100deg)}}
/* 手绘 · 墨点 */
.ixink{width:36px;height:36px;border-radius:50%;
  background:radial-gradient(circle,rgba(25,20,12,.5),rgba(25,20,12,0) 72%);filter:blur(2px);animation:ixInk .95s ease-out forwards}
@keyframes ixInk{0%{opacity:.75;transform:translate(-50%,-50%) scale(.35);filter:blur(4px)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.7);filter:blur(0)}}
/* AI 视频 · 放映光束 */
.ixbeam{width:70px;height:70vh;background:linear-gradient(180deg,transparent,rgba(255,255,255,.28),transparent);animation:ixBeam .7s ease-out forwards}
@keyframes ixBeam{0%{opacity:0;transform:translate(-50%,-50%) scaleY(.3)}30%{opacity:.8}100%{opacity:0;transform:translate(-50%,-50%) scaleY(1)}}

/* ============================================================
   背景干净：作品图回到内容区（封面缩略图 + 画廊），背景无漂浮图
   ============================================================ */
.work-frame{background:var(--paper-2);border:1px solid var(--line);box-shadow:0 30px 60px -30px rgba(27,23,18,.28)}
.work-frame img{display:block}


/* ============================================================
   完整详情页长图独立区块（不混入单张图，避免重复观感）
   ============================================================ */
.pdp-block{margin-top:36px;border:1px solid var(--line);background:rgba(255,255,255,.4);padding:26px 30px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}
.pdp-label{font-size:13px;letter-spacing:.08em;color:var(--ink-2)}
.pdp-btn{font-size:12px;letter-spacing:.2em;color:var(--ink);border:none;border-bottom:1px solid var(--ink);background:none;padding:6px 0;cursor:pointer;transition:color .3s,border-color .3s}
.pdp-btn:hover{color:var(--accent);border-color:var(--accent)}
.module[data-theme=aurora] .pdp-label,.module[data-theme=forge] .pdp-label,.module[data-theme=aivideo] .pdp-label{color:rgba(242,239,232,.82)}
.module[data-theme=aurora] .pdp-btn,.module[data-theme=forge] .pdp-btn,.module[data-theme=aivideo] .pdp-btn{color:#f2efe8;border-color:rgba(242,239,232,.55)}

/* ============================================================
   开屏揭幕：滑到模块 → 专属开屏动画（13 套，每个不一样）
   ============================================================ */
.module .open{position:absolute;left:0;right:0;top:0;height:100vh;z-index:8;pointer-events:none;overflow:hidden}
.module .open-in{position:absolute;inset:0;opacity:0}
.module.open-done .open{display:none}

/* 01 蒙牛 · 奶幕倾泻 */
.module[data-theme=mengniu] .open-in{background:linear-gradient(180deg,#fff,#efe6d2)}
.module[data-theme=mengniu].open-play .open-in{opacity:1;animation:openDrop 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openDrop{0%{transform:translateY(-101%)}42%{transform:translateY(0)}56%{transform:translateY(0)}100%{transform:translateY(101%)}}
/* 02 生椰 · 椰浪涌上 */
.module[data-theme=shengye] .open-in{background:linear-gradient(180deg,#f3e6cf,#e2cda2)}
.module[data-theme=shengye].open-play .open-in{opacity:1;animation:openRise 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openRise{0%{transform:translateY(101%)}42%{transform:translateY(0)}56%{transform:translateY(0)}100%{transform:translateY(-101%)}}
/* 03 拾穗 · 麦浪横扫 */
.module[data-theme=shisui] .open-in{background:repeating-linear-gradient(90deg,#e9cf92 0 26px,#d9b86b 26px 52px)}
.module[data-theme=shisui].open-play .open-in{opacity:1;animation:openSweep 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openSweep{0%{transform:translateX(-101%)}42%{transform:translateX(0)}56%{transform:translateX(0)}100%{transform:translateX(101%)}}
/* 04 AURORA · 极光夜幕升起 */
.module[data-theme=aurora] .open-in{background:linear-gradient(180deg,#0d1220,#1c2b4a)}
.module[data-theme=aurora].open-play .open-in{opacity:1;animation:openRise 1.6s cubic-bezier(.7,0,.3,1) forwards}
/* 05 LUMORA · 黑暗点亮 */
.module[data-theme=lumora] .open-in{background:radial-gradient(circle at 50% 50%,#4a3a20 0%,#171310 60%)}
.module[data-theme=lumora].open-play .open-in{animation:openGlow 1.6s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openGlow{0%{opacity:0}25%{opacity:1}55%{opacity:1}100%{opacity:0}}
/* 06 TEXIA · 织纹幕 */
.module[data-theme=texia] .open-in{background:repeating-linear-gradient(90deg,#e8d7c2 0 22px,#dcc6ab 22px 44px)}
.module[data-theme=texia].open-play .open-in{opacity:1;animation:openSweep 1.5s cubic-bezier(.7,0,.3,1) forwards}
/* 07 VESS · 冷白幕 */
.module[data-theme=vess] .open-in{background:linear-gradient(180deg,#f2f4f3,#dde3e1)}
.module[data-theme=vess].open-play .open-in{opacity:1;animation:openDrop 1.4s cubic-bezier(.7,0,.3,1) forwards}
/* 08 VELA · 帘幕拉开 */
.module[data-theme=vela] .open-in{background:linear-gradient(90deg,#d9d7de,#c6c4cd);opacity:1}
.module[data-theme=vela].open-play .open-in{animation:openCurtain 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openCurtain{0%{clip-path:inset(0 0 0 0)}45%{clip-path:inset(0 0 0 0)}100%{clip-path:inset(0 50% 0 50%)}}
/* 09 MORA · 水幕倾泻 */
.module[data-theme=mora] .open-in{background:linear-gradient(180deg,#d9edf2,#b3d9e6)}
.module[data-theme=mora].open-play .open-in{opacity:1;animation:openDrop 1.5s cubic-bezier(.7,0,.3,1) forwards}
/* 10 FORGE · 扫描解锁 */
.module[data-theme=forge] .open-in{background:
  linear-gradient(rgba(120,255,214,.14) 1px,transparent 1px) 0 0/46px 46px,
  linear-gradient(90deg,rgba(120,255,214,.14) 1px,transparent 1px) 0 0/46px 46px,
  #0a0e10}
.module[data-theme=forge].open-play .open-in{animation:openScan 1.6s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openScan{0%{opacity:0}18%{opacity:1}60%{opacity:1}100%{opacity:0}}
.module[data-theme=forge] .open-in::after{content:'';position:absolute;left:0;right:0;top:-20%;height:150px;background:linear-gradient(180deg,transparent,rgba(120,255,214,.5),transparent)}
.module[data-theme=forge].open-play .open-in::after{animation:scanMove 1.6s cubic-bezier(.7,0,.3,1) forwards}
@keyframes scanMove{0%{top:-20%}100%{top:110%}}
/* 11 漫画 · 斜向翻开 */
.module[data-theme=comic] .open-in{background:radial-gradient(rgba(90,70,40,.2) 1.5px,transparent 1.5px) 0 0/14px 14px,#f6ead0}
.module[data-theme=comic].open-play .open-in{animation:openSlant 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openSlant{0%{clip-path:inset(0 0 0 0)}45%{clip-path:inset(0 0 0 0)}100%{clip-path:inset(0 0 0 100%)}}
/* 12 手绘 · 水墨晕开 */
.module[data-theme=hand] .open-in{background:radial-gradient(circle at 50% 50%,#1a150e 0%,#1a150e 45%,transparent 75%)}
.module[data-theme=hand].open-play .open-in{animation:openInk 1.8s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openInk{0%{opacity:0;transform:scale(.2)}30%{opacity:1}62%{opacity:1;transform:scale(4)}100%{opacity:0;transform:scale(6)}}
/* 13 AI 视频 · 胶片滑入 */
.module[data-theme=aivideo] .open-in{background:
  repeating-linear-gradient(90deg,#15151c 0 20px,transparent 20px 32px) 0 0/100% 26px,
  repeating-linear-gradient(90deg,#15151c 0 20px,transparent 20px 32px) 0 100%/100% 26px,
  #0c0c11}
.module[data-theme=aivideo].open-play .open-in{opacity:1;animation:openFilm 1.5s cubic-bezier(.7,0,.3,1) forwards}
@keyframes openFilm{0%{transform:translateX(101%)}42%{transform:translateX(0)}56%{transform:translateX(0)}100%{transform:translateX(-101%)}}

/* ============================================================
   开屏图：填满画面，滑到消失、滑回出现（动画由 GSAP 双向控制）
   ============================================================ */
.module .open{position:absolute;left:0;right:0;top:0;height:100vh;z-index:8;pointer-events:none;overflow:hidden}
.module .open-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;will-change:transform,opacity,clip-path}
.module.open-done .open{display:none}

/* ============================================================
   灯箱缩放查看
   ============================================================ */
.lb-zoom{position:absolute;top:14px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:302}
.lb-zoom button{
  width:40px;height:34px;border:1px solid var(--line);background:var(--paper);color:var(--ink);
  font-size:16px;line-height:1;cursor:pointer;transition:all .25s;font-family:var(--font-en);
}
.lb-zoom button:hover{background:var(--ink);color:var(--paper)}
.lb-zoom button:nth-child(2){width:auto;padding:0 12px;font-size:12px;letter-spacing:.1em}
#lbImg{transition:transform .15s ease}

/* ============================================================
   开屏图 = 常驻氛围背景（淡、无边缘、不消失）
   ============================================================ */
.module .open{position:absolute;inset:0;height:auto;z-index:1;pointer-events:none;overflow:hidden}

.module-cover{position:relative;z-index:2}

/* 手绘分组标题 */
.gal-group{width:100%;margin:10px 0 4px}
.gal-group h4{
  font-family:var(--font-en);font-size:11px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--muted);display:flex;align-items:center;gap:12px;
}
.gal-group h4::after{content:'';flex:1;height:1px;background:var(--line)}
.module[data-theme=aurora] .gal-group h4,
.module[data-theme=forge] .gal-group h4,
.module[data-theme=aivideo] .gal-group h4{color:rgba(242,239,232,.55)}

/* ============================================================
   封面区：无大图，纯文字居中排版（背景氛围衬托）
   ============================================================ */
.module-inner{
  display:block;width:min(900px,88vw);margin:0 auto;
  text-align:center;padding:120px 0 70px;
}
.work-info{text-align:center}
.work-index{
  position:static;display:block;margin-bottom:22px;
  font-size:clamp(48px,7vw,92px);line-height:1;
}
.work-tag{justify-content:center}
.work-desc{margin:0 auto;max-width:44em}
.work-tags{justify-content:center}
.work-btn{margin:0 auto}
.mengniu-sections{text-align:left;max-width:46em;margin:22px auto 0}
.msec h4{justify-content:flex-start}
.work-stats{
  display:flex;justify-content:center;gap:clamp(22px,5vw,64px);
  margin:26px auto 6px;flex-wrap:wrap;
}
.work-stats .ws{text-align:center;min-width:110px}
.work-stats .ws b{display:block;font-family:var(--font-en);font-size:clamp(28px,3.6vw,52px);font-weight:700;color:var(--ink);line-height:1}
.work-stats .ws span{display:block;margin-top:8px;font-size:11px;letter-spacing:.08em;line-height:1.6;color:var(--muted)}
.module[data-theme=aurora] .work-stats .ws b,
.module[data-theme=forge] .work-stats .ws b,
.module[data-theme=aivideo] .work-stats .ws b{color:#fff}
.module[data-theme=aurora] .work-stats .ws span,
.module[data-theme=forge] .work-stats .ws span,
.module[data-theme=aivideo] .work-stats .ws span{color:rgba(242,239,232,.55)}

/* ============================================================
   边缘彻底消除：遮罩移到容器上（背景图 + 流动层都受限制）
   —— 图与动态效果只在画面中央显示，四边完全透明，无边缘
   ============================================================ */
.module .open{
  -webkit-mask-image:radial-gradient(ellipse 82% 90% at 50% 42%,
    #000 0%, #000 38%, rgba(0,0,0,.72) 52%, rgba(0,0,0,.42) 66%, rgba(0,0,0,.16) 80%, transparent 100%);
  mask-image:radial-gradient(ellipse 82% 90% at 50% 42%,
    #000 0%, #000 38%, rgba(0,0,0,.72) 52%, rgba(0,0,0,.42) 66%, rgba(0,0,0,.16) 80%, transparent 100%);
}
.module .open-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:.3}

/* ============================================================
   灯箱放大：cover 填满（不滚动）+ 介绍左滑移走；缩小还原
   ============================================================ */
.lb-imgwrap{overflow:auto;background:var(--paper-2);display:flex;align-items:center;justify-content:center;padding:24px;transition:all .45s var(--ease)}
.lb-imgwrap img{max-width:100%;max-height:62vh;object-fit:contain;transition:object-fit .45s var(--ease),width .45s var(--ease),height .45s var(--ease)}
.lb-meta{transition:transform .5s var(--ease),opacity .5s var(--ease)}
/* 放大：宽度填满、高度自然延伸，上下滑动查看（不左右滑） */
.lb-stage.zoomed .lb-imgwrap{overflow-y:auto;overflow-x:hidden;padding:0;background:#15120e;flex:1;align-items:flex-start;justify-content:flex-start}
.lb-stage.zoomed .lb-imgwrap img{width:100%;height:auto;max-width:none;max-height:none;object-fit:contain;display:block}
.lb-stage.zoomed .lb-meta{transform:translateX(-110%);opacity:0;pointer-events:none}

/* ============================================================
   开屏背景动画：无位移（不露边缘），明暗呼吸（明显可见、按风格）
   ============================================================ */
.module .open-img{animation-duration:6s;animation-iteration-count:infinite;animation-timing-function:ease-in-out;animation-direction:alternate}
.module[data-theme=mengniu] .open-img{animation-name:brMengniu}
@keyframes brMengniu{from{opacity:.2;filter:brightness(1)}to{opacity:.31;filter:brightness(1.12)}}
.module[data-theme=shengye] .open-img{animation-name:brShengye}
@keyframes brShengye{from{opacity:.2}to{opacity:.33}}
.module[data-theme=shisui] .open-img{animation-name:brShisui}
@keyframes brShisui{from{filter:brightness(.97)}to{filter:brightness(1.14)}}
.module[data-theme=aurora] .open-img{animation-name:brAurora;animation-duration:7s}
@keyframes brAurora{from{opacity:.2;filter:brightness(.94)}to{opacity:.35;filter:brightness(1.16)}}
.module[data-theme=lumora] .open-img{animation-name:brLumora;animation-duration:5s}
@keyframes brLumora{from{opacity:.22}to{opacity:.42}}
.module[data-theme=texia] .open-img{animation-name:brTexia}
@keyframes brTexia{from{filter:brightness(.98)}to{filter:brightness(1.12)}}
.module[data-theme=vess] .open-img{animation-name:brVess}
@keyframes brVess{from{opacity:.2}to{opacity:.31}}
.module[data-theme=vela] .open-img{animation-name:brVela}
@keyframes brVela{from{filter:brightness(.96)}to{filter:brightness(1.1)}}
.module[data-theme=mora] .open-img{animation-name:brMora}
@keyframes brMora{from{opacity:.2;filter:brightness(.97)}to{opacity:.33;filter:brightness(1.12)}}
.module[data-theme=forge] .open-img{animation-name:brForge;animation-duration:4.5s}
@keyframes brForge{from{filter:brightness(.9) contrast(1)}to{filter:brightness(1.18) contrast(1.06)}}
.module[data-theme=comic] .open-img{animation-name:brComic}
@keyframes brComic{from{opacity:.2}to{opacity:.31}}
.module[data-theme=hand] .open-img{animation-name:brHand;animation-duration:7s}
@keyframes brHand{from{opacity:.17;filter:blur(1.5px) brightness(.96)}to{opacity:.31;filter:blur(0) brightness(1.06)}}
.module[data-theme=aivideo] .open-img{animation-name:brAivideo}
@keyframes brAivideo{from{filter:brightness(.93)}to{filter:brightness(1.14)}}

/* ============================================================
   版式多样性：13 个模块 5 种封面构图（打破 PPT 千篇一律）
   ============================================================ */
/* b · 左对齐巨标 + 右上大编号 */
.module[data-layout=b] .module-inner{text-align:left;width:min(1120px,88vw)}
.module[data-layout=b] .work-info{text-align:left}
.module[data-layout=b] .work-index{
  position:absolute;top:9%;right:3%;left:auto;margin:0;
  font-size:clamp(96px,16vw,250px);line-height:1;
  -webkit-text-stroke:1px rgba(27,23,18,.22);color:transparent;
}
.module[data-layout=b] .work-title{font-size:clamp(46px,7vw,112px);text-align:left}
.module[data-layout=b] .work-desc{margin:0;max-width:30em}
.module[data-layout=b] .work-tag,.module[data-layout=b] .work-tags{justify-content:flex-start}
.module[data-layout=b] .work-btn{margin:0}
.module[data-layout=b] .work-stats{justify-content:flex-start}
.module[data-layout=b] .mengniu-sections{margin:22px 0 0}
/* c · 底部对齐 */
.module[data-layout=c] .module-cover{align-items:flex-end}
.module[data-layout=c] .module-inner{padding:0 0 8vh;text-align:left;width:min(1120px,88vw)}
.module[data-layout=c] .work-info{text-align:left}
.module[data-layout=c] .work-index{position:absolute;top:10%;right:4%;left:auto;margin:0;font-size:clamp(84px,14vw,220px)}
.module[data-layout=c] .work-title{font-size:clamp(44px,6.5vw,104px);text-align:left}
.module[data-layout=c] .work-desc{margin:0}
.module[data-layout=c] .work-tag,.module[data-layout=c] .work-tags{justify-content:flex-start}
.module[data-layout=c] .work-btn{margin:0}
/* d · 全宽横排巨标 */
.module[data-layout=d] .module-inner{width:min(1400px,94vw);text-align:left}
.module[data-layout=d] .work-info{text-align:left}
.module[data-layout=d] .work-title{font-size:clamp(56px,9vw,152px);text-align:left;letter-spacing:.01em}
.module[data-layout=d] .work-index{position:absolute;top:7%;left:3%;margin:0;font-size:clamp(80px,13vw,210px)}
.module[data-layout=d] .work-desc{margin:0;max-width:34em}
.module[data-layout=d] .work-tag,.module[data-layout=d] .work-tags{justify-content:flex-start}
.module[data-layout=d] .work-btn{margin:0}
/* e · 错位斜排 */
.module[data-layout=e] .module-inner{width:min(1180px,88vw)}
.module[data-layout=e] .work-info{position:relative}
.module[data-layout=e] .work-title{font-size:clamp(50px,8vw,128px);transform:rotate(-1.2deg);transform-origin:left center}
.module[data-layout=e] .work-index{position:absolute;top:-.28em;right:1%;left:auto;margin:0;font-size:clamp(96px,16vw,240px);opacity:.5}
.module[data-layout=e] .work-sub{transform:rotate(.8deg)}
/* 深色版式适配 */
.module[data-layout=b] .work-index,
.module[data-layout=d] .work-index,
.module[data-layout=e] .work-index{-webkit-text-stroke:1px rgba(27,23,18,.22);color:transparent}
.module[data-theme=aurora][data-layout=d] .work-index,
.module[data-theme=forge][data-layout=d] .work-index{-webkit-text-stroke:1px rgba(242,239,232,.35)}
.module[data-theme=aivideo][data-layout=e] .work-index{-webkit-text-stroke:1px rgba(255,255,255,.3)}

/* 画廊头随版式微调 */
.module[data-layout=a] .gallery-head,
.module[data-layout=c] .gallery-head{justify-content:center;text-align:center}
.module[data-layout=d] .g-title{font-size:clamp(34px,5vw,64px)}

/* 微交互 */
.work-btn::after{content:'→';margin-left:10px;display:inline-block;transition:transform .3s var(--ease)}
.work-btn:hover::after{transform:translateX(5px)}
.gallery-grid figure{transition:transform .6s var(--ease),box-shadow .6s var(--ease)}
.gallery-grid figure:hover img{transform:scale(1.05) rotate(.6deg)}
.gallery-grid figure:hover{box-shadow:0 26px 54px -30px rgba(27,23,18,.38)}

/* ============================================================
   流动动画层：背景"视频感"——每模块持续流动/闪动（mask 内，无边缘）
   ============================================================ */
.module .flow{position:absolute;inset:0;pointer-events:none;z-index:1}

/* 蒙牛 · 牛奶流淌 */
.module[data-theme=mengniu] .flow{
  background:linear-gradient(180deg,transparent 0%,rgba(255,255,255,.30) 16%,rgba(255,255,255,.14) 32%,transparent 50%);
  background-size:100% 240%;animation:flowMilk 5s linear infinite}
@keyframes flowMilk{0%{background-position:0 -240%}100%{background-position:0 240%}}
/* 生椰 · 椰浪气泡上涌 */
.module[data-theme=shengye] .flow{
  background-image:radial-gradient(rgba(255,255,255,.4) 2px,transparent 3px),radial-gradient(rgba(190,150,90,.32) 2px,transparent 3px);
  background-size:72px 72px,96px 96px;background-position:0 0,34px 22px;
  animation:flowBubble 5.5s linear infinite}
@keyframes flowBubble{0%{background-position:0 0,34px 22px}100%{background-position:0 96px,34px 118px}}
/* 拾穗 · 麦浪流动 */
.module[data-theme=shisui] .flow{
  background:repeating-linear-gradient(100deg,transparent 0 60px,rgba(201,154,61,.30) 60px 66px,transparent 66px 128px);
  animation:flowWheat 7s linear infinite}
@keyframes flowWheat{0%{background-position:0 0}100%{background-position:180px 0}}
/* AURORA · 极光闪动 */
.module[data-theme=aurora] .flow{
  background:
    radial-gradient(42% 30% at 24% 24%,rgba(94,140,255,.5),transparent 70%),
    radial-gradient(36% 26% at 72% 34%,rgba(74,255,190,.42),transparent 70%),
    radial-gradient(30% 22% at 46% 72%,rgba(255,160,120,.3),transparent 70%);
  animation:flowAurora 7s ease-in-out infinite alternate}
@keyframes flowAurora{0%{transform:translateX(-3%) scale(1);opacity:.55}50%{transform:translateX(2.5%) scale(1.16);opacity:1}100%{transform:translateX(-1.5%) scale(1.06);opacity:.7}}
/* LUMORA · 灯光呼吸扩散 */
.module[data-theme=lumora] .flow{
  background:radial-gradient(circle at 50% 48%,rgba(255,196,110,.6),rgba(255,196,110,0) 60%);
  animation:flowLamp 4s ease-in-out infinite}
@keyframes flowLamp{0%{opacity:.3;transform:scale(.82)}50%{opacity:1;transform:scale(1.18)}100%{opacity:.4;transform:scale(.88)}}
/* TEXIA · 织纹流动 */
.module[data-theme=texia] .flow{
  background:repeating-linear-gradient(90deg,rgba(150,110,70,.20) 0 3px,transparent 3px 34px);
  animation:flowWeave 5.5s linear infinite}
@keyframes flowWeave{0%{background-position:0 0}100%{background-position:-340px 0}}
/* VESS · 热气上升 */
.module[data-theme=vess] .flow{
  background:radial-gradient(34% 22% at 62% 32%,rgba(255,255,255,.45),transparent 70%);
  animation:flowSteam 4.5s ease-in-out infinite}
@keyframes flowSteam{0%{opacity:.15;transform:translateY(10%)}100%{opacity:.75;transform:translateY(-10%)}}
/* VELA · 窗帘飘动 */
.module[data-theme=vela] .flow{
  background:repeating-linear-gradient(90deg,transparent 0 40px,rgba(255,255,255,.24) 40px 46px,transparent 46px 80px);
  animation:flowCurtain 4.5s ease-in-out infinite alternate}
@keyframes flowCurtain{0%{transform:translateX(-3%)}100%{transform:translateX(3%)}}
/* MORA · 水面波纹 */
.module[data-theme=mora] .flow{
  background:
    radial-gradient(20% 9% at 30% 60%,rgba(150,210,230,.55),transparent 70%),
    radial-gradient(17% 8% at 70% 42%,rgba(150,210,230,.5),transparent 70%);
  animation:flowRipple 4.5s ease-in-out infinite}
@keyframes flowRipple{0%{transform:scale(.78);opacity:.5}50%{transform:scale(1.22);opacity:1}100%{transform:scale(.85);opacity:.6}}
/* FORGE · 扫描能量 */
.module[data-theme=forge] .flow{
  background:linear-gradient(180deg,transparent 0%,rgba(120,255,214,.45) 50%,transparent 100%);
  background-size:100% 28%;animation:flowScan 2.8s linear infinite}
@keyframes flowScan{0%{background-position:0 -130%}100%{background-position:0 230%}}
/* 漫画 · 网点流动 */
.module[data-theme=comic] .flow{
  background-image:radial-gradient(rgba(90,70,40,.28) 1.4px,transparent 1.6px);
  background-size:16px 16px;animation:flowDot 3.6s linear infinite}
@keyframes flowDot{0%{background-position:0 0}100%{background-position:0 16px}}
/* 手绘 · 水墨流动 */
.module[data-theme=hand] .flow{
  background:
    radial-gradient(26% 22% at 40% 38%,rgba(25,20,12,.42),transparent 70%),
    radial-gradient(20% 16% at 68% 62%,rgba(25,20,12,.32),transparent 70%);
  animation:flowInk 5.5s ease-in-out infinite alternate}
@keyframes flowInk{0%{transform:translate(0,0) scale(1);opacity:.45}100%{transform:translate(3%,2%) scale(1.28);opacity:.95}}
/* AI 视频 · 放映光束扫动 */
.module[data-theme=aivideo] .flow{
  background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.25) 50%,transparent 100%);
  background-size:30% 100%;animation:flowBeam 3.6s linear infinite}
@keyframes flowBeam{0%{background-position:-130% 0}100%{background-position:230% 0}}

/* ============================================================
   AI 视频板块：左边封面、右边视频，左右一一对应
   ============================================================ */
.video-pair{display:grid;grid-template-columns:240px 1fr;gap:26px;margin-top:32px;align-items:start}
.vp-covers{display:flex;flex-direction:column;gap:14px}
.vp-cover{position:relative;padding:0;border:1px solid var(--line);background:none;cursor:pointer;overflow:hidden;transition:all .35s var(--ease);text-align:left}
.vp-cover img{width:100%;display:block;aspect-ratio:16/9;object-fit:cover;transition:transform .5s var(--ease)}
.vp-cover span{position:absolute;left:0;right:0;bottom:0;padding:20px 10px 8px;font-size:11px;letter-spacing:.08em;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.65))}
.vp-cover:hover img{transform:scale(1.05)}
.vp-cover.on{border-color:var(--accent);transform:translateX(5px)}
.vp-players{display:flex;flex-direction:column;gap:16px}
.vp-players video{width:100%;display:block;background:#000;border:1px solid var(--line);aspect-ratio:16/9}
@media (max-width:760px){.video-pair{grid-template-columns:1fr}.vp-covers{flex-direction:row;flex-wrap:wrap}.vp-cover{width:calc(33.333% - 9px)}}

/* ============================================================
   真实物理背景动画 canvas（粒子/波/布料/涟漪），mask 内无边缘
   ============================================================ */
.module .fx{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}

/* ============================================================
   灯箱放大：底部框架彻底消失，图片占满全部可视区
   ============================================================ */
.lb-stage.zoomed .lb-meta{display:none}
.lb-stage.zoomed{overflow:hidden;height:88vh;max-height:88vh}
.lb-stage.zoomed .lb-imgwrap{flex:1;min-height:0}

/* ============================================================
   动画重点移到标题：持续流光扫过（文字始终清晰可读）
   ============================================================ */
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 42%,rgba(179,86,31,.16) 50%,transparent 58%);
  background-size:250% 100%;
}
  background:linear-gradient(105deg,transparent 42%,rgba(255,255,255,.22) 50%,transparent 58%);
  background-size:250% 100%;
}

/* ============================================================
   封面区物理动画：覆盖封面区，标题处最强、向下平滑渐隐到干净；
   四周羽化（无硬边、无条框）
   ============================================================ */
.module-cover .fx{
  position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;
  /* 羽化与垂直渐变在 canvas 内绘制完成（destination-in），此处无需 mask */
}

/* 手绘：动画 canvas 覆盖整个模块（墨点散布作品周围） */
.module > .fx{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
.module > .module-cover,.module > .gallery{position:relative;z-index:1}

/* 最后区域：无硬背景，顶部雾化渐变带 + canvas 过渡（文字在浅色区） */

/* ============================================================
   开屏图最终羽化：单层径向椭圆（四周完全羽化，无任何边缘）
   ============================================================ */
.module .open-img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:.3;
  -webkit-mask-image:radial-gradient(ellipse 76% 64% at 50% 60%,
    #000 0%, #000 30%, rgba(0,0,0,.62) 46%, rgba(0,0,0,.32) 62%, transparent 80%);
  mask-image:radial-gradient(ellipse 76% 64% at 50% 60%,
    #000 0%, #000 30%, rgba(0,0,0,.62) 46%, rgba(0,0,0,.32) 62%, transparent 80%);
}

/* ============================================================
   移动端防溢出：模块/hero 溢出裁剪，文档宽度锁定
   ============================================================ */
.module{overflow:hidden;max-width:100vw}
#hero{overflow:hidden}
.module-inner{max-width:100%}
.work-info,.work-title{max-width:100%}
.gallery-inner{max-width:100%}

/* ============================================================
   背景衔接自然过渡：模块(深色) -> 技能/关于/联系/页脚 雾化渐变带
   ============================================================ */
/* 渐变带覆盖整个 section：技能区承接上方深色模块(aivideo)，由深渐浅；关于/联系 浅色衔接 */
#skills::before,#about::before,#contact::before{
  content:'';position:absolute;left:0;right:0;top:0;height:100%;
  background:linear-gradient(to bottom, transparent 0%, var(--paper) 46%, var(--paper) 100%);
  pointer-events:none;z-index:1;
}
/* 技能区：纯浅色衔接（无深色块），canvas 渐变负责过渡（页脚不再叠加渐变，文字保持清晰） */
#skills,#about,#contact{position:relative}
#footer{position:relative}

/* 最后区域内容容器：半透明浅色底（文字始终清晰），位于渐变带之上 */
.skills-inner,.about-inner,.contact-inner{
  position:relative;z-index:2;
  background:rgba(244,241,234,.94);
  padding:clamp(30px,4vw,56px);
  border-radius:2px;
}



/* ============================================================
   全屏章节：模块封面 sticky 占满视口，上下模块暂时消失；
   滚动后封面释放，露出画廊 → 下一个模块
   ============================================================ */
.module-cover{position:sticky;top:0;height:100vh;min-height:100vh;z-index:5}
.module{padding-bottom:0}

/* 封面内容多时（如蒙牛三段文案）可内部滚动查看完整，不截断 */
.module-cover{overflow-y:auto;overflow-x:hidden}

/* ============================================================
   蒙牛封面：紧凑排版，一屏完整放下（不滚动）
   ============================================================ */
.module[data-theme=mengniu] .module-cover{overflow:hidden}
.module[data-theme=mengniu] .module-inner{padding:9vh 0 6vh}
.module[data-theme=mengniu] .work-title{font-size:clamp(36px,4.6vw,64px);margin:12px 0 4px}
.module[data-theme=mengniu] .work-desc{margin:6px auto;font-size:13px}
.module[data-theme=mengniu] .work-stats{margin:14px auto 6px;gap:clamp(20px,3vw,40px)}
.module[data-theme=mengniu] .work-stats .ws b{font-size:clamp(22px,2.8vw,34px)}
.module[data-theme=mengniu] .work-stats .ws span{font-size:10px;margin-top:4px}
.module[data-theme=mengniu] .mengniu-sections{gap:8px;margin:12px auto 0;max-width:52em}
.module[data-theme=mengniu] .msec h4{font-size:10px;margin-bottom:2px}
.module[data-theme=mengniu] .msec p{font-size:12px;line-height:1.7}
.module[data-theme=mengniu] .work-tags{margin:10px 0 6px}
.module[data-theme=mengniu] .ix-hint{margin-top:8px}

/* 结尾声明：上移到联系板块内，无虚化层遮挡，清晰醒目 */
.footer-statement{
  margin-top:clamp(30px,4vw,48px);padding-top:clamp(16px,2vw,22px);
  border-top:1px solid var(--line);
  font-weight:600;letter-spacing:.06em;
  font-size:clamp(13px,1.6vw,16px);color:var(--ink);
}
.footer-statement b{color:var(--accent);font-weight:700}
