/* AudioFlow 动画规范 v2：六页共享令牌与降级规则。 */
@view-transition{navigation:auto}
.side{view-transition-name:side}
.nav-item.active{view-transition-name:nav-pill}
::view-transition-group(nav-pill){animation-duration:.38s;animation-timing-function:cubic-bezier(.3,.7,.25,1)}
::view-transition-old(side),::view-transition-new(side){animation:none}
::view-transition-old(root),::view-transition-new(root){
  animation-duration:.3s;animation-timing-function:cubic-bezier(.2,.7,.25,1)
}

.page-fade{animation:af-page-in .32s cubic-bezier(.2,.7,.25,1) both}
@keyframes af-page-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.page-leaving{opacity:0;transform:translateY(6px);transition:opacity .17s ease,transform .17s ease}

.pane-out{opacity:0;transform:translateY(4px)}
.pane-pre-in{opacity:0;transform:translateY(-6px)}
.seg-thumb,.tabs-thumb{
  transition:left .28s cubic-bezier(.32,1.35,.45,1),width .28s cubic-bezier(.32,1.35,.45,1),transform .28s cubic-bezier(.32,1.35,.45,1)
}

.export-card{transition:transform .28s cubic-bezier(.2,.9,.25,1)}
.quota-bar i{transition:width .35s ease}

/* 统一按钮按压令牌；共享样式最后加载，覆盖页面里残留的不一致时长。 */
button:not(:disabled){
  transition-property:transform,box-shadow,color,background-color;
  transition-duration:.12s,.12s,.18s,.2s;
}
button:not(:disabled):active{transform:scale(.98)}
button:not(:disabled):active{box-shadow:var(--press-sm)}

/* 转换失败与其他异常灯统一为规范中的 1.1s 红色呼吸。 */
.lamp.st-failed i{animation:softblink 1.1s ease-in-out infinite}

/* 12 行以后与第 12 行同帧，避免长列表从第 13 行重新从 0ms 开始。 */
.stagger>*:nth-child(n+13),.stagger-tr tr:nth-child(n+13){animation-delay:385ms}
.af-no-enter{animation:none!important}

/* 真实合成完成后的结果内容按 35ms 依次入场。 */
@keyframes af-result-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.af-result-enter>*{animation:af-result-in .34s cubic-bezier(.2,.7,.25,1) both}
.af-result-enter>*:nth-child(1){animation-delay:0ms}
.af-result-enter>*:nth-child(2){animation-delay:35ms}
.af-result-enter>*:nth-child(3){animation-delay:70ms}
.af-result-enter>*:nth-child(4){animation-delay:105ms}

@media (prefers-reduced-motion:reduce){
  ::view-transition-group(nav-pill),::view-transition-old(root),::view-transition-new(root){
    animation-duration:.1s;animation-timing-function:ease
  }
  .brand-name{animation:none!important;background-position:50% 50%!important}
  .page-fade{animation:af-page-in-reduced .1s ease both}
  @keyframes af-page-in-reduced{from{opacity:0}to{opacity:1}}
  .page-leaving{transform:none;transition:opacity .1s ease}
  .pane-out,.pane-pre-in{transform:none}
  #paneLogin,#paneReg,
  #pageTts,#pageExcel,#singlePanel,#mixPanel,
  #tabAccounts,#tabAudit,#tabVoices,#tabAnalytics,#tabFeedback{
    transition:opacity .1s ease!important
  }
  .seg-thumb,.tabs-thumb{transition:left .1s ease,width .1s ease,transform .1s ease!important}
  .stagger>*,.stagger-tr tr{animation:none!important}
  .af-result-enter>*,.enter{animation:none!important;opacity:1!important;transform:none!important}
  .brand-name,.srv-lamp,.pill-lamp,.lamp i,.e-lamp,.rec-dot,
  .sk,.wave-sk i,.spin i,.gen-inline i,.empty-icon,.tape-line::after{
    animation:none!important
  }
  .srv-lamp,.pill-lamp,.lamp i,.e-lamp,.rec-dot,.gen-status .lamp-dot,.import-check .lamp-dot{opacity:.65}
  .sk,.wave-sk i{opacity:.72}
  .counter .dig i{transition:none!important}
  .modal-mask,.drawer-mask{transition:opacity .1s!important}
  .modal{transform:none;transition:opacity .1s!important}
  .drawer,.export-card{transition:transform .1s ease!important}
}
