﻿
domcom_ui_close = {
    scope = character
    effect = {
        domcom_clear_body_reroll_selection_effect = yes
        remove_variable = domcom_ui_open
        domcom_clear_world_ui_cache_effect = yes
        domcom_clear_standard_ui_page_caches_effect = yes
    }
}

domcom_ui_refresh = {
    scope = character
    is_valid = { is_alive = yes }
    effect = {
        # Safe retroactive repair only: local relationships/children and terminal Devotion. Do not run the
        # historical all-world UI preparation pass that caused large-save crashes.
        domcom_fast_recover_records_effect = yes
        domcom_repair_pet_registry_for_patron_effect = yes
        domcom_refresh_current_ui_page_effect = yes
    }
}


domcom_ui_enforce_dominion = {
    scope = character
    is_valid = { is_alive = yes }
    effect = {
        domcom_fast_recover_records_effect = yes
        domcom_repair_pet_registry_for_patron_effect = yes
        domcom_enforce_communion_for_patron_effect = yes
        send_interface_toast = {
            type = event_toast_effect_good
            title = DOMCOM_UI_ENFORCE_DOMINION_TOAST
            left_icon = root
        }
        domcom_refresh_current_ui_page_effect = yes
    }
}

# 2.6.9 — Overview-native mode/power controls. These replace permanent Decision-tab entries while
# retaining the old decision IDs as hidden save-compatible fallbacks.
domcom_ui_jolly_is_on = {
    scope = character
    is_shown = { exists = dynasty dynasty = { has_variable = domcom_jolly_rancher_mode var:domcom_jolly_rancher_mode = 1 } }
}
domcom_ui_jolly_is_off = {
    scope = character
    is_shown = { exists = dynasty dynasty = { OR = { NOT = { has_variable = domcom_jolly_rancher_mode } var:domcom_jolly_rancher_mode != 1 } } }
}
domcom_ui_jolly_enable = {
    scope = character
    is_valid = { is_alive = yes is_imprisoned = no exists = dynasty }
    effect = {
        dynasty = { set_variable = { name = domcom_jolly_rancher_mode value = 1 } }
        domcom_jolly_rancher_player_dynasty_effect = yes
        send_interface_toast = { type = event_toast_effect_good title = DOMCOM_JOLLY_RANCHER_ENABLED_TOAST left_icon = root }
    }
}
domcom_ui_jolly_disable = {
    scope = character
    is_valid = { is_alive = yes exists = dynasty dynasty = { has_variable = domcom_jolly_rancher_mode var:domcom_jolly_rancher_mode = 1 } }
    effect = {
        dynasty = { remove_variable = domcom_jolly_rancher_mode }
        remove_character_modifier = domcom_jolly_rancher_active_modifier
        send_interface_toast = { type = event_toast_effect_neutral title = DOMCOM_JOLLY_RANCHER_DISABLED_TOAST left_icon = root }
    }
}

domcom_ui_human_ai_is_on = { scope = character is_shown = { has_trait = domcom_human_among_ai_trait } }
domcom_ui_human_ai_is_off = { scope = character is_shown = { NOT = { has_trait = domcom_human_among_ai_trait } } }
domcom_ui_human_ai_enable = {
    scope = character
    is_valid = { is_alive = yes NOT = { has_trait = domcom_human_among_ai_trait } }
    effect = { add_trait = domcom_human_among_ai_trait domcom_human_ai_sync_power_effect = yes }
}
domcom_ui_human_ai_disable = {
    scope = character
    is_valid = { has_trait = domcom_human_among_ai_trait }
    effect = {
        remove_trait = domcom_human_among_ai_trait
        remove_character_modifier = domcom_human_among_ai_power_modifier
        remove_character_modifier = domcom_human_ai_time_frozen_modifier
        remove_variable = domcom_human_ai_time_charges
    }
}

domcom_ui_human_ai_freeze_time = {
    scope = character
    is_valid = {
        is_alive = yes
        has_trait = domcom_human_among_ai_trait
        NOT = { has_character_modifier = domcom_human_ai_contained_modifier }
        NOT = { has_character_modifier = domcom_human_ai_godsbane_modifier }
        OR = { NOT = { has_variable = domcom_human_ai_time_charges } var:domcom_human_ai_time_charges <= 0 }
    }
    effect = {
        set_variable = { name = domcom_human_ai_time_charges value = 3 }
        add_character_modifier = { modifier = domcom_human_ai_time_frozen_modifier }
        send_interface_toast = { type = event_toast_effect_good title = DOMCOM_UI_TIME_FROZEN_TOAST left_icon = root }
    }
}
domcom_ui_human_ai_time_ready = {
    scope = character
    is_shown = { has_trait = domcom_human_among_ai_trait OR = { NOT = { has_variable = domcom_human_ai_time_charges } var:domcom_human_ai_time_charges <= 0 } }
}
domcom_ui_human_ai_time_active = {
    scope = character
    is_shown = { has_trait = domcom_human_among_ai_trait has_variable = domcom_human_ai_time_charges var:domcom_human_ai_time_charges > 0 }
}

domcom_ui_human_ai_invite_apex = {
    scope = character
    is_valid = {
        is_alive = yes
        is_imprisoned = no
        has_trait = domcom_human_among_ai_trait
        NOT = { has_character_modifier = domcom_human_ai_contained_modifier }
        NOT = { has_character_modifier = domcom_human_ai_godsbane_modifier }
        NOT = { has_character_flag = domcom_human_ai_apex_gui_cooldown }
    }
    effect = {
        add_character_flag = { flag = domcom_human_ai_apex_gui_cooldown days = 365 }
        domcom_human_ai_invite_apex_breed_effect = yes
    }
}

# Personal-state repair belongs on the Communion Overview, not in CK3's global Decisions list.
domcom_ui_repair_my_cuck_available = {
    scope = character
    is_shown = {
        is_playable_character = yes
        is_adult = yes
        OR = {
            has_character_flag = domcom_cucked
            has_trait = domcom_cucked_trait
            has_character_modifier = domcom_cucked_modifier
            has_variable = domcom_cuck_origin_patron
            has_variable = domcom_cuck_patron
            has_variable_list = domcom_cuck_patrons
            has_variable_list = domcom_sex_evidence_patrons
            has_variable_list = domcom_betrayal_evidence_patrons
            has_character_flag = domcom_owned_cuck
            has_variable = domcom_patron
            has_character_modifier = domcom_owned_modifier
            has_character_modifier = domcom_humiliated_stage_modifier
            has_character_modifier = domcom_submissive_stage_modifier
            has_character_modifier = domcom_broken_stage_modifier
            has_character_modifier = domcom_abject_stage_modifier
            has_character_modifier = domcom_final_submission_modifier
            any_child = { has_character_modifier = domcom_spawn_of_cuck_modifier }
            has_character_flag = domcom_restore_nick_blood_motherfather
            has_character_flag = domcom_restore_nick_the_remade
            has_character_flag = domcom_restore_nick_the_unmanned
            has_character_flag = domcom_restore_nick_the_softened
            has_character_flag = domcom_restore_nick_dynasty_slave
            has_character_flag = domcom_restore_nick_personal_slave
        }
    }
}
domcom_ui_repair_my_cuck = {
    scope = character
    is_valid = {
        is_alive = yes
        is_adult = yes
        is_imprisoned = no
    }
    effect = { trigger_event = { id = domcom.941 } }
}

domcom_ui_set_page_overview = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:overview } domcom_refresh_overview_summary_effect = yes } }
domcom_ui_set_page_cucked = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:cucked } domcom_prepare_cucked_page_safe_effect = yes } }
domcom_ui_set_page_world_cucks = {
    scope = character
    effect = {
        set_variable = { name = domcom_ui_page value = flag:world_cucks }
        domcom_clear_ui_raw_roster_caches_effect = yes
        # Build the observational roster lazily. Opening the Ledger no longer materializes hundreds of
        # World Cuck rows when this page is not in use.
        domcom_prepare_world_cucks_effect = yes
    }
}
domcom_ui_set_page_owned = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:owned } domcom_prepare_owned_page_safe_effect = yes } }
domcom_ui_set_page_endowments = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:endowments } if = { limit = { NOT = { has_variable = domcom_ui_endowment_view } } set_variable = { name = domcom_ui_endowment_view value = flag:men } } domcom_prepare_endowments_roster_safe_effect = yes } }
domcom_ui_set_page_outcomes = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:outcomes } domcom_prepare_world_outcomes_roster_effect = yes } }

# World Outcomes — dedicated sorting/paging.
domcom_ui_outcomes_sort_outcome = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:outcome } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_rank = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:rank } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_total = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:total } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_prowess = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:prowess } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_age = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:age } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_xp = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:xp } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_slaves = { scope = character effect = { set_variable = { name = domcom_ui_outcomes_sort_mode value = flag:slaves } domcom_rebuild_world_outcomes_roster_effect = yes } }
domcom_ui_outcomes_sort_reverse = {
    scope = character
    effect = {
        if = { limit = { NOT = { has_variable = domcom_ui_outcomes_sort_direction } } set_variable = { name = domcom_ui_outcomes_sort_direction value = flag:ascending } }
        else_if = { limit = { var:domcom_ui_outcomes_sort_direction = flag:ascending } set_variable = { name = domcom_ui_outcomes_sort_direction value = flag:descending } }
        else = { set_variable = { name = domcom_ui_outcomes_sort_direction value = flag:ascending } }
        domcom_rebuild_world_outcomes_roster_effect = yes
    }
}
domcom_ui_outcomes_prev = { scope = character is_valid = { has_variable = domcom_ui_outcomes_page var:domcom_ui_outcomes_page > 0 } effect = { change_variable = { name = domcom_ui_outcomes_page subtract = 1 } domcom_build_world_outcomes_page_effect = yes } }
domcom_ui_outcomes_next = { scope = character is_valid = { has_variable = domcom_ui_outcomes_page has_variable = domcom_ui_outcomes_last_page var:domcom_ui_outcomes_page < var:domcom_ui_outcomes_last_page } effect = { change_variable = { name = domcom_ui_outcomes_page add = 1 } domcom_build_world_outcomes_page_effect = yes } }
domcom_ui_outcomes_first = { scope = character is_valid = { has_variable = domcom_ui_outcomes_page var:domcom_ui_outcomes_page > 0 } effect = { set_variable = { name = domcom_ui_outcomes_page value = 0 } domcom_build_world_outcomes_page_effect = yes } }

