/* CRM «Фундамент» · движение. Всё ≤ 320 мс; prefers-reduced-motion уважается. */

@keyframes crm-spin { to { transform: rotate(360deg); } }
@keyframes crm-shimmer { to { transform: translateX(100%); } }
@keyframes crm-check-in { from { transform: rotate(-45deg) translate(1px, -1px) scale(0); } to { transform: rotate(-45deg) translate(1px, -1px) scale(1); } }
@keyframes crm-row-flash { 0% { background: var(--crm-accent-soft-strong); } 100% { background: transparent; } }
@keyframes crm-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes crm-rise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes crm-rise-sm { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes crm-slide-left { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }
@keyframes crm-pop { from { opacity: 0; transform: scale(.98); } to { opacity: 1; transform: none; } }
@keyframes crm-toast-in { from { opacity: 0; transform: translateY(8px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes crm-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
@keyframes crm-line-run { from { transform: translateX(-100%); } to { transform: translateX(400%); } }
@keyframes crm-settle-rail { from { opacity: 0; transform: translateX(-12px); } to { opacity: 1; transform: none; } }
@keyframes crm-settle-top { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@keyframes crm-settle-main { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes crm-cal-shift-l { from { opacity: 0; transform: translateX(-24px); } to { opacity: 1; transform: none; } }
@keyframes crm-cal-shift-r { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: none; } }
@keyframes crm-bulk-in { from { opacity: 0; transform: translate(-50%, 12px); } to { opacity: 1; transform: translate(-50%, 0); } }

/* экран загрузки */
.crm-boot { position: fixed; inset: 0; z-index: 100; background: var(--crm-bg); display: grid; place-items: center; transition: opacity var(--crm-t-2) var(--crm-ease-in-out); }
.crm-boot[data-leaving="true"] { opacity: 0; pointer-events: none; }
.crm-boot__inner { display: flex; flex-direction: column; align-items: center; gap: 22px; animation: crm-pop var(--crm-t-3) var(--crm-ease-out); }
.crm-boot__lockup { display: flex; align-items: center; gap: 12px; color: var(--crm-ink-900); font-weight: 600; font-size: 20px; letter-spacing: -.01em; }
.crm-boot__mark { width: 40px; height: 40px; border-radius: 12px; background: var(--crm-accent); color: #fff; display: grid; place-items: center; font-family: var(--crm-font-mono); font-size: 22px; }
.crm-boot__sub { font-size: var(--crm-fs-12); color: var(--crm-ink-400); letter-spacing: .06em; text-transform: uppercase; }
.crm-boot__line { width: 160px; height: 2px; background: var(--crm-hair); border-radius: 1px; overflow: hidden; position: relative; }
.crm-boot__line i { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: var(--crm-accent); border-radius: 1px; transition: width var(--crm-t-3) var(--crm-ease-out); }
.crm-boot__line::after { content: ""; position: absolute; top: 0; bottom: 0; width: 25%; background: linear-gradient(90deg, transparent, var(--crm-accent-soft-strong), transparent); animation: crm-line-run 1.4s linear infinite; }
.crm-boot__status { font-size: var(--crm-fs-12); color: var(--crm-ink-500); min-height: 18px; text-align: center; }
.crm-boot__status .crm-btn { margin-left: 8px; }

/* оседание оболочки после загрузки */
.crm-app[data-settling="true"] .crm-rail { animation: crm-settle-rail var(--crm-t-3) var(--crm-ease-out) both; }
.crm-app[data-settling="true"] .crm-topbar { animation: crm-settle-top var(--crm-t-3) var(--crm-ease-out) 40ms both; }
.crm-app[data-settling="true"] .crm-view { animation: crm-settle-main var(--crm-t-3) var(--crm-ease-out) 80ms both; }

/* переходы разделов */
.crm-view[data-enter="true"] > * { animation: crm-rise var(--crm-t-2) var(--crm-ease-out) both; }
.crm-view[data-leave="true"] > * { opacity: 0; transition: opacity 80ms; }
.crm-grid__row[data-stagger] { animation: crm-rise-sm 160ms var(--crm-ease-out) both; animation-delay: calc(var(--i, 0) * 12ms); }
.crm-inspector[data-enter="true"] { animation: crm-slide-left 200ms var(--crm-ease-out) both; }
.crm-inspector__body[data-swap="true"] { animation: crm-fade-in var(--crm-t-1) both; }
.crm-inspector .crm-section[data-stagger] { animation: crm-rise-sm 180ms var(--crm-ease-out) both; animation-delay: calc(var(--i, 0) * 30ms); }
.crm-layer { animation: crm-fade-in var(--crm-t-1) both; }
.crm-layer > .crm-palette, .crm-layer > .crm-dialog { animation: crm-pop 160ms var(--crm-ease-out) both; }
.crm-popover { animation: crm-pop var(--crm-t-1) var(--crm-ease-out) both; transform-origin: top left; }
.crm-toast { animation: crm-toast-in var(--crm-t-2) var(--crm-ease-out) both; }
.crm-toast[data-leaving="true"] { opacity: 0; transform: translateY(6px); transition: opacity 140ms, transform 140ms; }
.crm-bulk { animation: crm-bulk-in 200ms var(--crm-ease-out) both; }
.crm-cal__scroll[data-shift="left"] .crm-cal__grid { animation: crm-cal-shift-l 200ms var(--crm-ease-out) both; }
.crm-cal__scroll[data-shift="right"] .crm-cal__grid { animation: crm-cal-shift-r 200ms var(--crm-ease-out) both; }
.crm-slot[data-status="live"] .crm-slot__live { width: 6px; height: 6px; border-radius: 50%; background: var(--crm-accent); display: inline-block; animation: crm-pulse 1.6s ease-in-out infinite; }
.crm-chip--swap { animation: crm-rise-sm var(--crm-t-2) var(--crm-ease-out) both; }
.crm-hbar__fill, .crm-bar > i { transition: width var(--crm-t-4) var(--crm-ease-out); }
.crm-nav__item, .crm-view-tab, .crm-tab, .crm-popover__item, .crm-palette__item { transition: background var(--crm-t-1), color var(--crm-t-1); }

@media (prefers-reduced-motion: reduce) {
  [data-crm] *, [data-crm] *::before, [data-crm] *::after { animation-duration: 1ms !important; animation-delay: 0ms !important; transition-duration: 1ms !important; }
  .crm-boot__line::after { animation: crm-pulse 1.2s ease-in-out infinite !important; }
  .crm-skeleton::after { display: none; }
  .crm-grid__row[data-stagger] { animation: none; }
}
