Reverting the theme to light for the demo and switching icons set.

Change-Id: Ic3f7b46ce56100aabc1b7df3370218cbfd94db0c
diff --git a/tools/test/topos/sdn-ip.json b/tools/test/topos/sdn-ip.json
new file mode 100644
index 0000000..80464b1
--- /dev/null
+++ b/tools/test/topos/sdn-ip.json
@@ -0,0 +1,13 @@
+{
+    "hosts" : [
+        { "mac": "00:00:00:00:00:01", "vlan": -1, "location": "of:0000000000000001/10", "ip": "0.0.0.0", "annotations": { "type": "bgpSpeaker" } },
+        { "mac": "00:00:00:00:00:02", "vlan": -1, "location": "of:0000000000000002/10", "ip": "0.0.0.0", "annotations": { "type": "bgpSpeaker" } },
+        { "mac": "00:00:00:00:00:03", "vlan": -1, "location": "of:0000000000000003/10", "ip": "0.0.0.0", "annotations": { "type": "bgpSpeaker" } },
+        { "mac": "00:00:00:00:01:01", "vlan": -1, "location": "of:0000000000000005/10", "ip": "0.0.0.0", "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:01:02", "vlan": -1, "location": "of:0000000000000006/10", "ip": "0.0.0.0", "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:02:01", "vlan": -1, "location": "of:0000000000000007/10", "ip": "0.0.0.0", "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:03:01", "vlan": -1, "location": "of:0000000000000008/10", "ip": "0.0.0.0", "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:04:01", "vlan": -1, "location": "of:0000000000000009/10", "ip": "0.0.0.0", "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:44:01", "vlan": -1, "location": "of:0000000000000010/10", "ip": "0.0.0.0", "annotations": { "type": "router" } }
+    ]
+}
\ No newline at end of file
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
index 87ea7cd..5796c65 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
@@ -63,6 +63,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Strings.isNullOrEmpty;
 import static org.onlab.onos.cluster.ClusterEvent.Type.INSTANCE_ADDED;
 import static org.onlab.onos.cluster.ClusterEvent.Type.INSTANCE_REMOVED;
 import static org.onlab.onos.cluster.ControllerNode.State.ACTIVE;
