blob: fa8be31228db7381771c8f26ff8e0ae73901ef48 [file] [log] [blame]
Simon Huntef31fb22014-12-19 13:16:44 -08001/*
Simon Hunt8ead3a22015-01-06 11:00:15 -08002 * Copyright 2014,2015 Open Networking Laboratory
Simon Huntef31fb22014-12-19 13:16:44 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 ONOS GUI -- Topology View -- CSS file
Simon Huntef31fb22014-12-19 13:16:44 -080019 */
20
Simon Hunt7c8ab8d2015-02-03 15:05:15 -080021/* --- Base SVG Layer --- */
Simon Hunt626d2102015-01-29 11:54:50 -080022
Simon Hunt5ee36e02015-01-15 10:33:20 -080023.light #ov-topo svg {
Simon Hunt426bd862015-01-14 16:48:41 -080024 background-color: #fff;
Simon Hunt6cc53692015-01-07 11:33:45 -080025}
Simon Hunt5ee36e02015-01-15 10:33:20 -080026.dark #ov-topo svg {
27 background-color: #2b2b2b;
28}
Simon Hunt426bd862015-01-14 16:48:41 -080029
Simon Hunt7c8ab8d2015-02-03 15:05:15 -080030
31/* --- "No Devices" Layer --- */
32
33#ov-topo svg #topo-noDevsLayer {
34 visibility: hidden;
35}
36
37.light #ov-topo svg .noDevsBird {
38 fill: #ecd;
39}
40.dark #ov-topo svg .noDevsBird {
41 fill: #683434;
42}
43
44#ov-topo svg #topo-noDevsLayer text {
45 font-size: 60pt;
46 font-style: italic;
47}
48.light #ov-topo svg #topo-noDevsLayer text {
49 fill: #dde;
50}
51.dark #ov-topo svg #topo-noDevsLayer text {
52 fill: #3b3b4f;
53}
54
55
56/* --- Topo Map --- */
57
Simon Hunt426bd862015-01-14 16:48:41 -080058#ov-topo svg #topo-map {
59 stroke-width: 2px;
Simon Hunt426bd862015-01-14 16:48:41 -080060 fill: transparent;
Simon Hunt5ee36e02015-01-15 10:33:20 -080061}
62
63.light #ov-topo svg #topo-map {
Simon Hunt7c8ab8d2015-02-03 15:05:15 -080064 stroke: #ddd;
65 /*stroke: #88b;*/
Simon Hunt5ee36e02015-01-15 10:33:20 -080066}
67.dark #ov-topo svg #topo-map {
68 stroke: #444;
69}
Simon Hunt626d2102015-01-29 11:54:50 -080070
71
Simon Hunt4b668592015-01-29 17:33:53 -080072/* --- Topo Summary Panel --- */
Simon Hunt626d2102015-01-29 11:54:50 -080073
74#topo-p-summary {
75 /* Base css from panel.css */
76
77}
78
79#topo-p-summary svg {
80 display: inline-block;
81 width: 42px;
82 height: 42px;
83}
84
Simon Hunt626d2102015-01-29 11:54:50 -080085#topo-p-summary h2 {
86 position: absolute;
87 margin: 0 4px;
88 top: 20px;
89 left: 50px;
90}
91.light #topo-p-summary h2 {
92 color: black;
93}
94.dark #topo-p-summary h2 {
95 color: #ddd;
96}
97
98#topo-p-summary h3 {
99 margin: 0 4px;
100 top: 20px;
101 left: 50px;
102}
103.light #topo-p-summary h3 {
104 color: black;
105}
106.dark #topo-p-summary h3 {
107 color: #ddd;
108}
109
110#topo-p-summary p, table {
111 margin: 4px 4px;
112}
113
114#topo-p-summary td.label {
115 font-style: italic;
116 padding-right: 12px;
117 /* works for both light and dark themes ... */
118 color: #777;
119}
120
121#topo-p-summary td.value {
122}
123
124#topo-p-summary hr {
125 height: 1px;
126 border: 0;
127}
128.light #topo-p-summary hr {
129 background-color: #ccc;
130 color: #ccc;
131}
132.dark #topo-p-summary hr {
133 background-color: #888;
134 color: #888;
135}
Simon Hunt4b668592015-01-29 17:33:53 -0800136
137
138/* --- Topo Detail Panel --- */
139
140/* TODO: add CSS rules */
141
142
143/* --- Topo Instance Panel --- */
144
145#topo-p-instance {
146 height: 100px;
147}
148
149#topo-p-instance div.onosInst {
150 display: inline-block;
151 width: 170px;
152 height: 85px;
153 cursor: pointer;
154}
155
156#topo-p-instance svg rect {
Simon Hunt4b668592015-01-29 17:33:53 -0800157 stroke-width: 3.5;
158}
159#topo-p-instance .online svg rect {
160 opacity: 1;
Simon Hunta57d6812015-02-02 18:34:04 -0800161}
162.light #topo-p-instance svg rect {
163 fill: #ccc;
164 stroke: #aaa;
165}
166.light #topo-p-instance .online svg rect {
Simon Hunt4b668592015-01-29 17:33:53 -0800167 fill: #9cf;
168 stroke: #555;
169}
Simon Hunta57d6812015-02-02 18:34:04 -0800170.dark #topo-p-instance svg rect {
171 fill: #666;
172 stroke: #222;
173}
174.dark #topo-p-instance .online svg rect {
175 fill: #9cf;
176 stroke: #999;
177}
178
Simon Hunt4b668592015-01-29 17:33:53 -0800179
180#topo-p-instance svg .glyph {
181 fill: #888;
182 fill-rule: evenodd;
183}
184#topo-p-instance .online svg .glyph {
185 fill: #000;
186}
187
188#topo-p-instance svg .badgeIcon {
Simon Hunt4b668592015-01-29 17:33:53 -0800189 fill-rule: evenodd;
Simon Hunta57d6812015-02-02 18:34:04 -0800190 opacity: 0.4;
191}
192.light #topo-p-instance svg .badgeIcon {
193 fill: #777;
194}
195.dark #topo-p-instance svg .badgeIcon {
196 fill: #555;
Simon Hunt4b668592015-01-29 17:33:53 -0800197}
198
199#topo-p-instance .online svg .badgeIcon {
Simon Hunta57d6812015-02-02 18:34:04 -0800200 opacity: 1.0;
201}
202.light #topo-p-instance .online svg .badgeIcon {
203 fill: #fff;
204}
205.dark #topo-p-instance .online svg .badgeIcon {
Simon Hunt4b668592015-01-29 17:33:53 -0800206 fill: #fff;
207}
208
209#topo-p-instance svg text {
210 text-anchor: middle;
Simon Hunta57d6812015-02-02 18:34:04 -0800211 opacity: 0.3;
Simon Hunt4b668592015-01-29 17:33:53 -0800212}
213#topo-p-instance .online svg text {
Simon Hunta57d6812015-02-02 18:34:04 -0800214 opacity: 1.0;
215}
216.light #topo-p-instance svg text {
217 fill: #444;
218}
219.light #topo-p-instance .online svg text {
Simon Hunt4b668592015-01-29 17:33:53 -0800220 fill: #eee;
221}
Simon Hunta57d6812015-02-02 18:34:04 -0800222.dark #topo-p-instance svg text {
223 fill: #aaa;
224}
225.dark #topo-p-instance .online svg text {
226 fill: #ccc;
227}
Simon Hunt4b668592015-01-29 17:33:53 -0800228
229#topo-p-instance svg text.instTitle {
230 font-size: 11pt;
231 font-weight: bold;
232}
233#topo-p-instance svg text.instLabel {
234 font-size: 9pt;
235 font-style: italic;
236}
237
238#topo-p-instance .onosInst.mastership {
239 opacity: 0.3;
240}
241#topo-p-instance .onosInst.mastership.affinity {
242 opacity: 1.0;
243}
244#topo-p-instance .onosInst.mastership.affinity svg rect {
245 /* TODO: add blue glow */
246 /*filter: url(#blue-glow);*/
247}
Simon Huntac4c6f72015-02-03 19:50:53 -0800248
249
250/* --- Topo Nodes --- */
251
252#ov-topo svg .node {
253 cursor: pointer;
254}
255
256#ov-topo svg .node.selected rect,
257#ov-topo svg .node.selected circle {
258 fill: #f90;
259 /* TODO: add blue glow filter */
260 /*filter: url(#blue-glow);*/
261}
262
263#ov-topo svg .node text {
264 pointer-events: none;
265}
266
267/* Device Nodes */
268
269#ov-topo svg .node.device {
270}
271
272#ov-topo svg .node.device rect {
273 stroke-width: 1.5;
274}
275
276#ov-topo svg .node.device.fixed rect {
277 stroke-width: 1.5;
Simon Hunt78c10bf2015-02-03 21:18:20 -0800278}
279.light #ov-topo svg .node.device.fixed rect {
280 stroke: #aaa;
281}
282.dark #ov-topo svg .node.device.fixed rect {
Simon Hunt1c367112015-02-05 18:02:46 -0800283 stroke: #999;
Simon Huntac4c6f72015-02-03 19:50:53 -0800284}
285
286/* note: device is offline without the 'online' class */
Simon Hunt1c367112015-02-05 18:02:46 -0800287.light #ov-topo svg .node.device {
Simon Huntac4c6f72015-02-03 19:50:53 -0800288 fill: #777;
289}
Simon Hunt1c367112015-02-05 18:02:46 -0800290.dark #ov-topo svg .node.device {
291 fill: #555;
292}
Simon Huntac4c6f72015-02-03 19:50:53 -0800293
Simon Hunt1c367112015-02-05 18:02:46 -0800294.light #ov-topo svg .node.device rect {
295 stroke: #666;
296}
297.light #ov-topo svg .node.device rect {
298 stroke: #999;
299}
300
301.light #ov-topo svg .node.device.online {
Simon Huntac4c6f72015-02-03 19:50:53 -0800302 fill: #6e7fa3;
303}
Simon Hunt1c367112015-02-05 18:02:46 -0800304.dark #ov-topo svg .node.device.online {
305 fill: #4E5C7F;
306}
Simon Huntac4c6f72015-02-03 19:50:53 -0800307
308/* note: device is offline without the 'online' class */
309#ov-topo svg .node.device text {
310 fill: #bbb;
311 font: 10pt sans-serif;
312}
313
314#ov-topo svg .node.device.online text {
315 fill: white;
316}
317
318#ov-topo svg .node.device .svgIcon rect {
319 fill: #aaa;
320}
321#ov-topo svg .node.device .svgIcon use {
322 fill: #777;
323}
324#ov-topo svg .node.device.selected .svgIcon rect {
325 fill: #f90;
326}
327#ov-topo svg .node.device.online .svgIcon rect {
328 fill: #ccc;
329}
330#ov-topo svg .node.device.online .svgIcon use {
331 fill: #000;
332}
333#ov-topo svg .node.device.online.selected .svgIcon rect {
334 fill: #f90;
335}
336
337
338/* Host Nodes */
339
340#ov-topo svg .node.host {
Simon Huntac4c6f72015-02-03 19:50:53 -0800341}
342
343#ov-topo svg .node.host text {
Simon Huntac4c6f72015-02-03 19:50:53 -0800344 stroke: none;
345 font: 9pt sans-serif;
346}
Simon Hunt1894d792015-02-04 17:09:20 -0800347.light #ov-topo svg .node.host text {
348 fill: #846;
349}
350.dark #ov-topo svg .node.host text {
351 fill: #BB809D;
352}
Simon Huntac4c6f72015-02-03 19:50:53 -0800353
Simon Hunt1894d792015-02-04 17:09:20 -0800354.light svg .node.host circle {
Simon Huntac4c6f72015-02-03 19:50:53 -0800355 stroke: #000;
356 fill: #edb;
357}
Simon Hunt1894d792015-02-04 17:09:20 -0800358.dark svg .node.host circle {
359 stroke: #eee;
360 fill: #B2A180;
361}
Simon Huntac4c6f72015-02-03 19:50:53 -0800362
Simon Hunt1894d792015-02-04 17:09:20 -0800363.light svg .node.host .svgIcon {
364 fill: #444;
365}
366.dark svg .node.host .svgIcon {
367 fill: #222;
368}
Simon Huntac4c6f72015-02-03 19:50:53 -0800369
Simon Hunt1894d792015-02-04 17:09:20 -0800370/* --- Topo Links --- */
Simon Huntac4c6f72015-02-03 19:50:53 -0800371
Simon Hunt1894d792015-02-04 17:09:20 -0800372#ov-topo svg .link {
373 opacity: .9;
374}
375
376#ov-topo svg .link.inactive {
377 opacity: .5;
378 stroke-dasharray: 8 4;
379}
380
381#ov-topo svg .link.secondary {
382 stroke-width: 3px;
383}
384.light #ov-topo svg .link.secondary {
385 stroke: rgba(0,153,51,0.5);
386}
387.dark #ov-topo svg .link.secondary {
388 stroke: rgba(121,231,158,0.5);
389}
390
391#ov-topo svg .link.primary {
392 stroke-width: 4px;
393}
394.light #ov-topo svg .link.primary {
395 stroke: #ffA300;
396}
397.dark #ov-topo svg .link.primary {
398 stroke: #D58E0F;
399}
400
401.light #ov-topo svg .link.animated {
402 stroke: #ffA300;
403}
404.dark #ov-topo svg .link.animated {
405 stroke: #D58E0F;
406}
407
408#ov-topo svg .link.secondary.optical {
409 stroke-width: 4px;
410}
411.light #ov-topo svg .link.secondary.optical {
412 stroke: rgba(128,64,255,0.5);
413}
414.dark #ov-topo svg .link.secondary.optical {
415 stroke: rgba(164,139,215,0.5);
416}
417
418#ov-topo svg .link.primary.optical {
419 stroke-width: 6px;
420}
421.light #ov-topo svg .link.primary.optical {
422 stroke: #74f;
423}
424.dark #ov-topo svg .link.primary.optical {
425 stroke: #7352CD;
426}
427
428#ov-topo svg .link.animated.optical {
429 stroke-width: 10px;
430}
431.light #ov-topo svg .link.animated.optical {
432 stroke: #74f;
433}
434.dark #ov-topo svg .link.animated.optical {
435 stroke: #7352CD;
436}
437
438#ov-topo svg .linkLabel rect {
439 stroke: none;
440}
441.light #ov-topo svg .linkLabel rect {
442 fill: #eee;
443}
444.dark #ov-topo svg .linkLabel rect {
445 fill: #eee;
446}
447
448#ov-topo svg .linkLabel text {
449 text-anchor: middle;
450 stroke-width: 0.1;
451 font-size: 9pt;
452}
453.light #ov-topo svg .linkLabel text {
454 stroke: #777;
455}
456.dark #ov-topo svg .linkLabel text {
457 stroke: #777;
458}