/* ==========================================================================
   BOURGEOIS — 모션 유틸 (무의존성)
   전 효과는 prefers-reduced-motion 에서 즉시 최종 상태로 정지한다.
   ========================================================================== */

:root{ --mo-dur:.72s; --mo-shift:26px; --mo-ease:cubic-bezier(.2,.7,.3,1); }

[data-reveal]{
  opacity:0;
  transition:opacity var(--mo-dur) var(--mo-ease),transform var(--mo-dur) var(--mo-ease);
  transition-delay:var(--mo-delay,0ms);
  will-change:opacity,transform;
}
[data-reveal="up"]{transform:translateY(var(--mo-shift))}
[data-reveal="down"]{transform:translateY(calc(-1 * var(--mo-shift)))}
[data-reveal="left"]{transform:translateX(var(--mo-shift))}
[data-reveal="right"]{transform:translateX(calc(-1 * var(--mo-shift)))}
[data-reveal="zoom"]{transform:scale(.94)}
[data-reveal="fade"]{transform:none}
[data-reveal].is-in{opacity:1;transform:none}

/* 라인 마스크 (히어로 카피) */
.line-mask{overflow:hidden;display:block}
.line-mask>span{
  display:block;transform:translateY(105%);opacity:0;
  transition:transform .95s var(--mo-ease),opacity .8s ease;
  transition-delay:var(--mo-delay,0ms);
}
.line-mask.is-in>span{transform:none;opacity:1}

/* 글자별 등장 (영문 대제목) */
.char{display:inline-block;opacity:0;transform:translateY(.42em);
  transition:opacity .5s ease,transform .6s var(--mo-ease);transition-delay:var(--ch-delay,0ms)}
.is-in .char{opacity:1;transform:none}

/* 마름모 디바이더 */
.diamond i{transform:rotate(45deg) scale(.2);opacity:0;transition:transform .7s var(--mo-ease),opacity .5s ease}
.is-in .diamond i,.diamond.is-in i{transform:rotate(45deg) scale(1);opacity:1}
.diamond::before,.diamond::after{transform:scaleX(0);transition:transform .9s var(--mo-ease)}
.diamond::before{transform-origin:right}
.diamond::after{transform-origin:left}
.is-in .diamond::before,.is-in .diamond::after,.diamond.is-in::before,.diamond.is-in::after{transform:scaleX(1)}

/* 커넥터 SVG 드로잉 */
.draw path,.draw line,.draw polyline{
  stroke-dasharray:var(--len,600);stroke-dashoffset:var(--len,600);
  transition:stroke-dashoffset 1.5s var(--mo-ease);
}
.draw.is-in path,.draw.is-in line,.draw.is-in polyline{stroke-dashoffset:0}

/* hover 유틸 */
.hover-lift{transition:transform .45s var(--mo-ease),box-shadow .45s}
.hover-lift:hover{transform:translateY(-6px)}
.zoom-wrap{overflow:hidden}
.zoom-wrap img{transition:transform .85s var(--mo-ease)}
.zoom-wrap:hover img{transform:scale(1.06)}
[data-tilt]{transition:transform .35s var(--mo-ease);transform-style:preserve-3d;will-change:transform}
[data-magnetic]{transition:transform .35s var(--mo-ease)}

/* 카운트업 자리 고정 */
[data-count]{font-variant-numeric:tabular-nums}

/* 그라데이션 스윕 (와인 밴드) */
.sweep{position:relative;overflow:hidden}
.sweep::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(110deg,transparent 30%,rgba(224,201,143,.14) 48%,transparent 66%);
  transform:translateX(-120%);
}
.sweep.is-in::after{animation:sweepGo 1.7s ease .3s}
@keyframes sweepGo{to{transform:translateX(120%)}}

@media (prefers-reduced-motion:reduce){
  [data-reveal],[data-reveal].is-in{opacity:1!important;transform:none!important;transition:none!important}
  .line-mask>span,.char{opacity:1!important;transform:none!important;transition:none!important}
  .diamond i{opacity:1!important;transform:rotate(45deg) scale(1)!important;transition:none!important}
  .diamond::before,.diamond::after{transform:scaleX(1)!important;transition:none!important}
  .draw path,.draw line,.draw polyline{stroke-dashoffset:0!important;transition:none!important}
  .sweep::after{display:none}
  .hover-lift:hover,[data-tilt]{transform:none!important}
}