@@ -253,8 +254,10 @@
     // Produces a host event message to the client.
     protected ObjectNode hostMessage(HostEvent event) {
         Host host = event.subject();
+        String hostType = host.annotations().value("type");
         ObjectNode payload = mapper.createObjectNode()
                 .put("id", host.id().toString())
+                .put("type", isNullOrEmpty(hostType) ? "host" : hostType)
                 .put("ingress", compactLinkString(edgeLink(host, true)))
                 .put("egress", compactLinkString(edgeLink(host, false)));
         payload.set("cp", hostConnect(mapper, host.location()));
@@ -358,8 +361,10 @@
     protected ObjectNode hostDetails(HostId hostId, long sid) {
         Host host = hostService.getHost(hostId);
         Annotations annot = host.annotations();
+        String type = annot.value("type");
         return envelope("showDetails", sid,
-                        json(hostId.toString(), "host",
+                        json(hostId.toString(), isNullOrEmpty(type) ? "host" : type,
+                             new Prop("Name", annot.value("name")),
                              new Prop("MAC", host.mac().toString()),
                              new Prop("IP", host.ipAddresses().toString()),
                              new Separator(),
diff --git a/web/gui/src/main/webapp/icons.svg b/web/gui/src/main/webapp/icons.svg
deleted file mode 100644
index 524594b..0000000
--- a/web/gui/src/main/webapp/icons.svg
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
-  <symbol id="switch">
-    <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(-344.44812,-517.03149)">
-      <path d="m 389.9165,532.15849 -44.64875,0 0,14.495 44.64875,0 0,-14.495 z" id="path24009" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001"/>
-      <g id="g24011" transform="matrix(1.25,0,0,-1.25,345.15125,532.23224)">
-        <path d="m 0,0 14.428,11.694 33.33,0 L 35.779,0 0,0 z" id="path24013" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g24015" transform="matrix(1.25,0,0,-1.25,345.15125,532.23224)">
-        <path d="m 0,0 14.428,11.694 33.33,0 L 35.779,0 0,0 z" id="path24017" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g24019" transform="matrix(1.25,0,0,-1.25,389.8925,547.10962)">
-        <path d="M 0,0 11.932,12.892 11.939,23.575 0,11.919 0,0 z" id="path24021" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g24023" transform="matrix(1.25,0,0,-1.25,389.8925,547.10962)">
-        <path d="M 0,0 11.932,12.892 11.939,23.575 0,11.919 0,0 z" id="path24025" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g24027" transform="matrix(1.25,0,0,-1.25,371.32312,528.42974)">
-        <path d="m 0,0 -0.691,-0.568 -8.911,0 -0.886,-0.888 -2.414,1.052 4.853,1.389 L -8.906,0 0,0 z" id="path24029" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g24031" transform="matrix(1.25,0,0,-1.25,380.07312,522.96099)">
-        <path d="m 0,0 -0.691,-0.568 -8.911,0 -0.886,-0.888 -2.414,1.052 4.853,1.389 L -8.906,0 0,0 z" id="path24033" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g24035" transform="matrix(1.25,0,0,-1.25,373.28837,526.49738)">
-        <path d="m 0,0 0.691,0.569 8.913,0 L 10.49,1.456 12.904,0.405 8.049,-0.984 8.908,0 0,0 z" id="path24037" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g24039" transform="matrix(1.25,0,0,-1.25,379.06962,521.02863)">
-        <path d="m 0,0 0.691,0.569 8.913,0 L 10.49,1.456 12.904,0.405 8.049,-0.984 8.908,0 0,0 z" id="path24041" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-    </g>
-  </symbol>
-  <symbol id="router">
-    <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(-351.74132,-516.62992)">
-      <g id="g18775" transform="matrix(1.25,0,0,-1.25,397.99132,525.81444)">
-        <path d="m 0,0 c 0,-3.95 -8.235,-7.152 -18.393,-7.152 -10.158,0 -18.393,3.202 -18.393,7.152 l 0,-10.478 c 0,-3.948 8.235,-7.151 18.393,-7.151 10.158,0 18.393,3.203 18.393,7.151 L 0,0 z" id="path18777" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g18779" transform="matrix(1.25,0,0,-1.25,397.99132,525.81444)">
-        <path d="m 0,0 c 0,-3.95 -8.235,-7.152 -18.393,-7.152 -10.158,0 -18.393,3.202 -18.393,7.152 l 0,-10.478 c 0,-3.948 8.235,-7.151 18.393,-7.151 10.158,0 18.393,3.203 18.393,7.151 L 0,0 z" id="path18781" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g18783" transform="matrix(1.25,0,0,-1.25,374.99992,534.75492)">
-        <path d="m 0,0 c 10.158,0 18.393,3.202 18.393,7.152 0,3.952 -8.235,7.153 -18.393,7.153 -10.158,0 -18.393,-3.201 -18.393,-7.153 C -18.393,3.202 -10.158,0 0,0" id="path18785" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g18787" transform="matrix(1.25,0,0,-1.25,374.99992,534.75492)">
-        <path d="m 0,0 c 10.158,0 18.393,3.202 18.393,7.152 0,3.952 -8.235,7.153 -18.393,7.153 -10.158,0 -18.393,-3.201 -18.393,-7.153 C -18.393,3.202 -10.158,0 0,0 z" id="path18789" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g18791" transform="matrix(1.25,0,0,-1.25,369.75031,522.31831)">
-        <path d="m 0,0 1.518,-2.278 -5.742,-1.327 1.255,1.043 -8.875,1.518 2.227,1.669 8.563,-1.45 L 0,0 z" id="path18793" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g18795" transform="matrix(1.25,0,0,-1.25,379.85043,529.22393)">
-        <path d="M 0,0 -1.036,2.35 4.143,3.384 3.245,2.579 11.878,1.104 9.807,-0.553 1.225,1.06 0,0 z" id="path18797" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g18799" transform="matrix(1.25,0,0,-1.25,376.31043,520.76318)">
-        <path d="M 0,0 5.802,1.588 5.87,-0.898 4.42,-0.622 1.589,-2.972 -1.113,-2.576 1.809,-0.279 0,0 z" id="path18801" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g18803" transform="matrix(1.25,0,0,-1.25,373.20244,531.90095)">
-        <path d="M 0,0 -5.525,-1.035 -5.732,1.52 -4.144,1.175 -1.103,3.771 1.588,3.315 -1.658,0.483 0,0 z" id="path18805" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-    </g>
-  </symbol>
-  <symbol id="roadm">
-    <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(-352.14937,-517.55019)">
-      <g id="g23883" transform="matrix(1.25,0,0,-1.25,397.44718,526.34356)">
-        <path d="m 0,0 0,-9.5 -8.725,-6.977 -18.127,0 -9.064,6.977 0,9.5" id="path23885" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g23887" transform="matrix(1.25,0,0,-1.25,386.32906,517.78456)">
-        <path d="m 0,0 -17.787,0 -9.234,-6.847 9.064,-6.977 18.127,0 8.725,6.977 L 0,0 z" id="path23889" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g23891" transform="matrix(1.25,0,0,-1.25,386.32906,517.78456)">
-        <path d="m 0,0 -17.787,0 -9.234,-6.847 9.064,-6.977 18.127,0 8.725,6.977 L 0,0 z" id="path23893" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g23895" transform="matrix(1.25,0,0,-1.25,370.5857,523.05858)">
-        <path d="m 0,0 1.384,-2.076 -5.235,-1.21 1.145,0.952 -6.697,1.421 2.03,1.522 6.412,-1.361 L 0,0 z" id="path23897" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g23899" transform="matrix(1.25,0,0,-1.25,379.79093,529.35194)">
-        <path d="M 0,0 -0.945,2.14 3.777,3.084 2.959,2.351 9.951,1.152 8.064,-0.36 1.117,0.965 0,0 z" id="path23901" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g23903" transform="matrix(1.25,0,0,-1.25,377.03218,521.01569)">
-        <path d="M 0,0 5.289,1.448 5.352,-0.818 4.029,-0.566 1.449,-2.707 -1.014,-2.347 1.65,-0.255 0,0 z" id="path23905" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g23907" transform="matrix(1.25,0,0,-1.25,372.99894,532.36957)">
-        <path d="M 0,0 -5.037,-0.944 -5.224,1.385 -3.777,1.071 -1.006,3.44 1.447,3.023 -1.512,0.441 0,0 z" id="path23909" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g23911" transform="matrix(1.25,0,0,-1.25,386.49758,546.80069)">
-        <path d="M 0,0 0,9.389 M -18.25,0 l 0,9.389" id="path23913" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g25718" transform="matrix(1.25,0,0,-1.25,397.44718,526.34356)">
-        <path d="m 0,0 0,-9.5 -8.725,-6.977 -18.127,0 -9.064,6.977 0,9.5" id="path25720" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g25722" transform="matrix(1.25,0,0,-1.25,386.32906,517.78456)">
-        <path d="m 0,0 -17.787,0 -9.234,-6.847 9.064,-6.977 18.127,0 8.725,6.977 L 0,0 z" id="path25724" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g25726" transform="matrix(1.25,0,0,-1.25,386.32906,517.78456)">
-        <path d="m 0,0 -17.787,0 -9.234,-6.847 9.064,-6.977 18.127,0 8.725,6.977 L 0,0 z" id="path25728" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g25730" transform="matrix(1.25,0,0,-1.25,370.5857,523.05858)">
-        <path d="m 0,0 1.384,-2.076 -5.235,-1.21 1.145,0.952 -6.697,1.421 2.03,1.522 6.412,-1.361 L 0,0 z" id="path25732" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g25734" transform="matrix(1.25,0,0,-1.25,379.79093,529.35194)">
-        <path d="M 0,0 -0.945,2.14 3.777,3.084 2.959,2.351 9.951,1.152 8.064,-0.36 1.117,0.965 0,0 z" id="path25736" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g25738" transform="matrix(1.25,0,0,-1.25,377.03218,521.01569)">
-        <path d="M 0,0 5.289,1.448 5.352,-0.818 4.029,-0.566 1.449,-2.707 -1.014,-2.347 1.65,-0.255 0,0 z" id="path25740" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g25742" transform="matrix(1.25,0,0,-1.25,372.99894,532.36957)">
-        <path d="M 0,0 -5.037,-0.944 -5.224,1.385 -3.777,1.071 -1.006,3.44 1.447,3.023 -1.512,0.441 0,0 z" id="path25744" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g25746" transform="matrix(1.25,0,0,-1.25,386.49758,546.80069)">
-        <path d="M 0,0 0,9.389 M -18.25,0 l 0,9.389" id="path25748" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-    </g>
-  </symbol>
-  <symbol id="endstation">
-    <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(-361.79125,-513.72074)">
-      <g id="g19723" transform="matrix(1.25,0,0,-1.25,381.81625,520.11362)">
-        <path d="m 0,0 -15.82,0 0,-24.512 15.82,0" id="path19725" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g19727" transform="matrix(1.25,0,0,-1.25,381.81625,550.75074)">
-        <path d="m 0,0 4.914,4.912 0,24.512 -14.445,0 L -15.82,24.51 0,24.51 0,0 z" id="path19729" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g19731" transform="matrix(1.25,0,0,-1.25,381.81625,550.75074)">
-        <path d="m 0,0 4.914,4.912 0,24.512 -14.445,0 L -15.82,24.51 0,24.51 0,0 z" id="path19733" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g19735" transform="matrix(1.25,0,0,-1.25,381.81625,520.11362)">
-        <path d="M 0,0 4.914,4.914" id="path19737" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g19739" transform="matrix(1.25,0,0,-1.25,371.85774,520.11362)">
-        <path d="M 0,0 0,-24.512" id="path19741" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g19743" transform="matrix(1.25,0,0,-1.25,372.17024,520.11362)">
-        <path d="M 0,0 5.346,4.914" id="path19745" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <path d="m 379.91712,544.47137 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m -9.52375,0 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m 9.52375,-6.5625 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m -9.52375,0 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m 9.52375,-15 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m -9.52375,0 -6.64125,0 0,4.0625 6.64125,0 0,-4.0625 z m 1.7775,-2.795 6.68125,-6.1425" id="path19747" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-    </g>
-  </symbol>
-  <symbol id="bgpSpeaker">
-    <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(-355.47362,-514.96093)">
-      <path d="m 355.72362,519.29593 34.56875,0 0,30.2175 -34.56875,0 0,-30.2175 z" id="path5104" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      <path d="m 355.72362,519.29593 34.57,0 0,30.2175 -34.57,0 0,-30.2175 z" id="path5106" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      <g id="g5108" transform="matrix(1.25,0,0,-1.25,359.70763,515.2113)">
-        <path d="m 0,0 -3.187,-3.268 27.656,0 L 27.655,0 0,0 z" id="path5110" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5112" transform="matrix(1.25,0,0,-1.25,359.70763,515.2113)">
-        <path d="m 0,0 -3.187,-3.268 27.656,0 L 27.655,0 0,0 z" id="path5114" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g5116" transform="matrix(1.25,0,0,-1.25,394.27674,545.42854)">
-        <path d="m 0,0 0,24.174 -3.186,-3.268 0,-24.174 L 0,0 z" id="path5118" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <path d="m 387.49987,522.07593  z m 6.77625,23.3525 0,-30.2175 -3.9825,4.085 0,30.2175 3.9825,-4.085 z" id="path5120" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      <g id="g5122" transform="matrix(1.25,0,0,-1.25,385.85025,531.2343)">
-        <path d="m 0,0 c 0,-2.152 -4.486,-3.896 -10.02,-3.896 -5.533,0 -10.019,1.744 -10.019,3.896 l 0,-5.707 c 0,-2.152 4.486,-3.897 10.019,-3.897 5.534,0 10.02,1.745 10.02,3.897 L 0,0 z" id="path5124" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5126" transform="matrix(1.25,0,0,-1.25,385.85025,531.2343)">
-        <path d="m 0,0 c 0,-2.152 -4.486,-3.896 -10.02,-3.896 -5.533,0 -10.019,1.744 -10.019,3.896 l 0,-5.707 c 0,-2.152 4.486,-3.897 10.019,-3.897 5.534,0 10.02,1.745 10.02,3.897 L 0,0 z" id="path5128" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g5130" transform="matrix(1.25,0,0,-1.25,373.32524,536.10479)">
-        <path d="M 0,0 C 5.534,0 10.02,1.744 10.02,3.896 10.02,6.049 5.534,7.793 0,7.793 -5.533,7.793 -10.019,6.049 -10.019,3.896 -10.019,1.744 -5.533,0 0,0" id="path5132" inkscape:connector-curvature="0" style="fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5134" transform="matrix(1.25,0,0,-1.25,373.32524,536.10479)">
-        <path d="M 0,0 C 5.534,0 10.02,1.744 10.02,3.896 10.02,6.049 5.534,7.793 0,7.793 -5.533,7.793 -10.019,6.049 -10.019,3.896 -10.019,1.744 -5.533,0 0,0 z" id="path5136" inkscape:connector-curvature="0" style="fill:none;stroke:currentColor;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/>
-      </g>
-      <g id="g5138" transform="matrix(1.25,0,0,-1.25,370.46387,529.32993)">
-        <path d="m 0,0 0.828,-1.241 -3.128,-0.723 0.683,0.569 -4.834,0.828 1.213,0.908 4.665,-0.79 L 0,0 z" id="path5140" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5142" transform="matrix(1.25,0,0,-1.25,375.96798,533.09218)">
-        <path d="M 0,0 -0.565,1.279 2.257,1.844 1.767,1.404 6.47,0.602 5.341,-0.301 0.668,0.577 0,0 z" id="path5144" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5146" transform="matrix(1.25,0,0,-1.25,374.03937,528.48281)">
-        <path d="M 0,0 3.16,0.865 3.198,-0.488 2.408,-0.339 0.865,-1.617 -0.606,-1.403 0.986,-0.151 0,0 z" id="path5148" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-      <g id="g5150" transform="matrix(1.25,0,0,-1.25,372.34687,534.54968)">
-        <path d="M 0,0 -3.01,-0.564 -3.123,0.828 -2.258,0.64 -0.601,2.055 0.865,1.807 -0.903,0.264 0,0 z" id="path5152" inkscape:connector-curvature="0" style="fill:currentColor;fill-opacity:1;fill-rule:nonzero;stroke:none"/>
-      </g>
-    </g>
-  </symbol>
-</svg>
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/img/device.png b/web/gui/src/main/webapp/img/device.png
deleted file mode 100644
index d608153..0000000
--- a/web/gui/src/main/webapp/img/device.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/img/host.png b/web/gui/src/main/webapp/img/host.png
index cacde17..0f4595b 100644
--- a/web/gui/src/main/webapp/img/host.png
+++ b/web/gui/src/main/webapp/img/host.png
Binary files differ
diff --git a/web/gui/src/main/webapp/img/opt.png b/web/gui/src/main/webapp/img/opt.png
deleted file mode 100644
index 2f2c88e..0000000
--- a/web/gui/src/main/webapp/img/opt.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/img/pkt.png b/web/gui/src/main/webapp/img/pkt.png
deleted file mode 100644
index 1b1d5a3..0000000
--- a/web/gui/src/main/webapp/img/pkt.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/img/roadm.png b/web/gui/src/main/webapp/img/roadm.png
index 75ff527..5129683 100644
--- a/web/gui/src/main/webapp/img/roadm.png
+++ b/web/gui/src/main/webapp/img/roadm.png
Binary files differ
diff --git a/web/gui/src/main/webapp/img/switch.png b/web/gui/src/main/webapp/img/switch.png
index d608153..89bd78a 100644
--- a/web/gui/src/main/webapp/img/switch.png
+++ b/web/gui/src/main/webapp/img/switch.png
Binary files differ
diff --git a/web/gui/src/main/webapp/img/us-map.png b/web/gui/src/main/webapp/img/us-map.png
deleted file mode 100644
index 96e84d6..0000000
--- a/web/gui/src/main/webapp/img/us-map.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/index2.html b/web/gui/src/main/webapp/index2.html
index 24aeee3..ce09aab 100644
--- a/web/gui/src/main/webapp/index2.html
+++ b/web/gui/src/main/webapp/index2.html
@@ -40,14 +40,12 @@
     <!-- Base library and framework stylesheets included here -->
     <link rel="stylesheet" href="base.css">
     <link rel="stylesheet" href="onos2.css">
-    <link rel="stylesheet" href="onos_theme.css">
     <link rel="stylesheet" href="mast2.css">
     <link rel="stylesheet" href="floatPanel.css">
 
     <!-- This is where contributed stylesheets get INJECTED -->
     <!-- TODO: replace with template marker and inject refs server-side -->
     <link rel="stylesheet" href="topo2.css">
-    <link rel="stylesheet" href="topo_theme.css">
     <link rel="stylesheet" href="webSockTrace.css">
 
 
@@ -58,7 +56,7 @@
     <script src="onos2.js"></script>
 
 </head>
-<body class='theme_dark'>
+<body>
     <div id="frame">
         <div id="mast">
             <!-- NOTE: masthead injected here by mast.js -->
diff --git a/web/gui/src/main/webapp/onos_theme.css b/web/gui/src/main/webapp/onos_theme.css
deleted file mode 100644
index e69de29..0000000
--- a/web/gui/src/main/webapp/onos_theme.css
+++ /dev/null
diff --git a/web/gui/src/main/webapp/topo2.css b/web/gui/src/main/webapp/topo2.css
index 7ee73c6..484cfe7 100644
--- a/web/gui/src/main/webapp/topo2.css
+++ b/web/gui/src/main/webapp/topo2.css
@@ -25,11 +25,14 @@
 }
 
 #topo #map {
+    stroke-width: 2px;
+    stroke: #aaaaaa;
     fill: transparent;
 }
 
 
 #topo svg .glyph {
+    fill: white;
     stroke: none;
 }
 
@@ -65,20 +68,39 @@
 
 #topo svg .node.device.fixed rect {
     stroke-width: 1.5;
-}
-
-#topo .node text {
-    font-weight: 100;
+    stroke: #ccc;
 }
 
 /* note: device is offline without the 'online' class */
