/* MicroLink Global Preloader V3 / Progressive V7
 * Canonical single-icon readiness gate for every full-page surface.
 * Exactly one MicroLink icon is rendered. Readiness progress is drawn as a thin
 * ring around that same icon plus a numeric percentage; there is no second icon.
 * Application content stays concealed until the gate reaches completion.
 */
body.ml-ui-preloader-lock{overflow:hidden!important}

body.ml-ui-loading:not(.ml-ui-revealing)>*:not(#mlGlobalPreloader):not(#appBootScreen){
  visibility:hidden;opacity:0;pointer-events:none;
  animation:ml-preloader-v3-content-failsafe 0s linear 12s forwards
}
body.ml-ui-loading:not(.ml-ui-revealing){min-height:100dvh}
body.ml-ui-loading.ml-ui-revealing>*:not(#mlGlobalPreloader):not(#appBootScreen){
  visibility:visible;opacity:1;pointer-events:auto;animation:none
}

/* First-paint fallback. It owns the icon only until the canonical DOM loader is
 * mounted. Chat already ships its loader in the initial HTML, so the fallback
 * icon is explicitly disabled there to prevent double rendering. */
body.ml-ui-loading::before{
  content:"";position:fixed;inset:0;z-index:2147483646;display:block;
  pointer-events:auto;background:transparent!important;opacity:1;visibility:visible;
  transition:opacity .24s ease,visibility .24s ease;
  animation:ml-preloader-v3-failsafe 0s linear 12s forwards
}
body.ml-ui-loading::after{
  content:"";position:fixed;left:50%;top:50%;z-index:2147483647;display:block;
  width:56px;height:56px;margin:-28px 0 0 -28px;pointer-events:none;
  border:0!important;border-radius:0!important;
  background:transparent url("../brand/microLinkFavicon.png") center/44px 44px no-repeat!important;
  box-shadow:none!important;outline:0!important;filter:none!important;
  opacity:1;visibility:visible;
  animation:ml-preloader-v3-icon-pulse 1.25s ease-in-out infinite,ml-preloader-v3-failsafe 0s linear 12s forwards;
  transition:opacity .2s ease,visibility .2s ease,transform .2s ease
}
body.chat-page.ml-ui-loading::after{display:none!important}
body.ml-ui-preloader-mounted::before,body.ml-ui-preloader-mounted::after,
body.ml-ui-loading.ml-ui-revealing::before,body.ml-ui-loading.ml-ui-revealing::after{
  opacity:0!important;visibility:hidden!important;pointer-events:none!important
}

.ml-global-preloader{
  position:fixed;inset:0;z-index:2147483647;display:grid;place-items:center;
  width:100%;height:100%;min-height:100dvh;
  padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));
  box-sizing:border-box;pointer-events:auto;background:transparent!important;
  opacity:1;visibility:visible;transition:opacity .24s ease,visibility .24s ease,transform .24s ease;
  animation:ml-preloader-v3-overlay-failsafe 0s linear 12s forwards
}
.ml-global-preloader-card{
  width:auto;min-height:0;margin:0;padding:0;border:0!important;border-radius:0!important;
  background:transparent!important;box-shadow:none!important;
  -webkit-backdrop-filter:none!important;backdrop-filter:none!important;
  display:grid;place-items:center;text-align:center;transform:translateZ(0)
}
.ml-global-preloader-mark-wrap{
  position:relative;width:56px;height:56px;display:grid;place-items:center;margin:0
}
.ml-global-preloader-mark-wrap::before,.ml-global-preloader-mark-wrap::after{content:none!important;display:none!important}
.ml-global-preloader-mark{
  --ml-preloader-progress:8;
  position:relative;display:block;width:56px;height:56px;margin:0;border:0!important;border-radius:50%!important;
  background:transparent url("../brand/microLinkFavicon.png") center/44px 44px no-repeat!important;
  box-shadow:none!important;outline:0!important;filter:none!important;
  animation:ml-preloader-v3-icon-pulse 1.25s ease-in-out infinite;
  transform-origin:center center;isolation:isolate
}
/* Progress belongs to the same icon: one ring + one numeric percentage, never a second mark. */
.ml-global-preloader-mark::before{
  content:"";position:absolute;inset:-7px;z-index:-1;border-radius:50%;pointer-events:none;
  background:conic-gradient(#1769ff calc(var(--ml-preloader-progress) * 1%),rgba(23,105,255,.12) 0);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.4px));
  mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.4px))
}
.ml-global-preloader-mark::after{
  content:attr(data-progress-label);position:absolute;left:50%;top:calc(100% + 13px);transform:translateX(-50%);
  min-width:42px;text-align:center;font:700 11px/1.15 system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:.02em;
  color:#50657d;white-space:nowrap;pointer-events:none
}
.ml-global-preloader-title,.ml-global-preloader-status,.ml-global-preloader-track{display:none!important}
.ml-global-preloader-track::before,.ml-global-preloader-track::after{content:none!important;display:none!important}
body.ml-ui-revealing .ml-global-preloader,.ml-global-preloader.is-ready,
body.chat-page #appBootScreen.is-ready{
  opacity:0!important;visibility:hidden!important;pointer-events:none!important;transform:scale(.985)!important
}

/* Chat uses exactly the same single mark, but its readiness controller differs. */
body.chat-page #appBootScreen{background:transparent!important;overflow:hidden!important}
body.chat-page #appBootScreen .app-boot-card{background:transparent!important;border:0!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
body.chat-page #appBootScreen .app-boot-logo{background-color:transparent!important;box-shadow:none!important;border:0!important}

@keyframes ml-preloader-v3-icon-pulse{
  0%,100%{transform:scale(.94);opacity:.72}
  50%{transform:scale(1);opacity:1}
}
@keyframes ml-preloader-v3-content-failsafe{to{visibility:visible;opacity:1;pointer-events:auto}}
@keyframes ml-preloader-v3-overlay-failsafe{to{opacity:0;visibility:hidden;pointer-events:none}}
@keyframes ml-preloader-v3-failsafe{to{opacity:0;visibility:hidden;pointer-events:none}}
@media(prefers-reduced-motion:reduce){
  body.ml-ui-loading::after{animation:ml-preloader-v3-failsafe 0s linear 12s forwards!important}
  .ml-global-preloader-mark{animation:none!important}
}