domcom_ui_set_page_lovers = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:lovers } domcom_clear_ui_raw_roster_caches_effect = yes domcom_prepare_lovers_roster_effect = yes } }
domcom_ui_set_page_prospects = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:prospects } domcom_prepare_prospects_page_safe_effect = yes } }
domcom_ui_set_page_blood = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:blood } domcom_prepare_blood_page_safe_effect = yes } }
domcom_ui_set_page_tantalized = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:tantalized } domcom_prepare_tantalized_page_safe_effect = yes } }
domcom_ui_set_page_inner_household = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:inner_household } domcom_prepare_inner_household_effect = yes } }
domcom_ui_set_page_secrets = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:secrets } domcom_prepare_owned_page_safe_effect = yes } }
domcom_ui_set_page_imperial = {
    scope = character
    effect = {
        set_variable = { name = domcom_ui_page value = flag:imperial }
        domcom_prepare_lick_page_safe_effect = yes
    }
}
domcom_ui_set_page_ledger = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:ledger } } }
domcom_ui_set_page_reputation = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:reputation } domcom_refresh_reputation_effect = yes } }
domcom_ui_set_page_the_d = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:the_d } domcom_the_d_prepare_roster_effect = yes } }
domcom_ui_set_page_war_board = {
    scope = character
    effect = {
        set_variable = { name = domcom_ui_page value = flag:war_board }
        if = {
            limit = { NOT = { has_character_flag = domcom_intervention_budget_initialized_v2625 } }
            set_variable = { name = domcom_intervention_tokens value = 2 }
            add_character_flag = domcom_intervention_budget_initialized_v2625
        }
        if = { limit = { NOT = { has_variable = domcom_wb_refresh_id } } set_variable = { name = domcom_wb_refresh_id value = 0 } }
        change_variable = { name = domcom_wb_refresh_id add = 1 }
        domcom_rebuild_war_browser_effect = yes
    }
}

domcom_ui_set_page_help = { scope = character effect = { set_variable = { name = domcom_ui_page value = flag:help } } }



# Lick the Tip — lazy roster controls.
domcom_ui_lick_test_ready = { scope = character is_shown = { NOT = { has_character_flag = domcom_lick_test_cooldown } } }
domcom_ui_lick_test_cooldown = { scope = character is_shown = { has_character_flag = domcom_lick_test_cooldown } }
domcom_ui_lick_has_results = { scope = character is_shown = { has_character_flag = domcom_lick_has_results } }
domcom_ui_lick_no_results = { scope = character is_shown = { NOT = { has_character_flag = domcom_lick_has_results } } }

domcom_ui_lick_sort_status = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:status } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_oaths = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:oaths } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_rank = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:rank } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_chance = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:chance } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_opinion = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:opinion } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_obedience = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:obedience } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_xp = { scope = character effect = { set_variable = { name = domcom_ui_lick_sort_mode value = flag:xp } set_variable = { name = domcom_ui_lick_page value = 0 } domcom_rebuild_lick_roster_effect = yes } }
domcom_ui_lick_sort_reverse = {
    scope = character
    effect = {
        if = { limit = { NOT = { exists = var:domcom_ui_lick_sort_direction } } set_variable = { name = domcom_ui_lick_sort_direction value = flag:ascending } }
        else_if = { limit = { var:domcom_ui_lick_sort_direction = flag:ascending } set_variable = { name = domcom_ui_lick_sort_direction value = flag:descending } }
        else = { set_variable = { name = domcom_ui_lick_sort_direction value = flag:ascending } }
        set_variable = { name = domcom_ui_lick_page value = 0 }
        domcom_rebuild_lick_roster_effect = yes
    }
}
domcom_ui_lick_prev = { scope = character is_valid = { has_variable = domcom_ui_lick_page var:domcom_ui_lick_page > 0 } effect = { change_variable = { name = domcom_ui_lick_page subtract = 1 } domcom_build_lick_page_effect = yes } }
domcom_ui_lick_next = { scope = character is_valid = { has_variable = domcom_ui_lick_page has_variable = domcom_ui_lick_last_page var:domcom_ui_lick_page < var:domcom_ui_lick_last_page } effect = { change_variable = { name = domcom_ui_lick_page add = 1 } domcom_build_lick_page_effect = yes } }
domcom_ui_lick_first = { scope = character is_valid = { has_variable = domcom_ui_lick_page var:domcom_ui_lick_page > 0 } effect = { set_variable = { name = domcom_ui_lick_page value = 0 } domcom_build_lick_page_effect = yes } }

domcom_ui_lick_row_complied = { scope = character is_shown = { has_variable = domcom_lick_last_result var:domcom_lick_last_result = 1 NOT = { has_character_flag = domcom_lick_bound_active_recently } } }
domcom_ui_lick_row_refused = { scope = character is_shown = { has_variable = domcom_lick_last_result var:domcom_lick_last_result = 0 } }
domcom_ui_lick_row_bound = { scope = character is_shown = { has_character_flag = domcom_lick_bound_active_recently } }
domcom_ui_lick_role_courtier = { scope = character is_shown = { has_variable = domcom_lick_role var:domcom_lick_role = 1 } }
domcom_ui_lick_role_vassal = { scope = character is_shown = { has_variable = domcom_lick_role var:domcom_lick_role = 2 } }
domcom_ui_lick_role_vassal_courtier = { scope = character is_shown = { has_variable = domcom_lick_role var:domcom_lick_role = 3 } }

domcom_ui_audit_dominion_records = {
    scope = character
    is_valid = { is_alive = yes is_ai = no }
    effect = {
        # A manual audit is the explicit full retroactive repair path. Reconstruct missing global/local
        # membership first, then let the integrity audit remove any unsupported legacy attribution.
        domcom_reconstruct_cuck_registries_effect = yes
        domcom_reconstruct_terminal_devotion_registries_effect = yes
        domcom_audit_relationship_integrity_effect = yes
        # A manual audit performs the same migration work, so prevent the registry rebuild below from
        # immediately running the one-time pass a second time and zeroing the summary counters.
        add_character_flag = domcom_cospouse_integrity_migrated_1101
        # Rebuild this Patron's local registries immediately so the Ledger reflects repairs without
        # waiting for the next monthly maintenance pulse.
        remove_character_flag = domcom_registry_bootstrap_092
        domcom_repair_patron_registries_effect = yes
        domcom_refresh_current_ui_page_effect = yes
        trigger_event = { id = domcom.940 }
    }
}

domcom_ui_is_page_overview = { scope = character is_shown = { OR = { NOT = { exists = var:domcom_ui_page } var:domcom_ui_page = flag:overview } } }
domcom_ui_is_page_cucked = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:cucked } }
domcom_ui_is_page_world_cucks = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:world_cucks } }
domcom_ui_is_page_owned = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:owned } }
domcom_ui_is_page_endowments = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:endowments } }
domcom_ui_is_page_outcomes = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:outcomes } }
domcom_ui_is_page_lovers = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:lovers } }
domcom_ui_is_page_prospects = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:prospects } }
domcom_ui_is_page_blood = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:blood } }
domcom_ui_is_page_tantalized = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:tantalized } }
domcom_ui_is_page_inner_household = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:inner_household } }
domcom_ui_is_page_secrets = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:secrets } }
domcom_ui_is_page_imperial = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:imperial } }
domcom_ui_is_page_ledger = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:ledger } }
domcom_ui_is_page_body_reroll = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:body_reroll } }
domcom_ui_is_page_reputation = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:reputation } }
domcom_ui_is_page_the_d = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:the_d } }
domcom_ui_is_page_war_board = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:war_board } }
domcom_ui_is_page_help = { scope = character is_shown = { exists = var:domcom_ui_page var:domcom_ui_page = flag:help } }

domcom_ui_outcome_feminized = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:feminized } }
domcom_ui_outcome_household = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:household } }
domcom_ui_outcome_devotion = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:devotion } }
domcom_ui_outcome_bound = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:bound_ruler } }
domcom_ui_outcome_noble = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:noble_family } }
domcom_ui_outcome_surrendered = { scope = character is_shown = { has_variable = domcom_terminal_outcome var:domcom_terminal_outcome = flag:surrendered } }
domcom_ui_world_cuck_origin_known = { scope = character is_shown = { has_variable = domcom_cuck_origin_patron } }
domcom_ui_world_cuck_origin_unknown = { scope = character is_shown = { NOT = { has_variable = domcom_cuck_origin_patron } } }

domcom_ui_cuck_link_soulmate = { scope = character is_shown = { has_variable = domcom_ui_compromised_partner has_variable = domcom_ui_compromised_link_type var:domcom_ui_compromised_link_type = flag:soulmate } }
domcom_ui_cuck_link_lover = { scope = character is_shown = { has_variable = domcom_ui_compromised_partner has_variable = domcom_ui_compromised_link_type var:domcom_ui_compromised_link_type = flag:lover } }
domcom_ui_cuck_link_bound = { scope = character is_shown = { has_variable = domcom_ui_compromised_partner has_variable = domcom_ui_compromised_link_type var:domcom_ui_compromised_link_type = flag:bound } }
domcom_ui_cuck_link_blood = { scope = character is_shown = { has_variable = domcom_ui_compromised_partner has_variable = domcom_ui_compromised_link_type var:domcom_ui_compromised_link_type = flag:blood } }
domcom_ui_cuck_link_historical = { scope = character is_shown = { has_variable = domcom_ui_compromised_partner has_variable = domcom_ui_compromised_link_type var:domcom_ui_compromised_link_type = flag:historical } }
domcom_ui_cuck_link_none = { scope = character is_shown = { NOT = { has_variable = domcom_ui_compromised_partner } } }

domcom_ui_alpha_check = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        age >= 18 is_alive = yes is_imprisoned = no
        domcom_alpha_budget_available_trigger = yes
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_alpha_check }
            is_alive = yes age >= 18 is_imprisoned = no
            has_character_flag = domcom_cucked
            has_variable = domcom_cuck_patron
            var:domcom_cuck_patron = root
            NOT = { AND = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 1000 } }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_alpha_check } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_alpha_check days = 1 } }
            change_variable = { name = domcom_alpha_attempts add = 1 }
            domcom_spend_alpha_budget_effect = yes
            save_scope_as = domcom_ui_patron
            scope:target = {
                add_character_flag = { flag = domcom_recent_alpha_challenge days = 365 }
                set_variable = { name = domcom_last_alpha_patron value = root }
            }
            scope:target = {
                set_variable = { name = domcom_ui_alpha_chance value = domcom_ui_alpha_check_chance_value }
                random = {
                    chance = var:domcom_ui_alpha_chance
                    domcom_own_cuck_from_ui_effect = yes
                    add_character_flag = domcom_ui_alpha_success
                }
            }
            if = {
                limit = { scope:target = { has_character_flag = domcom_ui_alpha_success } }
                scope:target = { remove_character_flag = domcom_ui_alpha_success }
                domcom_dominion_success_stress_effect = yes
                change_variable = { name = domcom_alpha_successes add = 1 }
                send_interface_toast = { type = event_toast_effect_good title = domcom_alpha_check_success_toast left_icon = root right_icon = scope:target }
            }
            else = {
                domcom_dominion_rejection_stress_effect = yes
                scope:target = {
                    if = { limit = { NOT = { has_variable = domcom_cuck_xp } } set_variable = { name = domcom_cuck_xp value = 100 } }
                    change_variable = { name = domcom_cuck_xp add = -50 }
                    if = { limit = { var:domcom_cuck_xp < 100 } set_variable = { name = domcom_cuck_xp value = 100 } }
                    add_opinion = { target = root modifier = domcom_resisted_alpha_opinion }
                    domcom_refresh_cuck_stage_effect = yes
                }
                change_variable = { name = domcom_alpha_failures add = 1 }
                send_interface_toast = { type = event_toast_effect_bad title = domcom_alpha_check_failure_toast left_icon = root right_icon = scope:target }
            }
            domcom_prepare_cucked_page_safe_effect = yes
        }
    }
}

