/* Keyframes global, efek background ambient, skeleton loader — dipakai Index.html, Admin.html & Teamsar.html */
  /* ---------- Dark mode (default): nebula galaxy statis ungu-maroon-biru + bintang ---------- */
  body::before{
    content:'';position:fixed;inset:-15%;z-index:-3;pointer-events:none;
    background-image:
      radial-gradient(ellipse 1000px 780px at 10% 2%, var(--nebula1), transparent 64%),
      radial-gradient(ellipse 850px 720px at 98% 14%, var(--nebula2), transparent 60%),
      radial-gradient(ellipse 900px 800px at 20% 104%, var(--nebula3), transparent 62%),
      radial-gradient(ellipse 760px 620px at 92% 98%, var(--nebula4), transparent 60%);
    mix-blend-mode:screen;
    transition:background 1.2s var(--ease);
  }
  /* Bintang (SVG statis, ribuan <circle> + aksen "bintang kejora" 4 sudut) — sekali paint, tidak
     ada animasi/JS sama sekali, murni background-image data-URI seperti pola grain di bawah. */
  html::before{
    content:'';position:fixed;inset:0;z-index:-2;pointer-events:none;
    background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNDAgMjQwIj48Y2lyY2xlIGN4PSIyMC4wIiBjeT0iNDEuNCIgcj0iMC42OSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjQiLz48Y2lyY2xlIGN4PSIyMjcuOCIgY3k9IjIwMi42IiByPSIwLjcyIiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zMiIvPjxjaXJjbGUgY3g9IjE5OC41IiBjeT0iNTguNSIgcj0iMC42NSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjkiLz48Y2lyY2xlIGN4PSIxMTcuNyIgY3k9IjIzMS4zIiByPSIwLjQ2IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zOSIvPjxjaXJjbGUgY3g9IjE4My45IiBjeT0iMjEuMCIgcj0iMC44NSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzEiLz48Y2lyY2xlIGN4PSIxMzAuNCIgY3k9IjcyLjUiIHI9IjAuNjMiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQ0Ii8+PGNpcmNsZSBjeD0iODMuOCIgY3k9IjE3NS45IiByPSIwLjc0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjE2NS44IiBjeT0iMTAzLjciIHI9IjAuNTIiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjMiLz48Y2lyY2xlIGN4PSI4OS43IiBjeT0iMjEyLjYiIHI9IjAuNzYiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjI1Ii8+PGNpcmNsZSBjeD0iNjMuNiIgY3k9IjEwLjYiIHI9IjAuODIiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjIxIi8+PGNpcmNsZSBjeD0iOTMuOCIgY3k9IjQ0LjEiIHI9IjAuNDUiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQ0Ii8+PGNpcmNsZSBjeD0iMTA0LjYiIGN5PSIxNTIuMSIgcj0iMC43NyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzMiLz48Y2lyY2xlIGN4PSIxOTYuNyIgY3k9IjE4NS4wIiByPSIwLjY1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zNCIvPjxjaXJjbGUgY3g9IjIxMi45IiBjeT0iMTYyLjIiIHI9IjAuNTIiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQyIi8+PGNpcmNsZSBjeD0iMTk3LjEiIGN5PSIyMjguMyIgcj0iMC42OCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzEiLz48Y2lyY2xlIGN4PSI4NC44IiBjeT0iMTQ5LjciIHI9IjAuNDQiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM4Ii8+PGNpcmNsZSBjeD0iMTY5LjgiIGN5PSIyMTAuOSIgcj0iMC40NiIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzUiLz48Y2lyY2xlIGN4PSIxMzIuMSIgY3k9IjE0My42IiByPSIwLjU1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yIi8+PGNpcmNsZSBjeD0iMjIyLjMiIGN5PSIyMTcuMCIgcj0iMC40MyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDMiLz48Y2lyY2xlIGN4PSIxNDMuMCIgY3k9IjIuMCIgcj0iMC42NyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjgiLz48Y2lyY2xlIGN4PSI4OS41IiBjeT0iMjUuNCIgcj0iMC43NyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzYiLz48Y2lyY2xlIGN4PSI1NS43IiBjeT0iMTM2LjUiIHI9IjAuNTYiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQ1Ii8+PGNpcmNsZSBjeD0iNTAuMiIgY3k9IjE2NC4yIiByPSIwLjc1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjY0LjMiIGN5PSIyMDguMCIgcj0iMC40NCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjQiLz48Y2lyY2xlIGN4PSIxNDguMiIgY3k9IjIxNi40IiByPSIwLjU2IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yNCIvPjxjaXJjbGUgY3g9IjIzLjciIGN5PSI5OC45IiByPSIwLjc4IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zNiIvPjxjaXJjbGUgY3g9IjExNi4wIiBjeT0iMTI2LjEiIHI9IjAuNDUiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjI2Ii8+PGNpcmNsZSBjeD0iNjMuNSIgY3k9IjE3Ni4wIiByPSIwLjY4IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yMSIvPjxjaXJjbGUgY3g9IjEzNS42IiBjeT0iMjMwLjEiIHI9IjAuMzkiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjI0Ii8+PGNpcmNsZSBjeD0iMjMyLjUiIGN5PSIxMjQuOSIgcj0iMC44IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MSIvPjxjaXJjbGUgY3g9IjExMi43IiBjeT0iMjM3LjciIHI9IjAuNDgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjI4Ii8+PGNpcmNsZSBjeD0iNTQuMSIgY3k9IjE4MS4xIiByPSIwLjQiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjMxIi8+PGNpcmNsZSBjeD0iMTg1LjciIGN5PSIxNzEuOSIgcj0iMC41MSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjQiLz48Y2lyY2xlIGN4PSIxOTcuNiIgY3k9IjIwMi45IiByPSIwLjY3IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zNSIvPjxjaXJjbGUgY3g9IjI0LjkiIGN5PSI4MS44IiByPSIwLjQ5IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zMyIvPjxjaXJjbGUgY3g9IjY3LjIiIGN5PSIxNDYuNiIgcj0iMC41OCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDQiLz48Y2lyY2xlIGN4PSI2Mi4yIiBjeT0iOS4yIiByPSIwLjQyIiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yNSIvPjxjaXJjbGUgY3g9IjE2NC42IiBjeT0iMTMyLjciIHI9IjAuNjQiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM4Ii8+PGNpcmNsZSBjeD0iMTY4LjYiIGN5PSI0Ny4wIiByPSIwLjQ0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjE3NC43IiBjeT0iOTUuNCIgcj0iMC43IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zOCIvPjxjaXJjbGUgY3g9IjIwLjAiIGN5PSIxMDYuOSIgcj0iMC43NCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDEiLz48Y2lyY2xlIGN4PSIxNjMuOCIgY3k9Ijc5LjYiIHI9IjAuNzgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM0Ii8+PGNpcmNsZSBjeD0iMjM5LjAiIGN5PSIyMjkuNSIgcj0iMC44IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yNSIvPjxjaXJjbGUgY3g9IjIyNy40IiBjeT0iNjMuNiIgcj0iMC40NSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzMiLz48Y2lyY2xlIGN4PSIxNjEuNyIgY3k9IjY1LjYiIHI9IjAuODQiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjIyIi8+PGNpcmNsZSBjeD0iMTk4LjgiIGN5PSIxNzMuMiIgcj0iMC43NCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzEiLz48Y2lyY2xlIGN4PSIyMTYuMiIgY3k9Ijc3LjEiIHI9IjAuNTkiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQxIi8+PGNpcmNsZSBjeD0iMjA4LjUiIGN5PSIxNC4wIiByPSIwLjY1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9Ijc3LjMiIGN5PSIzNS4zIiByPSIwLjY1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MSIvPjxjaXJjbGUgY3g9IjUxLjciIGN5PSIxODYuMiIgcj0iMC40MyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDUiLz48Y2lyY2xlIGN4PSIyNC41IiBjeT0iMzIuNyIgcj0iMC43NiIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMyIvPjxjaXJjbGUgY3g9IjE2LjkiIGN5PSI2NC4yIiByPSIwLjc5IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MSIvPjxjaXJjbGUgY3g9Ijc4LjEiIGN5PSI3LjkiIHI9IjAuNyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjMiLz48Y2lyY2xlIGN4PSIxNzEuNyIgY3k9IjEyMy4yIiByPSIwLjgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjIyIi8+PGNpcmNsZSBjeD0iMjE0LjQiIGN5PSIxNi42IiByPSIwLjY1IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yOSIvPjxjaXJjbGUgY3g9IjEzMi43IiBjeT0iNTcuNiIgcj0iMC44MiIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzMiLz48Y2lyY2xlIGN4PSIxNTcuMyIgY3k9IjExNC4wIiByPSIwLjc0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjIwLjIiIGN5PSIyMzEuMyIgcj0iMC40OSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzUiLz48Y2lyY2xlIGN4PSI0NS42IiBjeT0iODEuOSIgcj0iMC43OSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDIiLz48Y2lyY2xlIGN4PSIyMTguNiIgY3k9IjE1MS4zIiByPSIwLjU4IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zMiIvPjxjaXJjbGUgY3g9Ijg1LjIiIGN5PSIxNjIuNCIgcj0iMC41NSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMjMiLz48Y2lyY2xlIGN4PSIxNTcuNSIgY3k9Ijg2LjIiIHI9IjAuNjYiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM4Ii8+PGNpcmNsZSBjeD0iMjMzLjAiIGN5PSIyNi41IiByPSIwLjYzIiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjguOCIgY3k9IjEyOS45IiByPSIwLjQ4IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zNSIvPjxjaXJjbGUgY3g9IjE4NC42IiBjeT0iMTM3LjciIHI9IjAuNDgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjMxIi8+PGNpcmNsZSBjeD0iNTIuOCIgY3k9IjIwMi42IiByPSIwLjU0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4yNiIvPjxjaXJjbGUgY3g9IjIyMC42IiBjeT0iMTM1LjYiIHI9IjAuNjIiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQ0Ii8+PGNpcmNsZSBjeD0iMTQ5LjIiIGN5PSIxOTMuMiIgcj0iMC41MiIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuMzMiLz48Y2lyY2xlIGN4PSI2OC4zIiBjeT0iMTgyLjQiIHI9IjAuNDgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjI3Ii8+PGNpcmNsZSBjeD0iNDIuMyIgY3k9IjIxNy4xIiByPSIwLjU0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjEyNS44IiBjeT0iNDMuOCIgcj0iMS4yNSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNTEiLz48Y2lyY2xlIGN4PSIxMDguMCIgY3k9IjIyOC43IiByPSIxLjI0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MiIvPjxjaXJjbGUgY3g9IjE5OC4xIiBjeT0iMTY1LjciIHI9IjEuMzYiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM1Ii8+PGNpcmNsZSBjeD0iMjI1LjUiIGN5PSIxOTguMCIgcj0iMS4wOSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNDEiLz48Y2lyY2xlIGN4PSIxMjUuNSIgY3k9IjIzLjkiIHI9IjEuMTMiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjU0Ii8+PGNpcmNsZSBjeD0iMTc5LjUiIGN5PSIxNjAuNiIgcj0iMC45OCIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNTEiLz48Y2lyY2xlIGN4PSI1OS4yIiBjeT0iMjI0LjQiIHI9IjEuMTMiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjM1Ii8+PGNpcmNsZSBjeD0iMTMzLjMiIGN5PSIxMC40IiByPSIxLjMyIiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40NiIvPjxjaXJjbGUgY3g9IjEzMC4yIiBjeT0iMTcwLjkiIHI9IjEuMjkiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjMiLz48Y2lyY2xlIGN4PSIxMjkuNCIgY3k9IjE5NS43IiByPSIxLjMyIiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40MyIvPjxjaXJjbGUgY3g9IjIzNC45IiBjeT0iOTMuOCIgcj0iMS4yNyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNSIvPjxjaXJjbGUgY3g9Ijk0LjgiIGN5PSIyMjcuMiIgcj0iMS4zMSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNTMiLz48Y2lyY2xlIGN4PSIxNjUuNiIgY3k9IjE2LjEiIHI9IjEuMzgiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjQ5Ii8+PGNpcmNsZSBjeD0iMTc4LjkiIGN5PSIxMDEuMCIgcj0iMC45MyIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNTMiLz48Y2lyY2xlIGN4PSIyMjcuNCIgY3k9IjEwNi45IiByPSIxLjE0IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC40NCIvPjxjaXJjbGUgY3g9IjI3LjQiIGN5PSIxMy43IiByPSIxLjI2IiBmaWxsPSJ3aGl0ZSIgb3BhY2l0eT0iMC4zNyIvPjxwYXRoIGQ9Ik0yNi45MCwxNTEuMDQgTDI3LjU4LDE1My4xMiBMMjkuNjYsMTUzLjgwIEwyNy41OCwxNTQuNDggTDI2LjkwLDE1Ni41NiBMMjYuMjIsMTU0LjQ4IEwyNC4xNCwxNTMuODAgTDI2LjIyLDE1My4xMiBaIiBmaWxsPSIjZmZlMGQ1IiBvcGFjaXR5PSIwLjY5Ii8+PHBhdGggZD0iTTQzLjUwLDEzNy45MiBMNDQuMzQsMTQwLjQ2IEw0Ni44OCwxNDEuMzAgTDQ0LjM0LDE0Mi4xNCBMNDMuNTAsMTQ0LjY4IEw0Mi42NiwxNDIuMTQgTDQwLjEyLDE0MS4zMCBMNDIuNjYsMTQwLjQ2IFoiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuNjciLz48cGF0aCBkPSJNMjAzLjcwLDEyOS45NyBMMjA0LjUwLDEzMi40MCBMMjA2LjkzLDEzMy4yMCBMMjA0LjUwLDEzNC4wMCBMMjAzLjcwLDEzNi40MyBMMjAyLjkwLDEzNC4wMCBMMjAwLjQ3LDEzMy4yMCBMMjAyLjkwLDEzMi40MCBaIiBmaWxsPSIjZThlMGZmIiBvcGFjaXR5PSIwLjUiLz48L3N2Zz4=");
    background-repeat:repeat;background-size:280px 280px;
  }
  /* ---------- Light mode: putih bersih, tanpa blob maroon (sebelumnya 4 blob + drift di sini
     bikin latar terang keliatan semu merah) dan tanpa bintang -- solid --bg polos. ---------- */
  :root[data-theme="light"] body::before{display:none;}
  :root[data-theme="light"]::before{display:none;}
  /* ---------- Mode ke-3: Gelap Simple -- warna/token IDENTIK dark mode (tidak override apa pun
     di base.css, cuma "numpang" nilai :root default karena [data-theme="simple"] tidak match
     [data-theme="light"]), bedanya CUMA background dekoratif ini dimatikan semua: tanpa nebula,
     tanpa bintang, tanpa grain -- solid --bg polos. Badge/teks/tombol semua sama persis dark mode. */
  :root[data-theme="simple"] body::before,
  :root[data-theme="simple"]::before,
  :root[data-theme="simple"] body::after{
    display:none;
  }
  body::after{
    content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;
    opacity:var(--grain-opacity);mix-blend-mode:overlay;
    background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxODAnIGhlaWdodD0nMTgwJz48ZmlsdGVyIGlkPSduJz48ZmVUdXJidWxlbmNlIHR5cGU9J2ZyYWN0YWxOb2lzZScgYmFzZUZyZXF1ZW5jeT0nMC44NScgbnVtT2N0YXZlcz0nMycgc3RpdGNoVGlsZXM9J3N0aXRjaCcvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnLz48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWx0ZXI9J3VybCglMjNuKScvPjwvc3ZnPg==");
    background-size:180px 180px;
  }
  @keyframes bgDrift{
    0%{transform:translate3d(0,0,0) scale(1);}
    50%{transform:translate3d(-6%,4.5%,0) scale(1.12);}
    100%{transform:translate3d(5%,-3.5%,0) scale(1.07);}
  }
  @keyframes fadeSlideUp{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
  @keyframes fadeIn{from{opacity:0;}to{opacity:1;}}
  @keyframes popIn{from{opacity:0;transform:scale(.9);}to{opacity:1;transform:scale(1);}}
  @keyframes shimmer{0%{background-position:-300px 0;}100%{background-position:300px 0;}}
  .skel{background:linear-gradient(90deg,var(--surface) 0%,var(--surface-2) 40%,var(--surface) 80%);background-size:600px 100%;animation:shimmer 1.6s ease-in-out infinite;border-radius:8px;}

  /* Spinner + kalimat khas Morosangar, otomatis dipasang ke tiap <div class="loading"> lewat
     js/utils.js (enhanceLoadingEl_) -- lihat file itu buat pool kalimatnya. */
  @keyframes spin{to{transform:rotate(360deg);}}
  /* Spinner cuma untuk .loading yang js/utils.js tandai genuinely "masih proses" (class
     .is-inprogress ditambahkan lewat cek teks berakhiran "..." -- lihat looksInProgress_) --
     .loading polos (dipakai ulang di banyak tempat buat pesan final: error/kosong/sukses) tetap
     styling teks abu-abu senter seperti semula, TANPA spinner, lewat aturan .loading di
     admin-panel.css/client-portal.css/teamsar.css yang sudah ada sebelum fitur ini. */
  .loading.is-inprogress{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;}
  .loading.is-inprogress::before{content:'';width:26px;height:26px;border-radius:50%;border:3px solid var(--surface-2);border-top-color:var(--maroon-bright);animation:spin .8s linear infinite;}
  .loading-flavor{font-size:11px;font-style:italic;color:var(--ink-dim);opacity:.8;max-width:260px;}