+#topo svg .node.device {
+    fill: #777;
+}
+
+#topo svg .node.device.switch.online {
+    fill: #17f;
+}
+
+#topo svg .node.device.roadm.online {
+    fill: #03c;
+}
+
 /* note: device is offline without the 'online' class */
 #topo svg .node.device text {
+    fill: #aaa;
     font: 10pt sans-serif;
 }
 
+#topo svg .node.device.online text {
+    fill: white;
+}
+
+
 /* Host Nodes */
 
+#topo svg .node.host {
+    stroke: #000;
+}
+
 #topo svg .node.host text {
     fill: #846;
     stroke: none;
@@ -86,11 +108,18 @@
 }
 
 svg .node.host circle {
-    fill: #c96;
+    stroke: #000;
+    fill: #ddd;
 }
 
 #topo svg .node.host.bgpSpeaker circle {
-    fill: #853;
+    stroke: #000;
+    fill: #ddd;
+}
+
+#topo svg .node.host.router circle {
+    stroke: #000;
+    fill: #ddd;
 }
 
 /* LINKS */
@@ -105,23 +134,29 @@
 }
 
 #topo svg .link.primary {
+    stroke: #f11;
     stroke-width: 6px;
 }
 #topo svg .link.secondary {
+    stroke: rgba(255,100,100,0.5);
     stroke-width: 4px;
 }
 #topo svg .link.animated {