domcom_ui_receive_prospect = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        age >= 18 is_alive = yes
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_receive_prospect }
            is_alive = yes age >= 18
            has_variable = domcom_crush_patron
            var:domcom_crush_patron = root
            OR = { has_relation_crush = root has_relation_lover = root has_relation_soulmate = root }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_receive_prospect } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_receive_prospect days = 1 } }
            scope:target = { save_scope_as = domcom_admirer }
            remove_variable = domcom_ui_open
            trigger_event = { id = domcom.200 days = 1 }
        }
    }
}

domcom_ui_acknowledge_blood = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes exists = house
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_acknowledge_blood }
            is_alive = yes
            OR = {
                real_father ?= root
                mother ?= root
                AND = {
                    father ?= root
                    NOT = { exists = real_father }
                }
            }
            OR = { NOT = { exists = house } NOT = { house = root.house } }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_acknowledge_blood } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_acknowledge_blood days = 1 } }
            save_scope_as = domcom_ack_patron
            scope:target = { domcom_acknowledge_child_effect = yes }
            send_interface_toast = { type = event_toast_effect_good title = domcom_acknowledge_blood_toast left_icon = root right_icon = scope:target }
            domcom_prepare_blood_page_safe_effect = yes
        }
    }
}

# 2.6.56 — visible Blood & Parentage action. This uses CK3's stored real_father and never guesses.
domcom_ui_reveal_parentage = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes
        scope:target = {
            is_alive = yes
            exists = real_father
            exists = father
            NOT = { father = real_father }
            OR = {
                father = root
                mother = root
                real_father = root
            }
        }
    }
    effect = {
        save_scope_as = domcom_parentage_revealer
        scope:target = { domcom_reveal_true_parentage_effect = yes }
        send_interface_toast = {
            type = event_toast_effect_neutral
            title = domcom_reveal_true_parentage_toast
            left_icon = root
            right_icon = scope:target
        }
        domcom_prepare_blood_page_safe_effect = yes
    }
}

domcom_ui_acknowledge_all_blood = {
    scope = character
    is_valid = {
        NOT = { has_character_flag = domcom_ui_lock_acknowledge_all_blood }
        is_alive = yes exists = house has_variable_list = domcom_ui_blood_children
    }
    effect = {
        if = {
            limit = { NOT = { has_character_flag = domcom_ui_lock_acknowledge_all_blood } }
            add_character_flag = { flag = domcom_ui_lock_acknowledge_all_blood days = 1 }
            remove_variable = domcom_ui_open
            trigger_event = { id = domcom.310 days = 1 } 
        }
    }
}

domcom_ui_embarrass_owned = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes age >= 18
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_embarrass_owned }
            domcom_can_attempt_embarrass_owned_trigger = { PATRON = root }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_embarrass_owned } domcom_can_attempt_embarrass_owned_trigger = { PATRON = root } } }
            save_scope_as = domcom_public_patron
            scope:target = {
                add_character_flag = { flag = domcom_ui_lock_embarrass_owned days = 1 }
                save_scope_as = domcom_gui_humiliated_cuck
                save_scope_as = domcom_humiliated_cuck
            }
            remove_variable = domcom_ui_open
            trigger_event = { id = domcom.320 days = 1 }
        }
    }
}

domcom_ui_demand_abdication = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes exists = house
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_demand_abdication }
            domcom_can_demand_abdication_for_blood_trigger = { PATRON = root }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_demand_abdication } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_demand_abdication days = 1 } }
            save_scope_as = domcom_ui_patron
            save_scope_as = domcom_abdication_patron
            scope:target = {
                add_character_flag = domcom_ui_abdication_failed_roll
                random = {
                    chance = domcom_ui_abdication_chance_value
                    remove_character_flag = domcom_ui_abdication_failed_roll
                    domcom_abdicate_to_blood_effect = yes
                    add_character_flag = domcom_ui_abdication_success
                }
                if = {
                    limit = { has_character_flag = domcom_ui_abdication_failed_roll }
                    remove_character_flag = domcom_ui_abdication_failed_roll
                    if = { limit = { NOT = { has_variable = domcom_cuck_xp } } set_variable = { name = domcom_cuck_xp value = 0 } }
                    change_variable = { name = domcom_cuck_xp add = 100 }
                    domcom_refresh_cuck_stage_effect = yes
                }
            }
            if = {
                limit = { scope:target = { has_character_flag = domcom_ui_abdication_success } }
                scope:target = { remove_character_flag = domcom_ui_abdication_success }
                send_interface_toast = { type = event_toast_effect_good title = domcom_abdication_success_toast left_icon = root right_icon = scope:target }
            }
            else = {
                send_interface_toast = { type = event_toast_effect_bad title = domcom_abdication_failure_toast left_icon = root right_icon = scope:target }
            }
            domcom_prepare_owned_page_safe_effect = yes
        }
    }
}

domcom_ui_refresh_intelligence = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_refresh_intelligence } is_alive = yes has_character_flag = domcom_owned_cuck has_variable = domcom_patron var:domcom_patron = root }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_refresh_intelligence } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_refresh_intelligence days = 1 } }
            save_scope_as = domcom_secret_patron
            scope:target = {
                save_scope_as = domcom_intelligence_subject
                domcom_reveal_subject_network_effect = yes
            }
            send_interface_toast = { type = event_toast_effect_neutral title = DOMCOM_UI_INTELLIGENCE_REFRESHED left_icon = root right_icon = scope:target }
            remove_variable = domcom_ui_open
            trigger_event = { id = domcom.700 days = 1 }
        }
    }
}

domcom_ui_resolve_collapse = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_resolve_collapse }
            is_alive = yes has_character_flag = domcom_owned_cuck
            has_variable = domcom_patron var:domcom_patron = root
            has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 1000
            NOT = { has_character_flag = domcom_collapse_pending }
            NOT = { has_character_flag = domcom_collapse_resolved }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_resolve_collapse } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_resolve_collapse days = 1 } }
            remove_variable = domcom_ui_open
            scope:target = { domcom_open_final_collapse_event_effect = yes }
        }
    }
}

domcom_ui_begin_imperial_tribute = {
    scope = character
    is_valid = {
        is_alive = yes
        is_ai = no
        age >= 18
        NOT = { has_character_flag = domcom_lick_test_cooldown }
    }
    effect = {
        if = {
            limit = { NOT = { has_character_flag = domcom_ui_lock_begin_tribute } }
            add_character_flag = { flag = domcom_ui_lock_begin_tribute days = 1 }
            domcom_call_lick_test_effect = yes
            set_variable = { name = domcom_ui_page value = flag:imperial }
            # Build only the newly requested Lick page after resolution; ordinary Communion open remains lazy.
            domcom_prepare_lick_page_safe_effect = yes
            # Keep the Communion window open after the loyalty test.
            set_variable = { name = domcom_ui_open value = yes }
        }
    }
}

domcom_ui_sort_rank = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:rank } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_endowment = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:length } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_mastery = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:mastery } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_length = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:length } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_girth = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:girth } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_endowment_view_men = { scope = character effect = { set_variable = { name = domcom_ui_endowment_view value = flag:men } set_variable = { name = domcom_ui_sort_mode value = flag:length } domcom_reset_ui_paging_effect = yes domcom_prepare_endowments_roster_safe_effect = yes } }
domcom_ui_endowment_view_women = { scope = character effect = { set_variable = { name = domcom_ui_endowment_view value = flag:women } set_variable = { name = domcom_ui_sort_mode value = flag:pref_length } domcom_reset_ui_paging_effect = yes domcom_prepare_endowment_preferences_roster_safe_effect = yes } }
domcom_ui_endowment_view_breasts = { scope = character effect = { set_variable = { name = domcom_ui_endowment_view value = flag:breasts } set_variable = { name = domcom_ui_sort_mode value = flag:breast_fullness } domcom_reset_ui_paging_effect = yes domcom_prepare_breast_profiles_roster_safe_effect = yes } }
domcom_ui_endowment_view_breast_prefs = { scope = character effect = { set_variable = { name = domcom_ui_endowment_view value = flag:breast_prefs } set_variable = { name = domcom_ui_sort_mode value = flag:pref_breast_both } domcom_reset_ui_paging_effect = yes domcom_prepare_breast_preferences_roster_safe_effect = yes } }
domcom_ui_endowment_view_is_men = { scope = character is_shown = { OR = { NOT = { has_variable = domcom_ui_endowment_view } var:domcom_ui_endowment_view = flag:men } } }
domcom_ui_endowment_view_is_women = { scope = character is_shown = { has_variable = domcom_ui_endowment_view var:domcom_ui_endowment_view = flag:women } }
domcom_ui_endowment_view_is_breasts = { scope = character is_shown = { has_variable = domcom_ui_endowment_view var:domcom_ui_endowment_view = flag:breasts } }
domcom_ui_endowment_view_is_breast_prefs = { scope = character is_shown = { has_variable = domcom_ui_endowment_view var:domcom_ui_endowment_view = flag:breast_prefs } }
domcom_ui_sort_pref_length = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_length } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_pref_girth = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_girth } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_pref_both = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_length } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_breast_fullness = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:breast_fullness } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_breast_mastery = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:breast_mastery } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_bust = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:bust } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_underbust = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:underbust } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_pref_breast_fullness = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_breast_fullness } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_pref_breast_frame = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_breast_frame } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_pref_breast_both = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:pref_breast_both } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }

