﻿# Dynastic Domain Manager unified office UI. Sidebar navigation and page-state layout for the Domain
# Office.

ddm_ui_close = {
    scope = character
    effect = {
        if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes }
        remove_variable = ddm_ui_open
    }
}

ddm_ui_refresh = { scope = character effect = { ddm_reconcile_saved_crown_estate_effect = yes ddm_prepare_dashboard_effect = yes } }

ddm_ui_set_page_overview = { scope = character effect = { ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_page value = flag:overview } } }
ddm_ui_set_page_estate = { scope = character effect = { if = { limit = { NOT = { has_variable = ddm_show_domain_planner } } set_variable = { name = ddm_pending_domain_action value = 0 } ddm_prepare_domain_planner_effect = yes } set_variable = { name = ddm_ui_page value = flag:estate } } }
ddm_ui_set_page_distribution = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_refresh_domain_planner_counts_effect = yes } else = { ddm_reconcile_saved_crown_estate_effect = yes } ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_page value = flag:distribution } } }
ddm_ui_set_page_hierarchy = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_refresh_domain_planner_counts_effect = yes } ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_page value = flag:hierarchy } } }
ddm_ui_set_page_dynasty = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_refresh_domain_planner_counts_effect = yes } ddm_prepare_dashboard_effect = yes ddm_prepare_outsider_recipients_effect = yes set_variable = { name = ddm_ui_page value = flag:dynasty } } }
ddm_ui_set_page_outsiders = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_refresh_domain_planner_counts_effect = yes } ddm_prepare_outsider_holdings_effect = yes set_variable = { name = ddm_ui_page value = flag:outsiders } } }
ddm_ui_set_page_succession = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_succession_briefing_effect = yes set_variable = { name = ddm_ui_page value = flag:succession } } }
ddm_ui_set_page_alliances = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_page value = flag:alliances } } }
ddm_ui_set_page_tools = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } set_variable = { name = ddm_ui_page value = flag:tools } } }
ddm_ui_set_page_records = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_page value = flag:records } } }
ddm_ui_set_page_education = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_education_office_effect = yes ddm_prepare_educate_realm_effect = yes set_variable = { name = ddm_ui_page value = flag:education } } }
ddm_ui_set_page_prime_education = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_prime_education_page_effect = yes set_variable = { name = ddm_ui_page value = flag:prime_education } } }
ddm_ui_set_page_matchmaker = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_matchmaker_effect = yes set_variable = { name = ddm_ui_page value = flag:matchmaker } } }
ddm_ui_set_page_habsburg = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_habsburg_refresh_dynasty_analytics_effect = yes set_variable = { name = ddm_ui_page value = flag:habsburg } } }
ddm_ui_set_page_my_marriage = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_household_effect = yes ddm_prepare_heir_advice_effect = yes ddm_refresh_player_match_effect = yes set_variable = { name = ddm_ui_page value = flag:my_marriage } } }
ddm_ui_set_page_review = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_dynasty_review_ui_effect = yes set_variable = { name = ddm_ui_page value = flag:review } } }
ddm_ui_set_page_military = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_military_advice_effect = yes set_variable = { name = ddm_ui_page value = flag:military } } }
ddm_ui_set_page_proscriptions = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_proscription_ui_effect = yes set_variable = { name = ddm_ui_page value = flag:proscriptions } } }
ddm_ui_set_page_policies = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_initialize_settings_effect = yes set_variable = { name = ddm_ui_page value = flag:policies } } }
ddm_ui_set_page_slavery = {
    scope = character
    is_valid = { always = yes }
    effect = {
        if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes }
        set_variable = { name = ddm_ui_page value = flag:slavery }
        set_variable = { name = domcom_csr_ui_page value = flag:buy }
        if = { limit = { NOT = { has_variable = domcom_csr_ui_buy_sort } } set_variable = { name = domcom_csr_ui_buy_sort value = 1 } }
        if = { limit = { NOT = { has_variable = domcom_csr_ui_sell_sort } } set_variable = { name = domcom_csr_ui_sell_sort value = 1 } }
        if = { limit = { NOT = { has_variable = domcom_csr_ui_owned_sort } } set_variable = { name = domcom_csr_ui_owned_sort value = 1 } }
        if = { limit = { NOT = { has_variable = domcom_csr_ui_marriage_sort } } set_variable = { name = domcom_csr_ui_marriage_sort value = 1 } }
        # 2.6.30 performance: only build the visible Buy page here. Sell, Marriage and Workforce
        # already prepare themselves when the player actually opens those tabs.
        domcom_csr_prepare_exchange_buy_effect = yes
    }
}

# Six-department main navigation. Existing page keys are retained underneath so saves and older UI calls
# remain compatible.
ddm_ui_set_main_settlement = {
    scope = character
    effect = {
        # Main navigation must always navigate. An open Crown Estate session is preserved in memory,
        # but it no longer traps the player on the Estate page when Settlement is clicked next.
        if = {
            limit = { has_variable = ddm_show_domain_planner }
            ddm_refresh_domain_planner_counts_effect = yes
            ddm_prepare_dashboard_effect = yes
        }
        else = {
            ddm_reconcile_saved_crown_estate_effect = yes
            ddm_prepare_dashboard_effect = yes
        }
        set_variable = { name = ddm_ui_page value = flag:distribution }
    }
}
ddm_ui_set_main_dynasty = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_succession_briefing_effect = yes set_variable = { name = ddm_ui_page value = flag:succession } } }
ddm_ui_set_main_realm = { scope = character effect = { if = { limit = { has_variable = ddm_show_domain_planner } ddm_cancel_domain_planner_effect = yes } ddm_prepare_military_advice_effect = yes set_variable = { name = ddm_ui_page value = flag:military } } }

ddm_ui_is_page_overview = { scope = character is_shown = { OR = { NOT = { exists = var:ddm_ui_page } var:ddm_ui_page = flag:overview } } }
ddm_ui_is_page_estate = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:estate } }
ddm_ui_is_page_distribution = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:distribution } }
ddm_ui_is_page_hierarchy = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:hierarchy } }
ddm_ui_is_page_dynasty = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:dynasty } }
ddm_ui_is_page_outsiders = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:outsiders } }
ddm_ui_is_page_succession = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:succession } }
ddm_ui_is_page_alliances = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:alliances } }
ddm_ui_is_page_tools = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:tools } }
ddm_ui_is_page_records = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:records } }
ddm_ui_is_page_education = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:education } }
ddm_ui_is_page_prime_education = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:prime_education } }
ddm_ui_is_page_matchmaker = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:matchmaker } }
ddm_ui_is_page_habsburg = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:habsburg } }
ddm_ui_is_page_my_marriage = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:my_marriage } }
ddm_ui_is_page_review = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:review } }
ddm_ui_is_page_military = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:military } }
ddm_ui_is_page_proscriptions = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:proscriptions } }
ddm_ui_is_page_policies = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:policies } }
ddm_ui_is_page_slavery = { scope = character is_shown = { exists = var:ddm_ui_page var:ddm_ui_page = flag:slavery } }

ddm_ui_group_settlement = { scope = character is_shown = { OR = { var:ddm_ui_page = flag:distribution var:ddm_ui_page = flag:dynasty var:ddm_ui_page = flag:hierarchy var:ddm_ui_page = flag:outsiders } } }
ddm_ui_group_dynasty_office = { scope = character is_shown = { OR = { var:ddm_ui_page = flag:succession var:ddm_ui_page = flag:alliances var:ddm_ui_page = flag:education var:ddm_ui_page = flag:prime_education var:ddm_ui_page = flag:matchmaker var:ddm_ui_page = flag:habsburg var:ddm_ui_page = flag:review } } }
ddm_ui_group_realm_office = { scope = character is_shown = { OR = { var:ddm_ui_page = flag:military var:ddm_ui_page = flag:proscriptions var:ddm_ui_page = flag:slavery var:ddm_ui_page = flag:policies } } }



# Overview — one-time infant starter court. Kept on Overview so a player can use it immediately on load.
ddm_ui_baby_mode_available = {
    scope = character
    is_shown = { is_alive = yes is_landed = yes age < 6 NOT = { has_character_flag = ddm_baby_mode_resolved } }
}
ddm_ui_baby_mode = {
    scope = character
    is_valid = { is_alive = yes is_landed = yes age < 6 NOT = { has_character_flag = ddm_baby_mode_resolved } }
    effect = { ddm_activate_baby_mode_effect = yes ddm_prepare_dashboard_effect = yes }
}

# Realm Office — Proscriptions. These actions are deliberately lightweight; target hunting runs on pulses.
ddm_ui_proscription_refresh = { scope = character effect = { ddm_prepare_proscription_ui_effect = yes } }

# 2.6.1 — Bounty Office hunter roster sorting.
ddm_ui_hunter_sort_level = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 1 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }
ddm_ui_hunter_sort_xp = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 2 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }
ddm_ui_hunter_sort_record = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 3 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }
ddm_ui_hunter_sort_captures = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 4 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }
ddm_ui_hunter_sort_kills = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 5 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }
ddm_ui_hunter_sort_combat = { scope = character effect = { set_variable = { name = ddm_hunter_sort_mode value = 6 } set_variable = { name = ddm_hunter_page value = 0 } ddm_rebuild_hunter_roster_ui_effect = yes } }

