/* ---------- FILM GRAIN(環境層)---------- */
  #grain{position:fixed;left:-50%;top:-50%;width:200%;height:200%;pointer-events:none;z-index:30;
    opacity:.055;mix-blend-mode:soft-light;
    background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)'/%3E%3C/svg%3E");
    animation:grainShift .9s steps(1) infinite}
  @keyframes grainShift{
    0%,100%{transform:translate(0,0)}
    12%{transform:translate(-2%,1%)}
    25%{transform:translate(1%,-2%)}
    37%{transform:translate(-1%,2%)}
    50%{transform:translate(2%,1%)}
    62%{transform:translate(-2%,-1%)}
    75%{transform:translate(1%,2%)}
    87%{transform:translate(2%,-2%)}
  }

  /* ---------- CINEMATIC ENTRANCE ----------
     編排:標題先進 → 停一拍 → 內容群跟進(不等距,分兩群)
     進場 easeOutExpo 長尾減速;進完場後畫面靜止 */
  @keyframes riseIn{
    from{opacity:0;transform:translateY(24px)}
    to{opacity:1;transform:none}
  }
  .slide.cur>*:not(.notes):not(canvas):not(.frag):not(.flexcol):not(.inner):not(.bgart),
  .slide.cur .flexcol>*:not(.frag),
  .slide.cur .inner>*:not(.frag){animation:riseIn .55s cubic-bezier(.16,1,.3,1) both}
  .slide.cur>*:nth-child(2),.slide.cur .flexcol>*:nth-child(2),.slide.cur .inner>*:nth-child(2){animation-delay:.07s}
  .slide.cur>*:nth-child(3),.slide.cur .flexcol>*:nth-child(3),.slide.cur .inner>*:nth-child(3){animation-delay:.34s;animation-duration:.6s}
  .slide.cur>*:nth-child(4),.slide.cur .flexcol>*:nth-child(4),.slide.cur .inner>*:nth-child(4){animation-delay:.42s;animation-duration:.6s}
  .slide.cur>*:nth-child(5),.slide.cur .flexcol>*:nth-child(5),.slide.cur .inner>*:nth-child(5){animation-delay:.50s;animation-duration:.6s}
  .slide.divider.cur>*{animation-duration:1.1s}
  .slide.divider.cur>*:nth-child(2){animation-delay:.25s}
  .slide.divider.cur>*:nth-child(3){animation-delay:.55s}

  

/* ---------- FRAGMENTS ---------- */
  .frag{opacity:0;transform:translateY(14px);
    transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .5s cubic-bezier(.16,1,.3,1)}
  .frag.on{opacity:1;transform:none}

  

@media(prefers-reduced-motion:reduce){
    *{transition:none!important;animation:none!important}
  }
