├── .gitattributes ├── README.md ├── bootstrap ├── css │ ├── bootstrap.css │ └── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js │ ├── bootstrap.js │ └── bootstrap.min.js ├── camera.html ├── css ├── color.css ├── common.css ├── flatWeatherPlugin.css ├── icons.css ├── lightbox.css ├── main.css ├── mainLight.css ├── mainPurple.css ├── mainRounded.css ├── slider.css └── styles.css ├── fonts ├── WeatherIcons-Regular.otf ├── weathericons-regular-webfont.eot ├── weathericons-regular-webfont.svg ├── weathericons-regular-webfont.ttf └── weathericons-regular-webfont.woff ├── frontpage.html ├── graph.html ├── images ├── close.png ├── down.png ├── loading.gif ├── next.png ├── prev.png └── up.png ├── js ├── clock.js ├── colors.js ├── highcharts.js ├── jquery-2.1.4.js ├── jquery-ui.min.js ├── jquery.flatWeatherPlugin.min.js ├── jquery.noty.packaged.js ├── jquery.stayInWebApp.min.js ├── jquery.vticker.js ├── jquery.zrssfeed.min.js ├── kendo.all.min.js ├── lightbox.js ├── methods.js └── noty.js ├── lights.html ├── logs.html ├── news.html ├── screenshots ├── FlatZ_device.png ├── FlatZ_graph.png ├── FlatZ_lichts.png └── FlatZ_logs.png ├── settings └── settings.js ├── traffic.html └── weather.html /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FlatZ Frontpage 2 | FlatZ-Frontpage is a custom frontpage for Domoticz. 3 | 4 | 5 | Screenshots: 6 | ![alt tag](http://hnogames.nl/app/screenshots/FlatZ_device.png) 7 | ![alt tag](http://hnogames.nl/app/screenshots/FlatZ_graph.png) 8 | ![alt tag](http://hnogames.nl/app/screenshots/FlatZ_lichts.png) 9 | ![alt tag](http://hnogames.nl/app/screenshots/FlatZ_logs.png) 10 | 11 | 12 | Forum link: 13 | http://www.domoticz.com/forum/viewtopic.php?f=8&t=8017 14 | -------------------------------------------------------------------------------- /bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /camera.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 | 34 | 35 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 98 |
99 | 100 |
101 | 102 |
103 |
104 | Switches 105 |
106 | 107 |
108 | 109 |
110 |
111 |
112 | 113 |
114 |
115 |
116 |
117 |
118 | 119 |
120 |
121 |
122 |
123 |
124 | 125 |
126 |
127 |
128 |
129 |
130 | 131 |
132 |
133 |
134 |
135 |
136 | 137 |
138 |
139 |
140 |
141 |
142 | 143 |
144 |
145 |
146 |
147 |
148 |
149 | 150 |
151 |
152 | 153 |
154 |
155 |
156 |
157 |
158 |
159 | 160 | 161 |
162 |
163 |
164 |
165 |
166 |
167 | 168 |
169 |
170 |
171 |
172 |
173 | 174 | 175 |
176 |
177 |
178 | 179 |
180 |
181 |
182 |
183 |
184 |
185 | 186 |
187 |
188 |
189 |
190 |
191 |
192 | 193 |
194 |
195 |
196 |
197 | 198 |
199 | 200 | 201 | 212 | 213 | 214 | 215 | 216 | 217 | -------------------------------------------------------------------------------- /css/flatWeatherPlugin.css: -------------------------------------------------------------------------------- 1 | /*************************************************************************************************/ 2 | /* Global - Base */ 3 | /*************************************************************************************************/ 4 | @font-face { 5 | font-family: 'weathericons'; 6 | src: url('../fonts/weathericons-regular-webfont.eot'); 7 | src: url('../fonts/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/weathericons-regular-webfont.woff') format('woff'), url('../fonts/weathericons-regular-webfont.ttf') format('truetype'), url('../fonts/weathericons-regular-webfont.svg#weathericons-regular-webfontRg') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | .wi:before, .wi:after { 13 | display: inline-block; 14 | font-family: 'weathericons'; 15 | font-style: normal; 16 | font-weight: normal; 17 | line-height: 1; 18 | -webkit-font-smoothing: antialiased; 19 | -moz-osx-font-smoothing: grayscale; 20 | } 21 | 22 | 23 | .flatWeatherPlugin { 24 | font-size: inherit; 25 | width: 100%; 26 | } 27 | 28 | .flatWeatherPlugin h2{ 29 | color: #b2c831; 30 | } 31 | 32 | .flatWeatherPlugin p, .flatWeatherPlugin h3, .flatWeatherPlugin ul, .flatWeatherPlugin li { 33 | padding: 0; 34 | margin: 0; 35 | color: inherit; 36 | } 37 | 38 | #flatWeatherLoading.loading { 39 | font-size: 90px; 40 | text-align: center; 41 | padding: 10px; 42 | overflow: hidden; 43 | -webkit-animation:spin 2s linear infinite; 44 | -moz-animation:spin 2s linear infinite; 45 | animation:spin 2s linear infinite; 46 | opacity: 0.2; 47 | } 48 | @-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } 49 | @-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } 50 | @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } 51 | 52 | .flatWeatherPlugin h2 { 53 | margin: 0 0 5px 0; 54 | } 55 | 56 | .flatWeatherPlugin .wiToday { 57 | width: 100%; 58 | overflow: hidden; 59 | } 60 | 61 | .flatWeatherPlugin .wiToday > .wiIconGroup { 62 | float: right; 63 | width: 50%; 64 | text-align: center; 65 | } 66 | 67 | .flatWeatherPlugin .wiToday > .wiIconGroup p { 68 | width: 100%; 69 | color: inherit; 70 | line-height: 1em; 71 | padding: 6px 0 0 0; 72 | } 73 | 74 | 75 | .flatWeatherPlugin .wiToday .wiIconGroup div.wi { 76 | font-size: 400%; 77 | line-height: 1.45em; 78 | width: 100%; 79 | } 80 | 81 | .flatWeatherPlugin .wiToday .wiIconGroup div.wi:before { 82 | vertical-align: text-bottom; 83 | } 84 | 85 | .flatWeatherPlugin .clearfix:after { 86 | content: " "; 87 | display: table; 88 | clear: both; 89 | } 90 | 91 | .flatWeatherPlugin div.wiToday > p.wiTemperature { 92 | font-size: 400%; 93 | line-height: 1.45em; 94 | float: left; 95 | width: 50%; 96 | text-align: center; 97 | color: inherit; 98 | } 99 | 100 | .flatWeatherPlugin sup { 101 | opacity: 0.7; 102 | font-size: 65%; 103 | vertical-align: baseline; 104 | top: -0.5em; 105 | position: relative; 106 | } 107 | 108 | .flatWeatherPlugin .wiDetail { 109 | overflow: hidden; 110 | width: 100%; 111 | padding-bottom: 5px; 112 | color:#eeeeee; 113 | } 114 | 115 | .flatWeatherPlugin.today .wiDetail { 116 | padding-top: 10px; 117 | } 118 | 119 | .flatWeatherPlugin .wiDetail p.wiDay { 120 | font-weight: bold; 121 | margin: 5px 0 2px 0; 122 | text-align: left; 123 | color: inherit; 124 | } 125 | 126 | .flatWeatherPlugin.partial .wiToday p.wiDay { 127 | text-align: center; 128 | font-weight: bold; 129 | padding: 0 0 10px 0; 130 | clear: both; 131 | width: 100%; 132 | color: inherit; 133 | } 134 | 135 | 136 | .flatWeatherPlugin .wiDetail ul { 137 | width: 33%; 138 | float: left; 139 | list-style: none; 140 | font-size: 90%; 141 | } 142 | 143 | .flatWeatherPlugin .wiDetail ul + ul { 144 | width: 27%; 145 | } 146 | 147 | .flatWeatherPlugin .wiDetail ul + ul + ul { 148 | width: 40%; 149 | } 150 | 151 | .flatWeatherPlugin .wiDetail ul li:before { 152 | width:30px; 153 | 154 | } 155 | 156 | .flatWeatherPlugin ul.wiForecasts{ 157 | width: 100%; 158 | overflow: hidden; 159 | } 160 | 161 | .flatWeatherPlugin ul.wiForecasts li > span { 162 | width: 25%; 163 | display: inline-block; 164 | } 165 | 166 | .flatWeatherPlugin ul.wiForecasts li { 167 | float: left; 168 | width: 100%; 169 | overflow: hidden; 170 | display: inline; 171 | } 172 | 173 | .flatWeatherPlugin ul.wiForecasts ul.wiForecast { 174 | font-weight: normal; 175 | list-style: none; 176 | float: right; 177 | width: 75%; 178 | } 179 | 180 | .flatWeatherPlugin.forecast ul.wiForecasts ul.wiForecast li { 181 | text-align: center; 182 | } 183 | 184 | .flatWeatherPlugin ul.wiForecasts ul.wiForecast li { 185 | width: 33%; 186 | float: left; 187 | text-align: center; 188 | } 189 | 190 | .flatWeatherPlugin ul.wiForecasts ul.wiForecast li.wi:before { 191 | vertical-align: bottom; 192 | } 193 | 194 | .flatWeatherPlugin ul.wiForecasts li.wiDay { 195 | font-weight: bold; 196 | border-color: inherit; 197 | border-top: 1px solid RGBA(255,255,255,0.2); 198 | padding: 5px 0; 199 | } 200 | 201 | .flatWeatherPlugin.forecast ul.wiForecasts li.wiDay { 202 | border-bottom: 1px solid RGBA(255,255,255,0.2); 203 | border-top: none; 204 | } 205 | 206 | .flatWeatherPlugin ul.wiForecasts li.wiDay:last-child { 207 | border-bottom: none; 208 | } 209 | 210 | 211 | /*************************************************************************************************/ 212 | /* Font mappings */ 213 | /*************************************************************************************************/ 214 | 215 | /*************************** 216 | General 217 | ****************************/ 218 | .wi.sunrise:before { 219 | content: "\f051"; 220 | } 221 | 222 | .wi.sunset:before { 223 | content: "\f052"; 224 | } 225 | 226 | .wi.wind:before { 227 | content: "\f050"; 228 | } 229 | 230 | .wi.humidity:before { 231 | content: "\f04e"; 232 | } 233 | 234 | .wi.pressure:before { 235 | content: "\f040"; 236 | } 237 | 238 | .wi.cloudiness:before { 239 | content: "\f041"; 240 | } 241 | 242 | .wi.temperature.metric:after { 243 | content: "\f03c"; 244 | } 245 | 246 | .wi.temperature.imperial:after { 247 | content: "\f045"; 248 | } 249 | 250 | .wi.loading:after { 251 | content: "\f04c"; 252 | } 253 | 254 | /*************************** 255 | Thunderstorm 256 | ****************************/ 257 | 258 | /* thunderstorm with light rain */ 259 | .wi.wi200:before { 260 | content: "\f01d"; 261 | } 262 | 263 | /* thunderstorm with rain */ 264 | .wi.wi201:before { 265 | content: "\f01d"; 266 | } 267 | 268 | /* thunderstorm with heavy rain */ 269 | .wi.wi202:before { 270 | content: "\f01e"; 271 | } 272 | 273 | /* light thunderstorm */ 274 | .wi.wi210:before { 275 | content: "\f010"; 276 | } 277 | 278 | /* thunderstorm */ 279 | .wi.wi211:before { 280 | content: "\f01e"; 281 | } 282 | 283 | /* heavy thunderstorm */ 284 | .wi.wi212:before { 285 | content: "\f01e"; 286 | } 287 | 288 | /* ragged thunderstorm */ 289 | .wi.wi221:before { 290 | content: "\f016"; 291 | } 292 | 293 | /* thunderstorm with light drizzle */ 294 | .wi.wi230:before { 295 | content: "\f01d"; 296 | } 297 | 298 | /* thunderstorm with drizzle */ 299 | .wi.wi231:before { 300 | content: "\f01d"; 301 | } 302 | 303 | /* thunderstorm with heavy drizzle */ 304 | .wi.wi232:before { 305 | content: "\f01d"; 306 | } 307 | 308 | /*************************** 309 | Drizzle 310 | ****************************/ 311 | 312 | /* light intensity drizzle */ 313 | .wi.wi300:before { 314 | content: "\f01c"; 315 | } 316 | 317 | /* drizzle */ 318 | .wi.wi301:before { 319 | content: "\f01c"; 320 | } 321 | 322 | /* heavy intensity drizzle */ 323 | .wi.wi302:before { 324 | content: "\f01c"; 325 | } 326 | 327 | /* light intensity drizzle rain */ 328 | .wi.wi310:before { 329 | content: "\f01c"; 330 | } 331 | 332 | /* drizzle rain */ 333 | .wi.wi311:before { 334 | content: "\f017"; 335 | } 336 | 337 | /* heavy intensity drizzle rain */ 338 | .wi.wi312:before { 339 | content: "\f017"; 340 | } 341 | 342 | /* shower rain and drizzle */ 343 | .wi.wi313:before { 344 | content: "\f01a"; 345 | } 346 | 347 | /* heavy shower rain and drizzle */ 348 | .wi.wi314:before { 349 | content: "\f01a"; 350 | } 351 | 352 | /* shower drizzle */ 353 | .wi.wi321:before { 354 | content: "\f01a"; 355 | } 356 | 357 | /*************************** 358 | Rain 359 | ****************************/ 360 | 361 | /* light rain */ 362 | .wi.wi500:before { 363 | content: "\f01a"; 364 | } 365 | 366 | /* moderate rain */ 367 | .wi.wi501:before { 368 | content: "\f017"; 369 | } 370 | 371 | /* heavy intensity rain */ 372 | .wi.wi502:before { 373 | content: "\f019"; 374 | } 375 | 376 | /* very heavy rain */ 377 | .wi.wi503:before { 378 | content: "\f019"; 379 | } 380 | 381 | /* extreme rain */ 382 | .wi.wi504:before { 383 | content: "\f018"; 384 | } 385 | 386 | /* freezing rain */ 387 | .wi.wi511:before { 388 | content: "\f015"; 389 | } 390 | 391 | /* light intensity shower rain */ 392 | .wi.wi520:before { 393 | content: "\f01a"; 394 | } 395 | 396 | /* shower rain */ 397 | .wi.wi521:before { 398 | content: "\f01a"; 399 | } 400 | 401 | /* heavy intensity shower rain */ 402 | .wi.wi522:before { 403 | content: "\f01a"; 404 | } 405 | 406 | /* ragged shower rain */ 407 | .wi.wi531:before { 408 | content: "\f01a"; 409 | } 410 | 411 | /*************************** 412 | Snow 413 | ****************************/ 414 | 415 | /* light snow */ 416 | .wi.wi600:before { 417 | content: "\f01b"; 418 | } 419 | 420 | /* snow */ 421 | .wi.wi601:before { 422 | content: "\f01b"; 423 | } 424 | 425 | /* heavy snow */ 426 | .wi.wi602:before { 427 | content: "\f01b"; 428 | } 429 | 430 | /* sleet */ 431 | .wi.wi611:before { 432 | content: "\f015"; 433 | } 434 | 435 | /* shower sleet */ 436 | .wi.wi612:before { 437 | content: "\f015"; 438 | } 439 | 440 | /* light rain and snow */ 441 | .wi.wi615:before { 442 | content: "\f017"; 443 | } 444 | 445 | /* rain and snow */ 446 | .wi.wi616:before { 447 | content: "\f017"; 448 | } 449 | 450 | /* light shower snow */ 451 | .wi.wi620:before { 452 | content: "\f017"; 453 | } 454 | 455 | /* shower snow */ 456 | .wi.wi621:before { 457 | content: "\f017"; 458 | } 459 | 460 | /* heavy shower snow */ 461 | .wi.wi622:before { 462 | content: "\f017"; 463 | } 464 | 465 | /*************************** 466 | Atmosphere 467 | ****************************/ 468 | 469 | /* mist */ 470 | .wi.wi701:before { 471 | content: "\f014"; 472 | } 473 | 474 | /* smoke */ 475 | .wi.wi711:before { 476 | content: "\f062"; 477 | } 478 | 479 | /* haze */ 480 | .wi.wi721:before { 481 | content: "\f014"; 482 | } 483 | 484 | /* sand, dust whirls */ 485 | .wi.wi731:before { 486 | content: "\f063"; 487 | } 488 | 489 | /* fog */ 490 | .wi.wi741:before { 491 | content: "\f014"; 492 | } 493 | 494 | /* sand */ 495 | .wi.wi751:before { 496 | content: "\f063"; 497 | } 498 | 499 | /* dust */ 500 | .wi.wi761:before { 501 | content: "\f063"; 502 | } 503 | 504 | /* volcanic ash */ 505 | .wi.wi762:before { 506 | content: "\f063"; 507 | } 508 | 509 | /* squalls */ 510 | .wi.wi771:before { 511 | content: "\f050"; 512 | } 513 | 514 | /* tornado */ 515 | .wi.wi781:before { 516 | content: "\f056"; 517 | } 518 | 519 | /*************************** 520 | Clouds 521 | ****************************/ 522 | 523 | /* clear sky */ 524 | .wi.wi800:before { 525 | content: "\f00d"; 526 | } 527 | 528 | /* few clouds */ 529 | .wi.wi801:before { 530 | content: "\f002"; 531 | } 532 | 533 | /* scattered clouds */ 534 | .wi.wi802:before { 535 | content: "\f002"; 536 | } 537 | 538 | /* broken clouds */ 539 | .wi.wi803:before { 540 | content: "\f002"; 541 | } 542 | 543 | /* overcast clouds */ 544 | .wi.wi804:before { 545 | content: "\f00c"; 546 | } 547 | 548 | /*************************** 549 | Extreme 550 | ****************************/ 551 | 552 | /* tornado */ 553 | .wi.wi900:before { 554 | content: "\f056"; 555 | } 556 | 557 | /* tropical storm */ 558 | .wi.wi901:before { 559 | content: "\f073"; 560 | } 561 | 562 | /* hurricane */ 563 | .wi.wi902:before { 564 | content: "\f073"; 565 | } 566 | 567 | /* cold */ 568 | .wi.wi903:before { 569 | content: "\f076"; 570 | } 571 | 572 | /* hot */ 573 | .wi.wi904:before { 574 | content: "\f072"; 575 | } 576 | 577 | /* windy */ 578 | .wi.wi905:before { 579 | content: "\f050"; 580 | } 581 | 582 | /* hail */ 583 | .wi.wi906:before { 584 | content: "\f015"; 585 | } 586 | 587 | /*************************** 588 | Additional 589 | ****************************/ 590 | 591 | /* calm */ 592 | .wi.wi951:before { 593 | content: "\f00d"; 594 | } 595 | 596 | /* light breeze */ 597 | .wi.wi952:before { 598 | content: "\f021"; 599 | } 600 | 601 | /* gentle breeze */ 602 | .wi.wi953:before { 603 | content: "\f021"; 604 | } 605 | 606 | /* moderate breeze */ 607 | .wi.wi954:before { 608 | content: "\f021"; 609 | } 610 | 611 | /* fresh breeze */ 612 | .wi.wi955:before { 613 | content: "\f021"; 614 | } 615 | 616 | /* strong breeze */ 617 | .wi.wi956:before { 618 | content: "\f050"; 619 | } 620 | 621 | /* high wind, near gale */ 622 | .wi.wi957:before { 623 | content: "\f050"; 624 | } 625 | 626 | /* gale */ 627 | .wi.wi958:before { 628 | content: "\f050"; 629 | } 630 | 631 | /* severe gale */ 632 | .wi.wi959:before { 633 | content: "\f073"; 634 | } 635 | 636 | /* storm */ 637 | .wi.wi960:before { 638 | content: "\f073"; 639 | } 640 | 641 | /* violent storm */ 642 | .wi.wi961:before { 643 | content: "\f073"; 644 | } 645 | 646 | /* hurricane */ 647 | .wi.wi962:before { 648 | content: "\f073"; 649 | } -------------------------------------------------------------------------------- /css/lightbox.css: -------------------------------------------------------------------------------- 1 | /* Preload images */ 2 | body:after { 3 | content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png); 4 | display: none; 5 | } 6 | 7 | .lightboxOverlay { 8 | position: absolute; 9 | top: 0; 10 | left: 0; 11 | z-index: 9999; 12 | background-color: black; 13 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); 14 | opacity: 0.8; 15 | display: none; 16 | } 17 | 18 | .lightbox { 19 | position: absolute; 20 | left: 0; 21 | width: 100%; 22 | z-index: 10000; 23 | text-align: center; 24 | line-height: 0; 25 | font-weight: normal; 26 | } 27 | 28 | .lightbox .lb-image { 29 | display: block; 30 | height: auto; 31 | max-width: inherit; 32 | -webkit-border-radius: 3px; 33 | -moz-border-radius: 3px; 34 | -ms-border-radius: 3px; 35 | -o-border-radius: 3px; 36 | border-radius: 3px; 37 | } 38 | 39 | .lightbox a img { 40 | border: none; 41 | } 42 | 43 | .lb-outerContainer { 44 | position: relative; 45 | background-color: white; 46 | *zoom: 1; 47 | width: 250px; 48 | height: 250px; 49 | margin: 0 auto; 50 | -webkit-border-radius: 4px; 51 | -moz-border-radius: 4px; 52 | -ms-border-radius: 4px; 53 | -o-border-radius: 4px; 54 | border-radius: 4px; 55 | } 56 | 57 | .lb-outerContainer:after { 58 | content: ""; 59 | display: table; 60 | clear: both; 61 | } 62 | 63 | .lb-container { 64 | padding: 4px; 65 | } 66 | 67 | .lb-loader { 68 | position: absolute; 69 | top: 43%; 70 | left: 0; 71 | height: 25%; 72 | width: 100%; 73 | text-align: center; 74 | line-height: 0; 75 | } 76 | 77 | .lb-cancel { 78 | display: block; 79 | width: 32px; 80 | height: 32px; 81 | margin: 0 auto; 82 | background: url(../images/loading.gif) no-repeat; 83 | } 84 | 85 | .lb-nav { 86 | position: absolute; 87 | top: 0; 88 | left: 0; 89 | height: 100%; 90 | width: 100%; 91 | z-index: 10; 92 | } 93 | 94 | .lb-container > .nav { 95 | left: 0; 96 | } 97 | 98 | .lb-nav a { 99 | outline: none; 100 | background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); 101 | } 102 | 103 | .lb-prev, .lb-next { 104 | height: 100%; 105 | cursor: pointer; 106 | display: block; 107 | } 108 | 109 | .lb-nav a.lb-prev { 110 | width: 34%; 111 | left: 0; 112 | float: left; 113 | background: url(../images/prev.png) left 48% no-repeat; 114 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); 115 | opacity: 0; 116 | -webkit-transition: opacity 0.6s; 117 | -moz-transition: opacity 0.6s; 118 | -o-transition: opacity 0.6s; 119 | transition: opacity 0.6s; 120 | } 121 | 122 | .lb-nav a.lb-prev:hover { 123 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 124 | opacity: 1; 125 | } 126 | 127 | .lb-nav a.lb-next { 128 | width: 64%; 129 | right: 0; 130 | float: right; 131 | background: url(../images/next.png) right 48% no-repeat; 132 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); 133 | opacity: 0; 134 | -webkit-transition: opacity 0.6s; 135 | -moz-transition: opacity 0.6s; 136 | -o-transition: opacity 0.6s; 137 | transition: opacity 0.6s; 138 | } 139 | 140 | .lb-nav a.lb-next:hover { 141 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 142 | opacity: 1; 143 | } 144 | 145 | .lb-dataContainer { 146 | margin: 0 auto; 147 | padding-top: 5px; 148 | *zoom: 1; 149 | width: 100%; 150 | -moz-border-radius-bottomleft: 4px; 151 | -webkit-border-bottom-left-radius: 4px; 152 | border-bottom-left-radius: 4px; 153 | -moz-border-radius-bottomright: 4px; 154 | -webkit-border-bottom-right-radius: 4px; 155 | border-bottom-right-radius: 4px; 156 | } 157 | 158 | .lb-dataContainer:after { 159 | content: ""; 160 | display: table; 161 | clear: both; 162 | } 163 | 164 | .lb-data { 165 | padding: 0 4px; 166 | color: #ccc; 167 | } 168 | 169 | .lb-data .lb-details { 170 | width: 85%; 171 | float: left; 172 | text-align: left; 173 | line-height: 1.1em; 174 | } 175 | 176 | .lb-data .lb-caption { 177 | font-size: 13px; 178 | font-weight: bold; 179 | line-height: 1em; 180 | } 181 | 182 | .lb-data .lb-number { 183 | display: block; 184 | clear: left; 185 | padding-bottom: 1em; 186 | font-size: 12px; 187 | color: #999999; 188 | } 189 | 190 | .lb-data .lb-close { 191 | display: block; 192 | float: right; 193 | width: 30px; 194 | height: 30px; 195 | background: url(../images/close.png) top right no-repeat; 196 | text-align: right; 197 | outline: none; 198 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); 199 | opacity: 0.7; 200 | -webkit-transition: opacity 0.2s; 201 | -moz-transition: opacity 0.2s; 202 | -o-transition: opacity 0.2s; 203 | transition: opacity 0.2s; 204 | } 205 | 206 | .lb-data .lb-close:hover { 207 | cursor: pointer; 208 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); 209 | opacity: 1; 210 | } 211 | -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | 2 | @media (max-width : 750px) { 3 | /* Styles */ 4 | .secondrowfix{ 5 | margin-top:0px; 6 | } 7 | .largemobilefix{ 8 | width: 100%; 9 | } 10 | .largegraphmobilefix{ 11 | width: 100%; 12 | } 13 | .largegraphmobilefix2{ 14 | width: 100%; 15 | } 16 | } 17 | 18 | 19 | @media (min-width : 750px) { 20 | /* Styles */ 21 | .secondrowfix{ 22 | margin-top:-334px; 23 | } 24 | .largemobilefix{ 25 | width: 75%; 26 | float: right; 27 | } 28 | .largegraphmobilefix{ 29 | width:77%; 30 | float:right; 31 | margin-top: -431px; 32 | margin-right: -13px; 33 | } 34 | .largegraphmobilefix2{ 35 | width:77%; 36 | float:right; 37 | margin-top: -222px; 38 | margin-right: -13px; 39 | } 40 | } 41 | 42 | 43 | body { 44 | background:#1f1f1f; 45 | font-family: 'Open Sans', sans-serif; 46 | } 47 | 48 | h1 { 49 | font-family: 'Raleway', sans-serif;} 50 | 51 | h3,h4 , h5 { 52 | font-family: 'Open Sans', sans-serif; 53 | font-weight:lighter; 54 | } 55 | 56 | h2{ 57 | font-size:22px; 58 | } 59 | 60 | h3 { 61 | font-size:46px; 62 | color:#b2c831 63 | } 64 | 65 | h5 { 66 | color:#b2c831; 67 | margin-left:5px; 68 | } 69 | 70 | /***********NEWS***********/ 71 | .rssHeader{ 72 | font-family: 'Open Sans', sans-serif; 73 | font-weight: bold; 74 | font-size: 30px; 75 | line-height: 26px; 76 | letter-spacing: 0px; 77 | padding-top:10px; 78 | padding-bottom:14px; 79 | padding-left:5px; 80 | margin-top:2px; 81 | text-align:center; 82 | } 83 | .rssMedia{ 84 | display:none; 85 | } 86 | 87 | .rssRow div{ 88 | float:right; 89 | color: #9e9e9e; 90 | font-size: 10px; 91 | padding-right: 10px; 92 | margin-top: -25px; 93 | } 94 | .rssRow { 95 | padding: 10px; 96 | } 97 | 98 | /***********BLOCKS & WRAPS***********/ 99 | 100 | /*--- Dash Unit / Used in Dashboard page ---*/ 101 | .dash-unit { 102 | margin-bottom: 30px; 103 | padding-bottom:10px; 104 | border: 1px solid #383737; 105 | background-color: #3d3d3d; 106 | color:white; 107 | height:290px; 108 | } 109 | 110 | .dash-unit:hover { 111 | background-color: #4f4f4f; 112 | -moz-box-shadow: 3px 3px 2px 0px #151515; 113 | -webkit-box-shadow: 3px 3px 2px 0px #151515; 114 | box-shadow: 3px 3px 2px 0px #151515; 115 | 116 | } 117 | 118 | .dash-unit dtitle { 119 | font-size:11px; 120 | text-transform:uppercase; 121 | color:#ffffff; 122 | margin:8px; 123 | padding:0px; 124 | height:inherit 125 | } 126 | 127 | .dash-unit hr { 128 | border: 0; 129 | border-top: 1px solid #151515; 130 | border-top-style: dashed; 131 | margin-top:3px; 132 | } 133 | 134 | .dash-unit h1 { 135 | font-family: 'Raleway', sans-serif; 136 | font-weight:300; 137 | font-size: 20px; 138 | line-height: 2px; 139 | letter-spacing: 0px; 140 | color: #ffffff; 141 | padding-top:10px; 142 | padding-left:5px; 143 | margin-top:2px; 144 | text-align:center; 145 | } 146 | 147 | .dash-unit h2 { 148 | font-family: 'Open Sans', sans-serif; 149 | font-weight: bold; 150 | font-size: 30px; 151 | line-height: 26px; 152 | letter-spacing: 0px; 153 | padding-top:10px; 154 | padding-left:5px; 155 | margin-top:2px; 156 | text-align:center; 157 | } 158 | 159 | 160 | .dash-unit h3 { 161 | font-weight:300; 162 | font-size: 15px; 163 | line-height: 2px; 164 | letter-spacing: 0px; 165 | color: #b2c831; 166 | padding-top:10px; 167 | padding-left:5px; 168 | margin-top:2px; 169 | text-align:center; 170 | } 171 | 172 | 173 | .dash-unit p { 174 | font-size: 14px; 175 | font-weight: 200; 176 | line-height: 16px; 177 | color: inherit; 178 | margin: 0 0 10px; 179 | padding:5px; 180 | } 181 | 182 | .dash-unit h4 { 183 | padding-left:5px; 184 | margin-top:2px; 185 | font-size: 13px; 186 | font-weight:lighter; 187 | line-height: 1; 188 | letter-spacing: 0px; 189 | color: #fff; 190 | } 191 | 192 | .dash-unit bold{ 193 | font-family: 'Open Sans', sans-serif; 194 | font-size:26px; 195 | font-weight:bold; 196 | color:#fff; 197 | vertical-align:middle; 198 | } 199 | 200 | 201 | /**********Half-Unit / Used in index.html**********/ 202 | .half-unit { 203 | margin-bottom: 30px; 204 | padding-bottom: 4px; 205 | border: 1px solid #383737; 206 | background-color: #3d3d3d; 207 | color:white; 208 | height:130px; 209 | } 210 | 211 | .half-unit:hover { 212 | background-color: #4f4f4f; 213 | -moz-box-shadow: 3px 3px 2px 0px #151515; 214 | -webkit-box-shadow: 3px 3px 2px 0px #151515; 215 | box-shadow: 3px 3px 2px 0px #151515; 216 | 217 | } 218 | 219 | .half-unit dtitle { 220 | font-size:10px; 221 | text-transform:uppercase; 222 | color:#ffffff; 223 | margin:8px; 224 | padding:0px; 225 | height:inherit 226 | } 227 | 228 | .half-unit hr { 229 | border: 0; 230 | border-top: 1px solid #151515; 231 | border-top-style: dashed; 232 | margin-top:3px; 233 | } 234 | 235 | .half-unit h1 { 236 | font-family: 'Raleway', sans-serif; 237 | font-weight:300; 238 | font-size: 20px; 239 | line-height: 1; 240 | letter-spacing: 0px; 241 | color: #ffffff; 242 | padding-top:10px; 243 | padding-left:5px; 244 | margin-top:2px; 245 | text-align:center; 246 | } 247 | 248 | .half-unit h4 { 249 | padding-left:5px; 250 | margin-top:2px; 251 | font-size: 13px; 252 | font-weight:lighter; 253 | line-height: 1; 254 | letter-spacing: 0px; 255 | color: #fff; 256 | } 257 | 258 | 259 | .half-unit bold{ 260 | font-family: 'Open Sans', sans-serif; 261 | font-size:26px; 262 | font-weight:bold; 263 | color:#fff; 264 | vertical-align:middle; 265 | } 266 | 267 | /**********Styling Elements**********/ 268 | .cont { 269 | text-align:center; 270 | margin-top:30px; 271 | } 272 | 273 | .cont ok { 274 | color:#b2c831; 275 | } 276 | 277 | .cont bad { 278 | color:#fa1d2d; 279 | } 280 | 281 | .cont2 { 282 | text-align:center; 283 | margin-top:-15px; 284 | font-size:12px; 285 | line-height:7px; 286 | } 287 | 288 | .cont2 bold{ 289 | font-size:10px; 290 | font-weight:bold; 291 | color:#b2c831 292 | } 293 | 294 | .text p { 295 | font-family: 'Open Sans', sans-serif; 296 | margin-left:8px; 297 | font-size:14px; 298 | line-height:18px; 299 | } 300 | 301 | .text grey { 302 | font-size:11px; 303 | color:silver 304 | } 305 | 306 | 307 | /***********Bootstrap Default Modifications***********/ 308 | 309 | .thumbnail { 310 | border:0px; 311 | text-align:center; 312 | -webkit-box-shadow: 0px; 313 | -moz-box-shadow: 0px; 314 | box-shadow: 0px; 315 | background: none; 316 | text-align: center; 317 | 318 | } 319 | 320 | .modal-header { 321 | 322 | background-color: #4f4f4f; 323 | color:#fff; 324 | } 325 | 326 | 327 | input[type=submit] { 328 | font-family: 'Open Sans', sans-serif; 329 | font-size: 15px; 330 | background: #b2c831; 331 | color: #fff; 332 | border: none; 333 | padding: 8px 28px 10px 26px; 334 | *-webkit-border-radius: 4px; 335 | -moz-border-radius: 4px; 336 | border-radius: 4px; 337 | 338 | } 339 | input[type=text], textarea { 340 | background: #cdcbcc; 341 | font-size: 13px; 342 | display: block; 343 | width: 100%; 344 | border: none; 345 | box-shadow: none; 346 | height: 30px; 347 | line-height: 18px; 348 | padding: 0; 349 | text-indent: 18px; 350 | margin: 0 0 18px; 351 | } 352 | textarea { 353 | line-height: 18px; 354 | padding: 18px; 355 | width: 100%; 356 | text-indent: 0; 357 | } 358 | .textarea-container { margin: 0 18px; } 359 | .textarea-container textarea { margin-left: -18px; } 360 | #contact textarea { width: 100%; height: 45px; } 361 | 362 | 363 | .progress-bar { 364 | background-color: #b2c831; 365 | } 366 | 367 | 368 | 369 | 370 | /***********LineIcons Styles***********/ 371 | 372 | 373 | .info-user { 374 | text-align:center; 375 | font-size: 24px; 376 | color: #b2c831; 377 | } 378 | 379 | .fs1 { 380 | padding:5px 5px 5px 5px; 381 | position:relative; 382 | } 383 | 384 | .fs1:hover { 385 | position:relative; 386 | color: #fff; 387 | cursor:pointer 388 | } 389 | 390 | .fs2 { 391 | padding:5px 5px 5px 5px; 392 | position:relative; 393 | font-size:35px; 394 | vertical-align: text-bottom 395 | } 396 | 397 | /**********Clock Configuration**********/ 398 | 399 | digiclock { 400 | font-size: 30px; 401 | color: #fff; 402 | text-align: center; 403 | line-height: 60px; 404 | margin-left: auto 405 | } 406 | 407 | .clockcenter { 408 | text-align:center; 409 | } 410 | 411 | 412 | /**********Mail Style Configuration**********/ 413 | 414 | .framemail { 415 | cursor: default; 416 | } 417 | .framemail .window { 418 | font-size: 0; 419 | margin-top: -1px; 420 | overflow: hidden; 421 | margin-left: -18px; 422 | } 423 | .framemail .window .mail li { 424 | background-color:#3d3d3d; 425 | background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 426 | background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 427 | background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 428 | background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 429 | background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 430 | border-top: 1px solid #888; 431 | position: relative; 432 | margin-left:-18px; 433 | } 434 | .framemail .window .mail li:first-child { 435 | border-top: none; 436 | } 437 | .framemail .window .mail li:hover { 438 | background-color: #5d5b5b; 439 | } 440 | .framemail .window .mail li:after, 441 | .framemail .window .mail li:before { 442 | border-left: 8px solid transparent; 443 | border-top: 8px solid #df6; 444 | content: ''; 445 | height: 0; 446 | position: absolute; 447 | right: 0; 448 | top: 0; 449 | width: 0; 450 | } 451 | .framemail .window .mail li:before { 452 | border-top-color: #bbb; 453 | border-width: 9px; 454 | } 455 | .framemail .window .mail li:nth-child(1):after, 456 | .framemail .window .mail li:nth-child(1):before { 457 | border: none; 458 | } 459 | .framemail .window .mail li:nth-child(2):after { 460 | border-top-color: #fa1d2d; 461 | } 462 | .framemail .window .mail li i { 463 | display: inline-block; 464 | height: 48px; 465 | width: 6px; 466 | } 467 | .framemail .window .mail li .read { 468 | background-color: #ddd; 469 | } 470 | .framemail .window .mail li .unread { 471 | background: #b2c831; 472 | } 473 | .framemail .window .mail li img { 474 | background: #819da2; 475 | border-radius: 2px; 476 | height: 36px; 477 | left: 12px; 478 | position: absolute; 479 | top: 6px; 480 | width: 36px; 481 | } 482 | .framemail .window .mail li p { 483 | font: 13px/24px sans-serif; 484 | left: 56px; 485 | position: absolute; 486 | top: 3px; 487 | } 488 | .framemail .window .mail li .sender { 489 | color: #e9e8e8; 490 | font-weight: bold; 491 | text-shadow: 0 1px 1px hsla(0,0%,100%,.5); 492 | } 493 | .framemail .window .mail li .message { 494 | color: #999; 495 | overflow: hidden; 496 | text-overflow: ellipsis; 497 | top: 21px; 498 | white-space: nowrap; 499 | } 500 | .framemail .window .mail li .message strong { 501 | color: #999; 502 | } 503 | .framemail .window .mail li .actions { 504 | height: 16px; 505 | position: absolute; 506 | right: 19px; 507 | text-align: right; 508 | top: 0; 509 | width: 96px; 510 | } 511 | .framemail .window .mail li .actions img { 512 | background: none; 513 | display: inline-block; 514 | height: 16px; 515 | margin-left: 6px; 516 | opacity: .1; 517 | position: relative; 518 | width: 16px; 519 | } 520 | .framemail .window .mail li:hover .actions img { 521 | opacity: .25; 522 | } 523 | .framemail .window .mail li .actions img:hover { 524 | opacity: .75; 525 | } 526 | 527 | 528 | /**********DONUT CHARTS STYLES**********/ 529 | #load { 530 | width: 11.313em; 531 | height: 11.313em; 532 | -moz-border-radius: 5px; 533 | border-radius: 5px; 534 | margin-bottom: 1.063em; 535 | background-position: center center; 536 | margin:auto; 537 | } 538 | 539 | #space { 540 | width: 11.313em; 541 | height: 11.313em; 542 | -moz-border-radius: 5px; 543 | border-radius: 5px; 544 | margin-bottom: 1.063em; 545 | background-position: center center; 546 | margin:auto; 547 | } 548 | 549 | 550 | /**********LINE AND BARS**********/ 551 | 552 | .section-graph { 553 | position: relative; 554 | height: 130px; 555 | color: #fff; 556 | background-image: linear-gradient(color-stops(#b2c831, #b2c831 50%, #b2c831 50%)); 557 | margin-bottom:20px; 558 | } 559 | .section-graph .graph-info { 560 | z-index: 99; 561 | position: absolute; 562 | font-weight: bold; 563 | margin-top: 12px; 564 | margin-left: 21px; 565 | width: 100px; 566 | } 567 | .section-graph .graph-info .graph-arrow { 568 | width: 0; 569 | height: 0; 570 | margin-top: 18px; 571 | border-left: 4px solid transparent; 572 | border-right: 4px solid transparent; 573 | border-bottom: 4px solid white; 574 | float: left; 575 | } 576 | .section-graph .graph-info .graph-info-big { 577 | font-size: 24px; 578 | float: left; 579 | margin-left: 3px; 580 | } 581 | .section-graph .graph-info .graph-info-small { 582 | margin-left: 3px; 583 | font-size: 12px; 584 | font-weight: normal; 585 | color: rgba(255, 255, 255, 0.5); 586 | clear: left; 587 | margin-left: 8px; 588 | } 589 | /* 590 | * Info Section 591 | */ 592 | .info-aapl { 593 | text-align: center; 594 | 595 | } 596 | .info-aapl ul { 597 | margin-left:30%; 598 | 599 | } 600 | .info-aapl li { 601 | margin: 0; 602 | display: block; 603 | width: 9px; 604 | height: 40px; 605 | margin-right: 6px; 606 | background-color: #f5f0ec; 607 | float:left; 608 | position: relative; 609 | } 610 | .info-aapl li span { 611 | display: block; 612 | width: 9px; 613 | height: 40px; 614 | position: absolute; 615 | bottom: 0; 616 | } 617 | .info-aapl li span.orange { 618 | background-color: #fa1d2d; 619 | } 620 | .info-aapl li span.green { 621 | background-color: #b2c831; 622 | } 623 | 624 | /**********TWITTER WIDGET **********/ 625 | #jstwitter ul li{ 626 | color:#bdbdbd; 627 | padding:.5em .75em; 628 | } 629 | 630 | #jstwitter ul{ 631 | margin-left:0; 632 | list-style:none 633 | } 634 | 635 | #jstwitter:first-child{ 636 | border-top:0 637 | } 638 | 639 | ul#jstwitter li a{ 640 | font-size:10px; 641 | font-style:italic; 642 | color:#666; 643 | text-decoration:none 644 | } 645 | 646 | /********** CUSTOMIZED BUTTON **********/ 647 | .btnnew { 648 | display: inline-block; 649 | *border-left: 0 none #707070; 650 | border-right: 0 none #707070; 651 | border-top: 0 none #707070; 652 | border-bottom: 0 none #707070; 653 | display: inline; 654 | padding: 4px 12px; 655 | margin-bottom: 0; 656 | *margin-left: .3em; 657 | font-size: 14px; 658 | line-height: 20px; 659 | color: #b2c831; 660 | text-align: center; 661 | vertical-align: middle; 662 | cursor: pointer; 663 | background-color: #5a5a5a; 664 | *background-color: #5a5a5a; 665 | background-repeat: repeat-x; 666 | *-webkit-border-radius: 4px; 667 | -moz-border-radius: 4px; 668 | border-radius: 4px; 669 | zoom: 1; 670 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 671 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 672 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 673 | background-image: linear-gradient(to bottom, #707070, #707070);* 674 | } 675 | 676 | /********** SWITCH BUTTON **********/ 677 | .switch { 678 | position: relative; 679 | margin: 20px auto; 680 | height: 26px; 681 | width: 120px; 682 | background: rgba(0, 0, 0, 0.25); 683 | border-radius: 3px; 684 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1); 685 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1); 686 | } 687 | 688 | .switch-label { 689 | position: relative; 690 | z-index: 2; 691 | float: left; 692 | width: 58px; 693 | line-height: 26px; 694 | font-size: 11px; 695 | color: rgba(255, 255, 255, 0.35); 696 | text-align: center; 697 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.45); 698 | cursor: pointer; 699 | } 700 | .switch-label:active { 701 | font-weight: bold; 702 | } 703 | 704 | .switch-label-off { 705 | padding-left: 2px; 706 | } 707 | 708 | .switch-label-on { 709 | padding-right: 2px; 710 | } 711 | 712 | /* 713 | * Note: using adjacent or general sibling selectors combined with 714 | * pseudo classes doesn't work in Safari 5.0 and Chrome 12. 715 | * See this article for more info and a potential fix: 716 | * http://css-tricks.com/webkit-sibling-bug/ 717 | */ 718 | .switch-input { 719 | display: none; 720 | } 721 | .switch-input:checked + .switch-label { 722 | font-weight: bold; 723 | color: rgba(0, 0, 0, 0.65); 724 | text-shadow: 0 1px rgba(255, 255, 255, 0.25); 725 | -webkit-transition: 0.15s ease-out; 726 | -moz-transition: 0.15s ease-out; 727 | -o-transition: 0.15s ease-out; 728 | transition: 0.15s ease-out; 729 | } 730 | .switch-input:checked + .switch-label-on ~ .switch-selection { 731 | left: 60px; 732 | /* Note: left: 50% doesn't transition in WebKit */ 733 | } 734 | 735 | .switch-selection { 736 | display: block; 737 | position: absolute; 738 | z-index: 1; 739 | top: 2px; 740 | left: 2px; 741 | width: 58px; 742 | height: 22px; 743 | background: #b2c831; 744 | border-radius: 3px; 745 | background-image: -webkit-linear-gradient(top, #b6c753, #b2c831); 746 | background-image: -moz-linear-gradient(top, #b6c753, #b2c831); 747 | background-image: -o-linear-gradient(top, #b6c753, #b2c831); 748 | background-image: linear-gradient(to bottom, #b6c753, #b2c831); 749 | -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); 750 | box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); 751 | -webkit-transition: left 0.15s ease-out; 752 | -moz-transition: left 0.15s ease-out; 753 | -o-transition: left 0.15s ease-out; 754 | transition: left 0.15s ease-out; 755 | } 756 | .switch-blue .switch-selection { 757 | background: #3aa2d0; 758 | background-image: -webkit-linear-gradient(top, #4fc9ee, #3aa2d0); 759 | background-image: -moz-linear-gradient(top, #4fc9ee, #3aa2d0); 760 | background-image: -o-linear-gradient(top, #4fc9ee, #3aa2d0); 761 | background-image: linear-gradient(to bottom, #4fc9ee, #3aa2d0); 762 | } 763 | .switch-yellow .switch-selection { 764 | background: #fa1d2d; 765 | background-image: -webkit-linear-gradient(top, #f93e4b, #fa1d2d); 766 | background-image: -moz-linear-gradient(top, #f93e4b, #fa1d2d); 767 | background-image: -o-linear-gradient(top, #f93e4b, #fa1d2d); 768 | background-image: linear-gradient(to bottom, #f93e4b, #fa1d2d); 769 | } 770 | 771 | 772 | /**********Gauge Chart**********/ 773 | #canvas { 774 | display: block; 775 | width: 150px; 776 | margin: 30px auto; 777 | } 778 | 779 | /**********Accordion Styling**********/ 780 | 781 | .accordion-group { 782 | border: 1px solid #222; 783 | } 784 | .accordion-heading { 785 | background-color: #5a5a5a; 786 | *background-color: #5a5a5a; 787 | background-repeat: repeat-x; 788 | *-webkit-border-radius: 4px; 789 | -moz-border-radius: 4px; 790 | border-radius: 4px; 791 | zoom: 1; 792 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 793 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 794 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 795 | background-image: linear-gradient(to bottom, #707070, #707070);* 796 | } 797 | 798 | /**********Link Styling**********/ 799 | a { 800 | color: #b2c831; 801 | text-decoration: none; 802 | } 803 | 804 | a:hover { 805 | color: #dff948; 806 | text-decoration: none; 807 | } 808 | 809 | 810 | 811 | /**********FooterWrap Section**********/ 812 | #footerwrap { 813 | width: 100%; 814 | background:#262626; 815 | 816 | padding-top:25px; 817 | padding-bottom: 40px; 818 | border-top-style: solid; 819 | border-top-width:8px; 820 | border-top-color:#1d1d1d; 821 | text-align:center 822 | 823 | } 824 | 825 | #footerwrap p { 826 | color:white; 827 | font-size:12px; 828 | } 829 | 830 | 831 | /***********FULLCALENDAR STYLE***********/ 832 | 833 | #external-events { 834 | padding: 0 10px; 835 | border: 1px solid #8b8b8a; 836 | background-color: #8b8b8a; 837 | -webkit-border-radius: 4px; 838 | -moz-border-radius: 4px; 839 | border-radius: 4px; 840 | text-align: left; 841 | } 842 | 843 | #external-events h4 { 844 | font-size: 16px; 845 | margin-top: 0; 846 | padding-top: 1em; 847 | } 848 | 849 | .external-event { /* try to mimick the look of a real event */ 850 | margin: 10px 0; 851 | padding: 2px 4px; 852 | background: #b2c831; 853 | color: #fff; 854 | font-size: .85em; 855 | cursor: pointer; 856 | } 857 | 858 | #external-events p { 859 | margin: 1.5em 0; 860 | font-size: 11px; 861 | color: #b2c831; 862 | } 863 | 864 | #external-events p input { 865 | margin: 0; 866 | vertical-align: middle; 867 | } 868 | 869 | #calendar { 870 | width:100%; 871 | } 872 | 873 | 874 | /**********Media Styles**********/ 875 | 876 | @media (max-width: 360px){ 877 | /*Calendar Adsjustments*/ 878 | .fc-header {margin-top:15px;} 879 | .fc-header-title h2{font-size:10px; } 880 | .fc-header-right {display:none} 881 | 882 | /* portrait tablet */ 883 | @media (min-width: 767px) and (max-width: 768px) { 884 | .info-aapl ul { 885 | margin-left:10px; 886 | float:left; 887 | } 888 | 889 | #load { 890 | margin-left:5px; 891 | margin-right:10px; 892 | } 893 | 894 | #space { 895 | margin-left:5px; 896 | margin-right:10px; 897 | } 898 | 899 | } 900 | 901 | /* Landscape iphone 5 and samsung galaxy */ 902 | @media (min-width: 560px) and (max-width: 685px) { 903 | .info-aapl ul { 904 | margin-left:40%; 905 | } 906 | 907 | } -------------------------------------------------------------------------------- /css/mainRounded.css: -------------------------------------------------------------------------------- 1 | 2 | @media (max-width : 750px) { 3 | /* Styles */ 4 | .secondrowfix{ 5 | margin-top:0px; 6 | } 7 | .largemobilefix{ 8 | width: 100%; 9 | } 10 | .largegraphmobilefix{ 11 | width: 100%; 12 | } 13 | .largegraphmobilefix2{ 14 | width: 100%; 15 | } 16 | } 17 | 18 | 19 | @media (min-width : 750px) { 20 | /* Styles */ 21 | .secondrowfix{ 22 | margin-top:-334px; 23 | } 24 | .largemobilefix{ 25 | width: 75%; 26 | float: right; 27 | } 28 | .largegraphmobilefix{ 29 | width:77%; 30 | float:right; 31 | margin-top: -431px; 32 | margin-right: -13px; 33 | } 34 | .largegraphmobilefix2{ 35 | width:77%; 36 | float:right; 37 | margin-top: -222px; 38 | margin-right: -13px; 39 | } 40 | } 41 | 42 | body { 43 | background:#1f1f1f; 44 | font-family: 'Open Sans', sans-serif; 45 | } 46 | 47 | h1 { 48 | font-family: 'Raleway', sans-serif;} 49 | 50 | h3,h4 , h5 { 51 | font-family: 'Open Sans', sans-serif; 52 | font-weight:lighter; 53 | } 54 | 55 | h2{ 56 | font-size:22px; 57 | } 58 | 59 | h3 { 60 | font-size:46px; 61 | color:#b2c831 62 | } 63 | 64 | h5 { 65 | color:#b2c831; 66 | margin-left:5px; 67 | } 68 | 69 | 70 | /***********NEWS***********/ 71 | .rssHeader{ 72 | font-family: 'Open Sans', sans-serif; 73 | font-weight: bold; 74 | font-size: 30px; 75 | line-height: 26px; 76 | letter-spacing: 0px; 77 | padding-top:10px; 78 | padding-bottom:14px; 79 | padding-left:5px; 80 | margin-top:2px; 81 | text-align:center; 82 | } 83 | .rssMedia{ 84 | display:none; 85 | } 86 | 87 | .rssRow div{ 88 | float:right; 89 | color: #9e9e9e; 90 | font-size: 10px; 91 | padding-right: 10px; 92 | margin-top: -25px; 93 | } 94 | .rssRow { 95 | padding: 10px; 96 | } 97 | 98 | /***********BLOCKS & WRAPS***********/ 99 | 100 | /*--- Dash Unit / Used in Dashboard page ---*/ 101 | .dash-unit { 102 | margin-bottom: 30px; 103 | padding-bottom:10px; 104 | border: 1px solid #383737; 105 | border-radius:10px; 106 | background-color: #3d3d3d; 107 | color:white; 108 | height:290px; 109 | } 110 | 111 | .dash-unit:hover { 112 | background-color: #4f4f4f; 113 | -moz-box-shadow: 3px 3px 2px 0px #151515; 114 | -webkit-box-shadow: 3px 3px 2px 0px #151515; 115 | box-shadow: 3px 3px 2px 0px #151515; 116 | 117 | } 118 | 119 | .dash-unit dtitle { 120 | font-size:11px; 121 | text-transform:uppercase; 122 | color:#ffffff; 123 | margin:8px; 124 | padding:0px; 125 | height:inherit 126 | } 127 | 128 | .dash-unit hr { 129 | border: 0; 130 | border-top: 1px solid #151515; 131 | border-top-style: dashed; 132 | margin-top:3px; 133 | } 134 | 135 | .dash-unit h1 { 136 | font-family: 'Raleway', sans-serif; 137 | font-weight:300; 138 | font-size: 20px; 139 | line-height: 2px; 140 | letter-spacing: 0px; 141 | color: #ffffff; 142 | padding-top:10px; 143 | padding-left:5px; 144 | margin-top:2px; 145 | text-align:center; 146 | } 147 | 148 | .dash-unit h2 { 149 | font-family: 'Open Sans', sans-serif; 150 | font-weight: bold; 151 | font-size: 30px; 152 | line-height: 26px; 153 | letter-spacing: 0px; 154 | color: #ffffff; 155 | padding-top:10px; 156 | padding-left:5px; 157 | margin-top:2px; 158 | text-align:center; 159 | } 160 | 161 | 162 | .dash-unit h3 { 163 | font-weight:300; 164 | font-size: 15px; 165 | line-height: 2px; 166 | letter-spacing: 0px; 167 | color: #b2c831; 168 | padding-top:10px; 169 | padding-left:5px; 170 | margin-top:2px; 171 | text-align:center; 172 | } 173 | 174 | 175 | .dash-unit p { 176 | font-size: 14px; 177 | font-weight: 200; 178 | line-height: 16px; 179 | color: inherit; 180 | margin: 0 0 10px; 181 | padding:5px; 182 | } 183 | 184 | .dash-unit h4 { 185 | padding-left:5px; 186 | margin-top:2px; 187 | font-size: 13px; 188 | font-weight:lighter; 189 | line-height: 1; 190 | letter-spacing: 0px; 191 | color: #fff; 192 | } 193 | 194 | .dash-unit bold{ 195 | font-family: 'Open Sans', sans-serif; 196 | font-size:26px; 197 | font-weight:bold; 198 | color:#fff; 199 | vertical-align:middle; 200 | } 201 | 202 | 203 | /**********Half-Unit / Used in index.html**********/ 204 | .half-unit { 205 | margin-bottom: 30px; 206 | padding-bottom: 4px; 207 | border-radius:10px; 208 | border: 1px solid #383737; 209 | background-color: #3d3d3d; 210 | color:white; 211 | height:130px; 212 | } 213 | 214 | .half-unit:hover { 215 | background-color: #4f4f4f; 216 | -moz-box-shadow: 3px 3px 2px 0px #151515; 217 | -webkit-box-shadow: 3px 3px 2px 0px #151515; 218 | box-shadow: 3px 3px 2px 0px #151515; 219 | 220 | } 221 | 222 | .half-unit dtitle { 223 | font-size:10px; 224 | text-transform:uppercase; 225 | color:#ffffff; 226 | margin:8px; 227 | padding:0px; 228 | height:inherit 229 | } 230 | 231 | .half-unit hr { 232 | border: 0; 233 | border-top: 1px solid #151515; 234 | border-top-style: dashed; 235 | margin-top:3px; 236 | } 237 | 238 | .half-unit h1 { 239 | font-family: 'Raleway', sans-serif; 240 | font-weight:300; 241 | font-size: 20px; 242 | line-height: 1; 243 | letter-spacing: 0px; 244 | color: #ffffff; 245 | padding-top:10px; 246 | padding-left:5px; 247 | margin-top:2px; 248 | text-align:center; 249 | } 250 | 251 | .half-unit h4 { 252 | padding-left:5px; 253 | margin-top:2px; 254 | font-size: 13px; 255 | font-weight:lighter; 256 | line-height: 1; 257 | letter-spacing: 0px; 258 | color: #fff; 259 | } 260 | 261 | 262 | .half-unit bold{ 263 | font-family: 'Open Sans', sans-serif; 264 | font-size:26px; 265 | font-weight:bold; 266 | color:#fff; 267 | vertical-align:middle; 268 | } 269 | 270 | /**********Styling Elements**********/ 271 | .cont { 272 | text-align:center; 273 | margin-top:30px; 274 | } 275 | 276 | .cont ok { 277 | color:#b2c831; 278 | } 279 | 280 | .cont bad { 281 | color:#fa1d2d; 282 | } 283 | 284 | .cont2 { 285 | text-align:center; 286 | margin-top:-15px; 287 | font-size:12px; 288 | line-height:7px; 289 | } 290 | 291 | .cont2 bold{ 292 | font-size:10px; 293 | font-weight:bold; 294 | color:#b2c831 295 | } 296 | 297 | .text p { 298 | font-family: 'Open Sans', sans-serif; 299 | margin-left:8px; 300 | font-size:14px; 301 | line-height:18px; 302 | } 303 | 304 | .text grey { 305 | font-size:11px; 306 | color:silver 307 | } 308 | 309 | 310 | /***********Bootstrap Default Modifications***********/ 311 | 312 | .thumbnail { 313 | border:0px; 314 | text-align:center; 315 | -webkit-box-shadow: 0px; 316 | -moz-box-shadow: 0px; 317 | box-shadow: 0px; 318 | background: none; 319 | text-align: center; 320 | 321 | } 322 | 323 | .modal-header { 324 | 325 | background-color: #4f4f4f; 326 | color:#fff; 327 | } 328 | 329 | 330 | input[type=submit] { 331 | font-family: 'Open Sans', sans-serif; 332 | font-size: 15px; 333 | background: #b2c831; 334 | color: #fff; 335 | border: none; 336 | padding: 8px 28px 10px 26px; 337 | *-webkit-border-radius: 4px; 338 | -moz-border-radius: 4px; 339 | border-radius: 4px; 340 | 341 | } 342 | input[type=text], textarea { 343 | background: #cdcbcc; 344 | font-size: 13px; 345 | display: block; 346 | width: 100%; 347 | border: none; 348 | box-shadow: none; 349 | height: 30px; 350 | line-height: 18px; 351 | padding: 0; 352 | text-indent: 18px; 353 | margin: 0 0 18px; 354 | } 355 | textarea { 356 | line-height: 18px; 357 | padding: 18px; 358 | width: 100%; 359 | text-indent: 0; 360 | } 361 | .textarea-container { margin: 0 18px; } 362 | .textarea-container textarea { margin-left: -18px; } 363 | #contact textarea { width: 100%; height: 45px; } 364 | 365 | 366 | .progress-bar { 367 | background-color: #b2c831; 368 | } 369 | 370 | 371 | 372 | 373 | /***********LineIcons Styles***********/ 374 | 375 | 376 | .info-user { 377 | text-align:center; 378 | font-size: 24px; 379 | color: #b2c831; 380 | } 381 | 382 | .fs1 { 383 | padding:5px 5px 5px 5px; 384 | position:relative; 385 | } 386 | 387 | .fs1:hover { 388 | position:relative; 389 | color: #fff; 390 | cursor:pointer 391 | } 392 | 393 | .fs2 { 394 | padding:5px 5px 5px 5px; 395 | position:relative; 396 | font-size:35px; 397 | vertical-align: text-bottom 398 | } 399 | 400 | /**********Clock Configuration**********/ 401 | 402 | digiclock { 403 | font-size: 30px; 404 | color: #fff; 405 | text-align: center; 406 | line-height: 60px; 407 | margin-left: auto 408 | } 409 | 410 | .clockcenter { 411 | text-align:center; 412 | } 413 | 414 | 415 | /**********Mail Style Configuration**********/ 416 | 417 | .framemail { 418 | cursor: default; 419 | } 420 | .framemail .window { 421 | font-size: 0; 422 | margin-top: -1px; 423 | overflow: hidden; 424 | margin-left: -18px; 425 | } 426 | .framemail .window .mail li { 427 | background-color:#3d3d3d; 428 | background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 429 | background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 430 | background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 431 | background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 432 | background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,0%,.05)); 433 | border-top: 1px solid #888; 434 | position: relative; 435 | margin-left:-18px; 436 | } 437 | .framemail .window .mail li:first-child { 438 | border-top: none; 439 | } 440 | .framemail .window .mail li:hover { 441 | background-color: #5d5b5b; 442 | } 443 | .framemail .window .mail li:after, 444 | .framemail .window .mail li:before { 445 | border-left: 8px solid transparent; 446 | border-top: 8px solid #df6; 447 | content: ''; 448 | height: 0; 449 | position: absolute; 450 | right: 0; 451 | top: 0; 452 | width: 0; 453 | } 454 | .framemail .window .mail li:before { 455 | border-top-color: #bbb; 456 | border-width: 9px; 457 | } 458 | .framemail .window .mail li:nth-child(1):after, 459 | .framemail .window .mail li:nth-child(1):before { 460 | border: none; 461 | } 462 | .framemail .window .mail li:nth-child(2):after { 463 | border-top-color: #fa1d2d; 464 | } 465 | .framemail .window .mail li i { 466 | display: inline-block; 467 | height: 48px; 468 | width: 6px; 469 | } 470 | .framemail .window .mail li .read { 471 | background-color: #ddd; 472 | } 473 | .framemail .window .mail li .unread { 474 | background: #b2c831; 475 | } 476 | .framemail .window .mail li img { 477 | background: #819da2; 478 | border-radius: 2px; 479 | height: 36px; 480 | left: 12px; 481 | position: absolute; 482 | top: 6px; 483 | width: 36px; 484 | } 485 | .framemail .window .mail li p { 486 | font: 13px/24px sans-serif; 487 | left: 56px; 488 | position: absolute; 489 | top: 3px; 490 | } 491 | .framemail .window .mail li .sender { 492 | color: #e9e8e8; 493 | font-weight: bold; 494 | text-shadow: 0 1px 1px hsla(0,0%,100%,.5); 495 | } 496 | .framemail .window .mail li .message { 497 | color: #999; 498 | overflow: hidden; 499 | text-overflow: ellipsis; 500 | top: 21px; 501 | white-space: nowrap; 502 | } 503 | .framemail .window .mail li .message strong { 504 | color: #999; 505 | } 506 | .framemail .window .mail li .actions { 507 | height: 16px; 508 | position: absolute; 509 | right: 19px; 510 | text-align: right; 511 | top: 0; 512 | width: 96px; 513 | } 514 | .framemail .window .mail li .actions img { 515 | background: none; 516 | display: inline-block; 517 | height: 16px; 518 | margin-left: 6px; 519 | opacity: .1; 520 | position: relative; 521 | width: 16px; 522 | } 523 | .framemail .window .mail li:hover .actions img { 524 | opacity: .25; 525 | } 526 | .framemail .window .mail li .actions img:hover { 527 | opacity: .75; 528 | } 529 | 530 | 531 | /**********DONUT CHARTS STYLES**********/ 532 | #load { 533 | width: 11.313em; 534 | height: 11.313em; 535 | -moz-border-radius: 5px; 536 | border-radius: 5px; 537 | margin-bottom: 1.063em; 538 | background-position: center center; 539 | margin:auto; 540 | } 541 | 542 | #space { 543 | width: 11.313em; 544 | height: 11.313em; 545 | -moz-border-radius: 5px; 546 | border-radius: 5px; 547 | margin-bottom: 1.063em; 548 | background-position: center center; 549 | margin:auto; 550 | } 551 | 552 | 553 | /**********LINE AND BARS**********/ 554 | 555 | .section-graph { 556 | position: relative; 557 | height: 130px; 558 | color: #fff; 559 | background-image: linear-gradient(color-stops(#b2c831, #b2c831 50%, #b2c831 50%)); 560 | margin-bottom:20px; 561 | } 562 | .section-graph .graph-info { 563 | z-index: 99; 564 | position: absolute; 565 | font-weight: bold; 566 | margin-top: 12px; 567 | margin-left: 21px; 568 | width: 100px; 569 | } 570 | .section-graph .graph-info .graph-arrow { 571 | width: 0; 572 | height: 0; 573 | margin-top: 18px; 574 | border-left: 4px solid transparent; 575 | border-right: 4px solid transparent; 576 | border-bottom: 4px solid white; 577 | float: left; 578 | } 579 | .section-graph .graph-info .graph-info-big { 580 | font-size: 24px; 581 | float: left; 582 | margin-left: 3px; 583 | } 584 | .section-graph .graph-info .graph-info-small { 585 | margin-left: 3px; 586 | font-size: 12px; 587 | font-weight: normal; 588 | color: rgba(255, 255, 255, 0.5); 589 | clear: left; 590 | margin-left: 8px; 591 | } 592 | /* 593 | * Info Section 594 | */ 595 | .info-aapl { 596 | text-align: center; 597 | 598 | } 599 | .info-aapl ul { 600 | margin-left:30%; 601 | 602 | } 603 | .info-aapl li { 604 | margin: 0; 605 | display: block; 606 | width: 9px; 607 | height: 40px; 608 | margin-right: 6px; 609 | background-color: #f5f0ec; 610 | float:left; 611 | position: relative; 612 | } 613 | .info-aapl li span { 614 | display: block; 615 | width: 9px; 616 | height: 40px; 617 | position: absolute; 618 | bottom: 0; 619 | } 620 | .info-aapl li span.orange { 621 | background-color: #fa1d2d; 622 | } 623 | .info-aapl li span.green { 624 | background-color: #b2c831; 625 | } 626 | 627 | /**********TWITTER WIDGET **********/ 628 | #jstwitter ul li{ 629 | color:#bdbdbd; 630 | padding:.5em .75em; 631 | } 632 | 633 | #jstwitter ul{ 634 | margin-left:0; 635 | list-style:none 636 | } 637 | 638 | #jstwitter:first-child{ 639 | border-top:0 640 | } 641 | 642 | ul#jstwitter li a{ 643 | font-size:10px; 644 | font-style:italic; 645 | color:#666; 646 | text-decoration:none 647 | } 648 | 649 | /********** CUSTOMIZED BUTTON **********/ 650 | .btnnew { 651 | display: inline-block; 652 | *border-left: 0 none #707070; 653 | border-right: 0 none #707070; 654 | border-top: 0 none #707070; 655 | border-bottom: 0 none #707070; 656 | display: inline; 657 | padding: 4px 12px; 658 | margin-bottom: 0; 659 | *margin-left: .3em; 660 | font-size: 14px; 661 | line-height: 20px; 662 | color: #b2c831; 663 | text-align: center; 664 | vertical-align: middle; 665 | cursor: pointer; 666 | background-color: #5a5a5a; 667 | *background-color: #5a5a5a; 668 | background-repeat: repeat-x; 669 | *-webkit-border-radius: 4px; 670 | -moz-border-radius: 4px; 671 | border-radius: 4px; 672 | zoom: 1; 673 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 674 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 675 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 676 | background-image: linear-gradient(to bottom, #707070, #707070);* 677 | } 678 | 679 | /********** SWITCH BUTTON **********/ 680 | .switch { 681 | position: relative; 682 | margin: 20px auto; 683 | height: 26px; 684 | width: 120px; 685 | background: rgba(0, 0, 0, 0.25); 686 | border-radius: 3px; 687 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1); 688 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1); 689 | } 690 | 691 | .switch-label { 692 | position: relative; 693 | z-index: 2; 694 | float: left; 695 | width: 58px; 696 | line-height: 26px; 697 | font-size: 11px; 698 | color: rgba(255, 255, 255, 0.35); 699 | text-align: center; 700 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.45); 701 | cursor: pointer; 702 | } 703 | .switch-label:active { 704 | font-weight: bold; 705 | } 706 | 707 | .switch-label-off { 708 | padding-left: 2px; 709 | } 710 | 711 | .switch-label-on { 712 | padding-right: 2px; 713 | } 714 | 715 | /* 716 | * Note: using adjacent or general sibling selectors combined with 717 | * pseudo classes doesn't work in Safari 5.0 and Chrome 12. 718 | * See this article for more info and a potential fix: 719 | * http://css-tricks.com/webkit-sibling-bug/ 720 | */ 721 | .switch-input { 722 | display: none; 723 | } 724 | .switch-input:checked + .switch-label { 725 | font-weight: bold; 726 | color: rgba(0, 0, 0, 0.65); 727 | text-shadow: 0 1px rgba(255, 255, 255, 0.25); 728 | -webkit-transition: 0.15s ease-out; 729 | -moz-transition: 0.15s ease-out; 730 | -o-transition: 0.15s ease-out; 731 | transition: 0.15s ease-out; 732 | } 733 | .switch-input:checked + .switch-label-on ~ .switch-selection { 734 | left: 60px; 735 | /* Note: left: 50% doesn't transition in WebKit */ 736 | } 737 | 738 | .switch-selection { 739 | display: block; 740 | position: absolute; 741 | z-index: 1; 742 | top: 2px; 743 | left: 2px; 744 | width: 58px; 745 | height: 22px; 746 | background: #b2c831; 747 | border-radius: 3px; 748 | background-image: -webkit-linear-gradient(top, #b6c753, #b2c831); 749 | background-image: -moz-linear-gradient(top, #b6c753, #b2c831); 750 | background-image: -o-linear-gradient(top, #b6c753, #b2c831); 751 | background-image: linear-gradient(to bottom, #b6c753, #b2c831); 752 | -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); 753 | box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); 754 | -webkit-transition: left 0.15s ease-out; 755 | -moz-transition: left 0.15s ease-out; 756 | -o-transition: left 0.15s ease-out; 757 | transition: left 0.15s ease-out; 758 | } 759 | .switch-blue .switch-selection { 760 | background: #3aa2d0; 761 | background-image: -webkit-linear-gradient(top, #4fc9ee, #3aa2d0); 762 | background-image: -moz-linear-gradient(top, #4fc9ee, #3aa2d0); 763 | background-image: -o-linear-gradient(top, #4fc9ee, #3aa2d0); 764 | background-image: linear-gradient(to bottom, #4fc9ee, #3aa2d0); 765 | } 766 | .switch-yellow .switch-selection { 767 | background: #fa1d2d; 768 | background-image: -webkit-linear-gradient(top, #f93e4b, #fa1d2d); 769 | background-image: -moz-linear-gradient(top, #f93e4b, #fa1d2d); 770 | background-image: -o-linear-gradient(top, #f93e4b, #fa1d2d); 771 | background-image: linear-gradient(to bottom, #f93e4b, #fa1d2d); 772 | } 773 | 774 | 775 | /**********Gauge Chart**********/ 776 | #canvas { 777 | display: block; 778 | width: 150px; 779 | margin: 30px auto; 780 | } 781 | 782 | /**********Accordion Styling**********/ 783 | 784 | .accordion-group { 785 | border: 1px solid #222; 786 | } 787 | .accordion-heading { 788 | background-color: #5a5a5a; 789 | *background-color: #5a5a5a; 790 | background-repeat: repeat-x; 791 | *-webkit-border-radius: 4px; 792 | -moz-border-radius: 4px; 793 | border-radius: 4px; 794 | zoom: 1; 795 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 796 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 797 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 798 | background-image: linear-gradient(to bottom, #707070, #707070);* 799 | } 800 | 801 | /**********Link Styling**********/ 802 | a { 803 | color: #b2c831; 804 | text-decoration: none; 805 | } 806 | 807 | a:hover { 808 | color: #dff948; 809 | text-decoration: none; 810 | } 811 | 812 | 813 | 814 | /**********FooterWrap Section**********/ 815 | #footerwrap { 816 | width: 100%; 817 | background:#262626; 818 | 819 | padding-top:25px; 820 | padding-bottom: 40px; 821 | border-top-style: solid; 822 | border-top-width:8px; 823 | border-top-color:#1d1d1d; 824 | text-align:center 825 | 826 | } 827 | 828 | #footerwrap p { 829 | color:white; 830 | font-size:12px; 831 | } 832 | 833 | 834 | /***********FULLCALENDAR STYLE***********/ 835 | 836 | #external-events { 837 | padding: 0 10px; 838 | border: 1px solid #8b8b8a; 839 | background-color: #8b8b8a; 840 | -webkit-border-radius: 4px; 841 | -moz-border-radius: 4px; 842 | border-radius: 4px; 843 | text-align: left; 844 | } 845 | 846 | #external-events h4 { 847 | font-size: 16px; 848 | margin-top: 0; 849 | padding-top: 1em; 850 | } 851 | 852 | .external-event { /* try to mimick the look of a real event */ 853 | margin: 10px 0; 854 | padding: 2px 4px; 855 | background: #b2c831; 856 | color: #fff; 857 | font-size: .85em; 858 | cursor: pointer; 859 | } 860 | 861 | #external-events p { 862 | margin: 1.5em 0; 863 | font-size: 11px; 864 | color: #b2c831; 865 | } 866 | 867 | #external-events p input { 868 | margin: 0; 869 | vertical-align: middle; 870 | } 871 | 872 | #calendar { 873 | width:100%; 874 | } 875 | 876 | 877 | /**********Media Styles**********/ 878 | 879 | @media (max-width: 360px){ 880 | /*Calendar Adsjustments*/ 881 | .fc-header {margin-top:15px;} 882 | .fc-header-title h2{font-size:10px; } 883 | .fc-header-right {display:none} 884 | 885 | /* portrait tablet */ 886 | @media (min-width: 767px) and (max-width: 768px) { 887 | .info-aapl ul { 888 | margin-left:10px; 889 | float:left; 890 | } 891 | 892 | #load { 893 | margin-left:5px; 894 | margin-right:10px; 895 | } 896 | 897 | #space { 898 | margin-left:5px; 899 | margin-right:10px; 900 | } 901 | 902 | } 903 | 904 | /* Landscape iphone 5 and samsung galaxy */ 905 | @media (min-width: 560px) and (max-width: 685px) { 906 | .info-aapl ul { 907 | margin-left:40%; 908 | } 909 | 910 | } -------------------------------------------------------------------------------- /css/slider.css: -------------------------------------------------------------------------------- 1 | .flat-slider.ui-corner-all, 2 | .flat-slider .ui-corner-all { 3 | border-radius: 0; 4 | } 5 | 6 | .flat-slider.ui-slider { 7 | border: 0; 8 | background: #706d6c; 9 | border-radius: 7px; 10 | position:relative; 11 | margin-left: 20px; 12 | margin-right: 20px; 13 | } 14 | 15 | .flat-slider.ui-slider-horizontal { 16 | height: 6px; 17 | } 18 | 19 | .flat-slider.ui-slider-vertical { 20 | height: 15em; 21 | width: 6px; 22 | } 23 | 24 | .flat-slider .ui-slider-handle { 25 | width: 20px; 26 | height: 20px; 27 | background: #38b11f; 28 | border-radius: 50%; 29 | border: none; 30 | cursor: pointer; 31 | position:absolute 32 | } 33 | 34 | .flat-slider.ui-slider-horizontal .ui-slider-handle { 35 | top: 50%; 36 | margin-top: -10px; 37 | } 38 | 39 | .flat-slider.ui-slider-vertical .ui-slider-handle { 40 | left: 50%; 41 | margin-left: -10px; 42 | } 43 | 44 | .flat-slider .ui-slider-handle:hover { 45 | opacity: .8; 46 | } 47 | 48 | .flat-slider .ui-slider-range { 49 | border: 0; 50 | border-radius: 7; 51 | background: #f99; 52 | } 53 | 54 | .flat-slider.ui-slider-horizontal .ui-slider-range { 55 | top: 0; 56 | height: 6px; 57 | } 58 | 59 | .flat-slider.ui-slider-vertical .ui-slider-range { 60 | left: 0; 61 | width: 6px; 62 | } -------------------------------------------------------------------------------- /css/styles.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | body { 4 | font-family: 'Lato', arial, sans-serif; 5 | color: #434343; 6 | background: #dae3e7; 7 | font-size: 16px; 8 | -webkit-font-smoothing: antialiased; 9 | -moz-osx-font-smoothing: grayscale; 10 | 11 | overflow: auto; 12 | -webkit-overflow-scrolling:touch; 13 | } 14 | 15 | h1, 16 | h2, 17 | h3, 18 | h4, 19 | h5, 20 | h6 { 21 | font-family: 'Montserrat', sans-serif; 22 | font-weight: 700; 23 | color: #778492; 24 | } 25 | 26 | text { 27 | display:none; 28 | } 29 | 30 | a { 31 | color: #3aaa64; 32 | -webkit-transition: all 0.4s ease-in-out; 33 | -moz-transition: all 0.4s ease-in-out; 34 | -ms-transition: all 0.4s ease-in-out; 35 | -o-transition: all 0.4s ease-in-out; 36 | } 37 | 38 | a:hover { 39 | text-decoration: underline; 40 | color: #5f6b77; 41 | color: #2d844e; 42 | } 43 | 44 | .btn, 45 | a.btn { 46 | -webkit-transition: all 0.4s ease-in-out; 47 | -moz-transition: all 0.4s ease-in-out; 48 | -ms-transition: all 0.4s ease-in-out; 49 | -o-transition: all 0.4s ease-in-out; 50 | font-family: 'Montserrat', arial, sans-serif; 51 | padding: 8px 16px; 52 | font-weight: bold; 53 | } 54 | 55 | .btn .fa, 56 | a.btn .fa { 57 | margin-right: 5px; 58 | } 59 | 60 | .btn:focus, 61 | a.btn:focus { 62 | color: #fff; 63 | } 64 | 65 | a.btn-cta-primary, 66 | .btn-cta-primary { 67 | background: #54ba4e; 68 | border: 1px solid #54ba4e; 69 | color: #fff; 70 | font-weight: 600; 71 | text-transform: uppercase; 72 | } 73 | 74 | a.btn-cta-primary:hover, 75 | .btn-cta-primary:hover { 76 | background: #49ac43; 77 | border: 1px solid #49ac43; 78 | color: #fff; 79 | } 80 | 81 | a.btn-cta-secondary, 82 | .btn-cta-secondary { 83 | background: #479fc8; 84 | border: 1px solid #479fc8; 85 | color: #fff; 86 | font-weight: 600; 87 | text-transform: uppercase; 88 | } 89 | 90 | 91 | a.btn-cta-secondary:hover, 92 | .btn-cta-secondary:hover { 93 | background: #3893bd; 94 | border: 1px solid #3893bd; 95 | color: #fff; 96 | } 97 | 98 | .text-highlight { 99 | color: #32383e; 100 | } 101 | 102 | .label-theme { 103 | background: #3aaa64; 104 | font-size: 12px; 105 | } 106 | 107 | a.dotted-link { 108 | border-bottom: 1px dotted #778492; 109 | color: #778492; 110 | } 111 | 112 | a.dotted-link:hover { 113 | text-decoration: none; 114 | color: #49515a; 115 | } 116 | 117 | iframe { 118 | 119 | .header { 120 | padding: 0; 121 | } 122 | 123 | } 124 | 125 | 126 | .iframe-wrapper { 127 | overflow: auto; 128 | -webkit-overflow-scrolling:touch; 129 | } 130 | 131 | 132 | /* ======= Header ======= */ 133 | .header { 134 | padding: 30px 0; 135 | background: #f5f5f5; 136 | border-top: 10px solid #778492; 137 | } 138 | 139 | .header .btn { 140 | margin-top: 60px; 141 | font-weight: bold; 142 | } 143 | 144 | .header .profile-image { 145 | margin-right: 30px; 146 | } 147 | 148 | .header .profile-content .name { 149 | color: #49515a; 150 | font-size: 38px; 151 | margin-bottom: 5px; 152 | margin-top: 30px; 153 | } 154 | 155 | .header .profile-content .desc { 156 | color: #778492; 157 | font-family: "Lato", arial, sans-serif; 158 | font-weight: 400; 159 | font-size: 24px; 160 | margin-top: 0; 161 | margin-bottom: 15px; 162 | } 163 | 164 | .header .profile-content .social a { 165 | background: #b0b7bf; 166 | width: 36px; 167 | height: 36px; 168 | display: inline-block; 169 | -webkit-border-radius: 50%; 170 | -moz-border-radius: 50%; 171 | -ms-border-radius: 50%; 172 | -o-border-radius: 50%; 173 | border-radius: 50%; 174 | -moz-background-clip: padding; 175 | -webkit-background-clip: padding-box; 176 | background-clip: padding-box; 177 | color: #fff; 178 | text-align: center; 179 | } 180 | 181 | .header .profile-content .social a:hover { 182 | background: #778492; 183 | } 184 | 185 | .header .profile-content .social a .fa { 186 | font-size: 20px; 187 | padding-top: 8px; 188 | } 189 | 190 | /* ======= Sections======= */ 191 | .sections-wrapper { 192 | padding-top: 60px; 193 | padding-bottom: 60px; 194 | } 195 | 196 | .section { 197 | margin-bottom: 30px; 198 | } 199 | 200 | .section .section-inner { 201 | background: #fff; 202 | padding: 30px; 203 | } 204 | 205 | .section .heading { 206 | margin-top: 0; 207 | margin-bottom: 30px; 208 | color: #545e69; 209 | font-size: 24px; 210 | } 211 | 212 | .section .content .more-link .fa { 213 | margin-right: 5px; 214 | font-size: 14px; 215 | } 216 | 217 | /* About Section */ 218 | /* Latest Section */ 219 | .latest .item { 220 | margin-bottom: 30px; 221 | } 222 | 223 | .latest .item .title { 224 | font-size: 18px; 225 | margin-top: 0; 226 | } 227 | 228 | .latest .item .title .label { 229 | margin-left: 5px; 230 | font-size: 12px; 231 | } 232 | 233 | .latest .item .title a { 234 | color: #778492; 235 | } 236 | 237 | .latest .item .title a:hover { 238 | color: #5f6b77; 239 | } 240 | 241 | .latest .item .project-image:hover { 242 | -webkit-opacity: 0.8; 243 | -moz-opacity: 0.8; 244 | opacity: 0.8; 245 | } 246 | 247 | .latest .divider { 248 | margin-bottom: 60px; 249 | } 250 | 251 | .latest .featured { 252 | margin-bottom: 60px; 253 | } 254 | 255 | .latest .featured .title { 256 | margin-bottom: 5px; 257 | font-size: 20px; 258 | } 259 | 260 | .latest .featured .summary { 261 | margin-bottom: 30px; 262 | color: #778492; 263 | } 264 | 265 | .latest .featured img { 266 | margin-bottom: 30px; 267 | } 268 | 269 | .latest .featured .desc { 270 | margin-bottom: 30px; 271 | } 272 | 273 | .latest .featured-image { 274 | position: relative; 275 | } 276 | 277 | .latest .featured-image .text { 278 | background: #3aaa64; 279 | color: #fff; 280 | } 281 | 282 | .latest .featured-image .ribbon { 283 | position: absolute; 284 | top: -4px; 285 | right: -4px; 286 | width: 110px; 287 | height: 110px; 288 | overflow: hidden; 289 | } 290 | 291 | .latest .featured-image .ribbon .text { 292 | font-family: 'Montserrat', sans-serif; 293 | position: relative; 294 | left: -8px; 295 | top: 18px; 296 | width: 158px; 297 | padding: 10px 10px; 298 | font-size: 15px; 299 | font-weight: bold; 300 | text-align: center; 301 | text-transform: uppercase; 302 | color: #fff; 303 | background-color: #479fc8; 304 | -webkit-transform: rotate(45deg) translate3d(0, 0, 0); 305 | -moz-transform: rotate(45deg) translate3d(0, 0, 0); 306 | -ms-transform: rotate(45deg) translate3d(0, 0, 0); 307 | -o-transform: rotate(45deg) translate3d(0, 0, 0); 308 | } 309 | 310 | .latest .featured-image .ribbon .text:before, 311 | .latest .featured-image .ribbon .text:after { 312 | content: ''; 313 | position: absolute; 314 | bottom: -5px; 315 | border-top: 5px solid #276582; 316 | border-left: 5px solid transparent; 317 | border-right: 5px solid transparent; 318 | } 319 | 320 | .latest .featured-image .ribbon .text:before { 321 | left: 0; 322 | } 323 | 324 | .latest .featured-image .ribbon .text:after { 325 | right: 0; 326 | } 327 | 328 | /* Projects Section */ 329 | .projects .item { 330 | margin-bottom: 30px; 331 | } 332 | 333 | .projects .item .title { 334 | font-size: 16px; 335 | margin-top: 0; 336 | margin-bottom: 5px; 337 | line-height: 1.5; 338 | } 339 | 340 | .projects .item .title a { 341 | color: #778492; 342 | } 343 | 344 | .projects .item .title a:hover { 345 | color: #5f6b77; 346 | } 347 | 348 | /* Work Section */ 349 | .experience .item { 350 | margin-bottom: 30px; 351 | } 352 | 353 | .experience .item .title { 354 | font-size: 16px; 355 | margin-top: 0; 356 | margin-bottom: 5px; 357 | line-height: 1.5; 358 | } 359 | 360 | .experience .item .title .place { 361 | color: #999999; 362 | font-weight: normal; 363 | } 364 | 365 | .experience .item .title .place a { 366 | color: #999999; 367 | } 368 | 369 | .experience .item .title .place a:hover { 370 | color: #666666; 371 | } 372 | 373 | .experience .item .title .year { 374 | color: #999999; 375 | font-weight: normal; 376 | } 377 | 378 | /* Git section */ 379 | .ghfeed { 380 | height: 600px; 381 | } 382 | 383 | .ghfeed, 384 | .ghfeed *, 385 | .ghfeed *:before, 386 | .ghfeed *:after { 387 | -webkit-box-sizing: content-box; 388 | -moz-box-sizing: content-box; 389 | box-sizing: content-box; 390 | } 391 | 392 | /* Info Section */ 393 | .info .fa { 394 | margin-right: 15px; 395 | color: #ccd1d6; 396 | } 397 | 398 | .info .fa.fa-envelope-o { 399 | font-size: 14px; 400 | } 401 | 402 | .info ul { 403 | margin-bottom: 0; 404 | } 405 | 406 | .info li { 407 | margin-bottom: 15px; 408 | } 409 | 410 | .info li:last-child { 411 | margin-bottom: 0; 412 | } 413 | 414 | /* Skills Section */ 415 | .skills .intro { 416 | margin-bottom: 30px; 417 | } 418 | 419 | .skills .skillset .item { 420 | margin-bottom: 30px; 421 | } 422 | 423 | .skills .skillset .level-title { 424 | font-size: 16px; 425 | position: relative; 426 | margin-top: 0; 427 | margin-bottom: 10; 428 | } 429 | 430 | .skills .skillset .level-title .level-label { 431 | color: #ccd1d6; 432 | font-size: 14px; 433 | font-weight: 400; 434 | font-family: "Lato", arial, sans-serif; 435 | position: absolute; 436 | right: 0; 437 | top: 0; 438 | } 439 | 440 | .skills .skillset .level-bar { 441 | height: 15px; 442 | background: #e8e8e8; 443 | } 444 | 445 | .skills .skillset .level-bar-inner { 446 | height: 15px; 447 | background: #66cb8c; 448 | } 449 | 450 | /* Testimonials section */ 451 | .testimonials .item { 452 | margin-bottom: 30px; 453 | } 454 | 455 | .testimonials .item:last-child { 456 | margin-bottom: 0; 457 | } 458 | 459 | .testimonials .item .quote { 460 | color: #666666; 461 | font-size: 16px; 462 | border-left-color: #9fdeb7; 463 | margin-bottom: 15px; 464 | } 465 | 466 | .testimonials .item .quote .fa { 467 | color: #79d19a; 468 | margin-right: 15px; 469 | } 470 | 471 | .testimonials .item .source { 472 | font-size: 14px; 473 | padding-left: 30px; 474 | font-weight: 500; 475 | } 476 | 477 | .testimonials .item .source .name { 478 | color: #939ea9; 479 | font-weight: 600; 480 | } 481 | 482 | .testimonials .item .source .title { 483 | color: #999999; 484 | } 485 | 486 | /* Education section */ 487 | .education .item { 488 | margin-bottom: 30px; 489 | } 490 | 491 | .education .item:last-child { 492 | margin-bottom: 0; 493 | } 494 | 495 | .education .item .title { 496 | font-size: 16px; 497 | margin-top: 0; 498 | } 499 | 500 | .education .item .university { 501 | font-family: "Lato", arial, sans-serif; 502 | font-size: 13px; 503 | color: #999999; 504 | font-weight: 600; 505 | padding-left: 25px; 506 | } 507 | 508 | .education .item .university .year { 509 | color: #b0b7bf; 510 | font-weight: 500; 511 | } 512 | 513 | /* Language Section */ 514 | .languages .item { 515 | margin-bottom: 15px; 516 | } 517 | 518 | .languages .item .title { 519 | color: #778492; 520 | } 521 | 522 | .languages .item .level { 523 | color: #999999; 524 | } 525 | 526 | .languages .item:last-child { 527 | margin-bottom: 0; 528 | } 529 | 530 | .languages .item .fa { 531 | color: #79d19a; 532 | } 533 | 534 | /* Blog Section */ 535 | .blog .item { 536 | margin-bottom: 30px; 537 | } 538 | 539 | .blog .item .title { 540 | font-size: 18px; 541 | line-height: 1.3; 542 | } 543 | 544 | .blog .item .title a { 545 | color: #778492; 546 | } 547 | 548 | .blog .item .title a:hover { 549 | color: #5f6b77; 550 | } 551 | 552 | .blog .item:last-child { 553 | margin-bottom: 0; 554 | } 555 | 556 | /* List section */ 557 | .list ul li { 558 | margin-bottom: 10px; 559 | } 560 | 561 | .list ul li .fa { 562 | margin-right: 5px; 563 | } 564 | 565 | .list ul li a { 566 | color: #778492; 567 | } 568 | 569 | .list ul li a:hover { 570 | color: #49515a; 571 | } 572 | 573 | /* Credits */ 574 | .credits ul li { 575 | margin-bottom: 10px; 576 | } 577 | 578 | .credits ul li .fa { 579 | margin-right: 5px; 580 | } 581 | 582 | .credits ul li a { 583 | color: #778492; 584 | } 585 | 586 | .credits ul li a:hover { 587 | color: #49515a; 588 | } 589 | 590 | .credits .btn { 591 | margin-bottom: 15px; 592 | } 593 | 594 | /* ======= Footer ======= */ 595 | .footer { 596 | background: #32383e; 597 | color: #fff; 598 | padding: 10px 0; 599 | } 600 | 601 | .footer .copyright { 602 | line-height: 1.6; 603 | color: #a1aab4; 604 | font-size: 14px; 605 | } 606 | 607 | .footer a { 608 | color: #fff; 609 | } 610 | 611 | .footer .fa-heart { 612 | color: #fb866a; 613 | } 614 | 615 | /* Extra small devices (phones, less than 768px) */ 616 | @media (max-width: 767px) { 617 | .header { 618 | text-align: center; 619 | } 620 | 621 | .header .profile-image { 622 | float: none !important; 623 | margin: 0 auto; 624 | } 625 | 626 | .header .profile-content { 627 | float: none !important; 628 | text-align: center; 629 | } 630 | 631 | .header .btn { 632 | margin-top: 30px; 633 | float: none !important; 634 | } 635 | 636 | .project-image { 637 | margin-bottom: 15px; 638 | } 639 | 640 | } 641 | 642 | 643 | /* Outer */ 644 | .popup { 645 | width:100%; 646 | height:100%; 647 | display:none; 648 | position:fixed; 649 | top:0px; 650 | left:0px; 651 | background:rgba(0,0,0,0.75); 652 | } 653 | 654 | /* Inner */ 655 | .popup-inner { 656 | max-width:700px; 657 | width:90%; 658 | padding:40px; 659 | position:absolute; 660 | top:50%; 661 | left:50%; 662 | -webkit-transform:translate(-50%, -50%); 663 | transform:translate(-50%, -50%); 664 | box-shadow:0px 2px 6px rgba(0,0,0,1); 665 | border-radius:3px; 666 | background:#fff; 667 | } 668 | 669 | /* Close Button */ 670 | .popup-close { 671 | width:30px; 672 | height:30px; 673 | padding-top:4px; 674 | display:inline-block; 675 | position:absolute; 676 | top:0px; 677 | right:0px; 678 | transition:ease 0.25s all; 679 | -webkit-transform:translate(50%, -50%); 680 | transform:translate(50%, -50%); 681 | border-radius:1000px; 682 | background:rgba(0,0,0,0.8); 683 | font-family:Arial, Sans-Serif; 684 | font-size:20px; 685 | text-align:center; 686 | line-height:100%; 687 | color:#fff; 688 | } 689 | 690 | .popup-close:hover { 691 | -webkit-transform:translate(50%, -50%) rotate(180deg); 692 | transform:translate(50%, -50%) rotate(180deg); 693 | background:rgba(0,0,0,1); 694 | text-decoration:none; 695 | } 696 | 697 | /* Small devices (tablets, 768px and up) */ 698 | /* Medium devices (desktops, 992px and up) */ 699 | /* Large devices (large desktops, 1200px and up) */ 700 | /* Ex-Large devices (large desktops, 1200px and up) */ 701 | @media (min-width: 1400px) { 702 | .container { 703 | width: 1360px; 704 | } 705 | 706 | } 707 | 708 | -------------------------------------------------------------------------------- /fonts/WeatherIcons-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/fonts/WeatherIcons-Regular.otf -------------------------------------------------------------------------------- /fonts/weathericons-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/fonts/weathericons-regular-webfont.eot -------------------------------------------------------------------------------- /fonts/weathericons-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/fonts/weathericons-regular-webfont.ttf -------------------------------------------------------------------------------- /fonts/weathericons-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/fonts/weathericons-regular-webfont.woff -------------------------------------------------------------------------------- /frontpage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 93 |
94 | 95 |
96 | 97 |
98 |
99 | Switches 100 |
101 | 102 |
103 | 104 |
105 |
106 |
107 | 108 |
109 |
110 |
111 |
112 |
113 | 114 |
115 |
116 |
117 |
118 |
119 | 120 |
121 |
122 |
123 |
124 |
125 | 126 |
127 |
128 |
129 |
130 |
131 | 132 |
133 |
134 |
135 |
136 |
137 | 138 |
139 |
140 |
141 |
142 |
143 |
144 | 145 |
146 |
147 | 148 |
149 |
150 |

151 | 152 |
153 |
154 | 155 |
156 |
157 | 158 |
159 |
160 |

161 | 162 |
163 |
164 | 165 |
166 |
167 | 168 |
169 |
170 |

171 | 172 |
173 |
174 |
175 | 176 | 177 |
178 |
179 |
180 | Local Time 181 |
182 |
183 | 12:45:25 184 |
185 |
186 |
187 | 188 |
189 |
190 |

191 |
192 |
193 |
194 |
195 |
196 | 197 |
198 |
199 | 200 |
201 |
202 |
203 |
204 | 205 |
206 |
207 | 208 |
209 |
210 |
211 |
212 | 213 |
214 |
215 | 216 |
217 |
218 |
219 | 220 |
221 |
222 | 223 | -- 224 |
225 |
Today: -- Total: -- 226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 | 236 |
237 | 238 | 239 | 240 | 241 | 300 | 301 | 302 | 303 | -------------------------------------------------------------------------------- /graph.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 93 |
94 | 95 |
96 | 97 |
98 |
99 | Switches 100 |
101 | 102 |
103 | 104 |
105 |
106 |
107 | 108 |
109 |
110 |
111 |
112 |
113 | 114 |
115 |
116 |
117 |
118 |
119 | 120 |
121 |
122 |
123 |
124 |
125 | 126 |
127 |
128 |
129 |
130 |
131 | 132 |
133 |
134 |
135 |
136 |
137 | 138 |
139 |
140 |
141 |
142 |
143 |
144 | 145 |
146 |
147 | 148 |
149 |
150 |

151 | 152 |
153 |
154 |
155 | 156 |
157 | 158 |
159 |
160 | 161 |
162 |
163 |

164 | 165 |
166 |
167 |
168 | 169 |
170 | 171 |
172 |
173 | 174 |
175 |
176 |

177 | 178 |
179 |
180 |
181 | 182 |
183 | 184 | 185 | 197 | 198 | 199 | 200 | -------------------------------------------------------------------------------- /images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/close.png -------------------------------------------------------------------------------- /images/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/down.png -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/loading.gif -------------------------------------------------------------------------------- /images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/next.png -------------------------------------------------------------------------------- /images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/prev.png -------------------------------------------------------------------------------- /images/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/images/up.png -------------------------------------------------------------------------------- /js/clock.js: -------------------------------------------------------------------------------- 1 | // Interactiveness now 2 | (function() { 3 | var clock = document.querySelector('digiclock'); 4 | var pad = function(x) { 5 | return x < 10 ? '0' + x : x; 6 | }; 7 | 8 | var ticktock = function() { 9 | var d = new Date(); 10 | 11 | var h = pad(d.getHours()); 12 | var m = pad(d.getMinutes()); 13 | var s = pad(d.getSeconds()); 14 | 15 | var current_time = [h, m, s].join(':'); 16 | 17 | clock.innerHTML = current_time; 18 | 19 | }; 20 | 21 | ticktock(); 22 | // Calling ticktock() every 1 second 23 | setInterval(ticktock, 1000); 24 | }()); -------------------------------------------------------------------------------- /js/colors.js: -------------------------------------------------------------------------------- 1 | var cptRED = 0; 2 | 3 | var cptGREEN = 1; 4 | 5 | var cptBLUE = 2; 6 | 7 | 8 | function XYPoint(x,y) 9 | { 10 | if(this instanceof XYPoint) 11 | { 12 | this.x = x; 13 | this.y = y; 14 | } 15 | else 16 | { 17 | return new XYPoint(x,y); 18 | } 19 | } 20 | 21 | /** 22 | * Get Color points according to light model 23 | * @param model string Ex: LLC010 24 | * @returns {Array} 25 | */ 26 | function colorPointsForModel(model) 27 | { 28 | 29 | var colorPoints = []; 30 | 31 | if(model === 'LCT001') 32 | { 33 | colorPoints.push(XYPoint(0.675, 0.322)); 34 | colorPoints.push(XYPoint(0.4091, 0.518)); 35 | colorPoints.push(XYPoint(0.167, 0.04)); 36 | } 37 | else if(model === 'LLC006' || model === 'LLC007') 38 | { 39 | colorPoints.push(XYPoint(0.704, 0.296)); 40 | colorPoints.push(XYPoint(0.2151, 0.7106)); 41 | colorPoints.push(XYPoint(0.138, 0.08)); 42 | } 43 | else 44 | { 45 | // Default construct triangle wich contains all values 46 | colorPoints.push(XYPoint(1.0, 0.0)); 47 | colorPoints.push(XYPoint(0.0, 1.0)); 48 | colorPoints.push(XYPoint(0.0, 0.0)); 49 | } 50 | return colorPoints; 51 | } 52 | 53 | 54 | /** 55 | * Method to see if the given XY value is within the reach of the lamps. 56 | * 57 | * @param p the point containing the X,Y value 58 | * @param colorPoints color points array containing RGB XYPoints 59 | * @return true if within reach, false otherwise. 60 | */ 61 | 62 | function checkPointInLampsReach(p, colorPoints) 63 | { 64 | var red = colorPoints[0]; 65 | var green = colorPoints[1]; 66 | var blue = colorPoints[2]; 67 | 68 | var v1 = XYPoint(green.x - red.x, green.y - red.y); 69 | var v2 = XYPoint(blue.x - red.x, blue.y - red.y); 70 | 71 | var q = XYPoint(p.x - red.x, p.y - red.y); 72 | 73 | var s = crossProduct(q, v2) / crossProduct(v1, v2); 74 | var t = crossProduct(v1, q) / crossProduct(v1, v2); 75 | 76 | return ( (s >= 0.0) && (t >= 0.0) && (s + t <= 1.0) ); 77 | } 78 | 79 | /** 80 | * Is Not a number? 81 | * Note: NaN is the only JavaScript value that is treated as unequal to itself 82 | * @param val 83 | * @returns {boolean} 84 | */ 85 | function isNaN(val) 86 | { 87 | return val !== val; 88 | } 89 | 90 | /** 91 | * Calculates crossProduct of two 2D vectors / points. 92 | * 93 | * @param p1 first point used as vector 94 | * @param p2 second point used as vector 95 | * @return crossProduct of vectors 96 | */ 97 | function crossProduct(p1, p2) 98 | { 99 | return (p1.x * p2.y - p1.y * p2.x); 100 | } 101 | 102 | /** 103 | * Converts RGB to XY and Brightness 104 | * @param r integer 0-255 105 | * @param g integer 0-255 106 | * @param b integer 0-255 107 | * @param model string 108 | */ 109 | 110 | function RGBtoXY(red, green, blue, model) 111 | { 112 | 113 | if(red > 1 || green > 1 || blue > 1) 114 | { 115 | red /= 255; 116 | green /= 255; 117 | blue /= 255; 118 | } 119 | 120 | red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92); 121 | green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92); 122 | blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92); 123 | 124 | var X = red * 0.649926 + green * 0.103455 + blue * 0.197109; 125 | var Y = red * 0.234327 + green * 0.743075 + blue * 0.022598; 126 | var Z = red * 0.0000000 + green * 0.053077 + blue * 1.035763; 127 | 128 | var cx = X / (X + Y + Z); 129 | var cy = Y / (X + Y + Z); 130 | 131 | if (isNaN(cx)) { 132 | cx = 0.0; 133 | } 134 | 135 | if (isNaN(cy)) { 136 | cy = 0.0; 137 | } 138 | 139 | //Check if the given XY value is within the colourreach of our lamps. 140 | var xyPoint = XYPoint(cx, cy); 141 | 142 | var colorPoints = colorPointsForModel(model); 143 | 144 | var inReachOfLamps = checkPointInLampsReach(xyPoint, colorPoints); 145 | 146 | if (!inReachOfLamps) 147 | { 148 | //It seems the colour is out of reach 149 | //let's find the closest colour we can produce with our lamp and send this XY value out. 150 | 151 | //Find the closest point on each line in the triangle. 152 | 153 | var pAB =getClosestPointToPoints( colorPoints[cptRED], colorPoints[cptGREEN], xyPoint); 154 | 155 | var pAC =getClosestPointToPoints( colorPoints[cptBLUE], colorPoints[cptRED], xyPoint); 156 | 157 | var pBC =getClosestPointToPoints( colorPoints[cptGREEN], colorPoints[cptBLUE], xyPoint); 158 | 159 | //Get the distances per point and see which point is closer to our Point. 160 | var dAB = getDistanceBetweenTwoPoints(xyPoint, pAB); 161 | var dAC = getDistanceBetweenTwoPoints(xyPoint, pAC); 162 | var dBC = getDistanceBetweenTwoPoints(xyPoint, pBC); 163 | 164 | var lowest = dAB; 165 | 166 | var closestPoint = pAB; 167 | 168 | if (dAC < lowest) { 169 | lowest = dAC; 170 | closestPoint = pAC; 171 | } 172 | if (dBC < lowest) { 173 | lowest = dBC; 174 | closestPoint = pBC; 175 | } 176 | 177 | //Change the xy value to a value which is within the reach of the lamp. 178 | cx = closestPoint.x; 179 | cy = closestPoint.y; 180 | } 181 | 182 | return { 183 | x: cx, 184 | y: cy, 185 | bri: Y 186 | }; 187 | } 188 | 189 | /** 190 | * Find the closest point on a line. 191 | * This point will be within reach of the lamp. 192 | * 193 | * @param A the point where the line starts 194 | * @param B the point where the line ends 195 | * @param P the point which is close to a line. 196 | * @return the point which is on the line. 197 | */ 198 | function getClosestPointToPoints(A,B,P) 199 | { 200 | var AP = XYPoint(P.x - A.x, P.y - A.y); 201 | 202 | var AB = XYPoint(B.x - A.x, B.y - A.y); 203 | 204 | var ab2 = AB.x*AB.x + AB.y*AB.y; 205 | 206 | var ap_ab = AP.x*AB.x + AP.y*AB.y; 207 | 208 | var t = ap_ab / ab2; 209 | 210 | if (t < 0.0) { 211 | t = 0.0; 212 | } 213 | else if (t > 1.0) { 214 | t = 1.0; 215 | } 216 | 217 | return XYPoint(A.x + AB.x * t, A.y + AB.y * t); 218 | } 219 | 220 | /** 221 | * Find the distance between two points. 222 | * 223 | * @param one 224 | * @param two 225 | * @return the distance between point one and two 226 | */ 227 | // + (float)getDistanceBetweenTwoPoints:(CGPoint)one point2:(CGPoint)two { 228 | function getDistanceBetweenTwoPoints(one, two) 229 | { 230 | var dx = one.x - two.x; // horizontal difference 231 | var dy = one.y - two.y; // vertical difference 232 | return Math.sqrt(dx * dx + dy * dy); 233 | } 234 | 235 | 236 | function XYtoRGB(x, y, brightness, model) 237 | { 238 | var xy = XYPoint(x,y); 239 | 240 | var colorPoints = colorPointsForModel(model); 241 | 242 | var inReachOfLamps = checkPointInLampsReach(xy, colorPoints); 243 | 244 | console.log('inReachOfLamps',inReachOfLamps); 245 | if (!inReachOfLamps) { 246 | //It seems the colour is out of reach 247 | //let's find the closest colour we can produce with our lamp and send this XY value out. 248 | 249 | //Find the closest point on each line in the triangle. 250 | var pAB = getClosestPointToPoints( colorPoints[cptRED], colorPoints[cptGREEN], xy); 251 | var pAC = getClosestPointToPoints( colorPoints[cptBLUE], colorPoints[cptRED], xy); 252 | var pBC = getClosestPointToPoints( colorPoints[cptGREEN], colorPoints[cptBLUE], xy); 253 | 254 | //Get the distances per point and see which point is closer to our Point. 255 | var dAB = getDistanceBetweenTwoPoints(xy, pAB); 256 | var dAC = getDistanceBetweenTwoPoints(xy, pAC); 257 | var dBC = getDistanceBetweenTwoPoints(xy, pBC); 258 | 259 | var lowest = dAB; 260 | var closestPoint = pAB; 261 | 262 | if (dAC < lowest) { 263 | lowest = dAC; 264 | closestPoint = pAC; 265 | } 266 | if (dBC < lowest) { 267 | lowest = dBC; 268 | closestPoint = pBC; 269 | } 270 | 271 | //Change the xy value to a value which is within the reach of the lamp. 272 | xy.x = closestPoint.x; 273 | xy.y = closestPoint.y; 274 | } 275 | 276 | var x = xy.x; 277 | var y = xy.y; 278 | var z = 1.0 - x - y; 279 | 280 | var Y = brightness; 281 | var X = (Y / y) * x; 282 | var Z = (Y / y) * z; 283 | 284 | var r = X * 3.2410 - Y * 1.5374 - Z * 0.4986; 285 | var g = -X * 0.9692 + Y * 1.8760 + Z * 0.0416; 286 | var b = X * 0.0556 - Y * 0.2040 + Z * 1.0570; 287 | 288 | r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055; 289 | g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055; 290 | b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055; 291 | 292 | if(r < 0) 293 | { 294 | r = 0; 295 | } 296 | if(g < 0) 297 | { 298 | g = 0; 299 | } 300 | if(b < 0) 301 | { 302 | b = 0; 303 | } 304 | 305 | if(r > 1 || g > 1 || b > 1) 306 | { 307 | var max = Math.max(r,g,b); 308 | r /= max; 309 | g /= max; 310 | b /= max; 311 | } 312 | 313 | r *= 255; 314 | g *= 255; 315 | b *= 255; 316 | 317 | r = Math.round(r); 318 | g = Math.round(g); 319 | b = Math.round(b); 320 | 321 | return { 322 | r: r, 323 | g: g, 324 | b: b 325 | }; 326 | 327 | } 328 | 329 | 330 | function rgb2hsv (r,g,b) { 331 | var computedH = 0; 332 | var computedS = 0; 333 | var computedV = 0; 334 | 335 | //remove spaces from input RGB values, convert to int 336 | var r = parseInt( (''+r).replace(/\s/g,''),10 ); 337 | var g = parseInt( (''+g).replace(/\s/g,''),10 ); 338 | var b = parseInt( (''+b).replace(/\s/g,''),10 ); 339 | 340 | if ( r==null || g==null || b==null || 341 | isNaN(r) || isNaN(g)|| isNaN(b) ) { 342 | alert ('Please enter numeric RGB values!'); 343 | return; 344 | } 345 | if (r<0 || g<0 || b<0 || r>255 || g>255 || b>255) { 346 | alert ('RGB values must be in the range 0 to 255.'); 347 | return; 348 | } 349 | r=r/255; g=g/255; b=b/255; 350 | var minRGB = Math.min(r,Math.min(g,b)); 351 | var maxRGB = Math.max(r,Math.max(g,b)); 352 | 353 | // Black-gray-white 354 | if (minRGB==maxRGB) { 355 | computedV = minRGB; 356 | return [0,0,computedV]; 357 | } 358 | 359 | // Colors other than black-gray-white: 360 | var d = (r==minRGB) ? g-b : ((b==minRGB) ? r-g : b-r); 361 | var h = (r==minRGB) ? 3 : ((b==minRGB) ? 1 : 5); 362 | computedH = 60*(h - d/(maxRGB - minRGB)); 363 | computedS = (maxRGB - minRGB)/maxRGB; 364 | computedV = maxRGB; 365 | return [computedH,computedS,computedV]; 366 | } 367 | -------------------------------------------------------------------------------- /js/jquery.flatWeatherPlugin.min.js: -------------------------------------------------------------------------------- 1 | //flatWeatherJqueryPlugin min 2 | //2014-10-21 3 | (function(e,t,n,r){function u(t,n){this.element=t;this.settings=e.extend({},s,n);if(!this.settings.units||this.settings.units=="auto"){this.settings.units=["united states","usa","united states of america","us"].indexOf(this.settings.country.toLowerCase())==-1?"metric":"imperial"}this.settings.forecast=Math.min(this.settings.forecast,5);this._name=i;this.once=false;this.init()}function a(e,t){var n={};if(t.api=="openweathermap"){if(e[0].name!=""){n.location=e[0].name+", "+e[0].sys.country;n.city=e[0].name}else if(e[1].city.name!=""){n.location=e[1].city.name+", "+e[1].city.country;n.city=e[1].city.name}else{n.location=t.location+", "+t.country;n.city=t.location}n.today={};n.today.temp={};n.today.temp.now=Math.round(e[0].main.temp);n.today.temp.min=Math.round(e[0].main.temp_min);n.today.temp.max=Math.round(e[0].main.temp_max);n.today.desc=e[0].weather[0].description.capitalize();n.today.code=e[0].weather[0].id;n.today.wind=e[0].wind;n.today.humidity=e[0].main.humidity;n.today.pressure=e[0].main.pressure;n.today.sunrise=l(e[0].sys.sunrise);n.today.sunset=l(e[0].sys.sunset);n.today.day=f(new Date);n.forecast=[];for(var r=0;r=12?"PM":"AM";t=t%12;t=t?t:12;n=n<10?"0"+n:n;var i=t+":"+n+" "+r;return i}function c(e,t,n){var r=t;if(r>=0&&r<=11.25||r>348.75&&r<=360){r="N"}else if(r>11.25&&r<=33.75){r="NNE"}else if(r>33.75&&r<=56.25){r="NE"}else if(r>56.25&&r<=78.75){r="ENE"}else if(r>78.75&&r<=101.25){r="E"}else if(r>101.25&&r<=123.75){r="ESE"}else if(r>123.75&&r<=146.25){r="SE"}else if(r>146.25&&r<=168.75){r="SSE"}else if(r>168.75&&r<=191.25){r="S"}else if(r>191.25&&r<=213.75){r="SSW"}else if(r>213.75&&r<=236.25){r="SW"}else if(r>236.25&&r<=258.75){r="WSW"}else if(r>258.75&&r<=281.25){r="W"}else if(r>281.25&&r<=303.75){r="WNW"}else if(r>303.75&&r<=326.25){r="NW"}else if(r>326.25&&r<=348.75){r="NNW"}var i=n=="metric"?"km/h":"mph";return r+" "+e+" "+i}var i="flatWeatherPlugin";var s={location:"Waterloo, ON",country:"Canada",displayCityNameOnly:false,api:"openweathermap",forecast:5,apikey:"",view:"full",render:true,loadingAnimation:true};var o={openweathermap:["http://api.openweathermap.org/data/2.5/weather","http://api.openweathermap.org/data/2.5/forecast/daily"],yahoo:["https://query.yahooapis.com/v1/public/yql"]};e.extend(u.prototype,{init:function(){if(this.settings.render){if(this.settings.loadingAnimation&&!this.once){this.loading=e("
",{id:"flatWeatherLoading","class":"wi loading"});this.loading.appendTo(this.element)}this.fetchWeather().then(this.render,this.error)}this.once=true},fetchWeather:function(){var t=this;var n=new e.Deferred;var r=[];var i=this.settings.location+" "+this.settings.country;if(this.settings.api=="openweathermap"){var s={};s.q=i;s.units=this.settings.units;if(this.settings.apikey)s.appid=this.settings.apikey;r.push(s);s.cnt=this.settings.forecast+1;r.push(s)}else if(this.settings.api=="yahoo"){var u=this.settings.units=="metric"?"c":"f";var s={};s.q="select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='"+i+"') AND u='"+u+"'";s.env="store://datatables.org/alltableswithkeys";s.format="json";r.push(s)}var f=[];for(var l=0;l1){r=r.map(function(e){return e[0]})}else{r=r[0]}if(t.settings.api=="openweathermap"&&!(r[0].cod=="200"&&r[1].cod=="200")){console.log("Error interacting with the openweathermap api see error object below for details:");console.log(r);n.reject(r,t)}else if(t.settings.api=="yahoo"&&(r.query.count==0||r.query.results.channel.description=="Yahoo! Weather Error")){console.log("Error interacting with the yahoo api see error object below for details:");console.log(r);n.reject(r,t)}else{var i=a(r,t.settings);t._weather=i;e.data(t.element,"weather",i);n.resolve(i,t)}}).fail(function(e){console.log("fail");n.reject(e,t)});return n},error:function(t,n){if(!n){n=this}if(n.settings.loadingAnimation&&n.settings.render){n.loading.remove()}if(n.settings.api=="openweathermap"){if(t[0].cod!="200"){t=t[0].cod+" "+t[0].message+". See console log for details."}else{t=t[1]+" See console log for details."}}else if(n.settings.api=="yahoo"){if(t.query.results){t="Error: "+t.query.results.channel.item.title+". See console log for details."}else{t="Error: no results. See console log for details."}}var r=e("
",{"class":"flatWeatherPlugin "+n.settings.view});e("

").text("Error").appendTo(r);e("

").text(t).appendTo(r);e(n.element).html(r);return e(n.element)},render:function(t,n){if(!n){n=this;t=this._weather}var r=n.settings.units=="metric"?"°C":"°F";if(n.settings.loadingAnimation&&n.settings.render){n.loading.remove()}var i=e("

",{"class":"flatWeatherPlugin "+n.settings.view});if(n.settings.displayCityNameOnly){e("

").text(t.city).appendTo(i)}else{e("

").text(t.location).appendTo(i)}if(n.settings.view!="forecast"){var s=e("
",{"class":"wiToday"});var o=e("
",{"class":"wiIconGroup"});e("
",{"class":"wi "+"wi"+t.today.code}).appendTo(o);e("

",{"class":"wiText"}).text(t.today.desc).appendTo(o);o.appendTo(s);e("

",{"class":"wiTemperature"}).html(t.today.temp.now+""+r+"").appendTo(s);s.appendTo(i)}if(n.settings.view!="simple"){var u=e("

",{"class":"wiDetail"});if(n.settings.view=="partial"){e("

",{"class":"wiDay"}).text(t.today.day).appendTo(s)}if(n.settings.view!="partial"){if(n.settings.view!="today"){e("

",{"class":"wiDay"}).text(t.today.day).appendTo(u)}var a=e("

    ",{"class":"astronomy"}).appendTo(u);e("
  • ",{"class":"wi sunrise"}).text(t.today.sunrise).appendTo(a);e("
  • ",{"class":"wi sunset"}).text(t.today.sunset).appendTo(a);var f=e("
      ",{"class":"temp"}).appendTo(u);e("
    • ").html("Max : "+t.today.temp.max+""+r+"").appendTo(f);e("
    • ").html("Min : "+t.today.temp.min+""+r+"").appendTo(f);var l=e("
        ",{"class":"atmosphere"}).appendTo(u);e("
      • ",{"class":"wi humidity"}).text(t.today.humidity).appendTo(l);e("
      • ",{"class":"wi pressure"}).text(t.today.pressure).appendTo(l);e("
      • ",{"class":"wi wind"}).text(c(t.today.wind.speed,t.today.wind.deg,n.settings.units)).appendTo(l);u.appendTo(s)}if(n.settings.view!="today"||n.settings.view=="forecast"){var h=e("
          ",{"class":"wiForecasts"});var p=n.settings.view=="forecast"?0:1;for(var d=p;d",{"class":"wiDay"}).html(""+t.forecast[d].day+"").appendTo(h);var m=e("
            ",{"class":"wiForecast"}).appendTo(v);e("
          • ",{"class":"wi "+"wi"+t.forecast[d].code}).appendTo(m);e("
          • ",{"class":"wiMax"}).html(t.forecast[d].temp.max+""+r+"").appendTo(m);e("
          • ",{"class":"wiMin"}).html(t.forecast[d].temp.min+""+r+"").appendTo(m)}h.appendTo(i)}}e(n.element).html(i);return e(n.element)}});e.fn[i]=function(t,n){if(e.isFunction(u.prototype[t])){return this.data("plugin_"+i)[t](n)}return this.each(function(){if(!e.data(this,"plugin_"+i)){var n=new u(this,t);return e.data(this,"plugin_"+i,n)}})};String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1)};})(jQuery,window,document) -------------------------------------------------------------------------------- /js/jquery.stayInWebApp.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery stayInWebApp Plugin 3 | * version: 0.4 (2012-06-19) 4 | */ 5 | (function($){$.extend({stayInWebApp:function(b){"standalone"in window.navigator&&window.navigator.standalone&&(b||(b="a"),$("body").delegate(b,"click",function(b){if($(this).attr("target")==void 0||$(this).attr("target")==""||$(this).attr("target")=="_self"){var c=$(this).attr("href");if(!c.match(/^http(s?)/g))b.preventDefault(),self.location=c}}))}})})(jQuery); -------------------------------------------------------------------------------- /js/jquery.vticker.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Tadas Juozapaitis ( kasp3rito@gmail.com ) 3 | * 4 | * Modifed by Zazar: 5 | * 24.06.2011 - Corrected pausing issue with multiple instances 6 | * 7 | */ 8 | 9 | (function($){ 10 | 11 | $.fn.vTicker = function(options) { 12 | var defaults = { 13 | speed: 700, 14 | pause: 4000, 15 | showItems: 3, 16 | animation: '', 17 | mousePause: true, 18 | isPaused: false 19 | }; 20 | 21 | var options = $.extend(defaults, options); 22 | 23 | moveUp = function(obj2, height, paused){ 24 | if(paused) return; 25 | 26 | var obj = obj2.children('ul'); 27 | 28 | first = obj.children('li:first').clone(true); 29 | 30 | obj.animate({top: '-=' + height + 'px'}, options.speed, function() { 31 | $(this).children('li:first').remove(); 32 | $(this).css('top', '0px'); 33 | }); 34 | 35 | if(options.animation == 'fade') { 36 | obj.children('li:first').fadeOut(options.speed); 37 | obj.children('li:last').hide().fadeIn(options.speed); 38 | } 39 | 40 | first.appendTo(obj); 41 | }; 42 | 43 | return this.each(function() { 44 | var obj = $(this); 45 | var maxHeight = 0; 46 | var itempause = options.isPaused; 47 | 48 | obj.css({overflow: 'hidden', position: 'relative'}) 49 | .children('ul').css({position: 'absolute', margin: 0, padding: 0}) 50 | .children('li').css({margin: 0, padding: 0}); 51 | 52 | obj.children('ul').children('li').each(function(){ 53 | 54 | if($(this).height() > maxHeight) { 55 | maxHeight = $(this).height(); 56 | } 57 | }); 58 | 59 | obj.children('ul').children('li').each(function() { 60 | $(this).height(maxHeight); 61 | }); 62 | 63 | obj.height(maxHeight * options.showItems); 64 | 65 | var interval = setInterval(function(){ moveUp(obj, maxHeight, itempause); }, options.pause); 66 | 67 | if (options.mousePause) 68 | { 69 | obj.bind("mouseenter",function() { 70 | itempause = true; 71 | }).bind("mouseleave",function() { 72 | itempause = false; 73 | }); 74 | } 75 | }); 76 | }; 77 | })(jQuery); -------------------------------------------------------------------------------- /js/jquery.zrssfeed.min.js: -------------------------------------------------------------------------------- 1 | (function(l){l.fn.rssfeed=function(b,h,w){h=l.extend({limit:10,offset:1,header:!0,titletag:"h4",date:!0,dateformat:"datetime",content:!0,snippet:!0,media:!0,showerror:!0,errormsg:"",key:null,ssl:!1,linktarget:"_self",linkredirect:"",linkcontent:!1,sort:"",sortasc:!0,historical:!1},h);return this.each(function(z,q){var u=l(q),f="";h.ssl&&(f="s");u.hasClass("rssFeed")||u.addClass("rssFeed");if(null==b)return!1;0'+b.title+"
");m+='
    ';for(f=e.offset;fa?a="< 1 min":(3600>a?(a=Math.round(a/60)-1,c="min"):86400>a?(a=Math.round(a/3600)-1,c="hour"):604800>a?(a=Math.round(a/86400)-1,c="day"):(a=Math.round(a/604800)-1,c="week"),1'+g.title+"";e.date&&a&&(j[d].html+="
    "+a+"
    ");e.content&&(g=e.snippet&&""!=g.contentSnippet?g.contentSnippet:g.content,e.linkcontent&&(g=''+g+""),j[d].html+="

    "+g+"

    ");if(e.media&&0'+r.split("/").pop()+" ("+s+", ",s=Math.floor(Math.log(t)/Math.log(1024)),t=(t/Math.pow(1024,Math.floor(s))).toFixed(2)+" "+"bytes kb MB GB TB PB".split(" ")[s];c.html=y+(r+t+")")}j[d].html+="
"}}e.sort&&j.sort(function(a,c){if(e.sortasc)var b= 7 | a.sort,d=c.sort;else b=c.sort,d=a.sort;if("date"==e.sort)return new Date(b)-new Date(d);b=b.toLowerCase();d=d.toLowerCase();return bd?1:0});l.each(j,function(a){m+='
  • '+j[a].html+"
  • ";v="odd"==v?"even":"odd"});m+="
    ";l(q).html(m);l("a",q).attr("target",e.linktarget)}l.isFunction(w)&&w.call(this,u)}else h.showerror&&(d=""!=h.errormsg?h.errormsg:b.responseDetails),l(q).html('

    '+d+"

    ")})})};var p=function(b){b+="";2>b.length&& 8 | (b="0"+b);return b},x=function(b){return"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ")[b]}})(jQuery); -------------------------------------------------------------------------------- /js/lightbox.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lightbox v2.8.1 3 | * by Lokesh Dhakar 4 | * 5 | * More info: 6 | * http://lokeshdhakar.com/projects/lightbox2/ 7 | * 8 | * Copyright 2007, 2015 Lokesh Dhakar 9 | * Released under the MIT license 10 | * https://github.com/lokesh/lightbox2/blob/master/LICENSE 11 | */ 12 | 13 | // Uses Node, AMD or browser globals to create a module. 14 | (function (root, factory) { 15 | if (typeof define === 'function' && define.amd) { 16 | // AMD. Register as an anonymous module. 17 | define(['jquery'], factory); 18 | } else if (typeof exports === 'object') { 19 | // Node. Does not work with strict CommonJS, but 20 | // only CommonJS-like environments that support module.exports, 21 | // like Node. 22 | module.exports = factory(require('jquery')); 23 | } else { 24 | // Browser globals (root is window) 25 | root.lightbox = factory(root.jQuery); 26 | } 27 | }(this, function ($) { 28 | 29 | function Lightbox(options) { 30 | this.album = []; 31 | this.currentImageIndex = void 0; 32 | this.init(); 33 | 34 | // options 35 | this.options = $.extend({}, this.constructor.defaults); 36 | this.option(options); 37 | } 38 | 39 | // Descriptions of all options available on the demo site: 40 | // http://lokeshdhakar.com/projects/lightbox2/index.html#options 41 | Lightbox.defaults = { 42 | albumLabel: 'Image %1 of %2', 43 | alwaysShowNavOnTouchDevices: false, 44 | fadeDuration: 500, 45 | fitImagesInViewport: true, 46 | // maxWidth: 800, 47 | // maxHeight: 600, 48 | positionFromTop: 50, 49 | resizeDuration: 700, 50 | showImageNumberLabel: true, 51 | wrapAround: false 52 | }; 53 | 54 | Lightbox.prototype.option = function(options) { 55 | $.extend(this.options, options); 56 | }; 57 | 58 | Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) { 59 | return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages); 60 | }; 61 | 62 | Lightbox.prototype.init = function() { 63 | this.enable(); 64 | this.build(); 65 | }; 66 | 67 | // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes 68 | // that contain 'lightbox'. When these are clicked, start lightbox. 69 | Lightbox.prototype.enable = function() { 70 | var self = this; 71 | $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) { 72 | self.start($(event.currentTarget)); 73 | return false; 74 | }); 75 | }; 76 | 77 | // Build html for the lightbox and the overlay. 78 | // Attach event handlers to the new DOM elements. click click click 79 | Lightbox.prototype.build = function() { 80 | var self = this; 81 | $('
    ').appendTo($('body')); 82 | 83 | // Cache jQuery objects 84 | this.$lightbox = $('#lightbox'); 85 | this.$overlay = $('#lightboxOverlay'); 86 | this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); 87 | this.$container = this.$lightbox.find('.lb-container'); 88 | 89 | // Store css values for future lookup 90 | this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10); 91 | this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10); 92 | this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10); 93 | this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10); 94 | 95 | // Attach event handlers to the newly minted DOM elements 96 | this.$overlay.hide().on('click', function() { 97 | self.end(); 98 | return false; 99 | }); 100 | 101 | this.$lightbox.hide().on('click', function(event) { 102 | if ($(event.target).attr('id') === 'lightbox') { 103 | self.end(); 104 | } 105 | return false; 106 | }); 107 | 108 | this.$outerContainer.on('click', function(event) { 109 | if ($(event.target).attr('id') === 'lightbox') { 110 | self.end(); 111 | } 112 | return false; 113 | }); 114 | 115 | this.$lightbox.find('.lb-prev').on('click', function() { 116 | if (self.currentImageIndex === 0) { 117 | self.changeImage(self.album.length - 1); 118 | } else { 119 | self.changeImage(self.currentImageIndex - 1); 120 | } 121 | return false; 122 | }); 123 | 124 | this.$lightbox.find('.lb-next').on('click', function() { 125 | if (self.currentImageIndex === self.album.length - 1) { 126 | self.changeImage(0); 127 | } else { 128 | self.changeImage(self.currentImageIndex + 1); 129 | } 130 | return false; 131 | }); 132 | 133 | this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { 134 | self.end(); 135 | return false; 136 | }); 137 | }; 138 | 139 | // Show overlay and lightbox. If the image is part of a set, add siblings to album array. 140 | Lightbox.prototype.start = function($link) { 141 | var self = this; 142 | var $window = $(window); 143 | 144 | $window.on('resize', $.proxy(this.sizeOverlay, this)); 145 | 146 | $('select, object, embed').css({ 147 | visibility: 'hidden' 148 | }); 149 | 150 | this.sizeOverlay(); 151 | 152 | this.album = []; 153 | var imageNumber = 0; 154 | 155 | function addToAlbum($link) { 156 | self.album.push({ 157 | link: $link.attr('href'), 158 | title: $link.attr('data-title') || $link.attr('title') 159 | }); 160 | } 161 | 162 | // Support both data-lightbox attribute and rel attribute implementations 163 | var dataLightboxValue = $link.attr('data-lightbox'); 164 | var $links; 165 | 166 | if (dataLightboxValue) { 167 | $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]'); 168 | for (var i = 0; i < $links.length; i = ++i) { 169 | addToAlbum($($links[i])); 170 | if ($links[i] === $link[0]) { 171 | imageNumber = i; 172 | } 173 | } 174 | } else { 175 | if ($link.attr('rel') === 'lightbox') { 176 | // If image is not part of a set 177 | addToAlbum($link); 178 | } else { 179 | // If image is part of a set 180 | $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]'); 181 | for (var j = 0; j < $links.length; j = ++j) { 182 | addToAlbum($($links[j])); 183 | if ($links[j] === $link[0]) { 184 | imageNumber = j; 185 | } 186 | } 187 | } 188 | } 189 | 190 | // Position Lightbox 191 | var top = $window.scrollTop() + this.options.positionFromTop; 192 | var left = $window.scrollLeft(); 193 | this.$lightbox.css({ 194 | top: top + 'px', 195 | left: left + 'px' 196 | }).fadeIn(this.options.fadeDuration); 197 | 198 | this.changeImage(imageNumber); 199 | }; 200 | 201 | // Hide most UI elements in preparation for the animated resizing of the lightbox. 202 | Lightbox.prototype.changeImage = function(imageNumber) { 203 | var self = this; 204 | 205 | this.disableKeyboardNav(); 206 | var $image = this.$lightbox.find('.lb-image'); 207 | 208 | this.$overlay.fadeIn(this.options.fadeDuration); 209 | 210 | $('.lb-loader').fadeIn('slow'); 211 | this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); 212 | 213 | this.$outerContainer.addClass('animating'); 214 | 215 | // When image to show is preloaded, we send the width and height to sizeContainer() 216 | var preloader = new Image(); 217 | preloader.onload = function() { 218 | var $preloader; 219 | var imageHeight; 220 | var imageWidth; 221 | var maxImageHeight; 222 | var maxImageWidth; 223 | var windowHeight; 224 | var windowWidth; 225 | 226 | $image.attr('src', self.album[imageNumber].link); 227 | 228 | $preloader = $(preloader); 229 | 230 | $image.width(preloader.width); 231 | $image.height(preloader.height); 232 | 233 | if (self.options.fitImagesInViewport) { 234 | // Fit image inside the viewport. 235 | // Take into account the border around the image and an additional 10px gutter on each side. 236 | 237 | windowWidth = $(window).width(); 238 | windowHeight = $(window).height(); 239 | maxImageWidth = windowWidth - self.containerLeftPadding - self.containerRightPadding - 20; 240 | maxImageHeight = windowHeight - self.containerTopPadding - self.containerBottomPadding - 120; 241 | 242 | // Check if image size is larger then maxWidth|maxHeight in settings 243 | if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) { 244 | maxImageWidth = self.options.maxWidth; 245 | } 246 | if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) { 247 | maxImageHeight = self.options.maxHeight; 248 | } 249 | 250 | // Is there a fitting issue? 251 | if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) { 252 | if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) { 253 | imageWidth = maxImageWidth; 254 | imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10); 255 | $image.width(imageWidth); 256 | $image.height(imageHeight); 257 | } else { 258 | imageHeight = maxImageHeight; 259 | imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10); 260 | $image.width(imageWidth); 261 | $image.height(imageHeight); 262 | } 263 | } 264 | } 265 | self.sizeContainer($image.width(), $image.height()); 266 | }; 267 | 268 | preloader.src = this.album[imageNumber].link; 269 | this.currentImageIndex = imageNumber; 270 | }; 271 | 272 | // Stretch overlay to fit the viewport 273 | Lightbox.prototype.sizeOverlay = function() { 274 | this.$overlay 275 | .width($(window).width()) 276 | .height($(document).height()); 277 | }; 278 | 279 | // Animate the size of the lightbox to fit the image we are showing 280 | Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) { 281 | var self = this; 282 | 283 | var oldWidth = this.$outerContainer.outerWidth(); 284 | var oldHeight = this.$outerContainer.outerHeight(); 285 | var newWidth = imageWidth + this.containerLeftPadding + this.containerRightPadding; 286 | var newHeight = imageHeight + this.containerTopPadding + this.containerBottomPadding; 287 | 288 | function postResize() { 289 | self.$lightbox.find('.lb-dataContainer').width(newWidth); 290 | self.$lightbox.find('.lb-prevLink').height(newHeight); 291 | self.$lightbox.find('.lb-nextLink').height(newHeight); 292 | self.showImage(); 293 | } 294 | 295 | if (oldWidth !== newWidth || oldHeight !== newHeight) { 296 | this.$outerContainer.animate({ 297 | width: newWidth, 298 | height: newHeight 299 | }, this.options.resizeDuration, 'swing', function() { 300 | postResize(); 301 | }); 302 | } else { 303 | postResize(); 304 | } 305 | }; 306 | 307 | // Display the image and its details and begin preload neighboring images. 308 | Lightbox.prototype.showImage = function() { 309 | this.$lightbox.find('.lb-loader').stop(true).hide(); 310 | this.$lightbox.find('.lb-image').fadeIn('slow'); 311 | 312 | this.updateNav(); 313 | this.updateDetails(); 314 | this.preloadNeighboringImages(); 315 | this.enableKeyboardNav(); 316 | }; 317 | 318 | // Display previous and next navigation if appropriate. 319 | Lightbox.prototype.updateNav = function() { 320 | // Check to see if the browser supports touch events. If so, we take the conservative approach 321 | // and assume that mouse hover events are not supported and always show prev/next navigation 322 | // arrows in image sets. 323 | var alwaysShowNav = false; 324 | try { 325 | document.createEvent('TouchEvent'); 326 | alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false; 327 | } catch (e) {} 328 | 329 | this.$lightbox.find('.lb-nav').show(); 330 | 331 | if (this.album.length > 1) { 332 | if (this.options.wrapAround) { 333 | if (alwaysShowNav) { 334 | this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1'); 335 | } 336 | this.$lightbox.find('.lb-prev, .lb-next').show(); 337 | } else { 338 | if (this.currentImageIndex > 0) { 339 | this.$lightbox.find('.lb-prev').show(); 340 | if (alwaysShowNav) { 341 | this.$lightbox.find('.lb-prev').css('opacity', '1'); 342 | } 343 | } 344 | if (this.currentImageIndex < this.album.length - 1) { 345 | this.$lightbox.find('.lb-next').show(); 346 | if (alwaysShowNav) { 347 | this.$lightbox.find('.lb-next').css('opacity', '1'); 348 | } 349 | } 350 | } 351 | } 352 | }; 353 | 354 | // Display caption, image number, and closing button. 355 | Lightbox.prototype.updateDetails = function() { 356 | var self = this; 357 | 358 | // Enable anchor clicks in the injected caption html. 359 | // Thanks Nate Wright for the fix. @https://github.com/NateWr 360 | if (typeof this.album[this.currentImageIndex].title !== 'undefined' && 361 | this.album[this.currentImageIndex].title !== '') { 362 | this.$lightbox.find('.lb-caption') 363 | .html(this.album[this.currentImageIndex].title) 364 | .fadeIn('fast') 365 | .find('a').on('click', function(event) { 366 | if ($(this).attr('target') !== undefined) { 367 | window.open($(this).attr('href'), $(this).attr('target')); 368 | } else { 369 | location.href = $(this).attr('href'); 370 | } 371 | }); 372 | } 373 | 374 | if (this.album.length > 1 && this.options.showImageNumberLabel) { 375 | var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); 376 | this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast'); 377 | } else { 378 | this.$lightbox.find('.lb-number').hide(); 379 | } 380 | 381 | this.$outerContainer.removeClass('animating'); 382 | 383 | this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() { 384 | return self.sizeOverlay(); 385 | }); 386 | }; 387 | 388 | // Preload previous and next images in set. 389 | Lightbox.prototype.preloadNeighboringImages = function() { 390 | if (this.album.length > this.currentImageIndex + 1) { 391 | var preloadNext = new Image(); 392 | preloadNext.src = this.album[this.currentImageIndex + 1].link; 393 | } 394 | if (this.currentImageIndex > 0) { 395 | var preloadPrev = new Image(); 396 | preloadPrev.src = this.album[this.currentImageIndex - 1].link; 397 | } 398 | }; 399 | 400 | Lightbox.prototype.enableKeyboardNav = function() { 401 | $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this)); 402 | }; 403 | 404 | Lightbox.prototype.disableKeyboardNav = function() { 405 | $(document).off('.keyboard'); 406 | }; 407 | 408 | Lightbox.prototype.keyboardAction = function(event) { 409 | var KEYCODE_ESC = 27; 410 | var KEYCODE_LEFTARROW = 37; 411 | var KEYCODE_RIGHTARROW = 39; 412 | 413 | var keycode = event.keyCode; 414 | var key = String.fromCharCode(keycode).toLowerCase(); 415 | if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) { 416 | this.end(); 417 | } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) { 418 | if (this.currentImageIndex !== 0) { 419 | this.changeImage(this.currentImageIndex - 1); 420 | } else if (this.options.wrapAround && this.album.length > 1) { 421 | this.changeImage(this.album.length - 1); 422 | } 423 | } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) { 424 | if (this.currentImageIndex !== this.album.length - 1) { 425 | this.changeImage(this.currentImageIndex + 1); 426 | } else if (this.options.wrapAround && this.album.length > 1) { 427 | this.changeImage(0); 428 | } 429 | } 430 | }; 431 | 432 | // Closing time. :-( 433 | Lightbox.prototype.end = function() { 434 | this.disableKeyboardNav(); 435 | $(window).off('resize', this.sizeOverlay); 436 | this.$lightbox.fadeOut(this.options.fadeDuration); 437 | this.$overlay.fadeOut(this.options.fadeDuration); 438 | $('select, object, embed').css({ 439 | visibility: 'visible' 440 | }); 441 | }; 442 | 443 | return new Lightbox(); 444 | })); 445 | -------------------------------------------------------------------------------- /js/noty.js: -------------------------------------------------------------------------------- 1 | $.noty.defaults = { 2 | layout: 'top', 3 | theme: 'relax', // or 'relax' 4 | type: 'success', 5 | text: '', // can be html or string 6 | dismissQueue: true, // If you want to use queue feature set this true 7 | template: '
    ', 8 | animation: { 9 | open: { 10 | height: 'toggle' 11 | }, // or Animate.css class names like: 'animated bounceInLeft' 12 | close: { 13 | height: 'toggle' 14 | }, // or Animate.css class names like: 'animated bounceOutLeft' 15 | easing: 'swing', 16 | speed: 1000 // opening & closing animation speed 17 | }, 18 | timeout: true, // delay for closing event. Set false for sticky notifications 19 | force: false, // adds notification to the beginning of queue when set to true 20 | modal: false, 21 | maxVisible: 10, // you can set max visible notification for dismissQueue true option, 22 | killer: false, // for close all notifications before show 23 | closeWith: ['click'], // ['click', 'button', 'hover', 'backdrop'] // backdrop click will close all notifications 24 | callback: { 25 | onShow: function() {}, 26 | afterShow: function() {}, 27 | onClose: function() {}, 28 | afterClose: function() {}, 29 | onCloseClick: function() {}, 30 | }, 31 | buttons: false // an array of buttons 32 | }; -------------------------------------------------------------------------------- /lights.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 52 | 53 | 54 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 116 |
    117 | 118 |
    119 | 120 |
    121 |
    122 | Switches 123 |
    124 | 125 |
    126 | 127 |
    128 |
    129 |
    130 | 131 |
    132 |
    133 |
    134 |
    135 |
    136 | 137 |
    138 |
    139 |
    140 |
    141 |
    142 | 143 |
    144 |
    145 |
    146 |
    147 |
    148 | 149 |
    150 |
    151 |
    152 |
    153 |
    154 | 155 |
    156 |
    157 |
    158 |
    159 |
    160 | 161 |
    162 |
    163 |
    164 |
    165 |
    166 |
    167 |
    168 |
    169 | 170 |
    171 |
    172 | 173 |
    174 |
    175 |
    176 |
    177 | 178 |
    179 | 180 |
    181 |
    182 |
    183 |
    184 |
    185 |
    186 |
    187 | 188 |
    189 |
    190 | 191 |
    192 |
    193 |
    194 |
    195 |
    196 | 197 |
    198 |
    199 |
    200 |
    201 |
    202 |
    203 |
    204 | 205 |
    206 |
    207 | 208 |
    209 |
    210 |
    211 |
    212 |
    213 | 214 |
    215 |
    216 |
    217 |
    218 |
    219 |
    220 | 221 | 222 |
    223 |
    224 |
    225 | 226 |
    227 |
    228 | 229 |
    230 |
    231 |
    232 |
    233 | 234 |
    235 | 236 |
    237 |
    238 |
    239 |
    240 |
    241 |
    242 |
    243 | 244 |
    245 |
    246 | 247 |
    248 |
    249 |
    250 |
    251 |
    252 | 253 |
    254 |
    255 |
    256 |
    257 |
    258 |
    259 |
    260 | 261 |
    262 |
    263 | 264 |
    265 |
    266 |
    267 |
    268 |
    269 | 270 |
    271 |
    272 |
    273 |
    274 |
    275 | 276 |
    277 | 278 | 279 | 280 | 318 | 319 | 320 | -------------------------------------------------------------------------------- /logs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 68 | 69 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 131 |
    132 | 133 |
    134 | 135 |
    136 |
    137 | Switches 138 |
    139 | 140 |
    141 | 142 |
    143 |
    144 |
    145 | 146 |
    147 |
    148 |
    149 |
    150 |
    151 | 152 |
    153 |
    154 |
    155 |
    156 |
    157 | 158 |
    159 |
    160 |
    161 |
    162 |
    163 | 164 |
    165 |
    166 |
    167 |
    168 |
    169 | 170 |
    171 |
    172 |
    173 |
    174 |
    175 | 176 |
    177 |
    178 |
    179 |
    180 |
    181 |
    182 | 183 | 184 |
    185 |
    186 | 187 | Logs 188 |
    189 |
    190 | 191 |
    192 |

    193 |
    194 |
    195 |
    196 | 197 |
    198 | 199 | 210 | 211 | 212 | -------------------------------------------------------------------------------- /news.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 70 | 71 | 72 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 134 |
    135 | 136 |
    137 | 138 |
    139 |
    140 | Switches 141 |
    142 | 143 |
    144 | 145 |
    146 |
    147 |
    148 | 149 |
    150 |
    151 |
    152 |
    153 |
    154 | 155 |
    156 |
    157 |
    158 |
    159 |
    160 | 161 |
    162 |
    163 |
    164 |
    165 |
    166 | 167 |
    168 |
    169 |
    170 |
    171 |
    172 | 173 |
    174 |
    175 |
    176 |
    177 |
    178 | 179 |
    180 |
    181 |
    182 |
    183 |
    184 |
    185 | 186 |
    187 |
    188 | News 189 |
    190 |
    191 | 192 |
    193 |

    194 |
    195 |
    196 |
    197 | 198 |
    199 | 200 | 213 | 214 | 215 | -------------------------------------------------------------------------------- /screenshots/FlatZ_device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/screenshots/FlatZ_device.png -------------------------------------------------------------------------------- /screenshots/FlatZ_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/screenshots/FlatZ_graph.png -------------------------------------------------------------------------------- /screenshots/FlatZ_lichts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/screenshots/FlatZ_lichts.png -------------------------------------------------------------------------------- /screenshots/FlatZ_logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/galadril/FlatZ-Frontpage/eed39bf4ef449798b2b785c52b2d22667fc57570/screenshots/FlatZ_logs.png -------------------------------------------------------------------------------- /settings/settings.js: -------------------------------------------------------------------------------- 1 | // Settings 2 | $.domoticzurl = "http://192.168.1.88:8080";//domoticz url (can be with username:password@ip:port) 3 | $.degreesUnit = " C"; 4 | $.percentUnit = " %"; 5 | $.theme = "main.css"; //possible values: 'main.css', 'mainPurple.css', 'mainLight.css' 6 | $.rss = "http://www.nu.nl/rss/Algemeen"; //rss feed, like: http://feeds.bbci.co.uk/news/rss.xml?edition=int 7 | 8 | $.enableSwitchPopup = true; //false or true 9 | 10 | //Weather settings 11 | $.location = "Krommenie, NH"; //city and region *required 12 | $.country = "Netherlands"; //country *required 13 | $.units = "metric"; //"metric" or "imperial" default: "auto" 14 | 15 | 16 | //Traffic settings 17 | $.Address = 'Krommenie, NL'; 18 | $.ZoomLevel = 10; 19 | 20 | 21 | //Menu settings 22 | $.Graph = true; //false or true 23 | $.News = false; //false or true 24 | $.Log = true; //false or true 25 | $.Lights = true; //false or true 26 | $.Weather = true; //false or true 27 | $.Camera = false; //false or true 28 | $.Traffic = true; //false or true 29 | 30 | 31 | // Dashboard screen User settings >>> 32 | // format: idx, value (from json), replace label, description, chart label, chart color 33 | $.PageDashboardArray = [ 34 | //switches 35 | ['163', 'Data', 'cell1', 'Lampen Uit', 'onbutton'],//onbutton = only push on 36 | ['161', 'Data', 'cell2', 'Theme Logan', 'onbutton'],//button is normal on/off button 37 | ['159', 'Data', 'cell3', 'Theme X-Men', 'onbutton'], 38 | ['162', 'Data', 'cell4', 'Theme Aurora', 'onbutton'], 39 | ['160', 'Data', 'cell5', 'Theme TitanFall', 'onbutton'], 40 | ['158', 'Data', 'cell6', 'Theme SunSet', 'onbutton'], 41 | 42 | // example for scenes & groups 43 | //['1', 'Status', 'cell111', 'Group Example', 'group'], 44 | //['1', 'Status', 'cell111', 'Scene Example', 'scene'], 45 | 46 | 47 | //other devices 48 | ['68', 'Humidity', 'cell7', 'Vocht Badkamer', 'badkamer', '#b2c831'], 49 | ['68', 'LastUpdate', 'cell70', 'Vocht Badkamer'], 50 | 51 | ['14', 'Temp', 'cell8', 'Temperatuur Woonkamer', 'woonkamer', '#2980B9'], 52 | ['14', 'LastUpdate', 'cell80', 'Temperatuur Woonkamer'], 53 | 54 | ['58', 'Usage', 'cell9', 'Zonnepanelen (Watt)'], 55 | ['58', 'Data', 'cell29', 'Zonnepanelen'], 56 | ['58', 'CounterToday', 'cell39', 'Zonnepanelen'], 57 | ['58', 'LastUpdate', 'cell19', 'Zonnepanelen'], 58 | 59 | ['47', 'Temp', 'cell10', 'Temperatuur Buiten', 'buiten', '#C0382B'], 60 | ['47', 'LastUpdate', 'cell100', 'Temperatuur Buiten'], 61 | 62 | ['53', 'Data', 'cell11', 'SabNZB Status'], 63 | ['57', 'Data', 'cell12', 'Plex Status'], 64 | ['41', 'Status', 'cell13', 'Ventilatie', 'arrow'], 65 | ]; 66 | 67 | 68 | // Switches Sidebar User settings >>> 69 | // format: idx, value (from json), replace label, description, chart label, chart color 70 | $.PageSwitchArray = [ 71 | //switches (left sidebar) 72 | ['163', 'Data', 'cell1', 'Lampen Uit', 'onbutton'],//onbutton = only push on 73 | ['161', 'Data', 'cell2', 'Theme Logan', 'onbutton'],//button is normal on/off button 74 | ['159', 'Data', 'cell3', 'Theme X-Men', 'onbutton'], 75 | ['162', 'Data', 'cell4', 'Theme Aurora', 'onbutton'], 76 | ['160', 'Data', 'cell5', 'Theme TitanFall', 'onbutton'], 77 | ['158', 'Data', 'cell6', 'Theme SunSet', 'onbutton'], 78 | 79 | // example for scenes & groups 80 | //['1', 'Status', 'cell111', 'Group Example', 'group'], 81 | //['1', 'Status', 'cell111', 'Scene Example', 'scene'], 82 | ]; 83 | 84 | 85 | // Graph screen User settings >>> (max 3 on screen) 86 | //format: idx, value (from json), replace label, description, chart label, chart color 87 | $.GraphTemperatureArray = [ 88 | //graph screen (3 fields) 89 | ['58', 'counter&method=1', 'day', 'cell7', 'Zonnepanelen (Watt)', 'graph100', '#b2c831', 'v'], 90 | ['68', 'temp', 'day', 'cell8', 'Vocht Badkamer', 'graph200', '#C0382B', 'hu'], 91 | ['14', 'temp', 'day', 'cell10', 'Temperatuur Woonkamer', 'graph300', '#2980B9', 'te'], 92 | ]; 93 | 94 | 95 | // Light screen User settings >>> 96 | $.LightArray = [ 97 | //format: idx, 'Hue' (color lamp) or 'Dimmer' (for normal dimmer), replace label, description, maxdimlevel 98 | ['113', 'Hue', 'cell7', 'Tafel 1'], 99 | ['110', 'Hue', 'cell8', 'Tafel 2'], 100 | ['107', 'Hue', 'cell10', 'Tafel 3'], 101 | ['109', 'Hue', 'cell11', 'Tafel 4'], 102 | ['111', 'Hue', 'cell12', 'Spot 1 (TV)'], 103 | ['112', 'Hue', 'cell13', 'Spot 1 (Bank)'], 104 | ]; 105 | 106 | 107 | // Camera screen User settings >>> 108 | $.CameraArray = [ 109 | //format: html replace label, camera Image URL, description 110 | ['cell7', 'http://images.opentopia.com/cams/9694/big.jpg', 'Buiten 1'], 111 | ['cell8', 'http://images.opentopia.com/cams/10359/big.jpg', 'Buiten 2'], 112 | ['cell10', 'http://images.opentopia.com/cams/8034/big.jpg', 'Buiten 3'], 113 | ['cell11', 'http://images.opentopia.com/cams/15104/big.jpg', 'Buiten 4'], 114 | ['cell12', 'http://images.opentopia.com/cams/16584/big.jpg', 'Gang'], 115 | ['cell13', 'http://images.opentopia.com/cams/16577/big.jpg', 'Extra'], 116 | ]; 117 | -------------------------------------------------------------------------------- /traffic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 | 34 | 35 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 98 |
    99 | 100 |
    101 | 102 |
    103 |
    104 | Switches 105 |
    106 | 107 |
    108 | 109 |
    110 |
    111 |
    112 | 113 |
    114 |
    115 |
    116 |
    117 |
    118 | 119 |
    120 |
    121 |
    122 |
    123 |
    124 | 125 |
    126 |
    127 |
    128 |
    129 |
    130 | 131 |
    132 |
    133 |
    134 |
    135 |
    136 | 137 |
    138 |
    139 |
    140 |
    141 |
    142 | 143 |
    144 |
    145 |
    146 |
    147 |
    148 |
    149 | 150 | 151 |
    152 |
    153 | Traffic 154 |
    155 | 158 |

    159 |
    160 |
    161 |
    162 | 163 |
    164 | 165 | 166 | 167 | 194 | 195 | 196 | 197 | -------------------------------------------------------------------------------- /weather.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FlatZ Frontpage 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 95 |
    96 | 97 |
    98 | 99 |
    100 |
    101 | Switches 102 |
    103 | 104 |
    105 | 106 |
    107 |
    108 |
    109 | 110 |
    111 |
    112 |
    113 |
    114 |
    115 | 116 |
    117 |
    118 |
    119 |
    120 |
    121 | 122 |
    123 |
    124 |
    125 |
    126 |
    127 | 128 |
    129 |
    130 |
    131 |
    132 |
    133 | 134 |
    135 |
    136 |
    137 |
    138 |
    139 | 140 |
    141 |
    142 |
    143 |
    144 |
    145 |
    146 |
    147 |
    148 | Weather: 149 |
    150 |
    151 |
    152 |
    153 | 154 |
    155 | 156 | 157 | 180 | 181 | 182 | --------------------------------------------------------------------------------