+    stroke: #f11;
     stroke-width: 10px;
     stroke-dasharray: 8 8
 }
 
 #topo svg .link.primary.optical {
+    stroke: #74f;
     stroke-width: 6px;
 }
 #topo svg .link.secondary.optical {
+    stroke: rgba(128,64,255,0.5);
     stroke-width: 4px;
 }
 #topo svg .link.animated.optical {
+    stroke: #74f;
     stroke-width: 10px;
     stroke-dasharray: 8 8
 }
@@ -177,13 +212,17 @@
     cursor: pointer;
     width: 50%;
     text-align: center;
-    border-width: 1px;
-    borer-style: solid;
+
+    /* theme specific... */
+    border: 1px solid #ddf;
+    color: #99f;
 }
 
 #topo-detail .actionBtn:hover {
-    border-width: 1px;
-    border-style: solid;
+    /* theme specific... */
+    border: 1px solid #ddf;
+    background: #eef;
+    color: #77d;
 }
 
 
@@ -207,14 +246,29 @@
     height: 80px;
     margin: 4px 0;
     cursor: pointer;
-    border-width: 2px;
-    border-style: solid;
+
+    /* theme-related */
+    color: #444;
+    background-color: #ccc;
+    border: 2px solid #aaa;
+}
+
+#topo-oibox .onosInst.online {
+    /* theme-related */
+    color: #113;
+    background-color: #bbf;
+    border: 2px solid #555;
 }
 
 #topo-oibox .onosInst .onosTitle {
     text-align: center;
     font-size: 11pt;
     margin-top: 6px;
