/* INNOTECH v51 — Client Portal Preloader */
:root{
  --portal-loader-bg:#11171b;
  --portal-loader-panel:#171f24;
  --portal-loader-line:rgba(255,255,255,.14);
  --portal-loader-text:#f3f5f6;
  --portal-loader-muted:#7f9099;
  --portal-loader-accent:#e87211;
}
.portal-preloader-v51{
  position:fixed;
  inset:0;
  z-index:99999;
  display:grid;
  place-items:center;
  background:
    linear-gradient(rgba(255,255,255,.018) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.018) 1px, transparent 1px),
    radial-gradient(circle at 50% 46%, rgba(232,114,17,.08), transparent 33%),
    var(--portal-loader-bg);
  background-size:44px 44px,44px 44px,auto,auto;
  color:var(--portal-loader-text);
  opacity:1;
  visibility:visible;
  transition:opacity .34s ease,visibility .34s ease;
  overflow:hidden;
}
.portal-preloader-v51::before,
.portal-preloader-v51::after{
  content:"";
  position:absolute;
  pointer-events:none;
}
.portal-preloader-v51::before{
  inset:22px;
  border:1px solid rgba(255,255,255,.06);
  clip-path:polygon(0 0,100% 0,100% 38px,calc(100% - 1px) 38px,calc(100% - 1px) 1px,38px 1px,38px 0,0 0,0 100%,38px 100%,38px calc(100% - 1px),1px calc(100% - 1px),1px calc(100% - 38px),0 calc(100% - 38px));
}
.portal-preloader-v51::after{
  width:260px;
  height:1px;
  top:50%;
  left:calc(50% - 130px);
  background:linear-gradient(90deg,transparent,rgba(232,114,17,.28),transparent);
  filter:blur(.2px);
  opacity:.5;
}
.portal-preloader-v51.is-leaving{
  opacity:0;
  visibility:hidden;
}
.portal-preloader-v51__core{
  position:relative;
  width:min(460px,calc(100vw - 52px));
  padding:42px 42px 36px;
  border:1px solid rgba(255,255,255,.09);
  background:linear-gradient(180deg,rgba(255,255,255,.025),rgba(255,255,255,.008));
  box-shadow:0 28px 80px rgba(0,0,0,.34);
  text-align:center;
}
.portal-preloader-v51__core::before,
.portal-preloader-v51__core::after{
  content:"";
  position:absolute;
  width:28px;
  height:28px;
  border-color:rgba(232,114,17,.72);
}
.portal-preloader-v51__core::before{
  left:-1px;top:-1px;
  border-left:1px solid;
  border-top:1px solid;
}
.portal-preloader-v51__core::after{
  right:-1px;bottom:-1px;
  border-right:1px solid;
  border-bottom:1px solid;
}
.portal-preloader-v51__eyebrow{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  margin-bottom:10px;
  color:var(--portal-loader-accent);
  font:700 10px/1.2 Arial,sans-serif;
  letter-spacing:.28em;
  text-transform:uppercase;
}
.portal-preloader-v51__eyebrow::before,
.portal-preloader-v51__eyebrow::after{
  content:"";
  width:26px;
  height:1px;
  background:rgba(232,114,17,.45);
}
.portal-preloader-v51__brand{
  margin:0;
  font:800 clamp(31px,6vw,45px)/1 Arial,sans-serif;
  letter-spacing:.12em;
  text-transform:uppercase;
}
.portal-preloader-v51__sub{
  margin-top:8px;
  color:var(--portal-loader-muted);
  font:600 10px/1.2 Arial,sans-serif;
  letter-spacing:.24em;
  text-transform:uppercase;
}
.portal-preloader-v51__track{
  position:relative;
  height:2px;
  margin:34px 0 17px;
  background:rgba(255,255,255,.09);
  overflow:hidden;
}
.portal-preloader-v51__beam{
  position:absolute;
  inset:0 auto 0 -34%;
  width:34%;
  background:linear-gradient(90deg,transparent,var(--portal-loader-accent),#ffae72,transparent);
  box-shadow:0 0 17px rgba(232,114,17,.5);
  animation:portal-v51-scan 1.28s cubic-bezier(.5,0,.3,1) infinite;
}
.portal-preloader-v51__status{
  min-height:14px;
  color:#aeb9bf;
  font:700 10px/1.2 Arial,sans-serif;
  letter-spacing:.22em;
  text-transform:uppercase;
  transition:opacity .14s ease,transform .14s ease;
}
.portal-preloader-v51__status.is-changing{
  opacity:.25;
  transform:translateY(2px);
}
.portal-preloader-v51__meta{
  display:flex;
  justify-content:space-between;
  gap:12px;
  margin-top:20px;
  padding-top:14px;
  border-top:1px solid rgba(255,255,255,.06);
  color:#56666f;
  font:600 8px/1.2 Arial,sans-serif;
  letter-spacing:.13em;
  text-transform:uppercase;
}
html.portal-v56-reveal body.portal-body-v40 .portal-main-v40{
  animation:portal-v56-reveal .36s ease-out both;
}
/* Keep the notification drawer out of the reveal animation.
   Its own translateX() controls open/closed state; animating transform here
   would force the drawer visible and block interaction. */
html.portal-v56-reveal body.portal-body-v40>.portal-notify-v40{
  animation:none;
}
@keyframes portal-v51-scan{
  0%{left:-36%;}
  70%,100%{left:102%;}
}
@keyframes portal-v56-reveal{
  from{opacity:0;}
  to{opacity:1;}
}
@media (max-width:600px){
  .portal-preloader-v51::before{inset:12px;}
  .portal-preloader-v51__core{width:calc(100vw - 34px);padding:34px 25px 29px;}
  .portal-preloader-v51__track{margin-top:28px;}
  .portal-preloader-v51__meta{font-size:7px;letter-spacing:.1em;}
}
@media (prefers-reduced-motion:reduce){
  .portal-preloader-v51__beam{animation:none;left:33%;}
  .portal-preloader-v51,.portal-preloader-v51__status{transition:none;}
  html.portal-v56-reveal body.portal-body-v40 .portal-main-v40{animation:none;}
  html.portal-v56-reveal body.portal-body-v40>.portal-notify-v40{animation:none;}
}

/* v53 — harden notification drawer state after portal preloader */
.portal-preloader-v51.is-leaving{
  pointer-events:none;
}
body.portal-body-v40 > .portal-notify-v40{
  transform:translate3d(105%,0,0)!important;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:transform .22s ease,opacity .18s ease,visibility 0s linear .22s!important;
  will-change:transform;
}
body.portal-body-v40 > .portal-notify-v40.is-open{
  transform:translate3d(0,0,0)!important;
  opacity:1;
  visibility:visible;
  pointer-events:auto;
  transition-delay:0s!important;
}


/* INNOTECH v56 — client portal fixed-sidebar hardening.
   The preloader reveal must never transform .portal-shell-v40: a transformed ancestor
   changes the containing block of position:fixed descendants and makes the sidebar scroll. */
@media (min-width:901px){
  body.portal-body-v40 .portal-shell-v40{
    transform:none!important;
    animation:none!important;
  }
  body.portal-body-v40 .portal-sidebar-v40{
    position:fixed!important;
    top:0!important;
    bottom:0!important;
    left:0!important;
    width:270px!important;
    height:100vh!important;
    max-height:100vh!important;
    overflow-y:auto!important;
    overscroll-behavior:contain;
  }
  body.portal-body-v40 .portal-main-v40{
    margin-left:270px!important;
    min-height:100vh;
  }
}
