{#if error}{/if} {#if notice}

{notice}

{/if} {#if query.trim()}

{shownCount} {shownCount === 1 ? 'setting matches' : 'settings match'} “{query.trim()}” across all sections.

{/if} {#if reviewInvalid && invalid.length}

Showing invalid settings across all sections.

{/if}
{ event.preventDefault(); void save(); }} >
Fleet settings {#each visibleGroups as group (group.id)}

{group.title}

{group.description}

{#each group.keys as key (key)} {@const zeroMode = settingZeroMode(key)} {@const unlimited = !!zeroMode && draft[key] === 0} {@const validation = validationMessage(key, draft[key])} {/each}
SettingValueDefaultWhat it affects
{#if changed.includes(key)}Changed{/if}
{#if unlimited} {:else} { error = ''; notice = ''; }} />{/if} {settingUnit(key)}
{#if zeroMode}{/if} {#if validation}

{validation}

{/if}
Default: {settingDisplayValue( key, defaultFleetSettings[key] )} {settingHelp[key]}
{#if group.id === 'concurrency'}

Lowering a limit lets active operations finish; queued work waits for capacity. Player safety checks still apply.

{/if}
{:else}

No settings match this search. Try a setting name, a section, or “Forever”.

{/each}
0}> Retention preview and protections {#if invalid.length}

Correct invalid values to preview cleanup.

{/if}
0} >{changed.length ? `${changed.length} unsaved ${changed.length === 1 ? 'change' : 'changes'}` : 'All changes saved'} Applies to everyone. No restart needed. {#if invalid.length}{/if}