The request is not the state. Press + and − to ask the reactor for power. A unit is drawn filled only when the system's readback confirms it; until then it is hollow and the row says PENDING. The simulated system answers after a second. Cut its telemetry and the row reads NO READBACK; jam a consumer and it reads MISMATCH. Neither ever settles to what you asked for on its own. A hit damages capacity: damaged units are crossed out in the pool, and any command the remaining capacity cannot fund is drawn unfunded, never as allocated. With no free capacity the + buttons say so before you press them.
import 'overscan'
import 'overscan/overscan.css'
<ov-allocator
capacity="10"
consumers="SHIELDS:4, ENGINES:4, WEAPONS:4, O2:2"
timeout="2500"
commanded="SHIELDS=3, ENGINES=2, O2=2"
readback="SHIELDS=3, ENGINES=2, O2=2"
label="Reactor"
></ov-allocator>import { OvAllocator } from 'overscan/react'
<OvAllocator
capacity="10"
consumers="SHIELDS:4, ENGINES:4, WEAPONS:4, O2:2"
timeout="2500"
commanded="SHIELDS=3, ENGINES=2, O2=2"
readback="SHIELDS=3, ENGINES=2, O2=2"
label="Reactor"
/>import { OvAllocator } from 'overscan/vue'
<OvAllocator
capacity="10"
consumers="SHIELDS:4, ENGINES:4, WEAPONS:4, O2:2"
timeout="2500"
commanded="SHIELDS=3, ENGINES=2, O2=2"
readback="SHIELDS=3, ENGINES=2, O2=2"
label="Reactor"
/>import OvAllocator from 'overscan/svelte/OvAllocator.svelte'
<OvAllocator
capacity="10"
consumers="SHIELDS:4, ENGINES:4, WEAPONS:4, O2:2"
timeout="2500"
commanded="SHIELDS=3, ENGINES=2, O2=2"
readback="SHIELDS=3, ENGINES=2, O2=2"
label="Reactor"
/>