Accepted answer

Use 'url(#arrow)', not 'url(marker#arrow)'.

The value inside the url() is a URL, not a CSS selector! In this case, it is a local URL fragment, which just happens to look like the equivalent selector. However, if you were going to put anything before the #, it would be a full URL, like url(