blob: 9c0ebe006d82857a17ef99174aa24f1b9f4c49ff [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
Simon Huntd5264122015-02-25 10:17:43 -0800435.light #ov-topo svg .link.enhanced {
436 filter: url(#blue-glow);
437}
438.dark #ov-topo svg .link.enhanced {
439 filter: url(#yellow-glow);
440}
441
Simon Hunt1894d792015-02-04 17:09:20 -0800442#ov-topo svg .link.inactive {
443 opacity: .5;
444 stroke-dasharray: 8 4;
445}
446
447#ov-topo svg .link.secondary {
448 stroke-width: 3px;
449}
450.light #ov-topo svg .link.secondary {
451 stroke: rgba(0,153,51,0.5);
452}
453.dark #ov-topo svg .link.secondary {
454 stroke: rgba(121,231,158,0.5);
455}
456
457#ov-topo svg .link.primary {
458 stroke-width: 4px;
459}
460.light #ov-topo svg .link.primary {
461 stroke: #ffA300;
462}
463.dark #ov-topo svg .link.primary {
464 stroke: #D58E0F;
465}
466
Simon Hunt1894d792015-02-04 17:09:20 -0800467#ov-topo svg .link.secondary.optical {
468 stroke-width: 4px;
469}
470.light #ov-topo svg .link.secondary.optical {
471 stroke: rgba(128,64,255,0.5);
472}
473.dark #ov-topo svg .link.secondary.optical {
474 stroke: rgba(164,139,215,0.5);
475}
476
477#ov-topo svg .link.primary.optical {
478 stroke-width: 6px;
479}
480.light #ov-topo svg .link.primary.optical {
481 stroke: #74f;
482}
483.dark #ov-topo svg .link.primary.optical {
484 stroke: #7352CD;
485}
486
Simon Hunt1a5301e2015-02-25 15:31:25 -0800487/* Link Labels */
488
Simon Hunt1894d792015-02-04 17:09:20 -0800489#ov-topo svg .linkLabel rect {
490 stroke: none;
491}
492.light #ov-topo svg .linkLabel rect {
493 fill: #eee;
494}
495.dark #ov-topo svg .linkLabel rect {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800496 fill: #555;
Simon Hunt1894d792015-02-04 17:09:20 -0800497}
498
499#ov-topo svg .linkLabel text {
500 text-anchor: middle;
501 stroke-width: 0.1;
502 font-size: 9pt;
503}
504.light #ov-topo svg .linkLabel text {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800505 fill: #444;
Simon Hunt1894d792015-02-04 17:09:20 -0800506}
507.dark #ov-topo svg .linkLabel text {
Simon Hunt8eb4d3a2015-02-23 18:23:29 -0800508 fill: #eee;
Simon Hunt1894d792015-02-04 17:09:20 -0800509}
Simon Hunteb0fa052015-02-17 19:20:28 -0800510
Simon Hunt1a5301e2015-02-25 15:31:25 -0800511/* Port Labels */
512
513#ov-topo svg .portLabel rect {
514 stroke: none;
515}
516.light #ov-topo svg .portLabel rect {
517 fill: #eee;
518}
519.dark #ov-topo svg .portLabel rect {
Simon Hunt969b3c92015-02-25 18:11:31 -0800520 fill: #222;
Simon Hunt1a5301e2015-02-25 15:31:25 -0800521}
522
523#ov-topo svg .portLabel text {
524 text-anchor: middle;
525 stroke-width: 0.1;
Simon Hunt969b3c92015-02-25 18:11:31 -0800526 font-size: 11pt;
Simon Hunt1a5301e2015-02-25 15:31:25 -0800527}
528.light #ov-topo svg .portLabel text {
529 fill: #444;
530}
531.dark #ov-topo svg .portLabel text {
532 fill: #eee;
533}
534
535
536
Simon Hunteb0fa052015-02-17 19:20:28 -0800537
538/* radio buttons injected into masthead */
539
540#topo-radio-group span.radio {
541 font-size: 10pt;
542 margin: 4px 2px;
543 padding: 1px 6px;
544 -moz-border-radius: 3px;
545 border-radius: 3px;
546 cursor: pointer;
547}
548
549.light #topo-radio-group span.radio {
550 border: 1px dotted #222;
551 color: #eee;
552}
553.dark #topo-radio-group span.radio {
554 border: 1px dotted #bbb;
555 color: #888;
556}
557
558#topo-radio-group span.radio.active {
559 padding: 1px 6px;
560}
561
562.light #topo-radio-group span.radio.active {
563 background-color: #bbb;
564 border: 1px solid #eee;
565 color: #666;
566
567}
568.dark #topo-radio-group span.radio.active {
569 background-color: #222;
570 border: 1px solid #eee;
571 color: #78a;
572}