# 2.6.5 — Hunter roster paging. Four professionals per page keeps Proscriptions compact.
ddm_ui_hunter_prev = {
    scope = character
    is_valid = { has_variable = ddm_hunter_page var:ddm_hunter_page > 0 }
    effect = { change_variable = { name = ddm_hunter_page subtract = 1 } ddm_build_hunter_roster_page_effect = yes }
}
ddm_ui_hunter_next = {
    scope = character
    is_valid = { has_variable = ddm_hunter_page has_variable = ddm_hunter_last_page var:ddm_hunter_page < var:ddm_hunter_last_page }
    effect = { change_variable = { name = ddm_hunter_page add = 1 } ddm_build_hunter_roster_page_effect = yes }
}
ddm_ui_hunter_first = { scope = character is_valid = { has_variable = ddm_hunter_page var:ddm_hunter_page > 0 } effect = { set_variable = { name = ddm_hunter_page value = 0 } ddm_build_hunter_roster_page_effect = yes } }
ddm_ui_hunter_last = { scope = character is_valid = { has_variable = ddm_hunter_page has_variable = ddm_hunter_last_page var:ddm_hunter_page < var:ddm_hunter_last_page } effect = { set_variable = { name = ddm_hunter_page value = var:ddm_hunter_last_page } ddm_build_hunter_roster_page_effect = yes } }

# Household Office — force-heir candidate paging.
ddm_ui_heir_candidate_prev = { scope = character is_valid = { has_variable = ddm_heir_candidate_page var:ddm_heir_candidate_page > 0 } effect = { change_variable = { name = ddm_heir_candidate_page subtract = 1 } ddm_build_heir_candidate_page_effect = yes } }
ddm_ui_heir_candidate_next = { scope = character is_valid = { has_variable = ddm_heir_candidate_page has_variable = ddm_heir_candidate_last_page var:ddm_heir_candidate_page < var:ddm_heir_candidate_last_page } effect = { change_variable = { name = ddm_heir_candidate_page add = 1 } ddm_build_heir_candidate_page_effect = yes } }
ddm_ui_heir_candidate_first = { scope = character is_valid = { has_variable = ddm_heir_candidate_page var:ddm_heir_candidate_page > 0 } effect = { set_variable = { name = ddm_heir_candidate_page value = 0 } ddm_build_heir_candidate_page_effect = yes } }
ddm_ui_heir_candidate_last = { scope = character is_valid = { has_variable = ddm_heir_candidate_page has_variable = ddm_heir_candidate_last_page var:ddm_heir_candidate_page < var:ddm_heir_candidate_last_page } effect = { set_variable = { name = ddm_heir_candidate_page value = var:ddm_heir_candidate_last_page } ddm_build_heir_candidate_page_effect = yes } }

# Habsburgs' Creed — autonomous same-dynasty marriage doctrine.
ddm_ui_habsburg_off = { scope = character effect = { set_variable = { name = ddm_habsburg_mode value = 0 } } }
ddm_ui_habsburg_dynasty = { scope = character effect = { set_variable = { name = ddm_habsburg_mode value = 1 } set_variable = { name = ddm_match_dynasty_mode value = 2 } ddm_habsburg_creed_sweep_effect = yes ddm_refresh_matchmaker_current_page_effect = yes } }
ddm_ui_habsburg_close = { scope = character effect = { set_variable = { name = ddm_habsburg_mode value = 2 } set_variable = { name = ddm_match_dynasty_mode value = 2 } ddm_habsburg_creed_sweep_effect = yes ddm_refresh_matchmaker_current_page_effect = yes } }
ddm_ui_habsburg_pure = { scope = character effect = { set_variable = { name = ddm_habsburg_mode value = 3 } set_variable = { name = ddm_match_dynasty_mode value = 2 } ddm_habsburg_creed_sweep_effect = yes ddm_refresh_matchmaker_current_page_effect = yes } }
ddm_ui_habsburg_absolute = { scope = character effect = { set_variable = { name = ddm_habsburg_mode value = 4 } set_variable = { name = ddm_match_dynasty_mode value = 2 } ddm_habsburg_creed_sweep_effect = yes ddm_refresh_matchmaker_current_page_effect = yes } }
ddm_ui_habsburg_run = { scope = character is_valid = { has_variable = ddm_habsburg_mode var:ddm_habsburg_mode > 0 } effect = { ddm_habsburg_creed_sweep_effect = yes ddm_refresh_matchmaker_current_page_effect = yes ddm_habsburg_refresh_dynasty_analytics_effect = yes } }
ddm_ui_habsburg_refresh_analytics = { scope = character effect = { ddm_habsburg_refresh_dynasty_analytics_effect = yes } }
ddm_ui_habsburg_refresh_tiers = { scope = character is_valid = { exists = dynasty } effect = { ddm_habsburg_refresh_blood_tiers_effect = yes } }
ddm_ui_habsburg_analyze_self = {
    scope = character
    effect = {
        save_scope_as = ddm_pedigree_actor
        save_scope_as = ddm_pedigree_target
        ddm_habsburg_prepare_pedigree_loop_report_effect = yes
    }
}
ddm_ui_pedigree_has_report = { scope = character is_shown = { has_variable = ddm_pedigree_subject } }
ddm_ui_pedigree_has_loops = { scope = character is_shown = { has_variable = ddm_pedigree_subject var:ddm_pedigree_collapse > 0 } }
ddm_ui_pedigree_no_loops = { scope = character is_shown = { has_variable = ddm_pedigree_subject var:ddm_pedigree_collapse = 0 } }
ddm_ui_pedigree_has_top1 = { scope = character is_shown = { has_variable = ddm_pedigree_top_1 } }
ddm_ui_pedigree_has_top2 = { scope = character is_shown = { has_variable = ddm_pedigree_top_2 } }
ddm_ui_pedigree_has_top3 = { scope = character is_shown = { has_variable = ddm_pedigree_top_3 } }
ddm_ui_habsburg_is_off = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_habsburg_mode } var:ddm_habsburg_mode = 0 } } }
ddm_ui_habsburg_is_dynasty = { scope = character is_shown = { has_variable = ddm_habsburg_mode var:ddm_habsburg_mode = 1 } }
ddm_ui_habsburg_is_close = { scope = character is_shown = { has_variable = ddm_habsburg_mode var:ddm_habsburg_mode = 2 } }
ddm_ui_habsburg_is_pure = { scope = character is_shown = { has_variable = ddm_habsburg_mode var:ddm_habsburg_mode = 3 } }
ddm_ui_habsburg_is_absolute = { scope = character is_shown = { has_variable = ddm_habsburg_mode var:ddm_habsburg_mode = 4 } }

ddm_ui_hunter_is_preferred = { scope = character is_shown = { has_character_flag = ddm_preferred_bounty_hunter } }
ddm_ui_manage_hunter = {
    scope = character
    is_valid = {
        is_alive = yes
        has_character_flag = ddm_registered_bounty_hunter
        has_variable = ddm_bounty_hunter_patron
        var:ddm_bounty_hunter_patron = { is_ai = no is_alive = yes }
    }
    effect = {
        save_scope_as = ddm_managed_hunter_scope
        var:ddm_bounty_hunter_patron = {
            set_variable = { name = ddm_managed_hunter value = scope:ddm_managed_hunter_scope }
            trigger_event = ddm_manager.5320
        }
    }
}
ddm_ui_proscription_mass_factions = {
    scope = character
    is_valid = { is_alive = yes is_landed = yes ddm_has_eligible_faction_proscription_target_trigger = yes }
    effect = { ddm_proscribe_all_faction_members_effect = yes ddm_prepare_proscription_ui_effect = yes }
}
ddm_ui_proscription_mass_rebels = {
    scope = character
    is_valid = { is_alive = yes is_landed = yes is_at_war = yes ddm_has_eligible_rebel_proscription_target_trigger = yes }
    effect = { ddm_proscribe_active_rebel_leaders_effect = yes ddm_prepare_proscription_ui_effect = yes }
}
ddm_ui_proscription_revoke_all = {
    scope = character
    is_valid = { has_variable = ddm_proscription_active_count var:ddm_proscription_active_count > 0 }
    effect = { ddm_revoke_all_proscriptions_effect = yes ddm_prepare_proscription_ui_effect = yes }
}


ddm_ui_proscription_policy_alive = {
    scope = character
    effect = { set_variable = { name = ddm_proscription_outcome_policy value = 1 } ddm_prepare_proscription_ui_effect = yes }
}
ddm_ui_proscription_policy_dead = {
    scope = character
    effect = { set_variable = { name = ddm_proscription_outcome_policy value = 2 } ddm_prepare_proscription_ui_effect = yes }
}
ddm_ui_proscription_policy_is_alive = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_proscription_outcome_policy } var:ddm_proscription_outcome_policy = 1 } } }
ddm_ui_proscription_policy_is_dead = { scope = character is_shown = { has_variable = ddm_proscription_outcome_policy var:ddm_proscription_outcome_policy = 2 } }

ddm_ui_personal_proscription_auto_on = { scope = character is_shown = { has_variable = ddm_personal_proscription_auto var:ddm_personal_proscription_auto = 1 } }
ddm_ui_personal_proscription_auto_off = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_personal_proscription_auto } var:ddm_personal_proscription_auto = 0 } } }
ddm_ui_personal_proscription_auto_enable = {
    scope = character
    is_valid = { ddm_can_use_personal_proscriptions_trigger = yes }
    effect = { set_variable = { name = ddm_personal_proscription_auto value = 1 } ddm_prepare_proscription_ui_effect = yes }
}
ddm_ui_personal_proscription_auto_disable = {
    scope = character
    effect = { set_variable = { name = ddm_personal_proscription_auto value = 0 } ddm_prepare_proscription_ui_effect = yes }
}

