/* The existing Neomythism day/night boot curtain, from site/index.html
 * .loader and .loader.night (formerly lines785–797). Only loading shells use these rules.
 * Existing progress, completion, errors and fallbacks remain their owners. */
@font-face{font-family:"NM Loader Silkscreen";src:url("./fonts/Silkscreen-Regular.ttf") format("truetype");font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:"NM Loader VT323";src:url("./fonts/VT323-Regular.ttf") format("truetype");font-style:normal;font-weight:400;font-display:swap}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader{
  --nm-loader-bg:#f3e9d8;--nm-loader-title:#c87a92;--nm-loader-title-glow:rgba(216,90,134,.6);--nm-loader-sub:#a8907a;
  --nm-loader-lines:#755a44;--nm-loader-track:#f0e4cc;--nm-loader-low:#c8b49a;--nm-loader-high:#fffdf8;
  --nm-loader-stripe:#d85a86;--nm-loader-stripe-gap:rgba(216,90,134,.2);
  position:fixed;inset:0;z-index:100500;display:flex;flex-direction:column;align-items:center;justify-content:center;
  width:auto;height:auto;max-width:none;max-height:none;margin:0;padding:24px;box-sizing:border-box;overflow:auto;
  border:0;border-radius:0;background:var(--nm-loader-bg);color:var(--nm-loader-lines);box-shadow:none;text-shadow:none;
  transform:none;filter:none;-webkit-backdrop-filter:none;backdrop-filter:none;text-align:center;
  transition:opacity .6s ease,visibility .6s;
}
/* The root site keeps its original .night bootstrap; room documents receive
 * a loader-only clock attribute before their first paint. No ambient theme changes. */
html[data-nm-loader-night="true"] body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader,
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader.night{
  --nm-loader-bg:#1c0f26;--nm-loader-title:#f0a8c0;--nm-loader-title-glow:rgba(240,168,192,.5);--nm-loader-sub:#c6b8a2;
  --nm-loader-lines:#d8ccb8;--nm-loader-track:#2a1636;--nm-loader-low:#0d0518;--nm-loader-high:#55396a;
  --nm-loader-stripe:#e87aa0;--nm-loader-stripe-gap:rgba(232,122,160,.25);
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader::before,
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader::after{content:none}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader.hidden{opacity:0;visibility:hidden;pointer-events:none}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader[hidden]{display:none!important}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .loading-card{
  position:relative;width:auto;max-width:calc(100vw - 48px);padding:0;margin:0;border:0;border-radius:0;background:none;box-shadow:none;text-align:center;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .loader-text{
  margin:0;font:400 16px/normal "NM Loader Silkscreen","Silkscreen",monospace;letter-spacing:3px;color:var(--nm-loader-title);
  text-shadow:0 0 14px var(--nm-loader-title-glow);animation:nmLoaderBlink 1s steps(2) infinite;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader :is(#loadTitle.loader-sub,.loader-sub){
  margin:10px 0 0;font:400 14px/normal "NM Loader VT323","VT323",monospace;letter-spacing:2px;color:var(--nm-loader-sub);text-transform:none;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .boot-lines{
  margin:18px 0 0;display:flex;flex-direction:column;gap:4px;font:400 15px/normal "NM Loader VT323","VT323",monospace;
  letter-spacing:1px;color:var(--nm-loader-lines);text-align:left;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .boot-lines>div{opacity:0;animation:nmLoaderLine .2s steps(2) forwards}
html body :is(#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .boot-lines>div:nth-child(1){animation-delay:.15s}
html body :is(#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .boot-lines>div:nth-child(2){animation-delay:.55s}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader :is(#loadStatus,#loadMessage){
  min-height:0;margin:0;font:inherit;color:inherit;letter-spacing:inherit;overflow-wrap:anywhere;animation:none;opacity:1;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader .loader-bar-outer{
  box-sizing:border-box;width:min(260px,100%);height:16px;flex:none;margin:18px auto 0;padding:3px;overflow:hidden;border:0;border-radius:0;
  background:var(--nm-loader-track);box-shadow:inset 1px 1px 0 var(--nm-loader-low),inset -1px -1px 0 var(--nm-loader-high);
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader :is(#loadBar.loader-bar-inner,.loader-bar-inner){
  height:100%;width:0%;border:0;border-radius:0;box-shadow:none;
  background:repeating-linear-gradient(90deg,var(--nm-loader-stripe) 0px,var(--nm-loader-stripe) 9px,var(--nm-loader-stripe-gap) 9px,var(--nm-loader-stripe-gap) 12px);
  transition:width .18s linear;
}
/* Unknown progress keeps the same striped bar, pulsing without a fake percent. */
html body :is(#curtain,#hallMusicLoading).loader.nm-purple-loader .loader-bar-inner{width:100%;animation:nmLoaderBlink 1s steps(2) infinite}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader #loadPercent{
  position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;
}
html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader #error{
  max-width:min(620px,calc(100vw - 48px));color:#ffddea;font:400 16px/1.35 "NM Loader VT323","VT323",monospace;overflow-wrap:anywhere;
}
/* This is a brief parent status label, not a second opaque curtain over the
 * child's loading/error UI. Preserve its footprint and the dialog's exits. */
html body #hallMusicLoading.loader.nm-purple-loader{
  position:absolute;inset:auto;left:50%;top:48%;transform:translate(-50%,-50%);width:auto;max-width:calc(100vw - 48px);
  padding:20px 28px;overflow:visible;pointer-events:none;
  font:400 15px/normal "NM Loader VT323","VT323",monospace;letter-spacing:1px;
}
@keyframes nmLoaderBlink{0%,100%{opacity:1}50%{opacity:.2}}
@keyframes nmLoaderLine{to{opacity:1}}
@media(prefers-reduced-motion:reduce){
  html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader{transition:none}
  html body :is(#loader,#loading,#curtain,#hallMusicLoading).loader.nm-purple-loader :is(.loader-text,.boot-lines>div,.loader-bar-inner){animation:none;opacity:1}
}
