#app-loading{position:fixed;inset:0;z-index:9999;pointer-events:none}
#app-loading[hidden]{display:none}
.app-loading-track{position:absolute;top:0;left:0;right:0;height:4px;background:#cbded47a;overflow:hidden}
.app-loading-track>span{display:block;width:35%;height:100%;background:#347b60;box-shadow:0 0 9px #347b6066;animation:app-load-travel 1.1s ease-in-out infinite}
#app-loading::before{content:"";position:absolute;inset:0;background:#e9eee86b;backdrop-filter:blur(1px);opacity:0;transition:opacity 160ms}
.app-loading-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.96);display:flex;flex-direction:column;align-items:center;gap:16px;width:208px;max-width:calc(100vw - 40px);padding:25px 20px 21px;box-sizing:border-box;border:1px solid #dbe4d9;border-radius:28px;background:#fffffcf5;color:#244e3c;box-shadow:0 18px 60px #183c3329;font:600 13px/1.5 var(--vv-text);text-align:center;opacity:0;transition:opacity 160ms,transform 180ms}
#app-loading.show-label::before{opacity:1}
#app-loading.show-label .app-loading-label{opacity:1;transform:translate(-50%,-50%) scale(1)}
.app-loading-emblem{position:relative;width:120px;height:120px}
.app-loading-emblem img{position:absolute;inset:10px;width:100px;height:100px;border-radius:25px}
.app-loading-emblem svg{position:absolute;inset:0;width:120px;height:120px;overflow:visible}
.app-loading-outline{stroke:#dce7db;stroke-width:2}
.app-loading-stroke{stroke:#3a7656;stroke-width:3;stroke-linecap:round;stroke-dasharray:27 73;animation:app-load-outline 1.6s linear infinite}
.app-boot-spinner{display:inline-block;flex-shrink:0;width:16px;height:16px;border:2px solid #cfdfd5;border-top-color:#347b60;border-radius:50%;animation:app-load-spin .75s linear infinite}
.app-control-loading{position:relative!important;outline:2px solid #87b79d!important;outline-offset:2px}
.app-control-loading::after{content:"";position:absolute;right:4px;top:4px;width:10px;height:10px;border:2px solid #d1e5d8;border-top-color:#347b60;border-radius:50%;background:#fffffc;box-shadow:0 0 0 2px #fffffc;animation:app-load-spin .75s linear infinite;pointer-events:none}
.loading .app-boot-spinner{width:26px;height:26px;margin:0 12px -6px 0}
@keyframes app-load-travel{from{transform:translateX(-110%)}to{transform:translateX(390%)}}
@keyframes app-load-spin{to{rotate:360deg}}
@keyframes app-load-outline{to{stroke-dashoffset:-100}}
@media(prefers-reduced-motion:reduce){.app-loading-track>span{animation:none;width:100%;opacity:.65}.app-loading-stroke,.app-boot-spinner,.app-control-loading::after{animation:none}.app-loading-label,#app-loading::before{transition:none}}
@media print{#app-loading,.app-control-loading::after{display:none}.app-control-loading{outline:none!important}}