# Incoming relationship-bounty pressure. These affect hunters sent AT the human player, not the player's
# own political/personal proscription engine.
ddm_ui_bounty_pressure_0 = { scope = character effect = { set_variable = { name = ddm_bounty_pressure value = 0 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_bounty_pressure_1 = { scope = character effect = { set_variable = { name = ddm_bounty_pressure value = 1 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_bounty_pressure_2 = { scope = character effect = { set_variable = { name = ddm_bounty_pressure value = 2 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_bounty_pressure_3 = { scope = character effect = { set_variable = { name = ddm_bounty_pressure value = 3 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_bounty_pressure_4 = { scope = character effect = { set_variable = { name = ddm_bounty_pressure value = 4 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_bounty_pressure_is_0 = { scope = character is_shown = { has_variable = ddm_bounty_pressure var:ddm_bounty_pressure = 0 } }
ddm_ui_bounty_pressure_is_1 = { scope = character is_shown = { has_variable = ddm_bounty_pressure var:ddm_bounty_pressure = 1 } }
ddm_ui_bounty_pressure_is_2 = { scope = character is_shown = { has_variable = ddm_bounty_pressure var:ddm_bounty_pressure = 2 } }
ddm_ui_bounty_pressure_is_3 = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_bounty_pressure } var:ddm_bounty_pressure = 3 } } }
ddm_ui_bounty_pressure_is_4 = { scope = character is_shown = { has_variable = ddm_bounty_pressure var:ddm_bounty_pressure = 4 } }

ddm_ui_defied_writ_on = { scope = character effect = { set_variable = { name = ddm_defied_writ_protection value = 1 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_defied_writ_off = { scope = character effect = { set_variable = { name = ddm_defied_writ_protection value = 0 } ddm_prepare_proscription_ui_effect = yes } }
ddm_ui_defied_writ_is_on = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_defied_writ_protection } var:ddm_defied_writ_protection = 1 } } }
ddm_ui_defied_writ_is_off = { scope = character is_shown = { has_variable = ddm_defied_writ_protection var:ddm_defied_writ_protection = 0 } }

# Processing-state helpers. The office remains paused for ordinary browsing, but full settlement
# workflows may deliberately advance one day before the office reopens and pauses again.
ddm_ui_settlement_needs_planner = {
    scope = character
    is_shown = { is_at_war = no ddm_has_unclassified_domain_holding_trigger = yes }
}
ddm_ui_settlement_direct = {
    scope = character
    is_shown = { is_at_war = no NOT = { ddm_has_unclassified_domain_holding_trigger = yes } }
}
ddm_ui_settlement_at_war = { scope = character is_shown = { is_at_war = yes NOT = { has_variable = ddm_settlement_queued } } }
ddm_ui_settlement_queued = { scope = character is_shown = { has_variable = ddm_settlement_queued } }
ddm_ui_domain_plan_pending = {
    scope = character
    is_shown = { has_variable = ddm_pending_domain_action var:ddm_pending_domain_action > 0 }
}
ddm_ui_domain_plan_idle = {
    scope = character
    is_shown = {
        OR = {
            NOT = { has_variable = ddm_pending_domain_action }
            AND = { has_variable = ddm_pending_domain_action var:ddm_pending_domain_action <= 0 }
        }
    }
}

ddm_ui_run_settlement = {
    scope = character
    is_valid = { is_landed = yes is_at_war = no }
    effect = {
        ddm_initialize_settings_effect = yes
        # If the player already has Crown Estate edits open, do not throw them away and rebuild the
        # planner. Return to that exact session and let Save Crown Estate continue directly into the
        # settlement. Discard Changes remains the only explicit rollback action.
        if = {
            limit = { has_variable = ddm_show_domain_planner }
            set_variable = { name = ddm_pending_domain_action value = 1 }
            set_variable = { name = ddm_ui_page value = flag:estate }
            ddm_refresh_domain_planner_counts_effect = yes
        }
        else = {
            ddm_reconcile_saved_crown_estate_effect = yes
            if = {
                limit = { ddm_has_unclassified_domain_holding_trigger = yes }
                set_variable = { name = ddm_pending_domain_action value = 1 }
                ddm_prepare_domain_planner_effect = yes
                set_variable = { name = ddm_ui_page value = flag:estate }
            }
            else = {
                set_variable = { name = ddm_ui_processing_settlement value = 1 }
                remove_variable = ddm_ui_open
                ddm_run_full_settlement_effect = yes
                set_variable = { name = ddm_ui_records_mode value = 2 }
                set_variable = { name = ddm_ui_page value = flag:records }
                trigger_event = { id = ddm_manager.0111 days = 1 }
            }
        }
    }
}

ddm_ui_queue_settlement = {
    scope = character
    is_valid = { is_landed = yes is_at_war = yes NOT = { has_variable = ddm_settlement_queued } }
    effect = {
        ddm_initialize_settings_effect = yes
        set_variable = { name = ddm_settlement_queued value = 1 }
        remove_variable = ddm_ui_open
        trigger_event = { id = ddm_manager.0112 days = 3 }
    }
}

ddm_ui_preview = {
    scope = character
    effect = {
        ddm_reconcile_saved_crown_estate_effect = yes
        set_variable = { name = ddm_ui_page value = flag:records }
        set_variable = { name = ddm_ui_records_mode value = 1 }
        ddm_prepare_allocation_preview_effect = yes
        set_variable = { name = ddm_preview_ready value = 1 }
        send_interface_toast = { type = event_toast_effect_good title = DDM_UI_PREVIEW_READY_TOAST left_icon = root }
    }
}
ddm_ui_has_preview_grants = { scope = character is_shown = { has_variable = ddm_preview_ready var:ddm_preview_allocated > 0 } }
ddm_ui_no_preview_grants = { scope = character is_shown = { has_variable = ddm_preview_ready var:ddm_preview_allocated <= 0 } }
ddm_ui_cancel_estate = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_cancel_domain_planner_effect = yes set_variable = { name = ddm_ui_page value = flag:overview } } }
ddm_ui_organize_hierarchy = { scope = character effect = { ddm_organize_dynastic_hierarchy_effect = yes ddm_prepare_dashboard_effect = yes set_variable = { name = ddm_ui_records_mode value = 2 } } }
ddm_ui_distribute_proper_lieges = {
    scope = character
    is_valid = { is_landed = yes }
    effect = {
        ddm_distribute_to_proper_lieges_effect = yes
        ddm_prepare_dashboard_effect = yes
    }
}
ddm_ui_post_succession_cleanup = {
    scope = character
    effect = {
        set_variable = { name = ddm_ui_processing_settlement value = 1 }
        remove_variable = ddm_ui_open
        ddm_post_succession_cleanup_effect = yes
        set_variable = { name = ddm_ui_records_mode value = 2 }
        set_variable = { name = ddm_ui_page value = flag:records }
        trigger_event = { id = ddm_manager.0111 days = 1 }
    }
}

# Distribution / perception controls.
ddm_ui_set_family_1 = { scope = character effect = { set_variable = { name = ddm_family_scope_mode value = 1 } } }
ddm_ui_set_family_3 = { scope = character effect = { set_variable = { name = ddm_family_scope_mode value = 3 } } }
ddm_ui_set_family_2 = { scope = character effect = { set_variable = { name = ddm_family_scope_mode value = 2 } } }
ddm_ui_family_1 = { scope = character is_shown = { var:ddm_family_scope_mode = 1 } }
ddm_ui_family_3 = { scope = character is_shown = { var:ddm_family_scope_mode = 3 } }
ddm_ui_family_2 = { scope = character is_shown = { var:ddm_family_scope_mode = 2 } }

ddm_ui_set_power_1 = { scope = character effect = { set_variable = { name = ddm_power_policy value = 1 } } }
ddm_ui_set_power_2 = { scope = character effect = { set_variable = { name = ddm_power_policy value = 2 } } }
ddm_ui_set_power_3 = { scope = character effect = { set_variable = { name = ddm_power_policy value = 3 } } }
ddm_ui_power_1 = { scope = character is_shown = { var:ddm_power_policy = 1 } }
ddm_ui_power_2 = { scope = character is_shown = { var:ddm_power_policy = 2 } }
ddm_ui_power_3 = { scope = character is_shown = { var:ddm_power_policy = 3 } }

ddm_ui_set_regard_1 = { scope = character effect = { set_variable = { name = ddm_regard_mode value = 1 } } }
ddm_ui_set_regard_2 = { scope = character effect = { set_variable = { name = ddm_regard_mode value = 2 } } }
ddm_ui_regard_1 = { scope = character is_shown = { var:ddm_regard_mode = 1 } }
ddm_ui_regard_2 = { scope = character is_shown = { var:ddm_regard_mode = 2 } }
ddm_ui_gender_on = { scope = character is_shown = { var:ddm_gender_alignment = 1 } }
ddm_ui_gender_off = { scope = character is_shown = { var:ddm_gender_alignment = 0 } }
ddm_ui_integrity_on = { scope = character is_shown = { var:ddm_realm_integrity = 1 } }
ddm_ui_integrity_off = { scope = character is_shown = { var:ddm_realm_integrity = 0 } }
ddm_ui_toggle_gender = { scope = character effect = { if = { limit = { var:ddm_gender_alignment = 1 } set_variable = { name = ddm_gender_alignment value = 0 } } else = { set_variable = { name = ddm_gender_alignment value = 1 } } } }
ddm_ui_toggle_integrity = { scope = character effect = { if = { limit = { var:ddm_realm_integrity = 1 } set_variable = { name = ddm_realm_integrity value = 0 } } else = { set_variable = { name = ddm_realm_integrity value = 1 } } } }

ddm_ui_set_succession_1 = { scope = character effect = { set_variable = { name = ddm_succession_policy value = 1 } } }
ddm_ui_set_succession_2 = { scope = character effect = { set_variable = { name = ddm_succession_policy value = 2 } } }
ddm_ui_set_succession_3 = { scope = character effect = { set_variable = { name = ddm_succession_policy value = 3 } } }
ddm_ui_succession_1 = { scope = character is_shown = { var:ddm_succession_policy = 1 } }
ddm_ui_succession_2 = { scope = character is_shown = { var:ddm_succession_policy = 2 } }
ddm_ui_succession_3 = { scope = character is_shown = { var:ddm_succession_policy = 3 } }

ddm_ui_set_alliance_0 = { scope = character effect = { set_variable = { name = ddm_alliance_policy value = 0 } } }
ddm_ui_set_alliance_1 = { scope = character effect = { set_variable = { name = ddm_alliance_policy value = 1 } } }
ddm_ui_set_alliance_2 = { scope = character effect = { set_variable = { name = ddm_alliance_policy value = 2 } } }
ddm_ui_set_alliance_3 = { scope = character effect = { set_variable = { name = ddm_alliance_policy value = 3 } } }
ddm_ui_alliance_0 = { scope = character is_shown = { var:ddm_alliance_policy = 0 } }
ddm_ui_alliance_1 = { scope = character is_shown = { var:ddm_alliance_policy = 1 } }
ddm_ui_alliance_2 = { scope = character is_shown = { var:ddm_alliance_policy = 2 } }
ddm_ui_alliance_3 = { scope = character is_shown = { var:ddm_alliance_policy = 3 } }

ddm_ui_distribution_stalled = { scope = character is_shown = { var:ddm_last_distribution_stalled = 1 } }
ddm_ui_has_preview_1 = { scope = character is_shown = { exists = scope:ddm_preview_recipient_1 } }
ddm_ui_has_preview_2 = { scope = character is_shown = { exists = scope:ddm_preview_recipient_2 } }
ddm_ui_has_preview_3 = { scope = character is_shown = { exists = scope:ddm_preview_recipient_3 } }

ddm_ui_sort_hierarchy = { scope = character effect = { set_variable = { name = ddm_title_sort_mode value = 0 } if = { limit = { has_variable = ddm_show_domain_planner } ddm_rebuild_domain_planner_sort_effect = yes } if = { limit = { has_variable = ddm_outsider_county_total } ddm_rebuild_outsider_holdings_sort_effect = yes } } }
ddm_ui_sort_development = { scope = character effect = { set_variable = { name = ddm_title_sort_mode value = 1 } if = { limit = { has_variable = ddm_show_domain_planner } ddm_rebuild_domain_planner_sort_effect = yes } if = { limit = { has_variable = ddm_outsider_county_total } ddm_rebuild_outsider_holdings_sort_effect = yes } } }
ddm_ui_sort_faith = { scope = character effect = { set_variable = { name = ddm_title_sort_mode value = 2 } if = { limit = { has_variable = ddm_show_domain_planner } ddm_rebuild_domain_planner_sort_effect = yes } if = { limit = { has_variable = ddm_outsider_county_total } ddm_rebuild_outsider_holdings_sort_effect = yes } } }
ddm_ui_sort_culture = { scope = character effect = { set_variable = { name = ddm_title_sort_mode value = 3 } if = { limit = { has_variable = ddm_show_domain_planner } ddm_rebuild_domain_planner_sort_effect = yes } if = { limit = { has_variable = ddm_outsider_county_total } ddm_rebuild_outsider_holdings_sort_effect = yes } } }
ddm_ui_sort_reverse = { scope = character effect = { if = { limit = { var:ddm_title_sort_direction < 0 } set_variable = { name = ddm_title_sort_direction value = 1 } } else = { set_variable = { name = ddm_title_sort_direction value = -1 } } if = { limit = { has_variable = ddm_show_domain_planner } ddm_rebuild_domain_planner_sort_effect = yes } if = { limit = { has_variable = ddm_outsider_county_total } ddm_rebuild_outsider_holdings_sort_effect = yes } } }

ddm_ui_set_recipient_dynasty = { scope = character effect = { set_variable = { name = ddm_outsider_recipient_mode value = 0 } ddm_prepare_outsider_recipients_effect = yes } }
ddm_ui_set_recipient_selected = { scope = character effect = { set_variable = { name = ddm_outsider_recipient_mode value = 1 } ddm_prepare_outsider_recipients_effect = yes } }
ddm_ui_set_recipient_all = { scope = character effect = { set_variable = { name = ddm_outsider_recipient_mode value = 2 } ddm_prepare_outsider_recipients_effect = yes } }
ddm_ui_recipient_dynasty = { scope = character is_shown = { var:ddm_outsider_recipient_mode = 0 } }
ddm_ui_recipient_selected = { scope = character is_shown = { var:ddm_outsider_recipient_mode = 1 } }
ddm_ui_recipient_all = { scope = character is_shown = { var:ddm_outsider_recipient_mode = 2 } }
ddm_ui_refresh_outsider_recipients = { scope = character effect = { ddm_prepare_outsider_recipients_effect = yes } }

ddm_gui_toggle_outsider_recipient_priority = {
    scope = character
    is_valid = { is_alive = yes }
    effect = {
        if = { limit = { has_variable = ddm_outsider_favored_for_land } remove_variable = ddm_outsider_favored_for_land }
        else = { set_variable = ddm_outsider_favored_for_land }
    }
}

# Outsider-holding controls. The checkbox itself lives on the county title, so it is durable across
# inheritance. Bulk actions rebuild the list/counts.
ddm_ui_set_outsider_policy_respect = { scope = character effect = { set_variable = { name = ddm_outsider_policy value = 0 } ddm_prepare_outsider_holdings_effect = yes } }
ddm_ui_set_outsider_policy_reclaim = { scope = character effect = { set_variable = { name = ddm_outsider_policy value = 1 } ddm_prepare_outsider_holdings_effect = yes } }
ddm_ui_outsider_policy_respect = { scope = character is_shown = { var:ddm_outsider_policy = 0 } }
ddm_ui_outsider_policy_reclaim = { scope = character is_shown = { var:ddm_outsider_policy = 1 } }
ddm_ui_outsider_protect_all = { scope = character effect = { ddm_protect_all_outsider_counties_effect = yes } }
ddm_ui_outsider_clear_all = { scope = character effect = { ddm_clear_all_outsider_protections_effect = yes } }
ddm_ui_outsider_refresh = { scope = character effect = { ddm_prepare_outsider_holdings_effect = yes } }
ddm_ui_outsider_next = { scope = character is_valid = { var:ddm_outsider_page < var:ddm_outsider_last_page } effect = { ddm_outsider_page_next_effect = yes } }
ddm_ui_outsider_prev = { scope = character is_valid = { var:ddm_outsider_page > 0 } effect = { ddm_outsider_page_prev_effect = yes } }
ddm_ui_outsider_first = { scope = character is_valid = { var:ddm_outsider_page > 0 } effect = { ddm_outsider_page_first_effect = yes } }
ddm_ui_outsider_last = { scope = character is_valid = { var:ddm_outsider_page < var:ddm_outsider_last_page } effect = { set_variable = { name = ddm_outsider_page value = var:ddm_outsider_last_page } ddm_build_outsider_page_effect = yes } }
ddm_ui_outsider_reclaim_now = { scope = character effect = { remove_variable = ddm_ui_open trigger_event = ddm_manager.1120 } }

ddm_gui_toggle_outsider_protection = {
    scope = landed_title
    is_valid = { tier = tier_county has_variable = ddm_outsider_listed }
    effect = {
        if = { limit = { has_variable = ddm_outsider_protected } remove_variable = ddm_outsider_protected }
        else = { set_variable = ddm_outsider_protected }
    }
}

ddm_ui_open_dynasty_review = { scope = character effect = { ddm_prepare_dynasty_review_ui_effect = yes set_variable = { name = ddm_ui_page value = flag:review } } }
ddm_ui_open_military = { scope = character effect = { ddm_prepare_military_advice_effect = yes set_variable = { name = ddm_ui_page value = flag:military } } }
ddm_ui_open_admin = { scope = character effect = { ddm_initialize_settings_effect = yes set_variable = { name = ddm_ui_page value = flag:policies } } }
ddm_ui_confirm_reclaim = { scope = character effect = { remove_variable = ddm_ui_open trigger_event = ddm_manager.1120 } }

ddm_gui_toggle_core = {
    scope = landed_title
    is_valid = {
        holder = { has_variable = ddm_show_domain_planner }
        this != holder.capital_county
        OR = { has_variable = ddm_manual_core holder = { var:ddm_planner_selected_count < var:ddm_planner_target_count } }
    }
    effect = {
        if = { limit = { has_variable = ddm_manual_core } remove_variable = ddm_manual_core }
        else = { set_variable = ddm_manual_core }
        remove_variable = ddm_manual_shed
        remove_variable = ddm_manual_neutral
        holder = { ddm_refresh_domain_planner_counts_effect = yes }
    }
}

ddm_gui_confirm_domain_plan = {
    scope = character
    is_valid = { has_variable = ddm_show_domain_planner var:ddm_planner_selected_count <= var:ddm_planner_target_count var:ddm_planner_selected_count >= 1 }
    effect = {
        if = {
            limit = { has_variable = ddm_pending_domain_action var:ddm_pending_domain_action > 0 }
            set_variable = { name = ddm_ui_processing_settlement value = 1 }
            ddm_confirm_domain_planner_effect = yes
            remove_variable = ddm_ui_open
            trigger_event = { id = ddm_manager.0111 days = 1 }
        }
        else = { ddm_confirm_domain_planner_effect = yes }
    }
}

ddm_gui_cancel_domain_plan = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_cancel_domain_planner_effect = yes } }
ddm_gui_office_recommendation = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_apply_office_core_recommendation_v19_effect = yes } }
ddm_gui_protect_maa = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_apply_maa_core_preset_v19_effect = yes } }
ddm_gui_protect_capital_duchy = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_apply_capital_duchy_core_preset_v19_effect = yes } }
ddm_gui_clear_core = { scope = character is_valid = { has_variable = ddm_show_domain_planner } effect = { ddm_clear_core_selection_v19_effect = yes } }