+    color: #888;
+}
+
+#topo-oibox .onosInst.online .onosTitle {
+    color: black;
 }
 
 #topo-oibox .onosInst img {
diff --git a/web/gui/src/main/webapp/topo2.js b/web/gui/src/main/webapp/topo2.js
index 20615e3..bffa191 100644
--- a/web/gui/src/main/webapp/topo2.js
+++ b/web/gui/src/main/webapp/topo2.js
@@ -70,17 +70,23 @@
             }
         },
         topo: {
+            linkBaseColor: '#666',
             linkInColor: '#66f',
-            linkOutColor: '#f00',
             linkInWidth: 14,
+            linkOutColor: '#f00',
             linkOutWidth: 30
         },
-        map: {
-            strokeWidth: 1
-        },
         icons: {
-            w: 100,
-            h: 100
+            w: 24,
+            h: 24,
+            xoff: -10,
+            yoff: -6
+        },
+        iconUrl: {
+            device: 'img/device.png',
+            host: 'img/host.png',
+            pkt: 'img/pkt.png',
+            opt: 'img/opt.png'
         },
         force: {
             note_for_links: 'link.type is used to differentiate',
@@ -330,6 +336,7 @@
     var layerLookup = {
         host: {
             endstation: 'pkt', // default, if host event does not define type
+            router:     'pkt',
             bgpSpeaker: 'pkt'
         },
         device: {
@@ -526,7 +533,8 @@
         }
         el.transition()
             .duration(1000)
-            .attr('stroke-width', linkScale(lw));
+            .attr('stroke-width', linkScale(lw))
+            .attr('stroke', config.topo.linkBaseColor);
     }
 
     // ==============================
@@ -1227,8 +1235,8 @@
         $.extend(node, xy);
     }
 