domcom_ui_sort_alpha = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:alpha } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_xp = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:xp } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_diplomacy = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:diplomacy } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_martial = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:martial } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_stewardship = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:stewardship } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_intrigue = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:intrigue } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_learning = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:learning } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_prowess = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:prowess } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_total = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:total } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_prize = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:prize } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_tribute = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:tribute } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_sort_reverse = {
    scope = character
    effect = {
        if = { limit = { NOT = { exists = var:domcom_ui_sort_direction } } set_variable = { name = domcom_ui_sort_direction value = flag:ascending } }
        else_if = { limit = { var:domcom_ui_sort_direction = flag:ascending } set_variable = { name = domcom_ui_sort_direction value = flag:descending } }
        else = { set_variable = { name = domcom_ui_sort_direction value = flag:ascending } }
        domcom_reset_ui_paging_effect = yes
        domcom_rebuild_ui_rosters_effect = yes
    }
}
domcom_ui_filter_all = { scope = character effect = { set_variable = { name = domcom_ui_filter_mode value = flag:all } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_filter_landed = { scope = character effect = { set_variable = { name = domcom_ui_filter_mode value = flag:landed } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_filter_dukeplus = { scope = character effect = { set_variable = { name = domcom_ui_filter_mode value = flag:dukeplus } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_filter_kingplus = { scope = character effect = { set_variable = { name = domcom_ui_filter_mode value = flag:kingplus } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }

domcom_ui_demand_tribute_now = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes
        scope:target = {
            NOT = { has_character_flag = domcom_ui_lock_demand_tribute }
            is_alive = yes has_character_flag = domcom_owned_cuck
            has_variable = domcom_patron var:domcom_patron = root
            monthly_character_income > 0
            NOT = { has_character_flag = domcom_tribute_prepaid }
        }
    }
    effect = {
        if = {
            limit = { scope:target = { NOT = { has_character_flag = domcom_ui_lock_demand_tribute } } }
            scope:target = { add_character_flag = { flag = domcom_ui_lock_demand_tribute days = 1 } }
            scope:target = { domcom_demand_annual_tribute_effect = yes }
            send_interface_toast = { type = event_toast_effect_good title = DOMCOM_UI_TRIBUTE_ADVANCE_TOAST left_icon = root right_icon = scope:target }
            domcom_prepare_owned_page_safe_effect = yes
        }
    }
}

domcom_ui_alpha_gauntlet = {
    scope = character
    is_valid = {
        NOT = { has_character_flag = domcom_ui_lock_alpha_gauntlet }
        is_alive = yes age >= 18 has_variable_list = domcom_ui_cucked_raw
        # A Gauntlet is a run, not a bulk button. Four fresh rivals minimum.
        any_in_list = {
            variable = domcom_ui_cucked_raw
            count >= 4
            is_alive = yes age >= 18 has_character_flag = domcom_cucked
            NOT = { has_character_flag = domcom_owned_cuck }
            has_variable = domcom_cuck_patron var:domcom_cuck_patron = root
            NOT = {
                AND = {
                    has_character_flag = domcom_recent_alpha_challenge
                    has_variable = domcom_last_alpha_patron
                    var:domcom_last_alpha_patron = root
                }
            }
        }
    }
    effect = {
        if = {
            limit = { NOT = { has_character_flag = domcom_ui_lock_alpha_gauntlet } }
            add_character_flag = { flag = domcom_ui_lock_alpha_gauntlet days = 1 }
            domcom_initialize_ledger_counters_effect = yes
            remove_character_flag = domcom_gauntlet_failed
            set_variable = { name = domcom_gauntlet_eligible value = 0 }
            set_variable = { name = domcom_gauntlet_cleared value = 0 }
            set_variable = { name = domcom_gauntlet_refused value = 0 }
            set_variable = { name = domcom_gauntlet_multiplier value = 0.90 }
            save_scope_as = domcom_gauntlet_patron
            domcom_prepare_cucked_page_safe_effect = yes
            save_scope_as = domcom_gauntlet_patron
            every_in_list = {
                variable = domcom_ui_cucked_raw
                limit = {
                    is_alive = yes age >= 18 has_character_flag = domcom_cucked
                    NOT = { has_character_flag = domcom_owned_cuck }
                    has_variable = domcom_cuck_patron var:domcom_cuck_patron = scope:domcom_gauntlet_patron
                    NOT = {
                        AND = {
                            has_character_flag = domcom_recent_alpha_challenge
                            has_variable = domcom_last_alpha_patron
                            var:domcom_last_alpha_patron = scope:domcom_gauntlet_patron
                        }
                    }
                }
                scope:domcom_gauntlet_patron = { change_variable = { name = domcom_gauntlet_eligible add = 1 } }
            }
            if = {
              limit = { var:domcom_gauntlet_eligible >= 4 }
              ordered_in_list = {
                variable = domcom_ui_cucked_raw
                order_by = domcom_sort_alpha_desc_value
                max = 500 check_range_bounds = no
                limit = {
                    is_alive = yes age >= 18 has_character_flag = domcom_cucked NOT = { has_character_flag = domcom_owned_cuck }
                    has_variable = domcom_cuck_patron var:domcom_cuck_patron = scope:domcom_gauntlet_patron
                    NOT = {
                        AND = {
                            has_character_flag = domcom_recent_alpha_challenge
                            has_variable = domcom_last_alpha_patron
                            var:domcom_last_alpha_patron = scope:domcom_gauntlet_patron
                        }
                    }
                }
                if = {
                    save_scope_as = domcom_gauntlet_target
                    add_character_flag = { flag = domcom_recent_alpha_challenge days = 365 }
                    set_variable = { name = domcom_last_alpha_patron value = scope:domcom_gauntlet_patron }
                    add_character_flag = domcom_gauntlet_failed_roll
                    random = {
                        chance = domcom_gauntlet_alpha_chance_value
                        remove_character_flag = domcom_gauntlet_failed_roll
                        scope:domcom_gauntlet_patron = {
                            save_scope_as = domcom_owner
                            change_variable = { name = domcom_alpha_attempts add = 1 }
                            change_variable = { name = domcom_alpha_successes add = 1 }
                            change_variable = { name = domcom_gauntlet_cleared add = 1 }
                            change_variable = { name = domcom_gauntlet_multiplier add = -0.03 }
                        }
                        domcom_own_cuck_generic_effect = yes
                    }
                    if = {
                        limit = { has_character_flag = domcom_gauntlet_failed_roll }
                        remove_character_flag = domcom_gauntlet_failed_roll
                        # Match the normal post-cuck Alpha rule: a resisted check restores 50 XP of
                        # resistance rather than rewarding failure.
                        if = { limit = { NOT = { has_variable = domcom_cuck_xp } } set_variable = { name = domcom_cuck_xp value = 0 } }
                        if = { limit = { var:domcom_cuck_xp >= 50 } change_variable = { name = domcom_cuck_xp subtract = 50 } }
                        else = { set_variable = { name = domcom_cuck_xp value = 0 } }
                        add_opinion = { target = scope:domcom_gauntlet_patron modifier = domcom_resisted_alpha_opinion }
                        domcom_refresh_cuck_stage_effect = yes
                        scope:domcom_gauntlet_patron = {
                            add_character_flag = domcom_gauntlet_failed
                            change_variable = { name = domcom_alpha_attempts add = 1 }
                            change_variable = { name = domcom_alpha_failures add = 1 }
                            change_variable = { name = domcom_gauntlet_refused add = 1 }
                        }
                        save_scope_as = domcom_gauntlet_failed_target
                    }
                }
              }
              # Flawless: every rival on the roster gave way.
              if = {
                  limit = { NOT = { has_character_flag = domcom_gauntlet_failed } var:domcom_gauntlet_cleared >= var:domcom_gauntlet_eligible }
                  add_character_modifier = { modifier = domcom_dominion_unchallenged_modifier years = 5 }
                  change_variable = { name = domcom_perfect_gauntlets add = 1 }
                  send_interface_toast = { type = event_toast_effect_good title = DOMCOM_UI_GAUNTLET_PERFECT_TOAST left_icon = root }
              }
              # A real night: some broke, some held. Prestige scales with the count, so a large roster is
              # worth running even when it cannot be swept.
              else_if = {
                  limit = { var:domcom_gauntlet_cleared >= 1 }
                  add_prestige = domcom_gauntlet_partial_prestige_value
                  send_interface_toast = {
                      type = event_toast_effect_good
                      title = DOMCOM_UI_GAUNTLET_PARTIAL_TOAST
                      left_icon = root
                      right_icon = scope:domcom_gauntlet_failed_target
                  }
              }
              # Routed. Nobody gave way.
              else = {
                  add_prestige = -100
                  send_interface_toast = {
                      type = event_toast_effect_bad
                      title = DOMCOM_UI_GAUNTLET_ROUTED_TOAST
                      left_icon = root
                      right_icon = scope:domcom_gauntlet_failed_target
                  }
              }
            }
            else = {
              # Too few fresh rivals. Nothing is spent and no one is challenged.
              send_interface_toast = { type = event_toast_effect_neutral title = DOMCOM_UI_GAUNTLET_TOO_FEW_TOAST left_icon = root }
            }
            remove_character_flag = domcom_gauntlet_failed
            remove_variable = domcom_gauntlet_multiplier
            domcom_prepare_cucked_page_safe_effect = yes
        }
    }
}

# World Cucks counterpart to the personal Alpha Gauntlet. It resolves up to 500 fresh, adult, same-sex
# World Cucks in one run. Unlike the personal Gauntlet there is no artificial 90% opener or -3% snowball;
# targets simply use the ordinary Alpha contest without credit for Cuck XP earned under somebody else.
# World Alpha Tournament. The World Cuck registry supplies evidence; competitors are the unique living
# Patrons who actually created those records. The tournament itself never rewrites historical cuck attribution.
domcom_ui_world_alpha_gauntlet = {
    scope = character
    is_valid = {
        NOT = { has_character_flag = domcom_ui_lock_world_alpha_gauntlet }
        OR = {
            NOT = { has_character_flag = domcom_world_alpha_tournament_recent }
            # 2.0.5 could consume the cooldown before recording a champion. Treat that exact
            # stale state as retryable so existing saves repair themselves without console work.
            AND = {
                has_character_flag = domcom_world_alpha_tournament_recent
                NOT = { has_variable = domcom_world_tournament_last_champion }
            }
        }
        is_alive = yes
        age >= 18
        is_imprisoned = no
        has_variable_list = domcom_ui_world_cucks_raw
        any_in_list = {
            variable = domcom_ui_world_cucks_raw
            count >= 8
            is_alive = yes
            age >= 18
            has_character_flag = domcom_cucked
        }
    }
    effect = {
        if = {
            limit = {
                NOT = { has_character_flag = domcom_ui_lock_world_alpha_gauntlet }
                OR = {
                    NOT = { has_character_flag = domcom_world_alpha_tournament_recent }
                    AND = {
                        has_character_flag = domcom_world_alpha_tournament_recent
                        NOT = { has_variable = domcom_world_tournament_last_champion }
                    }
                }
            }
            add_character_flag = { flag = domcom_ui_lock_world_alpha_gauntlet days = 1 }
            domcom_initialize_ledger_counters_effect = yes
            save_scope_as = domcom_world_tournament_host
            domcom_world_alpha_tournament_run_effect = yes
            domcom_prepare_world_cucks_effect = yes
        }
    }
}

# Persistent recovery path for tournament reporting. If the automatic event is obscured by the custom
# window or another UI mod, the player can reopen the exact stored result without rerunning the bracket.
domcom_ui_world_alpha_last_results = {
    scope = character
    is_valid = {
        has_variable = domcom_world_tournament_last_champion
        has_variable = domcom_world_tournament_last_field_size
    }
    effect = {
        trigger_event = { id = domcom_alpha.300 }
    }
}



domcom_ui_toggle_measurement_units = {
    scope = character
    is_valid = { is_playable_character = yes }
    effect = {
        if = {
            limit = { has_global_variable = domcom_metric_units }
            remove_global_variable = domcom_metric_units
        }
        else = {
            set_global_variable = { name = domcom_metric_units value = yes }
        }
        send_interface_toast = {
            type = event_toast_effect_neutral
            title = DOMCOM_UI_UNITS_CHANGED_TOAST
            left_icon = root
        }
    }
}

domcom_ui_debug_tools_visible = {
    scope = character
    is_shown = { NOT = { has_game_rule = domcom_debug_tools_off } }
}

domcom_ui_rebuild_endowment_display = {
    scope = character
    is_valid = { is_playable_character = yes }
    effect = {
        # Rebuild Dominion's own derived display first, then let compatibility layers
        # perform the final authoritative handoff. Running the external reconciliation
        # first allowed the rebuild itself to re-add Dominion's physical Endowment trait
        # on paused old saves before an external mod's delayed ready flag existed.
        domcom_rebuild_display_effect = yes
        domcom_external_manual_endowment_reconcile_effect = yes
        domcom_refresh_current_ui_page_effect = yes
        send_interface_toast = { type = event_toast_effect_neutral title = DOMCOM_UI_REBUILD_DONE_TOAST left_icon = root }
    }
}

domcom_ui_reroll_endowments = {
    scope = character
    is_valid = { is_playable_character = yes }
    effect = {
        set_variable = { name = domcom_ui_page value = flag:body_reroll }
        domcom_prepare_body_reroll_roster_effect = yes
    }
}

domcom_ui_body_reroll_back = { scope = character effect = { domcom_clear_body_reroll_selection_effect = yes set_variable = { name = domcom_ui_page value = flag:ledger } } }
domcom_ui_body_reroll_toggle = {
    scope = character
    saved_scopes = { target }
    is_valid = { scope:target = { is_alive = yes age >= 18 OR = { is_female = yes domcom_should_express_endowment_trigger = yes } } }
    effect = {
        if = { limit = { scope:target = { has_character_flag = domcom_ui_body_reroll_selected } } scope:target = { remove_character_flag = domcom_ui_body_reroll_selected } }
        else = { scope:target = { add_character_flag = domcom_ui_body_reroll_selected } }
        domcom_recount_body_reroll_selected_effect = yes
    }
}
domcom_ui_body_reroll_select_all = {
    scope = character
    is_valid = { has_variable_list = domcom_ui_body_reroll_raw }
    effect = { every_in_list = { variable = domcom_ui_body_reroll_raw add_character_flag = domcom_ui_body_reroll_selected } domcom_recount_body_reroll_selected_effect = yes }
}
domcom_ui_body_reroll_clear = {
    scope = character
    is_valid = { has_variable_list = domcom_ui_body_reroll_raw }
    effect = { every_in_list = { variable = domcom_ui_body_reroll_raw remove_character_flag = domcom_ui_body_reroll_selected } domcom_recount_body_reroll_selected_effect = yes }
}
domcom_ui_body_reroll_apply = {
    scope = character
    is_valid = { has_variable_list = domcom_ui_body_reroll_raw any_in_list = { variable = domcom_ui_body_reroll_raw has_character_flag = domcom_ui_body_reroll_selected } }
    effect = { domcom_apply_selected_body_rerolls_effect = yes }
}
domcom_ui_body_reroll_world = { scope = character is_valid = { is_playable_character = yes } effect = { trigger_event = { id = domcom.900 } } }
domcom_ui_body_reroll_prev = { scope = character is_valid = { has_variable = domcom_ui_body_reroll_page var:domcom_ui_body_reroll_page > 0 } effect = { change_variable = { name = domcom_ui_body_reroll_page subtract = 1 } domcom_build_body_reroll_page_effect = yes } }
domcom_ui_body_reroll_next = { scope = character is_valid = { has_variable = domcom_ui_body_reroll_page has_variable = domcom_ui_body_reroll_last_page var:domcom_ui_body_reroll_page < var:domcom_ui_body_reroll_last_page } effect = { change_variable = { name = domcom_ui_body_reroll_page add = 1 } domcom_build_body_reroll_page_effect = yes } }
domcom_ui_body_reroll_first = { scope = character is_valid = { has_variable = domcom_ui_body_reroll_page var:domcom_ui_body_reroll_page > 0 } effect = { set_variable = { name = domcom_ui_body_reroll_page value = 0 } domcom_build_body_reroll_page_effect = yes } }
domcom_ui_body_reroll_target_selected = { scope = character is_shown = { has_character_flag = domcom_ui_body_reroll_selected } }
domcom_ui_body_reroll_target_unselected = { scope = character is_shown = { NOT = { has_character_flag = domcom_ui_body_reroll_selected } } }
domcom_ui_body_reroll_target_has_endowment = { scope = character is_shown = { age >= 18 domcom_should_express_endowment_trigger = yes has_variable = domcom_length_tenths has_variable = domcom_girth_tenths } }
domcom_ui_body_reroll_target_has_breasts = { scope = character is_shown = { age >= 18 is_female = yes has_variable = domcom_bust_tenths has_variable = domcom_underbust_tenths } }

domcom_ui_receive_all_prospects = {
    scope = character
    is_valid = {
        NOT = { has_character_flag = domcom_ui_lock_receive_all }
        age >= 18 is_alive = yes
        has_variable_list = domcom_ui_prospects_raw
        any_in_list = {
            variable = domcom_ui_prospects_raw
            is_alive = yes age >= 18
            has_variable = domcom_crush_patron
            var:domcom_crush_patron = root
        }
    }
    effect = {
        add_character_flag = { flag = domcom_ui_lock_receive_all days = 1 }
        remove_variable = domcom_ui_open
        save_scope_as = domcom_receive_all_patron
        every_in_list = {
            variable = domcom_ui_prospects_raw
            limit = {
                is_alive = yes age >= 18
                has_variable = domcom_crush_patron
                var:domcom_crush_patron = scope:domcom_receive_all_patron
            }
            add_character_flag = { flag = domcom_ui_lock_receive_prospect days = 1 }
            save_scope_as = domcom_admirer
            # Staggered rather than fired together. domcom.200 is one popup per prospect, so releasing
            # twenty at once would just relocate the flood the player is trying to escape.
            scope:domcom_receive_all_patron = { trigger_event = { id = domcom.200 days = { 1 20 } } }
        }
        domcom_prepare_prospects_page_safe_effect = yes
    }
}

domcom_ui_repair_collapses = {
    scope = character
    is_valid = {
        NOT = { has_character_flag = domcom_ui_lock_repair_collapses }
        age >= 18 is_alive = yes
        any_living_character = {
            OR = {
                is_landed = yes
                is_landless_adventurer = yes
                any_held_title = { is_noble_family_title = yes }
                any_held_title = { is_nomad_title = yes }
            }
            OR = {
                AND = {
                    has_character_flag = domcom_collapse_seizure_failed
                    has_variable = domcom_patron
                    var:domcom_patron = root
                }
                AND = {
                    has_character_flag = domcom_collapse_resolved
                    has_variable = domcom_patron
                    var:domcom_patron = root
                }
            }
        }
    }
    effect = {
        add_character_flag = { flag = domcom_ui_lock_repair_collapses days = 1 }
        domcom_repair_failed_collapses_effect = yes
        domcom_prepare_cucked_page_safe_effect = yes
    }
}


domcom_ui_toggle_adultery_secrets = {
    scope = character
    effect = {
        if = {
            limit = { has_character_flag = domcom_allow_adultery_secrets }
            remove_character_flag = domcom_allow_adultery_secrets
        }
        else = { add_character_flag = domcom_allow_adultery_secrets }
    }
}

domcom_ui_adultery_secrets_allowed = {
    scope = character
    is_shown = { has_character_flag = domcom_allow_adultery_secrets }
}


domcom_ui_is_pet = { scope = character is_shown = { has_character_flag = domcom_pet } }

domcom_ui_sort_obedience = { scope = character effect = { set_variable = { name = domcom_ui_sort_mode value = flag:obedience } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }

domcom_ui_tfilter_all = { scope = character effect = { set_variable = { name = domcom_ui_tantalize_filter value = flag:all } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_tfilter_women = { scope = character effect = { set_variable = { name = domcom_ui_tantalize_filter value = flag:women } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_tfilter_men = { scope = character effect = { set_variable = { name = domcom_ui_tantalize_filter value = flag:men } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }
domcom_ui_tfilter_pets = { scope = character effect = { set_variable = { name = domcom_ui_tantalize_filter value = flag:pets } domcom_reset_ui_paging_effect = yes domcom_rebuild_ui_rosters_effect = yes } }

# A full-world reconstruction. Deliberately separate from the ordinary refresh because it walks every
# living character; it is the button to press when a save is picked up mid-game or predates the mod.
domcom_ui_deep_scan = {
    scope = character
    is_valid = { is_alive = yes }
    effect = {
        # The Ledger pauses time. A one-day lock therefore made the button permanently grey after one
        # press until the player closed the window. The scan itself is synchronous, so no timed lock is needed.
        domcom_deep_scan_effect = yes
        domcom_enforce_communion_for_patron_effect = yes
        domcom_refresh_current_ui_page_effect = yes
        send_interface_toast = { type = event_toast_effect_good title = DOMCOM_UI_DEEP_SCAN_TOAST left_icon = root }
    }
}

# Tribute season state, so the Imperial page can say which of the three situations the player is actually
# in instead of leaving them to guess.
domcom_ui_tribute_season_active   = { scope = character is_shown = { has_character_flag = domcom_lick_has_results } }
domcom_ui_tribute_season_cooldown = { scope = character is_shown = { has_character_flag = domcom_lick_test_cooldown } }
domcom_ui_tribute_season_idle     = { scope = character is_shown = { NOT = { has_character_flag = domcom_lick_test_cooldown } } }

domcom_ui_has_measurements = {
    scope = character
    is_shown = { domcom_should_express_endowment_trigger = yes age >= 18 has_variable = domcom_length_tenths has_variable = domcom_girth_tenths }
}

domcom_ui_lover_is_soulmate = {
    scope = character
    saved_scopes = { target }
    is_shown = { scope:target = { has_relation_soulmate = root } }
}
domcom_ui_lover_is_lover = {
    scope = character
    saved_scopes = { target }
    is_shown = { scope:target = { has_relation_lover = root NOT = { has_relation_soulmate = root } } }
}
domcom_ui_lover_is_dominion_bound = {
    scope = character
    saved_scopes = { target }
    is_shown = {
        scope:target = {
            has_character_flag = domcom_communion_intimate_bound
            has_variable = domcom_communion_intimate_patron
            var:domcom_communion_intimate_patron = root
        }
    }
}

domcom_ui_lover_is_protected = {
    scope = character
    saved_scopes = { target }
    is_shown = { scope:target = { has_character_flag = domcom_protected_intimate has_variable = domcom_protected_intimate_patron var:domcom_protected_intimate_patron = root } }
}
domcom_ui_lover_is_not_protected = {
    scope = character
    saved_scopes = { target }
    is_shown = { scope:target = { NOT = { has_character_flag = domcom_protected_intimate } } }
}
domcom_ui_protect_lover = {
    scope = character
    saved_scopes = { target }
    is_valid = { is_alive = yes scope:target = { is_alive = yes NOT = { has_character_flag = domcom_protected_intimate } OR = { has_relation_lover = root has_relation_soulmate = root AND = { has_character_flag = domcom_communion_intimate_bound has_variable = domcom_communion_intimate_patron var:domcom_communion_intimate_patron = root } } } }
    effect = {
        scope:target = {
            add_character_flag = domcom_protected_intimate
            add_character_flag = domcom_protected_origin_v2656
            set_variable = { name = domcom_protected_intimate_patron value = root }
            add_character_flag = block_infidelity_flag
            # Remember what the player explicitly protected so monthly repair restores the same kind
            # of bond instead of merely keeping an invisible Dominion registry entry.
            if = {
                limit = { has_relation_soulmate = root }
                add_character_flag = domcom_protected_was_soulmate
                remove_character_flag = domcom_protected_was_lover
            }
            else_if = {
                limit = { has_relation_lover = root }
                add_character_flag = domcom_protected_was_lover
                remove_character_flag = domcom_protected_was_soulmate
            }
            else = {
                remove_character_flag = domcom_protected_was_soulmate
                remove_character_flag = domcom_protected_was_lover
            }
            if = {
                limit = { is_spouse_of = root }
                add_character_flag = domcom_protected_was_spouse
                remove_character_flag = domcom_protected_was_concubine
            }
            else_if = {
                limit = { is_concubine_of = root }
                add_character_flag = domcom_protected_was_concubine
                remove_character_flag = domcom_protected_was_spouse
            }
            else = {
                remove_character_flag = domcom_protected_was_spouse
                remove_character_flag = domcom_protected_was_concubine
            }
        }
        domcom_prepare_lovers_roster_effect = yes
    }
}
domcom_ui_unprotect_lover = {
    scope = character
    saved_scopes = { target }
    is_valid = { scope:target = { has_character_flag = domcom_protected_intimate has_variable = domcom_protected_intimate_patron var:domcom_protected_intimate_patron = root } }
    effect = {
        scope:target = {
            remove_character_flag = domcom_protected_intimate
            remove_character_flag = domcom_protected_was_soulmate
            remove_character_flag = domcom_protected_was_lover
            remove_character_flag = domcom_protected_was_spouse
            remove_character_flag = domcom_protected_was_concubine
            remove_character_flag = domcom_protected_origin_v2656
            remove_variable = domcom_protected_intimate_patron
        }
        domcom_prepare_lovers_roster_effect = yes
    }
}

domcom_ui_break_up_lover = {
    scope = character
    saved_scopes = { target }
    is_valid = {
        is_alive = yes
        scope:target = {
            is_alive = yes
            OR = {
                has_relation_lover = root
                has_relation_soulmate = root
                AND = {
                    has_character_flag = domcom_communion_intimate_bound
                    has_variable = domcom_communion_intimate_patron
                    var:domcom_communion_intimate_patron = root
                }
            }
        }
    }
    effect = {
        save_scope_as = domcom_breakup_patron
        scope:target = { domcom_break_up_with_lover_effect = yes }
        domcom_prepare_lovers_roster_effect = yes
        send_interface_toast = {
            type = event_toast_effect_neutral
            title = DOMCOM_BREAKUP_TOAST
            left_icon = root
            right_icon = scope:target
        }
    }
}

domcom_ui_break_up_all_lovers = {
    scope = character
    is_valid = {
        OR = {
            any_relation = { type = lover count >= 1 }
            any_relation = { type = soulmate count >= 1 }
            has_variable_list = domcom_intimate_registry
        }
    }
    effect = {
        domcom_break_up_with_all_lovers_effect = yes
        domcom_prepare_lovers_roster_effect = yes
        send_interface_toast = {
            type = event_toast_effect_neutral
            title = DOMCOM_BREAKUP_ALL_TOAST
            left_icon = root
        }
    }
}

domcom_ui_cucked_next = {
    scope = character
    is_valid = { var:domcom_ui_cucked_page < var:domcom_ui_cucked_last_page }
    effect = { change_variable = { name = domcom_ui_cucked_page add = 1 } domcom_build_cucked_page_effect = yes }
}
domcom_ui_cucked_prev = {
    scope = character
    is_valid = { var:domcom_ui_cucked_page > 0 }
    effect = { change_variable = { name = domcom_ui_cucked_page subtract = 1 } domcom_build_cucked_page_effect = yes }
}
domcom_ui_cucked_first = {
    scope = character
    is_valid = { var:domcom_ui_cucked_page > 0 }
    effect = { set_variable = { name = domcom_ui_cucked_page value = 0 } domcom_build_cucked_page_effect = yes }
}

domcom_ui_owned_next = {
    scope = character
    is_valid = { var:domcom_ui_owned_page < var:domcom_ui_owned_last_page }
    effect = { change_variable = { name = domcom_ui_owned_page add = 1 } domcom_build_owned_page_effect = yes }
}
domcom_ui_owned_prev = {
    scope = character
    is_valid = { var:domcom_ui_owned_page > 0 }
    effect = { change_variable = { name = domcom_ui_owned_page subtract = 1 } domcom_build_owned_page_effect = yes }
}
domcom_ui_owned_first = {
    scope = character
    is_valid = { var:domcom_ui_owned_page > 0 }
    effect = { set_variable = { name = domcom_ui_owned_page value = 0 } domcom_build_owned_page_effect = yes }
}

domcom_ui_endowments_next = {
    scope = character
    is_valid = { var:domcom_ui_endowments_page < var:domcom_ui_endowments_last_page }
    effect = { change_variable = { name = domcom_ui_endowments_page add = 1 } domcom_build_endowments_page_effect = yes }
}
domcom_ui_endowments_prev = {
    scope = character
    is_valid = { var:domcom_ui_endowments_page > 0 }
    effect = { change_variable = { name = domcom_ui_endowments_page subtract = 1 } domcom_build_endowments_page_effect = yes }
}
domcom_ui_endowments_first = {
    scope = character
    is_valid = { var:domcom_ui_endowments_page > 0 }
    effect = { set_variable = { name = domcom_ui_endowments_page value = 0 } domcom_build_endowments_page_effect = yes }
}

domcom_ui_lovers_next = {
    scope = character
    is_valid = { var:domcom_ui_lovers_page < var:domcom_ui_lovers_last_page }
    effect = { change_variable = { name = domcom_ui_lovers_page add = 1 } domcom_build_lovers_page_effect = yes }
}
domcom_ui_lovers_prev = {
    scope = character
    is_valid = { var:domcom_ui_lovers_page > 0 }
    effect = { change_variable = { name = domcom_ui_lovers_page subtract = 1 } domcom_build_lovers_page_effect = yes }
}
domcom_ui_lovers_first = {
    scope = character
    is_valid = { var:domcom_ui_lovers_page > 0 }
    effect = { set_variable = { name = domcom_ui_lovers_page value = 0 } domcom_build_lovers_page_effect = yes }
}

domcom_ui_prospects_next = {
    scope = character
    is_valid = { var:domcom_ui_prospects_page < var:domcom_ui_prospects_last_page }
    effect = { change_variable = { name = domcom_ui_prospects_page add = 1 } domcom_build_prospects_page_effect = yes }
}
domcom_ui_prospects_prev = {
    scope = character
    is_valid = { var:domcom_ui_prospects_page > 0 }
    effect = { change_variable = { name = domcom_ui_prospects_page subtract = 1 } domcom_build_prospects_page_effect = yes }
}
domcom_ui_prospects_first = {
    scope = character
    is_valid = { var:domcom_ui_prospects_page > 0 }
    effect = { set_variable = { name = domcom_ui_prospects_page value = 0 } domcom_build_prospects_page_effect = yes }
}

domcom_ui_blood_next = {
    scope = character
    is_valid = { var:domcom_ui_blood_page < var:domcom_ui_blood_last_page }
    effect = { change_variable = { name = domcom_ui_blood_page add = 1 } domcom_build_blood_page_effect = yes }
}
domcom_ui_blood_prev = {
    scope = character
    is_valid = { var:domcom_ui_blood_page > 0 }
    effect = { change_variable = { name = domcom_ui_blood_page subtract = 1 } domcom_build_blood_page_effect = yes }
}
domcom_ui_blood_first = {
    scope = character
    is_valid = { var:domcom_ui_blood_page > 0 }
    effect = { set_variable = { name = domcom_ui_blood_page value = 0 } domcom_build_blood_page_effect = yes }
}

domcom_ui_tantalized_next = {
    scope = character
    is_valid = { var:domcom_ui_tantalized_page < var:domcom_ui_tantalized_last_page }
    effect = { change_variable = { name = domcom_ui_tantalized_page add = 1 } domcom_build_tantalized_page_effect = yes }
}
domcom_ui_tantalized_prev = {
    scope = character
    is_valid = { var:domcom_ui_tantalized_page > 0 }
    effect = { change_variable = { name = domcom_ui_tantalized_page subtract = 1 } domcom_build_tantalized_page_effect = yes }
}
domcom_ui_tantalized_first = {
    scope = character
    is_valid = { var:domcom_ui_tantalized_page > 0 }
    effect = { set_variable = { name = domcom_ui_tantalized_page value = 0 } domcom_build_tantalized_page_effect = yes }
}

domcom_ui_secrets_next = {
    scope = character
    is_valid = { var:domcom_ui_secrets_page < var:domcom_ui_secrets_last_page }
    effect = { change_variable = { name = domcom_ui_secrets_page add = 1 } domcom_build_secrets_page_effect = yes }
}
domcom_ui_secrets_prev = {
    scope = character
    is_valid = { var:domcom_ui_secrets_page > 0 }
    effect = { change_variable = { name = domcom_ui_secrets_page subtract = 1 } domcom_build_secrets_page_effect = yes }
}
domcom_ui_secrets_first = {
    scope = character
    is_valid = { var:domcom_ui_secrets_page > 0 }
    effect = { set_variable = { name = domcom_ui_secrets_page value = 0 } domcom_build_secrets_page_effect = yes }
}

domcom_ui_world_next = {
    scope = character
    is_valid = { var:domcom_ui_world_page < var:domcom_ui_world_last_page }
    effect = { domcom_world_page_next_effect = yes }
}
domcom_ui_world_prev = {
    scope = character
    is_valid = { var:domcom_ui_world_page > 0 }
    effect = { domcom_world_page_prev_effect = yes }
}
domcom_ui_world_first = {
    scope = character
    is_valid = { var:domcom_ui_world_page > 0 }
    effect = { domcom_world_page_first_effect = yes }
}



# War Browser controls. 2.6.25 keeps every GUI action on the player scope; war scopes stay in script variables.
domcom_ui_wb_refresh = { scope = character effect = { domcom_rebuild_war_browser_effect = yes } }
domcom_ui_wb_sort_score = { scope = character effect = { set_variable = { name = domcom_wb_sort_mode value = flag:score } domcom_sort_war_browser_effect = yes } }
domcom_ui_wb_sort_closest = { scope = character effect = { set_variable = { name = domcom_wb_sort_mode value = flag:closest } domcom_sort_war_browser_effect = yes } }
domcom_ui_wb_sort_imbalance = { scope = character effect = { set_variable = { name = domcom_wb_sort_mode value = flag:imbalance } domcom_sort_war_browser_effect = yes } }
domcom_ui_wb_sort_reverse = { scope = character effect = { if = { limit = { var:domcom_wb_sort_reverse = 0 } set_variable = { name = domcom_wb_sort_reverse value = 1 } } else = { set_variable = { name = domcom_wb_sort_reverse value = 0 } } domcom_sort_war_browser_effect = yes } }
domcom_ui_wb_slot1_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot1_war } effect = { set_variable = { name = domcom_wb_slot1_side value = 1 } } }
domcom_ui_wb_slot1_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot1_war } effect = { set_variable = { name = domcom_wb_slot1_side value = 2 } } }
domcom_ui_wb_slot1_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot1_side value = 0 } } }
domcom_ui_wb_slot1_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot1_side = 1 } }
domcom_ui_wb_slot1_defender_selected = { scope = character is_shown = { var:domcom_wb_slot1_side = 2 } }
domcom_ui_wb_slot1_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot1_expanded = 1 } set_variable = { name = domcom_wb_slot1_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot1_expanded value = 1 } } } }
domcom_ui_wb_slot1_is_expanded = { scope = character is_shown = { var:domcom_wb_slot1_expanded = 1 } }
domcom_ui_wb_slot1_exists = { scope = character is_shown = { has_variable = domcom_wb_slot1_war } }
domcom_ui_wb_slot2_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot2_war } effect = { set_variable = { name = domcom_wb_slot2_side value = 1 } } }
domcom_ui_wb_slot2_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot2_war } effect = { set_variable = { name = domcom_wb_slot2_side value = 2 } } }
domcom_ui_wb_slot2_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot2_side value = 0 } } }
domcom_ui_wb_slot2_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot2_side = 1 } }
domcom_ui_wb_slot2_defender_selected = { scope = character is_shown = { var:domcom_wb_slot2_side = 2 } }
domcom_ui_wb_slot2_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot2_expanded = 1 } set_variable = { name = domcom_wb_slot2_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot2_expanded value = 1 } } } }
domcom_ui_wb_slot2_is_expanded = { scope = character is_shown = { var:domcom_wb_slot2_expanded = 1 } }
domcom_ui_wb_slot2_exists = { scope = character is_shown = { has_variable = domcom_wb_slot2_war } }
domcom_ui_wb_slot3_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot3_war } effect = { set_variable = { name = domcom_wb_slot3_side value = 1 } } }
domcom_ui_wb_slot3_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot3_war } effect = { set_variable = { name = domcom_wb_slot3_side value = 2 } } }
domcom_ui_wb_slot3_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot3_side value = 0 } } }
domcom_ui_wb_slot3_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot3_side = 1 } }
domcom_ui_wb_slot3_defender_selected = { scope = character is_shown = { var:domcom_wb_slot3_side = 2 } }
domcom_ui_wb_slot3_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot3_expanded = 1 } set_variable = { name = domcom_wb_slot3_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot3_expanded value = 1 } } } }
domcom_ui_wb_slot3_is_expanded = { scope = character is_shown = { var:domcom_wb_slot3_expanded = 1 } }
domcom_ui_wb_slot3_exists = { scope = character is_shown = { has_variable = domcom_wb_slot3_war } }
domcom_ui_wb_slot4_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot4_war } effect = { set_variable = { name = domcom_wb_slot4_side value = 1 } } }
domcom_ui_wb_slot4_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot4_war } effect = { set_variable = { name = domcom_wb_slot4_side value = 2 } } }
domcom_ui_wb_slot4_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot4_side value = 0 } } }
domcom_ui_wb_slot4_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot4_side = 1 } }
domcom_ui_wb_slot4_defender_selected = { scope = character is_shown = { var:domcom_wb_slot4_side = 2 } }
domcom_ui_wb_slot4_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot4_expanded = 1 } set_variable = { name = domcom_wb_slot4_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot4_expanded value = 1 } } } }
domcom_ui_wb_slot4_is_expanded = { scope = character is_shown = { var:domcom_wb_slot4_expanded = 1 } }
domcom_ui_wb_slot4_exists = { scope = character is_shown = { has_variable = domcom_wb_slot4_war } }
domcom_ui_wb_slot5_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot5_war } effect = { set_variable = { name = domcom_wb_slot5_side value = 1 } } }
domcom_ui_wb_slot5_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot5_war } effect = { set_variable = { name = domcom_wb_slot5_side value = 2 } } }
domcom_ui_wb_slot5_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot5_side value = 0 } } }
domcom_ui_wb_slot5_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot5_side = 1 } }
domcom_ui_wb_slot5_defender_selected = { scope = character is_shown = { var:domcom_wb_slot5_side = 2 } }
domcom_ui_wb_slot5_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot5_expanded = 1 } set_variable = { name = domcom_wb_slot5_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot5_expanded value = 1 } } } }
domcom_ui_wb_slot5_is_expanded = { scope = character is_shown = { var:domcom_wb_slot5_expanded = 1 } }
domcom_ui_wb_slot5_exists = { scope = character is_shown = { has_variable = domcom_wb_slot5_war } }
domcom_ui_wb_slot6_select_attacker = { scope = character is_valid = { has_variable = domcom_wb_slot6_war } effect = { set_variable = { name = domcom_wb_slot6_side value = 1 } } }
domcom_ui_wb_slot6_select_defender = { scope = character is_valid = { has_variable = domcom_wb_slot6_war } effect = { set_variable = { name = domcom_wb_slot6_side value = 2 } } }
domcom_ui_wb_slot6_clear = { scope = character effect = { set_variable = { name = domcom_wb_slot6_side value = 0 } } }
domcom_ui_wb_slot6_attacker_selected = { scope = character is_shown = { var:domcom_wb_slot6_side = 1 } }
domcom_ui_wb_slot6_defender_selected = { scope = character is_shown = { var:domcom_wb_slot6_side = 2 } }
domcom_ui_wb_slot6_toggle_expand = { scope = character effect = { if = { limit = { var:domcom_wb_slot6_expanded = 1 } set_variable = { name = domcom_wb_slot6_expanded value = 0 } } else = { set_variable = { name = domcom_wb_slot6_expanded value = 1 } } } }
domcom_ui_wb_slot6_is_expanded = { scope = character is_shown = { var:domcom_wb_slot6_expanded = 1 } }
domcom_ui_wb_slot6_exists = { scope = character is_shown = { has_variable = domcom_wb_slot6_war } }
domcom_ui_wb_join_selected = { scope = character is_valid = { OR = { var:domcom_wb_slot1_side > 0 var:domcom_wb_slot2_side > 0 var:domcom_wb_slot3_side > 0 var:domcom_wb_slot4_side > 0 var:domcom_wb_slot5_side > 0 var:domcom_wb_slot6_side > 0 } } effect = { domcom_wb_join_selected_effect = yes } }


