/* Full-screen preloader: the Receipts POS logo centred in an orbiting navy/orange ring.
   It is in the page markup so it covers the first paint; preloader.js fades it out when the page is ready.
   The failsafe animation hides it even if JavaScript never runs. */
.app-preloader{--pl-navy:#042861;--pl-orange:#f79626;--pl-grey:#b8c0cc;position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;padding:16px;background:radial-gradient(circle at 50% 42%,#fff 0,#f5f8fc 55%,#eaf0f8 100%);transition:opacity .3s ease,visibility .3s ease;animation:preloader-failsafe 0s linear 10s forwards}
.app-preloader.is-hidden{opacity:0;visibility:hidden;pointer-events:none}
.app-preloader .preloader-stage{position:relative;width:176px;height:176px;display:grid;place-items:center}
.app-preloader .preloader-halo{position:absolute;inset:14px;border-radius:50%;background:radial-gradient(circle,#f7962633 0,#f7962600 70%);animation:preloader-halo 2.4s ease-out infinite}
.app-preloader .preloader-ring{position:absolute;inset:0;border-radius:50%;border:3px solid #04286114;border-top-color:var(--pl-orange);border-right-color:var(--pl-orange);animation:preloader-spin 1.15s cubic-bezier(.55,.15,.45,.85) infinite}
.app-preloader .preloader-ring.inner{inset:12px;border-width:2px;border-color:transparent;border-bottom-color:var(--pl-navy);border-left-color:var(--pl-navy);animation-duration:1.7s;animation-direction:reverse;opacity:.85}
.app-preloader .preloader-logo{position:relative;width:132px;height:132px;border-radius:50%;background:#fff;box-shadow:0 10px 30px #04286121,0 0 0 1px #0428610d;display:grid;place-items:center;overflow:hidden;animation:preloader-breathe 2.4s ease-in-out infinite}
.app-preloader .preloader-logo img{max-width:none;width:100%;height:100%;object-fit:contain;transform:translateY(5%)}
.app-preloader .preloader-dots{display:flex;gap:8px;align-items:center;height:14px}
.app-preloader .preloader-dots span{width:9px;height:9px;border-radius:50%;background:var(--pl-navy);animation:preloader-bounce 1.2s ease-in-out infinite}
.app-preloader .preloader-dots span:nth-child(2){background:var(--pl-orange);animation-delay:.15s}
.app-preloader .preloader-dots span:nth-child(3){background:var(--pl-grey);animation-delay:.3s}
.app-preloader .preloader-text{margin:0;font:600 12px/1.4 system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--pl-navy);opacity:.75}
@keyframes preloader-spin{to{transform:rotate(360deg)}}
@keyframes preloader-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.045)}}
@keyframes preloader-halo{0%{transform:scale(.85);opacity:.9}100%{transform:scale(1.45);opacity:0}}
@keyframes preloader-bounce{0%,80%,100%{transform:translateY(0);opacity:.55}40%{transform:translateY(-7px);opacity:1}}
@keyframes preloader-failsafe{to{opacity:0;visibility:hidden;pointer-events:none}}
@media(max-width:480px){.app-preloader .preloader-stage{width:148px;height:148px}.app-preloader .preloader-logo{width:110px;height:110px}}
@media(prefers-reduced-motion:reduce){.app-preloader .preloader-halo,.app-preloader .preloader-ring,.app-preloader .preloader-logo,.app-preloader .preloader-dots span{animation:none}.app-preloader .preloader-ring{border-color:#04286114;border-top-color:var(--pl-orange)}.app-preloader{transition:none}}