-    function getIconUrl(d) {
-        return 'icons.svg#' + d.type;
+    function iconUrl(d) {
+        return 'img/' + d.type + '.png';
     }
 
     // returns the newly computed bounding box of the rectangle
@@ -1270,29 +1278,6 @@
         return (label && label.trim()) ? label : '.';
     }
 
-    function updateDeviceIconAppearance(node, box, animate) {
-        var u = node.select('use');
-        var ubbox = u.node().getBBox();
-
-        var xoff = -ubbox.width/2 - box.width/2 - 4;
-        var yoff = -ubbox.height;
-        var iconTransform = 'translate(' + xoff + ',' + yoff + ')';
-        if (animate) {
-            node.select('use')
-                .transition()
-                .attr('transform', iconTransform);
-        } else {
-            node.select('use')
-                .attr('transform', iconTransform);
-        }
-
-        var computedStyle = window.getComputedStyle(node.node());
-        u.attr({
-            fill: computedStyle.fill,
-            color: computedStyle.color
-        });
-    }
-
     function updateDeviceLabel(d) {
         var label = niceLabel(deviceLabel(d)),
             node = d.el,
@@ -1310,7 +1295,10 @@
             .transition()
             .attr(box);
 
-        updateDeviceIconAppearance(node, box, true);
+        node.select('image')
+            .transition()
+            .attr('x', box.x + config.icons.xoff)
+            .attr('y', box.y + config.icons.yoff);
     }
 
     function updateHostLabel(d) {
@@ -1352,6 +1340,17 @@
         }
     }
 
