As an additional test I took the simple demo from twisted web in 60 seconds and checked that out.

from twisted.web.server import Site
from twisted.web.static import File
from twisted.internet import reactor

resource = File('/tmp')
resource.indexNames = ['adminuser.html']
factory = Site(resource)
reactor.listenTCP(8888, factory)

The adminuser.html has the same sort of link to get the css and in this case all renders successfully.

But here the whole site is set up as static so I can see why that might have worked.

For anyone really interested below is the css as well.

body {
  padding-left: 11em;
  color: black;
  background-color: #ff0000 }
h1 {
  color: orange;
ul.navbar {
  list-style-type: none;
  padding: 0;
  margin: 0;
  position: absolute;
  top: 2em;
  left: 1em;
  width: 7em }
h1 {
  font-family: Helvetica, Geneva, Arial,
        SunSans-Regular, sans-serif }
ul.navbar li {
  background: #ececec;
  margin: 0.5em 0;
  padding: 0.3em;
  border-right: 1em solid black }
ul.navbar a {
  text-decoration: none }
a:link {
  color: maroon }
a:visited {
  color: blue }
address {
  margin-top: 1em;
  padding-top: 1em;
  border-top: thin dotted }
.layout1 {
   background-color: f2f2f2;
   color: red;
   align: center;
   width: 50%

.box1 {
   background-color: #efefef;
   height: 20%
John Aherne
020 7223 7567