ddm_ui_educate_realm = {
    scope = character
    is_valid = {
        is_alive = yes
        is_landed = yes
        OR = {
            highest_held_title_tier = tier_duchy
            highest_held_title_tier = tier_kingdom
            highest_held_title_tier = tier_empire
            highest_held_title_tier = tier_hegemony
        }
        OR = { NOT = { has_variable = ddm_educate_realm_uses } var:ddm_educate_realm_uses < 4 }
    }
    effect = { ddm_prepare_educate_realm_effect = yes trigger_event = ddm_manager.5400 }
}

ddm_ui_education_refresh = { scope = character effect = { ddm_prepare_education_office_effect = yes ddm_prepare_educate_realm_effect = yes } }
ddm_ui_education_prev = { scope = character is_valid = { has_variable = ddm_education_page var:ddm_education_page > 0 } effect = { change_variable = { name = ddm_education_page subtract = 1 } ddm_build_education_page_effect = yes } }
ddm_ui_education_next = { scope = character is_valid = { has_variable = ddm_education_page has_variable = ddm_education_last_page var:ddm_education_page < var:ddm_education_last_page } effect = { change_variable = { name = ddm_education_page add = 1 } ddm_build_education_page_effect = yes } }
ddm_ui_education_first = { scope = character is_valid = { has_variable = ddm_education_page var:ddm_education_page > 0 } effect = { set_variable = { name = ddm_education_page value = 0 } ddm_build_education_page_effect = yes } }
ddm_ui_education_last = { scope = character is_valid = { has_variable = ddm_education_page has_variable = ddm_education_last_page var:ddm_education_page < var:ddm_education_last_page } effect = { set_variable = { name = ddm_education_page value = var:ddm_education_last_page } ddm_build_education_page_effect = yes } }
ddm_ui_toggle_auto_education = {
    scope = character
    effect = {
        ddm_initialize_settings_effect = yes
        if = { limit = { var:ddm_auto_education_enabled = 1 } set_variable = { name = ddm_auto_education_enabled value = 0 } }
        else = { set_variable = { name = ddm_auto_education_enabled value = 1 } }
    }
}
ddm_ui_auto_education_enabled = { scope = character is_shown = { var:ddm_auto_education_enabled = 1 } }
ddm_ui_auto_education_disabled = { scope = character is_shown = { NOT = { var:ddm_auto_education_enabled = 1 } } }
ddm_ui_education_assign_all = {
    scope = character
    is_valid = { var:ddm_education_child_total > 0 var:ddm_education_candidate_total > 0 }
    effect = { ddm_auto_assign_guardians_effect = yes ddm_report_guardian_assignment_effect = yes }
}
ddm_ui_auto_educate = { scope = character is_valid = { var:ddm_education_child_total > 0 var:ddm_education_candidate_total > 0 } effect = { ddm_auto_assign_guardians_effect = yes ddm_report_guardian_assignment_effect = yes } }