+    function addHostIcon(node, radius, iconId) {
+        var dim = radius * 1.5,
+            xlate = -dim / 2;
+
+        node.append('svg:image')
+            .attr('transform', translate(xlate,xlate))
+            .attr('xlink:href', 'img/' + iconId + '.png')
+            .attr('width', dim)
+            .attr('height', dim);
+    }
+
     function updateNodes() {
         node = nodeG.selectAll('.node')
             .data(network.nodes, function (d) { return d.id; });
@@ -1378,7 +1377,7 @@
         // augment device nodes...
         entering.filter('.device').each(function (d) {
             var node = d3.select(this),
-                iconUrl = getIconUrl(d),
+                icon = iconUrl(d),
                 label = niceLabel(deviceLabel(d)),
                 box;
 
@@ -1400,17 +1399,29 @@
             node.select('rect')
                 .attr(box);
 
-            if (iconUrl) {
-                node.append('svg:use')
+            if (icon) {
+                var cfg = config.icons;
+                node.append('rect')
                     .attr({
-                        'xlink:href': iconUrl,
-                        width: config.icons.w,
-                        height: config.icons.h
+                        x: box.x + config.icons.xoff,
+                        y: box.y + config.icons.yoff,
+                        width: cfg.w,
+                        height: cfg.h,
+                        rx: 4
+                    }).style({
+                        stroke: '#000',
+                        fill: '#ddd'
+                    });
+                node.append('svg:image')
+                    .attr({
+                        x: box.x + config.icons.xoff + 2,
+                        y: box.y + config.icons.yoff + 2,
+                        width: cfg.w - 4,
+                        height: cfg.h - 4,
+                        'xlink:href': icon
                     });
             }
 
-            updateDeviceIconAppearance(node, box, false);
-
             // debug function to show the modelled x,y coordinates of nodes...
             if (debug('showNodeXY')) {
                 node.select('rect').attr('fill-opacity', 0.5);
@@ -1424,43 +1435,41 @@
             }
         });
 
+        // TODO: better place for this configuration state
+        var defaultHostRadius = 9,
+            hostRadius = {
+                bgpSpeaker: 14,
+                router: 14,
+                host: 14
+            },
+            hostIcon = {
+                bgpSpeaker: 'bgpSpeaker',
+                router: 'router',
+                host: 'host'
+            };
+
+
         // augment host nodes...
         entering.filter('.host').each(function (d) {
             var node = d3.select(this),
-                iconUrl = getIconUrl(d);
+                r = hostRadius[d.type] || defaultHostRadius,
+                textDy = r + 10,
+                icon = hostIcon[d.type];
 
             // provide ref to element from backing data....
             d.el = node;
 
-            // var box = node.append('circle')
-            //     .attr('r', r).node().getBBox();
+            node.append('circle')
+                .attr('r', r);
 
-            var textYOff = 0;
-            var textXOff = 0;
-            if (iconUrl) {
-                var computedStyle = window.getComputedStyle(node.node());
-                var u = node.append('svg:use')
-                    .attr({
-                        'xlink:href': iconUrl,
-                        width: config.icons.w,
-                        height: config.icons.h,
-                        fill: computedStyle.fill,
-                        color: computedStyle.color
-                    });
-
-                var ubbox = node.select('use').node().getBBox();
-                u.attr('y', -ubbox.height/2);
-                textYOff = ubbox.height/2 + 4; // pad by 4 pixels
-                textXOff = ubbox.width/2;
+            if (icon) {
+                addHostIcon(node, r, icon);
             }
 
 
-
             node.append('text')
                 .text(hostLabel)
-                .attr('alignment-baseline', 'text-before-edge')
-                .attr('x', textXOff)
-                .attr('y', textYOff)
+                .attr('dy', textDy)
                 .attr('text-anchor', 'middle');
 
             // debug function to show the modelled x,y coordinates of nodes...
@@ -1499,9 +1508,9 @@
                 .style('opacity', 0);
             // note, leave <g>.remove to remove this element
 
-            node.select('use')
-                .style('color', '#aaa')
-                .style('fill', '#000')
+            node.select('circle')
+                .style('stroke-fill', '#555')
+                .style('fill', '#888')
                 .style('opacity', 0.5)
                 .transition()
                 .duration(1500)
@@ -1858,7 +1867,7 @@
     function zoomPan(scale, translate) {
         zoomPanContainer.attr("transform", "translate(" + translate + ")scale(" + scale + ")");
         // keep the map lines constant width while zooming
-        bgImg.attr("stroke-width", config.map.strokeWidth / scale + "px");
+        bgImg.style("stroke-width", 2.0 / scale + "px");
     }
 
     function resetZoomPan() {
@@ -1977,27 +1986,6 @@
         gly.defBullhorn(defs);
     }
 
-    // create references to bring these into cache so that getBBox() works when they
-    // are inserted later
-    function preloadIcons(svg) {
-        var icons = [
-            "router",
-            "switch",
-            "roadm",
-            "endstation",
-            "bgpSpeaker"
-        ];
-
-        var g = svg.append('g');
-        for (var icon in icons) {
-        g.append('use')
-                    .attr({
-                        'xlink:href': 'icons.svg#' + icon
-                    });
-        }
-        g.style('visibility', 'hidden');
-    }
-
     // ==============================
     // View life-cycle callbacks
 
@@ -2014,7 +2002,6 @@
         setSize(svg, view);
 
         loadGlyphs(svg);
-        preloadIcons(svg);
 
         zoomPanContainer = svg.append('g').attr('id', 'zoomPanContainer');
         setupZoomPan();
@@ -2111,7 +2098,7 @@
                     width: config.birdDim,
                     height: config.birdDim,
                     fill: '#111'
-                });
+                })
     }
 
     function para(sel, text) {
@@ -2226,13 +2213,11 @@
             .translate(t);
 
         bgImg = zoomPanContainer.insert("g", '#topo-G');
-        // pointer-events: none so that browser select tools don't pick up the map svg
-        bgImg.attr('id', 'map').attr('stroke-width', config.map.strokeWidth + 'px').style('pointer-events', 'none')
-            .selectAll('path')
-                .data(topoData.features)
-                .enter()
-                .append('path')
-                .attr('d', path);
+        bgImg.attr('id', 'map').selectAll('path')
+            .data(topoData.features)
+            .enter()
+            .append('path')
+            .attr('d', path);
     }
 
     function resize(view, ctx, flags) {
diff --git a/web/gui/src/main/webapp/topo_theme.css b/web/gui/src/main/webapp/topo_theme.css
deleted file mode 100644
index 9bb2fd7..0000000
--- a/web/gui/src/main/webapp/topo_theme.css
+++ /dev/null
@@ -1,107 +0,0 @@
-.theme_dark #topo {
-    background-color: #20201D;
-}
-
-.theme_dark #topo #map {
-    stroke: #444;
-}
-
-/* note: device is offline without the 'online' class */
-.theme_dark #topo svg .node.device {
-    fill: #777;
-}
-
-.theme_dark #topo .host {
-    fill: #000;
-    color: white;
-}
-
-
-.theme_dark #topo svg .node.device.switch.online {
-    fill: #000;
-}
-
-.theme_dark #topo svg .node.device.roadm.online {
-    fill: #03c;
-}
-
-/* note: device is offline without the 'online' class */
-.theme_dark #topo svg .node.device text {
-    fill: #aaa;
-}
-
-.theme_dark #topo svg .node.device.online {
-    color: white;
-}
-.theme_dark #topo svg .node.device.online text {
-    fill: currentColor;
-}
-
-.theme_dark #topo svg .glyph {
-    fill: white;
-}
-
-.theme_dark #topo-oibox .onosInst {
-    color: #444;
-    background-color: #ccc;
-    border-color: #aaa;
-}
-
-.theme_dark #topo-oibox .onosInst.online {
-    color: #113;
-    background-color: #bbf;
-    border-color: #555;
-}
-
-.theme_dark #topo-oibox .onosInst .onosTitle {
-    color: #888;
-}
-
-.theme_dark #topo svg .node.device.fixed.online rect {
-    stroke: #666;
-}
-
-.theme_dark #topo svg .node.host {
-    stroke: #000;
-}
-
-.theme_dark #topo-detail .actionBtn {
-    border-color: #ddf;
-    color: #99f;
-}
-
-.theme_dark #topo-detail .actionBtn:hover {
-    border-color: #ddf;
-    background: #eef;
-    color: #77d;
-}
-
-.theme_dark #topo svg .link.primary {
-    stroke: #f11;
-}
-
-.theme_dark #topo svg .link.secondary {
-    stroke: rgba(255,100,100,0.5);
-}
-
-.theme_dark #topo svg .link.animated {
-    stroke: #f11;
-}
-
-.theme_dark #topo svg .link.primary.optical {
-    stroke: #74f;
-}
-
-.theme_dark #topo svg .link.secondary.optical {
-    stroke: rgba(128,64,255,0.5);
-}
-
-.theme_dark #topo svg .link.animated.optical {
-    stroke: #74f;
-}
-
-/*.theme_dark #topo .link {
-    stroke: #666;
-}
-*/
-