# 2.6.59 — progression guidance.
domcom_ui_cuck_next_250 = { scope = character is_shown = { OR = { NOT = { has_variable = domcom_cuck_xp } var:domcom_cuck_xp < 250 } } }
domcom_ui_cuck_next_500 = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 250 var:domcom_cuck_xp < 500 } }
domcom_ui_cuck_next_750 = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 500 var:domcom_cuck_xp < 750 } }
domcom_ui_cuck_next_1000 = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 750 var:domcom_cuck_xp < 1000 } }
domcom_ui_cuck_terminal = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 1000 } }
domcom_ui_cuck_stage_humiliated = { scope = character is_shown = { OR = { NOT = { has_variable = domcom_cuck_xp } var:domcom_cuck_xp < 250 } } }
domcom_ui_cuck_stage_submissive = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 250 var:domcom_cuck_xp < 500 } }
domcom_ui_cuck_stage_broken = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 500 var:domcom_cuck_xp < 750 } }
domcom_ui_cuck_stage_abject = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 750 var:domcom_cuck_xp < 1000 } }
domcom_ui_cuck_stage_final = { scope = character is_shown = { has_variable = domcom_cuck_xp var:domcom_cuck_xp >= 1000 } }

domcom_ui_dev_next_200 = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience > 0 var:domcom_obedience < 200 } }
domcom_ui_dev_next_400 = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 200 var:domcom_obedience < 400 } }
domcom_ui_dev_next_600 = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 400 var:domcom_obedience < 600 } }
domcom_ui_dev_next_800 = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 600 var:domcom_obedience < 800 } }
domcom_ui_dev_next_1000 = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 800 var:domcom_obedience < 1000 } }
domcom_ui_dev_terminal = { scope = character is_shown = { OR = { has_character_flag = domcom_pet has_character_flag = domcom_absolute_devotion AND = { has_variable = domcom_obedience var:domcom_obedience >= 1000 } } } }
domcom_ui_dev_stage_interested = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience > 0 var:domcom_obedience < 200 } }
domcom_ui_dev_stage_tempted = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 200 var:domcom_obedience < 400 } }
domcom_ui_dev_stage_attached = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 400 var:domcom_obedience < 600 } }
domcom_ui_dev_stage_submissive = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 600 var:domcom_obedience < 800 } }
domcom_ui_dev_stage_devoted = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 800 var:domcom_obedience < 1000 } }
domcom_ui_dev_stage_absolute = { scope = character is_shown = { has_variable = domcom_obedience var:domcom_obedience >= 1000 } }