# DDM 1.8 — Dynastic Command School. Both modes use identical student rolls/cooldowns; the free mode
# simply skips the aggregate stress calculation after the class.
ddm_ui_command_school_balanced = {
    scope = character
    is_valid = {
        var:ddm_commander_school_traits_known > 0
        var:ddm_commander_school_eligible_total > 0
    }
    effect = { ddm_hold_commander_school_balanced_effect = yes }
}
ddm_ui_command_school_free = {
    scope = character
    is_valid = {
        var:ddm_commander_school_traits_known > 0
        var:ddm_commander_school_eligible_total > 0
    }
    effect = { ddm_hold_commander_school_free_effect = yes }
}

ddm_ui_set_educator_scope_court = { scope = character effect = { set_variable = { name = ddm_educator_scope_mode value = 0 } ddm_prepare_education_office_effect = yes } }
ddm_ui_set_educator_scope_realm = { scope = character effect = { set_variable = { name = ddm_educator_scope_mode value = 1 } ddm_prepare_education_office_effect = yes } }
ddm_ui_set_educator_scope_dynasty = { scope = character effect = { set_variable = { name = ddm_educator_scope_mode value = 2 } ddm_prepare_education_office_effect = yes } }
ddm_ui_set_educator_scope_diplomatic = { scope = character effect = { set_variable = { name = ddm_educator_scope_mode value = 3 } ddm_prepare_education_office_effect = yes } }
ddm_ui_educator_scope_court = { scope = character is_shown = { var:ddm_educator_scope_mode = 0 } }
ddm_ui_educator_scope_realm = { scope = character is_shown = { var:ddm_educator_scope_mode = 1 } }
ddm_ui_educator_scope_dynasty = { scope = character is_shown = { var:ddm_educator_scope_mode = 2 } }
ddm_ui_educator_scope_diplomatic = { scope = character is_shown = { var:ddm_educator_scope_mode = 3 } }

ddm_ui_edu_focus_dip = { scope = character is_shown = { var:ddm_education_focus_mode = 1 } }
ddm_ui_edu_focus_mar = { scope = character is_shown = { var:ddm_education_focus_mode = 2 } }
ddm_ui_edu_focus_ste = { scope = character is_shown = { var:ddm_education_focus_mode = 3 } }
ddm_ui_edu_focus_int = { scope = character is_shown = { var:ddm_education_focus_mode = 4 } }
ddm_ui_edu_focus_lea = { scope = character is_shown = { var:ddm_education_focus_mode = 5 } }
ddm_ui_edu_has_recommendation = { scope = character is_shown = { has_variable = ddm_recommended_guardian } }
ddm_ui_edu_no_recommendation = { scope = character is_shown = { NOT = { has_variable = ddm_recommended_guardian } } }

# Recipient paging.
ddm_ui_recipient_next = { scope = character is_valid = { var:ddm_recipient_page < var:ddm_recipient_last_page } effect = { ddm_recipient_page_next_effect = yes } }
ddm_ui_recipient_prev = { scope = character is_valid = { var:ddm_recipient_page > 0 } effect = { ddm_recipient_page_prev_effect = yes } }
ddm_ui_recipient_first = { scope = character is_valid = { var:ddm_recipient_page > 0 } effect = { ddm_recipient_page_first_effect = yes } }
ddm_ui_recipient_last = { scope = character is_valid = { var:ddm_recipient_page < var:ddm_recipient_last_page } effect = { set_variable = { name = ddm_recipient_page value = var:ddm_recipient_last_page } ddm_build_recipient_page_effect = yes } }

# Marriage Planner controls.
ddm_ui_match_refresh = { scope = character effect = { ddm_refresh_matchmaker_effect = yes } }

# View selection.
ddm_ui_match_set_view_solo = {
    scope = character
    effect = { set_variable = { name = ddm_match_view_mode value = 0 } }
}
ddm_ui_match_set_view_pairs = {
    scope = character
    effect = {
        set_variable = { name = ddm_match_view_mode value = 1 }
        ddm_build_cached_match_pair_board_effect = yes
    }
}
ddm_ui_match_view_solo = { scope = character is_shown = { var:ddm_match_view_mode = 0 } }
ddm_ui_match_view_pairs = { scope = character is_shown = { var:ddm_match_view_mode = 1 } }

# Dynasty Plan can be completed explicitly. Switching views itself remains cache-only and immediate.
ddm_ui_match_complete_dynasty_scan = {
    scope = character
    is_valid = { var:ddm_match_plan_cached_total < var:ddm_match_eligible_count }
    effect = { ddm_complete_dynasty_match_scan_effect = yes }
}

# Individual paging.
ddm_ui_match_next = { scope = character is_valid = { var:ddm_match_page < var:ddm_match_last_page } effect = { ddm_matchmaker_page_next_effect = yes } }
ddm_ui_match_prev = { scope = character is_valid = { var:ddm_match_page > 0 } effect = { ddm_matchmaker_page_prev_effect = yes } }
ddm_ui_match_first = { scope = character is_valid = { var:ddm_match_page > 0 } effect = { ddm_matchmaker_page_first_effect = yes } }
ddm_ui_match_last = { scope = character is_valid = { var:ddm_match_page < var:ddm_match_last_page } effect = { set_variable = { name = ddm_match_page value = var:ddm_match_last_page } ddm_build_matchmaker_page_effect = yes if = { limit = { var:ddm_match_view_mode = 1 } ddm_build_cached_match_pair_board_effect = yes } } }

