blob: 7b7935739ca5fd602f2defa8d4ce32b25375442b [file] [log] [blame]
Matteo Scandolod2044a42017-08-07 16:08:28 -07001
2/*
3 * Copyright 2017-present Open Networking Foundation
4
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8
9 * http://www.apache.org/licenses/LICENSE-2.0
10
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18
Matteo Scandolo1df21732016-03-29 14:06:13 -070019/* CONTAINER */
20#xosDiagnostic, [ui-view] {
Matteo Scandolo195dde92016-07-25 16:43:16 -070021 height: 100%;
Matteo Scandolo1df21732016-03-29 14:06:13 -070022 min-height: 700px;
23 position: relative; }
24
25diagnostic-container .form-control.small-padding {
26 padding: 6px; }
27
28diagnostic-container .half-height {
29 position: relative;
30 height: 50%; }
31
32diagnostic-container .onethird-height {
33 position: relative;
34 height: 33%;
35 border-bottom: 1px solid #999; }
36
37diagnostic-container .twothird-height {
38 position: relative;
39 height: 67%; }
40
41diagnostic-container .subscriber-select {
42 max-width: 200px;
43 position: absolute;
44 top: 20px;
45 right: 20px;
46 z-index: 1; }
47
48diagnostic-container .onethird-height .well,
49diagnostic-container .twothird-height .well {
50 font-weight: bold;
51 max-width: 165px;
52 text-align: center;
53 margin-top: 15px;
54 background: #eee;
55 border-color: steelblue;
56 padding: 10px; }
57
58diagnostic-container .onethird-height .well.pull-right {
59 position: absolute;
60 right: 0px;
61 top: -15px;
62 cursor: pointer;
63 z-index: 200; }
64
65/* subscriber-status-modal */
66subscriber-status-modal .row + .row {
67 margin-top: 20px; }
68
69.half-height + .half-height {
70 border-top: 1px solid black; }
71
72service-topology,
73logic-topology {
74 height: 100%;
75 width: 100%;
76 display: block;
77 position: absolute;
78 top: 0; }
79
80logic-topology .subscriber circle,
81logic-topology .device circle {
82 fill: #fff;
83 stroke: green;
84 stroke-width: 1px; }
85
86logic-topology > svg {
87 position: absolute;
88 top: 0; }
89
90/* CLOUDS */
91logic-topology .network .cloud {
92 fill: #fff;
93 stroke: green;
94 stroke-width: 1px; }
95
96/* RACK */
97logic-topology .node.rack > g > rect {
98 fill: #ccc;
99 stroke: steelblue;
100 stroke-width: 1px; }
101
102/* CP NODE */
103logic-topology .compute-node > rect {
104 fill: #fff;
105 stroke: steelblue;
106 stroke-width: 1px; }
107
108logic-topology .compute-node > text {
109 font-size: 16px; }
110
111/* INSTANCE */
112logic-topology .instance > rect {
113 fill: #eee;
114 stroke: steelblue;
115 stroke-width: 1px; }
116
117logic-topology .node .instance.active rect {
118 fill: lightsteelblue;
119 stroke: steelblue;
120 stroke-width: 1px; }
121
122logic-topology .node .instance.active.good > rect {
123 fill: green; }
124
125logic-topology .node .instance.active.provisioning > rect {
126 fill: yellow; }
127
128logic-topology .node .instance.active.bad > rect {
129 fill: red; }
130
131/* INSTANCE STATS */
132logic-topology .node .instance .stats-container rect {
133 fill: white; }
134
135logic-topology .node .instance .stats-container text.name {
136 font-weight: bold; }
137
138logic-topology .node .instance .stats-container text.ip {
139 font-style: italic;
140 font-size: 10px; }
141
142/* CONTAINERS */
143logic-topology .node .instance .stats-container .container rect {
144 fill: #eee;
145 stroke: steelblue;
146 stroke-width: 1px; }
147
148/* LEGEND */
149.legend {
150 fill: #fff;
151 stroke: #ccc;
152 stroke-width: 1px;
153 position: relative; }
154
155.legend text {
156 stroke: #000; }
157
158.node {
159 cursor: pointer; }
160
161.node circle,
162.node rect {
163 fill: #fff;
164 stroke: steelblue;
165 stroke-width: 1px; }
166
167.node.subscriber circle,
168.node.subscriber rect,
169.node.router circle,
170.node.router rect {
171 stroke: #05ffcb; }
172
173.node.slice rect {
174 stroke: #b01dff; }
175
176.node.instance rect {
177 stroke: #ccc; }
178
179.node.instance rect.active {
180 stroke: #ff8b00; }
181
182.node rect.slice-detail {
183 fill: #fff;
184 stroke: steelblue;
185 stroke-width: 3px; }
186
187.node text {
188 font: 18px sans-serif; }
189
190.node .instance text {
191 font: 12px sans-serif; }
192
193.node text.small {
194 font-size: 10px; }
195
196.link, .device-link {
197 fill: none;
198 stroke: #ccc;
199 stroke-width: 2px; }
200
201.link.slice {
202 stroke: rgba(157, 4, 183, 0.29); }
203
204.link.instance {
205 stroke: #ccc; }
206
207.link.instance.active {
208 stroke: rgba(255, 138, 0, 0.65); }
209
210.service-details {
211 width: 200px;
212 position: absolute;
213 top: 20px;
214 right: 20px; }
215
216/* when showing the thing */
217.animate.ng-hide-remove {
218 animation: 0.5s bounceInRight ease; }
219
220/* when hiding the picture */
221.animate.ng-hide-add {
222 animation: 0.5s bounceOutRight ease; }
223
224/* LOADER */
225.loader {
226 font-size: 10px;
227 margin: 150px auto;
228 text-indent: -9999em;
229 width: 11em;
230 height: 11em;
231 border-radius: 50%;
232 background: #ffffff;
233 background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
234 background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
235 background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
236 background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
237 background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
238 position: relative;
239 animation: load3 1.4s infinite linear;
240 transform: translateZ(0); }
241
242.loader:before {
243 width: 50%;
244 height: 50%;
245 background: #105E9E;
246 border-radius: 100% 0 0 0;
247 position: absolute;
248 top: 0;
249 left: 0;
250 content: ''; }
251
252.loader:after {
253 background: #fff;
254 width: 75%;
255 height: 75%;
256 border-radius: 50%;
257 content: '';
258 margin: auto;
259 position: absolute;
260 top: 0;
261 left: 0;
262 bottom: 0;
263 right: 0; }
264
265@keyframes load3 {
266 0% {
267 -webkit-transform: rotate(0deg);
268 transform: rotate(0deg); }
269 100% {
270 -webkit-transform: rotate(360deg);
271 transform: rotate(360deg); } }
272
273/* MODALS */
274.modal.fade.in {
275 display: block; }
276
277/* ANIMATIONS */
278@keyframes bounceInRight {
279 from, 60%, 75%, 90%, to {
280 animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
281 from {
282 opacity: 0;
283 transform: translate3d(3000px, 0, 0); }
284 60% {
285 opacity: 1;
286 transform: translate3d(-25px, 0, 0); }
287 75% {
288 transform: translate3d(10px, 0, 0); }
289 90% {
290 transform: translate3d(-5px, 0, 0); }
291 to {
292 transform: none; } }
293
294@keyframes bounceOutRight {
295 20% {
296 opacity: 1;
297 transform: translate3d(-20px, 0, 0); }
298 to {
299 opacity: 0;
300 transform: translate3d(2000px, 0, 0); } }