/* Seiretsu ERP — global animation engine */
:root{
  --dur-instant:120ms; --dur-fast:180ms; --dur-base:250ms; --dur-medium:400ms; --dur-slow:600ms;
  --ease-standard:cubic-bezier(.25,.46,.45,.94);
  --ease-out:cubic-bezier(.16,.84,.44,1);
  --ease-spring:cubic-bezier(.34,1.56,.64,1);
}
/* keyframes library */
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes fadeUpB{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@keyframes slideIn{from{transform:translateX(100%)}to{transform:none}}
@keyframes slideTab{from{opacity:.25;transform:translateX(26px)}to{opacity:1;transform:none}}
@keyframes slideTabBack{from{opacity:.25;transform:translateX(-26px)}to{opacity:1;transform:none}}
@keyframes slideUpCard{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes popIn{0%{opacity:0;transform:scale(0)}60%{transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}
@keyframes popSoft{0%{opacity:0;transform:scale(.85)}70%{transform:scale(1.02)}100%{opacity:1;transform:scale(1)}}
@keyframes popBadge{0%{opacity:0;transform:scale(.7)}65%{transform:scale(1.05)}100%{opacity:1;transform:scale(1)}}
@keyframes popBig{0%{opacity:0;transform:scale(.5)}62%{transform:scale(1.15)}100%{opacity:1;transform:scale(1)}}
@keyframes drawLine{from{stroke-dashoffset:800}to{stroke-dashoffset:0}}
@keyframes drawLineB{from{stroke-dashoffset:800}to{stroke-dashoffset:0}}
@keyframes drawLong{from{stroke-dashoffset:2000}to{stroke-dashoffset:0}}
@keyframes drawLongB{from{stroke-dashoffset:2000}to{stroke-dashoffset:0}}
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.3}}
@keyframes idlePulse{0%,100%{opacity:.3}50%{opacity:.55}}
@keyframes mapIdle{0%,100%{opacity:1}50%{opacity:.72}}
@keyframes entitySwitch{0%{opacity:1}50%{opacity:.4;filter:blur(1px)}100%{opacity:1;filter:blur(0)}}
@keyframes entitySwitchB{0%{opacity:1}50%{opacity:.4;filter:blur(1px)}100%{opacity:1;filter:blur(0)}}
@keyframes aiReveal{from{opacity:0;transform:translateY(4px);filter:blur(2px)}to{opacity:1;transform:none;filter:blur(0)}}
@keyframes alarmIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
@keyframes alarmFlash{0%{background:rgba(209,75,46,.16)}100%{background:transparent}}
@keyframes flowDot{from{transform:translateX(0);opacity:0}15%{opacity:1}85%{opacity:1}to{transform:translateX(21px);opacity:0}}
@keyframes duePulse{0%,100%{border-left-color:rgba(214,138,31,.3)}50%{border-left-color:#D68A1F}}
@keyframes goldGlow{0%{box-shadow:0 1px 2px rgba(18,27,38,.04)}40%{box-shadow:0 0 0 3px rgba(201,146,46,.4)}100%{box-shadow:0 1px 2px rgba(18,27,38,.04)}}
@keyframes coralFlash{0%,44%,100%{box-shadow:none}22%,66%{box-shadow:0 0 0 3px rgba(217,82,75,.5)}}
@keyframes ringPulse{0%{box-shadow:0 0 0 0 rgba(75,79,196,.45)}100%{box-shadow:0 0 0 8px rgba(75,79,196,0)}}
@keyframes ringPulseAccent{0%{box-shadow:0 0 0 0 var(--ring-color,rgba(43,111,224,.45))}100%{box-shadow:0 0 0 9px transparent}}
@keyframes borderPulse{0%,100%{border-color:#E2E7EC}50%{border-color:var(--pulse-color,#2B6FE0)}}
@keyframes glowPulse{0%,100%{box-shadow:none}50%{box-shadow:0 0 0 4px var(--glow-color,rgba(176,62,140,.35))}}
@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes barGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes barGrowY{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes cellPulse{0%,100%{transform:scale(1);text-shadow:none}50%{transform:scale(1.05);text-shadow:0 0 12px var(--pulse-color,rgba(43,111,224,.5))}}
@keyframes qrWipe{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0)}}
@keyframes shimmerSweep{from{background-position:-140px 0}to{background-position:280px 0}}
@keyframes fadeCollapse{from{opacity:1}to{opacity:0}}
/* focus rings — accent inherits from --focus-accent set on each page root */
input:focus-visible,select:focus-visible,button:focus-visible,textarea:focus-visible,a:focus-visible{
  outline:2px solid var(--focus-accent,#2B6FE0);outline-offset:2px;transition:outline-color var(--dur-instant) linear;
}
/* reduced motion: collapse everything to instant/single short fades */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important;
  }
}

/* stagger system: containers opt in via data-stagger; step via --stagger (default 40ms) */
[data-stagger]>*{animation:fadeUp var(--dur-medium) var(--ease-standard) backwards}
[data-stagger]>*:nth-child(1){animation-delay:calc(0*var(--stagger,40ms))}
[data-stagger]>*:nth-child(2){animation-delay:calc(1*var(--stagger,40ms))}
[data-stagger]>*:nth-child(3){animation-delay:calc(2*var(--stagger,40ms))}
[data-stagger]>*:nth-child(4){animation-delay:calc(3*var(--stagger,40ms))}
[data-stagger]>*:nth-child(5){animation-delay:calc(4*var(--stagger,40ms))}
[data-stagger]>*:nth-child(6){animation-delay:calc(5*var(--stagger,40ms))}
[data-stagger]>*:nth-child(7){animation-delay:calc(6*var(--stagger,40ms))}
[data-stagger]>*:nth-child(8){animation-delay:calc(7*var(--stagger,40ms))}
[data-stagger]>*:nth-child(9){animation-delay:calc(8*var(--stagger,40ms))}
[data-stagger]>*:nth-child(10){animation-delay:calc(9*var(--stagger,40ms))}
[data-stagger]>*:nth-child(11){animation-delay:calc(10*var(--stagger,40ms))}
[data-stagger]>*:nth-child(12){animation-delay:calc(11*var(--stagger,40ms))}
[data-stagger]>*:nth-child(13){animation-delay:calc(12*var(--stagger,40ms))}
[data-stagger]>*:nth-child(14){animation-delay:calc(13*var(--stagger,40ms))}
[data-stagger]>*:nth-child(15){animation-delay:calc(14*var(--stagger,40ms))}
[data-stagger]>*:nth-child(16){animation-delay:calc(15*var(--stagger,40ms))}
[data-stagger]>*:nth-child(17){animation-delay:calc(16*var(--stagger,40ms))}
[data-stagger]>*:nth-child(18){animation-delay:calc(17*var(--stagger,40ms))}
[data-stagger]>*:nth-child(19){animation-delay:calc(18*var(--stagger,40ms))}
[data-stagger]>*:nth-child(20){animation-delay:calc(19*var(--stagger,40ms))}
[data-stagger]>*:nth-child(21){animation-delay:calc(20*var(--stagger,40ms))}
[data-stagger]>*:nth-child(22){animation-delay:calc(21*var(--stagger,40ms))}
[data-stagger]>*:nth-child(23){animation-delay:calc(22*var(--stagger,40ms))}
[data-stagger]>*:nth-child(24){animation-delay:calc(23*var(--stagger,40ms))}
[data-stagger]>*:nth-child(25){animation-delay:calc(24*var(--stagger,40ms))}
[data-stagger]>*:nth-child(26){animation-delay:calc(25*var(--stagger,40ms))}
[data-stagger]>*:nth-child(27){animation-delay:calc(26*var(--stagger,40ms))}
[data-stagger]>*:nth-child(28){animation-delay:calc(27*var(--stagger,40ms))}
[data-stagger]>*:nth-child(29){animation-delay:calc(28*var(--stagger,40ms))}
[data-stagger]>*:nth-child(30){animation-delay:calc(29*var(--stagger,40ms))}