# Solo sorting.
ddm_ui_match_sort_priority = { scope = character effect = { set_variable = { name = ddm_match_sort_mode value = 0 } ddm_resort_matchmaker_effect = yes } }
ddm_ui_match_sort_dynastic = { scope = character effect = { set_variable = { name = ddm_match_sort_mode value = 1 } ddm_resort_matchmaker_effect = yes } }
ddm_ui_match_sort_age = { scope = character effect = { set_variable = { name = ddm_match_sort_mode value = 2 } ddm_resort_matchmaker_effect = yes } }
ddm_ui_match_sort_fertility = { scope = character effect = { set_variable = { name = ddm_match_sort_mode value = 3 } ddm_resort_matchmaker_effect = yes } }
ddm_ui_match_sort_skills = { scope = character effect = { set_variable = { name = ddm_match_sort_mode value = 4 } ddm_resort_matchmaker_effect = yes } }
ddm_ui_match_sort_reverse = {
    scope = character
    effect = {
        if = { limit = { var:ddm_match_sort_direction < 0 } set_variable = { name = ddm_match_sort_direction value = 1 } }
        else = { set_variable = { name = ddm_match_sort_direction value = -1 } }
        ddm_resort_matchmaker_effect = yes
    }
}

# Dynasty Plan sorting never rescans the marriage pool; it only reorders the cached non-conflicting plan.
ddm_ui_match_pair_sort_score = { scope = character effect = { set_variable = { name = ddm_match_pair_sort_mode value = 0 } ddm_build_cached_match_pair_board_effect = yes } }
ddm_ui_match_pair_sort_children = { scope = character effect = { set_variable = { name = ddm_match_pair_sort_mode value = 1 } ddm_build_cached_match_pair_board_effect = yes } }
ddm_ui_match_pair_sort_love = { scope = character effect = { set_variable = { name = ddm_match_pair_sort_mode value = 2 } ddm_build_cached_match_pair_board_effect = yes } }
ddm_ui_match_pair_sort_kinship = { scope = character effect = { set_variable = { name = ddm_match_pair_sort_mode value = 3 } ddm_build_cached_match_pair_board_effect = yes } }
ddm_ui_match_pair_sort_direct = { scope = character effect = { set_variable = { name = ddm_match_pair_sort_mode value = 4 } ddm_build_cached_match_pair_board_effect = yes } }
ddm_ui_match_pair_sort_reverse = {
    scope = character
    effect = {
        if = { limit = { var:ddm_match_pair_sort_direction < 0 } set_variable = { name = ddm_match_pair_sort_direction value = 1 } }
        else = { set_variable = { name = ddm_match_pair_sort_direction value = -1 } }
        ddm_build_cached_match_pair_board_effect = yes
    }
}

# Dedicated player recommendation card. It uses the exact same recommendation variables and row actions
# as dynasty members, but rescans only the player when requested.
ddm_ui_match_find_me = {
    scope = character
    is_valid = { is_alive = yes is_adult = yes is_married = no is_betrothed = no is_concubine = no can_marry_trigger = yes }
    effect = {
        set_variable = { name = ddm_match_view_mode value = 0 }
        ddm_refresh_player_match_effect = yes
    }
}
ddm_ui_match_player_card_visible = { scope = character is_shown = { has_variable = ddm_match_show_player_match var:ddm_match_show_player_match = 1 } }

