/* fx.css — structural bits only; every site styles its own loader, cursor and progress */
html.is-loading, html.is-loading body { overflow: hidden; }
html.has-cursor, html.has-cursor a, html.has-cursor button { cursor: none; }
.cur, .cur-trail { position: fixed; left: 0; top: 0; z-index: 300; pointer-events: none; }
.cur span { position: absolute; left: 50%; top: 50%; translate: -50% -50%; white-space: nowrap; opacity: 0; transition: opacity 0.25s; }
.cur.has-label span { opacity: 1; }
.prog { position: fixed; z-index: 120; pointer-events: none; }
.word { display: inline-block; white-space: nowrap; }
.ch { display: inline-block; will-change: transform; backface-visibility: hidden; }
@media (prefers-reduced-motion: reduce) { .loader { display: none; } }
