/* BUILT brand motion: the particle B as layered sprites animated only with transform and
 * opacity, so it runs on the compositor and keeps moving even while the app is busy
 * restoring a session (a canvas loop freezes whenever the main thread is blocked).
 * Used by the session-restore screen and the Business app welcome screen. */
.bxm-field{position:absolute;inset:-10% 0 0;overflow:hidden;pointer-events:none;opacity:.9;
  -webkit-mask-image:radial-gradient(120% 90% at 50% 45%,#000 30%,transparent 78%);mask-image:radial-gradient(120% 90% at 50% 45%,#000 30%,transparent 78%)}
.bxm-field i{position:absolute;left:0;right:0;top:0;height:calc(100% + 500px);background:url(assets/brand-motion/field.png) 0 0/500px 500px repeat;
  will-change:transform;animation:bxm-drift 48s linear infinite}
.bxm-glow{position:absolute;left:50%;top:var(--bxm-y,44%);width:min(130vw,980px);aspect-ratio:1.6;border-radius:50%;pointer-events:none;
  background:radial-gradient(closest-side,rgba(255,107,36,.20),rgba(255,107,36,.07) 46%,transparent 72%);
  transform:translate(-50%,-50%);will-change:transform,opacity;animation:bxm-glow 5.6s ease-in-out infinite}
.bxm-stage{position:relative;width:min(76vw,440px);aspect-ratio:920/492;perspective:1100px;pointer-events:none}
.bxm-in{position:absolute;inset:0;transform-style:preserve-3d;animation:bxm-in 1.5s cubic-bezier(.16,1,.3,1) both}
.bxm-rot{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform;animation:bxm-sway 8.5s ease-in-out infinite alternate}
.bxm-rot>i{position:absolute;inset:0;background:center/contain no-repeat;backface-visibility:hidden;will-change:transform,opacity}
.bxm-rot>i::after{content:"";position:absolute;inset:0;background:inherit;opacity:0;will-change:opacity}
.bxm-rot>.bxm-l1{background-image:url(assets/brand-motion/b-back.png);transform:translateZ(-34px) scale(1.04);animation:bxm-a1 1.7s cubic-bezier(.16,1,.3,1) both}
.bxm-rot>.bxm-l2{background-image:url(assets/brand-motion/b-mid.png);transform:translateZ(0);animation:bxm-a2 1.5s cubic-bezier(.16,1,.3,1) .05s both}
.bxm-rot>.bxm-l3{background-image:url(assets/brand-motion/b-front.png);transform:translateZ(30px) scale(.97);animation:bxm-a3 1.3s cubic-bezier(.16,1,.3,1) .1s both}
.bxm-rot>.bxm-l1::after{animation:bxm-twinkle 3.2s ease-in-out 1.6s infinite}
.bxm-rot>.bxm-l2::after{animation:bxm-twinkle 2.6s ease-in-out 2.1s infinite}
.bxm-rot>.bxm-l3::after{animation:bxm-twinkle 3.8s ease-in-out 1.8s infinite}
@keyframes bxm-drift{to{transform:translate3d(0,-500px,0)}}
@keyframes bxm-glow{0%,100%{opacity:.75;transform:translate(-50%,-50%) scale(.96)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.04)}}
@keyframes bxm-in{from{opacity:0;transform:scale(.86)}to{opacity:1;transform:none}}
@keyframes bxm-sway{from{transform:rotateY(-15deg) rotateX(4deg)}to{transform:rotateY(15deg) rotateX(-3deg)}}
@keyframes bxm-a1{from{opacity:0;transform:translateZ(-34px) scale(1.9) rotate(-8deg)}to{opacity:1;transform:translateZ(-34px) scale(1.04)}}
@keyframes bxm-a2{from{opacity:0;transform:translateZ(0) scale(2.3) rotate(6deg)}to{opacity:1;transform:translateZ(0)}}
@keyframes bxm-a3{from{opacity:0;transform:translateZ(30px) scale(2.8) rotate(-4deg)}to{opacity:1;transform:translateZ(30px) scale(.97)}}
@keyframes bxm-twinkle{0%,100%{opacity:0}50%{opacity:.55}}
@media (prefers-reduced-motion:reduce){
  .bxm-field i,.bxm-glow,.bxm-in,.bxm-rot,.bxm-rot>i,.bxm-rot>i::after{animation:none!important}
  .bxm-rot>i{opacity:1}
}

/* ------------------------------------------------------------------ session restore */
#bxRestore{display:none}
#bxRestore.is-on,html.bx-restoring #bxRestore,html.bx-restore-native #bxRestore{display:flex}
.bxr-screen{position:fixed;inset:0;z-index:999990;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;
  background:#050505;color:#a3a3a8;font-family:"Archivo","Inter",system-ui,-apple-system,sans-serif;transition:opacity .45s ease;-webkit-user-select:none;user-select:none}
.bxr-screen.is-leaving{opacity:0;pointer-events:none}
.bxr-screen .bxm-stage{margin-top:-6vh}
.bxr-copy{position:relative;display:grid;justify-items:center;gap:14px;margin-top:34px}
.bxr-text{margin:0;font:600 12px/1.4 "Archivo",system-ui,-apple-system,sans-serif;letter-spacing:.2em;text-transform:uppercase;color:#b4b4b9}
.bxr-bar{position:relative;width:min(200px,56vw);height:2px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.bxr-bar i{position:absolute;left:0;top:0;bottom:0;width:36%;border-radius:2px;background:linear-gradient(90deg,transparent,#ff6b24,#ffb06e);
  box-shadow:0 0 12px rgba(255,107,36,.65);will-change:transform;animation:bxr-sweep 1.35s cubic-bezier(.45,.05,.25,1) infinite}
.bxr-brand{position:absolute;left:0;right:0;bottom:calc(28px + env(safe-area-inset-bottom));margin:0;text-align:center;font:700 10.5px/1 "Archivo",system-ui,sans-serif;letter-spacing:.32em;color:#55555b}
.bxr-brand b{color:#ff6b24;font-weight:800}
.bxr-retry{margin-top:4px;min-height:40px;padding:0 18px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:#fff;font:600 13px/1 "Archivo",system-ui,sans-serif}
@keyframes bxr-sweep{from{transform:translateX(-110%)}to{transform:translateX(290%)}}
@media (prefers-reduced-motion:reduce){.bxr-bar i{animation:none;transform:translateX(90%)}}
/* While a stored session restores, only the restore screen is visible (the native intro may sit above it). */
html.bx-restore-native,html.bx-restore-native body{background:#050505!important}
html.bx-restore-native body>*:not(#bxRestore):not(#builtIntro){visibility:hidden!important}
/* Older restore placeholders adopt the same screen so nothing different ever flashes. */
body[data-built-client="business"] .built-session-wait.bxr-screen,
body[data-built-client="business"] .built-biometric-restore-v49.bxr-screen{display:flex}
body[data-built-client="business"] .built-biometric-restore-v49.bxr-screen[hidden]{display:none}
body[data-built-client="business"] .built-biometric-restore-v49.bxr-screen>img{display:none}
body[data-built-client="business"] .built-biometric-restore-v49.bxr-screen>p{order:3;margin:22px 0 0;font:600 12px/1.4 "Archivo",system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:#b4b4b9;text-align:center;max-width:300px}
body[data-built-client="business"] .built-biometric-restore-v49.bxr-screen>button{order:4;margin-top:16px}
/* A drawn "open" arrow (iOS renders the ↗ character as an emoji tile). */
.bx-arrow{display:inline-block;width:.85em;height:.85em;margin-left:.35em;vertical-align:-.08em;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7M9 7h8v8'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7M9 7h8v8'/%3E%3C/svg%3E") center/contain no-repeat}