# Global marriage philosophy.
ddm_ui_match_set_policy_children = { scope = character effect = { set_variable = { name = ddm_match_policy value = 1 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_set_policy_balanced = { scope = character effect = { set_variable = { name = ddm_match_policy value = 2 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_set_policy_love = { scope = character effect = { set_variable = { name = ddm_match_policy value = 3 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_policy_children = { scope = character is_shown = { var:ddm_match_policy = 1 } }
ddm_ui_match_policy_balanced = { scope = character is_shown = { var:ddm_match_policy = 2 } }
ddm_ui_match_policy_love = { scope = character is_shown = { var:ddm_match_policy = 3 } }

ddm_ui_match_set_dynasty_avoid = { scope = character effect = { set_variable = { name = ddm_match_dynasty_mode value = 0 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_set_dynasty_allow = { scope = character effect = { set_variable = { name = ddm_match_dynasty_mode value = 1 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_set_dynasty_pure = { scope = character effect = { set_variable = { name = ddm_match_dynasty_mode value = 2 } if = { limit = { var:ddm_ui_page = flag:my_marriage } ddm_refresh_player_match_effect = yes } else = { ddm_refresh_matchmaker_current_page_effect = yes } } }
ddm_ui_match_dynasty_avoid = { scope = character is_shown = { var:ddm_match_dynasty_mode = 0 } }
ddm_ui_match_dynasty_allow = { scope = character is_shown = { var:ddm_match_dynasty_mode = 1 } }
ddm_ui_match_dynasty_pure = { scope = character is_shown = { var:ddm_match_dynasty_mode = 2 } }

# Ruler Household controls. Harem mode is now a DDM household registry layered over vanilla
# relationships; it never divorces, marries or forces doctrine-level concubinage.
ddm_ui_household_mode_marriage = { scope = character is_shown = { OR = { NOT = { has_variable = ddm_household_mode } var:ddm_household_mode = 0 } } }
ddm_ui_household_mode_harem = { scope = character is_shown = { has_variable = ddm_household_mode var:ddm_household_mode = 1 } }
ddm_ui_household_set_marriage = { scope = character effect = { set_variable = { name = ddm_household_mode value = 0 } ddm_prepare_household_effect = yes ddm_refresh_player_match_effect = yes } }
ddm_ui_household_set_harem = { scope = character is_valid = { age >= 18 } effect = { set_variable = { name = ddm_household_mode value = 1 } ddm_prepare_household_effect = yes ddm_refresh_player_match_effect = yes } }
ddm_ui_household_refresh = { scope = character effect = { ddm_prepare_household_effect = yes ddm_prepare_heir_advice_effect = yes } }

ddm_ui_household_concubine_prev = { scope = character is_valid = { has_variable = ddm_household_concubine_page var:ddm_household_concubine_page > 0 } effect = { change_variable = { name = ddm_household_concubine_page subtract = 1 } ddm_build_household_concubine_page_effect = yes } }
ddm_ui_household_concubine_next = { scope = character is_valid = { has_variable = ddm_household_concubine_page has_variable = ddm_household_concubine_last_page var:ddm_household_concubine_page < var:ddm_household_concubine_last_page } effect = { change_variable = { name = ddm_household_concubine_page add = 1 } ddm_build_household_concubine_page_effect = yes } }
ddm_ui_household_concubine_first = { scope = character is_valid = { has_variable = ddm_household_concubine_page var:ddm_household_concubine_page > 0 } effect = { set_variable = { name = ddm_household_concubine_page value = 0 } ddm_build_household_concubine_page_effect = yes } }
ddm_ui_household_concubine_last = { scope = character is_valid = { has_variable = ddm_household_concubine_page has_variable = ddm_household_concubine_last_page var:ddm_household_concubine_page < var:ddm_household_concubine_last_page } effect = { set_variable = { name = ddm_household_concubine_page value = var:ddm_household_concubine_last_page } ddm_build_household_concubine_page_effect = yes } }

ddm_ui_household_child_prev = { scope = character is_valid = { has_variable = ddm_household_child_page var:ddm_household_child_page > 0 } effect = { change_variable = { name = ddm_household_child_page subtract = 1 } ddm_build_household_child_page_effect = yes } }
ddm_ui_household_child_next = { scope = character is_valid = { has_variable = ddm_household_child_page has_variable = ddm_household_child_last_page var:ddm_household_child_page < var:ddm_household_child_last_page } effect = { change_variable = { name = ddm_household_child_page add = 1 } ddm_build_household_child_page_effect = yes } }
ddm_ui_household_child_first = { scope = character is_valid = { has_variable = ddm_household_child_page var:ddm_household_child_page > 0 } effect = { set_variable = { name = ddm_household_child_page value = 0 } ddm_build_household_child_page_effect = yes } }
ddm_ui_household_child_last = { scope = character is_valid = { has_variable = ddm_household_child_page has_variable = ddm_household_child_last_page var:ddm_household_child_page < var:ddm_household_child_last_page } effect = { set_variable = { name = ddm_household_child_page value = var:ddm_household_child_last_page } ddm_build_household_child_page_effect = yes } }









# Datamodel rows are individual concubines/children.









ddm_ui_household_release_row = {
    scope = character
    is_valid = { has_variable = ddm_harem_patron var:ddm_harem_patron = { is_alive = yes age >= 18 } has_variable = ddm_harem_active var:ddm_harem_active = 1 is_alive = yes age >= 18 }
    effect = { save_scope_as = ddm_household_release_target var:ddm_harem_patron = { ddm_release_household_concubine_effect = yes } }
}

# On the ruler's own recommendation card, Harem mode replaces Marry with Take as Concubine whenever the
# selected candidate is already physically present and unattached. Foreign candidates continue to expose
# Kidnap so the established expedition can bring them to court first.
ddm_ui_match_subject_concubine_actionable = {
    scope = character
    is_shown = {
        this = var:ddm_match_planner_owner
        var:ddm_match_planner_owner = { has_variable = ddm_household_mode var:ddm_household_mode = 1 }
        exists = var:ddm_match_sel
        var:ddm_match_sel = { is_alive = yes age >= 18 is_imprisoned = no is_in_the_same_court_as_or_guest = root }
    }
}
ddm_ui_match_subject_take_concubine = {
    scope = character
    is_valid = {
        this = var:ddm_match_planner_owner
        var:ddm_match_planner_owner = { has_variable = ddm_household_mode var:ddm_household_mode = 1 }
        exists = var:ddm_match_sel
        var:ddm_match_sel = { is_alive = yes age >= 18 is_imprisoned = no is_in_the_same_court_as_or_guest = root }
    }
    effect = { ddm_take_selected_match_as_concubine_effect = yes }
}

# Per-dynast controls. The row acts on the cycled selection, not always on the top recommendation.
ddm_ui_match_subject_has_best = { scope = character is_shown = { has_variable = ddm_match_best } }
ddm_ui_match_subject_no_best = { scope = character is_shown = { NOT = { has_variable = ddm_match_best } } }
ddm_ui_match_subject_has_second = { scope = character is_shown = { has_variable = ddm_match_second } }
ddm_ui_match_subject_has_third = { scope = character is_shown = { has_variable = ddm_match_third } }
ddm_ui_match_best_kin_none = { scope = character is_shown = { has_variable = ddm_match_sel_kinship var:ddm_match_sel_kinship = 0 } }
ddm_ui_match_best_kin_dynasty = { scope = character is_shown = { has_variable = ddm_match_sel_kinship var:ddm_match_sel_kinship = 1 } }
ddm_ui_match_best_kin_extended = { scope = character is_shown = { has_variable = ddm_match_sel_kinship var:ddm_match_sel_kinship = 2 } }
ddm_ui_match_best_kin_close = { scope = character is_shown = { has_variable = ddm_match_sel_kinship var:ddm_match_sel_kinship = 3 } }
ddm_ui_match_subject_cycle_selection = { scope = character is_valid = { has_variable = ddm_match_sel_count var:ddm_match_sel_count > 1 } effect = { ddm_cycle_match_selection_effect = yes } }
ddm_ui_match_subject_marry_actionable = {
    scope = character
    is_shown = {
        ddm_match_selection_actionable_trigger = yes
        NOT = {
            AND = {
                this = var:ddm_match_planner_owner
                var:ddm_match_planner_owner = { has_variable = ddm_household_mode var:ddm_household_mode = 1 }
            }
        }
    }
}
ddm_ui_match_subject_marry_blocked = { scope = character is_shown = { exists = var:ddm_match_sel NOT = { ddm_match_selection_actionable_trigger = yes } NOT = { ddm_match_selected_kidnappable_trigger = yes } } }
ddm_ui_match_subject_marry = { scope = character is_valid = { ddm_match_selection_actionable_trigger = yes } effect = { ddm_marry_selected_match_effect = yes } }
ddm_ui_match_subject_kidnap_visible = { scope = character is_shown = { exists = var:ddm_match_sel ddm_match_selected_kidnappable_trigger = yes } }
ddm_ui_match_subject_kidnap = {
    scope = character
    is_valid = { ddm_match_selected_kidnappable_trigger = yes }
    effect = {
        var:ddm_match_sel = { save_scope_as = ddm_kidnap_target }
        var:ddm_match_planner_owner = {
            save_scope_as = ddm_kidnap_actor
            ddm_prepare_kidnap_context_effect = yes
            trigger_event = ddm_manager.4999
        }
    }
}

# Dynasty Plan rows.
ddm_ui_match_pair_can_marry = { scope = character is_valid = { exists = var:ddm_match_pair_candidate } }
ddm_ui_match_pair_not_managed = { scope = character is_shown = { NOT = { ddm_match_cached_pair_autofinalizable_trigger = yes } } }
ddm_ui_match_pair_marry = { scope = character is_valid = { exists = var:ddm_match_pair_candidate } effect = { ddm_marry_cached_pair_effect = yes } }
ddm_ui_match_pair_kin_none = { scope = character is_shown = { has_variable = ddm_match_pair_kinship var:ddm_match_pair_kinship = 0 } }
ddm_ui_match_pair_kin_dynasty = { scope = character is_shown = { has_variable = ddm_match_pair_kinship var:ddm_match_pair_kinship = 1 } }
ddm_ui_match_pair_kin_extended = { scope = character is_shown = { has_variable = ddm_match_pair_kinship var:ddm_match_pair_kinship = 2 } }
ddm_ui_match_pair_kin_close = { scope = character is_shown = { has_variable = ddm_match_pair_kinship var:ddm_match_pair_kinship = 3 } }

# Bulk automation only consumes the non-conflicting pair board and only finalizes pairs controlled by
# the player's matchmaker. External recommendations are skipped instead of being forced.
ddm_ui_match_marry_all = {
    scope = character
    is_valid = { var:ddm_match_view_mode = 1 var:ddm_match_pair_managed_total > 0 }
    effect = { ddm_marry_all_planned_pairs_effect = yes }
}

ddm_ui_review_refresh = { scope = character effect = { ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_next = { scope = character is_valid = { var:ddm_review_page < var:ddm_review_last_page } effect = { ddm_dynasty_review_page_next_effect = yes } }
ddm_ui_review_prev = { scope = character is_valid = { var:ddm_review_page > 0 } effect = { ddm_dynasty_review_page_prev_effect = yes } }
ddm_ui_review_first = { scope = character is_valid = { var:ddm_review_page > 0 } effect = { ddm_dynasty_review_page_first_effect = yes } }
ddm_ui_review_last = { scope = character is_valid = { var:ddm_review_page < var:ddm_review_last_page } effect = { set_variable = { name = ddm_review_page value = var:ddm_review_last_page } ddm_build_dynasty_review_page_effect = yes } }

ddm_ui_review_sort_value = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 0 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_quality = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 1 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_merit = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 2 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_safety = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 3 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_family = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 4 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_land = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 5 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_age = { scope = character effect = { set_variable = { name = ddm_review_sort_mode value = 6 } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_review_sort_reverse = { scope = character effect = { if = { limit = { var:ddm_review_sort_direction < 0 } set_variable = { name = ddm_review_sort_direction value = 1 } } else = { set_variable = { name = ddm_review_sort_direction value = -1 } } set_variable = { name = ddm_review_page value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }

ddm_ui_review_toggle_protected = {
    scope = character
    is_valid = { is_alive = yes }
    effect = {
        if = { limit = { has_character_flag = ddm_protected_from_automation } remove_character_flag = ddm_protected_from_automation }
        else = { add_character_flag = ddm_protected_from_automation }
    }
}
ddm_ui_review_is_protected = { scope = character is_shown = { has_character_flag = ddm_protected_from_automation } }
ddm_ui_review_is_target = { scope = character is_shown = { has_character_flag = ddm_selected_for_review NOT = { has_character_flag = ddm_protected_from_automation } } }
ddm_ui_review_is_safe = { scope = character is_shown = { NOT = { has_character_flag = ddm_selected_for_review } NOT = { has_character_flag = ddm_protected_from_automation } } }

ddm_ui_set_purge_stage_1 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 1 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_2 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 2 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_3 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 3 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_4 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 4 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_5 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 5 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_6 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 6 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_stage_7 = { scope = character effect = { set_variable = { name = ddm_purge_stage value = 7 } ddm_prepare_dynasty_review_ui_effect = yes } }

ddm_ui_set_purge_method_1 = { scope = character effect = { set_variable = { name = ddm_purge_method value = 1 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_method_2 = { scope = character effect = { set_variable = { name = ddm_purge_method value = 2 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_purge_method_3 = { scope = character effect = { set_variable = { name = ddm_purge_method value = 3 } ddm_prepare_dynasty_review_ui_effect = yes } }

ddm_ui_set_floor_0 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 0 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_floor_4 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 4 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_floor_8 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 8 } ddm_prepare_dynasty_review_ui_effect = yes } }
ddm_ui_set_floor_12 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 12 } ddm_prepare_dynasty_review_ui_effect = yes } }

# Lightweight policy-page floor setters.  Unlike the Review controls these do not rebuild and score the
# entire dynasty simply because a policy value changed.
ddm_ui_policy_set_floor_0 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 0 } } }
ddm_ui_policy_set_floor_4 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 4 } } }
ddm_ui_policy_set_floor_8 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 8 } } }
ddm_ui_policy_set_floor_12 = { scope = character effect = { set_variable = { name = ddm_min_dynasty_floor value = 12 } } }

ddm_ui_review_arm = { scope = character is_valid = { var:ddm_purge_candidate_count > 0 } effect = { set_variable = { name = ddm_review_execute_armed value = 1 } } }
ddm_ui_review_is_armed = { scope = character is_shown = { has_variable = ddm_review_execute_armed var:ddm_review_execute_armed = 1 } }
ddm_ui_review_is_not_armed = {
    scope = character
    is_shown = {
        NOT = {
            AND = {
                has_variable = ddm_review_execute_armed
                var:ddm_review_execute_armed = 1
            }
        }
    }
}
ddm_ui_review_execute = {
    scope = character
    is_valid = { has_variable = ddm_review_execute_armed var:ddm_review_execute_armed = 1 var:ddm_purge_candidate_count > 0 }
    effect = {
        ddm_build_purge_register_effect = yes
        ddm_execute_dynasty_purge_effect = yes
        send_interface_toast = { type = event_toast_effect_good title = DDM_UI_REVIEW_DONE_TOAST left_icon = root }
        ddm_prepare_dynasty_review_ui_effect = yes
    }
}

ddm_ui_military_refresh = { scope = character effect = { ddm_prepare_military_advice_effect = yes } }

# Grand Capitulation requirement diagnostics. The Military Office renders the pass/fail state directly so a
# disabled button explains itself without requiring the player to infer which gate failed.
ddm_ui_cap_req_landed_ok = { scope = character is_shown = { is_landed = yes } }
ddm_ui_cap_req_landed_no = { scope = character is_shown = { is_landed = no } }
ddm_ui_cap_req_free_ok = { scope = character is_shown = { is_imprisoned = no } }
ddm_ui_cap_req_free_no = { scope = character is_shown = { is_imprisoned = yes } }
ddm_ui_cap_req_peace_ok = { scope = character is_shown = { is_at_war = no } }
ddm_ui_cap_req_peace_no = { scope = character is_shown = { is_at_war = yes } }
ddm_ui_cap_req_crowns_ok = { scope = character is_shown = { any_held_title = { tier = tier_kingdom count >= 3 } } }
ddm_ui_cap_req_crowns_no = { scope = character is_shown = { NOT = { any_held_title = { tier = tier_kingdom count >= 3 } } } }
ddm_ui_cap_req_cooldown_ok = { scope = character is_shown = { NOT = { has_character_flag = ddm_grand_capitulation_cooldown } } }
ddm_ui_cap_req_cooldown_no = { scope = character is_shown = { has_character_flag = ddm_grand_capitulation_cooldown } }

ddm_ui_grand_capitulation = {
    scope = character
    is_valid = { ddm_grand_capitulation_available_trigger = yes }
    effect = {
        remove_variable = ddm_ui_open
        trigger_event = ddm_manager.5100
    }
}
ddm_ui_military_smart_build = { scope = character effect = { ddm_prepare_military_advice_effect = yes ddm_smart_maa_construction_effect = yes } }
ddm_ui_build_camps = { scope = character effect = { ddm_bulk_build_military_camps_effect = yes } }
ddm_ui_build_barracks = { scope = character effect = { ddm_bulk_build_barracks_effect = yes } }
ddm_ui_build_stables = { scope = character effect = { ddm_bulk_build_stables_effect = yes } }
ddm_ui_build_regimental = { scope = character effect = { ddm_bulk_build_regimental_grounds_effect = yes } }

ddm_ui_maa_plan_11 = { scope = character is_shown = { var:ddm_maa_roster_plan = 11 } }
ddm_ui_maa_plan_12 = { scope = character is_shown = { var:ddm_maa_roster_plan = 12 } }
ddm_ui_maa_plan_20 = { scope = character is_shown = { var:ddm_maa_roster_plan = 20 } }
ddm_ui_maa_plan_30 = { scope = character is_shown = { var:ddm_maa_roster_plan = 30 } }
ddm_ui_maa_plan_40 = { scope = character is_shown = { var:ddm_maa_roster_plan = 40 } }
ddm_ui_maa_plan_50 = { scope = character is_shown = { var:ddm_maa_roster_plan = 50 } }
ddm_ui_maa_plan_90 = { scope = character is_shown = { var:ddm_maa_roster_plan = 90 } }
ddm_ui_maa_plan_99 = { scope = character is_shown = { var:ddm_maa_roster_plan = 99 } }

ddm_ui_set_reserve_0 = { scope = character effect = { set_variable = { name = ddm_build_reserve value = 0 } } }
ddm_ui_set_reserve_500 = { scope = character effect = { set_variable = { name = ddm_build_reserve value = 500 } } }
ddm_ui_set_reserve_1000 = { scope = character effect = { set_variable = { name = ddm_build_reserve value = 1000 } } }
ddm_ui_set_reserve_2500 = { scope = character effect = { set_variable = { name = ddm_build_reserve value = 2500 } } }
ddm_ui_set_reserve_5000 = { scope = character effect = { set_variable = { name = ddm_build_reserve value = 5000 } } }



# Dynasty Office — Prime Education. Old Baby Mode saves remain eligible because the page is keyed only to
# the current child ruler / child player heir, never to ddm_baby_mode_resolved.
ddm_ui_prime_has_subject = { scope = character is_shown = { has_variable = ddm_prime_subject } }
ddm_ui_prime_no_subject = { scope = character is_shown = { NOT = { has_variable = ddm_prime_subject } } }
ddm_ui_prime_has_scan = { scope = character is_shown = { var:ddm_prime_has_scan = 1 } }
ddm_ui_prime_no_scan = { scope = character is_shown = { NOT = { var:ddm_prime_has_scan = 1 } } }

ddm_ui_prime_temperament_virtuous = { scope = character is_shown = { var:ddm_prime_temperament_mode = 1 } }
ddm_ui_prime_temperament_pragmatic = { scope = character is_shown = { var:ddm_prime_temperament_mode = 2 } }
ddm_ui_prime_temperament_ruthless = { scope = character is_shown = { var:ddm_prime_temperament_mode = 3 } }

ddm_ui_prime_set_virtuous = { scope = character effect = { set_variable = { name = ddm_prime_temperament_mode value = 1 } ddm_prime_clear_scan_effect = yes } }
ddm_ui_prime_set_pragmatic = { scope = character effect = { set_variable = { name = ddm_prime_temperament_mode value = 2 } ddm_prime_clear_scan_effect = yes } }
ddm_ui_prime_set_ruthless = { scope = character effect = { set_variable = { name = ddm_prime_temperament_mode value = 3 } ddm_prime_clear_scan_effect = yes } }

ddm_ui_prime_generate = { scope = character is_valid = { has_variable = ddm_prime_subject } effect = { ddm_prime_generate_teachers_effect = yes } }

ddm_ui_prime_has_dip = { scope = character is_shown = { has_variable = ddm_prime_teacher_dip } }
ddm_ui_prime_has_mar = { scope = character is_shown = { has_variable = ddm_prime_teacher_mar } }
ddm_ui_prime_has_ste = { scope = character is_shown = { has_variable = ddm_prime_teacher_ste } }
ddm_ui_prime_has_int = { scope = character is_shown = { has_variable = ddm_prime_teacher_int } }
ddm_ui_prime_has_lea = { scope = character is_shown = { has_variable = ddm_prime_teacher_lea } }

ddm_ui_prime_recommend_dip = { scope = character is_shown = { var:ddm_prime_recommended_focus = 1 } }
ddm_ui_prime_recommend_mar = { scope = character is_shown = { var:ddm_prime_recommended_focus = 2 } }
ddm_ui_prime_recommend_ste = { scope = character is_shown = { var:ddm_prime_recommended_focus = 3 } }
ddm_ui_prime_recommend_int = { scope = character is_shown = { var:ddm_prime_recommended_focus = 4 } }
ddm_ui_prime_recommend_lea = { scope = character is_shown = { var:ddm_prime_recommended_focus = 5 } }

ddm_ui_prime_can_apply = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_recommended_teacher has_variable = ddm_prime_subject var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_apply_recommended_effect = yes ddm_prepare_prime_education_page_effect = yes } }
ddm_ui_prime_use_dip = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_teacher_dip var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_use_diplomacy_effect = yes ddm_prepare_prime_education_page_effect = yes } }
ddm_ui_prime_use_mar = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_teacher_mar var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_use_martial_effect = yes ddm_prepare_prime_education_page_effect = yes } }
ddm_ui_prime_use_ste = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_teacher_ste var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_use_stewardship_effect = yes ddm_prepare_prime_education_page_effect = yes } }
ddm_ui_prime_use_int = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_teacher_int var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_use_intrigue_effect = yes ddm_prepare_prime_education_page_effect = yes } }
ddm_ui_prime_use_lea = { scope = character is_valid = { var:ddm_prime_has_scan = 1 has_variable = ddm_prime_teacher_lea var:ddm_prime_subject = { is_adult = no } } effect = { ddm_prime_use_learning_effect = yes ddm_prepare_prime_education_page_effect = yes } }


# Household Succession Council (2.0.3)
ddm_ui_heir_has_primary = { scope = character is_shown = { exists = primary_heir } }
ddm_ui_heir_no_primary = { scope = character is_shown = { NOT = { exists = primary_heir } } }
ddm_ui_heir_has_player = { scope = character is_shown = { exists = player_heir } }
ddm_ui_heir_no_player = { scope = character is_shown = { NOT = { exists = player_heir } } }
ddm_ui_heir_view_court = { scope = character is_shown = { var:ddm_heir_advice_view = 1 } }
ddm_ui_heir_view_house = { scope = character is_shown = { var:ddm_heir_advice_view = 2 } }
ddm_ui_heir_view_dynasty = { scope = character is_shown = { var:ddm_heir_advice_view = 3 } }
ddm_ui_heir_view_vassals = { scope = character is_shown = { var:ddm_heir_advice_view = 4 } }
ddm_ui_heir_set_court = { scope = character effect = { set_variable = { name = ddm_heir_advice_view value = 1 } ddm_prepare_heir_advice_effect = yes } }
ddm_ui_heir_set_house = { scope = character effect = { set_variable = { name = ddm_heir_advice_view value = 2 } ddm_prepare_heir_advice_effect = yes } }
ddm_ui_heir_set_dynasty = { scope = character effect = { set_variable = { name = ddm_heir_advice_view value = 3 } ddm_prepare_heir_advice_effect = yes } }
ddm_ui_heir_set_vassals = { scope = character effect = { set_variable = { name = ddm_heir_advice_view value = 4 } ddm_prepare_heir_advice_effect = yes } }
ddm_ui_heir_force_designate_row = {
    scope = character
    is_valid = { is_alive = yes has_variable = ddm_heir_advice_owner var:ddm_heir_advice_owner = { is_alive = yes is_ai = no } is_child_of = var:ddm_heir_advice_owner }
    effect = {
        save_scope_as = ddm_heir_forced_choice
        var:ddm_heir_advice_owner = { save_scope_as = ddm_heir_force_owner }
        scope:ddm_heir_force_owner = {
            set_designated_heir_unsafe = scope:ddm_heir_forced_choice
            send_interface_toast = { type = event_toast_effect_good title = DDM_UI_HEIR_FORCED_TOAST left_icon = scope:ddm_heir_force_owner right_icon = scope:ddm_heir_forced_choice }
            ddm_prepare_heir_advice_effect = yes
        }
    }
}

