DoL Companion Panel

Floating QoL panel, stat controls & variable tools for Degrees of Lewdity

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         DoL Companion Panel
// @namespace    https://github.com/Zenix-Al/DoL-Companion-Panel
// @version      3.0.0
// @description  Floating QoL panel, stat controls & variable tools for Degrees of Lewdity
// @author       Zenix-Al
// @match        https://vanilla.dolmods.net/*
// @match        https://dolp.dolmods.net/*
// @match        https://*.dolmods.net/*
// @match        file:///*.html
// @match        file:///*.htm
// @icon         https://f95zone.to/data/avatars/l/1963/1963870.jpg
// @run-at       document-idle
// @grant        unsafeWindow
// @license      GPL-3.0-or-later
// ==/UserScript==
// ------------------------------------------------------------
// Built on 2026-09-05 18:00:38 UTC -- AUTO-GENERATED, edit from /src and rebuild
// Build mode: release
// Artifact: regular
// Logs: debugLog call sites stripped where possible
// ------------------------------------------------------------
(() => {
  var __defProp = Object.defineProperty;
  var __export = (target, all) => {
    for (var name in all)
      __defProp(target, name, { get: all[name], enumerable: true });
  };

  // src/constants/ui.js
  var SHADOW_HOST_ID = "dol-cheatplus-host";
  var GAME_VERSION_ELEMENT_ID = "gameVersionDisplay2";
  var CHEAT_ROOT_ID = "cheat";

  // src/core/feature-factory.js
  function safeInvoke(featureId, phase, fn, ctx) {
    if (typeof fn !== "function") return;
    try {
      fn(ctx);
    } catch (err) {
      console.error(`[CheatPlus:factory] ${featureId}.${phase} threw:`, err);
    }
  }
  function createFeatureFactory() {
    const features = /* @__PURE__ */ new Map();
    function registerFeature(def) {
      if (!def?.id) throw new Error("[CheatPlus:factory] Feature definition must have an id");
      if (features.has(def.id)) {
        console.warn(`[CheatPlus:factory] Feature "${def.id}" already registered; skipping`);
        return;
      }
      features.set(def.id, def);
    }
    function runPhase(phase, ctx, opts = {}) {
      const list = opts.reverse ? [...features.values()].reverse() : [...features.values()];
      for (const feature of list) {
        safeInvoke(feature.id, phase, feature[phase], ctx);
      }
    }
    return {
      registerFeature,
      registerAllActions: (ctx) => runPhase("registerActions", ctx),
      initAllFeatures: (ctx) => runPhase("init", ctx),
      startAllObservers: (ctx) => runPhase("startObservers", ctx),
      stopAllObservers: (ctx) => runPhase("stopObservers", ctx, { reverse: true }),
      teardownAllFeatures: (ctx) => runPhase("dispose", ctx, { reverse: true })
    };
  }
  var factory = createFeatureFactory();

  // src/core/logger.js
  var LS_DEBUG_KEY = "CheatPlus:debug";
  var debugEnabled = null;
  function isDebugEnabled() {
    try {
      if (true) return Boolean(true);
    } catch (e) {
    }
    if (debugEnabled != null) return Boolean(debugEnabled);
    try {
      return localStorage.getItem(LS_DEBUG_KEY) === "1";
    } catch (e) {
    }
    return false;
  }
  function debugLog(feature, msg, { data = null, level = "log" } = {}) {
    if (!isDebugEnabled()) return;
    const logMethod = console[level] || console.log;
    const style = level === "warn" ? "color: orange;" : level === "error" ? "color: red;" : "";
    try {
      console.groupCollapsed(`%c[CheatPlus][${feature}] ${msg}`, style);
      logMethod(msg);
      if (data !== null && typeof data !== "undefined") logMethod(data);
    } catch (e) {
      try {
        logMethod(`[CheatPlus][${feature}] ${msg}`);
        if (data) logMethod(data);
      } catch (err) {
      }
    } finally {
      try {
        console.groupEnd();
      } catch (e) {
      }
    }
  }
  var logger_default = debugLog;

  // src/ui/helpers/dom-query.js
  var shadowHost = null;
  var shadowRoot = null;
  var quicklink = null;
  var statlink = null;
  var misclink = null;
  var quickcontent = null;
  var statscontent = null;
  var misccontent = null;
  var toastContainer = null;
  var modal = null;
  var modalContentContainer = null;
  var cheat = null;
  function getUiRoot() {
    return shadowRoot || document;
  }
  function byUiId(id) {
    if (shadowRoot) {
      if (typeof shadowRoot.getElementById === "function") {
        const el2 = shadowRoot.getElementById(id);
        if (el2) return el2;
      }
      const el = shadowRoot.querySelector("#" + id);
      if (el) return el;
    }
    return document.getElementById(id);
  }
  function ensureShadowRoot() {
    if (shadowRoot) return shadowRoot;
    if (!document.body) return null;
    shadowHost = document.getElementById(SHADOW_HOST_ID);
    if (!shadowHost) {
      shadowHost = document.createElement("div");
      shadowHost.id = SHADOW_HOST_ID;
      document.body.appendChild(shadowHost);
      try {
        logger_default("ui", "ensureShadowRoot: created shadow host", { data: { id: SHADOW_HOST_ID } });
      } catch (e) {
      }
    }
    shadowRoot = shadowHost.shadowRoot || shadowHost.attachShadow({ mode: "open" });
    try {
      logger_default("ui", "ensureShadowRoot: shadowRoot attached", {
        data: { hasShadowRoot: !!shadowRoot }
      });
    } catch (e) {
    }
    return shadowRoot;
  }
  function refreshUiRefs() {
    quicklink = byUiId("quick-link");
    statlink = byUiId("stats-link");
    misclink = byUiId("misc-link");
    quickcontent = byUiId("quick-content");
    statscontent = byUiId("stats-content");
    misccontent = byUiId("misc-content");
    toastContainer = byUiId("toastContainer");
    modal = byUiId("modal");
    modalContentContainer = byUiId("modal-content-container");
    cheat = byUiId("cheat");
    try {
      logger_default("ui", "refreshUiRefs", {
        data: {
          cheat: !!cheat,
          modal: !!modal,
          modalContentContainer: !!modalContentContainer
        }
      });
    } catch (e) {
    }
  }
  refreshUiRefs();
  function getUiRefs() {
    refreshUiRefs();
    return {
      quicklink,
      quickcontent,
      statlink,
      statscontent,
      misclink,
      misccontent
    };
  }
  function replaceSelectOptions(selectElement, options6) {
    if (!selectElement) return;
    const previousValue = selectElement.value;
    selectElement.replaceChildren();
    options6.forEach(({ value, label }) => {
      const option = document.createElement("option");
      option.value = String(value);
      option.textContent = label;
      selectElement.appendChild(option);
    });
    if (previousValue && options6.some((option) => String(option.value) === previousValue)) {
      selectElement.value = previousValue;
    } else if (options6.length > 0) {
      selectElement.value = String(options6[0].value);
    }
  }

  // src/ui/components/toast.js
  var FALLBACK_CONTAINER_ID = "cp-fallback-toast-container";
  var MAX_TOASTS = 4;
  var DEFAULT_DURATION = 3e3;
  var toastSequence = 0;
  function ensureFallbackContainer() {
    let container = document.getElementById(FALLBACK_CONTAINER_ID);
    if (container) return container;
    container = document.createElement("div");
    container.id = FALLBACK_CONTAINER_ID;
    container.className = "toast-container";
    document.body.appendChild(container);
    return container;
  }
  function getToastContainer() {
    const shadowContainer = byUiId("toastContainer");
    if (shadowContainer) return shadowContainer;
    return ensureFallbackContainer();
  }
  function normalizeToastArgs(message, optionsOrDuration) {
    if (typeof optionsOrDuration === "number") {
      return {
        message,
        duration: optionsOrDuration,
        variant: "info"
      };
    }
    return {
      message,
      duration: optionsOrDuration?.duration ?? DEFAULT_DURATION,
      variant: optionsOrDuration?.variant ?? "info",
      title: optionsOrDuration?.title
    };
  }
  function showToast(message, optionsOrDuration) {
    const { duration, variant, title } = normalizeToastArgs(message, optionsOrDuration);
    const toastContainer2 = getToastContainer();
    if (!toastContainer2) return;
    const toast = document.createElement("div");
    toast.classList.add("toast", "toast-enter", `toast--${variant}`);
    if (title) {
      const titleEl = document.createElement("div");
      titleEl.className = "toast-title";
      titleEl.textContent = title;
      toast.appendChild(titleEl);
    }
    const bodyEl = document.createElement("div");
    bodyEl.className = "toast-body";
    bodyEl.textContent = message;
    toast.appendChild(bodyEl);
    toast.dataset.cpToastSequence = String(++toastSequence);
    toastContainer2.appendChild(toast);
    while (toastContainer2.children.length > MAX_TOASTS) {
      toastContainer2.firstElementChild?.remove();
    }
    requestAnimationFrame(() => {
      toast.classList.remove("toast-enter");
      toast.classList.add("toast-show");
    });
    setTimeout(() => {
      toast.classList.remove("toast-show");
      toast.classList.add("toast-leave");
      setTimeout(() => {
        toast.remove();
      }, 200);
    }, duration);
  }
  var timedToast = (text2, time, options6) => setTimeout(() => showToast(text2, options6), time);

  // src/ui/renderers/layout.js
  var modalTemplate = {
    tag: "div",
    id: "modal",
    class: "modal",
    children: [
      {
        tag: "div",
        class: "modal-content",
        children: [
          {
            tag: "div",
            class: "navbar",
            children: [
              { tag: "div", id: "quick-link", class: "nav-link gold", text: "Quick" },
              { tag: "div", id: "stats-link", class: "nav-link", text: "Stat" },
              { tag: "div", id: "misc-link", class: "nav-link", text: "Misc" },
              { tag: "div", id: "close-modal-top", class: "close nav-link", text: "\xD7" }
            ]
          },
          {
            tag: "div",
            id: "modal-content-container",
            children: [
              { tag: "div", id: "quick-content", class: "cheat-content active" },
              { tag: "div", id: "stats-content", class: "cheat-content" },
              { tag: "div", id: "misc-content", class: "cheat-content" }
            ]
          },
          {
            tag: "div",
            class: "navbar",
            children: [{ tag: "div", id: "close-modal-bottom", class: "close nav-link", text: "\xD7" }]
          }
        ]
      }
    ]
  };
  var layoutTemplate = {
    tag: "div",
    id: "cheat",
    children: [
      {
        tag: "div",
        id: "floating-button",
        children: [
          { tag: "button", id: "cheat-history-backwards", text: "\u2190", hidden: true },
          { tag: "button", id: "cheat-history-forwards", text: "\u2192", hidden: true },
          { tag: "button", id: "cheat-sidebar", text: "\u2630", hidden: true },
          { tag: "button", id: "cheat-open", text: "Cheat" }
        ]
      },
      { tag: "div", id: "toastContainer" },
      { tag: "div", id: "effect-layer", class: "hidden" }
      // Modal is injected lazily on first open.
    ]
  };
  function renderTemplate(template) {
    const el = document.createElement(template.tag);
    if (template.id) el.id = template.id;
    if (template.class) el.className = template.class;
    if (template.text) el.textContent = template.text;
    if (template.hidden) el.hidden = true;
    if (template.children) {
      template.children.forEach((child) => el.appendChild(renderTemplate(child)));
    }
    return el;
  }

  // src/core/state/index.js
  var store = {
    state: null,
    subscribers: /* @__PURE__ */ new Map()
  };
  var initialState = () => ({
    modal: {
      open: false,
      isDelete: false,
      isCheatPressed: false
    },
    runtime: {
      isLoad: false,
      clickCounter: 0,
      curDate: 0,
      errorFunctions: 0,
      progressFunctions: 0,
      totalFunctions: 0,
      extraNotif: false,
      reactivatingToggles: false,
      isTestingAllFunction: false,
      pcPregnant: 0,
      totalNpcPregnant: 0
    }
  });
  function getStore() {
    if (!store.state) {
      store.state = initialState();
    }
    return store;
  }
  function getByPath(obj, path7) {
    return path7.split(".").reduce((cur, key) => cur != null ? cur[key] : void 0, obj);
  }
  function setByPath(obj, path7, value) {
    const keys = path7.split(".");
    const last = keys.pop();
    const parent = keys.reduce((cur, key) => {
      if (cur[key] == null) cur[key] = {};
      return cur[key];
    }, obj);
    parent[last] = value;
  }
  function get(path7) {
    return getByPath(getStore().state, path7);
  }
  function set(path7, value) {
    const store2 = getStore();
    const oldValue = getByPath(store2.state, path7);
    if (oldValue === value) return;
    setByPath(store2.state, path7, value);
    const callbacks = store2.subscribers.get(path7);
    if (callbacks) {
      callbacks.forEach((cb) => {
        try {
          cb(value, oldValue, path7);
        } catch (e) {
        }
      });
    }
  }

  // src/core/actions/dispatcher.js
  var dispatcherStore = {
    handlers: /* @__PURE__ */ new Map(),
    onError: null
  };
  function getStore2() {
    return dispatcherStore;
  }
  function register(key, handler) {
    if (typeof key !== "string" || !key) {
      logger_default("dispatcher", "register: key must be a non-empty string.", { level: "warn" });
      return;
    }
    if (typeof handler !== "function") {
      logger_default("dispatcher", `register: handler for "${key}" is not a function.`, {
        level: "warn"
      });
      return;
    }
    logger_default("dispatcher", `Registered action: ${key}`);
    getStore2().handlers.set(key, handler);
  }
  function dispatch(key, context) {
    const store2 = getStore2();
    const handler = store2.handlers.get(key);
    if (!handler) {
      logger_default("dispatcher", `No handler registered for action: "${key}"`, { level: "warn" });
      return;
    }
    try {
      logger_default("dispatcher", `Dispatching action: ${key}`);
      return handler(context);
    } catch (err) {
      logger_default("dispatcher", `Handler error for action: ${key}`, { data: err, level: "error" });
      if (typeof store2.onError === "function") {
        try {
          store2.onError(key, err);
        } catch (_) {
        }
      }
    }
  }
  function isRegistered(key) {
    return getStore2().handlers.has(key);
  }
  function setErrorHook(fn) {
    if (typeof fn !== "function") return;
    getStore2().onError = fn;
  }

  // src/core/global-bridge.js
  function getRuntimeWindow() {
    try {
      if (typeof unsafeWindow !== "undefined" && unsafeWindow) return unsafeWindow;
    } catch (e) {
    }
    return typeof window !== "undefined" ? window : void 0;
  }

  // src/ui/helpers/modal-hotkey.js
  var MODAL_HOTKEY_STORAGE_KEY = "dol-cheatplus-hotkey";
  var MODAL_HOTKEY_GUARD_KEY = "__DOL_CP_MODAL_HOTKEY_BOUND__";
  var DEFAULT_MODAL_HOTKEY = "ctrl+shift+c";
  var toggleModal = null;
  function parseHotkey(hotkey) {
    const raw = String(hotkey || "").trim().toLowerCase();
    if (!raw) return null;
    if (raw === "off" || raw === "disabled") return { disabled: true };
    const parts = raw.split("+").map((part) => part.trim()).filter(Boolean);
    if (!parts.length) return null;
    const key = parts[parts.length - 1];
    const mods = new Set(parts.slice(0, -1));
    return {
      key,
      ctrl: mods.has("ctrl") || mods.has("control"),
      alt: mods.has("alt"),
      shift: mods.has("shift")
    };
  }
  function resolveModalHotkey() {
    const runtimeWindow2 = getRuntimeWindow();
    let configured = DEFAULT_MODAL_HOTKEY;
    try {
      const saved = runtimeWindow2?.localStorage?.getItem(MODAL_HOTKEY_STORAGE_KEY);
      if (saved) configured = saved;
    } catch (_) {
    }
    return parseHotkey(configured);
  }
  function isEditableTarget(target) {
    if (!target) return false;
    const tag = String(target.tagName || "").toLowerCase();
    return tag === "input" || tag === "textarea" || tag === "select" || target.isContentEditable === true;
  }
  function matchesHotkey(event, hotkey) {
    if (!hotkey || hotkey.disabled) return false;
    const key = String(event.key || "").toLowerCase();
    return key === hotkey.key && Boolean(event.ctrlKey) === Boolean(hotkey.ctrl) && Boolean(event.altKey) === Boolean(hotkey.alt) && Boolean(event.shiftKey) === Boolean(hotkey.shift);
  }
  function ensureModalHotkey(toggleFn) {
    if (typeof toggleFn === "function") toggleModal = toggleFn;
    const runtimeWindow2 = getRuntimeWindow();
    if (runtimeWindow2?.[MODAL_HOTKEY_GUARD_KEY]) return;
    const onKeydown = (event) => {
      if (isEditableTarget(event.target)) return;
      if (!matchesHotkey(event, resolveModalHotkey())) return;
      event.preventDefault();
      if (typeof toggleModal === "function") toggleModal();
    };
    document.addEventListener("keydown", onKeydown);
    if (runtimeWindow2) runtimeWindow2[MODAL_HOTKEY_GUARD_KEY] = true;
  }

  // src/cheats/runtime/active-builder.js
  var activeBuilder = null;
  function setActiveCheatBuilder(builder) {
    activeBuilder = builder ?? null;
    return activeBuilder;
  }
  function getActiveCheatBuilder() {
    return activeBuilder;
  }
  async function teardownActiveCheatBuilder() {
    return activeBuilder?.teardown?.() ?? false;
  }

  // src/ui/components/modal.js
  function toggleModalByHotkey() {
    if (get("modal.open")) closeModal();
    else openModal();
  }
  function filterSectionRows(sectionEl, query) {
    if (!sectionEl) return;
    const norm = String(query ?? "").trim().toLowerCase();
    const rows = sectionEl.querySelectorAll(".modal-content-padding");
    rows.forEach((row) => {
      if (row.classList.contains("cp-search-row")) return;
      if (!norm) {
        row.style.display = "";
        return;
      }
      const haystack = (row.textContent || "").toLowerCase();
      row.style.display = haystack.includes(norm) ? "" : "none";
    });
  }
  function attachSectionSearch(sectionEl, title) {
    if (!sectionEl || sectionEl.querySelector(".cp-search-row")) return;
    const row = document.createElement("div");
    row.className = "modal-content-padding cp-search-row";
    const input = document.createElement("input");
    input.type = "search";
    input.className = "cp-search-input";
    input.placeholder = `Search ${title}...`;
    input.autocomplete = "off";
    input.setAttribute("aria-label", `${title} search`);
    input.addEventListener("input", () => filterSectionRows(sectionEl, input.value));
    row.appendChild(input);
    sectionEl.prepend(row);
  }
  function ensureSectionSearchBars() {
    attachSectionSearch(byUiId("quick-content"), "Quick");
    attachSectionSearch(byUiId("stats-content"), "Stat");
    attachSectionSearch(byUiId("misc-content"), "Misc");
  }
  function ensureModalInjected() {
    if (byUiId("modal")) return;
    const root = getUiRoot();
    const cheatRoot = byUiId("cheat");
    if (!root || !cheatRoot) return;
    const modalEl = renderTemplate(modalTemplate);
    modalEl.addEventListener("click", (event) => {
      const id = event.target?.id;
      if (id === "close-modal-top" || id === "close-modal-bottom") {
        closeModal();
        return;
      }
      if (id === "quick-link" || id === "stats-link" || id === "misc-link") {
        dispatch(id);
      }
    });
    cheatRoot.appendChild(modalEl);
    refreshUiRefs();
  }
  function bloodEffect() {
    const effect = byUiId("effect-layer");
    const bodyElement = document.body;
    if (!effect) return;
    effect.classList.remove("hidden");
    effect.style.transition = "opacity 0.1s ease-in-out";
    effect.style.opacity = 0;
    setTimeout(() => {
      effect.style.transition = "opacity 2s ease-in-out";
      effect.style.opacity = 1;
      bodyElement.classList.add("shake");
    }, 200);
    setTimeout(() => {
      bodyElement.classList.remove("shake");
      effect.classList.add("hidden");
    }, 2200);
  }
  function openModal() {
    if (get("modal.open")) return;
    ensureModalHotkey(toggleModalByHotkey);
    ensureModalInjected();
    const modal2 = byUiId("modal");
    if (!modal2) return;
    modal2.style.display = "block";
    set("modal.open", true);
    set("modal.isDelete", false);
    set("modal.isCheatPressed", false);
    dispatch("init_interface");
    ensureSectionSearchBars();
    dispatch("quick-link");
  }
  function closeModal() {
    if (!get("modal.open")) return;
    const modal2 = byUiId("modal");
    if (!modal2) return;
    void teardownActiveCheatBuilder();
    set("modal.isDelete", true);
    modal2.remove();
    refreshUiRefs();
    set("modal.open", false);
    set("modal.isDelete", false);
    set("modal.isCheatPressed", false);
  }
  ensureModalHotkey(toggleModalByHotkey);

  // src/ui/components/controls.js
  var rw = getRuntimeWindow();
  var FLOATING_POSITION_KEY = "dol-cheatplus-floating-position-v1";
  function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
  }
  function applyFloatingPosition(floatingButton, x, y) {
    if (!floatingButton) return;
    const maxX = Math.max(rw.innerWidth - floatingButton.offsetWidth, 0);
    const maxY = Math.max(rw.innerHeight - floatingButton.offsetHeight, 0);
    const left = clamp(x, 0, maxX);
    const top = clamp(y, 0, maxY);
    floatingButton.style.left = `${left}px`;
    floatingButton.style.top = `${top}px`;
    floatingButton.style.right = "auto";
    floatingButton.dataset.cpCustomPosition = "1";
    floatingButton.classList.add("cp-custom-position");
  }
  function persistFloatingPosition(x, y) {
    try {
      rw.localStorage.setItem(FLOATING_POSITION_KEY, JSON.stringify({ x, y }));
    } catch (_) {
    }
  }
  function restoreFloatingPosition(floatingButton) {
    if (!floatingButton) return;
    try {
      const raw = rw.localStorage.getItem(FLOATING_POSITION_KEY);
      if (!raw) return;
      const parsed = JSON.parse(raw);
      if (!Number.isFinite(parsed?.x) || !Number.isFinite(parsed?.y)) return;
      applyFloatingPosition(floatingButton, parsed.x, parsed.y);
    } catch (_) {
    }
  }
  function initFloatingButtonDrag() {
    const floatingButton = byUiId("floating-button");
    const dragHandle = byUiId("cheat-open");
    if (!floatingButton || !dragHandle || floatingButton.dataset.cpDragBound === "1") return;
    restoreFloatingPosition(floatingButton);
    let startX = 0;
    let startY = 0;
    let originLeft = 0;
    let originTop = 0;
    let dragged = false;
    const onPointerMove = (event) => {
      const dx = event.clientX - startX;
      const dy = event.clientY - startY;
      if (!dragged && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) dragged = true;
      if (!dragged) return;
      applyFloatingPosition(floatingButton, originLeft + dx, originTop + dy);
    };
    const onPointerUp = () => {
      rw.removeEventListener("pointermove", onPointerMove);
      rw.removeEventListener("pointerup", onPointerUp);
      floatingButton.classList.remove("cp-dragging");
      if (!dragged) return;
      const left = Number.parseFloat(floatingButton.style.left || "0");
      const top = Number.parseFloat(floatingButton.style.top || "0");
      persistFloatingPosition(left, top);
      dragHandle.dataset.cpSuppressNextClick = "1";
    };
    dragHandle.addEventListener("pointerdown", (event) => {
      event.preventDefault();
      if (typeof dragHandle.setPointerCapture === "function") {
        try {
          dragHandle.setPointerCapture(event.pointerId);
        } catch (_) {
        }
      }
      startX = event.clientX;
      startY = event.clientY;
      dragged = false;
      const rect = floatingButton.getBoundingClientRect();
      originLeft = rect.left;
      originTop = rect.top;
      floatingButton.classList.add("cp-dragging");
      rw.addEventListener("pointermove", onPointerMove);
      rw.addEventListener("pointerup", onPointerUp);
    });
    dragHandle.addEventListener("click", (event) => {
      if (dragHandle.dataset.cpSuppressNextClick !== "1") return;
      dragHandle.dataset.cpSuppressNextClick = "0";
      event.preventDefault();
      if (typeof event.stopImmediatePropagation === "function") event.stopImmediatePropagation();
      else event.stopPropagation();
    });
    rw.addEventListener("resize", () => {
      if (floatingButton.dataset.cpCustomPosition !== "1") return;
      const left = Number.parseFloat(floatingButton.style.left || "0");
      const top = Number.parseFloat(floatingButton.style.top || "0");
      applyFloatingPosition(floatingButton, left, top);
    });
    floatingButton.dataset.cpDragBound = "1";
  }
  function syncHistoryButtons() {
    const backwards = byUiId("cheat-history-backwards");
    const forwards = byUiId("cheat-history-forwards");
    const gameBack = byUiId("history-backward") || document.getElementById("history-backward");
    const gameForward = byUiId("history-forward") || document.getElementById("history-forward");
    if (!backwards || !forwards || !gameBack || !gameForward) return;
    backwards.disabled = gameBack.disabled;
    forwards.disabled = gameForward.disabled;
  }
  function Enable_cheat_history() {
    var button_back = byUiId("cheat-history-backwards");
    var button_forward = byUiId("cheat-history-forwards");
    var button_set = byUiId("Enable_cheat_history") || document.getElementById("Enable_cheat_history");
    if (!button_back || !button_forward || !button_set) return;
    if (button_back.hidden == true) {
      button_back.hidden = false;
      button_forward.hidden = false;
      button_set.innerHTML = "Disable";
      syncHistoryButtons();
    } else {
      button_back.hidden = true;
      button_forward.hidden = true;
      button_set.innerHTML = "Enable";
    }
  }
  function Enable_sidebar_button() {
    var button = byUiId("cheat-sidebar");
    var sidebar_button = document.getElementById("Enable_sidebar_button");
    if (!button || !sidebar_button) return;
    if (button.hidden == true) {
      button.hidden = false;
      sidebar_button.innerHTML = "Disable";
    } else {
      button.hidden = true;
      sidebar_button.innerHTML = "Enable";
    }
  }
  function simple_cheat_button() {
    const cheatButton = byUiId("cheat-open");
    const simpleCheatButton = document.getElementById("simple_cheat_button");
    if (!cheatButton || !simpleCheatButton) return;
    const isDisabled = simpleCheatButton.innerHTML === "Disable";
    simpleCheatButton.innerHTML = isDisabled ? "Enable" : "Disable";
    cheatButton.innerHTML = isDisabled ? "Cheat" : "\u2699";
    cheatButton.style.fontSize = isDisabled ? "" : "89%";
  }

  // src/ui/helpers/ui-display.js
  function hideAllContent() {
    const { quicklink: quicklink2, statlink: statlink2, misclink: misclink2, quickcontent: quickcontent2, statscontent: statscontent2, misccontent: misccontent2 } = getUiRefs();
    if (!quicklink2 || !statlink2 || !misclink2 || !quickcontent2 || !statscontent2 || !misccontent2) {
      return;
    }
    [quicklink2, statlink2, misclink2].forEach((link) => link.classList.remove("gold"));
    [quickcontent2, statscontent2, misccontent2].forEach(
      (content) => content.classList.remove("active")
    );
  }
  function showContent(nav, contentElement) {
    if (!nav || !contentElement) return;
    hideAllContent();
    nav.classList.add("gold");
    contentElement.classList.add("active");
  }

  // src/services/toggle-scheduler.js
  var functionMap = /* @__PURE__ */ new Map();
  var dailyMap = /* @__PURE__ */ new Map();
  var DEFAULT_COOLDOWN_MS = 100;
  var DEFAULT_MAX_FAILURES = 5;
  var scheduledRun = false;
  var frameExpected = 0;
  var frameProgress = 0;
  var frameFailures = 0;
  var framePending = /* @__PURE__ */ new Set();
  var frameLastProgressKey = null;
  function resetFrameState() {
    frameExpected = 0;
    frameProgress = 0;
    frameFailures = 0;
    framePending = /* @__PURE__ */ new Set();
    frameLastProgressKey = null;
  }
  function getFramePendingSample(limit = 8) {
    if (!framePending || framePending.size === 0) return [];
    const out = [];
    for (const key of framePending) {
      out.push(key);
      if (out.length >= limit) break;
    }
    return out;
  }
  function runEntriesSequentially(entries2, { onProgress = null, onDone = null, daily = false } = {}) {
    let index = 0;
    function step() {
      if (index >= entries2.length) {
        if (typeof onDone === "function") onDone();
        logger_default(
          "toggle:scheduler",
          `${daily ? "Daily" : "Regular"} batch complete (${index} entries)`
        );
        return;
      }
      const [key, meta] = entries2[index++];
      const now = Date.now();
      if (!meta) {
        if (typeof onProgress === "function") onProgress(key);
        return requestAnimationFrame(step);
      }
      if (!daily && now - (meta.lastRun || 0) < (meta.cooldownMs || DEFAULT_COOLDOWN_MS)) {
        logger_default(
          "toggle:scheduler",
          `Skipping ${key}: cooldown not ready (${now - (meta.lastRun || 0)}ms < ${meta.cooldownMs || DEFAULT_COOLDOWN_MS}ms)`
        );
        if (typeof onProgress === "function") onProgress(key);
        return requestAnimationFrame(step);
      }
      try {
        if (typeof meta.fn === "function") {
          logger_default("toggle:scheduler", `Executing ${daily ? "daily" : "regular"} toggle: ${key}`);
          meta.fn();
          if (!daily) meta.lastRun = Date.now();
          meta.failureCount = 0;
        }
      } catch (e) {
        meta.failureCount = (meta.failureCount || 0) + 1;
        logger_default(
          "toggle:scheduler",
          `Error executing ${daily ? "daily" : "regular"} toggle: ${key} (failure #${meta.failureCount})`,
          {
            data: e,
            level: "error"
          }
        );
        if (meta.failureCount >= (meta.maxFailures || DEFAULT_MAX_FAILURES)) {
          if (daily) {
            dailyMap.delete(key);
            logger_default(
              "toggle:scheduler",
              `Unregistered daily toggle: ${key} after ${meta.failureCount} failures`,
              {
                level: "warn"
              }
            );
          } else {
            functionMap.delete(key);
            logger_default(
              "toggle:scheduler",
              `Unregistered regular toggle: ${key} after ${meta.failureCount} failures`,
              {
                level: "warn"
              }
            );
          }
          if (typeof meta.onFailureThreshold === "function") {
            meta.onFailureThreshold({ id: key, failures: meta.failureCount, error: e, daily });
          }
        }
      }
      if (typeof onProgress === "function") onProgress(key);
      requestAnimationFrame(step);
    }
    step();
  }
  var ToggleScheduler = {
    register(id, fn, {
      daily = false,
      cooldownMs = DEFAULT_COOLDOWN_MS,
      maxFailures = DEFAULT_MAX_FAILURES,
      onFailureThreshold = null
    } = {}) {
      if (!id) return;
      logger_default("toggle:scheduler", `Registering ${daily ? "daily" : "regular"} toggle: ${id}`, {
        data: { cooldownMs, maxFailures, fnExists: typeof fn === "function" }
      });
      const meta = {
        fn,
        lastRun: 0,
        failureCount: 0,
        cooldownMs,
        maxFailures,
        onFailureThreshold
      };
      if (daily) dailyMap.set(id, meta);
      else functionMap.set(id, meta);
    },
    unregister(id, { daily = false } = {}) {
      if (!id) return;
      logger_default("toggle:scheduler", `Unregistering ${daily ? "daily" : "regular"} toggle: ${id}`);
      if (daily) dailyMap.delete(id);
      else functionMap.delete(id);
    },
    runAll({ onProgress = null } = {}) {
      const entries2 = Array.from(functionMap.entries());
      logger_default("toggle:scheduler", `runAll: ${entries2.length} regular toggles queued`);
      runEntriesSequentially(entries2, { onProgress, daily: false });
    },
    runDaily() {
      const entries2 = Array.from(dailyMap.entries());
      logger_default("toggle:scheduler", `runDaily: ${entries2.length} daily toggles queued`);
      runEntriesSequentially(entries2, { daily: true });
    },
    runAllDaily() {
      this.runDaily();
    },
    runFrame({
      isLoad = false,
      onProgress = null,
      onFrameState = null,
      onWatchdogRestore = null
    } = {}) {
      if (isLoad) {
        logger_default("toggle:scheduler", "Skipping frame: page is loading");
        return false;
      }
      if (frameExpected > 0 && frameProgress < frameExpected) {
        frameFailures += 1;
        const pendingSample = getFramePendingSample();
        logger_default(
          "toggle:scheduler",
          `Frame watchdog: progress ${frameProgress}/${frameExpected} (failures: ${frameFailures})` + (frameLastProgressKey ? `; last completed: ${frameLastProgressKey}` : "") + (framePending.size ? `; pending ${framePending.size}: ${pendingSample.join(", ")}${framePending.size > pendingSample.length ? ", ..." : ""}` : ""),
          {
            level: "warn"
          }
        );
        if (typeof onFrameState === "function") {
          onFrameState({ expected: frameExpected, progress: frameProgress, failures: frameFailures });
        }
        if (frameFailures > DEFAULT_MAX_FAILURES) {
          const pendingSample2 = getFramePendingSample();
          logger_default(
            "toggle:scheduler",
            `Watchdog triggered: failures exceeded max (${frameFailures} > ${DEFAULT_MAX_FAILURES})` + (framePending.size ? `; pending ${framePending.size}: ${pendingSample2.join(", ")}${framePending.size > pendingSample2.length ? ", ..." : ""}` : ""),
            {
              level: "warn"
            }
          );
          this.restore({ onRestore: onWatchdogRestore });
        }
        return false;
      }
      const entries2 = Array.from(functionMap.entries());
      if (!entries2.length) {
        resetFrameState();
        if (typeof onFrameState === "function") {
          onFrameState({ expected: 0, progress: 0, failures: 0 });
        }
        return false;
      }
      frameExpected = entries2.length;
      frameProgress = 0;
      frameFailures = 0;
      framePending = new Set(entries2.map(([key]) => key));
      frameLastProgressKey = null;
      logger_default("toggle:scheduler", `runFrame: Starting frame with ${frameExpected} toggles`);
      if (typeof onFrameState === "function") {
        onFrameState({ expected: frameExpected, progress: frameProgress, failures: frameFailures });
      }
      this.scheduleRunAll({
        onProgress: (key) => {
          frameProgress += 1;
          frameLastProgressKey = key;
          framePending.delete(key);
          if (typeof onProgress === "function") onProgress(key);
        }
      });
      return true;
    },
    // schedule a coalesced run; multiple calls within a frame result in a single execution
    scheduleRunAll({ onProgress = null } = {}) {
      if (scheduledRun) {
        logger_default("toggle:scheduler", "scheduleRunAll: Already scheduled, skipping coalesce");
        return;
      }
      scheduledRun = true;
      requestAnimationFrame(() => {
        try {
          this.runAll({ onProgress });
        } finally {
          scheduledRun = false;
        }
      });
    },
    getBundles() {
      return {
        functionbundle: Object.fromEntries(
          Array.from(functionMap.entries()).map(([k, meta]) => [k, meta.fn])
        ),
        dailyfunctionbundle: Object.fromEntries(
          Array.from(dailyMap.entries()).map(([k, meta]) => [k, meta.fn])
        )
      };
    },
    clearAll() {
      logger_default(
        "toggle:scheduler",
        `Clearing all toggles: ${functionMap.size} regular + ${dailyMap.size} daily`
      );
      functionMap.clear();
      dailyMap.clear();
    },
    reset() {
      logger_default("toggle:scheduler", "Resetting scheduler state");
      this.clearAll();
      resetFrameState();
    },
    restore({ onRestore = null } = {}) {
      logger_default("toggle:scheduler", "Restoring scheduler (full reset)", { level: "warn" });
      this.reset();
      if (typeof onRestore === "function") onRestore();
    },
    getFunction(id, { daily = false } = {}) {
      const map = daily ? dailyMap : functionMap;
      const meta = map.get(id);
      return meta?.fn;
    },
    has(id, { daily = false } = {}) {
      return (daily ? dailyMap : functionMap).has(id);
    },
    list({ daily = null } = {}) {
      if (daily === true) return [...dailyMap.keys()];
      if (daily === false) return [...functionMap.keys()];
      return [...functionMap.keys(), ...dailyMap.keys()];
    }
  };

  // src/core/sugarcube/state.js
  function getSugarCube() {
    const rw2 = getRuntimeWindow();
    return rw2?.SugarCube ?? null;
  }
  function getVars() {
    return getSugarCube()?.State?.variables ?? null;
  }
  function getSetup() {
    return getSugarCube()?.setup ?? null;
  }
  function getPassage() {
    return getVars()?.passage ?? null;
  }
  function isReady() {
    return Boolean(getSugarCube()?.State?.variables);
  }

  // src/core/sugarcube/selectors.js
  function tokenizePath(path7) {
    if (typeof path7 !== "string" || !path7.trim()) return [];
    const matches = path7.match(/[^.[\]]+/g);
    return matches ?? [];
  }
  function readAtPath(obj, path7) {
    const tokens = tokenizePath(path7);
    if (!tokens.length) return void 0;
    let cursor = obj;
    for (const token of tokens) {
      if (cursor == null || typeof cursor !== "object" || !(token in cursor)) return void 0;
      cursor = cursor[token];
    }
    return cursor;
  }
  function getVariable(key) {
    return getVars()?.[key];
  }
  function setVariable(key, value) {
    const vars = getVars();
    if (vars) vars[key] = value;
  }
  function getVariablePath(path7) {
    return readAtPath(getVars(), path7);
  }
  function getSetupKey(key) {
    return getSetup()?.[key];
  }
  function getNPCName() {
    return getVars()?.NPCName ?? null;
  }
  function getStoredNPCs() {
    return getVars()?.storedNPCs ?? null;
  }
  function getSexStats() {
    return getVars()?.sexStats ?? null;
  }
  function getCheatPlus() {
    return getVars()?.cheatPlus ?? null;
  }
  function getFarm() {
    return getVars()?.farm ?? null;
  }
  function getChildren() {
    return getVars()?.children ?? null;
  }
  function getContainer() {
    return getVars()?.container ?? null;
  }

  // src/core/sugarcube/quirks.js
  function isAtPassage(name) {
    return getPassage() === name;
  }
  function isAtSettings() {
    return isAtPassage("Settings");
  }

  // src/core/sugarcube/adapter.js
  var scAdapter = {
    // --- State access ---
    getVariables: getVars,
    getVariable,
    setVariable,
    // --- Setup ---
    getSetup,
    getSetupKey,
    // --- Passage / navigation ---
    getCurrentPassage: getPassage,
    isAtPassage,
    // --- Lifecycle ---
    isReady
  };

  // src/features/utils/value-tree.js
  function isCanonicalArrayIndex(key, length) {
    if (!/^\d+$/.test(key)) return false;
    const index = Number(key);
    return Number.isInteger(index) && index >= 0 && index < length && String(index) === key;
  }
  function walkValueTree(rootValue, rootPath, visitor) {
    let stopped = false;
    const stop = () => {
      stopped = true;
    };
    function visit(value, path7, parentIsArray = false, key = "") {
      if (stopped) return;
      visitor(value, path7, { parentIsArray, key, stop });
      if (stopped) return;
      if (Array.isArray(value)) {
        for (let index = 0; index < value.length; index++) {
          visit(value[index], `${path7}[${index}]`, true, String(index));
          if (stopped) return;
        }
        const objectKeys = Object.keys(value);
        for (const objectKey of objectKeys) {
          if (isCanonicalArrayIndex(objectKey, value.length)) continue;
          visit(value[objectKey], `${path7}[${objectKey}]`, true, objectKey);
          if (stopped) return;
        }
        return;
      }
      if (typeof value === "object" && value !== null) {
        for (const childKey in value) {
          visit(value[childKey], `${path7}.${childKey}`, false, childKey);
          if (stopped) return;
        }
      }
    }
    visit(rootValue, rootPath);
  }

  // src/features/search-actions.js
  function executeSearch(action) {
    const vars = getVars();
    if (!vars) return;
    const searchTypeMap = ["startsWith", "includes", "endsWith"];
    const searchTypeEl = byUiId("search_type");
    const searchType = searchTypeMap[searchTypeEl && searchTypeEl.value || 0] || "startsWith";
    const searchValueEl = byUiId("search_value");
    const searchTerm = searchValueEl && searchValueEl.value.trim().toLowerCase() || "";
    const searchResult = byUiId("search_result");
    if (!searchResult) return;
    searchResult.value = "Result :\n";
    if (!searchTerm) {
      showToast("failed, Search key is blank!");
      return;
    }
    function checkObject(key, value, newPath) {
      if (key.toLowerCase()[searchType](searchTerm) && value !== "") {
        searchResult.value += `${newPath}=${value}
`;
      }
    }
    function shouldMatchValue(value) {
      return !Array.isArray(value) && (typeof value !== "object" || value === null);
    }
    if (action === "search123") {
      showToast("Searching... might take a while");
      walkValueTree(vars, "SugarCube.State.variables", (value, path7, meta) => {
        if (shouldMatchValue(value) && String(value).toLowerCase()[searchType](searchTerm) && value !== "") {
          searchResult.value += `${path7}=${value}
`;
        }
        if (!meta.parentIsArray && meta.key) {
          checkObject(meta.key, value, path7);
        }
      });
    } else if (action === "search456") {
      showToast("Searching...");
      for (const prop in vars) {
        if (prop.toLowerCase()[searchType](searchTerm)) {
          searchResult.value += `SugarCube.State.variables.${prop}=${vars[prop]}
`;
        }
      }
    }
  }
  function restoreVariables() {
    let triggered = false;
    const bundles = ToggleScheduler.getBundles();
    if (getVariable("alluremod") === 0) {
      setVariable("alluremod", 1);
      showToast("Encounter rate enabled!");
    }
    if (typeof bundles.functionbundle["allNPCInstaPregnant"] === "function") {
      dispatch("allNPCInstaPregnant");
      showToast("NPC instant pregnant is disabled!");
      triggered = true;
    }
    if (triggered) {
      showToast("This ensure the game settings isnt break.");
      showToast("You can re-enable it after youre done.");
    }
  }

  // src/core/runtime-state.js
  function getRuntime(path7) {
    return get(`runtime.${path7}`);
  }
  function setRuntime(path7, value) {
    set(`runtime.${path7}`, value);
  }
  function getIsLoad() {
    return Boolean(getRuntime("isLoad"));
  }
  function setIsLoad(value) {
    setRuntime("isLoad", Boolean(value));
  }
  function getClickCounter() {
    return Number(getRuntime("clickCounter") ?? 0);
  }
  function incrementClickCounter() {
    const next = getClickCounter() + 1;
    setRuntime("clickCounter", next);
    return next;
  }
  function decrementClickCounter() {
    const next = getClickCounter() - 1;
    setRuntime("clickCounter", next);
    return next;
  }
  function getCurDate() {
    return Number(getRuntime("curDate") ?? 0);
  }
  function setCurDate(value) {
    setRuntime("curDate", Number(value) || 0);
  }
  function getExtraNotif() {
    return Boolean(getRuntime("extraNotif"));
  }
  function setExtraNotif(value) {
    setRuntime("extraNotif", Boolean(value));
  }
  function getReactivatingToggles() {
    return Boolean(getRuntime("reactivatingToggles"));
  }
  function setReactivatingToggles(value) {
    setRuntime("reactivatingToggles", Boolean(value));
  }
  function getIsTestingAllFunction() {
    return Boolean(getRuntime("isTestingAllFunction"));
  }
  function setIsTestingAllFunction(value) {
    setRuntime("isTestingAllFunction", Boolean(value));
  }
  function getPcPregnant() {
    return Number(getRuntime("pcPregnant") ?? 0);
  }
  function setPcPregnant(value) {
    setRuntime("pcPregnant", Number(value) || 0);
  }
  function getTotalNpcPregnant() {
    return Number(getRuntime("totalNpcPregnant") ?? 0);
  }
  function setTotalNpcPregnant(value) {
    setRuntime("totalNpcPregnant", Number(value) || 0);
  }

  // src/ui/renderers/cheat-form.js
  function executeFunctionsInObject(obj) {
    if (getIsTestingAllFunction()) return;
    setIsTestingAllFunction(true);
    let total = 0;
    for (const key in obj) {
      if (typeof obj[key] === "function") {
        console.log(`Executing function at key: ${key}`);
        obj[key]();
        total++;
      }
    }
    timedToast("testing complete", 5e3);
    timedToast(`Total function tested ${total}`, 5e3);
    setIsTestingAllFunction(false);
  }

  // src/features/cheat/debug-actions.js
  var debugActions = {
    testAll: function(actionBag = debugActions) {
      showToast("Testing all functions...");
      executeFunctionsInObject(actionBag);
    }
  };
  var debug_actions_default = debugActions;

  // src/features/fetchers/core-updates.js
  var core_updates_exports = {};
  __export(core_updates_exports, {
    arousalpicked: () => arousalpicked,
    ballscurrent: () => ballscurrent,
    bodycurrent: () => bodycurrent,
    bodytypecurrent: () => bodytypecurrent,
    characurrent: () => characurrent,
    crimecurrent: () => crimecurrent,
    cumcurrent: () => cumcurrent,
    default: () => core_updates_default,
    examcurrent: () => examcurrent,
    famecurrent: () => famecurrent,
    lactatingcurrent: () => lactatingcurrent,
    milkcurrent: () => milkcurrent,
    npccurrent: () => npccurrent,
    setButtonText: () => setButtonText,
    spraystate: () => spraystate,
    statpick: () => statpick,
    statpicke: () => statpicke,
    talentcurrent: () => talentcurrent,
    update_pregnancy: () => update_pregnancy,
    update_school_rep: () => update_school_rep,
    virginitycurrent: () => virginitycurrent,
    vowcurrent: () => vowcurrent
  });

  // src/ui/helpers/hydrate-utils.js
  function getUi(id) {
    return byUiId(id);
  }
  function withElements(ids, cb) {
    const elements = {};
    for (const [key, id] of Object.entries(ids)) {
      const element = byUiId(id);
      if (!element) return false;
      elements[key] = element;
    }
    cb(elements);
    return true;
  }
  function setText(id, text2, { hideWhenEmpty = false } = {}) {
    const element = byUiId(id);
    if (!element) return false;
    const normalized = String(text2 ?? "");
    element.textContent = normalized;
    if (hideWhenEmpty) {
      element.style.display = normalized.trim() ? "" : "none";
    }
    return true;
  }
  function setValue(id, value, { skipWhenNullish = false } = {}) {
    const element = byUiId(id);
    if (!element) return false;
    if (skipWhenNullish && value == null) return false;
    element.value = value == null ? "" : value;
    return true;
  }
  function setChecked(id, checked) {
    const element = byUiId(id);
    if (!element) return false;
    element.checked = Boolean(checked);
    return true;
  }
  function setOptions(id, options6) {
    const element = byUiId(id);
    if (!element) return false;
    replaceSelectOptions(element, options6);
    return true;
  }
  function setRangeOptions(id, length, { start = 0 } = {}) {
    const count = Number.isFinite(length) ? Math.max(0, Number(length)) : 0;
    const options6 = Array.from({ length: count }, (_, index) => {
      const value = start + index;
      return { value, label: String(value) };
    });
    return setOptions(id, options6);
  }
  function syncInputFromSelect({ selectId, inputId, readValue }) {
    return withElements({ select: selectId, input: inputId }, ({ select, input }) => {
      if (select.value === "") return;
      input.value = readValue(select.value) ?? "";
    });
  }

  // src/features/fetchers/core-updates.js
  function setButtonText(id, text2) {
    setText(id, text2, { hideWhenEmpty: true });
  }
  function statpick() {
    syncInputFromSelect({
      selectId: "statpick",
      inputId: "statinput",
      readValue: (key) => getVariable(key)
    });
  }
  function statpicke() {
    syncInputFromSelect({
      selectId: "statpicke",
      inputId: "statinpute",
      readValue: (key) => getVariable(key)
    });
  }
  function spraystate() {
    setButtonText("sprayset", getVariable("infinitespray") == 1 ? "unset" : "set");
  }
  function bodycurrent() {
    const sizeNames = ["Tiny", "Small", "Normal", "Large"];
    setButtonText("bodycurrent", sizeNames[getVariable("bodysize")] || "Unknown");
  }
  function bodytypecurrent() {
    const genderMap = { m: "Masculine", f: "Feminine", a: "Androgynous" };
    setButtonText("bodytypecurrent", genderMap[getVariablePath("player.gender_body")] || "Unknown");
  }
  function ballscurrent() {
    getVariablePath("player.ballsExist") ? setButtonText("ballsset", "remove") : setButtonText("ballsset", "add");
  }
  function virginitycurrent() {
    const pick = getUi("virginitypick");
    if (!pick) return;
    getVariablePath(`player.virginity.${pick.value}`) ? setButtonText("virginitycurrent", "pure") : setButtonText("virginitycurrent", "taken");
  }
  function crimecurrent() {
    const crime = getVariable("crime");
    if (!crime) return;
    let total = 0;
    for (const key in crime) {
      if (key !== "events") total += crime[key].current;
    }
    setButtonText("crimecurrent", total);
  }
  function vowcurrent() {
    setButtonText("vow-virgin", getVariablePath("player.virginity.temple") ? "Virgin" : "Not Virgin");
  }
  function characurrent() {
    syncInputFromSelect({
      selectId: "charapick",
      inputId: "charainput",
      readValue: (key) => getVariable(key)
    });
  }
  function lactatingcurrent() {
    getVariable("lactating") ? setButtonText("lactatingset", "No") : setButtonText("lactatingset", "Yes");
  }
  function milkcurrent() {
    setValue("milkinput", getVariable("milk_volume"));
  }
  function cumcurrent() {
    setValue("cuminput", getVariable("semen_volume"));
  }
  function famecurrent() {
    syncInputFromSelect({
      selectId: "fame_name",
      inputId: "input_fame12",
      readValue: (key) => getVariablePath(`fame.${key}`)
    });
  }
  function npccurrent() {
    withElements(
      {
        name: "npcnames",
        trait: "npctraits",
        input: "npcchangeinput"
      },
      ({ name, trait, input }) => {
        const npc = (getNPCName() ?? []).find((entry2) => entry2.description === name.value);
        if (npc) input.value = npc[trait.value];
      }
    );
  }
  function examcurrent() {
    syncInputFromSelect({
      selectId: "select_exam",
      inputId: "input_exam",
      readValue: (key) => getVariable(key)
    });
  }
  function talentcurrent() {
    syncInputFromSelect({
      selectId: "select_talent",
      inputId: "input_talent",
      readValue: (key) => getVariable(key)
    });
  }
  function arousalpicked() {
    const val = getUi("arousal_val");
    if (val) setButtonText("arousal_preview", val.value + "%");
  }
  function update_pregnancy() {
    setButtonText("pc_pregnancy", "MC = " + (getPcPregnant() ?? 0));
    setButtonText("npc_pregnancy", "NPC = " + (getTotalNpcPregnant() ?? 0));
  }
  function update_school_rep() {
    syncInputFromSelect({
      selectId: "select_school_rep",
      inputId: "input_school_rep",
      readValue: (key) => getVariable(key)
    });
  }
  var coreUpdates = {
    setButtonText,
    statpick,
    statpicke,
    spraystate,
    bodycurrent,
    bodytypecurrent,
    ballscurrent,
    virginitycurrent,
    crimecurrent,
    vowcurrent,
    characurrent,
    lactatingcurrent,
    milkcurrent,
    cumcurrent,
    famecurrent,
    npccurrent,
    examcurrent,
    talentcurrent,
    arousalpicked,
    update_pregnancy,
    update_school_rep
  };
  var core_updates_default = coreUpdates;

  // src/features/fetchers/misc-updates.js
  var misc_updates_exports = {};
  __export(misc_updates_exports, {
    default: () => misc_updates_default,
    randomEncounterUpdate: () => randomEncounterUpdate,
    update_cheat_state: () => update_cheat_state,
    update_farm_animals_like: () => update_farm_animals_like,
    update_farm_assault_day: () => update_farm_assault_day,
    update_farm_buildtime: () => update_farm_buildtime
  });
  function update_cheat_state() {
    const button = getUi("in_game_cheat");
    if (!button) return;
    const debug = getVariable("debug");
    const label = button.textContent?.trim() ?? "";
    if (debug === 1 && label.startsWith("Enable") || debug === 0 && label.startsWith("Disable")) {
      const isEnabled = button.innerHTML === "Enable";
      setVariable("debug", isEnabled ? 1 : 0);
      button.innerHTML = isEnabled ? "Disable" : "Enable";
    }
  }
  function update_farm_assault_day() {
    const timer = getVariable("farm_attack_timer");
    if (timer != null) setValue("assault_time", timer);
  }
  function update_farm_buildtime() {
    const timer = getVariablePath("farm.build_timer");
    if (timer != null) setValue("build_time", timer);
  }
  function update_farm_animals_like() {
    const farm = getFarm();
    if (!farm) return;
    withElements({ animal: "animal_choice", input: "animal_input" }, ({ animal, input }) => {
      input.value = farm.beasts?.[animal.value] ?? "";
    });
  }
  function randomEncounterUpdate() {
    setText("randomEncounterSet", getVariable("alluremod") === 0 ? "Disabled" : "Enabled");
  }
  var miscUpdates = {
    update_cheat_state,
    update_farm_assault_day,
    update_farm_buildtime,
    update_farm_animals_like,
    randomEncounterUpdate
  };
  var misc_updates_default = miscUpdates;

  // src/features/fetchers/offspring-updates.js
  var offspring_updates_exports = {};
  __export(offspring_updates_exports, {
    default: () => offspring_updates_default,
    update_mc_abortion_list: () => update_mc_abortion_list,
    update_mc_baby_info: () => update_mc_baby_info,
    update_mc_baby_list: () => update_mc_baby_list,
    update_mc_tentacle: () => update_mc_tentacle,
    update_mc_tentacle_input: () => update_mc_tentacle_input,
    update_named_npc_abortion_list: () => update_named_npc_abortion_list,
    update_npc_abortion_list: () => update_npc_abortion_list,
    update_npc_fetus_abortion_list: () => update_npc_fetus_abortion_list
  });

  // src/config/game-data.js
  var downloadSite = "https://www.mediafire.com/folder/d6uiwpcm3y0gu/degrees_of_lewdity";
  var sourceCode = "https://github.com/Zenix-Al/DoL-CheatPlus.git";
  var npctrait = ["trust", "love", "dom", "lust", "rage", "trauma", "purity", "corruption"];
  var characteristics = [
    "beauty",
    "purity",
    "physique",
    "willpower",
    "awareness",
    "promiscuity",
    "exhibitionism",
    "deviancy",
    "grace",
    "submissive",
    "masochism",
    "sadism"
  ];
  var bodyparts = [
    "nipples",
    "bottom",
    "penis",
    "balls",
    "clit",
    "anus",
    "vagina",
    "labia",
    "left_thigh",
    "right_thigh",
    "left_foot",
    "right_foot",
    "left_arm",
    "right_arm",
    "left_hand",
    "right_hand",
    "tummy",
    "back",
    "face",
    "mouth",
    "left_ear",
    "right_ear",
    "hair"
  ];
  var parasitename = ["urchin", "slime", "maggot"];
  var fame = [
    "exhibitionism",
    "prostitution",
    "bestiality",
    "sex",
    "rape",
    "good",
    "business",
    "scrap",
    "pimp",
    "social",
    "model",
    "pregnancy",
    "impreg"
  ];
  var school_rep = ["delinquency", "cool"];
  var exam = ["science_exam", "maths_exam", "english_exam", "history_exam"];
  var talent_skill = [
    "danceskill",
    "swimmingskill",
    "skulduggery",
    "athletics",
    "tending",
    "housekeeping"
  ];
  var hentaiSkill = [
    "seductionskill",
    "oralskill",
    "vaginalskill",
    "analskill",
    "handskill",
    "feetskill",
    "bottomskill",
    "thighskill",
    "chestskill",
    "penileskill"
  ];
  var babyOptions = ["motherKnown", "fatherKnown", "name", "abandon"];
  var babyOptionsText = ["mother Known", "father Known", "name", "Abandon"];

  // src/features/fetchers/offspring-updates.js
  var mcBabyListOptionsLoaded = false;
  function update_mc_tentacle() {
    withElements({ location: "mc_tentacle_location" }, ({ location }) => {
      const creatures = getContainer()?.[location.value]?.creatures ?? {};
      const options6 = Object.entries(creatures).filter(([, creature]) => creature != null).map(([key, creature]) => ({ value: key, label: creature.creature }));
      setOptions("mc_tentacle_select", options6);
    });
    update_mc_tentacle_input();
  }
  function update_mc_tentacle_input() {
    withElements(
      {
        select: "mc_tentacle_select",
        location: "mc_tentacle_location",
        input: "mc_tentacle_input"
      },
      ({ select, location, input }) => {
        if (select.value === "") return;
        input.value = getContainer()?.[location.value]?.creatures?.[select.value]?.stats?.speed ?? "";
      }
    );
  }
  function update_mc_baby_info() {
    withElements(
      {
        babySelect: "mc_baby_select",
        actionSelect: "mc_baby_action_select",
        input: "mc_baby_input",
        tooltip: "mc_baby_tooltip"
      },
      ({ babySelect, actionSelect, input, tooltip }) => {
        const child = getChildren()?.[babySelect.value];
        if (!child) return;
        const tooltipText = tooltip.querySelector("span");
        if (tooltipText) {
          tooltipText.textContent = `Name: ${child.name}, Father: ${child.father}, Mother: ${child.mother}, Location: ${child.birthLocation}`;
        }
        if (actionSelect.value === "name") {
          input.type = "text";
          input.value = child[actionSelect.value] || "";
        } else {
          input.type = "checkbox";
          input.checked = Boolean(child[actionSelect.value]);
        }
      }
    );
  }
  function update_mc_baby_list() {
    const hasUi = withElements(
      { babyActionSelect: "mc_baby_action_select", babyInput: "mc_baby_input" },
      ({ babyActionSelect, babyInput }) => {
        setOptions(
          "mc_baby_select",
          Object.keys(getChildren() ?? {}).map((key) => ({ value: key, label: key }))
        );
        update_mc_baby_info();
        if (!mcBabyListOptionsLoaded) {
          mcBabyListOptionsLoaded = true;
          babyInput.style.display = "";
          babyActionSelect.innerHTML = "";
          Object.entries(babyOptions).forEach(([key, value]) => {
            babyActionSelect.append(new Option(babyOptionsText[key], value));
          });
        }
      }
    );
    if (!hasUi) return;
  }
  function update_mc_abortion_list() {
    withElements({ location: "mc_abortion_location" }, ({ location }) => {
      const totalFetus = getSexStats()?.[location.value]?.pregnancy?.fetus?.length ?? 0;
      setRangeOptions("mc_abortion_select", totalFetus);
    });
  }
  function update_named_npc_abortion_list() {
    withElements({ selectedNpc: "named_npc_abortion_chara_select" }, ({ selectedNpc: selectedNpc2 }) => {
      let totalFetus = 0;
      for (const npc of getNPCName() ?? []) {
        if (npc.description === selectedNpc2.value && typeof npc.pregnancy.fetus === "object") {
          totalFetus = npc.pregnancy.fetus.length;
        }
      }
      setRangeOptions("named_npc_abortion_select", totalFetus);
    });
  }
  function update_npc_abortion_list() {
    const storedNpcs = getStoredNPCs();
    if (typeof storedNpcs?.pregnancy_0 !== "object") return false;
    const hasUi = withElements({ abortionSelect: "npc_abortion_chara_select" }, () => {
    });
    if (!hasUi) return false;
    const options6 = [];
    let number = 1;
    for (const key in storedNpcs) {
      options6.push({
        value: key,
        label: number + ". " + storedNpcs[key].pregnancy.fetus[0].mother
      });
      number++;
    }
    for (const key in getCheatPlus()?.storedNPCs ?? {}) {
      options6.push({
        value: key,
        label: number + ". " + getCheatPlus().storedNPCs[key].pregnancy.fetus[0].mother
      });
      number++;
    }
    setOptions("npc_abortion_chara_select", options6);
    return true;
  }
  function update_npc_fetus_abortion_list() {
    withElements({ abortionCharaSelect: "npc_abortion_chara_select" }, ({ abortionCharaSelect }) => {
      const selected = abortionCharaSelect.value;
      let totalFetus = 0;
      if (selected.match(/pregnancy/)) {
        totalFetus = getStoredNPCs()?.[selected]?.pregnancy?.fetus?.length ?? 0;
      } else if (selected.match(/stored/)) {
        totalFetus = getCheatPlus()?.storedNPCs?.[selected]?.pregnancy?.fetus?.length ?? 0;
      }
      setRangeOptions("npc_abortion_select", totalFetus);
    });
  }
  var offspringUpdates = {
    update_mc_tentacle,
    update_mc_tentacle_input,
    update_mc_baby_info,
    update_mc_baby_list,
    update_mc_abortion_list,
    update_named_npc_abortion_list,
    update_npc_abortion_list,
    update_npc_fetus_abortion_list
  };
  var offspring_updates_default = offspringUpdates;

  // src/features/fetchers/pregnancy-updates.js
  var pregnancy_updates_exports = {};
  __export(pregnancy_updates_exports, {
    default: () => pregnancy_updates_default,
    update_pregnancy_day_mc: () => update_pregnancy_day_mc,
    update_pregnancy_day_named_npc: () => update_pregnancy_day_named_npc,
    update_pregnancy_day_npc: () => update_pregnancy_day_npc,
    update_pregnancy_list_mc: () => update_pregnancy_list_mc,
    update_pregnancy_list_named_npc: () => update_pregnancy_list_named_npc,
    update_pregnancy_list_npc: () => update_pregnancy_list_npc
  });

  // src/features/cheat/pregnancy-lock-state.js
  var named_npc_pregnancy_locked = [];
  var named_npc_pregnancy_locked_day = [];
  var npc_pregnancy_locked = [];
  var npc_pregnancy_locked_day = [];
  var mc_pregnancy_locked = [];
  var mc_pregnancy_locked_hole = [];
  var mc_pregnancy_locked_type = [];
  var mc_pregnancy_locked_day = [];

  // src/features/fetchers/pregnancy-updates.js
  function update_pregnancy_list_named_npc() {
    update_pregnancy_day_named_npc();
  }
  function update_pregnancy_day_named_npc() {
    withElements({ select: "named_npc_pregnancy_manager" }, ({ select }) => {
      if (select.value === "") return;
      const npc = getNPCName()?.[Number(select.value)];
      if (!npc?.pregnancy || npc.pregnancy.timerEnd == null || npc.pregnancy.timer == null) return;
      setValue("named_npc_pregnancy_input", (npc.pregnancy.timerEnd - npc.pregnancy.timer) / 3);
      setChecked(
        "named_npc_pregnancy_toggle",
        Array.isArray(named_npc_pregnancy_locked) ? named_npc_pregnancy_locked.includes(select.value) : false
      );
    });
  }
  function update_pregnancy_list_npc() {
    update_pregnancy_day_npc();
  }
  function update_pregnancy_day_npc() {
    withElements({ select: "npc_pregnancy_manager" }, ({ select }) => {
      if (select.value === "") return;
      const npc = getStoredNPCs()?.[select.value];
      if (!npc?.pregnancy || npc.pregnancy.timerEnd == null || npc.pregnancy.timer == null) return;
      setValue("npc_pregnancy_input", (npc.pregnancy.timerEnd - npc.pregnancy.timer) / 3);
      setChecked(
        "npc_pregnancy_toggle",
        Array.isArray(npc_pregnancy_locked) ? npc_pregnancy_locked.includes(select.value) : false
      );
    });
  }
  function update_pregnancy_list_mc() {
    withElements({ hole: "mc_pregnancy_hole" }, ({ hole }) => {
      const pregnancy = getSexStats()?.[hole.value]?.pregnancy;
      if (!pregnancy) {
        setOptions("mc_pregnancy_manager", []);
        return;
      }
      if (pregnancy.type == "parasite") {
        const options6 = Object.entries(pregnancy.fetus ?? {}).map(([key, fetus]) => ({
          value: key,
          label: fetus?.creature ?? key
        }));
        setOptions("mc_pregnancy_manager", options6);
      } else if (pregnancy.timerEnd != null) {
        setOptions("mc_pregnancy_manager", [{ value: "baby", label: "baby" }]);
      } else {
        setOptions("mc_pregnancy_manager", []);
      }
    });
  }
  function update_pregnancy_day_mc() {
    withElements(
      {
        select: "mc_pregnancy_manager",
        hole: "mc_pregnancy_hole"
      },
      ({ select, hole }) => {
        if (select.value === "") return;
        const pregnancy = getSexStats()?.[hole.value]?.pregnancy;
        if (!pregnancy) return;
        const pregType = pregnancy.type;
        if (pregType == "parasite") {
          setValue("mc_pregnancy_input", pregnancy.fetus?.[select.value]?.daysLeft ?? "");
        } else {
          if (pregnancy.timerEnd == null || pregnancy.timer == null) return;
          setValue("mc_pregnancy_input", (pregnancy.timerEnd - pregnancy.timer) / 3);
        }
        const lockIndex = Array.isArray(mc_pregnancy_locked) ? mc_pregnancy_locked.findIndex((name) => name == select.value) : -1;
        const lockState = lockIndex === -1 ? 0 : mc_pregnancy_locked_hole[lockIndex] != hole.value ? 1 : mc_pregnancy_locked_type[lockIndex] != pregType ? 2 : 3;
        setChecked("mc_pregnancy_toggle", lockState === 3);
      }
    );
  }
  var pregnancyUpdates = {
    update_pregnancy_list_named_npc,
    update_pregnancy_day_named_npc,
    update_pregnancy_list_npc,
    update_pregnancy_day_npc,
    update_pregnancy_list_mc,
    update_pregnancy_day_mc
  };
  var pregnancy_updates_default = pregnancyUpdates;

  // src/features/fetchers/index.js
  function runHydrators(handlers) {
    handlers.forEach((handler) => {
      if (typeof handler === "function") handler();
    });
  }
  var quickHydrators = [
    arousalpicked,
    vowcurrent,
    update_cheat_state,
    randomEncounterUpdate,
    update_pregnancy,
    update_toggle
  ];
  var miscHydrators = [];
  function update_toggle() {
    const bundles = ToggleScheduler.getBundles();
    const allActive = {
      ...bundles.functionbundle,
      ...bundles.dailyfunctionbundle
    };
    for (const id in allActive) {
      if (typeof allActive[id] === "function") {
        const button = byUiId(id) || document.getElementById(id);
        if (button) button.classList.add("cp-toggle-active");
      }
    }
  }
  function update_pregnancy_mc() {
    update_pregnancy_list_mc();
    update_pregnancy_day_mc();
  }
  function hydrateQuickSection() {
    runHydrators(quickHydrators);
    void getActiveCheatBuilder()?.sectionOpened("quick");
  }
  function hydrateStatsSection() {
    void getActiveCheatBuilder()?.sectionOpened("stats");
  }
  function hydrateMiscSection() {
    runHydrators(miscHydrators);
    void getActiveCheatBuilder()?.sectionOpened("misc");
  }
  var fetcherActions = {
    update_toggle,
    ...core_updates_exports,
    ...pregnancy_updates_exports,
    ...offspring_updates_exports,
    ...misc_updates_exports
  };
  var hydrateCheatUi = fetcherActions;
  var hydratePregnancy = {
    update_pregnancy_mc
  };

  // src/features/cheat/player-body-actions.js
  function createPlayerBodyActions() {
    return {
      bodytypemanager() {
        const bodytypepick = byUiId("bodytypepick")?.value;
        const bodyTypes = { Masculine: "m", Feminine: "f", Androgynous: "a" };
        if (bodytypepick in bodyTypes) {
          getVars().player.gender_body = bodyTypes[bodytypepick];
          showToast("Activated!");
          hydrateCheatUi.bodytypecurrent();
        } else {
          showToast("Failed!");
        }
      },
      sprayunlimited() {
        getVars().infinitespray = getVars().infinitespray === 1 ? 0 : 1;
        showToast("Activated!");
        hydrateCheatUi.spraystate();
      },
      ballsmanager() {
        if (getVars().player.ballsExist === void 0) return;
        getVars().player.ballsExist = !getVars().player.ballsExist;
        showToast("Activated!");
        hydrateCheatUi.ballscurrent();
      },
      virginitymanager() {
        const virginitypick = byUiId("virginitypick").value;
        if (getVars().player.virginity === void 0) return;
        getVars().player.virginity[virginitypick] = true;
        hydrateCheatUi.virginitycurrent();
        showToast("Activated!");
      },
      virginitypure() {
        if (getVars().player.virginity === void 0) return;
        const virginitypick = byUiId("virginitypick");
        const options6 = virginitypick.getElementsByTagName("option");
        for (let index = 0; index < options6.length; index++) {
          getVars().player.virginity[options6[index].value] = true;
        }
        hydrateCheatUi.virginitycurrent();
        showToast("Activated!");
      },
      charamanager() {
        const statpick2 = byUiId("charapick").value;
        const value = parseInt(byUiId("charainput").value);
        if (!isNaN(value)) {
          showToast("Activated!");
          getVars()[statpick2] = value;
        }
      },
      lactatingmanager() {
        getVars().lactating = getVars().lactating == 1 ? 0 : 1;
        hydrateCheatUi.lactatingcurrent();
        showToast("Activated!");
      },
      cummanager() {
        const value = parseInt(byUiId("cuminput").value);
        if (!isNaN(value)) {
          showToast("Activated!");
          getVars().semen_volume = value;
          hydrateCheatUi.cumcurrent();
        }
      },
      milkmanager() {
        const value = parseInt(byUiId("milkinput").value);
        if (!isNaN(value)) {
          showToast("Activated!");
          getVars().milk_volume = value;
          hydrateCheatUi.milkcurrent();
        }
      },
      cumfill() {
        getVars().semen_amount = getVars().semen_volume;
        showToast("Activated!");
      },
      milkfill() {
        getVars().milk_amount = getVars().milk_volume;
        showToast("Activated!");
      },
      infect() {
        if (getVars().parasite === void 0) return;
        showToast("Activated!");
        const parasite = byUiId("parasitename").value;
        const body = byUiId("bodyparts").value;
        getVars().parasite[parasite].push(body);
        getVars().parasite[body].name = parasite;
      },
      desinfect() {
        if (getVars().parasite === void 0) return;
        showToast("Activated!");
        const parasite = byUiId("parasitename").value;
        const body = byUiId("bodyparts").value;
        getVars().parasite[body] = [];
        getVars().parasite[parasite] = getVars().parasite[parasite].filter((item) => item !== body);
      }
    };
  }

  // src/core/game-context.js
  var runtimeWindow = getRuntimeWindow();
  var runtimeSugarCube = runtimeWindow?.SugarCube;
  var testedOn = runtimeWindow?.testedOn ?? "0.0.0";
  var cheatVer = runtimeWindow?.cheatVer ?? (true ? "3.0.0" : "dev");
  var isServer = runtimeWindow?.isServer ?? 0;
  var cheatVerType = runtimeWindow?.cheatVerType ?? "";
  var curVer = document.getElementById(GAME_VERSION_ELEMENT_ID)?.innerHTML ?? "";
  var npcnamelist = runtimeSugarCube?.setup?.NPCNameList ?? [];
  if (curVer?.startsWith(".")) curVer = "0" + curVer;
  function getNpcNameList() {
    return npcnamelist;
  }

  // src/features/cheat/player-progression-actions.js
  function createPlayerProgressionActions() {
    return {
      changetraitbro() {
        if (getVars().NPCName === void 0) return;
        const npcName = byUiId("npcnames").value;
        const trait = byUiId("npctraits").value;
        const value = parseInt(byUiId("npcchangeinput").value);
        if (!isNaN(value)) {
          const npcnamelist2 = getNpcNameList();
          for (let index = 0; index < npcnamelist2.length; index++) {
            if (getVars().NPCName[index].description === npcName) {
              getVars().NPCName[index][trait] = value;
              showToast("Activated!");
              break;
            }
          }
        }
      },
      set_fame12() {
        const selected = byUiId("fame_name").value;
        const input = parseInt(byUiId("input_fame12").value);
        if (isNaN(input)) {
          showToast("failed : input is not a number!");
          return;
        }
        if (getVars().fame[selected] === void 0) {
          showToast("failed!");
          return;
        }
        getVars().fame[selected] = input;
        showToast("Activated!");
      },
      exammanager() {
        const selected = byUiId("select_exam").value;
        const input = parseInt(byUiId("input_exam").value);
        if (isNaN(input)) {
          showToast("failed : input is not a number!");
          return;
        }
        getVars()[selected] = input;
        showToast("Activated!");
      },
      talentmanager() {
        const selected = byUiId("select_talent").value;
        const input = parseInt(byUiId("input_talent").value);
        if (isNaN(input)) {
          showToast("failed : input is not a number!");
          return;
        }
        getVars()[selected] = input;
        showToast("Activated!");
      },
      set_hentai_skill() {
        showToast("Activated!");
        const selected = byUiId("select_hentai_skill").value;
        const input = parseInt(byUiId("input_hentai_skill").value);
        if (!selected || isNaN(input)) return;
        getVars()[selected] = input;
      }
    };
  }

  // src/features/cheat/player-stats-actions.js
  function createPlayerStatsActions() {
    return {
      arousal_player() {
        const value = byUiId("arousal_val").value;
        if (isNaN(value)) return;
        showToast("Activated!");
        getVars().arousal = parseInt(1e4 * value / 100);
      },
      arousal_enemy() {
        const value = byUiId("arousal_val").value;
        if (isNaN(value)) return;
        const arousal = getVars().enemyarousalmax || 0;
        getVars().enemyarousal = parseInt(arousal * value / 100);
        showToast("Activated!");
      },
      aezakmi() {
        if (!getVars().crime) return;
        let total = 0;
        let totalKeys = 0;
        for (const key in getVars().crime) {
          const crime = getVars().crime[key];
          const currentVal = parseInt(crime.current);
          if (!isNaN(currentVal)) {
            total += currentVal;
            totalKeys++;
          }
        }
        if (totalKeys === 0) return;
        total = parseInt((total - 100) / totalKeys);
        for (const key in getVars().crime) {
          const crime = getVars().crime[key];
          if (!isNaN(parseInt(crime.current))) {
            crime.current = total;
            crime.count = total;
            crime.countHistory = total;
            crime.history = total;
          }
        }
        hydrateCheatUi.crimecurrent();
        showToast("Activated!");
      },
      imdonefor() {
        if (!getVars().crime) return;
        let total = 0;
        let totalKeys = 0;
        for (const key in getVars().crime) {
          const crime = getVars().crime[key];
          const currentVal = parseInt(crime.current);
          if (!isNaN(currentVal)) {
            total += currentVal;
            totalKeys++;
          }
        }
        if (totalKeys === 0) return;
        total = parseInt((total + 100) / totalKeys);
        for (const key in getVars().crime) {
          const crime = getVars().crime[key];
          if (!isNaN(parseInt(crime.current))) {
            crime.current = total;
          }
        }
        hydrateCheatUi.crimecurrent();
        showToast("Activated!");
      },
      imvirgintemple() {
        if (getVars()?.player?.virginity === void 0) {
          showToast("Failed!");
          return;
        }
        showToast("Activated!");
        getVars().player.virginity.temple = !getVars().player.virginity.temple;
        hydrateCheatUi.vowcurrent();
      },
      hesoyam() {
        showToast("Activated!");
        getVars().pain = 0;
        getVars().arousal = 0;
        getVars().tiredness = 0;
        getVars().stress = 0;
        getVars().trauma = 0;
        getVars().control = 1e3;
        getVars().drunk = 0;
        getVars().drugged = 0;
        getVars().hallucinogen = 0;
      },
      statmanager() {
        const statpick2 = byUiId("statpick").value;
        const value = parseFloat(byUiId("statinput").value);
        if (!isNaN(value)) {
          showToast("Activated!");
          getVars()[statpick2] = value;
        } else {
          showToast("Value is not a number!");
        }
      },
      kill_player() {
        showToast("Activated!");
        getVars().pain = 200;
        getVars().arousal = 1e4;
        getVars().tiredness = 2e3;
        getVars().stress = 1e4;
        getVars().trauma = 5e3;
        getVars().control = 0;
        getVars().drunk = 1e3;
        getVars().drugged = 1e3;
        getVars().hallucinogen = 1e3;
      },
      kill_enemy() {
        showToast("Activated!");
        getVars().enemyhealth = 0;
        getVars().enemytrust = 100;
        getVars().enemyanger = 0;
      },
      enemycalm() {
        showToast("Activated!");
        getVars().enemyhealth = getVars().enemyhealthmax > 0 ? 100 : 0;
        getVars().enemytrust = 100;
        getVars().enemyanger = 0;
      },
      statmanagere() {
        const statpicke2 = byUiId("statpicke")?.value;
        const value = Number(byUiId("statinpute")?.value);
        if (!statpicke2 || isNaN(value)) {
          showToast("Failed!");
          return;
        }
        showToast("Activated!");
        getVars()[statpicke2] = value;
      }
    };
  }

  // src/features/cheat/player-actions.js
  var playerActions = {
    ...createPlayerStatsActions(),
    ...createPlayerBodyActions(),
    ...createPlayerProgressionActions()
  };
  var player_actions_default = playerActions;

  // src/core/config/cheat-config-schema.js
  var entry = (path7, type, defaultValue, description, migrationAliases = []) => Object.freeze({ path: path7, type, scope: "save", defaultValue, description, migrationAliases });
  var CHEAT_CONFIG_SCHEMA = Object.freeze([
    entry("angel", "number", 0, "Saved angel-stat baseline."),
    entry("angelMode", "boolean", true, "Whether angel baseline restoration is active."),
    entry("toggles", "object", {}, "Active stable toggle IDs."),
    entry("storedNPCs", "object", {}, "CheatPlus-managed overflow NPC pregnancy data."),
    entry("storedNPCsDate", "number", 0, "Last game day overflow NPC data was processed."),
    entry("storedNPCsPriority", "number", 0, "Overflow NPC processing priority."),
    entry("trueDivine", "string", "", "Remembered demon/angel transformation branch."),
    entry("orgasmCount", "number", 0, "Intense-cum toggle counter."),
    entry("baseNpcPregnancyChance", "number-or-null", null, "Baseline restored by NPC toggle."),
    entry("unlicumMode", "boolean", false, "Intense-cum toggle phase.")
  ]);
  var CHEAT_CONFIG_DEFAULTS = Object.freeze(
    Object.fromEntries(CHEAT_CONFIG_SCHEMA.map(({ path: path7, defaultValue }) => [path7, defaultValue]))
  );
  var CHEAT_CONFIG_CLASSIFICATION = Object.freeze({
    saveBackedConfig: Object.freeze(CHEAT_CONFIG_SCHEMA.map(({ path: path7 }) => path7)),
    transientRuntimeState: Object.freeze([
      "scheduler callbacks",
      "failure counters",
      "cooldown timestamps",
      "mounted controls",
      "AbortController instances"
    ]),
    gameState: Object.freeze([
      "money",
      "arousal",
      "date",
      "player",
      "NPCName",
      "storedNPCs (base-game path)",
      "pregnancy",
      "setup"
    ])
  });
  function isPlainObject(value) {
    return Boolean(value) && typeof value === "object" && !Array.isArray(value);
  }
  function isCheatConfigValueValid(definition, value) {
    if (definition.type === "number") return Number.isFinite(value);
    if (definition.type === "number-or-null") return value === null || Number.isFinite(value);
    if (definition.type === "boolean") return typeof value === "boolean";
    if (definition.type === "string") return typeof value === "string";
    if (definition.type === "object") return isPlainObject(value);
    return false;
  }
  function cloneDefault(value) {
    return isPlainObject(value) ? { ...value } : value;
  }
  function normalizeCheatConfig(input, { baseNpcPregnancyChance = null } = {}) {
    const source = isPlainObject(input) ? input : {};
    const normalized = {};
    for (const definition of CHEAT_CONFIG_SCHEMA) {
      let value = source[definition.path];
      if (value === void 0) {
        for (const alias of definition.migrationAliases) {
          if (source[alias] !== void 0) {
            value = source[alias];
            break;
          }
        }
      }
      if (!isCheatConfigValueValid(definition, value)) value = cloneDefault(definition.defaultValue);
      normalized[definition.path] = value;
    }
    if (normalized.baseNpcPregnancyChance === null && Number.isFinite(baseNpcPregnancyChance)) {
      normalized.baseNpcPregnancyChance = baseNpcPregnancyChance;
    }
    return normalized;
  }

  // src/core/sugarcube/cheat-config.js
  function cfg() {
    return getVars()?.cheatPlus ?? null;
  }
  function initCheatConfig() {
    const vars = getVars();
    if (!vars) return;
    vars.cheatPlus = normalizeCheatConfig(vars.cheatPlus, {
      baseNpcPregnancyChance: vars.baseNpcPregnancyChance
    });
    const c = vars.cheatPlus;
    if (!c.trueDivine && vars.penisstate === 0 && vars.vaginastate === 0) {
      c.trueDivine = vars.demon > 0 ? "demon" : vars.angel > 0 ? "angel" : "";
    }
  }
  function getAngel() {
    return cfg()?.angel ?? 0;
  }
  function setAngel(value) {
    const c = cfg();
    if (c) c.angel = value;
  }
  function getAngelMode() {
    return cfg()?.angelMode ?? true;
  }
  function setAngelMode(value) {
    const c = cfg();
    if (c) c.angelMode = value;
  }
  function setTrueDivine(value) {
    const c = cfg();
    if (c) c.trueDivine = value;
  }
  function getToggles() {
    return cfg()?.toggles ?? {};
  }
  function activateToggle(id) {
    const c = cfg();
    if (c) c.toggles[id] = id;
  }
  function deactivateToggle(id) {
    const c = cfg();
    if (c) delete c.toggles[id];
  }
  function getStoredCheatNPCs() {
    return cfg()?.storedNPCs ?? {};
  }
  function setStoredCheatNPCs(value) {
    const c = cfg();
    if (c) c.storedNPCs = value;
  }
  function getStoredNPCsDate() {
    return cfg()?.storedNPCsDate ?? 0;
  }
  function setStoredNPCsDate(value) {
    const c = cfg();
    if (c) c.storedNPCsDate = value;
  }
  function getNPCsPriority() {
    return cfg()?.storedNPCsPriority ?? 0;
  }
  function setNPCsPriority(value) {
    const c = cfg();
    if (c) c.storedNPCsPriority = value;
  }
  function getBaseNpcPregnancyChance() {
    return cfg()?.baseNpcPregnancyChance;
  }
  function setBaseNpcPregnancyChance(value) {
    const c = cfg();
    if (c) c.baseNpcPregnancyChance = value;
  }
  function getUnlicumMode() {
    return cfg()?.unlicumMode ?? false;
  }
  function setUnlicumMode(value) {
    const c = cfg();
    if (c) c.unlicumMode = value;
  }
  function getOrgasmCount() {
    return cfg()?.orgasmCount ?? 0;
  }
  function incrementOrgasmCount() {
    const c = cfg();
    if (!c) return 0;
    c.orgasmCount = (c.orgasmCount ?? 0) + 1;
    return c.orgasmCount;
  }
  function resetOrgasmCount() {
    const c = cfg();
    if (c) c.orgasmCount = 0;
  }

  // src/constants/runtime.js
  var SECONDS_PER_DAY = 86400;

  // src/core/toggle/state-repository.js
  var toggleState = {
    toggleActive: {},
    toggleActiveDaily: {},
    toggleDeactivated: false,
    initNPCinstapreg: false,
    tmpArousal: 0,
    orgasmdown: 0
  };
  function getToggleState() {
    return toggleState;
  }
  function clearActiveToggles() {
    for (const key in toggleState.toggleActive) {
      delete toggleState.toggleActive[key];
    }
  }
  function clearAllActiveToggles() {
    clearActiveToggles();
    for (const key in toggleState.toggleActiveDaily) {
      delete toggleState.toggleActiveDaily[key];
    }
  }
  var state_repository_default = toggleState;

  // src/services/storage.js
  function initStorage() {
    initCheatConfig();
  }
  function reactivateToggles() {
    logger_default("toggle", "=== reactivateToggles START ===", { level: "info" });
    const togglesRef = getToggles();
    logger_default("toggle", `Loaded from storage: ${Object.keys(togglesRef || {}).length} toggles`, {
      level: "info"
    });
    const storedToggles = JSON.parse(JSON.stringify(togglesRef || {}));
    logger_default("toggle", `Deep cloned ${Object.keys(storedToggles).length} toggles`, { level: "info" });
    setReactivatingToggles(true);
    logger_default("toggle", "Set reactivating flag = true", { level: "info" });
    resetRuntimeToggles();
    logger_default("toggle", "Runtime toggles have been reset", { level: "info" });
    let activatedCount = 0;
    for (const key in storedToggles) {
      if (isRegistered(key)) {
        const value = storedToggles[key];
        const enabled = value === true || value === 1 || value === key || Boolean(value);
        if (!enabled) {
          logger_default("toggle", `Skipping toggle with falsy value: ${key}`, {
            level: "warn",
            data: { value }
          });
          continue;
        }
        logger_default("toggle", `Dispatching toggle: ${key}`, { level: "info" });
        dispatch(key);
        activatedCount++;
      } else {
        logger_default("storage", `Skipping unregistered toggle: ${key}`, { level: "warn" });
      }
    }
    logger_default("toggle", `Reactivation finished - Activated ${activatedCount} toggles`, {
      level: "info"
    });
    logger_default("toggle", "=== reactivateToggles END ===", { level: "info" });
    setReactivatingToggles(false);
  }
  function resetRuntimeToggles() {
    logger_default("toggle", "resetRuntimeToggles called", { level: "info" });
    ToggleScheduler.clearAll();
    logger_default("toggle", "ToggleScheduler.clearAll() done", { level: "info" });
    clearAllActiveToggles();
    logger_default("toggle", "clearAllActiveToggles() done", { level: "info" });
    const state = getToggleState();
    if (state) {
      state.toggleDeactivated = false;
      logger_default("toggle", "Reset toggleDeactivated flag", { level: "info" });
    }
  }

  // src/core/toggle/engine.js
  function createToggleEngine(toggleState2, getActionById, getToggleConfigById = null) {
    function restoreTogglesAfterObserverFailure() {
      logger_default("toggle", "Watchdog: Error detected in toggle cheat, starting restoration...");
      clearActiveToggles();
      showToast("Error detected in toggle cheat, resetting.");
      reactivateToggles();
      logger_default("toggle", "Watchdog: Restoration complete");
      showToast("Complete.");
    }
    function runitallRestore() {
      logger_default("toggle", "Manual restore triggered");
      ToggleScheduler.restore({ onRestore: restoreTogglesAfterObserverFailure });
    }
    function runitall() {
      const started = ToggleScheduler.runFrame({
        isLoad: getIsLoad(),
        onWatchdogRestore: restoreTogglesAfterObserverFailure
      });
      if (!started) return;
      decrementClickCounter();
      if (getClickCounter() > 0) {
        setTimeout(runitall, 10);
      }
      checkDateDaily();
    }
    function checkDateDaily() {
      const vars = getVars();
      const date = Math.floor(vars?.timeStamp / SECONDS_PER_DAY);
      if (getCurDate() !== date) {
        logger_default("toggle", `Daily trigger: game date changed from ${getCurDate()} to ${date}`);
        setCurDate(date);
        runitallDaily();
      }
    }
    function applyToggleMutation({ id, name, daily = null }) {
      if (!id) {
        logger_default("toggle", "applyToggleMutation: Missing toggle id", { level: "warn" });
        return;
      }
      const config = typeof getToggleConfigById === "function" ? getToggleConfigById(id) || {} : {};
      const isDaily = daily == null ? config.trigger === "daily" : Boolean(daily);
      const buttonLabel = name ?? config.label ?? "Activate";
      const cooldownMs = Number.isFinite(config.cooldownMs) ? Number(config.cooldownMs) : 100;
      const maxFailures = Number.isInteger(config.maxFailures) ? Math.max(1, Number(config.maxFailures)) : 5;
      const runOnActivate = config.runOnActivate !== false;
      const button = byUiId(id);
      const mapActive = isDaily ? toggleState2.toggleActiveDaily : toggleState2.toggleActive;
      const isActive = !!mapActive[id];
      if (isActive) {
        logger_default("toggle", `Deactivating toggle: ${id} (${isDaily ? "daily" : "regular"})`, {
          data: { button: !!button, label: buttonLabel }
        });
        ToggleScheduler.unregister(id, { daily: isDaily });
        if (!getReactivatingToggles()) deactivateToggle(id);
        delete mapActive[id];
        if (button) {
          if (button instanceof HTMLInputElement && button.type === "checkbox") {
            button.checked = false;
          } else {
            button.classList.remove("cp-toggle-active");
            button.textContent = buttonLabel;
          }
        }
        return;
      }
      if (!getReactivatingToggles()) setExtraNotif(true);
      const actionFn = getActionById(id);
      if (typeof actionFn !== "function") {
        logger_default("toggle", `Action not found for toggle: ${id}`, {
          data: { daily: isDaily },
          level: "warn"
        });
        setExtraNotif(false);
        return;
      }
      logger_default("toggle", `Activating toggle: ${id} (${isDaily ? "daily" : "regular"})`, {
        data: { cooldownMs, maxFailures, runOnActivate, label: buttonLabel, button: !!button }
      });
      ToggleScheduler.register(id, actionFn, { daily: isDaily, cooldownMs, maxFailures });
      if (!getReactivatingToggles()) activateToggle(id);
      mapActive[id] = true;
      if (button) {
        if (button instanceof HTMLInputElement && button.type === "checkbox") {
          button.checked = true;
        } else {
          button.classList.add("cp-toggle-active");
          button.textContent = buttonLabel;
        }
      }
      if (runOnActivate) {
        try {
          logger_default("toggle", `Running on activation: ${id}`);
          const fn = ToggleScheduler.getFunction(id, { daily: isDaily }) || actionFn;
          if (typeof fn === "function") fn();
        } catch (err) {
          logger_default("toggle", `Error running action on activation: ${id}`, {
            data: err,
            level: "error"
          });
        } finally {
          setExtraNotif(false);
        }
      } else {
        setExtraNotif(false);
      }
    }
    function runitallDaily() {
      logger_default("toggle", "Executing daily toggles");
      ToggleScheduler.runDaily();
    }
    function toggle(id, name) {
      applyToggleMutation({ id, name, daily: false });
    }
    function toggleDaily(id, name) {
      applyToggleMutation({ id, name, daily: true });
    }
    function toggleById(id, name) {
      applyToggleMutation({ id, name, daily: null });
    }
    return {
      runitallRestore,
      runitall,
      checkDateDaily,
      _applyToggleMutation: applyToggleMutation,
      runitallDaily,
      toggle,
      toggleDaily,
      toggleById
    };
  }

  // src/features/listeners/action-map-schema.js
  function assertNonEmptyString(value, fieldName, index, bucketName) {
    if (typeof value !== "string" || !value.trim()) {
      throw new Error(
        `[action-map-schema] ${bucketName}[${index}].${fieldName} must be a non-empty string`
      );
    }
  }
  function assertUniqueKeys(entries2, keyGetter, bucketName) {
    const seen = /* @__PURE__ */ new Set();
    entries2.forEach((entry2, index) => {
      const key = keyGetter(entry2);
      assertNonEmptyString(key, "key", index, bucketName);
      if (seen.has(key)) {
        throw new Error(`[action-map-schema] Duplicate key "${key}" in ${bucketName}`);
      }
      seen.add(key);
    });
  }
  function validateToggleEntries(entries2, bucketName) {
    if (!Array.isArray(entries2)) {
      throw new Error(`[action-map-schema] ${bucketName} must be an array`);
    }
    entries2.forEach((entry2, index) => {
      if (!entry2 || typeof entry2 !== "object") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}] must be an object`);
      }
      assertNonEmptyString(entry2.id, "id", index, bucketName);
      assertNonEmptyString(entry2.label, "label", index, bucketName);
      if (entry2.trigger != null && entry2.trigger !== "frame" && entry2.trigger !== "daily") {
        throw new Error(
          `[action-map-schema] ${bucketName}[${index}].trigger must be "frame" or "daily"`
        );
      }
      if (entry2.cooldownMs != null && (!Number.isFinite(entry2.cooldownMs) || entry2.cooldownMs < 0)) {
        throw new Error(
          `[action-map-schema] ${bucketName}[${index}].cooldownMs must be a non-negative number`
        );
      }
      if (entry2.maxFailures != null && (!Number.isInteger(entry2.maxFailures) || entry2.maxFailures < 1)) {
        throw new Error(
          `[action-map-schema] ${bucketName}[${index}].maxFailures must be an integer >= 1`
        );
      }
      if (entry2.runOnActivate != null && typeof entry2.runOnActivate !== "boolean") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}].runOnActivate must be boolean`);
      }
    });
    assertUniqueKeys(entries2, (entry2) => entry2.id, bucketName);
  }
  function validateMethodEntries(entries2, bucketName) {
    if (!Array.isArray(entries2)) {
      throw new Error(`[action-map-schema] ${bucketName} must be an array`);
    }
    entries2.forEach((entry2, index) => {
      if (!entry2 || typeof entry2 !== "object") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}] must be an object`);
      }
      assertNonEmptyString(entry2.actionKey, "actionKey", index, bucketName);
      if (entry2.methodName != null) {
        assertNonEmptyString(entry2.methodName, "methodName", index, bucketName);
      }
    });
    assertUniqueKeys(entries2, (entry2) => entry2.actionKey, bucketName);
  }
  function validateNavEntries(entries2, bucketName) {
    if (!Array.isArray(entries2)) {
      throw new Error(`[action-map-schema] ${bucketName} must be an array`);
    }
    entries2.forEach((entry2, index) => {
      if (!entry2 || typeof entry2 !== "object") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}] must be an object`);
      }
      assertNonEmptyString(entry2.actionKey, "actionKey", index, bucketName);
      assertNonEmptyString(entry2.navKey, "navKey", index, bucketName);
      assertNonEmptyString(entry2.contentKey, "contentKey", index, bucketName);
      assertNonEmptyString(entry2.hydrateKey, "hydrateKey", index, bucketName);
    });
    assertUniqueKeys(entries2, (entry2) => entry2.actionKey, bucketName);
  }
  function validateSimpleUiEntries(entries2, bucketName) {
    if (!Array.isArray(entries2)) {
      throw new Error(`[action-map-schema] ${bucketName} must be an array`);
    }
    entries2.forEach((entry2, index) => {
      if (!entry2 || typeof entry2 !== "object") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}] must be an object`);
      }
      assertNonEmptyString(entry2.actionKey, "actionKey", index, bucketName);
      assertNonEmptyString(entry2.target, "target", index, bucketName);
      if (entry2.arg != null) {
        assertNonEmptyString(entry2.arg, "arg", index, bucketName);
      }
    });
    assertUniqueKeys(entries2, (entry2) => entry2.actionKey, bucketName);
  }
  function validateBoundEntries(entries2, bucketName) {
    if (!Array.isArray(entries2)) {
      throw new Error(`[action-map-schema] ${bucketName} must be an array`);
    }
    entries2.forEach((entry2, index) => {
      if (!entry2 || typeof entry2 !== "object") {
        throw new Error(`[action-map-schema] ${bucketName}[${index}] must be an object`);
      }
      assertNonEmptyString(entry2.actionKey, "actionKey", index, bucketName);
      assertNonEmptyString(entry2.source, "source", index, bucketName);
      assertNonEmptyString(entry2.method, "method", index, bucketName);
    });
    assertUniqueKeys(entries2, (entry2) => entry2.actionKey, bucketName);
  }

  // src/features/listeners/action-map-toggle.js
  var TOGGLE_DEFINITIONS = [
    { id: "maxchruchtask", label: "Church", trigger: "daily" },
    { id: "maxanimaltask", label: "Stray", trigger: "daily" },
    { id: "edenshrooms", label: "Shroom", trigger: "daily" },
    { id: "edengarden", label: "Garden", trigger: "daily" },
    { id: "edenspring", label: "Spring", trigger: "daily" },
    { id: "edentimer", label: "Timer", trigger: "daily" },
    { id: "invinityNPCPregnancy", label: "Activate", trigger: "daily" },
    { id: "virginity", label: "Virgin", trigger: "frame" },
    { id: "purity", label: "Pure", trigger: "frame" },
    { id: "unlicum", label: "Cum", trigger: "frame" },
    { id: "unliarousal", label: "arousal", trigger: "frame" },
    { id: "everyone_horny", label: "Horny", trigger: "frame" },
    { id: "farm_safe", label: "Safe", trigger: "frame" },
    { id: "interact_child", label: "Auto", trigger: "frame", cooldownMs: 200 },
    { id: "pregnancy_detection", label: "Activate", trigger: "frame", cooldownMs: 250 },
    { id: "invincibleAngel", label: "Activate", trigger: "frame" },
    { id: "intenseCum", label: "intense cum", trigger: "frame", cooldownMs: 80 },
    { id: "allNPCInstaPregnant", label: "Activate", trigger: "frame", cooldownMs: 250 },
    { id: "allNPCMultiplePregnancy", label: "Activate", trigger: "frame", cooldownMs: 250 }
  ];
  var DAILY_TOGGLE_ACTIONS = TOGGLE_DEFINITIONS.filter((entry2) => entry2.trigger === "daily");
  var TOGGLE_ACTIONS = TOGGLE_DEFINITIONS.filter((entry2) => entry2.trigger !== "daily");
  validateToggleEntries(TOGGLE_DEFINITIONS, "TOGGLE_DEFINITIONS");

  // src/features/cheat/toggle-domain-basic-actions.js
  function createToggleDomainBasicActions() {
    return {
      everyone_horny() {
        const vars = getVars();
        if (vars.NPCName === void 0) return;
        for (let index = 0; index < vars.NPCName.length; index++) {
          if (vars.NPCName[index].description !== "Ivory Wraith") vars.NPCName[index].lust = 100;
        }
      },
      edenspring() {
        getVars().edenspring = 4;
      },
      edengarden() {
        getVars().edengarden = 4;
      },
      edentimer() {
        getVars().edendays = 0;
      },
      edenshrooms() {
        getVars().edenshrooms = 4;
      },
      maxchruchtask() {
        const vars = getVars();
        vars.temple_garden = 100;
        vars.temple_quarters = 100;
        vars.grace = 100;
      },
      maxanimaltask() {
        getVars().stray_happiness = 100;
      },
      purity() {
        getVars().purity = 1e3;
      },
      virginity() {
        const vars = getVars();
        if (vars?.player?.virginity === void 0) return;
        vars.player.virginity.penile = true;
        vars.player.virginity.vaginal = true;
      },
      farm_safe() {
        const vars = getVars();
        if (vars.farm === void 0) return;
        vars.farm.aggro = 0;
      },
      interact_child() {
        const vars = getVars();
        if (vars?.children && typeof vars.children === "object") {
          for (const key in vars.children) {
            const child = vars.children[key];
            const local = child?.localVariables;
            if (local?.event === true) {
              local.interactions = (local.interactions ?? 0) + 1;
              local.interactionsTotal = (local.interactionsTotal ?? 0) + 1;
              local.event = false;
            }
          }
        }
      }
    };
  }

  // src/features/cheat/toggle-domain-pregnancy-actions.js
  function createToggleDomainPregnancyActions(toggleState2, actionBagRef) {
    return {
      pregnancy_detection() {
        const vars = getVars();
        if (Object.keys(vars.storedNPCs).length === 0 || vars.NPCName === void 0) return;
        function countNpc() {
          let total = Object.keys(vars.storedNPCs).length;
          total += Object.keys(getStoredCheatNPCs()).length;
          for (let index = 0; index < vars.NPCName.length; index++) {
            if (vars?.NPCName[index]?.pregnancy?.fetus?.length > 0) total++;
          }
          return total;
        }
        function countPc() {
          if (vars.sexStats?.vagina?.pregnancy?.fetus === void 0 || vars.sexStats?.anus?.pregnancy?.fetus === void 0) {
            return 0;
          }
          return vars.sexStats.vagina.pregnancy.fetus.length + vars.sexStats.anus.pregnancy.fetus.length;
        }
        const nextNpc = countNpc();
        const nextPc = countPc();
        const actionBag = actionBagRef();
        if (getTotalNpcPregnant() === 0) {
          setTotalNpcPregnant(nextNpc);
          setPcPregnant(nextPc);
          return;
        }
        if (nextNpc > getTotalNpcPregnant()) {
          showToast("NPC is impregnated!");
          actionBag.invinityNPCPregnancy();
          setTotalNpcPregnant(nextNpc);
        } else if (nextNpc < getTotalNpcPregnant()) {
          showToast("NPC's baby has been born!");
          actionBag.invinityNPCPregnancy();
          setTotalNpcPregnant(nextNpc);
        }
        if (nextPc > getPcPregnant()) {
          showToast("MC is impregnated!");
          setPcPregnant(nextPc);
        } else if (nextPc < getPcPregnant()) {
          showToast("your baby has been born!!");
          setPcPregnant(nextPc);
        }
      },
      named_npc_pregnancy_manager_toggle() {
        const vars = getVars();
        if (named_npc_pregnancy_locked.length === 0 || named_npc_pregnancy_locked_day.length === 0) {
          return;
        }
        for (const key in named_npc_pregnancy_locked) {
          let total = vars.NPCName[named_npc_pregnancy_locked[key]].pregnancy.timerEnd - named_npc_pregnancy_locked_day[key] * 3;
          if (total < 0) total = 0;
          vars.NPCName[named_npc_pregnancy_locked[key]].pregnancy.timer = total;
        }
      },
      npc_pregnancy_manager_toggle() {
        const vars = getVars();
        if (npc_pregnancy_locked.length === 0 || npc_pregnancy_locked_day.length === 0) {
          return;
        }
        for (const key in npc_pregnancy_locked) {
          let total = vars.storedNPCs[npc_pregnancy_locked[key]].pregnancy.timerEnd - npc_pregnancy_locked_day[key] * 3;
          if (total < 0) total = 0;
          vars.storedNPCs[npc_pregnancy_locked[key]].pregnancy.timer = total;
        }
      },
      mc_pregnancy_manager_toggle() {
        const vars = getVars();
        if (mc_pregnancy_locked.length === 0 || mc_pregnancy_locked_day.length === 0) return;
        let offset = 0;
        for (const key in mc_pregnancy_locked) {
          if (mc_pregnancy_locked_type[offset] === "parasite") {
            vars.sexStats[mc_pregnancy_locked_hole[offset]].pregnancy.fetus[key].daysLeft = mc_pregnancy_locked_day[offset];
          } else {
            const timeEnd = vars.sexStats[mc_pregnancy_locked_hole[offset]].pregnancy.timerEnd;
            let time = timeEnd - mc_pregnancy_locked_day[offset] * 3;
            if (time < 0) time = 0;
            vars.sexStats[mc_pregnancy_locked_hole[offset]].pregnancy.timer = time;
          }
          offset++;
        }
      },
      invinityNPCPregnancy() {
        const vars = getVars();
        if (!vars) return;
        const limit = 8;
        const hardLimit = 10;
        const mainNPCs = vars.storedNPCs || {};
        const mainLength = Object.keys(mainNPCs).length;
        const priority = getNPCsPriority() || 0;
        const gameTime = vars.timeStamp;
        const currentDate = Math.floor(gameTime / SECONDS_PER_DAY);
        const lastDate = getStoredNPCsDate();
        const dateLeft = lastDate !== 0 ? (currentDate - lastDate) * 3 : 0;
        if (dateLeft === 0) {
          if (mainLength <= limit) return;
          if (mainLength >= limit && priority >= 8) return;
        }
        setStoredNPCsDate(currentDate);
        const cheatNPCs = { ...getStoredCheatNPCs() || {} };
        let priorityQueue = 0;
        const active = {};
        const waiting = {};
        for (const key in mainNPCs) {
          const npc = mainNPCs[key];
          const left = npc.pregnancy.timerEnd - npc.pregnancy.timer;
          if (left <= 3 && priorityQueue <= limit) {
            active[`stored_${priorityQueue}`] = npc;
            if (priorityQueue === 8)
              showToast("NPC about to give birth, you cant bustin nuts in people for today!");
            priorityQueue++;
          } else {
            waiting[`stored_${Object.keys(waiting).length}`] = npc;
          }
        }
        for (const key in cheatNPCs) {
          const npc = cheatNPCs[key];
          let timer = npc.pregnancy.timer;
          const timerEnd = npc.pregnancy.timerEnd;
          if (dateLeft > 0) {
            timer += dateLeft;
            if (timer > timerEnd) timer = timerEnd;
            npc.pregnancy.timer = timer;
          }
          const left = timerEnd - timer;
          if (left <= 3 && priorityQueue <= hardLimit) {
            active[`stored_${priorityQueue}`] = npc;
            if (priorityQueue === 8) showToast("NPC about to give birth...");
            priorityQueue++;
          } else {
            waiting[`stored_${Object.keys(waiting).length}`] = npc;
          }
        }
        setNPCsPriority(priorityQueue);
        vars.storedNPCs = active;
        setStoredCheatNPCs(waiting);
      },
      allNPCInstaPregnant() {
        const vars = getVars();
        if (toggleState2.toggleDeactivated) {
          vars.baseNpcPregnancyChance = getBaseNpcPregnancyChance();
          if (vars?.baseNpcPregnancyChance > 16) vars.baseNpcPregnancyChance = 16;
          toggleState2.initNPCinstapreg = false;
          return;
        }
        if (!toggleState2.initNPCinstapreg) {
          toggleState2.initNPCinstapreg = true;
          setBaseNpcPregnancyChance(vars.baseNpcPregnancyChance);
          vars.baseNpcPregnancyChance = 19;
        }
        for (let index = 0; index < vars.NPCList.length; index++) {
          if (vars?.NPCList[index].pregnancyAvoidance > 0) {
            vars.NPCList[index].pregnancyAvoidance = 0;
          }
        }
      },
      allNPCMultiplePregnancy() {
        const vars = getVars();
        if (vars.NPCList === void 0) return;
        for (let index = 0; index < vars.NPCList.length; index++) {
          if (vars?.NPCList[index].pregnancy === 1) {
            vars.NPCList[index].pregnancy = 0;
          }
        }
      }
    };
  }

  // src/features/cheat/toggle-domain-status-actions.js
  function createToggleDomainStatusActions(toggleState2) {
    return {
      invincibleAngel() {
        const vars = getVars();
        if (getExtraNotif()) {
          if (vars?.demon > 0) {
            showToast("Youre a demon!");
            timedToast("but, okay", 3e3);
          } else if (vars?.fallenangel > 0) {
            showToast("Im sorry, youre already a fallen angel.");
            timedToast("im turning this off", 3e3);
            dispatch("invincibleAngel");
            return;
          }
        }
        if (vars?.penisstate != 0 || vars?.vaginastate != 0) {
          if (!getAngelMode()) return;
          setAngel(vars.angel);
          vars.angel = 0;
          vars.angelbuild = 100;
          setAngelMode(true);
        } else if (!getAngelMode()) {
          setAngelMode(false);
          vars.angel = getAngel();
        }
      },
      updateUserDivine() {
        const vars = getVars();
        if (vars?.penisstate != 0 || vars?.vaginastate != 0) return;
        if (vars?.demon > 0) {
          setTrueDivine("demon");
        } else if (vars?.angel > 0) {
          setTrueDivine("angel");
        }
      },
      unlicum() {
        const vars = getVars();
        if (vars.semen_amount < vars.semen_volume) {
          vars.semen_amount = vars.semen_volume;
          vars.orgasmcount = 0;
        }
      },
      intenseCum() {
        const vars = getVars();
        if (vars.orgasmcurrent != 0 && !getUnlicumMode()) {
          resetOrgasmCount();
          toggleState2.tmpArousal = vars.arousal;
          vars.orgasmdown = 1e3;
          toggleState2.orgasmdown = 1e3;
          setUnlicumMode(true);
        } else if (vars.orgasmdown < toggleState2.orgasmdown && getUnlicumMode()) {
          toggleState2.orgasmdown = vars.orgasmdown;
          vars.arousal = toggleState2.tmpArousal;
          incrementOrgasmCount();
          if (getOrgasmCount() > 2) {
            setUnlicumMode(false);
            vars.orgasmdown = -1;
            toggleState2.orgasmdown = -1;
            resetOrgasmCount();
            vars.orgasmcurrent = 0;
          }
        }
      },
      unliarousal() {
        getVars().arousal = 1e4;
      }
    };
  }

  // src/features/cheat/toggle-domain-actions.js
  function createToggleDomainActions(toggleState2) {
    let domainActions2 = {};
    domainActions2 = {
      ...createToggleDomainBasicActions(toggleState2),
      ...createToggleDomainPregnancyActions(toggleState2, () => domainActions2),
      ...createToggleDomainStatusActions(toggleState2)
    };
    return domainActions2;
  }

  // src/features/cheat/toggle-runtime.js
  var toggleDefinitionMap = new Map(TOGGLE_DEFINITIONS.map((entry2) => [entry2.id, entry2]));
  var domainActions = createToggleDomainActions(state_repository_default);
  var toggleRuntime = {
    ...domainActions
  };
  var engineActions = createToggleEngine(
    state_repository_default,
    (id) => toggleRuntime[id],
    (id) => toggleDefinitionMap.get(id)
  );
  toggleRuntime = {
    ...engineActions,
    ...domainActions,
    toggleActive: state_repository_default.toggleActive,
    toggleActiveDaily: state_repository_default.toggleActiveDaily,
    get toggleDeactivated() {
      return state_repository_default.toggleDeactivated;
    },
    set toggleDeactivated(value) {
      state_repository_default.toggleDeactivated = Boolean(value);
    }
  };
  var toggle_runtime_default = toggleRuntime;

  // src/features/cheat/pregnancy-shared.js
  function updateToggleBundle(key, enabled, handler) {
    if (enabled) {
      ToggleScheduler.register(key, handler, { daily: false, cooldownMs: 100, maxFailures: 5 });
      toggle_runtime_default.toggleActive[key] = true;
    } else {
      ToggleScheduler.unregister(key, { daily: false });
      delete toggle_runtime_default.toggleActive[key];
    }
  }
  function abortion_notice() {
    showToast("Aborting...");
    setTimeout(() => bloodEffect(), 1e3);
    setTimeout(() => showToast("baby is aborted!"), 3200);
  }
  function setPregnancyTimer(pregnancy, days) {
    let time = pregnancy.timerEnd - days * 3;
    if (time < 0) time = 0;
    pregnancy.timer = time;
  }
  function applyNpcPregnancySet({
    selectElement,
    input,
    toggle,
    locked,
    lockedDays: lockedDays4,
    toggleKey,
    toggleHandler,
    resolvePregnancy
  }) {
    if (!selectElement || isNaN(input)) return;
    const index = locked.findIndex((name) => name == selectElement);
    if (toggle && index === -1) {
      locked.push(selectElement);
      lockedDays4.push(input);
      updateToggleBundle(toggleKey, true, toggleHandler);
    } else if (!toggle && index !== -1) {
      locked.splice(index, 1);
      lockedDays4.splice(index, 1);
      updateToggleBundle(toggleKey, false);
    }
    const npcPregnancy = resolvePregnancy(selectElement);
    if (!npcPregnancy) return;
    setPregnancyTimer(npcPregnancy, input);
    showToast("Activated!");
  }

  // src/features/cheat/pregnancy-abortion-actions.js
  function createPregnancyAbortionActions() {
    return {
      abortion_notice,
      mc_abortion_set() {
        const checked = byUiId("mc_abortion_checkbox").checked;
        if (!checked) {
          showToast("check the checkbox to confirm");
          return false;
        }
        const location = byUiId("mc_abortion_location").value;
        const selected = byUiId("mc_abortion_select").value;
        const pregnancy = getVars().sexStats[location].pregnancy;
        const length = pregnancy.fetus.length;
        if (length === 0) {
          showToast("No baby!");
          return false;
        }
        if (length === 1) {
          pregnancy.fetus = [];
          pregnancy.awareOf = null;
          pregnancy.awareOfDetails = null;
          pregnancy.awareOfMultiple = null;
          pregnancy.potentialFathers = [];
          pregnancy.timer = 0;
          pregnancy.timerEnd = null;
          pregnancy.type = null;
          pregnancy.waterBreaking = false;
          pregnancy.waterBreakingTimer = null;
        } else {
          pregnancy.fetus.splice(selected, 1);
        }
        if (getVars().sexStats.anus.pregnancy.fetus[0]?.stats?.gender === "Hermaphrodite") {
          getVars().sexStats.anus.pregnancy.motherStatus = 1;
        }
        abortion_notice();
        hydrateCheatUi.update_mc_abortion_list();
      },
      named_npc_abortion_set() {
        const checked = byUiId("named_npc_abortion_checkbox").checked;
        if (!checked) {
          showToast("check the checkbox to confirm");
          return false;
        }
        const selectedName = byUiId("named_npc_abortion_chara_select").value;
        const fetus = byUiId("named_npc_abortion_select").value;
        let selectedIndex = -1;
        let totalFetus = 0;
        const npcnamelist2 = getNpcNameList();
        const npcNames = getVars().NPCName;
        for (let index = 0; index < npcnamelist2.length; index++) {
          if (npcNames[index].description === selectedName) {
            selectedIndex = index;
            if (typeof npcNames[index].pregnancy.fetus === "object") {
              totalFetus = npcNames[index].pregnancy.fetus.length;
            }
          }
        }
        if (totalFetus === 0) {
          showToast("No baby!");
          return false;
        }
        const pregnancy = npcNames[selectedIndex].pregnancy;
        if (totalFetus === 1) {
          pregnancy.fetus = [];
          pregnancy.potentialFathers = [];
          pregnancy.timer = 0;
          pregnancy.timerEnd = null;
          pregnancy.type = null;
          pregnancy.waterBreaking = false;
          pregnancy.waterBreakingTimer = null;
        } else {
          pregnancy.fetus.splice(fetus, 1);
        }
        abortion_notice();
        hydrateCheatUi.update_named_npc_abortion_list();
      },
      npc_abortion_set() {
        const checked = byUiId("npc_abortion_checkbox").checked;
        if (!checked) {
          showToast("check the checkbox to confirm");
          return false;
        }
        const selected = byUiId("npc_abortion_chara_select").value;
        if (!selected) return false;
        const fetus = byUiId("npc_abortion_select").value;
        const inGame = selected.match(/pregnancy/);
        const vars = getVars();
        const targetStore = inGame ? vars.storedNPCs : getStoredCheatNPCs();
        const totalFetus = targetStore[selected].pregnancy.fetus.length;
        if (totalFetus === 0) {
          showToast("No baby!");
          return false;
        }
        if (totalFetus === 1) {
          targetStore[selected].pregnancy.fetus = [];
          targetStore[selected].pregnancy.potentialFathers = [];
          targetStore[selected].pregnancy.timer = 0;
          targetStore[selected].pregnancy.timerEnd = null;
          targetStore[selected].pregnancy.type = null;
          targetStore[selected].pregnancy.waterBreaking = false;
          targetStore[selected].pregnancy.waterBreakingTimer = null;
          delete targetStore[selected];
          abortion_notice();
          hydrateCheatUi.update_npc_abortion_list();
        } else {
          targetStore[selected].pregnancy.fetus.splice(fetus, 1);
          abortion_notice();
        }
        hydrateCheatUi.update_npc_fetus_abortion_list();
      }
    };
  }

  // src/features/cheat/pregnancy-manager-actions.js
  function createPregnancyManagerActions({ actionBagRef, locks: locks2 }) {
    return {
      named_npc_pregnancy_set() {
        const selectElement = byUiId("named_npc_pregnancy_manager").value;
        const input = parseInt(byUiId("named_npc_pregnancy_input").value);
        const toggle = byUiId("named_npc_pregnancy_toggle").checked;
        const actionBag = actionBagRef();
        applyNpcPregnancySet({
          selectElement,
          input,
          toggle,
          locked: locks2.named_npc_pregnancy_locked,
          lockedDays: locks2.named_npc_pregnancy_locked_day,
          toggleKey: "named_npc_pregnancy_manager_toggle",
          toggleHandler: actionBag.named_npc_pregnancy_manager_toggle,
          resolvePregnancy: (id) => getVars().NPCName?.[id]?.pregnancy
        });
      },
      npc_pregnancy_set() {
        const selectElement = byUiId("npc_pregnancy_manager").value;
        const input = parseInt(byUiId("npc_pregnancy_input").value);
        const toggle = byUiId("npc_pregnancy_toggle").checked;
        const actionBag = actionBagRef();
        applyNpcPregnancySet({
          selectElement,
          input,
          toggle,
          locked: locks2.npc_pregnancy_locked,
          lockedDays: locks2.npc_pregnancy_locked_day,
          toggleKey: "npc_pregnancy_manager_toggle",
          toggleHandler: actionBag.npc_pregnancy_manager_toggle,
          resolvePregnancy: (id) => getVars().storedNPCs?.[id]?.pregnancy
        });
      },
      mc_pregnancy_set() {
        const selectElement = byUiId("mc_pregnancy_manager").value;
        const selectHole = byUiId("mc_pregnancy_hole").value;
        const input = parseInt(byUiId("mc_pregnancy_input").value);
        const toggle = byUiId("mc_pregnancy_toggle").checked;
        const actionBag = actionBagRef();
        if (!selectElement || isNaN(input)) return;
        const pregType = getVars().sexStats[selectHole].pregnancy.type;
        const index = locks2.mc_pregnancy_locked.findIndex((name) => name == selectElement);
        const state = index === -1 ? 0 : locks2.mc_pregnancy_locked_hole[index] != selectHole ? 1 : locks2.mc_pregnancy_locked_type[index] != pregType ? 2 : 3;
        if (toggle && state === 0) {
          locks2.mc_pregnancy_locked.push(selectElement);
          locks2.mc_pregnancy_locked_hole.push(selectHole);
          locks2.mc_pregnancy_locked_type.push(pregType);
          locks2.mc_pregnancy_locked_day.push(input);
          updateToggleBundle(
            "mc_pregnancy_manager_toggle",
            true,
            actionBag.mc_pregnancy_manager_toggle
          );
        } else if (!toggle && state !== 0) {
          locks2.mc_pregnancy_locked.splice(index, 1);
          locks2.mc_pregnancy_locked_hole.splice(index, 1);
          locks2.mc_pregnancy_locked_type.splice(index, 1);
          locks2.mc_pregnancy_locked_day.splice(index, 1);
          updateToggleBundle("mc_pregnancy_manager_toggle", false);
        }
        if (pregType == "parasite") {
          getVars().sexStats[selectHole].pregnancy.fetus[selectElement].daysLeft = input;
        } else {
          const sexPregnancy = getVars().sexStats[selectHole].pregnancy;
          let time = sexPregnancy.timerEnd - input * 3;
          if (time < 0) time = 0;
          sexPregnancy.timer = time;
        }
        showToast("Activated!");
      },
      mc_tentacle_set() {
        const selectElement = byUiId("mc_tentacle_select").value;
        const selectlocation = byUiId("mc_tentacle_location").value;
        const input = parseInt(byUiId("mc_tentacle_input").value);
        if (!selectElement || isNaN(input)) return;
        getVars().container[selectlocation].creatures[selectElement].stats.speed = input;
        showToast("Activated!");
      },
      mc_baby_set() {
        const selectElement = byUiId("mc_baby_select").value;
        const selectAction = byUiId("mc_baby_action_select").value;
        const input = byUiId("mc_baby_input").type == "checkbox" ? byUiId("mc_baby_input").checked : byUiId("mc_baby_input").value;
        const vars = getVars();
        if (!vars.children[selectElement]) return;
        if (selectAction == "abandon") {
          if (input == true) {
            showToast(vars.children[selectElement].name + " has been abandoned!");
            delete vars.children[selectElement];
            hydrateCheatUi.update_mc_baby_list();
          } else {
            showToast("check the checkbox to confirm");
          }
          return true;
        }
        vars.children[selectElement][selectAction] = input;
        showToast("Activated!");
      }
    };
  }

  // src/features/cheat/pregnancy-actions.js
  var locks = {
    named_npc_pregnancy_locked,
    named_npc_pregnancy_locked_day,
    npc_pregnancy_locked,
    npc_pregnancy_locked_day,
    mc_pregnancy_locked,
    mc_pregnancy_locked_hole,
    mc_pregnancy_locked_type,
    mc_pregnancy_locked_day
  };
  var pregnancyActions = {
    ...locks
  };
  pregnancyActions = {
    ...pregnancyActions,
    ...createPregnancyManagerActions({ actionBagRef: () => pregnancyActions, locks }),
    ...createPregnancyAbortionActions()
  };
  var pregnancy_actions_default = pregnancyActions;

  // src/features/cheat/world-actions.js
  var FUNNY_FRUITS = [
    "cabbage",
    "wild_carrot",
    "turnip",
    "potato",
    "onion",
    "garlic_bulb",
    "broccoli"
  ];
  function VrelCoinsUsage() {
    const vars = getVars();
    if (vars?.featsBoosts?.pointsUsed === void 0) return;
    vars.featsBoosts.pointsUsed = 0;
    showToast("Activated!");
  }
  function set_animal_like() {
    const animal = byUiId("animal_choice")?.value;
    const value = parseInt(byUiId("animal_input")?.value);
    if (isNaN(value)) {
      showToast("failed : input is not a number!");
      return;
    }
    const farm = getFarm();
    if (farm?.beasts === void 0) {
      showToast("failed!");
      return;
    }
    showToast("Activated!");
    farm.beasts[animal] = value;
  }
  function set_build_time() {
    const value = parseInt(byUiId("build_time")?.value);
    if (isNaN(value)) {
      showToast("failed : input is not a number!");
      return;
    }
    const farm = getFarm();
    if (farm?.build_timer === void 0) {
      showToast("failed!");
      return;
    }
    showToast("Activated!");
    farm.build_timer = value;
  }
  function set_assault_time() {
    const value = parseInt(byUiId("assault_time")?.value);
    if (!isNaN(value)) {
      showToast("Activated!");
      setVariable("farm_attack_timer", value);
    }
  }
  function clean_cum() {
    const vars = getVars();
    if (vars?.player?.bodyliquid === void 0) return;
    for (const key in vars.player.bodyliquid) {
      for (const innerKey in vars.player.bodyliquid[key]) {
        vars.player.bodyliquid[key][innerKey] = 0;
      }
    }
    showToast("Activated!");
  }
  function dirty_cum() {
    const vars = getVars();
    if (vars?.player?.bodyliquid === void 0) return;
    for (const key in vars.player.bodyliquid) {
      for (const innerKey in vars.player.bodyliquid[key]) {
        vars.player.bodyliquid[key][innerKey] = 100;
      }
    }
    showToast("Activated!");
  }
  function clean_cum_uretus() {
    const sexStats = getSexStats();
    if (sexStats?.vagina?.sperm === void 0) return;
    sexStats.vagina.sperm = [];
    showToast("Activated!");
  }
  function check_fruit_selling() {
    const vars = getVars();
    if (vars?.farmersProduce?.selling === void 0) return;
    const selling = vars.farmersProduce.selling;
    const totals = FUNNY_FRUITS.reduce((acc, fruit) => {
      acc[fruit] = selling[fruit] || 0;
      return acc;
    }, {});
    const placeholder = Object.entries(totals).sort((left, right) => right[1] - left[1]).map(([fruit, amount], index) => `${index + 1}. ${fruit}: ${amount} | `).join("");
    const placeholderEl = byUiId("placeholder_fruits");
    if (placeholderEl) placeholderEl.innerHTML = placeholder;
  }
  function set_school_rep() {
    showToast("Activated!");
    const selected = byUiId("select_school_rep")?.value;
    const input = parseInt(byUiId("input_school_rep")?.value);
    if (isNaN(input)) {
      showToast("failed : input is not a number!");
      return;
    }
    setVariable(selected, input);
  }
  function sidebar_cheat() {
    byUiId("ui-bar-toggle")?.click();
  }
  function cheat_backwards() {
    const button = byUiId("history-backward");
    if (!button) {
      showToast("Failed, history probably disabled.");
      return;
    }
    button.click();
    update_history();
  }
  function cheat_forwards() {
    const button = byUiId("history-forward");
    if (!button) {
      showToast("Failed, history probably disabled.");
      return;
    }
    button.click();
    update_history();
  }
  function update_history() {
    const backwards = byUiId("cheat-history-backwards");
    const forwards = byUiId("cheat-history-forwards");
    const backwardHistory = byUiId("history-backward");
    const forwardHistory = byUiId("history-forward");
    if (backwards && backwardHistory) backwards.disabled = backwardHistory.disabled;
    if (forwards && forwardHistory) forwards.disabled = forwardHistory.disabled;
  }
  function in_game_cheat() {
    const button = byUiId("in_game_cheat");
    if (!button) return;
    const isEnabled = button.innerHTML === "Enable";
    setVariable("debug", isEnabled ? 1 : 0);
    button.innerHTML = isEnabled ? "Disable" : "Enable";
  }
  function alt_cheat() {
    const overlay = byUiId("overlayButtons");
    if (!overlay) return;
    const cheatButton = [...overlay.getElementsByClassName("link-internal")].find(
      (button) => button.innerHTML === "CHEATS"
    );
    if (cheatButton) {
      closeModal();
      cheatButton.click();
      return;
    }
    showToast(
      getVariable("debug") === 1 ? "move passage to see the change" : "cheat not enabled, please re-enable it again."
    );
  }
  function randomEncounterSet() {
    const button = byUiId("randomEncounterSet");
    if (!button) return;
    const isEnabled = getVariable("alluremod") === 0;
    setVariable("alluremod", isEnabled ? 1 : 0);
    button.innerHTML = isEnabled ? "Enabled" : "Disabled";
    showToast(isEnabled ? "Enabled." : "Disabled.");
  }
  function purgeNPCBaby() {
    const selectAction = byUiId("mc_baby_action_select")?.value;
    if (selectAction !== "abandon") {
      showToast("Pick abandon to purge.");
      return;
    }
    const input = byUiId("mc_baby_input").type === "checkbox" ? byUiId("mc_baby_input").checked : byUiId("mc_baby_input").value;
    if (input == true) {
      const children = getChildren();
      if (children) {
        Object.keys(children).forEach((key) => delete children[key]);
      }
      hydrateCheatUi.update_mc_baby_list();
      showToast("All of your baby has been abandoned!");
      return;
    }
    showToast("check the checkbox to confirm");
  }
  var worldActions = {
    VrelCoinsUsage,
    set_animal_like,
    set_build_time,
    set_assault_time,
    clean_cum,
    dirty_cum,
    clean_cum_uretus,
    check_fruit_selling,
    set_school_rep,
    sidebar_cheat,
    cheat_backwards,
    cheat_forwards,
    update_history,
    in_game_cheat,
    alt_cheat,
    randomEncounterSet,
    purgeNPCBaby
  };
  var world_actions_default = worldActions;

  // src/features/actions.js
  var cheatActions = {
    ...debug_actions_default,
    ...player_actions_default,
    ...pregnancy_actions_default,
    ...world_actions_default,
    ...toggle_runtime_default
  };

  // src/cheats/create-cheat.js
  var FIELDS = /* @__PURE__ */ new Set([
    "id",
    "location",
    "meta",
    "actions",
    "sync",
    "refresh",
    "toggle",
    "effect",
    "isApplicable",
    "requiredPaths",
    "onEnable",
    "onDisable",
    "dispose",
    "config",
    "diagnostics"
  ]);
  var SECTIONS = /* @__PURE__ */ new Set(["quick", "stats", "misc"]);
  var CONTROLS = /* @__PURE__ */ new Set(["button", "input", "range", "select", "text", "toggle"]);
  var REFRESH = /* @__PURE__ */ new Set(["mount", "section-open", "after-action", "runtime-tick", "manual"]);
  var CADENCES = /* @__PURE__ */ new Set(["frame", "daily"]);
  var CONTROL_INTENTS = /* @__PURE__ */ new Set(["confirmation", "status"]);
  var CONFIG_PATHS = new Set(CHEAT_CONFIG_SCHEMA.map(({ path: path7 }) => path7));
  var CHEAT_CONTRACT_CONSTANTS = Object.freeze({
    sections: Object.freeze([...SECTIONS]),
    controlTypes: Object.freeze([...CONTROLS]),
    refreshReasons: Object.freeze([...REFRESH]),
    toggleCadences: Object.freeze([...CADENCES])
  });
  var plain = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value) && [Object.prototype, null].includes(Object.getPrototypeOf(value));
  var text = (value) => typeof value === "string" && value.trim() !== "";
  function stringArray(value, label) {
    if (!Array.isArray(value) || value.some((item) => !text(item))) {
      throw new TypeError(`${label} must be an array of non-empty strings.`);
    }
    const seen = /* @__PURE__ */ new Set();
    for (const item of value) {
      if (seen.has(item)) throw new Error(`${label} contains duplicate "${item}".`);
      seen.add(item);
    }
  }
  function validateCheatDefinition(definition) {
    if (!plain(definition)) throw new TypeError("Cheat definition must be a plain object.");
    for (const key of Object.keys(definition)) {
      if (!FIELDS.has(key)) throw new Error(`Unknown cheat descriptor field "${key}".`);
    }
    if (!text(definition.id)) throw new TypeError("Cheat id must be a non-empty string.");
    if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)+$/.test(definition.id)) {
      throw new Error(`Cheat id "${definition.id}" must be a lowercase namespaced id.`);
    }
    if (!plain(definition.location))
      throw new TypeError(`Cheat "${definition.id}" location must be a plain object.`);
    if (!SECTIONS.has(definition.location.section))
      throw new Error(`Cheat "${definition.id}" has unsupported section.`);
    if (!Number.isFinite(definition.location.order))
      throw new TypeError(`Cheat "${definition.id}" location.order must be finite.`);
    if (definition.location.group != null && !text(definition.location.group))
      throw new TypeError(`Cheat "${definition.id}" location.group must be a non-empty string.`);
    if (!plain(definition.meta) || !text(definition.meta.label))
      throw new TypeError(`Cheat "${definition.id}" meta.label must be a non-empty string.`);
    if (definition.meta.confirmation != null && !text(definition.meta.confirmation))
      throw new TypeError(`Cheat "${definition.id}" meta.confirmation must be a non-empty string.`);
    if (!Array.isArray(definition.meta.controls) || definition.meta.controls.length === 0)
      throw new TypeError(`Cheat "${definition.id}" meta.controls must be a non-empty array.`);
    if (definition.actions != null && !plain(definition.actions))
      throw new TypeError(`Cheat "${definition.id}" actions must be a plain object.`);
    for (const [name, action] of Object.entries(definition.actions ?? {})) {
      if (!text(name) || typeof action !== "function")
        throw new TypeError(`Cheat "${definition.id}" action "${name}" must be a function.`);
    }
    const keys = /* @__PURE__ */ new Set();
    for (const control of definition.meta.controls) {
      if (!plain(control) || !text(control.key))
        throw new TypeError(`Cheat "${definition.id}" control key must be a non-empty string.`);
      if (keys.has(control.key))
        throw new Error(`Cheat "${definition.id}" has duplicate control key "${control.key}".`);
      keys.add(control.key);
      if (!CONTROLS.has(control.type))
        throw new Error(`Cheat "${definition.id}" control "${control.key}" has invalid type.`);
      if (control.intent != null && !CONTROL_INTENTS.has(control.intent))
        throw new Error(`Cheat "${definition.id}" control "${control.key}" has invalid intent.`);
      if (control.intent === "confirmation" && control.type !== "toggle")
        throw new Error(`Cheat "${definition.id}" confirmation control must be a toggle.`);
      if (control.intent === "status" && control.type !== "text")
        throw new Error(`Cheat "${definition.id}" status control must be text.`);
      if (control.action && !(control.action === "toggle" && definition.toggle) && typeof definition.actions?.[control.action] !== "function")
        throw new Error(
          `Cheat "${definition.id}" control "${control.key}" references missing local action "${control.action}".`
        );
      if (control.binding != null && (!plain(control.binding) || !text(control.binding.path)))
        throw new TypeError(
          `Cheat "${definition.id}" control binding path must be a non-empty string.`
        );
      if (control.binding?.writeOn != null && !["input", "change"].includes(control.binding.writeOn))
        throw new Error(
          `Cheat "${definition.id}" control "${control.key}" has invalid binding writeOn event.`
        );
      if (control.options != null && !Array.isArray(control.options) && typeof control.options !== "function")
        throw new TypeError(
          `Cheat "${definition.id}" control "${control.key}" options must be an array or function.`
        );
      if (control.fallbackOptions != null && !Array.isArray(control.fallbackOptions))
        throw new TypeError(
          `Cheat "${definition.id}" control "${control.key}" fallbackOptions must be an array.`
        );
    }
    if (definition.refresh != null) {
      stringArray(definition.refresh, `Cheat "${definition.id}" refresh`);
      for (const reason of definition.refresh)
        if (!REFRESH.has(reason))
          throw new Error(`Cheat "${definition.id}" has invalid refresh reason "${reason}".`);
    }
    if (definition.toggle != null) {
      if (!plain(definition.toggle) || !CADENCES.has(definition.toggle.cadence))
        throw new Error(`Cheat "${definition.id}" has invalid toggle cadence.`);
      if (typeof definition.effect !== "function")
        throw new TypeError(`Cheat "${definition.id}" toggle requires effect().`);
      if (!definition.meta.controls.some(({ type }) => type === "toggle"))
        throw new Error(`Cheat "${definition.id}" toggle requires a toggle control.`);
      if (definition.toggle.cooldownMs != null && (!Number.isFinite(definition.toggle.cooldownMs) || definition.toggle.cooldownMs < 0))
        throw new TypeError(`Cheat "${definition.id}" toggle cooldownMs must be non-negative.`);
      if (definition.toggle.maxFailures != null && (!Number.isInteger(definition.toggle.maxFailures) || definition.toggle.maxFailures < 1))
        throw new TypeError(
          `Cheat "${definition.id}" toggle maxFailures must be a positive integer.`
        );
      if (definition.toggle.runOnActivate != null && typeof definition.toggle.runOnActivate !== "boolean")
        throw new TypeError(`Cheat "${definition.id}" toggle runOnActivate must be boolean.`);
    } else if (definition.effect != null)
      throw new Error(`Cheat "${definition.id}" effect requires toggle configuration.`);
    for (const key of ["sync", "isApplicable", "onEnable", "onDisable", "dispose"])
      if (definition[key] != null && typeof definition[key] !== "function")
        throw new TypeError(`Cheat "${definition.id}" ${key} must be a function.`);
    for (const key of ["requiredPaths", "config"])
      if (definition[key] != null) stringArray(definition[key], `Cheat "${definition.id}" ${key}`);
    if (definition.diagnostics != null && !plain(definition.diagnostics))
      throw new TypeError(`Cheat "${definition.id}" diagnostics must be a plain object.`);
    for (const path7 of definition.config ?? [])
      if (!CONFIG_PATHS.has(path7))
        throw new Error(`Cheat "${definition.id}" references unknown config path "${path7}".`);
    if (!Object.keys(definition.actions ?? {}).length && typeof definition.effect !== "function" && typeof definition.sync !== "function")
      throw new Error(`Cheat "${definition.id}" requires actions, effect, or sync.`);
    return definition;
  }
  function freezeOwned(value) {
    if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
    for (const child of Object.values(value)) freezeOwned(child);
    return Object.freeze(value);
  }
  function createCheat(definition) {
    validateCheatDefinition(definition);
    return freezeOwned(definition);
  }

  // src/cheats/definitions/developer/run-diagnostics.cheat.js
  var revealed = /* @__PURE__ */ new WeakSet();
  var lastReports = /* @__PURE__ */ new WeakMap();
  function setRevealed(controls, visible) {
    for (const key of ["run", "copy", "report"]) controls.element(key).hidden = !visible;
    controls.element("reveal").hidden = visible;
    if (visible) revealed.add(controls);
    else revealed.delete(controls);
  }
  var runDiagnosticsCheat = createCheat({
    id: "developer.run-diagnostics",
    location: { section: "misc", group: "developer-tools", order: 1e3 },
    meta: {
      label: "Developer Tools",
      controls: [
        { key: "reveal", type: "button", label: "Show Developer Tools", action: "reveal" },
        { key: "run", type: "button", label: "Run Diagnostics", action: "run" },
        { key: "copy", type: "button", label: "Copy Report", action: "copy" },
        { key: "report", type: "input" }
      ]
    },
    actions: {
      reveal({ controls }) {
        setRevealed(controls, true);
        return { ok: true, message: "Developer Tools revealed for this modal." };
      },
      async run({ controls, services }) {
        if (!revealed.has(controls))
          return { ok: false, kind: "blocked", message: "Reveal Developer Tools first." };
        if (!services.diagnostics?.runAll)
          return { ok: false, kind: "blocked", message: "Diagnostics service is unavailable." };
        const report = await services.diagnostics.runAll();
        const text2 = services.diagnostics.formatReport(report);
        lastReports.set(controls, text2);
        controls.setValue("report", text2);
        return {
          ok: report.fail === 0,
          kind: report.fail === 0 ? "success" : "validation",
          variant: report.fail === 0 ? "success" : "warning",
          message: `Diagnostics complete: ${report.pass} pass, ${report.warning} warning, ${report.fail} fail, ${report.blocked} blocked.`
        };
      },
      async copy({ controls }) {
        if (!revealed.has(controls))
          return { ok: false, kind: "blocked", message: "Reveal Developer Tools first." };
        const text2 = lastReports.get(controls) ?? controls.value("report");
        if (!text2) return { ok: false, kind: "blocked", message: "Run diagnostics before copying." };
        const input = controls.element("report");
        const clipboard = input.ownerDocument.defaultView.navigator.clipboard;
        if (clipboard?.writeText) {
          await clipboard.writeText(text2);
          return { ok: true, message: "Diagnostic report copied." };
        }
        input.hidden = false;
        input.focus();
        input.select();
        return { ok: true, variant: "info", message: "Clipboard unavailable; report selected." };
      }
    },
    onEnable({ controls }) {
      setRevealed(controls, false);
    },
    dispose({ controls }) {
      revealed.delete(controls);
      lastReports.delete(controls);
    },
    diagnostics: { developerOnly: true, readOnly: true }
  });

  // src/cheats/definitions/player/balls.cheat.js
  var ballsCheat = createCheat({
    id: "player.balls",
    location: { section: "stats", group: "player", order: 40 },
    meta: {
      label: "Balls",
      controls: [{ key: "toggle", type: "button", label: "Remove", action: "toggle" }]
    },
    requiredPaths: ["player.ballsExist"],
    refresh: ["mount", "section-open"],
    actions: {
      toggle({ game }) {
        game.set("player.ballsExist", !game.get("player.ballsExist"));
        return { ok: true, message: "Balls updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text("toggle", game.get("player.ballsExist") ? "Remove" : "Add");
    }
  });

  // src/cheats/definitions/player/body-size.cheat.js
  var BODY_SIZES = Object.freeze({ Tiny: 0, Small: 1, Normal: 2, Large: 3 });
  var BODY_LABELS = Object.freeze(["Tiny", "Small", "Normal", "Large"]);
  var bodySizeCheat = createCheat({
    id: "player.body-size",
    location: { section: "stats", group: "player", order: 20 },
    meta: {
      label: "Body Size",
      controls: [
        { key: "size", type: "select", options: Object.keys(BODY_SIZES) },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["bodysize"],
    refresh: ["mount", "section-open", "after-action"],
    actions: {
      set({ game, controls }) {
        const selected = controls.value("size");
        if (!Object.hasOwn(BODY_SIZES, selected)) {
          return { ok: false, kind: "validation", message: "Unknown body size." };
        }
        game.set("bodysize", BODY_SIZES[selected]);
        return { ok: true, message: "Body size updated." };
      }
    },
    sync({ game, controls }) {
      controls.setValue("size", BODY_LABELS[game.get("bodysize")] ?? BODY_LABELS[2]);
    }
  });

  // src/cheats/definitions/player/body-type.cheat.js
  var TYPES = Object.freeze({ Masculine: "m", Feminine: "f", Androgynous: "a" });
  var LABELS = Object.freeze({ m: "Masculine", f: "Feminine", a: "Androgynous" });
  var bodyTypeCheat = createCheat({
    id: "player.body-type",
    location: { section: "stats", group: "player", order: 30 },
    meta: {
      label: "Natural Features",
      controls: [
        { key: "type", type: "select", options: Object.keys(TYPES) },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["player.gender_body"],
    refresh: ["mount", "section-open"],
    actions: {
      set({ game, controls }) {
        const value = TYPES[controls.value("type")];
        if (!value) return { ok: false, kind: "validation", message: "Unknown body type." };
        game.set("player.gender_body", value);
        return { ok: true, message: "Body type updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.setValue("type", LABELS[game.get("player.gender_body")] ?? "Androgynous");
    }
  });

  // src/cheats/definitions/player/characteristics.cheat.js
  function integer(controls, key) {
    return Number.parseInt(controls.value(key), 10);
  }
  var characteristicsCheat = createCheat({
    id: "player.characteristics",
    location: { section: "stats", group: "player", order: 80 },
    meta: {
      label: "Characteristics",
      controls: [
        { key: "characteristic", type: "select", options: characteristics, action: "select" },
        { key: "characteristicValue", type: "input" },
        { key: "setCharacteristic", type: "button", label: "Set", action: "setCharacteristic" }
      ]
    },
    requiredPaths: [...characteristics],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      setCharacteristic({ game, controls }) {
        const value = integer(controls, "characteristicValue");
        if (Number.isNaN(value))
          return { ok: false, kind: "validation", message: "Input is not a number." };
        game.set(controls.value("characteristic"), value);
        return { ok: true, message: "Characteristic updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.setValue("characteristicValue", game.get(controls.value("characteristic")));
    }
  });

  // src/cheats/definitions/player/crime.cheat.js
  function numericCrimes(game) {
    return Object.entries(game.get("crime") ?? {}).filter(
      ([, crime]) => Number.isFinite(Number.parseInt(crime?.current, 10))
    );
  }
  var crimeCheat = createCheat({
    id: "player.crime",
    location: { section: "stats", group: "player", order: 60 },
    meta: {
      label: "Crime",
      controls: [
        { key: "current", type: "text", intent: "status" },
        { key: "reduce", type: "button", label: "-100", action: "reduce" },
        { key: "increase", type: "button", label: "+100", action: "increase" }
      ]
    },
    requiredPaths: ["crime"],
    refresh: ["mount", "section-open"],
    actions: {
      reduce({ game }) {
        const entries2 = numericCrimes(game);
        if (!entries2.length) return { ok: false, kind: "blocked", message: "No crime data." };
        const value = Number.parseInt(
          (entries2.reduce((sum, [, crime]) => sum + Number.parseInt(crime.current, 10), 0) - 100) / entries2.length,
          10
        );
        for (const [key] of entries2) {
          for (const field of ["current", "count", "countHistory", "history"])
            game.set(`crime.${key}.${field}`, value);
        }
        return { ok: true, message: "Crime reduced.", refresh: true };
      },
      increase({ game }) {
        const entries2 = numericCrimes(game);
        if (!entries2.length) return { ok: false, kind: "blocked", message: "No crime data." };
        const value = Number.parseInt(
          (entries2.reduce((sum, [, crime]) => sum + Number.parseInt(crime.current, 10), 0) + 100) / entries2.length,
          10
        );
        for (const [key] of entries2) game.set(`crime.${key}.current`, value);
        return { ok: true, message: "Crime increased.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text(
        "current",
        numericCrimes(game).reduce((sum, [, crime]) => sum + Number.parseInt(crime.current, 10), 0)
      );
    }
  });

  // src/cheats/definitions/player/cum.cheat.js
  var cumCheat = createCheat({
    id: "player.cum",
    location: { section: "stats", group: "player", order: 83 },
    meta: {
      label: "Cum",
      controls: [
        { key: "volume", type: "input", binding: { path: "semen_volume" } },
        { key: "set", type: "button", label: "Set", action: "set" },
        { key: "refill", type: "button", label: "Refill", action: "refill" }
      ]
    },
    requiredPaths: ["semen_volume", "semen_amount"],
    refresh: ["mount", "section-open"],
    actions: {
      set({ game, controls }) {
        const value = Number.parseInt(controls.value("volume"), 10);
        if (Number.isNaN(value))
          return { ok: false, kind: "validation", message: "Input is not a number." };
        game.set("semen_volume", value);
        return { ok: true, message: "Cum volume updated." };
      },
      refill({ game }) {
        game.set("semen_amount", game.get("semen_volume"));
        return { ok: true, message: "Cum refilled." };
      }
    }
  });

  // src/cheats/definitions/player/editor-helpers.js
  function hydrateSelectedValue({ game, controls, path: path7 }) {
    const input = controls.element("value");
    if (input.ownerDocument.activeElement === input) return;
    controls.setValue("value", game.get(path7(controls.value("field"))) ?? "");
  }
  function setSelectedNumber({ game, controls, path: path7, label, requireExisting = true }) {
    const field = controls.value("field");
    const value = Number(controls.value("value"));
    if (!field || !Number.isFinite(value))
      return { ok: false, kind: "validation", message: `${label} must be a number.` };
    const target = path7(field);
    if (requireExisting && !game.has(target))
      return { ok: false, kind: "validation", message: `${label} is unavailable.` };
    game.set(target, value);
    return { ok: true, message: `${label} updated.`, refresh: true };
  }
  function selectAndRefresh() {
    return { ok: true, refresh: true };
  }

  // src/cheats/definitions/player/enemy-stats.cheat.js
  var FIELDS2 = ["enemyhealth", "enemytrust", "enemyanger"];
  var path = (field) => field;
  var enemyStatsCheat = createCheat({
    id: "player.enemy-stats",
    location: { section: "stats", group: "enemy", order: 1 },
    meta: {
      label: "Enemy Stats",
      controls: [
        { key: "field", type: "select", options: FIELDS2, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: FIELDS2,
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({ ...context, path, label: "Enemy stat" });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path });
    }
  });

  // src/cheats/definitions/player/exam.cheat.js
  var path2 = (field) => field;
  var examCheat = createCheat({
    id: "player.exam",
    location: { section: "stats", group: "school", order: 110 },
    meta: {
      label: "Exam",
      controls: [
        { key: "field", type: "select", options: exam, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({
          ...context,
          path: path2,
          label: "Exam value",
          requireExisting: false
        });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path: path2 });
    }
  });

  // src/cheats/definitions/player/fame.cheat.js
  var path3 = (field) => `fame.${field}`;
  var fameCheat = createCheat({
    id: "player.fame",
    location: { section: "stats", group: "fame", order: 100 },
    meta: {
      label: "Fame",
      controls: [
        { key: "field", type: "select", options: fame, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["fame"],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({ ...context, path: path3, label: "Fame" });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path: path3 });
    }
  });

  // src/cheats/definitions/player/hentai-skill.cheat.js
  var path4 = (field) => field;
  var hentaiSkillCheat = createCheat({
    id: "player.hentai-skill",
    location: { section: "stats", group: "talent", order: 140 },
    meta: {
      label: "Hentai Skill",
      controls: [
        { key: "field", type: "select", options: hentaiSkill, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({
          ...context,
          path: path4,
          label: "Hentai skill",
          requireExisting: false
        });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path: path4 });
    }
  });

  // src/cheats/definitions/player/infinite-arousal.cheat.js
  var infiniteArousalCheat = createCheat({
    id: "player.infinite-arousal",
    location: { section: "quick", group: "unlimited", order: 20 },
    meta: {
      label: "Unlimited Arousal",
      controls: [{ key: "enabled", type: "toggle", label: "Arousal", action: "toggle" }]
    },
    requiredPaths: ["arousal"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("arousal", 1e4);
    }
  });

  // src/cheats/definitions/player/lactation.cheat.js
  var lactationCheat = createCheat({
    id: "player.lactation",
    location: { section: "stats", group: "player", order: 81 },
    meta: {
      label: "Lactation",
      controls: [{ key: "toggle", type: "button", label: "Yes", action: "toggle" }]
    },
    requiredPaths: ["lactating"],
    refresh: ["mount", "section-open"],
    actions: {
      toggle({ game }) {
        game.set("lactating", game.get("lactating") == 1 ? 0 : 1);
        return { ok: true, message: "Lactation updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text("toggle", game.get("lactating") == 1 ? "No" : "Yes");
    }
  });

  // src/cheats/definitions/player/milk.cheat.js
  var milkCheat = createCheat({
    id: "player.milk",
    location: { section: "stats", group: "player", order: 82 },
    meta: {
      label: "Milk",
      controls: [
        { key: "volume", type: "input", binding: { path: "milk_volume" } },
        { key: "set", type: "button", label: "Set", action: "set" },
        { key: "refill", type: "button", label: "Refill", action: "refill" }
      ]
    },
    requiredPaths: ["milk_volume", "milk_amount"],
    refresh: ["mount", "section-open"],
    actions: {
      set({ game, controls }) {
        const value = Number.parseInt(controls.value("volume"), 10);
        if (Number.isNaN(value))
          return { ok: false, kind: "validation", message: "Input is not a number." };
        game.set("milk_volume", value);
        return { ok: true, message: "Milk volume updated." };
      },
      refill({ game }) {
        game.set("milk_amount", game.get("milk_volume"));
        return { ok: true, message: "Milk refilled." };
      }
    }
  });

  // src/cheats/definitions/player/money.cheat.js
  var moneyCheat = createCheat({
    id: "player.money",
    location: { section: "stats", group: "player", order: 10 },
    meta: {
      label: "Money",
      controls: [
        { key: "value", type: "input", binding: { path: "money", coerce: "number" } },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["money"],
    refresh: ["mount", "section-open", "after-action"],
    actions: {
      set({ game, controls }) {
        const value = Number.parseInt(controls.value("value"), 10);
        if (Number.isNaN(value)) {
          return { ok: false, kind: "validation", message: "Input is not a number." };
        }
        game.set("money", value);
        return { ok: true, message: "Money updated." };
      }
    }
  });

  // src/cheats/definitions/player/parasites.cheat.js
  var parasitesCheat = createCheat({
    id: "player.parasites",
    location: { section: "stats", group: "player", order: 70 },
    meta: {
      label: "Parasite",
      controls: [
        { key: "parasite", type: "select", options: parasitename },
        { key: "body", type: "select", options: bodyparts },
        { key: "infect", type: "button", label: "Infect", action: "infect" },
        { key: "remove", type: "button", label: "Remove", action: "remove" }
      ]
    },
    requiredPaths: ["parasite"],
    actions: {
      infect({ game, controls }) {
        const parasite = controls.value("parasite");
        const body = controls.value("body");
        const locations = game.get(`parasite.${parasite}`);
        if (!Array.isArray(locations) || game.get(`parasite.${body}`) == null)
          return { ok: false, kind: "blocked", message: "Parasite data is unavailable." };
        if (!locations.includes(body)) game.set(`parasite.${parasite}`, [...locations, body]);
        game.set(`parasite.${body}.name`, parasite);
        return { ok: true, message: "Parasite infected." };
      },
      remove({ game, controls }) {
        const parasite = controls.value("parasite");
        const body = controls.value("body");
        const locations = game.get(`parasite.${parasite}`);
        if (!Array.isArray(locations))
          return { ok: false, kind: "blocked", message: "Parasite data is unavailable." };
        game.set(`parasite.${body}`, []);
        game.set(
          `parasite.${parasite}`,
          locations.filter((item) => item !== body)
        );
        return { ok: true, message: "Parasite removed." };
      }
    }
  });

  // src/cheats/definitions/player/school-reputation.cheat.js
  var path5 = (field) => field;
  var schoolReputationCheat = createCheat({
    id: "player.school-reputation",
    location: { section: "stats", group: "school", order: 120 },
    meta: {
      label: "School Reputation",
      controls: [
        { key: "field", type: "select", options: school_rep, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({
          ...context,
          path: path5,
          label: "School reputation",
          requireExisting: false
        });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path: path5 });
    }
  });

  // src/cheats/definitions/player/stats.cheat.js
  var STATS = Object.freeze([
    "pain",
    "arousal",
    "tiredness",
    "stress",
    "trauma",
    "control",
    "drunk",
    "drugged",
    "hallucinogen"
  ]);
  var playerStatsCheat = createCheat({
    id: "player.stats",
    location: { section: "stats", group: "player", order: 1 },
    meta: {
      label: "Player Stats",
      controls: [
        { key: "stat", type: "select", options: STATS, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: STATS,
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set({ game, controls }) {
        const value = Number.parseFloat(controls.value("value"));
        if (Number.isNaN(value))
          return { ok: false, kind: "validation", message: "Value is not a number." };
        game.set(controls.value("stat"), value);
        return { ok: true, message: "Player stat updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.setValue("value", game.get(controls.value("stat")));
    }
  });

  // src/cheats/definitions/player/talent.cheat.js
  var path6 = (field) => field;
  var talentCheat = createCheat({
    id: "player.talent",
    location: { section: "stats", group: "talent", order: 130 },
    meta: {
      label: "Talent",
      controls: [
        { key: "field", type: "select", options: talent_skill, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh,
      set(context) {
        return setSelectedNumber({
          ...context,
          path: path6,
          label: "Talent",
          requireExisting: false
        });
      }
    },
    sync(context) {
      hydrateSelectedValue({ ...context, path: path6 });
    }
  });

  // src/cheats/definitions/player/unlimited-spray.cheat.js
  var unlimitedSprayCheat = createCheat({
    id: "player.unlimited-spray",
    location: { section: "stats", group: "player", order: 15 },
    meta: {
      label: "Unlimited Spray",
      controls: [{ key: "toggle", type: "button", label: "Set", action: "toggle" }]
    },
    requiredPaths: ["infinitespray"],
    refresh: ["mount", "section-open"],
    actions: {
      toggle({ game }) {
        game.set("infinitespray", game.get("infinitespray") === 1 ? 0 : 1);
        return { ok: true, message: "Unlimited spray updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text("toggle", game.get("infinitespray") === 1 ? "Unset" : "Set");
    }
  });

  // src/cheats/definitions/player/virginity.cheat.js
  var TYPES2 = Object.freeze(["anal", "oral", "penile", "vaginal", "temple", "handholding", "kiss"]);
  var virginityCheat = createCheat({
    id: "player.virginity",
    location: { section: "stats", group: "player", order: 50 },
    meta: {
      label: "Virginity",
      controls: [
        { key: "type", type: "select", options: TYPES2, action: "select" },
        { key: "current", type: "text", intent: "status" },
        { key: "restore", type: "button", label: "Restore", action: "restore" },
        { key: "pure", type: "button", label: "Pure", action: "pure" }
      ]
    },
    requiredPaths: ["player.virginity"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      restore({ game, controls }) {
        game.set(`player.virginity.${controls.value("type")}`, true);
        return { ok: true, message: "Virginity restored.", refresh: true };
      },
      pure({ game }) {
        for (const type of TYPES2) game.set(`player.virginity.${type}`, true);
        return { ok: true, message: "Purity applied.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text(
        "current",
        game.get(`player.virginity.${controls.value("type")}`) ? "Pure" : "Taken"
      );
    }
  });

  // src/cheats/definitions/quick/arousal.cheat.js
  function percentage(controls) {
    const value = Number(controls.value("percentage"));
    return Number.isFinite(value) ? Math.max(0, Math.min(100, value)) : null;
  }
  var arousalCheat = createCheat({
    id: "quick.arousal",
    location: { section: "quick", group: "state", order: 10 },
    meta: {
      label: "Arousal",
      controls: [
        { key: "percentage", type: "range", value: 0, action: "preview", event: "input" },
        { key: "current", type: "text", label: "0%", intent: "status" },
        { key: "player", type: "button", label: "Player", action: "player" },
        { key: "enemy", type: "button", label: "Enemy", action: "enemy" }
      ]
    },
    refresh: ["mount", "section-open"],
    actions: {
      preview() {
        return { ok: true, refresh: true };
      },
      player({ game, controls }) {
        const value = percentage(controls);
        if (value == null)
          return { ok: false, kind: "validation", message: "Arousal must be a number." };
        game.set("arousal", Math.trunc(1e4 * value / 100));
        return { ok: true, message: "Player arousal updated.", refresh: true };
      },
      enemy({ game, controls }) {
        const value = percentage(controls);
        if (value == null)
          return { ok: false, kind: "validation", message: "Arousal must be a number." };
        game.set("enemyarousal", Math.trunc((game.get("enemyarousalmax") || 0) * value / 100));
        return { ok: true, message: "Enemy arousal updated.", refresh: true };
      }
    },
    sync({ controls }) {
      controls.text("current", `${controls.value("percentage")}%`);
    }
  });

  // src/cheats/definitions/quick/auto-child-interaction.cheat.js
  var autoChildInteractionCheat = createCheat({
    id: "quick.auto-child-interaction",
    location: { section: "quick", group: "unlimited", order: 90 },
    meta: {
      label: "Automatic Child Interaction",
      controls: [
        {
          key: "enabled",
          type: "toggle",
          label: "Auto",
          action: "toggle",
          tooltip: "You must visit your baby first to trigger automatic interaction."
        }
      ]
    },
    requiredPaths: ["children"],
    toggle: { cadence: "frame", cooldownMs: 200, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      for (const child of Object.values(game.get("children") ?? {})) {
        const local = child?.localVariables;
        if (local?.event !== true) continue;
        local.interactions = (local.interactions ?? 0) + 1;
        local.interactionsTotal = (local.interactionsTotal ?? 0) + 1;
        local.event = false;
      }
    }
  });

  // src/cheats/definitions/quick/eden-garden.cheat.js
  var edenGardenCheat = createCheat({
    id: "quick.eden-garden",
    location: { section: "quick", group: "tasks", order: 40 },
    meta: {
      label: "Eden Garden",
      controls: [{ key: "enabled", type: "toggle", label: "Garden", action: "toggle" }]
    },
    requiredPaths: ["edengarden"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("edengarden", 4);
    }
  });

  // src/cheats/definitions/quick/eden-mushrooms.cheat.js
  var edenMushroomsCheat = createCheat({
    id: "quick.eden-mushrooms",
    location: { section: "quick", group: "tasks", order: 30 },
    meta: {
      label: "Eden Mushrooms",
      controls: [{ key: "enabled", type: "toggle", label: "Mushrooms", action: "toggle" }]
    },
    requiredPaths: ["edenshrooms"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("edenshrooms", 4);
    }
  });

  // src/cheats/definitions/quick/eden-spring.cheat.js
  var edenSpringCheat = createCheat({
    id: "quick.eden-spring",
    location: { section: "quick", group: "tasks", order: 50 },
    meta: {
      label: "Eden Spring",
      controls: [{ key: "enabled", type: "toggle", label: "Spring", action: "toggle" }]
    },
    requiredPaths: ["edenspring"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("edenspring", 4);
    }
  });

  // src/cheats/definitions/quick/eden-timer.cheat.js
  var edenTimerCheat = createCheat({
    id: "quick.eden-timer",
    location: { section: "quick", group: "tasks", order: 60 },
    meta: {
      label: "Eden Timer",
      controls: [{ key: "enabled", type: "toggle", label: "Timer", action: "toggle" }]
    },
    requiredPaths: ["edendays"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("edendays", 0);
    }
  });

  // src/cheats/definitions/quick/enemy-state.cheat.js
  var enemyStateCheat = createCheat({
    id: "quick.enemy-state",
    location: { section: "quick", group: "state", order: 30 },
    meta: {
      label: "Enemy State",
      controls: [
        { key: "recover", type: "button", label: "Recover", action: "recover" },
        { key: "ruin", type: "button", label: "Ruin", action: "ruin" }
      ]
    },
    actions: {
      recover({ game }) {
        game.set("enemyhealth", Number(game.get("enemyhealthmax")) > 0 ? 100 : 0);
        game.set("enemytrust", 100);
        game.set("enemyanger", 0);
        return { ok: true, message: "Enemy recovered." };
      },
      ruin({ game }) {
        game.set("enemyhealth", 0);
        game.set("enemytrust", 100);
        game.set("enemyanger", 0);
        return { ok: true, message: "Enemy ruined." };
      }
    }
  });

  // src/cheats/definitions/quick/everyone-horny.cheat.js
  var everyoneHornyCheat = createCheat({
    id: "quick.everyone-horny",
    location: { section: "quick", group: "unlimited", order: 60 },
    meta: {
      label: "Everyone Is Horny",
      controls: [{ key: "enabled", type: "toggle", label: "Horny", action: "toggle" }]
    },
    requiredPaths: ["NPCName"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      for (const [index, npc] of (game.get("NPCName") ?? []).entries()) {
        if ((npc.nam ?? npc.description) === "Ivory Wraith") continue;
        game.set(`NPCName.${index}.lust`, 100);
      }
    }
  });

  // src/cheats/definitions/quick/farm-safety.cheat.js
  var farmSafetyCheat = createCheat({
    id: "quick.farm-safety",
    location: { section: "quick", group: "unlimited", order: 70 },
    meta: {
      label: "Farm Safety",
      controls: [{ key: "enabled", type: "toggle", label: "Safe", action: "toggle" }]
    },
    requiredPaths: ["farm.aggro"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("farm.aggro", 0);
    }
  });

  // src/cheats/definitions/quick/game-cheats.cheat.js
  function documentOf(controls) {
    return controls.element("open").ownerDocument;
  }
  var gameCheatsCheat = createCheat({
    id: "quick.game-cheats",
    location: { section: "quick", group: "state", order: 70 },
    meta: {
      label: "In-game Cheats",
      controls: [
        { key: "toggle", type: "button", label: "Enable", action: "toggle" },
        { key: "open", type: "button", label: "Open", action: "open" }
      ]
    },
    refresh: ["mount", "section-open", "after-action", "runtime-tick"],
    actions: {
      toggle({ game }) {
        const enabled = game.get("debug") !== 1;
        game.set("debug", enabled ? 1 : 0);
        return {
          ok: true,
          message: `In-game cheats ${enabled ? "enabled" : "disabled"}.`,
          refresh: true
        };
      },
      open({ game, controls }) {
        const button = [
          ...documentOf(controls).getElementById("overlayButtons")?.querySelectorAll?.(".link-internal") ?? []
        ].find((candidate) => candidate.textContent?.trim() === "CHEATS");
        if (!button) {
          return {
            ok: false,
            kind: "blocked",
            message: game.get("debug") === 1 ? "Change passage once, then try opening cheats again." : "Enable in-game cheats first."
          };
        }
        controls.element("open").getRootNode()?.querySelector?.("#close-modal-top")?.click();
        button.click();
        return { ok: true };
      }
    },
    sync({ game, controls }) {
      controls.text("toggle", game.get("debug") === 1 ? "Disable" : "Enable");
    }
  });

  // src/cheats/definitions/quick/hygiene.cheat.js
  function fillBodyLiquid(game, amount) {
    const bodyLiquid = game.get("player.bodyliquid");
    if (!bodyLiquid || typeof bodyLiquid !== "object") return false;
    for (const [outer, values] of Object.entries(bodyLiquid)) {
      if (!values || typeof values !== "object") continue;
      for (const inner of Object.keys(values))
        game.set(`player.bodyliquid.${outer}.${inner}`, amount);
    }
    return true;
  }
  var hygieneCheat = createCheat({
    id: "quick.hygiene",
    location: { section: "quick", group: "state", order: 60 },
    meta: {
      label: "Hygiene",
      controls: [
        { key: "clean", type: "button", label: "Clean", action: "clean" },
        { key: "dirty", type: "button", label: "Dirty", action: "dirty" },
        { key: "urethra", type: "button", label: "Clean urethral cum", action: "urethra" }
      ]
    },
    actions: {
      clean({ game }) {
        return fillBodyLiquid(game, 0) ? { ok: true, message: "Body liquids cleaned." } : { ok: false, kind: "validation", message: "Body-liquid data is unavailable." };
      },
      dirty({ game }) {
        return fillBodyLiquid(game, 100) ? { ok: true, message: "Body liquids filled." } : { ok: false, kind: "validation", message: "Body-liquid data is unavailable." };
      },
      urethra({ game }) {
        if (!Array.isArray(game.get("sexStats.vagina.sperm")))
          return { ok: false, kind: "validation", message: "Vaginal sperm data is unavailable." };
        game.set("sexStats.vagina.sperm", []);
        return { ok: true, message: "Urethral cum cleaned." };
      }
    }
  });

  // src/cheats/definitions/quick/infinite-npc-pregnancy.cheat.js
  var SECONDS_PER_DAY2 = 86400;
  var ACTIVE_LIMIT = 8;
  var HARD_LIMIT = 10;
  function processNpcPregnancyOverflow({ game, config, feedback }) {
    const mainNpcs = game.get("storedNPCs") ?? {};
    const mainLength = Object.keys(mainNpcs).length;
    const priority = config.get("storedNPCsPriority") || 0;
    const currentDate = Math.floor(game.get("timeStamp") / SECONDS_PER_DAY2);
    const lastDate = config.get("storedNPCsDate");
    const elapsedTimerUnits = lastDate !== 0 ? (currentDate - lastDate) * 3 : 0;
    if (elapsedTimerUnits === 0) {
      if (mainLength <= ACTIVE_LIMIT) return;
      if (priority >= ACTIVE_LIMIT) return;
    }
    const waitingNpcs = { ...config.get("storedNPCs") ?? {} };
    const active = {};
    const waiting = {};
    let activeCount = 0;
    config.set("storedNPCsDate", currentDate);
    for (const npc of Object.values(mainNpcs)) {
      const pregnancy = npc?.pregnancy;
      const remaining = pregnancy.timerEnd - pregnancy.timer;
      if (remaining <= 3 && activeCount <= ACTIVE_LIMIT) {
        active[`stored_${activeCount}`] = npc;
        if (activeCount === ACTIVE_LIMIT)
          feedback.warning?.("An NPC is about to give birth; pregnancy capacity is full today.");
        activeCount += 1;
      } else waiting[`stored_${Object.keys(waiting).length}`] = npc;
    }
    for (const npc of Object.values(waitingNpcs)) {
      const pregnancy = npc?.pregnancy;
      let timer = pregnancy.timer;
      if (elapsedTimerUnits > 0) {
        timer = Math.min(pregnancy.timerEnd, timer + elapsedTimerUnits);
        pregnancy.timer = timer;
      }
      const remaining = pregnancy.timerEnd - timer;
      if (remaining <= 3 && activeCount <= HARD_LIMIT) {
        active[`stored_${activeCount}`] = npc;
        if (activeCount === ACTIVE_LIMIT)
          feedback.warning?.("An NPC is about to give birth; pregnancy capacity is full today.");
        activeCount += 1;
      } else waiting[`stored_${Object.keys(waiting).length}`] = npc;
    }
    config.set("storedNPCsPriority", activeCount);
    config.set("storedNPCs", waiting);
    game.set("storedNPCs", active);
  }
  var infiniteNpcPregnancyCheat = createCheat({
    id: "quick.infinite-npc-pregnancy",
    location: { section: "quick", group: "pregnancy", order: 70 },
    meta: {
      label: "Infinite NPC Pregnancy",
      controls: [
        {
          key: "enabled",
          type: "toggle",
          label: "Preserve",
          action: "toggle",
          tooltip: "Stores overflow pregnancies in CheatPlus until they are one day from birth."
        }
      ]
    },
    requiredPaths: ["storedNPCs", "timeStamp"],
    config: ["storedNPCs", "storedNPCsDate", "storedNPCsPriority"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect(context) {
      processNpcPregnancyOverflow(context);
    }
  });

  // src/cheats/definitions/quick/intense-cum.cheat.js
  var temporaryArousal = 0;
  var previousOrgasmDown = -1;
  var intenseCumCheat = createCheat({
    id: "quick.intense-cum",
    location: { section: "quick", group: "unlimited", order: 80 },
    meta: {
      label: "Intense Cum",
      controls: [{ key: "enabled", type: "toggle", label: "Intense", action: "toggle" }]
    },
    requiredPaths: ["orgasmcurrent", "orgasmdown", "arousal"],
    config: ["orgasmCount", "unlicumMode"],
    toggle: { cadence: "frame", cooldownMs: 80, maxFailures: 5, runOnActivate: true },
    effect({ game, config }) {
      if (game.get("orgasmcurrent") != 0 && !config.get("unlicumMode")) {
        config.set("orgasmCount", 0);
        temporaryArousal = game.get("arousal");
        game.set("orgasmdown", 1e3);
        previousOrgasmDown = 1e3;
        config.set("unlicumMode", true);
        return;
      }
      if (game.get("orgasmdown") >= previousOrgasmDown || !config.get("unlicumMode")) return;
      previousOrgasmDown = game.get("orgasmdown");
      game.set("arousal", temporaryArousal);
      const count = config.get("orgasmCount") + 1;
      config.set("orgasmCount", count);
      if (count <= 2) return;
      config.set("unlicumMode", false);
      config.set("orgasmCount", 0);
      game.set("orgasmdown", -1);
      game.set("orgasmcurrent", 0);
      previousOrgasmDown = -1;
    }
  });

  // src/cheats/definitions/quick/invincible-angel.cheat.js
  var invincibleAngelCheat = createCheat({
    id: "quick.invincible-angel",
    location: { section: "quick", group: "unlimited", order: 100 },
    meta: {
      label: "Invincible Angel",
      controls: [
        {
          key: "enabled",
          type: "toggle",
          label: "Protect",
          action: "toggle",
          tooltip: "Prevents angel build from falling and helps prevent becoming a fallen angel. Combine it with Maintain Purity."
        }
      ]
    },
    requiredPaths: ["penisstate", "vaginastate", "angel", "angelbuild"],
    config: ["angel", "angelMode"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 1, runOnActivate: true },
    effect({ game, config, feedback }) {
      if (game.get("demon") > 0) feedback.warning?.("You are currently a demon.");
      if (game.get("fallenangel") > 0) {
        throw new Error("Invincible Angel is unavailable after becoming a fallen angel.");
      }
      const transformed = game.get("penisstate") != 0 || game.get("vaginastate") != 0;
      if (transformed) {
        if (!config.get("angelMode")) return;
        config.set("angel", game.get("angel"));
        game.set("angel", 0);
        game.set("angelbuild", 100);
        config.set("angelMode", true);
      } else if (!config.get("angelMode")) {
        game.set("angel", config.get("angel"));
      }
    }
  });

  // src/cheats/definitions/quick/maintain-purity.cheat.js
  var maintainPurityCheat = createCheat({
    id: "quick.maintain-purity",
    location: { section: "quick", group: "unlimited", order: 50 },
    meta: {
      label: "Maintain Purity",
      controls: [{ key: "enabled", type: "toggle", label: "Pure", action: "toggle" }]
    },
    requiredPaths: ["purity"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("purity", 1e3);
    }
  });

  // src/cheats/definitions/quick/maintain-virginity.cheat.js
  var maintainVirginityCheat = createCheat({
    id: "quick.maintain-virginity",
    location: { section: "quick", group: "unlimited", order: 40 },
    meta: {
      label: "Maintain Virginity",
      controls: [{ key: "enabled", type: "toggle", label: "Virgin", action: "toggle" }]
    },
    requiredPaths: ["player.virginity.penile", "player.virginity.vaginal"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("player.virginity.penile", true);
      game.set("player.virginity.vaginal", true);
    }
  });

  // src/cheats/definitions/quick/maximum-npc-pregnancy-rate.cheat.js
  var maximumNpcPregnancyRateCheat = createCheat({
    id: "quick.maximum-npc-pregnancy-rate",
    location: { section: "quick", group: "pregnancy", order: 110 },
    meta: {
      label: "Maximum NPC Pregnancy Rate",
      controls: [
        {
          key: "enabled",
          type: "toggle",
          label: "Maximum",
          action: "toggle",
          tooltip: "Gives NPCs the maximum pregnancy rate. Some NPCs still cannot become pregnant; Multiple NPC Pregnancies permits repeated pregnancies."
        }
      ]
    },
    requiredPaths: ["baseNpcPregnancyChance", "NPCList"],
    config: ["baseNpcPregnancyChance"],
    toggle: { cadence: "frame", cooldownMs: 250, maxFailures: 5, runOnActivate: true },
    effect({ game, config }) {
      if (config.get("baseNpcPregnancyChance") === null)
        config.set("baseNpcPregnancyChance", game.get("baseNpcPregnancyChance"));
      game.set("baseNpcPregnancyChance", 19);
      for (const npc of game.get("NPCList")) {
        if (npc?.pregnancyAvoidance > 0) npc.pregnancyAvoidance = 0;
      }
    }
  });

  // src/cheats/definitions/quick/maximum-stray-tasks.cheat.js
  var maximumStrayTasksCheat = createCheat({
    id: "quick.maximum-stray-tasks",
    location: { section: "quick", group: "tasks", order: 20 },
    meta: {
      label: "Maximum Stray Tasks",
      controls: [{ key: "enabled", type: "toggle", label: "Stray", action: "toggle" }]
    },
    requiredPaths: ["stray_happiness"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("stray_happiness", 100);
    }
  });

  // src/cheats/definitions/quick/multiple-npc-pregnancies.cheat.js
  var multipleNpcPregnanciesCheat = createCheat({
    id: "quick.multiple-npc-pregnancies",
    location: { section: "quick", group: "pregnancy", order: 120 },
    meta: {
      label: "Multiple NPC Pregnancies",
      controls: [
        {
          key: "enabled",
          type: "toggle",
          label: "Multiple",
          action: "toggle",
          tooltip: "Allows NPCs to become pregnant multiple times."
        }
      ]
    },
    requiredPaths: ["NPCList"],
    toggle: { cadence: "frame", cooldownMs: 250, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      for (const npc of game.get("NPCList")) {
        if (npc?.pregnancy === 1) npc.pregnancy = 0;
      }
    }
  });

  // src/cheats/definitions/quick/player-state.cheat.js
  var RECOVERED = Object.freeze({
    pain: 0,
    arousal: 0,
    tiredness: 0,
    stress: 0,
    trauma: 0,
    control: 1e3,
    drunk: 0,
    drugged: 0,
    hallucinogen: 0
  });
  var RUINED = Object.freeze({
    pain: 200,
    arousal: 1e4,
    tiredness: 2e3,
    stress: 1e4,
    trauma: 5e3,
    control: 0,
    drunk: 1e3,
    drugged: 1e3,
    hallucinogen: 1e3
  });
  function applyValues(game, values) {
    for (const [path7, value] of Object.entries(values)) game.set(path7, value);
  }
  var playerStateCheat = createCheat({
    id: "quick.player-state",
    location: { section: "quick", group: "state", order: 1 },
    meta: {
      label: "Player State",
      controls: [
        { key: "recover", type: "button", label: "Recover", action: "recover" },
        { key: "ruin", type: "button", label: "Ruin", action: "ruin" }
      ]
    },
    requiredPaths: Object.keys(RECOVERED),
    actions: {
      recover({ game }) {
        applyValues(game, RECOVERED);
        return { ok: true, message: "Player recovered." };
      },
      ruin({ game }) {
        applyValues(game, RUINED);
        return { ok: true, message: "Player ruined." };
      }
    }
  });

  // src/cheats/definitions/quick/pregnancy-detection.cheat.js
  var previousNpcCount = 0;
  var previousPlayerCount = 0;
  function npcCount(game, config) {
    let total = Object.keys(game.get("storedNPCs") ?? {}).length;
    total += Object.keys(config.get("storedNPCs") ?? {}).length;
    for (const npc of game.get("NPCName") ?? []) {
      if (npc?.pregnancy?.fetus?.length > 0) total += 1;
    }
    return total;
  }
  function playerCount(game) {
    return (game.get("sexStats.vagina.pregnancy.fetus")?.length ?? 0) + (game.get("sexStats.anus.pregnancy.fetus")?.length ?? 0);
  }
  var pregnancyDetectionCheat = createCheat({
    id: "quick.pregnancy-detection",
    location: { section: "quick", group: "pregnancy", order: 100 },
    meta: {
      label: "Pregnancy Detection",
      controls: [{ key: "enabled", type: "toggle", label: "Detect", action: "toggle" }]
    },
    requiredPaths: ["storedNPCs", "NPCName", "sexStats", "timeStamp"],
    config: ["storedNPCs", "storedNPCsDate", "storedNPCsPriority"],
    toggle: { cadence: "frame", cooldownMs: 250, maxFailures: 5, runOnActivate: true },
    onEnable() {
      previousNpcCount = 0;
      previousPlayerCount = 0;
    },
    effect(context) {
      const nextNpcCount = npcCount(context.game, context.config);
      const nextPlayerCount = playerCount(context.game);
      if (previousNpcCount === 0) {
        previousNpcCount = nextNpcCount;
        previousPlayerCount = nextPlayerCount;
        return;
      }
      if (nextNpcCount !== previousNpcCount) {
        context.feedback.info?.(
          nextNpcCount > previousNpcCount ? "An NPC became pregnant." : "An NPC gave birth."
        );
        processNpcPregnancyOverflow(context);
        previousNpcCount = nextNpcCount;
      }
      if (nextPlayerCount !== previousPlayerCount) {
        context.feedback.info?.(
          nextPlayerCount > previousPlayerCount ? "The player became pregnant." : "The player gave birth."
        );
        previousPlayerCount = nextPlayerCount;
      }
    }
  });

  // src/cheats/definitions/quick/random-encounters.cheat.js
  var randomEncountersCheat = createCheat({
    id: "quick.random-encounters",
    location: { section: "quick", group: "state", order: 80 },
    meta: {
      label: "Random Encounters",
      controls: [{ key: "toggle", type: "button", label: "Enable", action: "toggle" }]
    },
    refresh: ["mount", "section-open", "after-action", "runtime-tick"],
    actions: {
      toggle({ game }) {
        const enabled = game.get("alluremod") === 0;
        game.set("alluremod", enabled ? 1 : 0);
        return {
          ok: true,
          message: `Random encounters ${enabled ? "enabled" : "disabled"}.`,
          refresh: true
        };
      }
    },
    sync({ game, controls }) {
      controls.text("toggle", game.get("alluremod") === 1 ? "Enabled" : "Disabled");
    }
  });

  // src/cheats/definitions/quick/temple-vow.cheat.js
  var templeVowCheat = createCheat({
    id: "quick.temple-vow",
    location: { section: "quick", group: "state", order: 50 },
    meta: {
      label: "Temple Vow",
      controls: [
        { key: "toggle", type: "button", label: "Toggle", action: "toggle" },
        { key: "current", type: "text", label: "", intent: "status" }
      ]
    },
    requiredPaths: ["player.virginity.temple"],
    refresh: ["mount", "section-open", "after-action", "runtime-tick"],
    actions: {
      toggle({ game }) {
        game.set("player.virginity.temple", !game.get("player.virginity.temple"));
        return { ok: true, message: "Temple vow updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text("current", game.get("player.virginity.temple") ? "Virgin" : "Not virgin");
    }
  });

  // src/cheats/definitions/quick/unlimited-cum.cheat.js
  var unlimitedCumCheat = createCheat({
    id: "quick.unlimited-cum",
    location: { section: "quick", group: "unlimited", order: 30 },
    meta: {
      label: "Unlimited Cum",
      controls: [{ key: "enabled", type: "toggle", label: "Cum", action: "toggle" }]
    },
    requiredPaths: ["semen_amount", "semen_volume", "orgasmcount"],
    toggle: { cadence: "frame", cooldownMs: 100, maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      if (game.get("semen_amount") >= game.get("semen_volume")) return;
      game.set("semen_amount", game.get("semen_volume"));
      game.set("orgasmcount", 0);
    }
  });

  // src/cheats/definitions/world/farm-editor-helpers.js
  function hydrateInput({ game, controls, control = "value", path: path7 }) {
    const input = controls.element(control);
    if (input.ownerDocument.activeElement === input) return;
    controls.setValue(control, game.get(path7) ?? "");
  }
  function setInteger({ game, controls, path: path7, label, control = "value" }) {
    const raw = controls.value(control);
    const value = Number(raw);
    if (String(raw).trim() === "" || !Number.isInteger(value))
      return { ok: false, kind: "validation", message: `${label} must be an integer.` };
    if (!game.has(path7))
      return { ok: false, kind: "validation", message: `${label} is unavailable.` };
    game.set(path7, value);
    return { ok: true, message: `${label} updated.`, refresh: true };
  }
  function selectAndRefresh2() {
    return { ok: true, refresh: true };
  }

  // src/cheats/definitions/world/farm-animal-affinity.cheat.js
  function animalOptions({ game }) {
    return Object.keys(game.get("farm.beasts") ?? {}).sort(
      (left, right) => left.localeCompare(right)
    );
  }
  var selectedPath = (controls) => `farm.beasts.${controls.value("animal")}`;
  var farmAnimalAffinityCheat = createCheat({
    id: "world.farm-animal-affinity",
    location: { section: "misc", group: "farm", order: 100 },
    meta: {
      label: "Farm Animal Affinity",
      controls: [
        { key: "animal", type: "select", options: animalOptions, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["farm.beasts"],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select: selectAndRefresh2,
      set({ game, controls }) {
        return setInteger({
          game,
          controls,
          path: selectedPath(controls),
          label: "Animal affinity"
        });
      }
    },
    sync({ game, controls }) {
      hydrateInput({ game, controls, path: selectedPath(controls) });
    }
  });

  // src/cheats/definitions/world/farm-assault-time.cheat.js
  var PATH = "farm_attack_timer";
  var farmAssaultTimeCheat = createCheat({
    id: "world.farm-assault-time",
    location: { section: "misc", group: "farm", order: 120 },
    meta: {
      label: "Farm Assault Time",
      controls: [
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [PATH],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      set({ game, controls }) {
        return setInteger({ game, controls, path: PATH, label: "Farm assault time" });
      }
    },
    sync({ game, controls }) {
      hydrateInput({ game, controls, path: PATH });
    }
  });

  // src/cheats/definitions/world/farm-build-time.cheat.js
  var PATH2 = "farm.build_timer";
  var farmBuildTimeCheat = createCheat({
    id: "world.farm-build-time",
    location: { section: "misc", group: "farm", order: 110 },
    meta: {
      label: "Farm Build Time",
      controls: [
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: [PATH2],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      set({ game, controls }) {
        return setInteger({ game, controls, path: PATH2, label: "Farm build time" });
      }
    },
    sync({ game, controls }) {
      hydrateInput({ game, controls, path: PATH2 });
    }
  });

  // src/cheats/definitions/world/max-harmony.cheat.js
  var maxHarmonyCheat = createCheat({
    id: "world.max-harmony",
    location: { section: "misc", group: "world", order: 10 },
    meta: {
      label: "Wolfpack",
      controls: [
        { key: "harmony", type: "button", label: "Max Harmony", action: "harmony" },
        { key: "ferocity", type: "button", label: "Max Ferocity", action: "ferocity" }
      ]
    },
    actions: {
      harmony({ game }) {
        game.set("wolfpackharmony", 22);
        return { ok: true, message: "Wolfpack harmony maximized." };
      },
      ferocity({ game }) {
        game.set("wolfpackferocity", 22);
        return { ok: true, message: "Wolfpack ferocity maximized." };
      }
    }
  });

  // src/cheats/definitions/world/maximum-church-tasks.cheat.js
  var maximumChurchTasksCheat = createCheat({
    id: "world.maximum-church-tasks",
    location: { section: "quick", group: "tasks", order: 10 },
    meta: {
      label: "Maximum Church Tasks",
      controls: [{ key: "enabled", type: "toggle", label: "Church", action: "toggle" }]
    },
    requiredPaths: ["temple_garden", "temple_quarters", "grace"],
    toggle: { cadence: "daily", maxFailures: 5, runOnActivate: true },
    effect({ game }) {
      game.set("temple_garden", 100);
      game.set("temple_quarters", 100);
      game.set("grace", 100);
    }
  });

  // src/cheats/definitions/world/pregnancy-editor-helpers.js
  var confirmed = (controls) => controls.checked("confirm");
  function fetusOptions(pregnancy) {
    return (pregnancy?.fetus ?? []).map((fetus, index) => ({
      value: index,
      label: fetus?.name ?? fetus?.mother ?? fetus?.creature ?? fetus?.stats?.gender ?? `Fetus ${index + 1}`
    }));
  }
  function resetPregnancy(pregnancy) {
    pregnancy.fetus = [];
    pregnancy.potentialFathers = [];
    pregnancy.timer = 0;
    pregnancy.timerEnd = null;
    pregnancy.type = null;
    pregnancy.waterBreaking = false;
    pregnancy.waterBreakingTimer = null;
    if ("awareOf" in pregnancy) pregnancy.awareOf = null;
    if ("awareOfDetails" in pregnancy) pregnancy.awareOfDetails = null;
    if ("awareOfMultiple" in pregnancy) pregnancy.awareOfMultiple = null;
  }
  function removeFetus(pregnancy, selected) {
    if (!Array.isArray(pregnancy?.fetus) || pregnancy.fetus.length === 0) return false;
    if (pregnancy.fetus.length === 1) resetPregnancy(pregnancy);
    else pregnancy.fetus.splice(Number.parseInt(selected, 10), 1);
    return true;
  }
  var destructiveConfirmation = "Confirm removal. Pregnancy and child deletion cannot be undone.";

  // src/cheats/definitions/world/mc-abortion.cheat.js
  function locationOptions({ game }) {
    return Object.entries(game.get("sexStats") ?? {}).filter(([, value]) => Array.isArray(value?.pregnancy?.fetus)).map(([key]) => key);
  }
  function options({ game, controls }) {
    return fetusOptions(game.get(`sexStats.${controls.value("location")}.pregnancy`));
  }
  var mcAbortionCheat = createCheat({
    id: "world.mc-abortion",
    location: { section: "misc", group: "pregnancy-removal", order: 70 },
    meta: {
      label: "MC Pregnancy Removal",
      controls: [
        { key: "location", type: "select", options: locationOptions, action: "select" },
        { key: "fetus", type: "select", options, action: "select" },
        { key: "confirm", type: "toggle", label: "Confirm", intent: "confirmation" },
        { key: "remove", type: "button", label: "Remove", action: "remove" }
      ]
    },
    requiredPaths: ["sexStats"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      remove({ game, controls }) {
        if (!confirmed(controls))
          return { ok: false, kind: "blocked", message: destructiveConfirmation };
        const path7 = `sexStats.${controls.value("location")}.pregnancy`;
        const pregnancy = game.get(path7);
        if (!removeFetus(pregnancy, controls.value("fetus")))
          return { ok: false, kind: "validation", message: "No fetus is available." };
        game.set(path7, pregnancy);
        controls.setValue("confirm", false);
        return { ok: true, message: "MC pregnancy removed.", refresh: true };
      }
    }
  });

  // src/cheats/definitions/world/mc-child-manager.cheat.js
  var PROPERTIES = [
    { value: "name", label: "Name" },
    { value: "motherKnown", label: "Mother Known" },
    { value: "fatherKnown", label: "Father Known" },
    { value: "abandon", label: "Abandon Selected" }
  ];
  function childOptions({ game }) {
    return Object.entries(game.get("children") ?? {}).map(([key, child]) => ({
      value: key,
      label: child?.name ?? key
    }));
  }
  function selectedChild({ game, controls }) {
    const key = controls.value("child");
    return key ? game.get(`children.${key}`) : void 0;
  }
  function setChildControlsVisible(controls, visible) {
    for (const key of ["property", "value", "summary", "confirm", "set", "purge"]) {
      controls.element(key).closest(".cp-cheat-control-unit").hidden = !visible;
    }
  }
  var mcChildManagerCheat = createCheat({
    id: "world.mc-child-manager",
    location: { section: "misc", group: "offspring", order: 60 },
    meta: {
      label: "MC Child Manager",
      controls: [
        {
          key: "child",
          type: "select",
          options: childOptions,
          fallbackOptions: [{ value: "", label: "No children" }],
          action: "select"
        },
        { key: "property", type: "select", options: PROPERTIES, action: "select" },
        { key: "value", type: "input" },
        { key: "summary", type: "text" },
        { key: "confirm", type: "toggle", label: "Confirm deletion", intent: "confirmation" },
        { key: "set", type: "button", label: "Apply", action: "set" },
        { key: "purge", type: "button", label: "Abandon All", action: "purge" }
      ]
    },
    requiredPaths: ["children"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set({ game, controls }) {
        const key = controls.value("child");
        const property = controls.value("property");
        if (!key || !selectedChild({ game, controls }))
          return { ok: false, kind: "validation", message: "Select an existing child." };
        if (property === "abandon") {
          if (!controls.checked("confirm"))
            return { ok: false, kind: "blocked", message: destructiveConfirmation };
          const children = { ...game.get("children") ?? {} };
          delete children[key];
          game.set("children", children);
          controls.setValue("confirm", false);
          return { ok: true, message: "Child abandoned.", refresh: true };
        }
        const input = controls.element("value");
        const value = property === "name" ? controls.value("value") : Boolean(input.checked);
        game.set(`children.${key}.${property}`, value);
        return { ok: true, message: "Child information updated.", refresh: true };
      },
      purge({ game, controls }) {
        if (!controls.checked("confirm"))
          return { ok: false, kind: "blocked", message: destructiveConfirmation };
        game.set("children", {});
        controls.setValue("confirm", false);
        return { ok: true, message: "All children abandoned.", refresh: true };
      }
    },
    sync(context) {
      const child = selectedChild(context);
      setChildControlsVisible(context.controls, Boolean(child));
      if (!child) return;
      const property = context.controls.value("property");
      const input = context.controls.element("value");
      const booleanInput = property !== "name";
      input.type = booleanInput ? "checkbox" : "text";
      if (booleanInput) input.checked = property === "abandon" ? false : Boolean(child?.[property]);
      else context.controls.setValue("value", child?.name ?? "");
      context.controls.text(
        "summary",
        `${child.name ?? ""} \xB7 ${child.mother ?? "unknown mother"} \xB7 ${child.father ?? "unknown father"} \xB7 ${child.birthLocation ?? "unknown location"}`
      );
    }
  });

  // src/cheats/definitions/world/mc-pregnancy.cheat.js
  var LOCK_JOB_ID = "world.mc-pregnancy.lock";
  var lockedDays = /* @__PURE__ */ new Map();
  function holeOptions({ game }) {
    return Object.entries(game.get("sexStats") ?? {}).filter(([, value]) => value?.pregnancy).map(([key]) => key);
  }
  function pregnancyOptions({ game, controls }) {
    const pregnancy = game.get(`sexStats.${controls.value("hole")}.pregnancy`);
    if (pregnancy?.type === "parasite") {
      return Object.entries(pregnancy.fetus ?? {}).map(([key, fetus]) => ({
        value: key,
        label: fetus?.creature ?? key
      }));
    }
    return pregnancy?.timerEnd != null ? [{ value: "baby", label: "Baby" }] : [];
  }
  function lockKey(hole, type, pregnancy) {
    return `${hole}:${type ?? "pregnancy"}:${pregnancy}`;
  }
  function applyDays(game, { hole, pregnancy: selected, days }) {
    const pregnancy = game.get(`sexStats.${hole}.pregnancy`);
    if (!pregnancy) return false;
    if (pregnancy.type === "parasite") {
      if (!pregnancy.fetus?.[selected]) return false;
      game.set(`sexStats.${hole}.pregnancy.fetus.${selected}.daysLeft`, days);
    } else {
      if (!Number.isFinite(pregnancy.timerEnd)) return false;
      game.set(`sexStats.${hole}.pregnancy.timer`, Math.max(0, pregnancy.timerEnd - days * 3));
    }
    return true;
  }
  function syncSchedule({ game, services }) {
    services.scheduler?.unregister(LOCK_JOB_ID, { cadence: "frame" });
    if (!lockedDays.size) return;
    services.scheduler?.register(
      LOCK_JOB_ID,
      () => {
        for (const lock of lockedDays.values()) applyDays(game, lock);
      },
      { cadence: "frame", cooldownMs: 100, maxFailures: 5 }
    );
  }
  var mcPregnancyCheat = createCheat({
    id: "world.mc-pregnancy",
    location: { section: "misc", group: "pregnancy", order: 40 },
    meta: {
      label: "MC Pregnancy",
      controls: [
        { key: "hole", type: "select", options: holeOptions, action: "select" },
        { key: "pregnancy", type: "select", options: pregnancyOptions, action: "select" },
        { key: "days", type: "input" },
        { key: "locked", type: "toggle", label: "Lock pregnancy" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["sexStats"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set(context) {
        const hole = context.controls.value("hole");
        const selected = context.controls.value("pregnancy");
        const days = Number.parseInt(context.controls.value("days"), 10);
        const type = context.game.get(`sexStats.${hole}.pregnancy.type`);
        if (!hole || !selected || Number.isNaN(days) || !applyDays(context.game, { hole, pregnancy: selected, days }))
          return { ok: false, kind: "validation", message: "MC pregnancy data is unavailable." };
        const key = lockKey(hole, type, selected);
        if (context.controls.checked("locked"))
          lockedDays.set(key, { hole, pregnancy: selected, days });
        else lockedDays.delete(key);
        syncSchedule(context);
        return { ok: true, message: "MC pregnancy updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      const hole = controls.value("hole");
      const selected = controls.value("pregnancy");
      const pregnancy = game.get(`sexStats.${hole}.pregnancy`);
      const input = controls.element("days");
      if (input.ownerDocument.activeElement !== input) {
        const days = pregnancy?.type === "parasite" ? pregnancy?.fetus?.[selected]?.daysLeft : Number.isFinite(pregnancy?.timerEnd - pregnancy?.timer) ? (pregnancy.timerEnd - pregnancy.timer) / 3 : "";
        controls.setValue("days", days ?? "");
      }
      controls.setValue("locked", lockedDays.has(lockKey(hole, pregnancy?.type, selected)));
    },
    onEnable(context) {
      syncSchedule(context);
      return () => context.services.scheduler?.unregister(LOCK_JOB_ID, { cadence: "frame" });
    }
  });

  // src/cheats/definitions/world/mc-tentacle.cheat.js
  function locationOptions2({ game }) {
    return Object.entries(game.get("container") ?? {}).filter(([, value]) => value?.creatures).map(([key]) => key);
  }
  function creatureOptions({ game, controls }) {
    return Object.entries(game.get(`container.${controls.value("location")}.creatures`) ?? {}).filter(([, creature]) => creature).map(([key, creature]) => ({ value: key, label: creature.creature ?? key }));
  }
  var mcTentacleCheat = createCheat({
    id: "world.mc-tentacle",
    location: { section: "misc", group: "offspring", order: 50 },
    meta: {
      label: "MC Tentacle Pregnancy",
      controls: [
        { key: "location", type: "select", options: locationOptions2, action: "select" },
        { key: "creature", type: "select", options: creatureOptions, action: "select" },
        { key: "speed", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["container"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set({ game, controls }) {
        const path7 = `container.${controls.value("location")}.creatures.${controls.value(
          "creature"
        )}.stats.speed`;
        const speed = Number.parseInt(controls.value("speed"), 10);
        if (!game.has(path7) || Number.isNaN(speed))
          return { ok: false, kind: "validation", message: "Tentacle data is unavailable." };
        game.set(path7, speed);
        return { ok: true, message: "Tentacle pregnancy speed updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      const input = controls.element("speed");
      if (input.ownerDocument.activeElement === input) return;
      controls.setValue(
        "speed",
        game.get(
          `container.${controls.value("location")}.creatures.${controls.value(
            "creature"
          )}.stats.speed`
        ) ?? ""
      );
    }
  });

  // src/cheats/definitions/world/named-npc-abortion.cheat.js
  function npcOptions({ game }) {
    return (game.get("NPCName") ?? []).map((npc, index) => ({ npc, index })).filter(({ npc }) => Array.isArray(npc?.pregnancy?.fetus)).map(({ npc, index }) => ({ value: index, label: npc.nam ?? npc.description ?? index }));
  }
  function options2({ game, controls }) {
    return fetusOptions(game.get(`NPCName.${controls.value("npc")}.pregnancy`));
  }
  var namedNpcAbortionCheat = createCheat({
    id: "world.named-npc-abortion",
    location: { section: "misc", group: "pregnancy-removal", order: 80 },
    meta: {
      label: "Named NPC Pregnancy Removal",
      controls: [
        { key: "npc", type: "select", options: npcOptions, action: "select" },
        { key: "fetus", type: "select", options: options2, action: "select" },
        { key: "confirm", type: "toggle", label: "Confirm", intent: "confirmation" },
        { key: "remove", type: "button", label: "Remove", action: "remove" }
      ]
    },
    requiredPaths: ["NPCName"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      remove({ game, controls }) {
        if (!confirmed(controls))
          return { ok: false, kind: "blocked", message: destructiveConfirmation };
        const path7 = `NPCName.${controls.value("npc")}.pregnancy`;
        const pregnancy = game.get(path7);
        if (!removeFetus(pregnancy, controls.value("fetus")))
          return { ok: false, kind: "validation", message: "No fetus is available." };
        game.set(path7, pregnancy);
        controls.setValue("confirm", false);
        return { ok: true, message: "Named NPC pregnancy removed.", refresh: true };
      }
    }
  });

  // src/cheats/definitions/world/named-npc-pregnancy.cheat.js
  var LOCK_JOB_ID2 = "world.named-npc-pregnancy.lock";
  var lockedDays2 = /* @__PURE__ */ new Map();
  function options3({ game }) {
    return (game.get("NPCName") ?? []).map((npc, index) => ({ npc, index })).filter(({ npc }) => npc?.pregnancy?.timer != null).map(({ npc, index }) => ({ value: index, label: npc.nam ?? npc.description }));
  }
  function applyLocks(game) {
    for (const [index, days] of lockedDays2) {
      const timerEnd = game.get(`NPCName.${index}.pregnancy.timerEnd`);
      if (!Number.isFinite(timerEnd)) continue;
      game.set(`NPCName.${index}.pregnancy.timer`, Math.max(0, timerEnd - days * 3));
    }
  }
  function syncSchedule2({ game, services }) {
    services.scheduler?.unregister(LOCK_JOB_ID2, { cadence: "frame" });
    if (!lockedDays2.size) return;
    services.scheduler?.register(LOCK_JOB_ID2, () => applyLocks(game), {
      cadence: "frame",
      cooldownMs: 100,
      maxFailures: 5
    });
  }
  var namedNpcPregnancyCheat = createCheat({
    id: "world.named-npc-pregnancy",
    location: { section: "misc", group: "pregnancy", order: 20 },
    meta: {
      label: "Named NPC Pregnancy",
      controls: [
        {
          key: "npc",
          type: "select",
          options: options3,
          fallbackOptions: [{ value: "", label: "No pregnancies" }],
          action: "select"
        },
        { key: "days", type: "input" },
        { key: "locked", type: "toggle", label: "Lock pregnancy" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["NPCName"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set(context) {
        const index = Number.parseInt(context.controls.value("npc"), 10);
        const days = Number.parseInt(context.controls.value("days"), 10);
        const timerEnd = context.game.get(`NPCName.${index}.pregnancy.timerEnd`);
        if (!Number.isInteger(index) || Number.isNaN(days) || !Number.isFinite(timerEnd))
          return { ok: false, kind: "validation", message: "Pregnancy data is unavailable." };
        if (context.controls.checked("locked")) lockedDays2.set(index, days);
        else lockedDays2.delete(index);
        context.game.set(`NPCName.${index}.pregnancy.timer`, Math.max(0, timerEnd - days * 3));
        syncSchedule2(context);
        return { ok: true, message: "Named NPC pregnancy updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      const index = Number.parseInt(controls.value("npc"), 10);
      const timer = game.get(`NPCName.${index}.pregnancy.timer`);
      const timerEnd = game.get(`NPCName.${index}.pregnancy.timerEnd`);
      controls.setValue("days", Number.isFinite(timerEnd - timer) ? (timerEnd - timer) / 3 : "");
      controls.setValue("locked", lockedDays2.has(index));
    },
    onEnable(context) {
      syncSchedule2(context);
      return () => context.services.scheduler?.unregister(LOCK_JOB_ID2, { cadence: "frame" });
    }
  });

  // src/cheats/definitions/world/npc-trait-editor.cheat.js
  function npcOptions2({ game }) {
    const configured = game.setup("NPCNameList");
    const names = Array.isArray(configured) ? configured : (game.get("NPCName") ?? []).map(({ nam, description }) => nam ?? description);
    return names.map((name) => ({ value: name, label: name }));
  }
  function selectedNpc({ game, controls }) {
    const list = game.get("NPCName") ?? [];
    const selectedName = controls.value("npc");
    const index = list.findIndex(
      ({ nam, description }) => nam === selectedName || description === selectedName
    );
    return { index, npc: list[index] };
  }
  var npcTraitEditorCheat = createCheat({
    id: "world.npc-trait-editor",
    location: { section: "misc", group: "npc", order: 5 },
    meta: {
      label: "NPC Manager",
      controls: [
        {
          key: "npc",
          type: "select",
          options: npcOptions2,
          fallbackOptions: [{ value: "", label: "No NPC data" }],
          action: "select"
        },
        { key: "trait", type: "select", options: npctrait, action: "select" },
        { key: "value", type: "input" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["NPCName"],
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set(context) {
        const { index, npc } = selectedNpc(context);
        const trait = context.controls.value("trait");
        const value = Number.parseInt(context.controls.value("value"), 10);
        if (!npc || !Object.hasOwn(npc, trait))
          return { ok: false, kind: "validation", message: "NPC trait is unavailable." };
        if (Number.isNaN(value))
          return { ok: false, kind: "validation", message: "Input is not a number." };
        context.game.set(`NPCName.${index}.${trait}`, value);
        return { ok: true, message: "NPC trait updated.", refresh: true };
      }
    },
    sync(context) {
      const { npc } = selectedNpc(context);
      const trait = context.controls.value("trait");
      context.controls.setValue("value", npc?.[trait] ?? "");
    }
  });

  // src/cheats/definitions/world/produce-sales-report.cheat.js
  function sellingEntries(game) {
    return Object.entries(game.get("farmersProduce.selling") ?? {}).map(([name, raw]) => ({ name, amount: Number(raw) })).filter(({ amount }) => Number.isFinite(amount)).sort((left, right) => right.amount - left.amount || left.name.localeCompare(right.name));
  }
  function renderReport({ game, controls }) {
    const entries2 = sellingEntries(game);
    controls.text(
      "report",
      entries2.length ? entries2.map(({ name, amount }, index) => `${index + 1}. ${name}: ${amount}`).join(" | ") : "No produce sales recorded."
    );
  }
  var produceSalesReportCheat = createCheat({
    id: "world.produce-sales-report",
    location: { section: "misc", group: "produce-inspection", order: 130 },
    meta: {
      label: "Produce Sales",
      controls: [
        { key: "report", type: "text" },
        { key: "refresh", type: "button", label: "Refresh", action: "refresh" }
      ]
    },
    requiredPaths: ["farmersProduce.selling"],
    isApplicable({ game }) {
      const selling = game.get("farmersProduce.selling");
      return Boolean(selling) && typeof selling === "object" && !Array.isArray(selling);
    },
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      refresh() {
        return { ok: true, message: "Produce sales refreshed.", refresh: true };
      }
    },
    sync: renderReport
  });

  // src/cheats/definitions/world/stored-npc-abortion.cheat.js
  function entries(context) {
    const gameEntries = Object.entries(context.game.get("storedNPCs") ?? {}).map(([key, npc]) => ({
      source: "game",
      key,
      npc
    }));
    const configEntries = Object.entries(context.config.get("storedNPCs") ?? {}).map(
      ([key, npc]) => ({ source: "config", key, npc })
    );
    return [...gameEntries, ...configEntries].filter(
      ({ npc }) => Array.isArray(npc?.pregnancy?.fetus)
    );
  }
  function npcOptions3(context) {
    return entries(context).map(({ source, key, npc }, index) => ({
      value: `${source}:${key}`,
      label: `${index + 1}. ${npc.pregnancy.fetus[0]?.mother ?? key}`
    }));
  }
  function selection(context) {
    const [source, ...keyParts] = context.controls.value("npc").split(":");
    const key = keyParts.join(":");
    const store2 = source === "config" ? context.config.get("storedNPCs") : context.game.get("storedNPCs");
    return { source, key, store: store2 ?? {}, npc: store2?.[key] };
  }
  function options4(context) {
    return fetusOptions(selection(context).npc?.pregnancy);
  }
  var storedNpcAbortionCheat = createCheat({
    id: "world.stored-npc-abortion",
    location: { section: "misc", group: "pregnancy-removal", order: 90 },
    meta: {
      label: "Stored NPC Pregnancy Removal",
      controls: [
        { key: "npc", type: "select", options: npcOptions3, action: "select" },
        { key: "fetus", type: "select", options: options4, action: "select" },
        { key: "confirm", type: "toggle", label: "Confirm", intent: "confirmation" },
        { key: "remove", type: "button", label: "Remove", action: "remove" },
        { key: "purge", type: "button", label: "Purge All", action: "purge" }
      ]
    },
    requiredPaths: ["storedNPCs"],
    config: ["storedNPCs"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      remove(context) {
        if (!confirmed(context.controls))
          return { ok: false, kind: "blocked", message: destructiveConfirmation };
        const { source, key, store: store2, npc } = selection(context);
        if (!key || !removeFetus(npc?.pregnancy, context.controls.value("fetus")))
          return { ok: false, kind: "validation", message: "No fetus is available." };
        if (npc.pregnancy.fetus.length === 0) delete store2[key];
        if (source === "config") context.config.set("storedNPCs", { ...store2 });
        else context.game.set("storedNPCs", { ...store2 });
        context.controls.setValue("confirm", false);
        return { ok: true, message: "Stored NPC pregnancy removed.", refresh: true };
      },
      purge(context) {
        if (!confirmed(context.controls))
          return { ok: false, kind: "blocked", message: destructiveConfirmation };
        context.game.set("storedNPCs", {});
        context.config.set("storedNPCs", {});
        context.controls.setValue("confirm", false);
        return { ok: true, message: "Stored NPC pregnancies purged.", refresh: true };
      }
    }
  });

  // src/cheats/definitions/world/stored-npc-pregnancy.cheat.js
  var LOCK_JOB_ID3 = "world.stored-npc-pregnancy.lock";
  var lockedDays3 = /* @__PURE__ */ new Map();
  function options5({ game }) {
    return Object.entries(game.get("storedNPCs") ?? {}).filter(([, npc]) => npc?.pregnancy?.fetus?.[0]?.mother).map(([key, npc]) => ({ value: key, label: npc.pregnancy.fetus[0].mother }));
  }
  function applyLocks2(game) {
    for (const [key, days] of lockedDays3) {
      const timerEnd = game.get(`storedNPCs.${key}.pregnancy.timerEnd`);
      if (!Number.isFinite(timerEnd)) continue;
      game.set(`storedNPCs.${key}.pregnancy.timer`, Math.max(0, timerEnd - days * 3));
    }
  }
  function syncSchedule3({ game, services }) {
    services.scheduler?.unregister(LOCK_JOB_ID3, { cadence: "frame" });
    if (!lockedDays3.size) return;
    services.scheduler?.register(LOCK_JOB_ID3, () => applyLocks2(game), {
      cadence: "frame",
      cooldownMs: 100,
      maxFailures: 5
    });
  }
  var storedNpcPregnancyCheat = createCheat({
    id: "world.stored-npc-pregnancy",
    location: { section: "misc", group: "pregnancy", order: 30 },
    meta: {
      label: "NPC Pregnancy",
      controls: [
        {
          key: "npc",
          type: "select",
          options: options5,
          fallbackOptions: [{ value: "", label: "No pregnancies" }],
          action: "select"
        },
        { key: "days", type: "input" },
        { key: "locked", type: "toggle", label: "Lock pregnancy" },
        { key: "set", type: "button", label: "Set", action: "set" }
      ]
    },
    requiredPaths: ["storedNPCs"],
    refresh: ["mount", "section-open"],
    actions: {
      select() {
        return { ok: true, refresh: true };
      },
      set(context) {
        const key = context.controls.value("npc");
        const days = Number.parseInt(context.controls.value("days"), 10);
        const timerEnd = context.game.get(`storedNPCs.${key}.pregnancy.timerEnd`);
        if (!key || Number.isNaN(days) || !Number.isFinite(timerEnd))
          return { ok: false, kind: "validation", message: "Pregnancy data is unavailable." };
        if (context.controls.checked("locked")) lockedDays3.set(key, days);
        else lockedDays3.delete(key);
        context.game.set(`storedNPCs.${key}.pregnancy.timer`, Math.max(0, timerEnd - days * 3));
        syncSchedule3(context);
        return { ok: true, message: "NPC pregnancy updated.", refresh: true };
      }
    },
    sync({ game, controls }) {
      const key = controls.value("npc");
      const timer = game.get(`storedNPCs.${key}.pregnancy.timer`);
      const timerEnd = game.get(`storedNPCs.${key}.pregnancy.timerEnd`);
      controls.setValue("days", Number.isFinite(timerEnd - timer) ? (timerEnd - timer) / 3 : "");
      controls.setValue("locked", lockedDays3.has(key));
    },
    onEnable(context) {
      syncSchedule3(context);
      return () => context.services.scheduler?.unregister(LOCK_JOB_ID3, { cadence: "frame" });
    }
  });

  // src/cheats/definitions/world/vrel-coins-usage.cheat.js
  var PATH3 = "featsBoosts.pointsUsed";
  var vrelCoinsUsageCheat = createCheat({
    id: "world.vrel-coins-usage",
    location: { section: "misc", group: "mod-integration", order: 140 },
    meta: {
      label: "Reset Vrel Coins Usage",
      controls: [
        { key: "current", type: "text" },
        { key: "reset", type: "button", label: "Reset", action: "reset" }
      ]
    },
    requiredPaths: [PATH3],
    isApplicable({ game }) {
      return Number.isFinite(game.get(PATH3));
    },
    refresh: ["mount", "section-open", "runtime-tick"],
    actions: {
      reset({ game }) {
        game.set(PATH3, 0);
        return { ok: true, message: "Vrel coins usage reset.", refresh: true };
      }
    },
    sync({ game, controls }) {
      controls.text("current", game.get(PATH3));
    }
  });

  // src/generated/cheats.generated.js
  var generatedCheats = Object.freeze([
    runDiagnosticsCheat,
    ballsCheat,
    bodySizeCheat,
    bodyTypeCheat,
    characteristicsCheat,
    crimeCheat,
    cumCheat,
    enemyStatsCheat,
    examCheat,
    fameCheat,
    hentaiSkillCheat,
    infiniteArousalCheat,
    lactationCheat,
    milkCheat,
    moneyCheat,
    parasitesCheat,
    schoolReputationCheat,
    playerStatsCheat,
    talentCheat,
    unlimitedSprayCheat,
    virginityCheat,
    arousalCheat,
    autoChildInteractionCheat,
    edenGardenCheat,
    edenMushroomsCheat,
    edenSpringCheat,
    edenTimerCheat,
    enemyStateCheat,
    everyoneHornyCheat,
    farmSafetyCheat,
    gameCheatsCheat,
    hygieneCheat,
    infiniteNpcPregnancyCheat,
    intenseCumCheat,
    invincibleAngelCheat,
    maintainPurityCheat,
    maintainVirginityCheat,
    maximumNpcPregnancyRateCheat,
    maximumStrayTasksCheat,
    multipleNpcPregnanciesCheat,
    playerStateCheat,
    pregnancyDetectionCheat,
    randomEncountersCheat,
    templeVowCheat,
    unlimitedCumCheat,
    farmAnimalAffinityCheat,
    farmAssaultTimeCheat,
    farmBuildTimeCheat,
    maxHarmonyCheat,
    maximumChurchTasksCheat,
    mcAbortionCheat,
    mcChildManagerCheat,
    mcPregnancyCheat,
    mcTentacleCheat,
    namedNpcAbortionCheat,
    namedNpcPregnancyCheat,
    npcTraitEditorCheat,
    produceSalesReportCheat,
    storedNpcAbortionCheat,
    storedNpcPregnancyCheat,
    vrelCoinsUsageCheat
  ]);

  // src/cheats/catalog.js
  var SECTION_ORDER = ["quick", "stats", "misc"];
  function createCheatCatalog(descriptors, { configPaths = CHEAT_CONFIG_SCHEMA.map(({ path: path7 }) => path7) } = {}) {
    if (!Array.isArray(descriptors)) throw new TypeError("Cheat catalog input must be an array.");
    const paths = new Set(configPaths), byId = /* @__PURE__ */ new Map(), placements = /* @__PURE__ */ new Map();
    for (const descriptor of descriptors) {
      validateCheatDefinition(descriptor);
      if (byId.has(descriptor.id))
        throw new Error(`Duplicate cheat descriptor id "${descriptor.id}".`);
      const placement = `${descriptor.location.section}:${descriptor.location.group ?? ""}:${descriptor.location.order}`;
      if (placements.has(placement))
        throw new Error(
          `Duplicate cheat placement "${placement}" for "${placements.get(placement)}" and "${descriptor.id}".`
        );
      for (const path7 of descriptor.config ?? [])
        if (!paths.has(path7))
          throw new Error(`Cheat "${descriptor.id}" references unknown config path "${path7}".`);
      placements.set(placement, descriptor.id);
      byId.set(descriptor.id, descriptor);
    }
    const ordered = [...byId.values()].sort(
      (a, b) => SECTION_ORDER.indexOf(a.location.section) - SECTION_ORDER.indexOf(b.location.section) || a.location.order - b.location.order || (a.location.group ?? "").localeCompare(b.location.group ?? "") || a.id.localeCompare(b.id)
    );
    return Object.freeze({
      listCheats: () => [...ordered],
      getCheat: (id) => byId.get(id) ?? null,
      listCheatsForSection: (section) => ordered.filter((cheat2) => cheat2.location.section === section)
    });
  }

  // src/cheats/index.js
  var cheatCatalog = createCheatCatalog(generatedCheats);

  // src/ui/shell/renderer.js
  var mountedShells = /* @__PURE__ */ new WeakMap();
  function renderControl(control, document2, dispatchAction, cleanup) {
    let element;
    if (control.type === "heading") {
      element = document2.createElement("span");
      element.className = "gold";
    } else if (control.type === "help") {
      element = document2.createElement("span");
      element.className = "cp-shell-help";
    } else if (control.type === "link") {
      element = document2.createElement("a");
      element.className = "modal-link";
      element.href = control.href;
      element.target = "_blank";
      element.rel = "noopener noreferrer";
    } else if (control.type === "action") {
      element = document2.createElement("button");
      element.type = "button";
      element.className = "modal-button";
      const handler = () => dispatchAction?.(control.action);
      element.addEventListener("click", handler);
      cleanup.push(() => element.removeEventListener("click", handler));
    } else {
      element = document2.createElement("span");
      element.className = "modal-text";
    }
    element.textContent = control.text ?? "";
    if (control.key) element.dataset.shellControl = control.key;
    if (control.action) element.dataset.shellAction = control.action;
    return element;
  }
  function teardownSectionShell(container) {
    const state = mountedShells.get(container);
    if (!state) return false;
    state.cleanup.forEach((fn) => fn());
    state.root.remove();
    mountedShells.delete(container);
    return true;
  }
  function renderSectionShell({ section, rows, container, document: document2, dispatchAction }) {
    if (!container) throw new TypeError("Shell renderer requires a section container.");
    teardownSectionShell(container);
    const cleanup = [];
    const root = document2.createElement("div");
    root.className = "cp-section-shell";
    root.dataset.shellSection = section;
    for (const definition of rows ?? []) {
      const row = document2.createElement("div");
      row.className = `modal-content-padding cp-layout-${definition.role}`;
      row.dataset.shellKey = `${section}.${definition.key}`;
      const groups = definition.groups ?? (definition.group ? [definition.group] : []);
      if (groups.length) row.dataset.shellGroups = groups.join(" ");
      for (const control of definition.controls ?? []) {
        if (!control.text) continue;
        row.appendChild(renderControl(control, document2, dispatchAction, cleanup));
      }
      root.appendChild(row);
    }
    container.appendChild(root);
    mountedShells.set(container, { root, cleanup });
    return Object.freeze({ root, dispose: () => teardownSectionShell(container) });
  }

  // src/ui/renderers/layout-primitives.js
  var LAYOUT_CLASSES = Object.freeze({
    row: "cp-layout-row",
    cheat: "cp-layout-cheat-row",
    group: "cp-layout-group",
    heading: "cp-layout-heading",
    help: "cp-layout-help",
    spacer: "cp-layout-spacer",
    footer: "cp-layout-footer"
  });

  // src/cheats/runtime/game-context.js
  var CheatRuntimeUnavailableError = class extends Error {
    constructor(message = "Active game runtime is not ready.") {
      super(message);
      this.name = "CheatRuntimeUnavailableError";
      this.code = "CHEAT_RUNTIME_UNAVAILABLE";
    }
  };
  var CheatGamePathError = class extends Error {
    constructor(path7) {
      super(`Game path "${path7}" cannot be written because its parent is missing.`);
      this.name = "CheatGamePathError";
      this.code = "CHEAT_GAME_PATH_MISSING";
      this.path = path7;
    }
  };
  var partsOf = (path7) => Array.isArray(path7) ? path7.map(String).filter(Boolean) : String(path7 ?? "").split(".").map((part) => part.trim()).filter(Boolean);
  function readPath(root, path7) {
    let value = root;
    for (const part of partsOf(path7)) {
      if (value == null || !Object.hasOwn(value, part)) return void 0;
      value = value[part];
    }
    return value;
  }
  function createGameContext(adapter) {
    if (!adapter || typeof adapter !== "object")
      throw new TypeError("Game context requires an adapter.");
    function variables() {
      if (typeof adapter.isReady === "function" && !adapter.isReady()) {
        throw new CheatRuntimeUnavailableError();
      }
      const value = adapter.variables?.() ?? adapter.getVariables?.();
      if (!value || typeof value !== "object") throw new CheatRuntimeUnavailableError();
      return value;
    }
    return Object.freeze({
      variables,
      get(path7) {
        return readPath(variables(), path7);
      },
      set(path7, value) {
        const parts = partsOf(path7);
        if (!parts.length) throw new CheatGamePathError(path7);
        let parent = variables();
        for (const part of parts.slice(0, -1)) {
          if (!parent?.[part] || typeof parent[part] !== "object") throw new CheatGamePathError(path7);
          parent = parent[part];
        }
        parent[parts.at(-1)] = value;
        return value;
      },
      has(path7) {
        return readPath(variables(), path7) !== void 0;
      },
      setup(path7) {
        const setup = adapter.setup?.() ?? adapter.getSetup?.();
        if (!setup || typeof setup !== "object")
          throw new CheatRuntimeUnavailableError("Game setup is not ready.");
        return path7 == null || path7 === "" ? setup : readPath(setup, path7);
      },
      passage() {
        return adapter.passage?.() ?? adapter.getCurrentPassage?.() ?? null;
      }
    });
  }

  // src/cheats/runtime/context.js
  function createNarrowConfig(descriptor, provider) {
    const declared = new Set(descriptor.config ?? []);
    const requirePath = (path7) => {
      if (!declared.has(path7))
        throw new Error(`Cheat "${descriptor.id}" did not declare config path "${path7}".`);
    };
    return Object.freeze({
      get(path7) {
        requirePath(path7);
        return provider.get(path7);
      },
      set(path7, value) {
        requirePath(path7);
        return provider.set(path7, value);
      },
      has(path7) {
        requirePath(path7);
        return provider.has(path7);
      },
      scope(path7) {
        requirePath(path7);
        return provider.scope(path7);
      }
    });
  }
  function createCheatCallbackContext({
    descriptor,
    adapter,
    config,
    controls,
    signal,
    reason,
    event = null,
    feedback,
    services = {}
  }) {
    if (!descriptor?.id) throw new TypeError("Callback context requires a descriptor.");
    if (!signal) throw new TypeError("Callback context requires an operation signal.");
    const allowedServices = Object.freeze({
      scheduler: services.scheduler,
      logger: services.logger,
      diagnostics: services.diagnostics
    });
    return Object.freeze({
      cheat: descriptor,
      game: createGameContext(adapter),
      config: createNarrowConfig(descriptor, config),
      controls,
      event,
      signal,
      reason,
      feedback,
      services: allowedServices
    });
  }

  // src/cheats/runtime/control-scope.js
  function createControlScope({ descriptor, root }) {
    if (!descriptor?.id) throw new TypeError("Control scope requires a descriptor.");
    if (!root?.querySelectorAll) throw new TypeError("Control scope requires a mounted root.");
    const definitions = new Map(
      (descriptor.meta?.controls ?? []).map((control) => [control.key, control])
    );
    const elements = /* @__PURE__ */ new Map();
    for (const element2 of root.querySelectorAll("[data-cheat-control]")) {
      const key = element2.dataset.cheatControl;
      if (definitions.has(key)) elements.set(key, element2);
    }
    function element(key) {
      const found = elements.get(key);
      if (!found) throw new Error(`Cheat "${descriptor.id}" has no mounted control "${key}".`);
      return found;
    }
    function syncPresentation(target) {
      if (target.dataset.toggleButton === "true") {
        const active = target.getAttribute("aria-pressed") === "true";
        target.classList.toggle("cp-toggle-active", active);
        return;
      }
      if (target.type !== "checkbox") return;
      const wrapper = target.closest(".modal-toggle");
      wrapper?.classList.toggle("cp-toggle-active", Boolean(target.checked));
    }
    const value = (key) => {
      const target = element(key);
      return target.dataset.toggleButton === "true" ? target.getAttribute("aria-pressed") === "true" : target.type === "checkbox" ? Boolean(target.checked) : "value" in target ? target.value : target.textContent;
    };
    return Object.freeze({
      element,
      value,
      number: (key) => Number(value(key)),
      checked: (key) => {
        const target = element(key);
        return target.dataset.toggleButton === "true" ? target.getAttribute("aria-pressed") === "true" : Boolean(target.checked);
      },
      setValue(key, next) {
        const target = element(key);
        if (target.dataset.toggleButton === "true")
          target.setAttribute("aria-pressed", String(Boolean(next)));
        else if (target.type === "checkbox") target.checked = Boolean(next);
        else if ("value" in target) target.value = next == null ? "" : String(next);
        else target.textContent = next == null ? "" : String(next);
        syncPresentation(target);
      },
      text(key, next) {
        element(key).textContent = next == null ? "" : String(next);
      },
      options(key, options6 = []) {
        const target = element(key);
        if (target.tagName !== "SELECT") throw new Error(`Cheat control "${key}" is not a select.`);
        const selected = target.value;
        target.replaceChildren(
          ...options6.map((option) => {
            const node = target.ownerDocument.createElement("option");
            const normalized = option && typeof option === "object" ? option : { value: option, label: option };
            node.value = String(normalized.value ?? "");
            node.textContent = String(normalized.label ?? normalized.value ?? "");
            return node;
          })
        );
        if ([...target.options].some(({ value: value2 }) => value2 === selected)) target.value = selected;
        return Object.freeze({
          previousValue: selected,
          value: target.value,
          selectionChanged: Boolean(selected) && target.value !== selected
        });
      },
      setEnabled(key, enabled, reason = "") {
        const target = element(key);
        target.disabled = !enabled;
        const wrapper = target.closest(".modal-toggle");
        if (wrapper) wrapper.setAttribute("aria-disabled", String(!enabled));
        if (reason) target.dataset.disabledReason = reason;
        else delete target.dataset.disabledReason;
      }
    });
  }

  // src/cheats/runtime/action-outcome.js
  function normalizeCheatActionOutcome(value) {
    if (value === false) return Object.freeze({ ok: false, kind: "validation" });
    if (value === true || value == null) return Object.freeze({ ok: true, kind: "success" });
    if (typeof value === "object") {
      const ok = value.ok !== false;
      return Object.freeze({ kind: ok ? "success" : "validation", ...value, ok });
    }
    return Object.freeze({ ok: true, kind: "success", value });
  }
  function normalizeCheatActionError(error) {
    const blocked = error instanceof CheatRuntimeUnavailableError;
    return Object.freeze({
      ok: false,
      kind: blocked ? "blocked" : "error",
      variant: blocked ? "warning" : "error",
      message: error?.message ?? String(error),
      error
    });
  }

  // src/cheats/runtime/renderer.js
  var EVENT_BY_TYPE = Object.freeze({
    button: "click",
    toggle: "change",
    select: "change",
    range: "input",
    input: "input"
  });
  function createControl(document2, definition) {
    const confirmationToggle = definition.type === "toggle" && definition.intent === "confirmation";
    const tag = definition.type === "button" || definition.type === "toggle" && !confirmationToggle ? "button" : definition.type === "select" ? "select" : definition.type === "text" ? "span" : "input";
    const element = document2.createElement(tag);
    element.dataset.cheatControl = definition.key;
    element.classList.add("cp-cheat-control", `cp-cheat-control--${definition.type}`);
    if (definition.type !== "text")
      element.setAttribute("aria-label", definition.label ?? definition.key);
    if (definition.tooltip) element.title = definition.tooltip;
    if (definition.type === "button" || definition.type === "toggle" && !confirmationToggle) {
      element.type = "button";
      element.textContent = definition.label ?? "";
      element.classList.add("modal-button");
    }
    if (definition.type === "toggle" && !confirmationToggle) {
      element.dataset.toggleButton = "true";
      element.setAttribute("aria-pressed", "false");
      Object.defineProperty(element, "checked", {
        configurable: true,
        get: () => element.getAttribute("aria-pressed") === "true",
        set: (next) => {
          element.setAttribute("aria-pressed", String(Boolean(next)));
        }
      });
    }
    if (confirmationToggle) {
      element.type = "checkbox";
      const wrapper = document2.createElement("label");
      wrapper.className = "modal-toggle cp-cheat-toggle";
      const label = document2.createElement("span");
      label.className = "toggle-label";
      label.textContent = definition.label ?? definition.key;
      wrapper.append(element, label);
      return wrapper;
    }
    if (definition.type === "range") {
      element.type = "range";
      element.classList.add("cp-cheat-range");
    }
    if (definition.type === "input") {
      element.type = "text";
      element.classList.add("modal-content-width");
      element.autocomplete = "off";
    }
    if (definition.type === "select") element.classList.add("cp-cheat-select");
    if (definition.type === "text") {
      element.textContent = definition.label ?? "";
      element.classList.add("modal-text");
      if (definition.intent === "status") element.classList.add("cp-status-chip");
    }
    return element;
  }
  function createTooltip(document2, message, className = "") {
    const tooltip = document2.createElement("span");
    tooltip.className = `tooltip-small linkBlue ${className}`.trim();
    tooltip.tabIndex = 0;
    tooltip.setAttribute("aria-label", message);
    tooltip.textContent = "(?)";
    const content = document2.createElement("span");
    content.textContent = message;
    tooltip.appendChild(content);
    return tooltip;
  }
  function createControlUnit(document2, definition) {
    const unit = document2.createElement("span");
    unit.className = "cp-cheat-control-unit";
    if (definition.intent === "confirmation") unit.classList.add("cp-confirmation-control");
    if (definition.intent === "status") unit.classList.add("cp-status-control");
    unit.appendChild(createControl(document2, definition));
    if (definition.tooltip)
      unit.appendChild(createTooltip(document2, definition.tooltip, "cp-cheat-tooltip"));
    return unit;
  }
  function setControlNotice(control, message = "", kind = "info") {
    const unit = control.closest(".cp-cheat-control-unit");
    if (!unit) return;
    let notice = unit.querySelector(".cp-control-notice");
    if (!message) {
      notice?.remove();
      return;
    }
    if (!notice) {
      notice = control.ownerDocument.createElement("small");
      notice.className = "cp-control-notice";
      notice.setAttribute("aria-live", "polite");
      unit.appendChild(notice);
    }
    notice.dataset.noticeKind = kind;
    notice.textContent = message;
  }
  function coerceBindingValue(value, type = "string") {
    if (type === "number") return Number(value);
    if (type === "integer") return Number.parseInt(value, 10);
    if (type === "boolean") return Boolean(value);
    return String(value ?? "");
  }
  async function mountCheatDescriptor({
    descriptor,
    document: document2,
    parent = document2.body,
    adapter,
    config,
    feedback = {},
    services = {},
    confirm = null
  }) {
    if (!descriptor?.id) throw new TypeError("Descriptor renderer requires a cheat descriptor.");
    const root = document2.createElement("section");
    root.dataset.cheatId = descriptor.id;
    root.className = `modal-content-padding cp-cheat-descriptor ${LAYOUT_CLASSES.row} ${LAYOUT_CLASSES.cheat}`;
    const label = document2.createElement("span");
    label.className = "modal-text cp-cheat-label";
    label.textContent = descriptor.meta.label;
    const availabilityTooltip = createTooltip(document2, "", "cp-availability-tooltip");
    availabilityTooltip.hidden = true;
    availabilityTooltip.style.display = "none";
    label.appendChild(availabilityTooltip);
    const controlsRegion = document2.createElement("span");
    controlsRegion.className = "cp-cheat-controls";
    const availabilityStatus = document2.createElement("small");
    availabilityStatus.className = "cp-cheat-status";
    availabilityStatus.setAttribute("role", "status");
    availabilityStatus.hidden = true;
    root.append(label, controlsRegion, availabilityStatus);
    for (const definition of descriptor.meta.controls)
      controlsRegion.appendChild(createControlUnit(document2, definition));
    parent.appendChild(root);
    const controls = createControlScope({ descriptor, root });
    const controller = new AbortController();
    const listeners = [];
    const cleanups = [];
    const pending = /* @__PURE__ */ new Map();
    const editedControls = /* @__PURE__ */ new Set();
    let queuedRefresh = null;
    let disposed = false;
    let applicable = true;
    let unavailableReason = "";
    let lifecycleActive = false;
    let enabledCleanup = null;
    let toggleCleanup = null;
    for (const definition of descriptor.meta.controls) {
      if (definition.type === "select" && Array.isArray(definition.options))
        controls.options(definition.key, definition.options);
      if (definition.value !== void 0) controls.setValue(definition.key, definition.value);
    }
    const context = (reason, event = null) => createCheatCallbackContext({
      descriptor,
      adapter,
      config,
      controls,
      signal: controller.signal,
      reason,
      event,
      feedback,
      services
    });
    const notify = (outcome) => {
      if (!outcome.message) return;
      const variant = outcome.variant ?? (outcome.ok ? "success" : outcome.kind === "blocked" ? "warning" : "error");
      feedback[variant]?.(outcome.message);
    };
    const reportSyncFailure = (reason, error) => {
      services.logger?.error?.("Cheat sync failed.", {
        cheatId: descriptor.id,
        trigger: reason,
        errorType: error instanceof Error ? error.name : "UnknownError"
      });
    };
    const isVisible = () => !root.hidden && root.getAttribute("aria-hidden") !== "true" && root.style.display !== "none";
    const assessAvailability = (reason) => {
      try {
        const callbackContext = context(reason);
        const missingPath = (descriptor.requiredPaths ?? []).find(
          (path7) => !callbackContext.game.has(path7)
        );
        if (missingPath)
          return {
            applicable: false,
            reason: `Required game path "${missingPath}" is unavailable.`
          };
        if (descriptor.isApplicable && !descriptor.isApplicable(callbackContext))
          return {
            applicable: false,
            reason: "Cheat is not applicable in the current game state."
          };
        return { applicable: true, reason: "" };
      } catch (error) {
        return { applicable: false, reason: error?.message ?? "Cheat availability check failed." };
      }
    };
    const renderAvailability = (next) => {
      applicable = next.applicable;
      unavailableReason = next.reason;
      root.classList.toggle("cp-cheat-unavailable", !applicable);
      availabilityStatus.hidden = true;
      availabilityStatus.textContent = applicable ? "" : unavailableReason;
      availabilityTooltip.hidden = applicable;
      availabilityTooltip.style.display = applicable ? "none" : "";
      availabilityTooltip.setAttribute("aria-label", applicable ? "" : unavailableReason);
      availabilityTooltip.querySelector("span").textContent = applicable ? "" : unavailableReason;
      for (const definition of descriptor.meta.controls)
        controls.setEnabled(definition.key, applicable);
    };
    async function activateLifecycle(reason) {
      if (lifecycleActive || !applicable) return;
      lifecycleActive = true;
      enabledCleanup = await descriptor.onEnable?.(context(reason));
      toggleCleanup = await services.toggle?.attach?.(descriptor, context(reason));
    }
    async function deactivateLifecycle(reason) {
      if (!lifecycleActive) return;
      lifecycleActive = false;
      await descriptor.onDisable?.(context(reason));
      if (typeof toggleCleanup === "function") await toggleCleanup();
      if (typeof enabledCleanup === "function") await enabledCleanup();
      toggleCleanup = null;
      enabledCleanup = null;
    }
    async function refreshAvailability(reason) {
      const next = assessAvailability(reason);
      const changed = next.applicable !== applicable || next.reason !== unavailableReason;
      if (!changed) return applicable;
      if (!next.applicable) await deactivateLifecycle(reason);
      renderAvailability(next);
      if (next.applicable) await activateLifecycle(reason);
      return applicable;
    }
    const sync = async (reason = "manual", event = null) => {
      if (disposed) return false;
      if (reason !== "manual" && reason !== "mount" && !isVisible()) return false;
      await refreshAvailability(reason);
      if (!applicable) return false;
      const callbackContext = context(reason, event);
      try {
        for (const definition of descriptor.meta.controls) {
          if (definition.type === "select" && typeof definition.options === "function") {
            let options6;
            let optionError = false;
            try {
              options6 = await definition.options(callbackContext);
            } catch (error) {
              options6 = [];
              optionError = true;
              reportSyncFailure(reason, error);
            }
            const actualOptions = Array.isArray(options6) ? options6 : [];
            const empty = actualOptions.length === 0;
            const result = controls.options(
              definition.key,
              !empty || !definition.fallbackOptions ? actualOptions : definition.fallbackOptions ?? []
            );
            const select = controls.element(definition.key);
            select.disabled = empty;
            select.dataset.optionState = optionError ? "unavailable" : empty ? "empty" : "ready";
            const optionMessage = optionError ? "Options are temporarily unavailable." : empty ? definition.fallbackOptions?.[0]?.label ?? "No options are currently available." : result.selectionChanged ? "The previous selection is no longer available." : "";
            setControlNotice(select);
            select.title = optionMessage || definition.tooltip || "";
            if (optionMessage) select.setAttribute("aria-description", optionMessage);
            else select.removeAttribute("aria-description");
          }
          if (!definition.binding) continue;
          const activelyEdited = editedControls.has(definition.key) || document2.activeElement === controls.element(definition.key);
          if (activelyEdited && !definition.binding.syncWhileEditing) continue;
          controls.setValue(definition.key, callbackContext.game.get(definition.binding.path));
        }
        await descriptor.sync?.(callbackContext);
        return true;
      } catch (error) {
        reportSyncFailure(reason, error);
        return false;
      }
    };
    const requestRefresh = (reason = "manual", event = null) => {
      if (queuedRefresh) return queuedRefresh;
      queuedRefresh = Promise.resolve().then(() => sync(reason, event)).finally(() => {
        queuedRefresh = null;
      });
      return queuedRefresh;
    };
    async function runAction(name, { event = null, controlKey = null } = {}) {
      if (disposed)
        return normalizeCheatActionError(new Error(`Cheat "${descriptor.id}" is disposed.`));
      if (!applicable) {
        const outcome = Object.freeze({
          ok: false,
          kind: "blocked",
          variant: "warning",
          message: unavailableReason
        });
        notify(outcome);
        return outcome;
      }
      const pendingKey = controlKey ?? name;
      if (pending.has(pendingKey)) return pending.get(pendingKey);
      const action = descriptor.actions?.[name];
      if (typeof action !== "function")
        throw new Error(`Cheat "${descriptor.id}" has no local action "${name}".`);
      if (descriptor.meta.confirmation) {
        const accepted = typeof confirm === "function" && await confirm(descriptor.meta.confirmation, descriptor);
        if (!accepted) {
          const outcome = Object.freeze({
            ok: false,
            kind: "blocked",
            variant: "warning",
            message: "Action cancelled."
          });
          notify(outcome);
          return outcome;
        }
      }
      const element = controlKey ? controls.element(controlKey) : null;
      const lockDuringAction = element?.tagName === "BUTTON";
      if (lockDuringAction) element.disabled = true;
      const operation = (async () => {
        let outcome;
        try {
          outcome = normalizeCheatActionOutcome(await action(context("action", event)));
        } catch (error) {
          outcome = normalizeCheatActionError(error);
        }
        notify(outcome);
        if (outcome.ok && (outcome.refresh || descriptor.refresh?.includes("after-action")))
          await requestRefresh("after-action", event);
        return outcome;
      })();
      pending.set(pendingKey, operation);
      try {
        return await operation;
      } finally {
        pending.delete(pendingKey);
        if (lockDuringAction && !disposed) element.disabled = false;
      }
    }
    async function runToggle(controlKey, event) {
      const enabled = controls.checked(controlKey);
      controls.setValue(controlKey, enabled);
      if (typeof services.toggle?.setEnabled !== "function") {
        const outcome = Object.freeze({
          ok: false,
          kind: "blocked",
          variant: "warning",
          message: "Toggle runtime is unavailable."
        });
        notify(outcome);
        return outcome;
      }
      try {
        return normalizeCheatActionOutcome(
          await services.toggle.setEnabled(descriptor, enabled, context("action", event))
        );
      } catch (error) {
        const outcome = normalizeCheatActionError(error);
        notify(outcome);
        return outcome;
      }
    }
    for (const definition of descriptor.meta.controls) {
      if (definition.binding) {
        const element2 = controls.element(definition.key);
        const markEdited = () => editedControls.add(definition.key);
        const clearEdited = () => editedControls.delete(definition.key);
        element2.addEventListener("input", markEdited);
        element2.addEventListener("blur", clearEdited);
        listeners.push(() => element2.removeEventListener("input", markEdited));
        listeners.push(() => element2.removeEventListener("blur", clearEdited));
        if (definition.binding.writeOn) {
          const write = () => {
            const value = coerceBindingValue(
              controls.value(definition.key),
              definition.binding.coerce
            );
            context("action").game.set(definition.binding.path, value);
          };
          element2.addEventListener(definition.binding.writeOn, write);
          listeners.push(() => element2.removeEventListener(definition.binding.writeOn, write));
        }
      }
      if (definition.type === "toggle" && definition.action === "toggle") {
        const element2 = controls.element(definition.key);
        const listener2 = (event) => {
          if (element2.dataset.toggleButton === "true")
            controls.setValue(definition.key, !controls.checked(definition.key));
          void runToggle(definition.key, event);
        };
        element2.addEventListener("click", listener2);
        listeners.push(() => element2.removeEventListener("click", listener2));
        const legacyChangeListener = (event) => void runToggle(definition.key, event);
        element2.addEventListener("change", legacyChangeListener);
        listeners.push(() => element2.removeEventListener("change", legacyChangeListener));
        continue;
      }
      if (!definition.action) continue;
      if (typeof descriptor.actions?.[definition.action] !== "function")
        throw new Error(
          `Cheat "${descriptor.id}" control "${definition.key}" references missing local action "${definition.action}".`
        );
      const element = controls.element(definition.key);
      const eventName = definition.event ?? EVENT_BY_TYPE[definition.type] ?? "click";
      const listener = (event) => void runAction(definition.action, { event, controlKey: definition.key });
      element.addEventListener(eventName, listener);
      listeners.push(() => element.removeEventListener(eventName, listener));
    }
    renderAvailability(assessAvailability("mount"));
    await activateLifecycle("mount");
    if (applicable && descriptor.refresh?.includes("mount")) await requestRefresh("mount");
    return Object.freeze({
      descriptor,
      root,
      controls,
      signal: controller.signal,
      get applicable() {
        return applicable;
      },
      runAction,
      sync,
      requestRefresh,
      sectionOpened(event = null) {
        if (!descriptor.refresh?.includes("section-open")) return Promise.resolve(false);
        return requestRefresh("section-open", event);
      },
      runtimeTick(event = null) {
        if (!descriptor.refresh?.includes("runtime-tick")) return Promise.resolve(false);
        return requestRefresh("runtime-tick", event);
      },
      async waitForIdle() {
        await Promise.all([...pending.values()]);
      },
      async dispose() {
        if (disposed) return false;
        await deactivateLifecycle("dispose");
        const disposeCleanup = await descriptor.dispose?.(context("dispose"));
        if (typeof disposeCleanup === "function") cleanups.push(disposeCleanup);
        controller.abort(new DOMException("descriptor disposed", "AbortError"));
        listeners.splice(0).reverse().forEach((cleanup) => cleanup());
        cleanups.splice(0).reverse().forEach((cleanup) => cleanup());
        root.remove();
        disposed = true;
        return true;
      }
    });
  }

  // src/cheats/runtime/builder.js
  function createCheatRuntimeBuilder({
    catalog,
    adapter,
    config,
    document: document2,
    dispatchShellAction,
    feedback = {},
    services = {},
    logger = console
  }) {
    if (!catalog?.listCheats) throw new TypeError("Cheat builder requires a catalog.");
    if (!adapter) throw new TypeError("Cheat builder requires the active runtime adapter.");
    const descriptors = Object.freeze(catalog.listCheats());
    const bySection = new Map(
      ["quick", "stats", "misc"].map((section) => [
        section,
        descriptors.filter((descriptor) => descriptor.location.section === section)
      ])
    );
    const mounted = /* @__PURE__ */ new Map();
    const failed = /* @__PURE__ */ new Map();
    const sectionTimers = /* @__PURE__ */ new Map();
    const sectionContainers = /* @__PURE__ */ new Map();
    let compiled = false;
    function compile() {
      if (compiled) return false;
      compiled = true;
      return true;
    }
    async function disposeSection(section) {
      const timer = sectionTimers.get(section);
      if (timer != null) {
        document2.defaultView.clearInterval(timer);
        sectionTimers.delete(section);
      }
      const ids = new Set((bySection.get(section) ?? []).map(({ id }) => id));
      for (const [id, instance] of [...mounted]) {
        if (!ids.has(id)) continue;
        await instance.dispose();
        mounted.delete(id);
      }
    }
    function placeDescriptor(root, descriptor, shellRoot, groupTails, fallbackTail) {
      const group = descriptor.location.group;
      const tail = groupTails.get(group);
      if (tail) {
        tail.node.after(root);
        tail.node = root;
        return fallbackTail;
      }
      const footer = shellRoot.querySelector(".cp-layout-footer");
      if (fallbackTail) fallbackTail.after(root);
      else if (footer) footer.before(root);
      else shellRoot.appendChild(root);
      return root;
    }
    async function mountSection(section, container, shellRows = []) {
      if (!compiled) compile();
      await disposeSection(section);
      teardownSectionShell(container);
      const sectionDescriptors = bySection.get(section) ?? [];
      const shell = renderSectionShell({
        section,
        rows: shellRows,
        container,
        document: document2,
        dispatchAction: dispatchShellAction
      });
      sectionContainers.set(section, container);
      const groupTails = /* @__PURE__ */ new Map();
      for (const row of shell.root.querySelectorAll("[data-shell-groups]")) {
        const sharedTail = { node: row };
        for (const group of row.dataset.shellGroups.split(/\s+/).filter(Boolean)) {
          groupTails.set(group, sharedTail);
        }
      }
      let fallbackTail = null;
      for (const descriptor of sectionDescriptors) {
        try {
          const instance = await mountCheatDescriptor({
            descriptor,
            document: document2,
            parent: shell.root,
            adapter,
            config,
            feedback,
            services
          });
          fallbackTail = placeDescriptor(
            instance.root,
            descriptor,
            shell.root,
            groupTails,
            fallbackTail
          );
          mounted.set(descriptor.id, instance);
          failed.delete(descriptor.id);
        } catch (error) {
          failed.set(descriptor.id, error?.name ?? "Error");
          logger?.error?.("Cheat descriptor mount failed.", {
            cheatId: descriptor.id,
            errorType: error?.name ?? "Error"
          });
        }
      }
      if (sectionDescriptors.some(({ refresh }) => refresh?.includes("runtime-tick"))) {
        sectionTimers.set(
          section,
          document2.defaultView.setInterval(() => {
            for (const descriptor of sectionDescriptors) {
              void mounted.get(descriptor.id)?.runtimeTick();
            }
          }, 400)
        );
      }
      return health();
    }
    async function sectionOpened(section) {
      await Promise.all(
        (bySection.get(section) ?? []).map(({ id }) => mounted.get(id)).filter(Boolean).map((instance) => instance.sectionOpened())
      );
    }
    async function teardown() {
      for (const timer of sectionTimers.values()) document2.defaultView.clearInterval(timer);
      sectionTimers.clear();
      const instances = [...mounted.values()];
      mounted.clear();
      await Promise.all(instances.map((instance) => instance.dispose()));
      for (const container of sectionContainers.values()) teardownSectionShell(container);
      sectionContainers.clear();
      return instances.length > 0;
    }
    function health() {
      const instances = [...mounted.values()];
      const applicable = instances.filter(({ applicable: applicable2 }) => applicable2).length;
      return Object.freeze({
        total: descriptors.length,
        applicable,
        mounted: instances.length,
        disabled: instances.length - applicable,
        failed: failed.size
      });
    }
    return Object.freeze({
      compile,
      mountSection,
      sectionOpened,
      teardown,
      health,
      listCompiled: () => [...descriptors],
      getMounted: (id) => mounted.get(id) ?? null
    });
  }

  // src/cheats/runtime/config-provider.js
  function createAdapterCheatConfigProvider(adapter) {
    const schema = new Map(CHEAT_CONFIG_SCHEMA.map((entry2) => [entry2.path, entry2]));
    const config = () => adapter.getVariables?.()?.cheatPlus ?? adapter.variables?.()?.cheatPlus;
    const definition = (path7) => {
      const found = schema.get(path7);
      if (!found) throw new Error(`Unknown CheatPlus config path "${path7}".`);
      return found;
    };
    return Object.freeze({
      get(path7) {
        definition(path7);
        return config()?.[path7];
      },
      set(path7, value) {
        const entry2 = definition(path7);
        if (!isCheatConfigValueValid(entry2, value))
          throw new TypeError(`Invalid value for CheatPlus config path "${path7}".`);
        const target = config();
        if (!target) throw new Error("CheatPlus config is unavailable.");
        target[path7] = value;
        return value;
      },
      has(path7) {
        definition(path7);
        return Object.hasOwn(config() ?? {}, path7);
      },
      scope(path7) {
        return definition(path7).scope;
      }
    });
  }

  // src/cheats/runtime/toggle-store.js
  function createSugarCubeToggleStore() {
    return Object.freeze({
      read(id) {
        return Boolean(getToggles()?.[id]);
      },
      has(id) {
        return Object.hasOwn(getToggles() ?? {}, id);
      },
      write(id, enabled) {
        if (enabled) activateToggle(id);
        else deactivateToggle(id);
        return Boolean(enabled);
      },
      remove(id) {
        const existed = Object.hasOwn(getToggles() ?? {}, id);
        deactivateToggle(id);
        return existed;
      },
      snapshot() {
        return { ...getToggles() ?? {} };
      }
    });
  }

  // src/cheats/runtime/toggle-runtime.js
  function toggleControlKey(descriptor) {
    return descriptor.meta.controls.find(
      ({ type, action }) => type === "toggle" || action === "toggle"
    )?.key;
  }
  function effectContext(base, reason) {
    return Object.freeze({ ...base, event: null, reason });
  }
  function createProductionSchedulerAdapter(scheduler = ToggleScheduler) {
    return Object.freeze({
      register(id, effect, options6) {
        scheduler.register(id, effect, {
          daily: options6.cadence === "daily",
          cooldownMs: options6.cooldownMs,
          maxFailures: options6.maxFailures,
          onFailureThreshold: options6.onFailureThreshold
        });
      },
      unregister(id, options6 = {}) {
        scheduler.unregister(id, { daily: options6.cadence === "daily" });
      },
      has(id, options6 = {}) {
        return scheduler.has(id, { daily: options6.cadence === "daily" });
      },
      list() {
        return scheduler.list();
      }
    });
  }
  function createCheatToggleRuntime({ scheduler, store: store2, logger = console } = {}) {
    if (!scheduler?.register || !scheduler?.unregister || !scheduler?.has)
      throw new TypeError("Cheat toggle runtime requires a scheduler adapter.");
    if (!store2?.read || !store2?.write || !store2?.remove)
      throw new TypeError("Cheat toggle runtime requires a toggle store.");
    const attached = /* @__PURE__ */ new Map();
    function render(entry2, enabled) {
      const key = toggleControlKey(entry2.descriptor);
      if (key) entry2.context.controls.setValue(key, enabled);
    }
    async function execute(entry2, reason) {
      return entry2.descriptor.effect(effectContext(entry2.context, reason));
    }
    function quarantine(entry2, details) {
      entry2.enabled = false;
      render(entry2, false);
      store2.remove(entry2.descriptor.id);
      logger?.error?.("Cheat toggle quarantined.", {
        cheatId: entry2.descriptor.id,
        failures: details.failures
      });
    }
    async function setEntryEnabled(entry2, enabled, { restore: restore2 = false } = {}) {
      const desired = Boolean(enabled);
      const registered = scheduler.has(entry2.descriptor.id, entry2.descriptor.toggle);
      if (desired === entry2.enabled && (!desired || registered)) return desired;
      entry2.enabled = desired;
      render(entry2, desired);
      if (!desired) {
        scheduler.unregister(entry2.descriptor.id, entry2.descriptor.toggle);
        if (!restore2) store2.remove(entry2.descriptor.id);
        return false;
      }
      scheduler.register(
        entry2.descriptor.id,
        ({ reason } = {}) => execute(entry2, reason ?? entry2.descriptor.toggle.cadence),
        {
          ...entry2.descriptor.toggle,
          onFailureThreshold: (details) => quarantine(entry2, details)
        }
      );
      if (!restore2) store2.write(entry2.descriptor.id, true);
      if (entry2.descriptor.toggle.runOnActivate !== false) {
        await execute(entry2, restore2 ? "restore" : entry2.descriptor.toggle.cadence);
      }
      return true;
    }
    async function attach(descriptor, context) {
      if (!descriptor.toggle) return null;
      let entry2 = attached.get(descriptor.id);
      if (entry2) {
        entry2.context = context;
        render(entry2, entry2.enabled);
        return () => detach(descriptor);
      }
      entry2 = { descriptor, context, enabled: false };
      attached.set(descriptor.id, entry2);
      if (store2.read(descriptor.id)) await setEntryEnabled(entry2, true, { restore: true });
      else render(entry2, false);
      return () => detach(descriptor);
    }
    async function setEnabled(descriptor, enabled, context) {
      let entry2 = attached.get(descriptor.id);
      if (!entry2) {
        entry2 = { descriptor, context, enabled: false };
        attached.set(descriptor.id, entry2);
      } else entry2.context = context;
      return setEntryEnabled(entry2, enabled);
    }
    function detach(descriptor, { preserveIntent = true } = {}) {
      const entry2 = attached.get(descriptor.id);
      if (!entry2) return false;
      scheduler.unregister(descriptor.id, descriptor.toggle);
      if (!preserveIntent) store2.remove(descriptor.id);
      attached.delete(descriptor.id);
      return true;
    }
    async function restore() {
      for (const entry2 of attached.values()) {
        entry2.enabled = false;
        if (store2.read(entry2.descriptor.id)) {
          await setEntryEnabled(entry2, true, { restore: true });
        } else render(entry2, false);
      }
    }
    return Object.freeze({
      attach,
      detach,
      setEnabled,
      restore,
      isEnabled(id) {
        return attached.get(id)?.enabled ?? false;
      },
      listAttached() {
        return [...attached.keys()];
      }
    });
  }
  function createProductionCheatToggleRuntime(options6 = {}) {
    return createCheatToggleRuntime({
      scheduler: options6.scheduler ?? createProductionSchedulerAdapter(),
      store: options6.store ?? createSugarCubeToggleStore(),
      logger: options6.logger
    });
  }

  // src/ui/shell/definitions.js
  function compatibilityText(runtime) {
    return runtime.testedOn && runtime.testedOn !== "0.0.0" ? `Tested on: ${runtime.testedOn}` : "Tested on: Untested";
  }
  function quickShell({ data, runtime }) {
    const rows = [
      {
        key: "compatibility",
        role: "help",
        controls: [
          { type: "text", text: compatibilityText(runtime) },
          { type: "text", text: runtime.curVer ? `Current version: ${runtime.curVer}` : "" },
          ...runtime.isCheatWorkSymbol ? [{ type: "text", text: runtime.isCheatWorkSymbol }] : [],
          { type: "help", text: runtime.testedOn && runtime.testedOn !== "0.0.0" ? runtime.isCheatWork || "Compatibility information" : "Not tested in the current game version" }
        ]
      },
      { key: "quick-heading", role: "heading", groups: ["state"], controls: [{ type: "heading", text: "Quick cheats" }] },
      { key: "unlimited-heading", role: "heading", groups: ["tasks", "unlimited", "pregnancy"], controls: [{ type: "heading", text: "Unlimited Toggles" }] }
    ];
    if (runtime.isServer === 1) {
      rows.push({ key: "server-heading", role: "heading", group: "server", controls: [{ type: "heading", text: "Server" }] });
      if (runtime.curVer !== runtime.testedOn) {
        rows.push({ key: "server-version-warning", role: "help", group: "server", controls: [
          { type: "text", text: "Caution: game version is different." },
          { type: "help", text: "Older or modded versions can be incompatible." }
        ] });
      }
      rows.push({ key: "server-save-actions", role: "application", group: "server", controls: [
        { type: "text", text: "Server Save" },
        { type: "action", key: "export", text: "Export", action: "save_data" },
        { type: "action", key: "import", text: "Import", action: "load_data" },
        { type: "help", text: "Export or import save slots 1\u201310 through the local server." }
      ] });
    }
    rows.push({ key: "footer", role: "footer", controls: [
      { type: "text", text: `Cheat version: ${runtime.cheatVer}${runtime.cheatVerType ? ` ${runtime.cheatVerType}` : ""}` },
      { type: "link", key: "update", text: "Check for update", href: data.downloadSite },
      { type: "link", key: "source", text: "Source Code", href: data.sourceCode }
    ] });
    return rows;
  }
  var statHeadings = [
    ["stats-heading", "stats", "Stats"],
    ["enemy-heading", "enemy", "Enemy stats"],
    ["player-heading", "player", "Player"],
    ["characteristics-heading", "characteristics", "Characteristics"],
    ["fame-heading", "fame", "Fame"],
    ["school-heading", "school", "School"],
    ["talent-heading", "talent", "Talent"]
  ];
  function statShell() {
    return statHeadings.map(([key, group, text2]) => ({ key, groups: [group], role: "heading", controls: [{ type: "heading", text: text2 }] }));
  }
  function miscShell() {
    return [
      { key: "npc-heading", groups: ["npc", "world"], role: "heading", controls: [{ type: "heading", text: "NPC" }] },
      { key: "pregnancy-heading", role: "heading", controls: [{ type: "heading", text: "Pregnancy Manager" }] },
      { key: "pregnancy-time-help", groups: ["pregnancy", "offspring", "pregnancy-removal"], role: "help", controls: [
        { type: "heading", text: "Pregnancy time" },
        { type: "help", text: "Values are measured in days." }
      ] }
    ];
  }
  function createSectionShells(context) {
    return Object.freeze({ quick: Object.freeze(quickShell(context)), stats: Object.freeze(statShell()), misc: Object.freeze(miscShell()) });
  }

  // src/core/safe-exec.js
  function safeCall(label, fn, { onError = null } = {}) {
    try {
      return fn();
    } catch (err) {
      if (typeof onError === "function") {
        onError(err);
      } else {
        console.warn(`[CheatPlus] ${label}`, err);
      }
      return void 0;
    }
  }

  // src/diagnostics/probe.js
  var SCOPES = /* @__PURE__ */ new Set(["catalog", "runtime", "aliases", "scheduler", "config"]);
  function createDiagnosticProbe(definition) {
    if (!definition || typeof definition !== "object" || Array.isArray(definition))
      throw new TypeError("Diagnostic probe must be an object.");
    const allowed = /* @__PURE__ */ new Set(["id", "label", "scope", "applicable", "run", "timeoutMs"]);
    for (const key of Object.keys(definition))
      if (!allowed.has(key)) throw new Error(`Unknown diagnostic probe field "${key}".`);
    if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)+$/.test(definition.id ?? ""))
      throw new Error("Diagnostic probe requires a stable lowercase namespaced id.");
    if (typeof definition.label !== "string" || !definition.label.trim())
      throw new TypeError(`Diagnostic probe "${definition.id}" requires a label.`);
    if (!SCOPES.has(definition.scope))
      throw new Error(`Diagnostic probe "${definition.id}" has an invalid scope.`);
    if (definition.applicable != null && typeof definition.applicable !== "function")
      throw new TypeError(`Diagnostic probe "${definition.id}" applicable must be a function.`);
    if (typeof definition.run !== "function")
      throw new TypeError(`Diagnostic probe "${definition.id}" requires run().`);
    if (!Number.isInteger(definition.timeoutMs) || definition.timeoutMs < 1)
      throw new TypeError(`Diagnostic probe "${definition.id}" requires a positive timeoutMs.`);
    return Object.freeze({ ...definition });
  }

  // src/diagnostics/runner.js
  var STATUSES = /* @__PURE__ */ new Set(["pass", "warning", "fail", "blocked"]);
  function safeMessage(value, fallback = "") {
    return typeof value === "string" ? value.slice(0, 240) : fallback;
  }
  async function withTimeout(probe, context) {
    let timer;
    try {
      return await Promise.race([
        Promise.resolve().then(() => probe.run(context)),
        new Promise((resolve) => {
          timer = setTimeout(
            () => resolve({ status: "fail", message: "Probe timed out." }),
            probe.timeoutMs
          );
        })
      ]);
    } finally {
      clearTimeout(timer);
    }
  }
  function formatDiagnosticReport(report) {
    const lines = [
      `CheatPlus diagnostics: ${report.pass} pass, ${report.warning} warning, ${report.fail} fail, ${report.blocked} blocked`
    ];
    for (const result of report.results)
      lines.push(`${result.status.toUpperCase()} ${result.id}${result.message ? ` \u2014 ${result.message}` : ""}`);
    return lines.join("\n");
  }
  function createDiagnosticRunner({ probes, context = () => ({}) }) {
    if (!Array.isArray(probes)) throw new TypeError("Diagnostic runner requires probes.");
    const ids = /* @__PURE__ */ new Set();
    for (const probe of probes) {
      if (ids.has(probe.id)) throw new Error(`Duplicate diagnostic probe "${probe.id}".`);
      ids.add(probe.id);
    }
    async function runAll() {
      const results = [];
      const shared = context();
      for (const probe of probes) {
        let result;
        try {
          if (probe.applicable && !await probe.applicable(shared)) {
            result = { status: "blocked", message: "Not applicable." };
          } else result = await withTimeout(probe, shared);
        } catch (_) {
          result = { status: "fail", message: "Probe failed." };
        }
        const status = STATUSES.has(result?.status) ? result.status : "fail";
        results.push(
          Object.freeze({
            id: probe.id,
            label: probe.label,
            scope: probe.scope,
            status,
            message: safeMessage(result?.message, status === "fail" ? "Invalid probe result." : "")
          })
        );
      }
      const counts = Object.fromEntries([...STATUSES].map((status) => [status, results.filter((r) => r.status === status).length]));
      return Object.freeze({ total: results.length, ...counts, results: Object.freeze(results) });
    }
    return Object.freeze({ runAll, formatReport: formatDiagnosticReport, list: () => [...probes] });
  }

  // src/diagnostics/production.js
  function createProductionDiagnostics({ catalog, adapter, getHealth, getAliases, scheduler }) {
    const descriptors = catalog.listCheats();
    const game = createGameContext(adapter);
    const probes = [
      createDiagnosticProbe({
        id: "catalog.identity",
        label: "Catalog identity",
        scope: "catalog",
        timeoutMs: 250,
        run: () => ({ status: new Set(descriptors.map(({ id }) => id)).size === descriptors.length ? "pass" : "fail", message: `${descriptors.length} descriptors.` })
      }),
      createDiagnosticProbe({
        id: "runtime.paths",
        label: "Runtime applicability",
        scope: "runtime",
        timeoutMs: 500,
        applicable: () => adapter.isReady?.() !== false,
        run: () => {
          const missing = descriptors.filter(
            ({ requiredPaths = [] }) => requiredPaths.some((path7) => !game.has(path7))
          ).length;
          return { status: missing ? "warning" : "pass", message: `${missing} descriptors have unavailable required paths.` };
        }
      }),
      createDiagnosticProbe({
        id: "builder.health",
        label: "Builder health",
        scope: "runtime",
        timeoutMs: 250,
        run: () => {
          const health = getHealth();
          return { status: health.failed ? "fail" : "pass", message: `${health.mounted}/${health.total} mounted; ${health.failed} failed.` };
        }
      }),
      createDiagnosticProbe({
        id: "aliases.registration",
        label: "Alias registration",
        scope: "aliases",
        timeoutMs: 250,
        run: () => {
          const aliases = getAliases();
          return { status: new Set(aliases).size === aliases.length ? "pass" : "fail", message: `${aliases.length} aliases registered.` };
        }
      }),
      createDiagnosticProbe({
        id: "scheduler.ownership",
        label: "Scheduler ownership",
        scope: "scheduler",
        timeoutMs: 250,
        run: () => ({ status: "pass", message: `${scheduler.list().length} scheduler entries.` })
      }),
      createDiagnosticProbe({
        id: "config.references",
        label: "Config references",
        scope: "config",
        timeoutMs: 250,
        run: () => {
          const paths = new Set(CHEAT_CONFIG_SCHEMA.map(({ path: path7 }) => path7));
          const invalid = descriptors.flatMap(({ config = [] }) => config).filter((path7) => !paths.has(path7));
          return { status: invalid.length ? "fail" : "pass", message: `${invalid.length} invalid config references.` };
        }
      })
    ];
    return createDiagnosticRunner({ probes });
  }

  // src/features/cheat-init.js
  function configureCheatRuntime(runtimeEngine) {
    const adapter = runtimeEngine?.adapter;
    if (!adapter) throw new TypeError("Cheat runtime configuration requires an active adapter.");
    const runtimeLogger = {
      error: (message, data) => logger_default("cheat-runtime", message, { data, level: "error" })
    };
    const scheduler = createProductionSchedulerAdapter();
    const toggle = createProductionCheatToggleRuntime({ logger: runtimeLogger, scheduler });
    let builder;
    const diagnostics = createProductionDiagnostics({
      catalog: cheatCatalog,
      adapter,
      getHealth: () => builder?.health() ?? { total: 0, mounted: 0, failed: 0 },
      getAliases: () => [],
      scheduler
    });
    builder = createCheatRuntimeBuilder({
      catalog: cheatCatalog,
      adapter,
      config: createAdapterCheatConfigProvider(adapter),
      document,
      dispatchShellAction: dispatch,
      feedback: {
        success: (message) => showToast(message, { variant: "success" }),
        error: (message) => showToast(message, { variant: "error" }),
        warning: (message) => showToast(message, { variant: "warning" }),
        info: (message) => showToast(message, { variant: "info" })
      },
      services: { toggle, scheduler, logger: runtimeLogger, diagnostics },
      logger: {
        error: (message, data) => logger_default("cheat-builder", message, { data, level: "error" })
      }
    });
    builder.compile();
    return setActiveCheatBuilder(builder);
  }
  async function init_interface() {
    safeCall("init_interface-start", () => {
      logger_default("cheat-init", "init_interface-start");
    });
    const runtimeWindow2 = getRuntimeWindow();
    const context = {
      data: {
        downloadSite,
        sourceCode
      },
      runtime: {
        testedOn: testedOn || runtimeWindow2?.testedOn,
        curVer: curVer || runtimeWindow2?.curVer,
        isCheatWorkSymbol: runtimeWindow2?.isCheatWorkSymbol,
        isCheatWork: runtimeWindow2?.isCheatWork,
        isServer: isServer || runtimeWindow2?.isServer,
        cheatVer: cheatVer || runtimeWindow2?.cheatVer,
        cheatVerType: cheatVerType || runtimeWindow2?.cheatVerType
      }
    };
    safeCall(
      "failed to clear existing sections",
      () => {
        ["quick-content", "stats-content", "misc-content"].forEach((id) => {
          const el = byUiId(id) || document.getElementById(id);
          if (el) {
            while (el.firstChild) el.removeChild(el.firstChild);
          }
        });
      },
      {
        onError: (err) => {
          logger_default("cheat-init", "failed to clear existing sections", { data: err, level: "warn" });
        }
      }
    );
    const shells = createSectionShells(context);
    const builder = getActiveCheatBuilder();
    if (builder) {
      await builder.mountSection("quick", byUiId("quick-content"), shells.quick);
      await builder.mountSection("stats", byUiId("stats-content"), shells.stats);
      await builder.mountSection("misc", byUiId("misc-content"), shells.misc);
    } else {
      for (const section of ["quick", "stats", "misc"]) {
        renderSectionShell({
          section,
          rows: shells[section],
          container: byUiId(`${section === "stats" ? "stats" : section}-content`),
          document,
          dispatchAction: dispatch
        });
      }
    }
    var element = byUiId("tmpText") || document.getElementById("tmpText");
    if (element) element.classList.add("tmpText");
    safeCall("init_interface-done", () => {
      logger_default("cheat-init", "init_interface-done");
    });
  }

  // src/core/events/registry.js
  var registryStore = [];
  function getStore3() {
    return registryStore;
  }
  function on(target, type, handler, options6) {
    target.addEventListener(type, handler, options6);
    getStore3().push({ target, type, handler, options: options6 });
  }
  function reset() {
    const store2 = getStore3();
    for (const { target, type, handler, options: options6 } of store2) {
      try {
        target.removeEventListener(type, handler, options6);
      } catch (_) {
      }
    }
    store2.length = 0;
  }

  // src/core/runtime-observer-policy.js
  function defaultDetectLoadTrigger(target) {
    return Boolean(target?.classList?.contains("macro-button") && target?.innerHTML == "SAVES");
  }
  function defaultDetectHistoryNavigation(target) {
    return Boolean(target?.id == "history-backward" || target?.id === "history-forward");
  }
  var defaultRuntimeObserverPolicy = Object.freeze({
    detectLoadTrigger: defaultDetectLoadTrigger,
    detectHistoryNavigation: defaultDetectHistoryNavigation
  });
  function createRuntimeObserverPolicy(overrides = {}) {
    return {
      ...defaultRuntimeObserverPolicy,
      ...overrides
    };
  }

  // src/features/listeners/action-map-methods.js
  var METHOD_ACTIONS = [
    { actionKey: "vow-virgin", methodName: "imvirgintemple" },
    { actionKey: "arousal_player" },
    { actionKey: "arousal_enemy" },
    { actionKey: "sheesh", methodName: "aezakmi" },
    { actionKey: "jk-lol", methodName: "imdonefor" },
    { actionKey: "hesoyam" },
    { actionKey: "kill_player" },
    { actionKey: "statset", methodName: "statmanager" },
    { actionKey: "enemycalm" },
    { actionKey: "kill_enemy" },
    { actionKey: "statsete", methodName: "statmanagere" },
    { actionKey: "sprayset", methodName: "sprayunlimited" },
    { actionKey: "bodytypeset", methodName: "bodytypemanager" },
    { actionKey: "ballsset", methodName: "ballsmanager" },
    { actionKey: "virginityset", methodName: "virginitymanager" },
    { actionKey: "virginpure", methodName: "virginitypure" },
    { actionKey: "charaset", methodName: "charamanager" },
    { actionKey: "lactatingset", methodName: "lactatingmanager" },
    { actionKey: "cumset", methodName: "cummanager" },
    { actionKey: "milkset", methodName: "milkmanager" },
    { actionKey: "cumrefil", methodName: "cumfill" },
    { actionKey: "milkrefil", methodName: "milkfill" },
    { actionKey: "changetraitbro" },
    { actionKey: "VrelCoinsUsage" },
    { actionKey: "set_fame12" },
    { actionKey: "infect" },
    { actionKey: "desinfect" },
    { actionKey: "set_animal_like" },
    { actionKey: "set_build_time" },
    { actionKey: "set_assault_time" },
    { actionKey: "set_exam", methodName: "exammanager" },
    { actionKey: "set_talent", methodName: "talentmanager" },
    { actionKey: "clean_cum" },
    { actionKey: "check_fruit_selling" },
    { actionKey: "set_school_rep" },
    { actionKey: "named_npc_pregnancy_set" },
    { actionKey: "npc_pregnancy_set" },
    { actionKey: "mc_pregnancy_set" },
    { actionKey: "mc_tentacle_set" },
    { actionKey: "mc_baby_set" },
    { actionKey: "set_hentai_skill" },
    { actionKey: "mc_abortion_set" },
    { actionKey: "named_npc_abortion_set" },
    { actionKey: "npc_abortion_set" },
    { actionKey: "dirty_cum" },
    { actionKey: "clean_cum_uretus" },
    { actionKey: "in_game_cheat" },
    { actionKey: "alt_cheat" },
    { actionKey: "randomEncounterSet" },
    { actionKey: "npc_abortion_purge", methodName: "purgeNPCPregnancy" },
    { actionKey: "purgeNPCBaby" },
    { actionKey: "testAll" }
  ];
  validateMethodEntries(METHOD_ACTIONS, "METHOD_ACTIONS");

  // src/features/listeners/action-map-ui.js
  var NAV_ACTIONS = [
    {
      actionKey: "quick-link",
      navKey: "quicklink",
      contentKey: "quickcontent",
      hydrateKey: "hydrateQuickSection"
    },
    {
      actionKey: "stats-link",
      navKey: "statlink",
      contentKey: "statscontent",
      hydrateKey: "hydrateStatsSection"
    },
    {
      actionKey: "misc-link",
      navKey: "misclink",
      contentKey: "misccontent",
      hydrateKey: "hydrateMiscSection"
    }
  ];
  var SIMPLE_UI_ACTIONS = [
    { actionKey: "cheat-open", target: "openModal" },
    { actionKey: "cheat-history-backwards", target: "cheatActions", arg: "cheat_backwards" },
    { actionKey: "cheat-history-forwards", target: "cheatActions", arg: "cheat_forwards" },
    { actionKey: "cheat-sidebar", target: "cheatActions", arg: "sidebar_cheat" },
    { actionKey: "init_interface", target: "init_interface" },
    { actionKey: "search123", target: "executeSearch", arg: "search123" },
    { actionKey: "search456", target: "executeSearch", arg: "search456" },
    { actionKey: "Enable_cheat_history", target: "Enable_cheat_history" },
    { actionKey: "Enable_sidebar_button", target: "Enable_sidebar_button" },
    { actionKey: "simple_cheat_button", target: "simple_cheat_button" }
  ];
  var BOUND_ACTIONS = [
    { actionKey: "statpick", source: "hydrateCheatUi", method: "statpick" },
    { actionKey: "statpicke", source: "hydrateCheatUi", method: "statpicke" },
    { actionKey: "charapick", source: "hydrateCheatUi", method: "characurrent" },
    { actionKey: "fame_name", source: "hydrateCheatUi", method: "famecurrent" },
    { actionKey: "select_exam", source: "hydrateCheatUi", method: "examcurrent" },
    { actionKey: "npcnames", source: "hydrateCheatUi", method: "npccurrent" },
    { actionKey: "npctraits", source: "hydrateCheatUi", method: "npccurrent" },
    { actionKey: "select_talent", source: "hydrateCheatUi", method: "talentcurrent" },
    { actionKey: "select_school_rep", source: "hydrateCheatUi", method: "update_school_rep" },
    {
      actionKey: "named_npc_pregnancy_manager",
      source: "hydrateCheatUi",
      method: "update_pregnancy_day_named_npc"
    },
    {
      actionKey: "npc_pregnancy_manager",
      source: "hydrateCheatUi",
      method: "update_pregnancy_day_npc"
    },
    { actionKey: "mc_pregnancy_hole", source: "hydratePregnancy", method: "update_pregnancy_mc" },
    {
      actionKey: "mc_pregnancy_manager",
      source: "hydrateCheatUi",
      method: "update_pregnancy_day_mc"
    },
    { actionKey: "mc_tentacle_location", source: "hydrateCheatUi", method: "update_mc_tentacle" },
    {
      actionKey: "mc_tentacle_select",
      source: "hydrateCheatUi",
      method: "update_mc_tentacle_input"
    },
    {
      actionKey: "mc_baby_action_select",
      source: "hydrateCheatUi",
      method: "update_mc_baby_info"
    },
    { actionKey: "mc_baby_select", source: "hydrateCheatUi", method: "update_mc_baby_info" },
    {
      actionKey: "mc_abortion_location",
      source: "hydrateCheatUi",
      method: "update_mc_abortion_list"
    },
    {
      actionKey: "named_npc_abortion_chara_select",
      source: "hydrateCheatUi",
      method: "update_named_npc_abortion_list"
    },
    {
      actionKey: "npc_abortion_chara_select",
      source: "hydrateCheatUi",
      method: "update_npc_fetus_abortion_list"
    },
    { actionKey: "animal_choice", source: "hydrateCheatUi", method: "update_farm_animals_like" },
    { actionKey: "arousal_val", source: "hydrateCheatUi", method: "arousalpicked" }
  ];
  validateNavEntries(NAV_ACTIONS, "NAV_ACTIONS");
  validateSimpleUiEntries(SIMPLE_UI_ACTIONS, "SIMPLE_UI_ACTIONS");
  validateBoundEntries(BOUND_ACTIONS, "BOUND_ACTIONS");

  // src/features/listeners/action-maps.js
  function registerHandler(actionKey, handler) {
    if (typeof handler === "function") register(actionKey, handler);
  }
  function registerMethodAction(actionKey, cheatActions2, methodName = actionKey) {
    registerHandler(actionKey, () => {
      const fn = cheatActions2?.[methodName];
      if (typeof fn === "function") fn(cheatActions2);
    });
  }
  function registerSimpleUiAction(entry2, context) {
    const {
      closeModal: closeModal2,
      openModal: openModal2,
      cheatActions: cheatActions2,
      executeSearch: executeSearch2,
      Enable_cheat_history: Enable_cheat_history2,
      Enable_sidebar_button: Enable_sidebar_button2,
      simple_cheat_button: simple_cheat_button2,
      init_interface: init_interface2
    } = context;
    const handlers = {
      closeModal: closeModal2,
      openModal: openModal2,
      cheatActions: () => {
        const fn = cheatActions2?.[entry2.arg];
        if (typeof fn === "function") fn(cheatActions2);
      },
      executeSearch: () => executeSearch2(entry2.arg),
      Enable_cheat_history: Enable_cheat_history2,
      Enable_sidebar_button: Enable_sidebar_button2,
      simple_cheat_button: simple_cheat_button2,
      init_interface: init_interface2
    };
    registerHandler(entry2.actionKey, handlers[entry2.target]);
  }
  function registerBoundAction(entry2, context) {
    const sourceMap = {
      hydrateCheatUi: context.hydrateCheatUi,
      hydratePregnancy: context.hydratePregnancy
    };
    const source = sourceMap[entry2.source];
    registerHandler(entry2.actionKey, source?.[entry2.method]);
  }
  function registerAllActions({
    closeModal: closeModal2,
    openModal: openModal2,
    showContent: showContent2,
    getUiRefs: getUiRefs2,
    cheatActions: cheatActions2,
    hydratePregnancy: hydratePregnancy2,
    hydrateCheatUi: hydrateCheatUi2,
    hydrateQuickSection: hydrateQuickSection2,
    hydrateStatsSection: hydrateStatsSection2,
    hydrateMiscSection: hydrateMiscSection2,
    Enable_cheat_history: Enable_cheat_history2,
    Enable_sidebar_button: Enable_sidebar_button2,
    simple_cheat_button: simple_cheat_button2,
    executeSearch: executeSearch2,
    init_interface: init_interface2
  }) {
    const context = {
      closeModal: closeModal2,
      openModal: openModal2,
      cheatActions: cheatActions2,
      executeSearch: executeSearch2,
      Enable_cheat_history: Enable_cheat_history2,
      Enable_sidebar_button: Enable_sidebar_button2,
      simple_cheat_button: simple_cheat_button2,
      init_interface: init_interface2,
      hydrateCheatUi: hydrateCheatUi2,
      hydratePregnancy: hydratePregnancy2
    };
    const showSection = (navKey, contentKey, hydrate) => {
      const uiRefs = getUiRefs2();
      showContent2(uiRefs?.[navKey], uiRefs?.[contentKey]);
      hydrate?.();
    };
    const hydrateMap = {
      hydrateQuickSection: hydrateQuickSection2,
      hydrateStatsSection: hydrateStatsSection2,
      hydrateMiscSection: hydrateMiscSection2
    };
    NAV_ACTIONS.forEach(({ actionKey, navKey, contentKey, hydrateKey }) => {
      registerHandler(actionKey, () => showSection(navKey, contentKey, hydrateMap[hydrateKey]));
    });
    SIMPLE_UI_ACTIONS.forEach((entry2) => registerSimpleUiAction(entry2, context));
    TOGGLE_DEFINITIONS.forEach(({ id, label }) => {
      registerHandler(id, () => cheatActions2.toggleById(id, label));
    });
    METHOD_ACTIONS.forEach(({ actionKey, methodName }) => {
      registerMethodAction(actionKey, cheatActions2, methodName);
    });
    BOUND_ACTIONS.forEach((entry2) => registerBoundAction(entry2, context));
  }

  // src/features/listeners/index.js
  var actionsRegistered = false;
  var runtimeObserverPolicy = createRuntimeObserverPolicy();
  function configureRuntimeObserverPolicy(overrides = {}) {
    runtimeObserverPolicy = createRuntimeObserverPolicy(overrides);
  }
  function registerListenerActions() {
    if (actionsRegistered) return;
    registerAllActions({
      closeModal,
      openModal,
      showContent,
      getUiRefs,
      cheatActions,
      hydratePregnancy,
      hydrateCheatUi,
      hydrateQuickSection,
      hydrateStatsSection,
      hydrateMiscSection,
      Enable_cheat_history,
      Enable_sidebar_button,
      simple_cheat_button,
      executeSearch,
      init_interface
    });
    setErrorHook((key) => showToast(`Action "${key}" failed.`, { variant: "error" }));
    actionsRegistered = true;
  }
  function initGameObservers() {
    const cheat2 = byUiId("cheat");
    if (!cheat2) return;
    reset();
    function ensureTogglesActive() {
      if (!actionsRegistered) return;
      if (getIsLoad() || getReactivatingToggles()) return;
      const stored = getToggles();
      const storedCount = stored && typeof stored === "object" ? Object.keys(stored).length : 0;
      if (!storedCount) return;
      const bundles = ToggleScheduler.getBundles();
      const runtimeCount = Object.keys(bundles.functionbundle || {}).length + Object.keys(bundles.dailyfunctionbundle || {}).length;
      if (runtimeCount === 0) {
        initStorage();
        reactivateToggles();
      }
    }
    on(document, "click", function(event) {
      ensureTogglesActive();
      if (isAtSettings()) {
        restoreVariables();
      } else {
        incrementClickCounter();
        cheatActions.runitall();
      }
      let target = event.target;
      if (runtimeObserverPolicy.detectLoadTrigger(target)) {
        setIsLoad(true);
      } else if (getIsLoad()) {
        initStorage();
        reactivateToggles();
        showToast("Cheat state loaded", { variant: "success" });
        setIsLoad(false);
      } else if (runtimeObserverPolicy.detectHistoryNavigation(target)) {
        initStorage();
      }
    });
    on(document, "keyup", function() {
      ensureTogglesActive();
      if (!isAtSettings()) {
        incrementClickCounter();
        cheatActions.runitall();
      }
    });
    on(cheat2, "keyup", function(event) {
      event.stopPropagation();
    });
  }
  function stopGameObservers() {
    reset();
    ToggleScheduler.reset();
  }

  // src/features/registry.js
  factory.registerFeature({
    id: "storage",
    init() {
      initStorage();
      reactivateToggles();
    }
  });
  factory.registerFeature({
    id: "listeners",
    registerActions() {
      registerListenerActions();
    },
    startObservers() {
      initGameObservers();
    },
    stopObservers() {
      stopGameObservers();
    }
  });

  // src/features/bootstrap.js
  var bootstrapped = false;
  function canBootstrap(runtimeEngine) {
    return Boolean(runtimeEngine?.adapter?.isReady?.() && byUiId(CHEAT_ROOT_ID));
  }
  function bootstrap({ runtimeEngine } = {}) {
    if (bootstrapped) return false;
    if (!canBootstrap(runtimeEngine)) return false;
    configureRuntimeObserverPolicy(runtimeEngine?.observerPolicy ?? {});
    factory.registerAllActions();
    configureCheatRuntime(runtimeEngine);
    factory.initAllFeatures();
    factory.startAllObservers();
    bootstrapped = true;
    return true;
  }
  function bootstrapCheat(options6 = {}) {
    return bootstrap(options6);
  }

  // src/core/styleRegistry.js
  var registry = { shadow: [], document: [] };
  function getRegistry() {
    return registry;
  }
  function registerSheet(cssText, { target = "shadow" } = {}) {
    const reg = getRegistry();
    if (target === "shadow" || target === "both") {
      if (!reg.shadow.includes(cssText)) reg.shadow.push(cssText);
    }
    if (target === "document" || target === "both") {
      if (!reg.document.includes(cssText)) reg.document.push(cssText);
    }
  }
  var appliedShadowRoots = /* @__PURE__ */ new WeakSet();
  function applyToShadow(shadowRoot2) {
    if (!shadowRoot2) return;
    if (appliedShadowRoots.has(shadowRoot2)) return;
    appliedShadowRoots.add(shadowRoot2);
    const reg = getRegistry();
    reg.shadow.forEach((cssText) => {
      const style = document.createElement("style");
      style.textContent = cssText;
      shadowRoot2.appendChild(style);
    });
  }

  // src/ui/assets/base.css
  var base_default = "#cheat {\n  font-family: var(--cp-font-ui, Arial, sans-serif);\n  color: var(--cp-text-primary, #fff);\n}\n\r\n#effect-layer {\r\n  z-index: 999;\r\n  background-color: red;\r\n  opacity: 0;\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n.hidden {\r\n  display: none;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .fade {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n.fade:not(.show) {\r\n  opacity: 0;\r\n}\r\n\r\n.collapse:not(.show) {\r\n  display: none;\r\n}\r\n\r\n.collapsing {\r\n  height: 0;\r\n  overflow: hidden;\r\n  transition: height 0.35s ease;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .collapsing {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n.collapsing.collapse-horizontal {\r\n  width: 0;\r\n  height: auto;\r\n  transition: width 0.35s ease;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  .collapsing.collapse-horizontal {\r\n    transition: none;\r\n  }\r\n}\r\n\r\n.gold {\r\n  color: var(--cp-color-gold, #f0d46d);\r\n}\r\n\r\n.linkBlue {\r\n  color: var(--cp-color-link, #66a7ff);\r\n}\r\n\r\n@keyframes shake {\r\n  0% {\r\n    transform: translate(0px, 0px);\r\n  }\r\n  25% {\r\n    transform: translate(2px, -2px);\r\n  }\r\n  50% {\r\n    transform: translate(-2px, 2px);\r\n  }\r\n  75% {\r\n    transform: translate(2px, -2px);\r\n  }\r\n  100% {\r\n    transform: translate(0px, 0px);\r\n  }\r\n}\r\n\r\n.shake {\r\n  animation: shake 0.3s linear infinite;\r\n}\r\n";

  // src/ui/assets/floating.css
  var floating_default = "#floating-button {\r\n  position: fixed;\r\n  top: 2%;\r\n  right: 20px;\r\n  z-index: 899;\r\n  display: flex;\r\n  flex-direction: row;\r\n  gap: 5px;\r\n  transition: top 0.5s ease-in-out;\r\n}\r\n\r\n#floating-button button {\r\n  min-height: 34px;\r\n  padding: 0 12px;\r\n  border-radius: 8px;\r\n  border: 1px solid rgba(255, 255, 255, 0.35);\r\n  background: linear-gradient(180deg, #575757 0%, #3f3f3f 100%);\r\n  color: #f2f2f2;\r\n  font-weight: 600;\r\n}\r\n\r\n#floating-button button:hover {\r\n  background: linear-gradient(180deg, #646464 0%, #474747 100%);\r\n}\r\n\r\n#floating-button #cheat-open {\r\n  cursor: grab;\r\n  touch-action: none;\r\n  padding: 0 16px;\r\n  border-color: rgba(240, 212, 109, 0.55);\r\n  box-shadow: 0 0 0 1px rgba(240, 212, 109, 0.18);\r\n}\r\n\r\n#floating-button.cp-dragging,\r\n#floating-button.cp-dragging #cheat-open {\r\n  cursor: grabbing;\r\n  user-select: none;\r\n}\r\n\r\n#floating-button.cp-dragging,\r\n#floating-button.cp-custom-position {\r\n  transition: none;\r\n}\r\n\r\n#floating-button.moved {\r\n  top: 90%;\r\n}\r\n";

  // src/ui/assets/modal.css
  var modal_default = ".modal {\r\n  display: none;\r\n  position: fixed;\r\n  z-index: 900;\r\n  left: 0;\r\n  top: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  overflow: auto;\r\n  background-color: var(--cp-color-overlay, rgba(0, 0, 0, 0.5));\r\n}\r\n\r\n.modal-content {\r\n  background-color: var(--cp-bg-modal, #222);\r\n  margin: 10px auto;\r\n  border: 1px solid var(--cp-border-modal, #888);\r\n  border-radius: 10px;\r\n  width: min(960px, 94vw);\r\n  overflow: hidden;\r\n  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.45);\r\n}\r\n\r\n.modal-content-padding {\n  box-sizing: border-box;\n  padding: 5px 0 9px;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  column-gap: 10px;\n  row-gap: 8px;\n  scroll-margin-top: 58px;\n}\n\n.cp-layout-heading {\n  padding-top: 14px;\n  padding-bottom: 7px;\n  font-weight: 600;\n}\n\n.cp-layout-help {\n  padding-bottom: 10px;\n}\n\n.cp-layout-spacer {\n  min-height: 10px;\n  padding: 0;\n}\n\n.cp-layout-footer {\n  margin-top: 14px;\n  padding-top: 12px;\n  border-top: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n.cp-section-shell {\n  display: contents;\n}\n\n.cp-shell-help {\n  color: #9cbcff;\n  font-size: 0.9em;\n}\n\n.cp-cheat-descriptor {\n  display: grid;\n  grid-template-columns: minmax(150px, max-content) minmax(0, 1fr);\n  align-items: start;\n  column-gap: 12px;\n  min-width: 0;\n}\n\n.cp-cheat-label {\n  min-height: 32px;\n  display: inline-flex;\n  align-items: center;\n  font-weight: 400;\n  gap: 7px;\n}\n\n.cp-cheat-controls {\n  min-width: 0;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  column-gap: 10px;\n  row-gap: 8px;\n}\n\n.cp-cheat-control-unit {\n  min-width: 0;\n  max-width: 100%;\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  break-inside: avoid;\n}\n\n.cp-cheat-status {\n  grid-column: 1 / -1;\n  margin-left: 162px;\n  color: #f2c879;\n  line-height: 1.35;\n}\n\n.cp-cheat-unavailable {\n  border-left: 3px solid #b47a36;\n  padding-left: 9px;\n}\n\n.cp-control-notice {\n  flex-basis: 100%;\n  color: var(--cp-text-muted, #c8c3bc);\n  line-height: 1.3;\n}\n\n.cp-control-notice[data-notice-kind='warning'] {\n  color: #f2c879;\n}\n\n.cp-confirmation-control {\n  padding: 2px 7px;\n  border: 1px solid rgba(240, 212, 109, 0.35);\n  border-radius: 6px;\n}\n\n.cp-status-control {\n  flex: 0 0 auto;\n}\n\n.cp-cheat-control-unit[hidden] {\n  display: none;\n}\n\n.cp-status-chip {\n  display: inline-flex;\n  align-items: center;\n  min-height: 24px;\n  box-sizing: border-box;\n  padding: 2px 9px;\n  border: 1px solid rgba(102, 167, 255, 0.45);\n  border-radius: 999px;\n  background: rgba(102, 167, 255, 0.12);\n  color: #c9dcff;\n  line-height: 1.2;\n  white-space: nowrap;\n}\n\n.cp-cheat-control-unit > .modal-content-width,\n.cp-cheat-control-unit > select {\n  max-width: min(100%, 320px);\n}\n\r\n.modal-content-width {\n  box-sizing: border-box;\r\n  min-height: 32px;\r\n  padding: 0 10px;\r\n  border-radius: 6px;\r\n  border: 1px solid var(--cp-border-button, #8a8a8a);\r\n  background: #151515;\r\n  color: var(--cp-text-primary, #fff);\n}\n\n.cp-cheat-control:focus-visible {\n  outline: 2px solid var(--cp-color-link, #66a7ff);\n  outline-offset: 2px;\n}\n\n.cp-cheat-control:disabled {\n  cursor: not-allowed;\n  opacity: 0.55;\n}\n\n.cp-cheat-range {\n  accent-color: var(--cp-color-gold, #f0d46d);\n}\n\n.cp-search-row {\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 2;\r\n  background: var(--cp-bg-modal, #222);\r\n  padding-top: 4px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.cp-search-input {\r\n  width: min(460px, 96%);\r\n  box-sizing: border-box;\r\n  min-height: 32px;\r\n  padding: 0 10px;\r\n  border-radius: 6px;\r\n  border: 1px solid var(--cp-border-button, #8a8a8a);\r\n  background: #151515;\r\n  color: var(--cp-text-primary, #fff);\r\n}\r\n\r\n.cp-search-input::placeholder {\r\n  color: #9f9f9f;\r\n}\r\n\r\n.modal-button {\r\n  background: var(--cp-bg-button, #4b4b4b);\r\n  color: var(--cp-text-primary, #fff);\r\n  border: 1px solid var(--cp-border-button, #8a8a8a);\r\n  border-radius: var(--cp-radius-button, 2px);\r\n  min-height: 32px;\r\n  padding: 0 10px;\r\n  line-height: 1;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  white-space: nowrap;\r\n  cursor: pointer;\r\n}\r\n\r\n.modal-content select {\r\n  min-height: 32px;\r\n  padding: 0 28px 0 10px;\r\n  border-radius: 6px;\r\n  border: 1px solid var(--cp-border-button, #8a8a8a);\r\n  background: #151515;\r\n  color: var(--cp-text-primary, #fff);\r\n}\r\n\r\n.modal-button:hover {\r\n  background: var(--cp-bg-button-hover, #5a5a5a);\r\n}\r\n\r\n.modal-button.cp-toggle-active {\r\n  background: var(--cp-color-gold, #f0d46d);\r\n  color: #1a1a1a;\r\n  border-color: var(--cp-color-gold, #f0d46d);\r\n}\r\n\r\n.modal-button.cp-toggle-active:hover {\r\n  background: #d4b84a;\r\n  border-color: #d4b84a;\r\n}\r\n\r\n.modal-button[hidden],\r\n.modal-toggle[hidden],\r\n.modal-link[hidden],\r\n.modal-toggle[hidden] * {\r\n  display: none !important;\r\n}\r\n\r\n.modal-toggle {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  cursor: pointer;\r\n  user-select: none;\r\n  border: 1px solid transparent;\r\n  border-radius: 999px;\r\n  padding: 2px 8px;\r\n  transition: border-color 0.2s ease, background-color 0.2s ease;\r\n}\r\n\r\n.modal-toggle input[type='checkbox'] {\r\n  width: 14px;\r\n  height: 14px;\r\n  margin: 0;\r\n  cursor: pointer;\r\n}\r\n\r\n.modal-toggle .toggle-label {\r\n  color: var(--cp-text-muted, #c8c3bc);\r\n}\r\n\r\n.modal-toggle input[type='checkbox']:checked + .toggle-label {\r\n  color: var(--cp-color-gold, #f0d46d);\r\n  font-weight: 700;\r\n}\r\n\r\n.modal-toggle.cp-toggle-active {\n  border-color: rgba(240, 212, 109, 0.65);\r\n  background: rgba(240, 212, 109, 0.12);\n}\n\n.modal-toggle[aria-disabled='true'] {\n  cursor: not-allowed;\n  opacity: 0.7;\n}\n\n.modal-toggle:has(input[hidden]) {\n  display: none !important;\n}\n\r\n.cp-bound-value {\r\n  margin-left: 8px;\r\n  color: var(--cp-text-muted, #c8c3bc);\r\n  font-size: 11px;\r\n  opacity: 0.9;\r\n}\r\n\r\n.modal-link {\r\n  color: var(--cp-color-link, #66a7ff);\r\n  text-decoration: underline;\r\n}\r\n\r\n.modal-content-color {\r\n  color: var(--cp-text-muted, #c8c3bc);\r\n}\r\n\r\n.modal-content-right {\r\n  margin-right: 10px;\r\n}\r\n\r\n.tooltip-small {\n  position: relative;\r\n  display: inline-block;\r\n  cursor: help;\r\n}\r\n\r\n.tooltip-small span {\r\n  visibility: hidden;\r\n  width: 300px;\r\n  max-width: min(70vw, 300px);\r\n  background: var(--cp-bg-tooltip, #111);\r\n  color: var(--cp-text-tooltip, #f2f2f2);\r\n  border: 1px solid var(--cp-border-tooltip, #444);\r\n  border-radius: var(--cp-radius-tooltip, 4px);\r\n  padding: 6px 8px;\r\n  position: absolute;\r\n  z-index: 1000;\r\n  left: 0;\r\n  top: 1.4em;\r\n  white-space: normal;\r\n}\r\n\r\n.tooltip-small:hover span,\n.tooltip-small:focus span,\n.tooltip-small:focus-within span {\n  visibility: visible;\n}\n\n.tooltip-small[hidden] {\n  display: none;\n}\n\r\n.close {\r\n  cursor: pointer;\r\n}\r\n\r\n.navbar .close {\r\n  flex: 0 0 52px;\r\n  width: 52px;\r\n  min-width: 52px;\r\n  border-right: 0;\r\n  padding: 8px 0;\r\n  font-size: 24px;\r\n  font-weight: 700;\r\n  line-height: 1;\r\n  color: #ffe5e5;\r\n  background: linear-gradient(180deg, #6b2d2d 0%, #542222 100%);\r\n  transition: background-color 0.2s ease, color 0.2s ease;\r\n}\r\n\r\n.navbar .close:hover,\r\n.navbar .close:focus {\r\n  color: #ffffff;\r\n  background: linear-gradient(180deg, #7d3636 0%, #632c2c 100%);\r\n}\r\n\r\n#modal-content-container {\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.modal-row {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.modal-label {\r\n  flex: 1;\r\n}\r\n\r\n.modal-inputs {\r\n  flex: 2;\r\n}\r\n\r\n#modal-content-container {\n  height: 72vh;\n  max-height: 72vh;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  scroll-padding: 58px 0 64px;\n}\r\n\r\n.navbar {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  background-color: var(--cp-bg-navbar, #333);\r\n  color: var(--cp-text-primary, #fff);\r\n}\r\n\r\n.nav-link {\r\n  width: 100%;\r\n  cursor: pointer;\r\n  text-align: center;\r\n  position: relative;\r\n  border-right: 1px solid rgba(255, 255, 255, 0.3);\r\n  padding: 10px;\r\n}\r\n\r\n.nav-link.active {\r\n  text-decoration: underline;\r\n}\r\n\r\n.cheat-content {\n  box-sizing: border-box;\n  width: 100%;\n  padding: 1rem 1rem 3rem !important;\n  display: none;\n}\n\r\n.cheat-content.active {\r\n  display: block;\r\n}\r\n\r\n.content {\r\n  display: none;\r\n  padding: 10px;\r\n}\r\n\r\n.content.active {\r\n  display: block;\r\n}\r\n\r\n.cp-section-broken {\r\n  border: 1px solid #9f2d2d;\r\n  background: rgba(159, 45, 45, 0.12);\r\n}\r\n\r\n.cp-section-broken-banner {\r\n  background: #9f2d2d;\r\n  color: #fff;\r\n  padding: 6px 8px;\r\n  margin-bottom: 8px;\r\n  font-size: 12px;\r\n}\r\n";

  // src/ui/assets/responsive.css
  var responsive_default = "@media (max-width: 768px) {\r\n  .modal-content {\r\n    width: 96vw;\r\n    margin: 8px auto;\r\n  }\r\n\r\n  #modal-content-container {\r\n    height: 72vh;\r\n    max-height: 72vh;\r\n    overflow-y: auto;\r\n  }\r\n\r\n  .cp-search-row {\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .cp-search-input {\n    width: 100%;\n  }\n\n  .cp-cheat-descriptor {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 5px;\n    padding-top: 9px;\n    padding-bottom: 12px;\n  }\n\n  .cp-cheat-label {\n    min-height: auto;\n  }\n\n  .cp-cheat-status {\n    margin-left: 0;\n  }\n\n  .cp-cheat-controls {\n    width: 100%;\n  }\n\n  .cp-cheat-control-unit {\n    max-width: 100%;\n  }\n\n  .cp-cheat-control-unit > .modal-content-width,\n  .cp-cheat-control-unit > select {\n    min-width: 0;\n    max-width: min(100%, 280px);\n  }\n\r\n  .toast-container,\r\n  #toastContainer,\r\n  #cp-fallback-toast-container {\r\n    left: 50%;\r\n    right: auto;\r\n    transform: translateX(-50%);\r\n    width: min(92vw, 420px);\r\n  }\r\n}\n\n@media (max-width: 480px) {\n  .cheat-content {\n    padding: 0.75rem 0.75rem 3.5rem !important;\n  }\n\n  .cp-cheat-controls {\n    column-gap: 8px;\n  }\n\n}\n";

  // src/ui/assets/toast.css
  var toast_default = ".toast-container,\r\n#toastContainer,\r\n#cp-fallback-toast-container {\r\n  position: fixed;\r\n  top: max(12px, env(safe-area-inset-top));\r\n  right: max(12px, env(safe-area-inset-right));\r\n  z-index: 999;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 8px;\r\n  pointer-events: none;\r\n  width: min(90vw, 380px);\r\n}\r\n\r\n.toast {\r\n  background-color: var(--cp-bg-toast, #333);\r\n  color: var(--cp-text-toast, #fff);\r\n  padding: 10px 14px;\r\n  border-radius: var(--cp-radius-toast, 5px);\r\n  border: 1px solid rgba(255, 255, 255, 0.15);\r\n  opacity: 1;\r\n  transform: translateY(0);\r\n  transition: opacity 0.2s ease, transform 0.2s ease;\r\n  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);\r\n  backdrop-filter: blur(2px);\r\n}\r\n\r\n.toast-title {\r\n  font-weight: 700;\r\n  font-size: 12px;\r\n  margin-bottom: 2px;\r\n}\r\n\r\n.toast-body {\r\n  font-size: 13px;\r\n  line-height: 1.35;\r\n}\r\n\r\n.toast--success {\r\n  border-color: #3a9d5d;\r\n  background-color: #193524;\r\n}\r\n\r\n.toast--warning {\r\n  border-color: #be8e2d;\r\n  background-color: #3e2f12;\r\n}\r\n\r\n.toast--error {\r\n  border-color: #b24646;\r\n  background-color: #441d1d;\r\n}\r\n\r\n.toast--info {\r\n  border-color: #4d84d3;\r\n  background-color: #1a2b44;\r\n}\r\n\r\n.toast-enter {\r\n  opacity: 0;\r\n  transform: translateY(-10px);\r\n}\r\n\r\n.toast-show {\r\n  opacity: 1;\r\n  transform: translateY(0);\r\n}\r\n\r\n.toast-leave {\r\n  opacity: 0;\r\n  transform: translateY(-10px);\r\n}\r\n";

  // src/ui/theme/tokens.css
  var tokens_default = "/**\r\n * CheatPlus Shadow-safe Theme Tokens\r\n *\r\n * All custom properties are scoped to :host so they are self-contained inside\r\n * the Shadow DOM and never leak to or inherit from the host page.\r\n *\r\n * Naming convention:  --cp-{category}-{variant}\r\n *\r\n * Categories:\r\n *   color-*    \u2013 palette tokens\r\n *   bg-*       \u2013 background colors\r\n *   text-*     \u2013 foreground / text colors\r\n *   border-*   \u2013 border colors\r\n *   spacing-*  \u2013 padding / gap constants\r\n *   radius-*   \u2013 border-radius\r\n *   font-*     \u2013 font stacks and sizes\r\n *   transition-* \u2013 animation durations\r\n */\r\n\r\n:host {\r\n  /* --- Palette --- */\r\n  --cp-color-gold: #f0d46d;\r\n  --cp-color-link: #66a7ff;\r\n  --cp-color-danger: #e05a5a;\r\n  --cp-color-overlay: rgba(0, 0, 0, 0.5);\r\n\r\n  /* --- Backgrounds --- */\r\n  --cp-bg-modal: #222;\r\n  --cp-bg-navbar: #333;\r\n  --cp-bg-button: #4b4b4b;\r\n  --cp-bg-button-hover: #5a5a5a;\r\n  --cp-bg-tooltip: #111;\r\n  --cp-bg-toast: #333;\r\n\r\n  /* --- Text --- */\r\n  --cp-text-primary: #fff;\r\n  --cp-text-muted: #c8c3bc; /* replaces host var(--500) \u2014 DoL body text approximation */\r\n  --cp-text-tooltip: #f2f2f2;\r\n  --cp-text-toast: #fff;\r\n\r\n  /* --- Borders --- */\r\n  --cp-border-modal: #888;\r\n  --cp-border-button: #8a8a8a;\r\n  --cp-border-tooltip: #444;\r\n\r\n  /* --- Spacing --- */\r\n  --cp-spacing-xs: 2px;\r\n  --cp-spacing-sm: 5px;\r\n  --cp-spacing-md: 10px;\r\n  --cp-spacing-lg: 20px;\r\n  --cp-spacing-content: 1rem;\r\n\r\n  /* --- Border radius --- */\r\n  --cp-radius-button: 2px;\r\n  --cp-radius-tooltip: 4px;\r\n  --cp-radius-toast: 5px;\r\n\r\n  /* --- Typography --- */\r\n  --cp-font-ui: system-ui, -apple-system, sans-serif;\r\n  --cp-font-size-base: 13px;\r\n\r\n  /* --- Transitions --- */\r\n  --cp-transition-fade: opacity 0.3s ease-in-out;\r\n  --cp-transition-collapse: height 0.35s ease;\r\n  --cp-transition-float: top 0.5s ease-in-out;\r\n}\r\n";

  // src/ui/index.js
  registerSheet(tokens_default, { target: "shadow" });
  registerSheet(base_default, { target: "shadow" });
  registerSheet(floating_default, { target: "shadow" });
  registerSheet(toast_default, { target: "shadow" });
  registerSheet(modal_default, { target: "shadow" });
  registerSheet(responsive_default, { target: "shadow" });
  function bindOnce(element, flag, eventName, handler) {
    if (!element || element[flag]) return;
    element.addEventListener(eventName, handler);
    element[flag] = true;
  }
  function shouldCloseModalFromTarget(target) {
    if (!target?.id) return false;
    if (target.id !== "modal") return false;
    const modal2 = byUiId("modal");
    if (!modal2) return true;
    const content = modal2.querySelector(".modal-content");
    return !(content && content.contains(target));
  }
  function mountInterface() {
    if (!document.body) {
      requestAnimationFrame(mountInterface);
      return;
    }
    const root = ensureShadowRoot();
    if (!root) {
      logger_default("ui", "mountInterface: ensureShadowRoot returned null");
      return;
    }
    if (byUiId("cheat")) return;
    const styleApplied = safeCall("CSS injection failed:", () => {
      applyToShadow(root);
      return true;
    });
    if (!styleApplied) {
    }
    root.appendChild(renderTemplate(layoutTemplate));
    refreshUiRefs();
    initFloatingButtonDrag();
    logger_default("ui", "mountInterface: mounted template", {
      data: { modalContainer: !!byUiId("modal-content-container") }
    });
    safeCall("failed to bind fallback open handler", () => {
      const btn = byUiId("cheat-open");
      bindOnce(btn, "__cheatPlusBound", "click", () => {
        safeCall("openModal failed:", () => openModal());
      });
      const btnSidebar = byUiId("cheat-sidebar");
      bindOnce(btnSidebar, "__cheatPlusBoundSidebar", "click", () => {
        safeCall("cheat-sidebar failed:", () => dispatch("cheat-sidebar"));
      });
      const histBack = byUiId("cheat-history-backwards");
      bindOnce(histBack, "__cheatPlusBoundHistBack", "click", () => {
        safeCall("history-back failed:", () => dispatch("cheat-history-backwards"));
      });
      const histFor = byUiId("cheat-history-forwards");
      bindOnce(histFor, "__cheatPlusBoundHistFor", "click", () => {
        safeCall("history-for failed:", () => dispatch("cheat-history-forwards"));
      });
      const rootEl = byUiId("cheat");
      bindOnce(rootEl, "__cheatPlusCloseBound", "click", (event) => {
        const target = event.target;
        if (!shouldCloseModalFromTarget(target)) return;
        safeCall("closeModal fallback failed:", () => closeModal());
      });
    });
  }

  // src/core/runtime-engine-sugarcube.js
  function hasSugarCubeCorePrerequisites() {
    const runtimeWindow2 = getRuntimeWindow();
    return Boolean(runtimeWindow2?.SugarCube && scAdapter.isReady());
  }
  function hasSugarCubeRuntimePrerequisites() {
    const setup = scAdapter.getSetup();
    return Boolean(
      hasSugarCubeCorePrerequisites() && Array.isArray(setup?.NPCNameList) && document.getElementById(GAME_VERSION_ELEMENT_ID)
    );
  }
  function describeSugarCubePrerequisiteState() {
    const runtimeWindow2 = getRuntimeWindow();
    const sugarCube = runtimeWindow2?.SugarCube;
    return {
      sugarCubeDefined: Boolean(sugarCube),
      sugarCubeState: Boolean(sugarCube?.State),
      sugarCubeVariables: Boolean(sugarCube?.State?.variables),
      sugarCubeSetup: Boolean(sugarCube?.setup),
      npcList: Array.isArray(sugarCube?.setup?.NPCNameList),
      versionElement: Boolean(document.getElementById(GAME_VERSION_ELEMENT_ID))
    };
  }
  var sugarcubeRuntimeEngine = Object.freeze({
    id: "sugarcube",
    label: "SugarCube",
    detect() {
      return Boolean(getRuntimeWindow()?.SugarCube);
    },
    adapter: scAdapter,
    observerPolicy: defaultRuntimeObserverPolicy,
    hasCorePrerequisites: hasSugarCubeCorePrerequisites,
    hasRuntimePrerequisites: hasSugarCubeRuntimePrerequisites,
    describePrerequisiteState: describeSugarCubePrerequisiteState
  });

  // src/core/renpy-web/adapter.js
  function getRenPyRoot() {
    const runtimeWindow2 = getRuntimeWindow();
    return runtimeWindow2?.RenPyWeb ?? null;
  }
  function getStore4() {
    const root = getRenPyRoot();
    return root?.store ?? null;
  }
  var renpyWebAdapter = {
    getVariables: getStore4,
    getVariable(key) {
      const store2 = getStore4();
      return store2 ? store2[key] : void 0;
    },
    setVariable(key, value) {
      const store2 = getStore4();
      if (store2) store2[key] = value;
    },
    getSetup() {
      return getRenPyRoot()?.setup ?? null;
    },
    getSetupKey(key) {
      const setup = getRenPyRoot()?.setup;
      return setup ? setup[key] : void 0;
    },
    getCurrentPassage() {
      return getRenPyRoot()?.passage ?? null;
    },
    isAtPassage(name) {
      return this.getCurrentPassage() === name;
    },
    isReady() {
      return Boolean(getStore4());
    }
  };

  // src/core/runtime-engine-renpy-web.js
  function hasRenPyWebCorePrerequisites() {
    return renpyWebAdapter.isReady();
  }
  function hasRenPyWebRuntimePrerequisites() {
    return hasRenPyWebCorePrerequisites();
  }
  function describeRenPyWebPrerequisiteState() {
    const runtimeWindow2 = getRuntimeWindow();
    const renpyWeb = runtimeWindow2?.RenPyWeb;
    return {
      renpyWebDefined: Boolean(renpyWeb),
      storeDefined: Boolean(renpyWeb?.store),
      setupDefined: Boolean(renpyWeb?.setup),
      passageDefined: Boolean(renpyWeb?.passage)
    };
  }
  var renpyWebRuntimeEngine = Object.freeze({
    id: "renpy-web",
    label: "RenPy-web",
    detect() {
      return Boolean(getRuntimeWindow()?.RenPyWeb);
    },
    adapter: renpyWebAdapter,
    observerPolicy: defaultRuntimeObserverPolicy,
    hasCorePrerequisites: hasRenPyWebCorePrerequisites,
    hasRuntimePrerequisites: hasRenPyWebRuntimePrerequisites,
    describePrerequisiteState: describeRenPyWebPrerequisiteState
  });

  // src/core/runtime-engine-registry.js
  var runtimeEngines = [sugarcubeRuntimeEngine, renpyWebRuntimeEngine];
  var activeRuntimeEngine = null;
  function resolveRuntimeEngine() {
    return runtimeEngines.find((engine) => {
      try {
        return engine.detect();
      } catch (_) {
        return false;
      }
    }) ?? null;
  }
  function ensureActiveRuntimeEngine() {
    if (activeRuntimeEngine) return activeRuntimeEngine;
    const resolved = resolveRuntimeEngine();
    if (resolved) activeRuntimeEngine = resolved;
    return activeRuntimeEngine;
  }

  // src/core/injection.js
  var injectionState = {
    started: false,
    ready: false
  };
  function getInjectionState() {
    return injectionState;
  }
  function getDetectedRuntimeEngine() {
    return ensureActiveRuntimeEngine();
  }
  function waitForCondition(check, { intervalMs = 50, timeoutMs = 3e4 } = {}) {
    return new Promise((resolve, reject) => {
      if (check()) {
        resolve();
        return;
      }
      const startedAt = Date.now();
      const timer = setInterval(() => {
        if (check()) {
          clearInterval(timer);
          resolve();
          return;
        }
        if (Date.now() - startedAt > timeoutMs) {
          clearInterval(timer);
          reject(new Error("Injection prerequisites timed out."));
        }
      }, intervalMs);
    });
  }
  async function waitForRuntimeEngine() {
    await waitForCondition(() => Boolean(getDetectedRuntimeEngine()), { timeoutMs: 3e4 });
    const runtimeEngine = getDetectedRuntimeEngine();
    if (!runtimeEngine) {
      throw new Error("No supported runtime engine detected.");
    }
    return runtimeEngine;
  }
  async function waitForPrerequisites(runtimeEngine) {
    await waitForCondition(() => runtimeEngine.hasRuntimePrerequisites(), { timeoutMs: 3e4 }).catch(
      async () => {
        console.warn(
          `[CheatPlus] ${runtimeEngine.label} runtime prerequisites not met within 30s \u2014 dumping status and retrying.`
        );
        console.warn("[CheatPlus] status:", runtimeEngine.describePrerequisiteState());
        await waitForCondition(() => runtimeEngine.hasRuntimePrerequisites(), {
          timeoutMs: 6e4
        }).catch(async () => {
          await waitForCondition(() => runtimeEngine.hasCorePrerequisites(), { timeoutMs: 6e4 });
          console.warn(`[CheatPlus] Continuing with core ${runtimeEngine.label} readiness only.`);
        });
      }
    );
  }
  async function startCheatInjection() {
    const state = getInjectionState();
    if (state.started) return;
    state.started = true;
    try {
      logger_default("injection", "startCheatInjection:before-mount", {
        data: { bodyPresent: !!document.body }
      });
      await waitForCondition(() => Boolean(document.body), { timeoutMs: 2e4 });
      mountInterface();
      logger_default("injection", "mountInterface() called", {
        data: { hostPresent: !!document.getElementById(SHADOW_HOST_ID) }
      });
      const runtimeEngine = await waitForRuntimeEngine();
      logger_default("injection", "runtime-engine-detected", {
        data: { runtimeEngine: runtimeEngine.id }
      });
      await waitForPrerequisites(runtimeEngine);
      bootstrapCheat({ runtimeEngine });
      logger_default("injection", "after-bootstrap", { data: { ready: true } });
      state.ready = true;
    } catch (error) {
      state.started = false;
      console.error("[CheatPlus] Injection failed:", error);
    }
  }

  // src/main.js
  startCheatInjection();
})();