domcom_ui_is_trophy = { scope = character is_shown = { has_character_flag = domcom_public_trophy } }

# Trophy controls from the Devotion roster.
domcom_ui_can_designate_trophy = {
    scope = character
    is_shown = {
        exists = scope:target
        scope:target = { is_alive = yes age >= 18 is_female = yes has_variable = domcom_obedience var:domcom_obedience >= 800 has_variable = domcom_obedience_patron var:domcom_obedience_patron = root NOT = { has_character_flag = domcom_public_trophy } }
    }
    is_valid = { root = { is_alive = yes is_imprisoned = no } }
    effect = { save_scope_as = domcom_trophy_patron scope:target = { domcom_designate_trophy_effect = yes } domcom_prepare_tantalized_page_safe_effect = yes }
}
domcom_ui_can_end_trophy = {
    scope = character
    is_shown = { exists = scope:target scope:target = { has_character_flag = domcom_public_trophy has_variable = domcom_trophy_patron var:domcom_trophy_patron = root } }
    is_valid = { root = { is_alive = yes } }
    effect = { scope:target = { domcom_end_trophy_effect = yes } domcom_prepare_tantalized_page_safe_effect = yes }
}

# Inner Household seat selection.
domcom_ui_inner_select_diplomat = { scope = character effect = { set_variable = { name = domcom_inner_selected_role value = flag:diplomat } } }
domcom_ui_inner_select_steward = { scope = character effect = { set_variable = { name = domcom_inner_selected_role value = flag:steward } } }
domcom_ui_inner_select_schemer = { scope = character effect = { set_variable = { name = domcom_inner_selected_role value = flag:schemer } } }
domcom_ui_inner_select_scholar = { scope = character effect = { set_variable = { name = domcom_inner_selected_role value = flag:scholar } } }
domcom_ui_inner_select_champion = { scope = character effect = { set_variable = { name = domcom_inner_selected_role value = flag:champion } } }

