/* モーション共通。参考: motion-reference.takayustudio.jp（soft-rise / type-mask / fade-slide / blur-resolve / 段差追従）
   - transform / opacity / clip-path / filter のみ。レイアウトは動かさない（CLSゼロ）
   - 初期非表示は html.js（JS有効時）に限定。クローラー・JS無効環境は静止表示
   - prefers-reduced-motion: reduce ではすべて無効 */
.mo-progress{position:fixed;left:0;top:0;width:100%;height:3px;background:#304B9E;transform-origin:left;transform:scaleX(0);z-index:110;pointer-events:none}
.btn{transition:background-color .15s,color .15s,border-color .15s,transform .15s cubic-bezier(.33,1,.68,1)}
.btn:active{transform:scale(.97)}
.tile,a.card,.related a,.row{transition:border-color .15s,box-shadow .2s cubic-bezier(.33,1,.68,1),transform .2s cubic-bezier(.33,1,.68,1)}
@media (hover:hover){
  .tile:hover,a.card:hover,.related a:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(48,75,158,.10)}
}
@media (prefers-reduced-motion:no-preference){
  /* ソフトライズ（soft-rise 900ms easeOutSine）: 上昇しながらぼけと透明感が解ける。FV・下層タイトル */
  html.js .mo-rise{opacity:0;transform:translateY(16px);filter:blur(5px);animation:moRise .9s cubic-bezier(.33,1,.68,1) forwards;animation-delay:calc(var(--d,0)*1ms)}
  @keyframes moRise{to{opacity:1;transform:none;filter:blur(0)}}
  /* 行マスクアップ（type-mask 620ms easeOutCubic）: 見出しが下から立ち上がる */
  html.js .mo-mask{clip-path:inset(0 0 100% 0);transform:translateY(10px);transition:clip-path .62s cubic-bezier(.33,1,.68,1),transform .62s cubic-bezier(.33,1,.68,1)}
  html.js .mo-mask.is-in{clip-path:inset(-4px 0 -4px 0);transform:none}
  /* フェード＋スライド（fade-slide 600ms easeOutCubic）: ブロック単位 */
  html.js .mo-fade{opacity:0;transform:translateY(14px);transition:opacity .6s cubic-bezier(.33,1,.68,1),transform .6s cubic-bezier(.33,1,.68,1)}
  html.js .mo-fade.is-in{opacity:1;transform:none}
  /* 段差追従（stagger）: 子要素が60ms間隔で整列 */
  html.js .stagger>*{opacity:0;transform:translateY(14px);transition:opacity .55s cubic-bezier(.33,1,.68,1),transform .55s cubic-bezier(.33,1,.68,1);transition-delay:calc(min(var(--i,0),11)*60ms)}
  html.js .stagger.is-in>*{opacity:1;transform:none}
  /* ブラー解像（blur-resolve 820ms easeOutSine）: 数値がぼけから結像する */
  html.js .mo-blur{opacity:0;filter:blur(8px);transition:opacity .82s ease-out,filter .82s ease-out;transition-delay:calc(var(--i,0)*90ms + 200ms)}
  html.js .mo-blur.is-in,html.js .is-in .mo-blur{opacity:1;filter:blur(0)}
  /* 棒グラフ・幅の伸長 */
  html.js .mo-grow{transform:scaleX(0);transform-origin:left center;transition:transform .9s cubic-bezier(.33,1,.68,1) .15s}
  html.js .mo-grow.is-in,html.js .is-in .mo-grow{transform:scaleX(1)}
}
@media (prefers-reduced-motion:reduce){
  .mo-progress{display:none}
  .btn,.tile,a.card,.related a,.row{transition:none}
  .btn:active,.tile:hover,a.card:hover,.related a:hover{transform:none}
}
