/* Глитчи (2.3.1, техпроект 07 §1). Классы включает/выключает fx/glitches.js;
   клиент сам не решает, когда глитчить (решение Р-6). */

/* cursor_hide: курсор исчез */
body.fx-nocursor,
body.fx-nocursor * { cursor: none !important; }

/* window_shake: окно дрожит; амплитуда --fx-shake ставится из JS */
#win.fx-shake { animation: fx-shake 90ms steps(2, end) infinite; }
@keyframes fx-shake {
    0%   { transform: translate(var(--fx-shake, 2px), 0); }
    25%  { transform: translate(0, calc(-1 * var(--fx-shake, 2px))); }
    50%  { transform: translate(calc(-1 * var(--fx-shake, 2px)), 0); }
    75%  { transform: translate(0, var(--fx-shake, 2px)); }
    100% { transform: translate(var(--fx-shake, 2px), 0); }
}

/* font_swap: CRT-текст панели вдруг «не тем» шрифтом — с засечками */
#panel.fx-font .box,
#panel.fx-font .box-title { font-family: 'Times New Roman', Georgia, serif; }

/* text_overflow: лог вылезает за границу панели */
#log-box.fx-overflow { overflow: visible; }
#log-box.fx-overflow #log {
    overflow: visible;
    max-height: none;
    transform: translateX(14px);
}

/* screen_flicker: чёрный оверлей на 1–2 кадра */
#fx-flicker {
    position: fixed;
    inset: 0;
    z-index: 400;
    background: #000;
    pointer-events: none;
}

/* icon_swap: иконка заголовка «испортилась» */
.titlebar .title-icon.fx-swapped {
    background: repeating-linear-gradient(180deg, #c00 0 2px, #000 2px 4px, #0c6 4px 5px);
}