domcom_ui_inner_role_diplomat = { scope = character is_shown = { OR = { NOT = { has_variable = domcom_inner_selected_role } var:domcom_inner_selected_role = flag:diplomat } } }
domcom_ui_inner_role_steward = { scope = character is_shown = { has_variable = domcom_inner_selected_role var:domcom_inner_selected_role = flag:steward } }
domcom_ui_inner_role_schemer = { scope = character is_shown = { has_variable = domcom_inner_selected_role var:domcom_inner_selected_role = flag:schemer } }
domcom_ui_inner_role_scholar = { scope = character is_shown = { has_variable = domcom_inner_selected_role var:domcom_inner_selected_role = flag:scholar } }
domcom_ui_inner_role_champion = { scope = character is_shown = { has_variable = domcom_inner_selected_role var:domcom_inner_selected_role = flag:champion } }

domcom_ui_inner_diplomat_assigned = { scope = character is_shown = { has_variable = domcom_inner_diplomat_holder var:domcom_inner_diplomat_holder = { is_alive = yes } } }
domcom_ui_inner_steward_assigned = { scope = character is_shown = { has_variable = domcom_inner_steward_holder var:domcom_inner_steward_holder = { is_alive = yes } } }
domcom_ui_inner_schemer_assigned = { scope = character is_shown = { has_variable = domcom_inner_schemer_holder var:domcom_inner_schemer_holder = { is_alive = yes } } }
domcom_ui_inner_scholar_assigned = { scope = character is_shown = { has_variable = domcom_inner_scholar_holder var:domcom_inner_scholar_holder = { is_alive = yes } } }
domcom_ui_inner_champion_assigned = { scope = character is_shown = { has_variable = domcom_inner_champion_holder var:domcom_inner_champion_holder = { is_alive = yes } } }
domcom_ui_inner_diplomat_unassigned = { scope = character is_shown = { NOT = { AND = { has_variable = domcom_inner_diplomat_holder var:domcom_inner_diplomat_holder = { is_alive = yes } } } } }
domcom_ui_inner_steward_unassigned = { scope = character is_shown = { NOT = { AND = { has_variable = domcom_inner_steward_holder var:domcom_inner_steward_holder = { is_alive = yes } } } } }
domcom_ui_inner_schemer_unassigned = { scope = character is_shown = { NOT = { AND = { has_variable = domcom_inner_schemer_holder var:domcom_inner_schemer_holder = { is_alive = yes } } } } }
domcom_ui_inner_scholar_unassigned = { scope = character is_shown = { NOT = { AND = { has_variable = domcom_inner_scholar_holder var:domcom_inner_scholar_holder = { is_alive = yes } } } } }
domcom_ui_inner_champion_unassigned = { scope = character is_shown = { NOT = { AND = { has_variable = domcom_inner_champion_holder var:domcom_inner_champion_holder = { is_alive = yes } } } } }

