/* Blue's lightweight opening illustration. No artificial wait. */
.blue-loader{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;background:var(--bg,#faf8f2);color:var(--text,#28271f);pointer-events:none;transition:opacity .18s ease}
.blue-loader[hidden]{display:none!important}.blue-loader.leaving{opacity:0}.blue-loader-content{text-align:center;display:grid;justify-items:center;gap:8px}.blue-loader img{width:240px;height:240px;object-fit:contain;animation:blue-hop 1.4s ease-in-out infinite;transform-origin:50% 90%}.blue-loader-shadow{width:92px;height:10px;background:#8c74592b;border-radius:50%;filter:blur(3px);animation:blue-shadow 1.4s ease-in-out infinite}.blue-loader p{margin:16px 0 0;font-size:22px;font-weight:500}.blue-loader-dots{font-size:22px;letter-spacing:6px;color:#bf951c;animation:blue-dots 1s ease-in-out infinite}
@keyframes blue-hop{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-12px) rotate(2deg)}}@keyframes blue-shadow{50%{transform:scale(.8);opacity:.55}}@keyframes blue-dots{50%{opacity:.35}}
@media(prefers-reduced-motion:reduce){.blue-loader,.blue-loader *{animation:none!important;transition:none!important}}

.blue-loader-progress{display:grid;justify-items:center;gap:10px;width:150px;margin-top:8px}.blue-loader-progress progress{width:150px;height:5px;appearance:none;border:0;border-radius:5px;overflow:hidden;background:var(--surface2)}.blue-loader-progress progress::-webkit-progress-bar{background:var(--surface2)}.blue-loader-progress progress::-webkit-progress-value{background:#f4c945;border-radius:5px}.blue-loader-progress progress::-moz-progress-bar{background:#f4c945}.blue-loader-progress span{font-size:13px;color:var(--muted)}

/* Action-only veil: keep the page visible underneath. */
.blue-loader{background:#0008;backdrop-filter:blur(2px);color:white;pointer-events:auto}.blue-loader-content{padding:24px}.blue-loader img{width:160px;height:160px}.blue-loader-progress span{color:white}.blue-loader-progress progress{background:#ffffff30}.blue-loader-progress progress:indeterminate{animation:blue-dots 1s ease-in-out infinite}

/* A softer bounce with a matching ground shadow. */
.blue-loader img{animation:blue-play 1.6s ease-in-out infinite}
.blue-loader-shadow{animation:blue-ground 1.6s ease-in-out infinite}
@keyframes blue-play{0%,100%{transform:translateY(0) rotate(-3deg)}25%{transform:translateY(-8px) rotate(1deg) scale(.98,1.02)}50%{transform:translateY(-14px) rotate(3deg)}75%{transform:translateY(-4px) scale(1.02,.98)}}
@keyframes blue-ground{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.72);opacity:.45}}
@media(prefers-reduced-motion:reduce){.blue-loader img,.blue-loader-shadow{animation:none!important}}
