/* Initial loading screen: independent of the JavaScript application. */
.boot-screen{--boot-bg:#f5f7f6;--boot-text:#16211e;--boot-muted:#6b7773;--boot-accent:#087f74;--boot-track:#dfe8e5;--boot-card:#fff;--boot-border:#e2e8e6;
  position:relative;min-height:100svh;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:32px 24px;
  background:var(--boot-bg);color:var(--boot-text);font:16px/1.5 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",system-ui,sans-serif;text-align:center;-webkit-font-smoothing:antialiased}
body:has(.boot-screen){margin:0;background:var(--boot-bg,#f5f7f6)}
.boot-screen__brand{display:flex;flex-direction:column;align-items:center;gap:14px;animation:boot-in .5s ease-out both}
.boot-screen__mark{display:grid;place-items:center;width:64px;height:64px;border-radius:18px;color:#fff;
  background:linear-gradient(145deg,#0fa192,#076a61);box-shadow:0 10px 30px -10px rgba(8,127,116,.55),inset 0 1px 0 rgba(255,255,255,.25);animation:boot-breathe 2.4s ease-in-out infinite}
.boot-screen h1{margin:0;font-size:24px;font-weight:650;letter-spacing:-.4px}
.boot-screen__progress{position:relative;width:132px;height:4px;border-radius:4px;background:var(--boot-track);overflow:hidden;animation:boot-in .5s .1s ease-out both}
.boot-screen__progress span{position:absolute;inset:0 auto 0 0;width:40%;border-radius:4px;background:var(--boot-accent);animation:boot-slide 1.3s cubic-bezier(.65,0,.35,1) infinite}
.boot-screen__caption{margin:0;color:var(--boot-muted);font-size:14px;animation:boot-in .5s .2s ease-out both}
.boot-screen__slow{position:absolute;left:50%;bottom:max(32px,12vh);transform:translateX(-50%);width:min(340px,calc(100% - 48px));box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:14px;padding:18px 20px;border:1px solid var(--boot-border);border-radius:16px;background:var(--boot-card);
  visibility:hidden;opacity:0;animation:boot-reveal .4s 12s ease-out forwards}
.boot-screen__slow p{margin:0;color:var(--boot-muted);font-size:14px}
.boot-screen__retry{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:0 22px;border-radius:10px;background:var(--boot-accent);color:#fff;text-decoration:none;font-size:14px;font-weight:600}
.boot-screen__retry:focus-visible{outline:3px solid #36afa2;outline-offset:3px}
/* The app's copy of this screen takes over without replaying the entrance, so nothing moves. */
.boot-screen--live .boot-screen__brand,.boot-screen--live .boot-screen__progress,.boot-screen--live .boot-screen__log{animation:none}
/* Steps under the bar, like a console: new lines come in at the bottom, older ones fade out upwards. */
.boot-screen__log{display:flex;flex-direction:column;justify-content:flex-end;gap:2px;width:min(320px,100%);height:4.1em;overflow:hidden;color:var(--boot-muted);font-size:13px;line-height:1.35;
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 70%);mask-image:linear-gradient(to bottom,transparent 0,#000 70%);animation:boot-in .5s .2s ease-out both}
.boot-screen__log p{margin:0;animation:boot-line .35s ease-out both}
.boot-screen__log p:last-child{color:var(--boot-text)}
.boot-screen__log p:first-child{animation:none}
.boot-screen__log .boot-screen__error{color:#b3261e}
.boot-screen__progress--stopped span{animation:none;width:100%;background:#d9a19c}
button.boot-screen__retry{border:0;cursor:pointer;font:inherit;font-size:14px;font-weight:600}
@keyframes boot-line{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes boot-slide{0%{transform:translateX(-100%)}100%{transform:translateX(250%)}}
@keyframes boot-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.04)}}
@keyframes boot-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes boot-reveal{to{visibility:visible;opacity:1}}
@media(prefers-reduced-motion:reduce){.boot-screen__mark,.boot-screen__progress span,.boot-screen__brand,.boot-screen__progress,.boot-screen__caption,.boot-screen__log,.boot-screen__log p{animation:none}.boot-screen__progress span{width:100%;opacity:.5}}