domcom_ui_inner_assign = {
    scope = character
    is_valid = {
        exists = scope:target
        has_variable = domcom_inner_selected_role
        scope:target = { is_alive = yes has_variable = domcom_obedience var:domcom_obedience >= 600 has_variable = domcom_obedience_patron var:domcom_obedience_patron = root }
    }
    effect = {
        domcom_remove_inner_target_from_other_roles_effect = yes
        if = { limit = { var:domcom_inner_selected_role = flag:diplomat } set_variable = { name = domcom_inner_diplomat_holder value = scope:target } remove_variable = domcom_inner_diplomat_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:steward } set_variable = { name = domcom_inner_steward_holder value = scope:target } remove_variable = domcom_inner_steward_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:schemer } set_variable = { name = domcom_inner_schemer_holder value = scope:target } remove_variable = domcom_inner_schemer_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:scholar } set_variable = { name = domcom_inner_scholar_holder value = scope:target } remove_variable = domcom_inner_scholar_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:champion } set_variable = { name = domcom_inner_champion_holder value = scope:target } remove_variable = domcom_inner_champion_tier }
        domcom_refresh_inner_household_effect = yes
    }
}

domcom_ui_inner_clear_selected = {
    scope = character
    is_valid = { has_variable = domcom_inner_selected_role }
    effect = {
        if = { limit = { var:domcom_inner_selected_role = flag:diplomat } remove_variable = domcom_inner_diplomat_holder remove_variable = domcom_inner_diplomat_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:steward } remove_variable = domcom_inner_steward_holder remove_variable = domcom_inner_steward_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:schemer } remove_variable = domcom_inner_schemer_holder remove_variable = domcom_inner_schemer_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:scholar } remove_variable = domcom_inner_scholar_holder remove_variable = domcom_inner_scholar_tier }
        else_if = { limit = { var:domcom_inner_selected_role = flag:champion } remove_variable = domcom_inner_champion_holder remove_variable = domcom_inner_champion_tier }
        domcom_refresh_inner_household_effect = yes
    }
}

domcom_ui_inner_assign_best = {
    scope = character
    is_valid = { has_variable = domcom_inner_selected_role has_variable_list = domcom_ui_inner_candidates any_in_list = { variable = domcom_ui_inner_candidates always = yes } }
    effect = {
        save_scope_as = domcom_inner_patron
        if = {
            limit = { var:domcom_inner_selected_role = flag:diplomat }
            ordered_in_list = { variable = domcom_ui_inner_candidates order_by = domcom_inner_sort_diplomacy_desc_value max = 1 check_range_bounds = no save_temporary_scope_as = domcom_inner_best scope:domcom_inner_patron = { domcom_remove_inner_best_from_other_roles_effect = yes set_variable = { name = domcom_inner_diplomat_holder value = scope:domcom_inner_best } remove_variable = domcom_inner_diplomat_tier } }
        }
        else_if = {
            limit = { var:domcom_inner_selected_role = flag:steward }
            ordered_in_list = { variable = domcom_ui_inner_candidates order_by = domcom_inner_sort_stewardship_desc_value max = 1 check_range_bounds = no save_temporary_scope_as = domcom_inner_best scope:domcom_inner_patron = { domcom_remove_inner_best_from_other_roles_effect = yes set_variable = { name = domcom_inner_steward_holder value = scope:domcom_inner_best } remove_variable = domcom_inner_steward_tier } }
        }
        else_if = {
            limit = { var:domcom_inner_selected_role = flag:schemer }
            ordered_in_list = { variable = domcom_ui_inner_candidates order_by = domcom_inner_sort_intrigue_desc_value max = 1 check_range_bounds = no save_temporary_scope_as = domcom_inner_best scope:domcom_inner_patron = { domcom_remove_inner_best_from_other_roles_effect = yes set_variable = { name = domcom_inner_schemer_holder value = scope:domcom_inner_best } remove_variable = domcom_inner_schemer_tier } }
        }
        else_if = {
            limit = { var:domcom_inner_selected_role = flag:scholar }
            ordered_in_list = { variable = domcom_ui_inner_candidates order_by = domcom_inner_sort_learning_desc_value max = 1 check_range_bounds = no save_temporary_scope_as = domcom_inner_best scope:domcom_inner_patron = { domcom_remove_inner_best_from_other_roles_effect = yes set_variable = { name = domcom_inner_scholar_holder value = scope:domcom_inner_best } remove_variable = domcom_inner_scholar_tier } }
        }
        else_if = {
            limit = { var:domcom_inner_selected_role = flag:champion }
            ordered_in_list = { variable = domcom_ui_inner_candidates order_by = domcom_inner_sort_martial_desc_value max = 1 check_range_bounds = no save_temporary_scope_as = domcom_inner_best scope:domcom_inner_patron = { domcom_remove_inner_best_from_other_roles_effect = yes set_variable = { name = domcom_inner_champion_holder value = scope:domcom_inner_best } remove_variable = domcom_inner_champion_tier } }
        }
        # Enforce the one-seat-per-person rule even for auto-assignment by rebuilding if another seat matched.
        domcom_refresh_inner_household_effect = yes
    }
}
