blob: 12d3beba46edf96ed47dca7024f4d2f5489cfd92 [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 Hunt445e8152015-02-06 13:00:12 -080064 stroke: #eee;
Simon Hunt5ee36e02015-01-15 10:33:20 -080065}
66.dark #ov-topo svg #topo-map {
67 stroke: #444;
68}
Simon Hunt626d2102015-01-29 11:54:50 -080069
70
Simon Hunt4b668592015-01-29 17:33:53 -080071/* --- Topo Summary Panel --- */
Simon Hunt626d2102015-01-29 11:54:50 -080072
73#topo-p-summary {
74 /* Base css from panel.css */
Simon Hunt626d2102015-01-29 11:54:50 -080075}
76
Simon Hunt08f841d02015-02-10 14:39:20 -080077/* --- Topo Detail Panel --- */
78
79#topo-p-detail {
80 /* Base css from panel.css */
81 top: 320px;
82}
83
84/* --- general topo-panel styling --- */
85
86.topo-p svg {
Simon Hunt626d2102015-01-29 11:54:50 -080087 display: inline-block;
88 width: 42px;
89 height: 42px;
90}
91
Simon Hunt08f841d02015-02-10 14:39:20 -080092.light .topo-p svg .glyph {
93 fill: #222;
94}
95
96.dark .topo-p svg .glyph.overlay {
97 fill: #222;
98}
99
100.dark .topo-p svg .glyph {
101 fill: #ddd;
102}
103.light .topo-p svg .glyph.overlay {
104 fill: #fff;
105}
106
107
108.topo-p h2 {
Simon Hunt626d2102015-01-29 11:54:50 -0800109 position: absolute;
110 margin: 0 4px;
111 top: 20px;
112 left: 50px;
113}
Simon Hunt08f841d02015-02-10 14:39:20 -0800114.light .topo-p h2 {
Simon Hunt626d2102015-01-29 11:54:50 -0800115 color: black;
116}
Simon Hunt08f841d02015-02-10 14:39:20 -0800117.dark .topo-p h2 {
Simon Hunt626d2102015-01-29 11:54:50 -0800118 color: #ddd;
119}
120
Simon Hunt08f841d02015-02-10 14:39:20 -0800121.topo-p h3 {
Simon Hunt626d2102015-01-29 11:54:50 -0800122 margin: 0 4px;
123 top: 20px;
124 left: 50px;
125}
Simon Hunt08f841d02015-02-10 14:39:20 -0800126.light .topo-p h3 {
Simon Hunt626d2102015-01-29 11:54:50 -0800127 color: black;
128}
Simon Hunt08f841d02015-02-10 14:39:20 -0800129.dark .topo-p h3 {
Simon Hunt626d2102015-01-29 11:54:50 -0800130 color: #ddd;
131}
132
Simon Hunt08f841d02015-02-10 14:39:20 -0800133.topo-p p, table {
Simon Hunt626d2102015-01-29 11:54:50 -0800134 margin: 4px 4px;
135}
136
Simon Hunt08f841d02015-02-10 14:39:20 -0800137.topo-p td.label {
Simon Hunt626d2102015-01-29 11:54:50 -0800138 font-style: italic;
139 padding-right: 12px;
140 /* works for both light and dark themes ... */
141 color: #777;
142}
143
Simon Hunt08f841d02015-02-10 14:39:20 -0800144.topo-p td.value {
Simon Hunt626d2102015-01-29 11:54:50 -0800145}
146
Simon Hunt08f841d02015-02-10 14:39:20 -0800147.topo-p hr {
Simon Hunt626d2102015-01-29 11:54:50 -0800148 height: 1px;
149 border: 0;
150}
Simon Hunt08f841d02015-02-10 14:39:20 -0800151.light .topo-p hr {
Simon Hunt626d2102015-01-29 11:54:50 -0800152 background-color: #ccc;
153 color: #ccc;
154}
Simon Hunt08f841d02015-02-10 14:39:20 -0800155.dark .topo-p hr {
Simon Hunt626d2102015-01-29 11:54:50 -0800156 background-color: #888;
157 color: #888;
158}
Simon Hunt4b668592015-01-29 17:33:53 -0800159
160
Simon Hunt08f841d02015-02-10 14:39:20 -0800161.topo-p .actionBtn {
162 margin: 6px 12px;
163 padding: 2px 6px;
164 font-size: 9pt;
165 cursor: pointer;
166 width: 200px;
167 text-align: center;
168 border-radius: 4px;
169}
170.light .topo-p .actionBtn {
171 border: 2px solid #ddd;
172 color: #eee;
173 background: #888;
174}
175.dark .topo-p .actionBtn {
176 border: 2px solid #222;
177 color: #888;
178 background: #444;
179}
Simon Hunt4b668592015-01-29 17:33:53 -0800180
Simon Hunt08f841d02015-02-10 14:39:20 -0800181.light .topo-p .actionBtn:hover {
182 color: #eee;
183 background: #444;
184}
185.dark .topo-p .actionBtn:hover {
186 color: #eee;
187 background: #666;
188}
189
Simon Hunt4b668592015-01-29 17:33:53 -0800190
191
192/* --- Topo Instance Panel --- */
193
194#topo-p-instance {
195 height: 100px;
196}
197
198#topo-p-instance div.onosInst {
199 display: inline-block;
200 width: 170px;
201 height: 85px;
202 cursor: pointer;
203}
204
205#topo-p-instance svg rect {
Simon Hunt4b668592015-01-29 17:33:53 -0800206 stroke-width: 3.5;
207}
208#topo-p-instance .online svg rect {
209 opacity: 1;
Simon Hunta57d6812015-02-02 18:34:04 -0800210}
211.light #topo-p-instance svg rect {
212 fill: #ccc;
213 stroke: #aaa;
214}
215.light #topo-p-instance .online svg rect {
Simon Hunt4b668592015-01-29 17:33:53 -0800216 fill: #9cf;
217 stroke: #555;
218}
Simon Hunta57d6812015-02-02 18:34:04 -0800219.dark #topo-p-instance svg rect {
220 fill: #666;
221 stroke: #222;
222}
223.dark #topo-p-instance .online svg rect {
224 fill: #9cf;
225 stroke: #999;
226}
227
Simon Hunt4b668592015-01-29 17:33:53 -0800228
229#topo-p-instance svg .glyph {
230 fill: #888;
231 fill-rule: evenodd;
232}
233#topo-p-instance .online svg .glyph {
234 fill: #000;
235}
236
237#topo-p-instance svg .badgeIcon {
Simon Hunt4b668592015-01-29 17:33:53 -0800238 fill-rule: evenodd;
Simon Hunta57d6812015-02-02 18:34:04 -0800239 opacity: 0.4;
240}
241.light #topo-p-instance svg .badgeIcon {
242 fill: #777;
243}
244.dark #topo-p-instance svg .badgeIcon {
245 fill: #555;
Simon Hunt4b668592015-01-29 17:33:53 -0800246}
247
248#topo-p-instance .online svg .badgeIcon {
Simon Hunta57d6812015-02-02 18:34:04 -0800249 opacity: 1.0;
250}
251.light #topo-p-instance .online svg .badgeIcon {
252 fill: #fff;
253}
254.dark #topo-p-instance .online svg .badgeIcon {
Simon Hunt4b668592015-01-29 17:33:53 -0800255 fill: #fff;
256}
257
258#topo-p-instance svg text {
259 text-anchor: middle;
Simon Hunta57d6812015-02-02 18:34:04 -0800260 opacity: 0.3;
Simon Hunt4b668592015-01-29 17:33:53 -0800261}
262#topo-p-instance .online svg text {
Simon Hunta57d6812015-02-02 18:34:04 -0800263 opacity: 1.0;
264}
265.light #topo-p-instance svg text {
266 fill: #444;
267}
268.light #topo-p-instance .online svg text {
Simon Hunt4b668592015-01-29 17:33:53 -0800269 fill: #eee;
270}
Simon Hunta57d6812015-02-02 18:34:04 -0800271.dark #topo-p-instance svg text {
272 fill: #aaa;
273}
274.dark #topo-p-instance .online svg text {
275 fill: #ccc;
276}
Simon Hunt4b668592015-01-29 17:33:53 -0800277
278#topo-p-instance svg text.instTitle {
279 font-size: 11pt;
280 font-weight: bold;
281}
282#topo-p-instance svg text.instLabel {
283 font-size: 9pt;
284 font-style: italic;
285}
286
287#topo-p-instance .onosInst.mastership {
288 opacity: 0.3;
289}
290#topo-p-instance .onosInst.mastership.affinity {
291 opacity: 1.0;
292}
Simon Hunt0ee28682015-02-12 20:48:11 -0800293.light #topo-p-instance .onosInst.mastership.affinity svg rect {
294 filter: url(#blue-glow);
295}
296.dark #topo-p-instance .onosInst.mastership.affinity svg rect {
297 filter: url(#yellow-glow);
Simon Hunt4b668592015-01-29 17:33:53 -0800298}
Simon Huntac4c6f72015-02-03 19:50:53 -0800299
300
301/* --- Topo Nodes --- */
302
Simon Hunta142dd22015-02-12 22:07:51 -0800303#ov-topo svg .suppressed {
304 opacity: 0.2 !important;
305}
306
Simon Huntac4c6f72015-02-03 19:50:53 -0800307#ov-topo svg .node {
308 cursor: pointer;
309}
310
Simon Hunt0ee28682015-02-12 20:48:11 -0800311.light #ov-topo svg .node.selected rect,
312.light #ov-topo svg .node.selected circle {
Simon Huntac4c6f72015-02-03 19:50:53 -0800313 fill: #f90;
Simon Hunt0ee28682015-02-12 20:48:11 -0800314 filter: url(#blue-glow);
315}
316.dark #ov-topo svg .node.selected rect,
317.dark #ov-topo svg .node.selected circle {
318 fill: #f90;
319 filter: url(#yellow-glow);
Simon Huntac4c6f72015-02-03 19:50:53 -0800320}
321
322#ov-topo svg .node text {
323 pointer-events: none;
324}
325
326/* Device Nodes */
327
328#ov-topo svg .node.device {
329}
330
331#ov-topo svg .node.device rect {
332 stroke-width: 1.5;
333}
334
335#ov-topo svg .node.device.fixed rect {
336 stroke-width: 1.5;
Simon Hunt78c10bf2015-02-03 21:18:20 -0800337}
338.light #ov-topo svg .node.device.fixed rect {
339 stroke: #aaa;
340}
341.dark #ov-topo svg .node.device.fixed rect {
Simon Hunt1c367112015-02-05 18:02:46 -0800342 stroke: #999;
Simon Huntac4c6f72015-02-03 19:50:53 -0800343}
344
345/* note: device is offline without the 'online' class */
Simon Hunt1c367112015-02-05 18:02:46 -0800346.light #ov-topo svg .node.device {
Simon Huntac4c6f72015-02-03 19:50:53 -0800347 fill: #777;
348}
Simon Hunt1c367112015-02-05 18:02:46 -0800349.dark #ov-topo svg .node.device {
350 fill: #555;
351}
Simon Huntac4c6f72015-02-03 19:50:53 -0800352
Simon Hunt1c367112015-02-05 18:02:46 -0800353.light #ov-topo svg .node.device rect {
354 stroke: #666;
355}
356.light #ov-topo svg .node.device rect {
357 stroke: #999;
358}
359
360.light #ov-topo svg .node.device.online {
Simon Huntac4c6f72015-02-03 19:50:53 -0800361 fill: #6e7fa3;
362}
Simon Hunt1c367112015-02-05 18:02:46 -0800363.dark #ov-topo svg .node.device.online {
364 fill: #4E5C7F;
365}
Simon Huntac4c6f72015-02-03 19:50:53 -0800366
367/* note: device is offline without the 'online' class */
368#ov-topo svg .node.device text {
369 fill: #bbb;
370 font: 10pt sans-serif;
371}
372
373#ov-topo svg .node.device.online text {
374 fill: white;
375}
376
377#ov-topo svg .node.device .svgIcon rect {
378 fill: #aaa;
379}
380#ov-topo svg .node.device .svgIcon use {
381 fill: #777;
382}
383#ov-topo svg .node.device.selected .svgIcon rect {
384 fill: #f90;
385}
386#ov-topo svg .node.device.online .svgIcon rect {
387 fill: #ccc;
388}
389#ov-topo svg .node.device.online .svgIcon use {
390 fill: #000;
391}
392#ov-topo svg .node.device.online.selected .svgIcon rect {
393 fill: #f90;
394}
395
396
397/* Host Nodes */
398
399#ov-topo svg .node.host {
Simon Huntac4c6f72015-02-03 19:50:53 -0800400}
401
402#ov-topo svg .node.host text {
Simon Huntac4c6f72015-02-03 19:50:53 -0800403 stroke: none;
404 font: 9pt sans-serif;
405}
Simon Hunt1894d792015-02-04 17:09:20 -0800406.light #ov-topo svg .node.host text {
407 fill: #846;
408}
409.dark #ov-topo svg .node.host text {
410 fill: #BB809D;
411}
Simon Huntac4c6f72015-02-03 19:50:53 -0800412
Simon Hunt1894d792015-02-04 17:09:20 -0800413.light svg .node.host circle {
Simon Huntac4c6f72015-02-03 19:50:53 -0800414 stroke: #000;
415 fill: #edb;
416}
Simon Hunt1894d792015-02-04 17:09:20 -0800417.dark svg .node.host circle {
418 stroke: #eee;
419 fill: #B2A180;
420}
Simon Huntac4c6f72015-02-03 19:50:53 -0800421
Simon Hunt1894d792015-02-04 17:09:20 -0800422.light svg .node.host .svgIcon {
423 fill: #444;
424}
425.dark svg .node.host .svgIcon {
426 fill: #222;
427}
Simon Huntac4c6f72015-02-03 19:50:53 -0800428
Simon Hunt1894d792015-02-04 17:09:20 -0800429/* --- Topo Links --- */
Simon Huntac4c6f72015-02-03 19:50:53 -0800430
Simon Hunt1894d792015-02-04 17:09:20 -0800431#ov-topo svg .link {
432 opacity: .9;
433}
434
435#ov-topo svg .link.inactive {
436 opacity: .5;
437 stroke-dasharray: 8 4;
438}
439
440#ov-topo svg .link.secondary {
441 stroke-width: 3px;
442}
443.light #ov-topo svg .link.secondary {
444 stroke: rgba(0,153,51,0.5);
445}
446.dark #ov-topo svg .link.secondary {
447 stroke: rgba(121,231,158,0.5);
448}
449
450#ov-topo svg .link.primary {
451 stroke-width: 4px;
452}
453.light #ov-topo svg .link.primary {
454 stroke: #ffA300;
455}
456.dark #ov-topo svg .link.primary {
457 stroke: #D58E0F;
458}
459
Simon Hunt1894d792015-02-04 17:09:20 -0800460#ov-topo svg .link.secondary.optical {
461 stroke-width: 4px;
462}
463.light #ov-topo svg .link.secondary.optical {
464 stroke: rgba(128,64,255,0.5);
465}
466.dark #ov-topo svg .link.secondary.optical {
467 stroke: rgba(164,139,215,0.5);
468}
469
470#ov-topo svg .link.primary.optical {
471 stroke-width: 6px;
472}
473.light #ov-topo svg .link.primary.optical {
474 stroke: #74f;
475}
476.dark #ov-topo svg .link.primary.optical {
477 stroke: #7352CD;
478}
479
Simon Hunt1894d792015-02-04 17:09:20 -0800480#ov-topo svg .linkLabel rect {
481 stroke: none;
482}
483.light #ov-topo svg .linkLabel rect {
484 fill: #eee;
485}
486.dark #ov-topo svg .linkLabel rect {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800487 fill: #555;
Simon Hunt1894d792015-02-04 17:09:20 -0800488}
489
490#ov-topo svg .linkLabel text {
491 text-anchor: middle;
492 stroke-width: 0.1;
493 font-size: 9pt;
494}
495.light #ov-topo svg .linkLabel text {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800496 fill: #444;
Simon Hunt1894d792015-02-04 17:09:20 -0800497}
498.dark #ov-topo svg .linkLabel text {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800499 fill: #eee;
Simon Hunt1894d792015-02-04 17:09:20 -0800500}
Simon Hunteb0fa052015-02-17 19:20:28 -0800501
502
503/* radio buttons injected into masthead */
504
505#topo-radio-group span.radio {
506 font-size: 10pt;
507 margin: 4px 2px;
508 padding: 1px 6px;
509 -moz-border-radius: 3px;
510 border-radius: 3px;
511 cursor: pointer;
512}
513
514.light #topo-radio-group span.radio {
515 border: 1px dotted #222;
516 color: #eee;
517}
518.dark #topo-radio-group span.radio {
519 border: 1px dotted #bbb;
520 color: #888;
521}
522
523#topo-radio-group span.radio.active {
524 padding: 1px 6px;
525}
526
527.light #topo-radio-group span.radio.active {
528 background-color: #bbb;
529 border: 1px solid #eee;
530 color: #666;
531
532}
533.dark #topo-radio-group span.radio.active {
534 background-color: #222;
535 border: 1px solid #eee;
536 color: #78a;
537}