├── fonts ├── hue.eot ├── hue.ttf ├── hue.woff ├── weathericons.eot ├── weathericons.ttf ├── weathericons.woff ├── weathericons.woff2 └── hue.svg ├── img └── motion_sensor.svg ├── display.html ├── README.md ├── css ├── icons.css ├── prydonian.css └── weather-icons.css └── js └── pi.js /fonts/hue.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/hue.eot -------------------------------------------------------------------------------- /fonts/hue.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/hue.ttf -------------------------------------------------------------------------------- /fonts/hue.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/hue.woff -------------------------------------------------------------------------------- /fonts/weathericons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/weathericons.eot -------------------------------------------------------------------------------- /fonts/weathericons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/weathericons.ttf -------------------------------------------------------------------------------- /fonts/weathericons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/weathericons.woff -------------------------------------------------------------------------------- /fonts/weathericons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markduwe/Raspberry-Pi-Clock/HEAD/fonts/weathericons.woff2 -------------------------------------------------------------------------------- /img/motion_sensor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /display.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 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 | 32 |
33 |
34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Raspberry Pi Clock 2 | 3 | A quick and simple Raspberry Pi touchscreen clock with Philips hue, Tado, Dark Sky and Philips TV API controls/data 4 | 5 | This project is designed to run on a Raspberry Pi with a 7" touchscreen (800x480). 6 | 7 | It uses the Philips hue API, DarkSky API, the tadoº API and the JointSpace API. 8 | 9 | * Philips hue docs: https://developers.meethue.com/documentation/getting-started 10 | * DarkSky API docs: https://darksky.net/dev/ 11 | * tadoº API info: http://blog.scphillips.com/posts/2017/01/the-tado-api-v2/ 12 | * JointSpace docs: http://jointspace.sourceforge.net 13 | 14 | ## Philips hue 15 | You'll need to create a user on the hue Debug Tool by following the instructions here: https://developers.meethue.com/documentation/getting-started 16 | Copy the user ID and add it where you see "YOURHUEUSERID". 17 | 18 | Then find your hue groups - you can add as many as you like, but I just wanted to turn all light and bedroom lights on and off as this is a bedside clock). 19 | My bedroom light group is 2, the "all lights" group is 0. 20 | 21 | ## DarkSky 22 | Since I'm in the UK, I use the "uk2" DarkSky API units. 23 | You can choose the following units instead: 24 | * auto: automatically select units based on geographic location 25 | * ca: same as si, except that windSpeed is in kilometres per hour 26 | * uk2: same as si, except that nearestStormDistance and visibility are in miles and windSpeed is in miles per hour 27 | * us: Imperial units (the default) 28 | * si: SI units 29 | 30 | ## tadoº 31 | I use this to get the current internal temperature, have a look at the API docs and you can also add the set temperature and other data if you want. 32 | 33 | ## JointSpace 34 | The documentation should walk you through how to use this. I use the ambilight state to detect if the TV is on - if you don't have an ambilight TV, you can use something else to detect the state of the TV. (I eventually plan on using the ambilight data to change the colour of the hue bulbs, which is why I'm using that). 35 | 36 | The API does not work if the TV if off or on standby, so you could use that instead. 37 | 38 | ### Lastly 39 | This runs on Firefox in kiosk mode. You can find tutorials on the web about how to get the pi to boot into a browser running a local file in kiosk mode with no cursor and turning off screen blanking. 40 | 41 | The screen changes colour from white to black (with red text) between the hours of 10pm-7am. This is changeable or removeable in pi.js. 42 | 43 | At some point, I might also add a control to turn the heating up/down with tadoº. 44 | 45 | I'd also reduce the screen brightness, especially for nighttime - if you're using it as a bedside clock like me. 46 | 47 | After some trial and error, I found this works well for me: 48 | 49 | * SSH into the pi 50 | * sudo nano /sys/class/backlight/rpi_backlight/brightness 51 | * set brightness to 12 (readable during the day and not too bright at night) 52 | 53 | I'm using this touchscreen: https://www.modmypi.com/raspberry-pi/screens-and-displays/raspberry-pi-7-touchscreen-display-official and https://www.modmypi.com/raspberry-pi/cases/7-touchscreen-cases/raspberry-pi-7-touchscreen-display-case-black, so you'll also have to rotate the screen 180º - 54 | 55 | * SSH into the pi 56 | * sudo nano /boot/config.txt 57 | * add lcd_rotate=2 to the file 58 | * save and reboot 59 | 60 | -------------------------------------------------------------------------------- /css/icons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'hue'; 3 | src: url('../fonts/hue.eot?il1n2u'); 4 | src: url('../fonts/hue.eot?il1n2u#iefix') format('embedded-opentype'), 5 | url('../fonts/hue.ttf?il1n2u') format('truetype'), 6 | url('../fonts/hue.woff?il1n2u') format('woff'), 7 | url('../fonts/hue.svg?il1n2u#hue') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | [class^="hue-"], [class*=" hue-"] { 13 | /* use !important to prevent issues with browser extensions that change ../fonts */ 14 | font-family: 'hue' !important; 15 | speak: none; 16 | font-style: normal; 17 | font-weight: normal; 18 | font-variant: normal; 19 | text-transform: none; 20 | line-height: 1; 21 | 22 | /* Better Font Rendering =========== */ 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | } 26 | 27 | .hue-circle-o:before { 28 | content: "\f10c"; 29 | } 30 | .hue-circle:before { 31 | content: "\f111"; 32 | } 33 | .hue-check:before { 34 | content: "\f00c"; 35 | } 36 | .hue-close:before { 37 | content: "\f00d"; 38 | } 39 | .hue-remove:before { 40 | content: "\f00d"; 41 | } 42 | .hue-times:before { 43 | content: "\f00d"; 44 | } 45 | .hue-up:before { 46 | content: "\f077"; 47 | } 48 | .hue-down:before { 49 | content: "\f078"; 50 | } 51 | .hue-off:before { 52 | content: "\f204"; 53 | } 54 | .hue-on:before { 55 | content: "\f205"; 56 | } 57 | .hue-yes:before { 58 | content: "\f234"; 59 | } 60 | .hue-no:before { 61 | content: "\f235"; 62 | } 63 | .hue-filter_1:before { 64 | content: "\e3d0"; 65 | } 66 | .hue-filter_2:before { 67 | content: "\e3d1"; 68 | } 69 | .hue-filter_3:before { 70 | content: "\e3d2"; 71 | } 72 | .hue-filter_4:before { 73 | content: "\e3d4"; 74 | } 75 | .hue-pushlink_BSB002:before { 76 | content: "\e94e"; 77 | } 78 | .hue-bathroom:before { 79 | content: "\e947"; 80 | } 81 | .hue-dining:before { 82 | content: "\e948"; 83 | } 84 | .hue-garden:before { 85 | content: "\e949"; 86 | } 87 | .hue-hallway:before { 88 | content: "\e94a"; 89 | } 90 | .hue-nursery:before { 91 | content: "\e94b"; 92 | } 93 | .hue-office:before { 94 | content: "\e94c"; 95 | } 96 | .hue-toilet:before { 97 | content: "\e94d"; 98 | } 99 | .hue-bedroom:before { 100 | content: "\e900"; 101 | } 102 | .hue-BSB001:before { 103 | content: "\e901"; 104 | } 105 | .hue-BSB002:before { 106 | content: "\e902"; 107 | } 108 | .hue-carport:before { 109 | content: "\e903"; 110 | } 111 | .hue-driveway:before { 112 | content: "\e904"; 113 | } 114 | .hue-frontdoor:before { 115 | content: "\e905"; 116 | } 117 | .hue-garage:before { 118 | content: "\e906"; 119 | } 120 | .hue-gym:before { 121 | content: "\e907"; 122 | } 123 | .hue-HBL003:before { 124 | content: "\e908"; 125 | } 126 | .hue-HEL001:before { 127 | content: "\e909"; 128 | } 129 | .hue-HEL002:before { 130 | content: "\e90a"; 131 | } 132 | .hue-HIL001:before { 133 | content: "\e90b"; 134 | } 135 | .hue-HIL002:before { 136 | content: "\e90c"; 137 | } 138 | .hue-HML001:before { 139 | content: "\e90d"; 140 | } 141 | .hue-HML002:before { 142 | content: "\e90e"; 143 | } 144 | .hue-HML003:before { 145 | content: "\e90f"; 146 | } 147 | .hue-HML004:before { 148 | content: "\e910"; 149 | } 150 | .hue-HML005:before { 151 | content: "\e911"; 152 | } 153 | .hue-HML006:before { 154 | content: "\e912"; 155 | } 156 | .hue-house:before { 157 | content: "\e913"; 158 | } 159 | .hue-kids_bedroom:before { 160 | content: "\e914"; 161 | } 162 | .hue-kitchen:before { 163 | content: "\e915"; 164 | } 165 | .hue-LCT001:before { 166 | content: "\e916"; 167 | } 168 | .hue-LCT002:before { 169 | content: "\e917"; 170 | } 171 | .hue-LCT003:before { 172 | content: "\e918"; 173 | } 174 | .hue-LCT007:before { 175 | content: "\e919"; 176 | } 177 | .hue-LCT010:before { 178 | content: "\e91a"; 179 | } 180 | .hue-LCT011:before { 181 | content: "\e91b"; 182 | } 183 | .hue-LCT014:before { 184 | content: "\e91c"; 185 | } 186 | .hue-LDD001:before { 187 | content: "\e91d"; 188 | } 189 | .hue-LDD002:before { 190 | content: "\e91e"; 191 | } 192 | .hue-LDF001:before { 193 | content: "\e91f"; 194 | } 195 | .hue-LDF002:before { 196 | content: "\e920"; 197 | } 198 | .hue-LDT001:before { 199 | content: "\e921"; 200 | } 201 | .hue-living:before { 202 | content: "\e922"; 203 | } 204 | .hue-LLC006:before { 205 | content: "\e923"; 206 | } 207 | .hue-LLC007:before { 208 | content: "\e924"; 209 | } 210 | .hue-LLC010:before { 211 | content: "\e925"; 212 | } 213 | .hue-LLC011:before { 214 | content: "\e926"; 215 | } 216 | .hue-LLC012:before { 217 | content: "\e927"; 218 | } 219 | .hue-LLC013:before { 220 | content: "\e928"; 221 | } 222 | .hue-LLC020:before { 223 | content: "\e929"; 224 | } 225 | .hue-LST001:before { 226 | content: "\e92a"; 227 | } 228 | .hue-LST002:before { 229 | content: "\e92b"; 230 | } 231 | .hue-LTC001:before { 232 | content: "\e92c"; 233 | } 234 | .hue-LTC002:before { 235 | content: "\e92d"; 236 | } 237 | .hue-LTC003:before { 238 | content: "\e92e"; 239 | } 240 | .hue-LTD001:before { 241 | content: "\e92f"; 242 | } 243 | .hue-LTD002:before { 244 | content: "\e930"; 245 | } 246 | .hue-LTD003:before { 247 | content: "\e931"; 248 | } 249 | .hue-LTF001:before { 250 | content: "\e932"; 251 | } 252 | .hue-LTF002:before { 253 | content: "\e933"; 254 | } 255 | .hue-LTP001:before { 256 | content: "\e934"; 257 | } 258 | .hue-LTP002:before { 259 | content: "\e935"; 260 | } 261 | .hue-LTP003:before { 262 | content: "\e936"; 263 | } 264 | .hue-LTW001:before { 265 | content: "\e937"; 266 | } 267 | .hue-LTW004:before { 268 | content: "\e938"; 269 | } 270 | .hue-LTW010:before { 271 | content: "\e939"; 272 | } 273 | .hue-LTW015:before { 274 | content: "\e93a"; 275 | } 276 | .hue-LWB004:before { 277 | content: "\e93b"; 278 | } 279 | .hue-LWB006:before { 280 | content: "\e93c"; 281 | } 282 | .hue-LWB010:before { 283 | content: "\e93d"; 284 | } 285 | .hue-LWB014:before { 286 | content: "\e93e"; 287 | } 288 | .hue-MWM001:before { 289 | content: "\e93f"; 290 | } 291 | .hue-other:before { 292 | content: "\e940"; 293 | } 294 | .hue-pushlink_BSB001:before { 295 | content: "\e941"; 296 | } 297 | .hue-recreation:before { 298 | content: "\e942"; 299 | } 300 | .hue-RWL021:before { 301 | content: "\e943"; 302 | } 303 | .hue-PHWA01:before { 304 | content: "\e943"; 305 | } 306 | .hue-SML001:before { 307 | content: "\e944"; 308 | } 309 | .hue-PHA_STATE:before { 310 | content: "\e944"; 311 | } 312 | .hue-ZGPSWITCH:before { 313 | content: "\e945"; 314 | } 315 | .hue-terrace:before { 316 | content: "\e946"; 317 | } 318 | 319 | 320 | -------------------------------------------------------------------------------- /js/pi.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | pi.init(); 4 | 5 | $('#buttons').on('click', '#all.alert', function(){ 6 | $.ajax({ 7 | type: 'PUT', 8 | url: urls.group0onoff, 9 | data: '{"on": true, "bri": 100}' 10 | }); 11 | }); 12 | 13 | $('#buttons').on('click', '#all.primary', function(){ 14 | $.ajax({ 15 | type: 'PUT', 16 | url: urls.group0onoff, 17 | data: '{"on": false}' 18 | }); 19 | }); 20 | 21 | $('#buttons').on('click', '#bed.alert', function(){ 22 | $.ajax({ 23 | type: 'PUT', 24 | url: urls.bedonoff, 25 | data: '{"on": true, "bri": 100, "hue":65280}' 26 | }); 27 | 28 | }); 29 | 30 | $('#buttons').on('click', '#bed.primary', function(){ 31 | $.ajax({ 32 | type: 'PUT', 33 | url: urls.bedonoff, 34 | data: '{"on": false}' 35 | }); 36 | $.ajax({ 37 | type: 'PUT', 38 | url: urls.api+'3/state', 39 | data: '{"on": false}' 40 | }); 41 | }); 42 | 43 | $('#tv').on('click', function(){ 44 | $(this).removeClass('primary').addClass('alert'); 45 | $.ajax({ 46 | type: 'POST', 47 | dataType: 'json', 48 | url: urls.tv, 49 | data: '{"key": "Standby"}' 50 | }); 51 | }); 52 | 53 | }); 54 | 55 | var where = { 56 | 'lat': '[YOURLAT]', 57 | 'long': '[YOURLONG]' 58 | } 59 | 60 | var urls = { 61 | 'api': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/lights/', 62 | 'group0onoff': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/groups/0/action', 63 | 'group0state': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/groups/0/', 64 | 'sensor': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/sensors/22', 65 | 'bedonoff': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/groups/6/action', 66 | 'bedstate': 'http://[YOURHUEIP]/api/[YOURHUEUSER]/groups/6/', 67 | 'tado': 'https://my.tado.com/api/v2/homes/[YOURID]/zones/1/state?username=[USERNAME]&password=[PASSWORD]', 68 | 'tv': 'http://[YOURTVIP]/1/input/key', 69 | 'watchtv': 'http://[YOURTVIP]/1/sources/current', 70 | 'tvon': 'http://[YOURTVIP]/1/ambilight/measured', 71 | 'weatherData': 'https://api.darksky.net/forecast/[KEY]/'+where.lat+','+where.long+'?units=uk2&callback=?', 72 | 'sun': 'https://api.sunrise-sunset.org/json?lat='+where.lat+'&lng='+where.long+'&formatted=0&date=today&callback=?' 73 | } 74 | var moons = { 75 | 'new': ' New Moon', 76 | 'waxc1': ' Waxing Crescent', 77 | 'waxc2': ' Waxing Crescent', 78 | 'waxc3': ' Waxing Crescent', 79 | 'waxc4': ' Waxing Crescent', 80 | 'waxc5': ' Waxing Crescent', 81 | 'waxc6': ' Waxing Crescent', 82 | 'quarter1': ' First Quarter', 83 | 'waxg1': ' Waxing Gibbous', 84 | 'waxg2': ' Waxing Gibbous', 85 | 'waxg3': ' Waxing Gibbous', 86 | 'waxg4': ' Waxing Gibbous', 87 | 'waxg5': ' Waxing Gibbous', 88 | 'waxg6': ' Waxing Gibbous', 89 | 'full': ' Full Moon', 90 | 'wang1': ' Waning Gibbous', 91 | 'wang2': ' Waning Gibbous', 92 | 'wang3': ' Waning Gibbous', 93 | 'wang4': ' Waning Gibbous', 94 | 'wang5': ' Waning Gibbous', 95 | 'wang6': ' Waning Gibbous', 96 | 'quarter2': ' Last Quarter', 97 | 'wanc1': ' Waning Crescent', 98 | 'wanc2': ' Waning Crescent', 99 | 'wanc3': ' Waning Crescent', 100 | 'wanc4': ' Waning Crescent', 101 | 'wanc5': ' Waning Crescent', 102 | 'wanc6': ' Waning Crescent', 103 | } 104 | 105 | var pi = { 106 | init: function() { 107 | window.addEventListener('contextmenu', function(e) { e.preventDefault(); }) 108 | pi.time(); 109 | pi.weather(); 110 | pi.tado(); 111 | pi.tvstatus(); 112 | pi.hue(); 113 | setInterval( function() { 114 | pi.hue(); 115 | pi.tvstatus(); 116 | }, 2000); 117 | setInterval( function() { 118 | pi.tado(); 119 | pi.weather(); 120 | }, 3600000); 121 | }, 122 | time: function() { 123 | setInterval( function() { 124 | $('#time').html(moment().format('HH:mm')).attr('datetime', moment().format('HHmm')).append(''+moment().format('dddd Do MMMM, YYYY')+''); 125 | pi.daynight(); 126 | }, 1000); 127 | $.getJSON(urls.sun, function(sun){ 128 | var sunrise = sun.results.sunrise, 129 | sunset = sun.results.sunset; 130 | $('#time').attr('data-sunrise', moment(sunrise).format('HHmm')).attr('data-sunset', moment(sunset).format('HHmm')); 131 | }); 132 | setInterval( function() { 133 | $.getJSON(urls.sun, function(sun){ 134 | var sunrise = sun.results.sunrise, 135 | sunset = sun.results.sunset; 136 | $('#time').attr('data-sunrise', moment(sunrise).format('HHmm')).attr('data-sunset', moment(sunset).format('HHmm')); 137 | }); 138 | }, 21600); 139 | }, 140 | daynight: function() { 141 | if($('#time').attr('datetime') > $('#time').data('sunrise') && $('#time').attr('datetime') < $('#time').data('sunset')) { 142 | $('body').removeClass('night').addClass('day'); 143 | } else { 144 | $('body').removeClass('day').addClass('night'); 145 | } 146 | }, 147 | tvstatus: function() { 148 | $.getJSON(urls.watchtv, function(data){ 149 | 150 | }).done(function() { 151 | $('#tv').addClass('primary').removeClass('alert'); 152 | }).fail(function() { 153 | $('#tv').removeClass('primary').addClass('alert'); 154 | }); 155 | }, 156 | weather: function() { 157 | $.getJSON(urls.weatherData, function(weather){ 158 | 159 | var summary = weather.currently.summary, 160 | summaryIcon = weather.currently.icon, 161 | num = weather.currently.cloudCover, 162 | moon = weather.daily.data[0].moonPhase, 163 | sunrise = weather.daily.data[0].sunriseTime, 164 | sunset = weather.daily.data[0].sunsetTime, 165 | now = weather.hourly.summary, 166 | pred = '', 167 | moonPhase = ''; 168 | if(summaryIcon == 'rain') {summaryIcon = 'wi-rain'}; 169 | if(summaryIcon == 'clear-day') {summaryIcon = 'wi-day-sunny'}; 170 | if(summaryIcon == 'clear-night') {summaryIcon = 'wi-night-clear'}; 171 | if(summaryIcon == 'rain' && $('body').hasClass('day')) {summaryIcon = 'wi-day-showers'}; 172 | if(summaryIcon == 'rain' && $('body').hasClass('night')) {summaryIcon = 'wi-night-alt-showers'}; 173 | if(summaryIcon == 'snow') {summaryIcon = 'wi-snow'}; 174 | if(summaryIcon == 'sleet') {summaryIcon = 'wi-sleet'}; 175 | if(summaryIcon == 'wind') {summaryIcon = 'wi-strong-wind'}; 176 | if(summaryIcon == 'fog') {summaryIcon = 'wi-fog'}; 177 | if(summaryIcon == 'cloudy') {summaryIcon = 'wi-cloudy'}; 178 | if(summaryIcon == 'partly-cloudy-day') {summaryIcon = 'wi-day-cloudy-high'}; 179 | if(summaryIcon == 'partly-cloudy-night') {summaryIcon = 'wi-night-alt-cloudy'}; 180 | if(summaryIcon == 'hail') {summaryIcon = 'wi-day-hail'}; 181 | if(summaryIcon == 'thunderstorm') {summaryIcon = 'wi-thunderstorm'}; 182 | if(summaryIcon == 'tornado') {summaryIcon = 'wi-tornado'}; 183 | if(num == 0) {var text = 'Clear', cIcon = 'wi-clear-day'}; 184 | if(num > 0 && num <= 0.4) {var text = 'Scattered Clouds', cIcon = 'wi-day-cloudy-high'}; 185 | if(num >= 0.41 && num <= 0.75) {var text = 'Broken Clouds', cIcon = 'wi-cloudy'}; 186 | if(num >= 0.76 && num <= 1) {var text = 'Overcast', cIcon = 'wi-day-sunny-overcast'}; 187 | if(moon => 0.99 && moon <= 0.01) {moonPhase = moons.new}; 188 | if(moon > 0.01 && moon < 0.05) {moonPhase = moons.waxc1}; 189 | if(moon > 0.06 && moon < 0.10) {moonPhase = moons.waxc2}; 190 | if(moon > 0.10 && moon < 0.14) {moonPhase = moons.waxc3}; 191 | if(moon > 0.14 && moon < 0.18) {moonPhase = moons.waxc4}; 192 | if(moon > 0.18 && moon < 0.22) {moonPhase = moons.waxc5}; 193 | if(moon > 0.22 && moon < 0.25) {moonPhase = moons.waxc6}; 194 | if(moon == 0.25) {moonPhase = moons.quarter1}; 195 | if(moon > 0.25 && moon < 0.29) {moonPhase = moons.waxg1}; 196 | if(moon >= 0.29 && moon < 0.33) {moonPhase = moons.waxg2}; 197 | if(moon >= 0.33 && moon < 0.37) {moonPhase = moons.waxg3}; 198 | if(moon >= 0.37 && moon < 0.41) {moonPhase = moons.waxg4}; 199 | if(moon >= 0.41 && moon < 0.45) {moonPhase = moons.waxg5}; 200 | if(moon >= 0.45 && moon < 0.49) {moonPhase = moons.waxg6}; 201 | if(moon == 0.5) {moonPhase = moons.full}; 202 | if(moon > 0.5 && moon < 0.54) {moonPhase = moons.wang1}; 203 | if(moon >= 0.54 && moon < 0.58) {moonPhase = moons.wang2}; 204 | if(moon >= 0.58 && moon < 0.62) {moonPhase = moons.wang3}; 205 | if(moon >= 0.62 && moon < 0.66) {moonPhase = moons.wang4}; 206 | if(moon >= 0.66 && moon < 0.70) {moonPhase = moons.wang5}; 207 | if(moon >= 0.70 && moon < 0.75) {moonPhase = moons.wang6}; 208 | if(moon == 0.75) {moonPhase = moons.quarter2}; 209 | if(moon > 0.75 && moon < 0.79) {moonPhase = moons.wanc1}; 210 | if(moon >= 0.79 && moon < 0.83) {moonPhase = moons.wanc2}; 211 | if(moon >= 0.83 && moon < 0.87) {moonPhase = moons.wanc3}; 212 | if(moon >= 0.87 && moon < 0.91) {moonPhase = moons.wanc4}; 213 | if(moon >= 0.91 && moon < 0.95) {moonPhase = moons.wanc5}; 214 | if(moon >= 0.95 && moon < 0.99) {moonPhase = moons.wanc6}; 215 | 216 | pred += '
'+ summary + '
'; 217 | pred += '
'+ now + '
'; 218 | 219 | pred += '
' + weather.currently.temperature+' (Feels like '+weather.currently.apparentTemperature+')
'; 220 | 221 | pred += '
Max: '+weather.daily.data[0].temperatureMax+' | Min: '+weather.daily.data[0].temperatureMin+'
'; 222 | 223 | pred += '
Wind: '+degToCompass(weather.currently.windBearing)+' '+weather.currently.windSpeed+' mph
'; 224 | pred += '
'+ text + '
'; 225 | 226 | if(weather.currently.precipIntensity > 0) { 227 | pred += '
Rain: '+Math.round(weather.currently.precipProbability * 100, 2)+'% '+Math.round(weather.currently.precipIntensity * 10, 2)+'mm/hr '+weather.currently.precipType+'
'; 228 | } else { 229 | pred += '
Rain: '+Math.round(weather.currently.precipProbability * 100, 2)+'%
'; 230 | } 231 | 232 | if(weather.currently.nearestStormDistance > 0) { 233 | pred += '
Nearest rain: '+degToCompass(weather.currently.nearestStormBearing)+' '+weather.currently.nearestStormDistance+' miles
'; 234 | } 235 | 236 | pred += '
Humidity: ' + Math.round(weather.currently.humidity * 100) + '%
'; 237 | 238 | if(exists(weather.daily.data[0].moonPhase)) { 239 | pred += '
'+moonPhase+'
'; 240 | } 241 | 242 | pred += '
'+moment.unix(sunrise).format('HH:mm a')+' | '+moment.unix(sunset).format('HH:mm a')+'
'; 243 | 244 | pred += '
weather data '+moment.unix(weather.currently.time).format('h:mm a')+'
'; 245 | 246 | $('#weather').html(pred); 247 | 248 | }); 249 | }, 250 | tado: function() { 251 | $.getJSON(urls.tado, function(data){ 252 | var current = data.sensorDataPoints.insideTemperature.celsius, 253 | setto = 35, 254 | tpercentage = (current / setto)*100; 255 | $('#tado').html('
tado° ' + current + '
'); 256 | $.getJSON(urls.sensor, function(data){ 257 | var motion = parseFloat(data.state.temperature) / 100, 258 | hpercentage = (motion / setto)*100; 259 | $('#hue').html('
'+ motion.toFixed(2) + '
'); 260 | }); 261 | 262 | }); 263 | }, 264 | hue: function() { 265 | $.getJSON(urls.group0state, function(all){ 266 | 267 | $.getJSON(urls.bedstate, function(bed){ 268 | 269 | if(all.state.all_on == true && all.state.any_on == true && bed.state.all_on == true && bed.state.any_on == true) { 270 | $('#all').addClass('primary').removeClass('alert'); 271 | $('#bed').addClass('primary').removeClass('alert'); 272 | } 273 | if(all.state.all_on == false && all.state.any_on == true && bed.state.all_on == true && bed.state.any_on == true) { 274 | $('#all').addClass('primary').removeClass('alert'); 275 | $('#bed').addClass('primary').removeClass('alert'); 276 | } 277 | if(all.state.all_on == false && all.state.any_on == true && bed.state.all_on == false && bed.state.any_on == true) { 278 | $('#all').addClass('primary').removeClass('alert'); 279 | $('#bed').addClass('primary').removeClass('alert'); 280 | } 281 | if(all.state.all_on == false && all.state.any_on == true && bed.state.all_on == false && bed.state.any_on == false) { 282 | $('#bed').removeClass('primary').addClass('alert'); 283 | $('#all').addClass('primary').removeClass('alert'); 284 | } 285 | if(all.state.all_on == false && all.state.any_on == false) { 286 | $('#all').removeClass('primary').addClass('alert'); 287 | } 288 | if(bed.state.all_on == false && bed.state.any_on == false) { 289 | $('#bed').removeClass('primary').addClass('alert'); 290 | } 291 | 292 | }); 293 | 294 | }); 295 | 296 | } 297 | 298 | } 299 | 300 | function exists(data) { 301 | 302 | if(!data || data==null || data=='undefined' || typeof(data)=='undefined') return false; 303 | else return true; 304 | 305 | } 306 | 307 | function degToCompass(num) { 308 | 309 | var val = Math.floor((num / 22.5) + 0.5); 310 | var arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]; 311 | return arr[(val % 16)]; 312 | 313 | } 314 | -------------------------------------------------------------------------------- /css/prydonian.css: -------------------------------------------------------------------------------- 1 | /* let's start! */ 2 | 3 | :root { 4 | 5 | /* Fonts */ 6 | --font-sans: sans-serif; 7 | --font-serif: serif; 8 | --font-system: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; 9 | --font-monospace: Consolas, "Lucida Console", "DejaVu Sans Mono", Monaco, "Courier New", Courier, monospace; 10 | --font-base: 62.5%; 11 | --font-regular: 1.8rem; 12 | --font-mono: 1.5rem; 13 | --font-large: 2rem; 14 | --font-xlarge: 2.6rem; 15 | --font-xxlarge: 3.6rem; 16 | --font-xxxlarge: 4.6rem; 17 | --font-xxxxlarge: 12.6rem; 18 | --font-small: 1.2rem; 19 | --font-xsmall: 1rem; 20 | --line-height: 1.25; 21 | --weight-light: 100; 22 | --weight-normal: 300; 23 | --weight-book: 500; 24 | --weight-bold: 700; 25 | 26 | /* Colours */ 27 | --color-navy: #001F3F; 28 | --color-blue: #0074D9; 29 | --color-aqua: #7FDBFF; 30 | --color-teal: #39CCCC; 31 | --color-olive: #3D9970; 32 | --color-green: #2ECC40; 33 | --color-darkgreen: #176420; 34 | --color-lime: #01FF70; 35 | --color-yellow: #FFDC00; 36 | --color-orange: #FF851B; 37 | --color-red: #FF4136; 38 | --color-darkred: #7a0600; 39 | --color-maroon: #660000; 40 | --color-fuchsia: #F012BE; 41 | --color-purple: #B10DC9; 42 | --color-white: #FFFFFF; 43 | --color-silver: #DDDDDD; 44 | --color-grey: #AAAAAA; 45 | --color-black: #000000; 46 | --color-dark: #666666; 47 | --color-verydark: #333333; 48 | --color-white: #FFFFFF; 49 | --text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); 50 | 51 | /* Buttons */ 52 | --button-font: inherit; 53 | --button-weight: inherit; 54 | --button-size: var(--font-regular); 55 | --progress-shadow: 1px 0 1px rgba(0,0,0,0.25); 56 | --button-shadow: inset 0 2px 0 rgba(255, 255, 255, .1), inset 0 -2px 0 rgba(0, 0, 0, .1); 57 | --button-shadow-hover: inset 0 5rem 5rem rgba(0, 0, 0, .25), inset 0 -1px 0 rgba(0, 0, 0, .25); 58 | --button-shadow-active: inset 0 2px 5rem rgba(0, 0, 0, .1), inset 0 2px 0 rgba(0, 0, 0, .1); 59 | --button-shadow-hollow: inset 0 0 1px rgba(0, 0, 0, .75); 60 | --button-shadow-hollow-invert: inset 0 0 2px rgba(255,255,255, .75), inset 0 0 2px rgba(255,255,255, .5); 61 | 62 | /* Progress */ 63 | --progress-loading: linear-gradient(-45deg, rgba(255,255,255,0.25) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0.25) 75%, transparent 75%, transparent); 64 | --range-shadow: 1px 1px 1px rgba(0,0,0,0.25); 65 | --range-track-shadow: inset -1px 1px 1px rgba(0, 0, 0, .25); 66 | 67 | /* Code */ 68 | --code-spacing-x: calc(var(--font-regular) * .4); 69 | --code-spacing-y: calc(var(--font-regular) * .2); 70 | 71 | /* Paddings/Margins */ 72 | --pm-zero: 0; 73 | --pm-small: .25rem; 74 | --pm-medium: .5rem; 75 | --pm-large: 1rem; 76 | --pm-xlarge: 1.5rem; 77 | --pm-xxlarge: 2rem; 78 | --pm-xxxlarge: 2.5rem; 79 | 80 | /* Border Radii */ 81 | --border-radius: 0.25rem; 82 | --border-radius-big: 2rem; 83 | 84 | } 85 | *, *:before, *:after { 86 | box-sizing: border-box; 87 | } 88 | html { 89 | font-size: var(--font-base); 90 | } 91 | body { 92 | margin: var(--pm-zero); 93 | font-size: var(--font-regular); 94 | font-family: var(--font-system); 95 | color: var(--color-black); 96 | background: var(--color-white); 97 | line-height: var(--line-height); 98 | font-weight: var(--weight-normal); 99 | } 100 | body.invert { 101 | color: var(--color-white); 102 | background: var(--color-black); 103 | } 104 | i.fa { 105 | font-size: var(--font-regular) !important; 106 | vertical-align: baseline; 107 | } 108 | h1, h2, h3 { 109 | font-weight: var(--weight-bold); 110 | } 111 | h4, h5, h6 { 112 | font-weight: var(--weight-book); 113 | } 114 | h1 { 115 | font-size: var(--font-xxxlarge); 116 | margin: 0 0 calc(var(--font-xxxlarge) * .4) 0; 117 | } 118 | h2 { 119 | font-size: var(--font-xxlarge); 120 | margin: 0 0 calc(var(--font-xxlarge) * .4) 0; 121 | } 122 | h3 { 123 | font-size: var(--font-xlarge); 124 | margin: 0 0 calc(var(--font-xlarge) * .4) 0; 125 | } 126 | h4 { 127 | font-size: var(--font-large); 128 | margin: 0 0 calc(var(--font-large) * .4) 0; 129 | } 130 | h5 { 131 | font-size: var(--font-regular); 132 | margin: 0 0 calc(var(--font-regular) * .4) 0; 133 | } 134 | h6 { 135 | font-size: var(--font-small); 136 | margin: 0 0 calc(var(--font-small) * .4) 0; 137 | } 138 | p { 139 | font-size: var(--font-regular); 140 | margin: 0 0 calc(var(--font-regular) * 0.75) 0; 141 | } 142 | ul, ol { 143 | margin: 0 0 calc(var(--font-regular) * 0.75) 0; 144 | padding: 0 0 0 var(--pm-xxxlarge); 145 | } 146 | a { color: var(--color-blue); } 147 | a:focus, a:hover, a:visited { 148 | color: var(--color-navy); 149 | transition: color 0.2s ease-in-out; 150 | } 151 | strong { 152 | font-weight: var(--weight-bold); 153 | } 154 | small { 155 | font-size: 80%; 156 | } 157 | abbr[title] { 158 | border-bottom: 1px dashed var(--color-grey); 159 | cursor: help; 160 | } 161 | u { 162 | text-decoration: underline; 163 | } 164 | s { 165 | text-decoration: line-through; 166 | } 167 | del { 168 | color: var(--color-red); 169 | } 170 | ins { 171 | color: var(--color-green); 172 | } 173 | kbd { 174 | font-family: var(--font-monospace); 175 | font-size: var(--font-mono); 176 | background: var(--color-dark); 177 | color: var(--color-white); 178 | padding: 0 var(--pm-medium); 179 | border-radius: var(--border-radius); 180 | } 181 | var { 182 | font-style: italic; 183 | } 184 | samp { 185 | font-family: var(--font-monospace); 186 | font-size: var(--font-mono); 187 | } 188 | mark { 189 | padding: 0 var(--pm-medium); 190 | border-radius: var(--border-radius); 191 | } 192 | dl { 193 | margin: var(--pm-zero) var(--pm-zero) var(--pm-large) var(--pm-zero); 194 | } 195 | dt { 196 | font-weight: var(--weight-book); 197 | } 198 | dd { 199 | font-weight: var(--weight-normal); 200 | margin: var(--pm-zero) var(--pm-zero) var(--pm-large) var(--pm-zero); 201 | } 202 | blockquote { 203 | font-size: var(--font-large); 204 | border-left: solid .4rem var(--color-silver); 205 | padding: var(--pm-medium) var(--pm-medium) var(--pm-medium) var(--pm-xlarge); 206 | margin-bottom: 1rem; 207 | margin-left: 0; 208 | } 209 | blockquote cite:before { 210 | content: "- "; 211 | } 212 | blockquote cite { 213 | font-size: var(--font-large); 214 | font-style: italic; 215 | font-weight: var(--weight-light); 216 | display: block; 217 | } 218 | code { 219 | font-family: var(--font-monospace); 220 | font-size: var(--font-mono); 221 | color: var(--color-black); 222 | background: var(--color-silver); 223 | display: inline-block; 224 | border-radius: var(--border-radius); 225 | padding: var(--code-spacing-y) var(--code-spacing-x); 226 | } 227 | pre { 228 | overflow-y: auto; 229 | font-family: var(--font-monospace); 230 | font-size: var(--font-mono); 231 | color: var(--color-black); 232 | background-color: var(--color-silver); 233 | border-radius: var(--border-radius); 234 | padding: var(--pm-large); 235 | margin-top: var(--pm-zero); 236 | margin-bottom: var(--pm-large); 237 | } 238 | .text-right { 239 | text-align: right; 240 | } 241 | .text-left { 242 | text-align: left; 243 | } 244 | .text-center { 245 | text-align: center; 246 | } 247 | .text-justify { 248 | text-align: justify; 249 | } 250 | fieldset { 251 | border: none; 252 | padding: var(--pm-zero); 253 | margin: 0 0 var(--pm-medium) 0; 254 | } 255 | fieldset legend { 256 | display: block; 257 | font-weight: var(--weight-book); 258 | margin: 0 0 var(--pm-medium) 0; 259 | } 260 | .form-fields { 261 | margin: 0 0 var(--pm-medium) 0; 262 | } 263 | .progress { 264 | width: 100%; 265 | margin: 0 auto; 266 | display: block; 267 | border: none; 268 | overflow: hidden; 269 | border-radius: var(--border-radius-big); 270 | background: var(--color-silver); 271 | box-shadow: var(--range-track-shadow); 272 | } 273 | .progress-value { 274 | background-color: var(--color-teal); 275 | color: var(--color-white); 276 | border-radius: var(--border-radius-big); 277 | padding: var(--pm-small); 278 | text-align: center; 279 | font-size: var(--font-small); 280 | box-shadow: var(--progress-shadow); 281 | } 282 | .progress-value.loading { 283 | background-color: var(--color-teal) !important; 284 | background: var(--progress-loading); 285 | background-size: 50px 50px; 286 | cursor: wait; 287 | animation: loading 2.5s linear infinite; 288 | } 289 | .progress-value.loading.primary { 290 | background-color: var(--color-green) !important; 291 | background: var(--progress-loading); 292 | background-size: 50px 50px; 293 | animation: loading 2.5s linear infinite; 294 | } 295 | .progress-value.loading.secondary { 296 | background-color: var(--color-blue) !important; 297 | background: var(--progress-loading); 298 | background-size: 50px 50px; 299 | animation: loading 2.5s linear infinite; 300 | } 301 | .progress-value.loading.alert { 302 | background-color: var(--color-red) !important; 303 | background: var(--progress-loading); 304 | background-size: 50px 50px; 305 | animation: loading 2.5s linear infinite; 306 | } 307 | .progress-value.loading.attention { 308 | background-color: var(--color-orange) !important; 309 | background: var(--progress-loading); 310 | background-size: 50px 50px; 311 | animation: loading 2.5s linear infinite; 312 | } 313 | .progress-value.loading.dark { 314 | background-color: var(--color-dark) !important; 315 | background: var(--progress-loading); 316 | background-size: 50px 50px; 317 | animation: loading 2.5s linear infinite; 318 | } 319 | [class*='loader'] { 320 | position: relative; 321 | top: 40%; 322 | display: inline-block; 323 | margin: 0 auto; 324 | cursor: wait; 325 | text-rendering: optimizeLegibility; 326 | -webkit-font-smoothing: antialiased; 327 | -moz-osx-font-smoothing: grayscale; 328 | } 329 | .loader { 330 | position: relative; 331 | display: block; 332 | margin: 0 auto; 333 | width: 9em; 334 | height: 4em; 335 | } 336 | .loader:before, .loader:after { 337 | content: ''; 338 | left: 0; 339 | position: absolute; 340 | width: 4em; 341 | height: 4em; 342 | border-radius: 50%; 343 | background-color: var(--color-teal); 344 | -webkit-animation: loader 2s infinite ease-in-out; 345 | animation: loader 2s infinite ease-in-out; 346 | box-shadow: 1px 1px 2px rgba(0,0,0,0.2); 347 | } 348 | .loader:after { 349 | -webkit-animation-delay: -1s; 350 | animation-delay: -1s; 351 | background-color: var(--color-green); 352 | box-shadow: 1px 1px 2px rgba(0,0,0,0.2); 353 | } 354 | label { 355 | display: inline-block; 356 | font-size: var(--font-regular); 357 | margin: 0 0 calc(var(--font-regular) * 0.25) 0; 358 | } 359 | input, 360 | input[type="color"], 361 | input[type="date"], 362 | input[type="datetime-local"], 363 | input[type="email"], 364 | input[type="month"], 365 | input[type="number"], 366 | input[type="password"], 367 | input[type="search"], 368 | input[type="tel"], 369 | input[type="text"], 370 | input[type="time"], 371 | input[type="url"], 372 | input[type="week"], 373 | select, 374 | textarea { 375 | color: var(--color-dark); 376 | border: 1px solid var(--color-silver); 377 | padding: var(--pm-medium) var(--pm-large); 378 | font-size: var(--font-regular); 379 | line-height: var(--line-height); 380 | border-radius: var(--border-radius); 381 | width: 100%; 382 | white-space: nowrap; 383 | -moz-appearance: none; 384 | -webkit-appearance: none; 385 | margin: 0 0 var(--pm-small) 0; 386 | } 387 | select { 388 | position: relative; 389 | background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='41px' height='26px' viewBox='0 0 41 26' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cpolygon id='Path-3' fill='%23000000' points='0 5.38215461 19.9830489 25.3652035 40.1398855 5.20836689 34.9315186 0 19.8691842 15.0623344 4.83971338 0.0328636246'%3E%3C/polygon%3E%3C/g%3E%3C/svg%3E%0A"); 390 | background-position: right .5rem center; 391 | background-repeat: no-repeat; 392 | background-size: .75rem; 393 | } 394 | input:focus, select:focus, textarea:focus { 395 | outline: 1px solid var(--color-teal); 396 | } 397 | button, [type="submit"], .button { 398 | width: auto; 399 | display: inline-block; 400 | font-family: var(--button-font); 401 | font-size: var(--button-size); 402 | line-height: 1; 403 | font-weight: var(--button-weight); 404 | background: var(--color-silver); 405 | border: none; 406 | padding: var(--pm-medium) var(--pm-large); 407 | border-radius: var(--border-radius); 408 | box-shadow: var(--button-shadow); 409 | color: var(--color-black); 410 | margin: 0 0 var(--pm-small) 0; 411 | text-decoration: none; 412 | transition: box-shadow, .25s ease-in-out; 413 | } 414 | a.button.primary, 415 | a.button.info, 416 | a.button.alert, 417 | a.button.attention, 418 | a.button.dark { 419 | color: var(--color-white); 420 | } 421 | a.button.secondary { 422 | color: var(--color-dark); 423 | } 424 | .message { 425 | background: var(--color-silver); 426 | padding: var(--pm-xlarge); 427 | border-radius: var(--border-radius); 428 | margin-bottom: var(--pm-large); 429 | position: relative; 430 | } 431 | .message a { 432 | color: var(--color-dark); 433 | } 434 | .message a:hover, .message a:active, .message a:visited { 435 | color: var(--color-black); 436 | } 437 | .badge { 438 | background: var(--color-silver); 439 | padding: var(--pm-zero) calc(var(--pm-medium) * 1.75); 440 | border-radius: var(--border-radius-big); 441 | display: inline-block; 442 | vertical-align: baseline; 443 | line-height: 1; 444 | } 445 | .primary { 446 | background-color: var(--color-green); 447 | color: var(--color-black); 448 | } 449 | .secondary { 450 | background-color: var(--color-aqua); 451 | color: var(--color-black); 452 | } 453 | .info { 454 | background-color: var(--color-teal); 455 | color: var(--color-black); 456 | } 457 | .alert { 458 | background-color: var(--color-red); 459 | color: var(--color-black); 460 | } 461 | .attention { 462 | background-color: var(--color-orange); 463 | color: var(--color-black); 464 | } 465 | .dark { 466 | background-color: var(--color-dark); 467 | color: var(--color-white); 468 | } 469 | .hollow { 470 | background-color: transparent !important; 471 | border: 1px solid var(--color-silver); 472 | box-shadow: none; 473 | } 474 | .invert .hollow { 475 | color: var(--color-silver); 476 | } 477 | .primary.hollow { 478 | border: 1px solid var(--color-green); 479 | color: var(--color-green); 480 | } 481 | .secondary.hollow { 482 | border: 1px solid var(--color-aqua); 483 | color: var(--color-aqua); 484 | } 485 | .info.hollow { 486 | border: 1px solid var(--color-teal); 487 | color: var(--color-teal); 488 | } 489 | .alert.hollow { 490 | border: 1px solid var(--color-red); 491 | color: var(--color-red); 492 | } 493 | .attention.hollow { 494 | border: 1px solid var(--color-orange); 495 | color: var(--color-orange); 496 | } 497 | .dark.hollow { 498 | border: 1px solid var(--color-dark); 499 | color: var(--color-dark); 500 | } 501 | .message.dark a { 502 | color: var(--color-white); 503 | } 504 | .message.primary a, 505 | .message.secondary a, 506 | .message.info a, 507 | .message.alert a, 508 | .message.attention a { 509 | color: var(--color-black); 510 | } 511 | .message.dark a:hover, 512 | .message.dark a:active, 513 | .message.dark a:visited { 514 | color: var(--color-silver); 515 | } 516 | .message.primary a:hover, 517 | .message.primary a:active, 518 | .message.primary a:visited, 519 | .message.secondary a:hover, 520 | .message.secondary a:active, 521 | .message.secondary a:visited, 522 | .message.info a:hover, 523 | .message.info a:active, 524 | .message.info a:visted, 525 | .message.alert a:hover, 526 | .message.alert a:active, 527 | .message.alert a:visited, 528 | .message.attention a:hover, 529 | .message.attention a:active, 530 | .message.attention a:visited, { 531 | color: var(--color-dark); 532 | } 533 | .subtle { 534 | color: var(--color-grey); 535 | font-weight: var(--weight-book); 536 | } 537 | .group { 538 | width: 100%; 539 | display: flex; 540 | margin: var(--pm-large) 0; 541 | } 542 | .group span { 543 | width: auto; 544 | font-family: var(--button-font); 545 | font-size: var(--button-size); 546 | line-height: inherit; 547 | font-weight: var(--button-weight); 548 | background: var(--color-silver); 549 | border: none; 550 | padding: var(--pm-medium) var(--pm-large) 0 var(--pm-large); 551 | border-radius: var(--border-radius); 552 | color: var(--color-black); 553 | margin: 0 0 var(--pm-small) 0; 554 | } 555 | .group button, .group [type="submit"], .group input, .group span, .group select, .group .button { 556 | border-radius: var(--pm-zero); 557 | display: block; 558 | } 559 | .group input { 560 | border-left-width: 0; 561 | } 562 | .group input:first-child, .group .button:first-child { 563 | border-left-width: 1px; 564 | } 565 | .group button:first-child, .group [type="submit"]:first-child, .group input:first-child, .group select:first-child, .group span:first-child, .group .button:first-child { 566 | border-radius: var(--border-radius) 0 0 var(--border-radius); 567 | } 568 | .group button:last-child, .group [type="submit"]:last-child, .group input:last-child, .group select:last-child, .group span:last-child, .group .button:last-child { 569 | border-radius: 0 var(--border-radius) var(--border-radius) 0; 570 | } 571 | .full { 572 | width: 100%; 573 | } 574 | .small, .small:hover, .small:focus, .small:active { 575 | padding: calc(var(--pm-medium) * 0.75) calc(var(--pm-large) * 0.75) !important; 576 | font-size: var(--font-small) !important; 577 | } 578 | .medium, .medium:hover, .medium:focus, .medium:active { 579 | padding: calc(var(--pm-medium) * 2) calc(var(--pm-large) * 2) !important; 580 | } 581 | .big, .big:hover, .big:focus, .big:active { 582 | padding: calc(var(--pm-medium) * 4) calc(var(--pm-xlarge) * 4) !important; 583 | font-size: var(--font-large) !important; 584 | } 585 | input.medium, 586 | input[type="color"].medium, 587 | input[type="date"].medium, 588 | input[type="datetime-local"].medium, 589 | input[type="email"].medium, 590 | input[type="month"].medium, 591 | input[type="number"].medium, 592 | input[type="password"].medium, 593 | input[type="search"].medium, 594 | input[type="tel"].medium, 595 | input[type="text"].medium, 596 | input[type="time"].medium, 597 | input[type="url"].medium, 598 | input[type="week"].medium, 599 | select.medium, 600 | textarea.medium { 601 | padding: calc(var(--pm-medium) * 2) var(--pm-large) !important; 602 | } 603 | input.big, 604 | input[type="color"].big, 605 | input[type="date"].big, 606 | input[type="datetime-local"].big, 607 | input[type="email"].big, 608 | input[type="month"].big, 609 | input[type="number"].big, 610 | input[type="password"].big, 611 | input[type="search"].big, 612 | input[type="tel"].big, 613 | input[type="text"].big, 614 | input[type="time"].big, 615 | input[type="url"].big, 616 | input[type="week"].big, 617 | select.big, 618 | textarea.big { 619 | padding: calc(var(--pm-medium) * 4) var(--pm-large) !important; 620 | } 621 | .loading.big { 622 | border-radius: var(--border-radius-big); 623 | } 624 | input[type="range"] { 625 | -webkit-appearance: none; 626 | width: 100%; 627 | margin: var(--pm-medium) 0; 628 | border: 0; 629 | padding: var(--pm-zero); 630 | } 631 | 632 | input[type="range"]:focus { 633 | outline: none; 634 | } 635 | 636 | input[type="range"]::-webkit-slider-runnable-track { 637 | width: 100%; 638 | height: .5rem; 639 | cursor: pointer; 640 | background: var(--color-silver); 641 | border-radius: var(--border-radius); 642 | border: none; 643 | box-shadow: var(--range-track-shadow); 644 | } 645 | 646 | input[type="range"]::-webkit-slider-thumb { 647 | border: none; 648 | width: 2.5rem; 649 | height: 2.5rem; 650 | border-radius: 50%; 651 | background: var(--color-teal); 652 | cursor: pointer; 653 | -webkit-appearance: none; 654 | margin-top: -1rem; 655 | box-shadow: var(--range-shadow); 656 | } 657 | 658 | input[type="range"]:focus::-webkit-slider-runnable-track { 659 | background: var(--color-silver); 660 | box-shadow: var(--range-track-shadow); 661 | } 662 | 663 | input[type="range"]::-moz-range-track { 664 | width: 100%; 665 | height: .5rem; 666 | cursor: pointer; 667 | background: var(--color-silver); 668 | border-radius: var(--border-radius); 669 | border: none; 670 | box-shadow: var(--range-track-shadow); 671 | } 672 | 673 | input[type="range"]::-moz-range-thumb { 674 | border: none; 675 | height: 2.5rem; 676 | width: 2.5rem; 677 | border-radius: 50%; 678 | background: var(--color-teal); 679 | cursor: pointer; 680 | box-shadow: var(--range-shadow); 681 | } 682 | 683 | input[type="range"]::-ms-track { 684 | width: 100%; 685 | height: .5rem; 686 | cursor: pointer; 687 | background: transparent; 688 | border-color: transparent; 689 | color: transparent; 690 | box-shadow: var(--range-track-shadow); 691 | } 692 | 693 | input[type="range"]::-ms-fill-lower { 694 | background: #2f6ea5; 695 | border: none; 696 | border-radius: var(--border-radius); 697 | } 698 | 699 | input[type="range"]::-ms-fill-upper { 700 | background: var(--color-silver); 701 | border: none; 702 | border-radius: var(--border-radius); 703 | } 704 | 705 | input[type="range"]::-ms-thumb { 706 | border: none; 707 | height: 1.5rem; 708 | width: 1.5rem; 709 | border-radius: 50%; 710 | background: var(--color-teal); 711 | cursor: pointer; 712 | box-shadow: var(--range-shadow); 713 | } 714 | 715 | input[type="range"]:focus::-ms-fill-lower { 716 | background: var(--color-silver); 717 | } 718 | 719 | input[type="range"]:focus::-ms-fill-upper { 720 | background: var(--color-silver); 721 | } 722 | 723 | .info::-moz-progress-bar { 724 | background-color: var(--color-green); 725 | border-radius: var(--border-radius-big); 726 | } 727 | table { 728 | width: 100%; 729 | border-collapse: collapse; 730 | margin-bottom: var(--pm-large); 731 | } 732 | table caption { 733 | caption-side: bottom; 734 | font-size: var(--font-small); 735 | color: var(--color-grey); 736 | text-align: center; 737 | padding-top: var(--pm-small); 738 | } 739 | 740 | table th { 741 | text-align: left; 742 | background: var(--color-silver); 743 | border-bottom: 1px solid var(--color-silver); 744 | padding: var(--pm-medium); 745 | } 746 | 747 | table td { 748 | border-bottom: 1px solid var(--color-silver); 749 | padding: var(--pm-medium); 750 | } 751 | 752 | table.stripe tr:nth-child(odd) td { 753 | background-color: var(--color-silver); 754 | } 755 | 756 | table.border { 757 | border: 1px solid var(--color-silver); 758 | } 759 | 760 | table.border td { 761 | border-style: solid; 762 | border-width: 1px; 763 | border-color: var(--color-silver); 764 | } 765 | 766 | table.hover tbody tr:hover td { 767 | color: var(--color-black); 768 | background-color: var(--color-silver); 769 | } 770 | @-moz-keyframes loading { 771 | 0% { 772 | background-position: 0 0; 773 | } 774 | 100% { 775 | background-position: 50px 50px; 776 | } 777 | } 778 | 779 | @-webkit-keyframes loading { 780 | 0% { 781 | background-position: 0 0; 782 | } 783 | 100% { 784 | background-position: 50px 50px; 785 | } 786 | } 787 | 788 | @-ms-keyframes loading { 789 | 0% { 790 | background-position: 0 0; 791 | } 792 | 100% { 793 | background-position: 50px 50px; 794 | } 795 | } 796 | 797 | @keyframes loading { 798 | 0% { 799 | background-position: 0 0; 800 | } 801 | 100% { 802 | background-position: 50px 50px; 803 | } 804 | } 805 | 806 | @-webkit-keyframes loader { 807 | 0% { 808 | z-index: 1; 809 | -webkit-transform: translate(0, 0); 810 | transform: translate(0, 0); 811 | } 812 | 50% { 813 | z-index: 1; 814 | -webkit-transform: translate(120%, 0); 815 | transform: translate(120%, 0); 816 | } 817 | 50.1% { 818 | z-index: 0; 819 | -webkit-transform: translate(120%, 0); 820 | transform: translate(120%, 0); 821 | } 822 | 100% { 823 | z-index: 0; 824 | -webkit-transform: translate(0, 0); 825 | transform: translate(0, 0); 826 | } 827 | } 828 | 829 | @keyframes loader { 830 | 0% { 831 | z-index: 1; 832 | -webkit-transform: translate(0, 0); 833 | transform: translate(0, 0); 834 | } 835 | 50% { 836 | z-index: 1; 837 | -webkit-transform: translate(120%, 0); 838 | transform: translate(120%, 0); 839 | } 840 | 50.1% { 841 | z-index: 0; 842 | -webkit-transform: translate(120%, 0); 843 | transform: translate(120%, 0); 844 | } 845 | 100% { 846 | z-index: 0; 847 | -webkit-transform: translate(0, 0); 848 | transform: translate(0, 0); 849 | } 850 | } 851 | 852 | #container { 853 | display: flex; 854 | padding: 1.25vh 2vw; 855 | margin: 0 auto; 856 | } 857 | .column { 858 | text-align: center; 859 | align-self: center; 860 | width:50%; 861 | } 862 | h1 { 863 | margin: 0; 864 | font-size: var(--font-xxxxlarge); 865 | } 866 | h1 span { 867 | display: block; 868 | font-size: var(--font-large); 869 | margin: 0; 870 | } 871 | #buttons .group { 872 | width: 100%; 873 | display: flex; 874 | padding: 1.25vh 2vw; 875 | text-align: center; 876 | margin: 0; 877 | } 878 | #buttons .group .button { 879 | width: 33.33333%; 880 | } 881 | .progress-value { 882 | max-width: 100% !important; 883 | } 884 | .night { 885 | background: var(--color-black); 886 | color: var(--color-maroon); 887 | } 888 | .night .progress { 889 | background: var(--color-verydark); 890 | } 891 | .night .progress .alert { 892 | background: var(--color-maroon); 893 | color: var(--color-dark); 894 | } 895 | .night .button.primary { 896 | background-color: transparent !important; 897 | border: 1px solid var(--color-darkgreen); 898 | box-shadow: none; 899 | color: var(--color-darkgreen); 900 | } 901 | .night .button.alert { 902 | background-color: transparent !important; 903 | border: 1px solid var(--color-darkred); 904 | box-shadow: none; 905 | color: var(--color-darkred); 906 | } -------------------------------------------------------------------------------- /css/weather-icons.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Weather Icons 2.0.8 3 | * Updated September 19, 2015 4 | * Weather themed icons for Bootstrap 5 | * Author - Erik Flowers - erik@helloerik.com 6 | * Email: erik@helloerik.com 7 | * Twitter: http://twitter.com/Erik_UX 8 | * ------------------------------------------------------------------------------ 9 | * Maintained at http://erikflowers.github.io/weather-icons 10 | * 11 | * License 12 | * ------------------------------------------------------------------------------ 13 | * - Font licensed under SIL OFL 1.1 - 14 | * http://scripts.sil.org/OFL 15 | * - CSS, SCSS and LESS are licensed under MIT License - 16 | * http://opensource.org/licenses/mit-license.html 17 | * - Documentation licensed under CC BY 3.0 - 18 | * http://creativecommons.org/licenses/by/3.0/ 19 | * - Inspired by and works great as a companion with Font Awesome 20 | * "Font Awesome by Dave Gandy - http://fontawesome.io" 21 | */ 22 | @font-face { 23 | font-family: 'weathericons'; 24 | src: url('../fonts/weathericons.eot'); 25 | src: url('../fonts/weathericons.eot?#iefix') format('embedded-opentype'), url('../fonts/weathericons.woff2') format('woff2'), url('../fonts/weathericons.woff') format('woff'), url('../fonts/weathericons.ttf') format('truetype'), url('../fonts/weathericons.svg#weather_iconsregular') format('svg'); 26 | font-weight: normal; 27 | font-style: normal; 28 | } 29 | .wi { 30 | display: inline-block; 31 | font-family: 'weathericons'; 32 | font-style: normal; 33 | font-weight: normal; 34 | line-height: 1; 35 | -webkit-font-smoothing: antialiased; 36 | -moz-osx-font-smoothing: grayscale; 37 | } 38 | .wi-fw { 39 | text-align: center; 40 | width: 1.4em; 41 | } 42 | .wi-rotate-90 { 43 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); 44 | -webkit-transform: rotate(90deg); 45 | -ms-transform: rotate(90deg); 46 | transform: rotate(90deg); 47 | } 48 | .wi-rotate-180 { 49 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); 50 | -webkit-transform: rotate(180deg); 51 | -ms-transform: rotate(180deg); 52 | transform: rotate(180deg); 53 | } 54 | .wi-rotate-270 { 55 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); 56 | -webkit-transform: rotate(270deg); 57 | -ms-transform: rotate(270deg); 58 | transform: rotate(270deg); 59 | } 60 | .wi-flip-horizontal { 61 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); 62 | -webkit-transform: scale(-1, 1); 63 | -ms-transform: scale(-1, 1); 64 | transform: scale(-1, 1); 65 | } 66 | .wi-flip-vertical { 67 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); 68 | -webkit-transform: scale(1, -1); 69 | -ms-transform: scale(1, -1); 70 | transform: scale(1, -1); 71 | } 72 | .wi-day-sunny:before { 73 | content: "\f00d"; 74 | } 75 | .wi-day-cloudy:before { 76 | content: "\f002"; 77 | } 78 | .wi-day-cloudy-gusts:before { 79 | content: "\f000"; 80 | } 81 | .wi-day-cloudy-windy:before { 82 | content: "\f001"; 83 | } 84 | .wi-day-fog:before { 85 | content: "\f003"; 86 | } 87 | .wi-day-hail:before { 88 | content: "\f004"; 89 | } 90 | .wi-day-haze:before { 91 | content: "\f0b6"; 92 | } 93 | .wi-day-lightning:before { 94 | content: "\f005"; 95 | } 96 | .wi-day-rain:before { 97 | content: "\f008"; 98 | } 99 | .wi-day-rain-mix:before { 100 | content: "\f006"; 101 | } 102 | .wi-day-rain-wind:before { 103 | content: "\f007"; 104 | } 105 | .wi-day-showers:before { 106 | content: "\f009"; 107 | } 108 | .wi-day-sleet:before { 109 | content: "\f0b2"; 110 | } 111 | .wi-day-sleet-storm:before { 112 | content: "\f068"; 113 | } 114 | .wi-day-snow:before { 115 | content: "\f00a"; 116 | } 117 | .wi-day-snow-thunderstorm:before { 118 | content: "\f06b"; 119 | } 120 | .wi-day-snow-wind:before { 121 | content: "\f065"; 122 | } 123 | .wi-day-sprinkle:before { 124 | content: "\f00b"; 125 | } 126 | .wi-day-storm-showers:before { 127 | content: "\f00e"; 128 | } 129 | .wi-day-sunny-overcast:before { 130 | content: "\f00c"; 131 | } 132 | .wi-day-thunderstorm:before { 133 | content: "\f010"; 134 | } 135 | .wi-day-windy:before { 136 | content: "\f085"; 137 | } 138 | .wi-solar-eclipse:before { 139 | content: "\f06e"; 140 | } 141 | .wi-hot:before { 142 | content: "\f072"; 143 | } 144 | .wi-day-cloudy-high:before { 145 | content: "\f07d"; 146 | } 147 | .wi-day-light-wind:before { 148 | content: "\f0c4"; 149 | } 150 | .wi-night-clear:before { 151 | content: "\f02e"; 152 | } 153 | .wi-night-alt-cloudy:before { 154 | content: "\f086"; 155 | } 156 | .wi-night-alt-cloudy-gusts:before { 157 | content: "\f022"; 158 | } 159 | .wi-night-alt-cloudy-windy:before { 160 | content: "\f023"; 161 | } 162 | .wi-night-alt-hail:before { 163 | content: "\f024"; 164 | } 165 | .wi-night-alt-lightning:before { 166 | content: "\f025"; 167 | } 168 | .wi-night-alt-rain:before { 169 | content: "\f028"; 170 | } 171 | .wi-night-alt-rain-mix:before { 172 | content: "\f026"; 173 | } 174 | .wi-night-alt-rain-wind:before { 175 | content: "\f027"; 176 | } 177 | .wi-night-alt-showers:before { 178 | content: "\f029"; 179 | } 180 | .wi-night-alt-sleet:before { 181 | content: "\f0b4"; 182 | } 183 | .wi-night-alt-sleet-storm:before { 184 | content: "\f06a"; 185 | } 186 | .wi-night-alt-snow:before { 187 | content: "\f02a"; 188 | } 189 | .wi-night-alt-snow-thunderstorm:before { 190 | content: "\f06d"; 191 | } 192 | .wi-night-alt-snow-wind:before { 193 | content: "\f067"; 194 | } 195 | .wi-night-alt-sprinkle:before { 196 | content: "\f02b"; 197 | } 198 | .wi-night-alt-storm-showers:before { 199 | content: "\f02c"; 200 | } 201 | .wi-night-alt-thunderstorm:before { 202 | content: "\f02d"; 203 | } 204 | .wi-night-cloudy:before { 205 | content: "\f031"; 206 | } 207 | .wi-night-cloudy-gusts:before { 208 | content: "\f02f"; 209 | } 210 | .wi-night-cloudy-windy:before { 211 | content: "\f030"; 212 | } 213 | .wi-night-fog:before { 214 | content: "\f04a"; 215 | } 216 | .wi-night-hail:before { 217 | content: "\f032"; 218 | } 219 | .wi-night-lightning:before { 220 | content: "\f033"; 221 | } 222 | .wi-night-partly-cloudy:before { 223 | content: "\f083"; 224 | } 225 | .wi-night-rain:before { 226 | content: "\f036"; 227 | } 228 | .wi-night-rain-mix:before { 229 | content: "\f034"; 230 | } 231 | .wi-night-rain-wind:before { 232 | content: "\f035"; 233 | } 234 | .wi-night-showers:before { 235 | content: "\f037"; 236 | } 237 | .wi-night-sleet:before { 238 | content: "\f0b3"; 239 | } 240 | .wi-night-sleet-storm:before { 241 | content: "\f069"; 242 | } 243 | .wi-night-snow:before { 244 | content: "\f038"; 245 | } 246 | .wi-night-snow-thunderstorm:before { 247 | content: "\f06c"; 248 | } 249 | .wi-night-snow-wind:before { 250 | content: "\f066"; 251 | } 252 | .wi-night-sprinkle:before { 253 | content: "\f039"; 254 | } 255 | .wi-night-storm-showers:before { 256 | content: "\f03a"; 257 | } 258 | .wi-night-thunderstorm:before { 259 | content: "\f03b"; 260 | } 261 | .wi-lunar-eclipse:before { 262 | content: "\f070"; 263 | } 264 | .wi-stars:before { 265 | content: "\f077"; 266 | } 267 | .wi-storm-showers:before { 268 | content: "\f01d"; 269 | } 270 | .wi-thunderstorm:before { 271 | content: "\f01e"; 272 | } 273 | .wi-night-alt-cloudy-high:before { 274 | content: "\f07e"; 275 | } 276 | .wi-night-cloudy-high:before { 277 | content: "\f080"; 278 | } 279 | .wi-night-alt-partly-cloudy:before { 280 | content: "\f081"; 281 | } 282 | .wi-cloud:before { 283 | content: "\f041"; 284 | } 285 | .wi-cloudy:before { 286 | content: "\f013"; 287 | } 288 | .wi-cloudy-gusts:before { 289 | content: "\f011"; 290 | } 291 | .wi-cloudy-windy:before { 292 | content: "\f012"; 293 | } 294 | .wi-fog:before { 295 | content: "\f014"; 296 | } 297 | .wi-hail:before { 298 | content: "\f015"; 299 | } 300 | .wi-rain:before { 301 | content: "\f019"; 302 | } 303 | .wi-rain-mix:before { 304 | content: "\f017"; 305 | } 306 | .wi-rain-wind:before { 307 | content: "\f018"; 308 | } 309 | .wi-showers:before { 310 | content: "\f01a"; 311 | } 312 | .wi-sleet:before { 313 | content: "\f0b5"; 314 | } 315 | .wi-snow:before { 316 | content: "\f01b"; 317 | } 318 | .wi-sprinkle:before { 319 | content: "\f01c"; 320 | } 321 | .wi-storm-showers:before { 322 | content: "\f01d"; 323 | } 324 | .wi-thunderstorm:before { 325 | content: "\f01e"; 326 | } 327 | .wi-snow-wind:before { 328 | content: "\f064"; 329 | } 330 | .wi-snow:before { 331 | content: "\f01b"; 332 | } 333 | .wi-smog:before { 334 | content: "\f074"; 335 | } 336 | .wi-smoke:before { 337 | content: "\f062"; 338 | } 339 | .wi-lightning:before { 340 | content: "\f016"; 341 | } 342 | .wi-raindrops:before { 343 | content: "\f04e"; 344 | } 345 | .wi-raindrop:before { 346 | content: "\f078"; 347 | } 348 | .wi-dust:before { 349 | content: "\f063"; 350 | } 351 | .wi-snowflake-cold:before { 352 | content: "\f076"; 353 | } 354 | .wi-windy:before { 355 | content: "\f021"; 356 | } 357 | .wi-strong-wind:before { 358 | content: "\f050"; 359 | } 360 | .wi-sandstorm:before { 361 | content: "\f082"; 362 | } 363 | .wi-earthquake:before { 364 | content: "\f0c6"; 365 | } 366 | .wi-fire:before { 367 | content: "\f0c7"; 368 | } 369 | .wi-flood:before { 370 | content: "\f07c"; 371 | } 372 | .wi-meteor:before { 373 | content: "\f071"; 374 | } 375 | .wi-tsunami:before { 376 | content: "\f0c5"; 377 | } 378 | .wi-volcano:before { 379 | content: "\f0c8"; 380 | } 381 | .wi-hurricane:before { 382 | content: "\f073"; 383 | } 384 | .wi-tornado:before { 385 | content: "\f056"; 386 | } 387 | .wi-small-craft-advisory:before { 388 | content: "\f0cc"; 389 | } 390 | .wi-gale-warning:before { 391 | content: "\f0cd"; 392 | } 393 | .wi-storm-warning:before { 394 | content: "\f0ce"; 395 | } 396 | .wi-hurricane-warning:before { 397 | content: "\f0cf"; 398 | } 399 | .wi-wind-direction:before { 400 | content: "\f0b1"; 401 | } 402 | .wi-alien:before { 403 | content: "\f075"; 404 | } 405 | .wi-celsius:before { 406 | content: "\f03c"; 407 | } 408 | .wi-fahrenheit:before { 409 | content: "\f045"; 410 | } 411 | .wi-degrees:before { 412 | content: "\f042"; 413 | } 414 | .wi-thermometer:before { 415 | content: "\f055"; 416 | } 417 | .wi-thermometer-exterior:before { 418 | content: "\f053"; 419 | } 420 | .wi-thermometer-internal:before { 421 | content: "\f054"; 422 | } 423 | .wi-cloud-down:before { 424 | content: "\f03d"; 425 | } 426 | .wi-cloud-up:before { 427 | content: "\f040"; 428 | } 429 | .wi-cloud-refresh:before { 430 | content: "\f03e"; 431 | } 432 | .wi-horizon:before { 433 | content: "\f047"; 434 | } 435 | .wi-horizon-alt:before { 436 | content: "\f046"; 437 | } 438 | .wi-sunrise:before { 439 | content: "\f051"; 440 | } 441 | .wi-sunset:before { 442 | content: "\f052"; 443 | } 444 | .wi-moonrise:before { 445 | content: "\f0c9"; 446 | } 447 | .wi-moonset:before { 448 | content: "\f0ca"; 449 | } 450 | .wi-refresh:before { 451 | content: "\f04c"; 452 | } 453 | .wi-refresh-alt:before { 454 | content: "\f04b"; 455 | } 456 | .wi-umbrella:before { 457 | content: "\f084"; 458 | } 459 | .wi-barometer:before { 460 | content: "\f079"; 461 | } 462 | .wi-humidity:before { 463 | content: "\f07a"; 464 | } 465 | .wi-na:before { 466 | content: "\f07b"; 467 | } 468 | .wi-train:before { 469 | content: "\f0cb"; 470 | } 471 | .wi-moon-new:before { 472 | content: "\f095"; 473 | } 474 | .wi-moon-waxing-crescent-1:before { 475 | content: "\f096"; 476 | } 477 | .wi-moon-waxing-crescent-2:before { 478 | content: "\f097"; 479 | } 480 | .wi-moon-waxing-crescent-3:before { 481 | content: "\f098"; 482 | } 483 | .wi-moon-waxing-crescent-4:before { 484 | content: "\f099"; 485 | } 486 | .wi-moon-waxing-crescent-5:before { 487 | content: "\f09a"; 488 | } 489 | .wi-moon-waxing-crescent-6:before { 490 | content: "\f09b"; 491 | } 492 | .wi-moon-first-quarter:before { 493 | content: "\f09c"; 494 | } 495 | .wi-moon-waxing-gibbous-1:before { 496 | content: "\f09d"; 497 | } 498 | .wi-moon-waxing-gibbous-2:before { 499 | content: "\f09e"; 500 | } 501 | .wi-moon-waxing-gibbous-3:before { 502 | content: "\f09f"; 503 | } 504 | .wi-moon-waxing-gibbous-4:before { 505 | content: "\f0a0"; 506 | } 507 | .wi-moon-waxing-gibbous-5:before { 508 | content: "\f0a1"; 509 | } 510 | .wi-moon-waxing-gibbous-6:before { 511 | content: "\f0a2"; 512 | } 513 | .wi-moon-full:before { 514 | content: "\f0a3"; 515 | } 516 | .wi-moon-waning-gibbous-1:before { 517 | content: "\f0a4"; 518 | } 519 | .wi-moon-waning-gibbous-2:before { 520 | content: "\f0a5"; 521 | } 522 | .wi-moon-waning-gibbous-3:before { 523 | content: "\f0a6"; 524 | } 525 | .wi-moon-waning-gibbous-4:before { 526 | content: "\f0a7"; 527 | } 528 | .wi-moon-waning-gibbous-5:before { 529 | content: "\f0a8"; 530 | } 531 | .wi-moon-waning-gibbous-6:before { 532 | content: "\f0a9"; 533 | } 534 | .wi-moon-third-quarter:before { 535 | content: "\f0aa"; 536 | } 537 | .wi-moon-waning-crescent-1:before { 538 | content: "\f0ab"; 539 | } 540 | .wi-moon-waning-crescent-2:before { 541 | content: "\f0ac"; 542 | } 543 | .wi-moon-waning-crescent-3:before { 544 | content: "\f0ad"; 545 | } 546 | .wi-moon-waning-crescent-4:before { 547 | content: "\f0ae"; 548 | } 549 | .wi-moon-waning-crescent-5:before { 550 | content: "\f0af"; 551 | } 552 | .wi-moon-waning-crescent-6:before { 553 | content: "\f0b0"; 554 | } 555 | .wi-moon-alt-new:before { 556 | content: "\f0eb"; 557 | } 558 | .wi-moon-alt-waxing-crescent-1:before { 559 | content: "\f0d0"; 560 | } 561 | .wi-moon-alt-waxing-crescent-2:before { 562 | content: "\f0d1"; 563 | } 564 | .wi-moon-alt-waxing-crescent-3:before { 565 | content: "\f0d2"; 566 | } 567 | .wi-moon-alt-waxing-crescent-4:before { 568 | content: "\f0d3"; 569 | } 570 | .wi-moon-alt-waxing-crescent-5:before { 571 | content: "\f0d4"; 572 | } 573 | .wi-moon-alt-waxing-crescent-6:before { 574 | content: "\f0d5"; 575 | } 576 | .wi-moon-alt-first-quarter:before { 577 | content: "\f0d6"; 578 | } 579 | .wi-moon-alt-waxing-gibbous-1:before { 580 | content: "\f0d7"; 581 | } 582 | .wi-moon-alt-waxing-gibbous-2:before { 583 | content: "\f0d8"; 584 | } 585 | .wi-moon-alt-waxing-gibbous-3:before { 586 | content: "\f0d9"; 587 | } 588 | .wi-moon-alt-waxing-gibbous-4:before { 589 | content: "\f0da"; 590 | } 591 | .wi-moon-alt-waxing-gibbous-5:before { 592 | content: "\f0db"; 593 | } 594 | .wi-moon-alt-waxing-gibbous-6:before { 595 | content: "\f0dc"; 596 | } 597 | .wi-moon-alt-full:before { 598 | content: "\f0dd"; 599 | } 600 | .wi-moon-alt-waning-gibbous-1:before { 601 | content: "\f0de"; 602 | } 603 | .wi-moon-alt-waning-gibbous-2:before { 604 | content: "\f0df"; 605 | } 606 | .wi-moon-alt-waning-gibbous-3:before { 607 | content: "\f0e0"; 608 | } 609 | .wi-moon-alt-waning-gibbous-4:before { 610 | content: "\f0e1"; 611 | } 612 | .wi-moon-alt-waning-gibbous-5:before { 613 | content: "\f0e2"; 614 | } 615 | .wi-moon-alt-waning-gibbous-6:before { 616 | content: "\f0e3"; 617 | } 618 | .wi-moon-alt-third-quarter:before { 619 | content: "\f0e4"; 620 | } 621 | .wi-moon-alt-waning-crescent-1:before { 622 | content: "\f0e5"; 623 | } 624 | .wi-moon-alt-waning-crescent-2:before { 625 | content: "\f0e6"; 626 | } 627 | .wi-moon-alt-waning-crescent-3:before { 628 | content: "\f0e7"; 629 | } 630 | .wi-moon-alt-waning-crescent-4:before { 631 | content: "\f0e8"; 632 | } 633 | .wi-moon-alt-waning-crescent-5:before { 634 | content: "\f0e9"; 635 | } 636 | .wi-moon-alt-waning-crescent-6:before { 637 | content: "\f0ea"; 638 | } 639 | .wi-moon-0:before { 640 | content: "\f095"; 641 | } 642 | .wi-moon-1:before { 643 | content: "\f096"; 644 | } 645 | .wi-moon-2:before { 646 | content: "\f097"; 647 | } 648 | .wi-moon-3:before { 649 | content: "\f098"; 650 | } 651 | .wi-moon-4:before { 652 | content: "\f099"; 653 | } 654 | .wi-moon-5:before { 655 | content: "\f09a"; 656 | } 657 | .wi-moon-6:before { 658 | content: "\f09b"; 659 | } 660 | .wi-moon-7:before { 661 | content: "\f09c"; 662 | } 663 | .wi-moon-8:before { 664 | content: "\f09d"; 665 | } 666 | .wi-moon-9:before { 667 | content: "\f09e"; 668 | } 669 | .wi-moon-10:before { 670 | content: "\f09f"; 671 | } 672 | .wi-moon-11:before { 673 | content: "\f0a0"; 674 | } 675 | .wi-moon-12:before { 676 | content: "\f0a1"; 677 | } 678 | .wi-moon-13:before { 679 | content: "\f0a2"; 680 | } 681 | .wi-moon-14:before { 682 | content: "\f0a3"; 683 | } 684 | .wi-moon-15:before { 685 | content: "\f0a4"; 686 | } 687 | .wi-moon-16:before { 688 | content: "\f0a5"; 689 | } 690 | .wi-moon-17:before { 691 | content: "\f0a6"; 692 | } 693 | .wi-moon-18:before { 694 | content: "\f0a7"; 695 | } 696 | .wi-moon-19:before { 697 | content: "\f0a8"; 698 | } 699 | .wi-moon-20:before { 700 | content: "\f0a9"; 701 | } 702 | .wi-moon-21:before { 703 | content: "\f0aa"; 704 | } 705 | .wi-moon-22:before { 706 | content: "\f0ab"; 707 | } 708 | .wi-moon-23:before { 709 | content: "\f0ac"; 710 | } 711 | .wi-moon-24:before { 712 | content: "\f0ad"; 713 | } 714 | .wi-moon-25:before { 715 | content: "\f0ae"; 716 | } 717 | .wi-moon-26:before { 718 | content: "\f0af"; 719 | } 720 | .wi-moon-27:before { 721 | content: "\f0b0"; 722 | } 723 | .wi-time-1:before { 724 | content: "\f08a"; 725 | } 726 | .wi-time-2:before { 727 | content: "\f08b"; 728 | } 729 | .wi-time-3:before { 730 | content: "\f08c"; 731 | } 732 | .wi-time-4:before { 733 | content: "\f08d"; 734 | } 735 | .wi-time-5:before { 736 | content: "\f08e"; 737 | } 738 | .wi-time-6:before { 739 | content: "\f08f"; 740 | } 741 | .wi-time-7:before { 742 | content: "\f090"; 743 | } 744 | .wi-time-8:before { 745 | content: "\f091"; 746 | } 747 | .wi-time-9:before { 748 | content: "\f092"; 749 | } 750 | .wi-time-10:before { 751 | content: "\f093"; 752 | } 753 | .wi-time-11:before { 754 | content: "\f094"; 755 | } 756 | .wi-time-12:before { 757 | content: "\f089"; 758 | } 759 | .wi-direction-up:before { 760 | content: "\f058"; 761 | } 762 | .wi-direction-up-right:before { 763 | content: "\f057"; 764 | } 765 | .wi-direction-right:before { 766 | content: "\f04d"; 767 | } 768 | .wi-direction-down-right:before { 769 | content: "\f088"; 770 | } 771 | .wi-direction-down:before { 772 | content: "\f044"; 773 | } 774 | .wi-direction-down-left:before { 775 | content: "\f043"; 776 | } 777 | .wi-direction-left:before { 778 | content: "\f048"; 779 | } 780 | .wi-direction-up-left:before { 781 | content: "\f087"; 782 | } 783 | .wi-wind-beaufort-0:before { 784 | content: "\f0b7"; 785 | } 786 | .wi-wind-beaufort-1:before { 787 | content: "\f0b8"; 788 | } 789 | .wi-wind-beaufort-2:before { 790 | content: "\f0b9"; 791 | } 792 | .wi-wind-beaufort-3:before { 793 | content: "\f0ba"; 794 | } 795 | .wi-wind-beaufort-4:before { 796 | content: "\f0bb"; 797 | } 798 | .wi-wind-beaufort-5:before { 799 | content: "\f0bc"; 800 | } 801 | .wi-wind-beaufort-6:before { 802 | content: "\f0bd"; 803 | } 804 | .wi-wind-beaufort-7:before { 805 | content: "\f0be"; 806 | } 807 | .wi-wind-beaufort-8:before { 808 | content: "\f0bf"; 809 | } 810 | .wi-wind-beaufort-9:before { 811 | content: "\f0c0"; 812 | } 813 | .wi-wind-beaufort-10:before { 814 | content: "\f0c1"; 815 | } 816 | .wi-wind-beaufort-11:before { 817 | content: "\f0c2"; 818 | } 819 | .wi-wind-beaufort-12:before { 820 | content: "\f0c3"; 821 | } 822 | .wi-yahoo-0:before { 823 | content: "\f056"; 824 | } 825 | .wi-yahoo-1:before { 826 | content: "\f00e"; 827 | } 828 | .wi-yahoo-2:before { 829 | content: "\f073"; 830 | } 831 | .wi-yahoo-3:before { 832 | content: "\f01e"; 833 | } 834 | .wi-yahoo-4:before { 835 | content: "\f01e"; 836 | } 837 | .wi-yahoo-5:before { 838 | content: "\f017"; 839 | } 840 | .wi-yahoo-6:before { 841 | content: "\f017"; 842 | } 843 | .wi-yahoo-7:before { 844 | content: "\f017"; 845 | } 846 | .wi-yahoo-8:before { 847 | content: "\f015"; 848 | } 849 | .wi-yahoo-9:before { 850 | content: "\f01a"; 851 | } 852 | .wi-yahoo-10:before { 853 | content: "\f015"; 854 | } 855 | .wi-yahoo-11:before { 856 | content: "\f01a"; 857 | } 858 | .wi-yahoo-12:before { 859 | content: "\f01a"; 860 | } 861 | .wi-yahoo-13:before { 862 | content: "\f01b"; 863 | } 864 | .wi-yahoo-14:before { 865 | content: "\f00a"; 866 | } 867 | .wi-yahoo-15:before { 868 | content: "\f064"; 869 | } 870 | .wi-yahoo-16:before { 871 | content: "\f01b"; 872 | } 873 | .wi-yahoo-17:before { 874 | content: "\f015"; 875 | } 876 | .wi-yahoo-18:before { 877 | content: "\f017"; 878 | } 879 | .wi-yahoo-19:before { 880 | content: "\f063"; 881 | } 882 | .wi-yahoo-20:before { 883 | content: "\f014"; 884 | } 885 | .wi-yahoo-21:before { 886 | content: "\f021"; 887 | } 888 | .wi-yahoo-22:before { 889 | content: "\f062"; 890 | } 891 | .wi-yahoo-23:before { 892 | content: "\f050"; 893 | } 894 | .wi-yahoo-24:before { 895 | content: "\f050"; 896 | } 897 | .wi-yahoo-25:before { 898 | content: "\f076"; 899 | } 900 | .wi-yahoo-26:before { 901 | content: "\f013"; 902 | } 903 | .wi-yahoo-27:before { 904 | content: "\f031"; 905 | } 906 | .wi-yahoo-28:before { 907 | content: "\f002"; 908 | } 909 | .wi-yahoo-29:before { 910 | content: "\f031"; 911 | } 912 | .wi-yahoo-30:before { 913 | content: "\f002"; 914 | } 915 | .wi-yahoo-31:before { 916 | content: "\f02e"; 917 | } 918 | .wi-yahoo-32:before { 919 | content: "\f00d"; 920 | } 921 | .wi-yahoo-33:before { 922 | content: "\f083"; 923 | } 924 | .wi-yahoo-34:before { 925 | content: "\f00c"; 926 | } 927 | .wi-yahoo-35:before { 928 | content: "\f017"; 929 | } 930 | .wi-yahoo-36:before { 931 | content: "\f072"; 932 | } 933 | .wi-yahoo-37:before { 934 | content: "\f00e"; 935 | } 936 | .wi-yahoo-38:before { 937 | content: "\f00e"; 938 | } 939 | .wi-yahoo-39:before { 940 | content: "\f00e"; 941 | } 942 | .wi-yahoo-40:before { 943 | content: "\f01a"; 944 | } 945 | .wi-yahoo-41:before { 946 | content: "\f064"; 947 | } 948 | .wi-yahoo-42:before { 949 | content: "\f01b"; 950 | } 951 | .wi-yahoo-43:before { 952 | content: "\f064"; 953 | } 954 | .wi-yahoo-44:before { 955 | content: "\f00c"; 956 | } 957 | .wi-yahoo-45:before { 958 | content: "\f00e"; 959 | } 960 | .wi-yahoo-46:before { 961 | content: "\f01b"; 962 | } 963 | .wi-yahoo-47:before { 964 | content: "\f00e"; 965 | } 966 | .wi-yahoo-3200:before { 967 | content: "\f077"; 968 | } 969 | .wi-forecast-io-clear-day:before { 970 | content: "\f00d"; 971 | } 972 | .wi-forecast-io-clear-night:before { 973 | content: "\f02e"; 974 | } 975 | .wi-forecast-io-rain:before { 976 | content: "\f019"; 977 | } 978 | .wi-forecast-io-snow:before { 979 | content: "\f01b"; 980 | } 981 | .wi-forecast-io-sleet:before { 982 | content: "\f0b5"; 983 | } 984 | .wi-forecast-io-wind:before { 985 | content: "\f050"; 986 | } 987 | .wi-forecast-io-fog:before { 988 | content: "\f014"; 989 | } 990 | .wi-forecast-io-cloudy:before { 991 | content: "\f013"; 992 | } 993 | .wi-forecast-io-partly-cloudy-day:before { 994 | content: "\f002"; 995 | } 996 | .wi-forecast-io-partly-cloudy-night:before { 997 | content: "\f031"; 998 | } 999 | .wi-forecast-io-hail:before { 1000 | content: "\f015"; 1001 | } 1002 | .wi-forecast-io-thunderstorm:before { 1003 | content: "\f01e"; 1004 | } 1005 | .wi-forecast-io-tornado:before { 1006 | content: "\f056"; 1007 | } 1008 | .wi-wmo4680-0:before, 1009 | .wi-wmo4680-00:before { 1010 | content: "\f055"; 1011 | } 1012 | .wi-wmo4680-1:before, 1013 | .wi-wmo4680-01:before { 1014 | content: "\f013"; 1015 | } 1016 | .wi-wmo4680-2:before, 1017 | .wi-wmo4680-02:before { 1018 | content: "\f055"; 1019 | } 1020 | .wi-wmo4680-3:before, 1021 | .wi-wmo4680-03:before { 1022 | content: "\f013"; 1023 | } 1024 | .wi-wmo4680-4:before, 1025 | .wi-wmo4680-04:before { 1026 | content: "\f014"; 1027 | } 1028 | .wi-wmo4680-5:before, 1029 | .wi-wmo4680-05:before { 1030 | content: "\f014"; 1031 | } 1032 | .wi-wmo4680-10:before { 1033 | content: "\f014"; 1034 | } 1035 | .wi-wmo4680-11:before { 1036 | content: "\f014"; 1037 | } 1038 | .wi-wmo4680-12:before { 1039 | content: "\f016"; 1040 | } 1041 | .wi-wmo4680-18:before { 1042 | content: "\f050"; 1043 | } 1044 | .wi-wmo4680-20:before { 1045 | content: "\f014"; 1046 | } 1047 | .wi-wmo4680-21:before { 1048 | content: "\f017"; 1049 | } 1050 | .wi-wmo4680-22:before { 1051 | content: "\f017"; 1052 | } 1053 | .wi-wmo4680-23:before { 1054 | content: "\f019"; 1055 | } 1056 | .wi-wmo4680-24:before { 1057 | content: "\f01b"; 1058 | } 1059 | .wi-wmo4680-25:before { 1060 | content: "\f015"; 1061 | } 1062 | .wi-wmo4680-26:before { 1063 | content: "\f01e"; 1064 | } 1065 | .wi-wmo4680-27:before { 1066 | content: "\f063"; 1067 | } 1068 | .wi-wmo4680-28:before { 1069 | content: "\f063"; 1070 | } 1071 | .wi-wmo4680-29:before { 1072 | content: "\f063"; 1073 | } 1074 | .wi-wmo4680-30:before { 1075 | content: "\f014"; 1076 | } 1077 | .wi-wmo4680-31:before { 1078 | content: "\f014"; 1079 | } 1080 | .wi-wmo4680-32:before { 1081 | content: "\f014"; 1082 | } 1083 | .wi-wmo4680-33:before { 1084 | content: "\f014"; 1085 | } 1086 | .wi-wmo4680-34:before { 1087 | content: "\f014"; 1088 | } 1089 | .wi-wmo4680-35:before { 1090 | content: "\f014"; 1091 | } 1092 | .wi-wmo4680-40:before { 1093 | content: "\f017"; 1094 | } 1095 | .wi-wmo4680-41:before { 1096 | content: "\f01c"; 1097 | } 1098 | .wi-wmo4680-42:before { 1099 | content: "\f019"; 1100 | } 1101 | .wi-wmo4680-43:before { 1102 | content: "\f01c"; 1103 | } 1104 | .wi-wmo4680-44:before { 1105 | content: "\f019"; 1106 | } 1107 | .wi-wmo4680-45:before { 1108 | content: "\f015"; 1109 | } 1110 | .wi-wmo4680-46:before { 1111 | content: "\f015"; 1112 | } 1113 | .wi-wmo4680-47:before { 1114 | content: "\f01b"; 1115 | } 1116 | .wi-wmo4680-48:before { 1117 | content: "\f01b"; 1118 | } 1119 | .wi-wmo4680-50:before { 1120 | content: "\f01c"; 1121 | } 1122 | .wi-wmo4680-51:before { 1123 | content: "\f01c"; 1124 | } 1125 | .wi-wmo4680-52:before { 1126 | content: "\f019"; 1127 | } 1128 | .wi-wmo4680-53:before { 1129 | content: "\f019"; 1130 | } 1131 | .wi-wmo4680-54:before { 1132 | content: "\f076"; 1133 | } 1134 | .wi-wmo4680-55:before { 1135 | content: "\f076"; 1136 | } 1137 | .wi-wmo4680-56:before { 1138 | content: "\f076"; 1139 | } 1140 | .wi-wmo4680-57:before { 1141 | content: "\f01c"; 1142 | } 1143 | .wi-wmo4680-58:before { 1144 | content: "\f019"; 1145 | } 1146 | .wi-wmo4680-60:before { 1147 | content: "\f01c"; 1148 | } 1149 | .wi-wmo4680-61:before { 1150 | content: "\f01c"; 1151 | } 1152 | .wi-wmo4680-62:before { 1153 | content: "\f019"; 1154 | } 1155 | .wi-wmo4680-63:before { 1156 | content: "\f019"; 1157 | } 1158 | .wi-wmo4680-64:before { 1159 | content: "\f015"; 1160 | } 1161 | .wi-wmo4680-65:before { 1162 | content: "\f015"; 1163 | } 1164 | .wi-wmo4680-66:before { 1165 | content: "\f015"; 1166 | } 1167 | .wi-wmo4680-67:before { 1168 | content: "\f017"; 1169 | } 1170 | .wi-wmo4680-68:before { 1171 | content: "\f017"; 1172 | } 1173 | .wi-wmo4680-70:before { 1174 | content: "\f01b"; 1175 | } 1176 | .wi-wmo4680-71:before { 1177 | content: "\f01b"; 1178 | } 1179 | .wi-wmo4680-72:before { 1180 | content: "\f01b"; 1181 | } 1182 | .wi-wmo4680-73:before { 1183 | content: "\f01b"; 1184 | } 1185 | .wi-wmo4680-74:before { 1186 | content: "\f076"; 1187 | } 1188 | .wi-wmo4680-75:before { 1189 | content: "\f076"; 1190 | } 1191 | .wi-wmo4680-76:before { 1192 | content: "\f076"; 1193 | } 1194 | .wi-wmo4680-77:before { 1195 | content: "\f01b"; 1196 | } 1197 | .wi-wmo4680-78:before { 1198 | content: "\f076"; 1199 | } 1200 | .wi-wmo4680-80:before { 1201 | content: "\f019"; 1202 | } 1203 | .wi-wmo4680-81:before { 1204 | content: "\f01c"; 1205 | } 1206 | .wi-wmo4680-82:before { 1207 | content: "\f019"; 1208 | } 1209 | .wi-wmo4680-83:before { 1210 | content: "\f019"; 1211 | } 1212 | .wi-wmo4680-84:before { 1213 | content: "\f01d"; 1214 | } 1215 | .wi-wmo4680-85:before { 1216 | content: "\f017"; 1217 | } 1218 | .wi-wmo4680-86:before { 1219 | content: "\f017"; 1220 | } 1221 | .wi-wmo4680-87:before { 1222 | content: "\f017"; 1223 | } 1224 | .wi-wmo4680-89:before { 1225 | content: "\f015"; 1226 | } 1227 | .wi-wmo4680-90:before { 1228 | content: "\f016"; 1229 | } 1230 | .wi-wmo4680-91:before { 1231 | content: "\f01d"; 1232 | } 1233 | .wi-wmo4680-92:before { 1234 | content: "\f01e"; 1235 | } 1236 | .wi-wmo4680-93:before { 1237 | content: "\f01e"; 1238 | } 1239 | .wi-wmo4680-94:before { 1240 | content: "\f016"; 1241 | } 1242 | .wi-wmo4680-95:before { 1243 | content: "\f01e"; 1244 | } 1245 | .wi-wmo4680-96:before { 1246 | content: "\f01e"; 1247 | } 1248 | .wi-wmo4680-99:before { 1249 | content: "\f056"; 1250 | } 1251 | .wi-owm-200:before { 1252 | content: "\f01e"; 1253 | } 1254 | .wi-owm-201:before { 1255 | content: "\f01e"; 1256 | } 1257 | .wi-owm-202:before { 1258 | content: "\f01e"; 1259 | } 1260 | .wi-owm-210:before { 1261 | content: "\f016"; 1262 | } 1263 | .wi-owm-211:before { 1264 | content: "\f016"; 1265 | } 1266 | .wi-owm-212:before { 1267 | content: "\f016"; 1268 | } 1269 | .wi-owm-221:before { 1270 | content: "\f016"; 1271 | } 1272 | .wi-owm-230:before { 1273 | content: "\f01e"; 1274 | } 1275 | .wi-owm-231:before { 1276 | content: "\f01e"; 1277 | } 1278 | .wi-owm-232:before { 1279 | content: "\f01e"; 1280 | } 1281 | .wi-owm-300:before { 1282 | content: "\f01c"; 1283 | } 1284 | .wi-owm-301:before { 1285 | content: "\f01c"; 1286 | } 1287 | .wi-owm-302:before { 1288 | content: "\f019"; 1289 | } 1290 | .wi-owm-310:before { 1291 | content: "\f017"; 1292 | } 1293 | .wi-owm-311:before { 1294 | content: "\f019"; 1295 | } 1296 | .wi-owm-312:before { 1297 | content: "\f019"; 1298 | } 1299 | .wi-owm-313:before { 1300 | content: "\f01a"; 1301 | } 1302 | .wi-owm-314:before { 1303 | content: "\f019"; 1304 | } 1305 | .wi-owm-321:before { 1306 | content: "\f01c"; 1307 | } 1308 | .wi-owm-500:before { 1309 | content: "\f01c"; 1310 | } 1311 | .wi-owm-501:before { 1312 | content: "\f019"; 1313 | } 1314 | .wi-owm-502:before { 1315 | content: "\f019"; 1316 | } 1317 | .wi-owm-503:before { 1318 | content: "\f019"; 1319 | } 1320 | .wi-owm-504:before { 1321 | content: "\f019"; 1322 | } 1323 | .wi-owm-511:before { 1324 | content: "\f017"; 1325 | } 1326 | .wi-owm-520:before { 1327 | content: "\f01a"; 1328 | } 1329 | .wi-owm-521:before { 1330 | content: "\f01a"; 1331 | } 1332 | .wi-owm-522:before { 1333 | content: "\f01a"; 1334 | } 1335 | .wi-owm-531:before { 1336 | content: "\f01d"; 1337 | } 1338 | .wi-owm-600:before { 1339 | content: "\f01b"; 1340 | } 1341 | .wi-owm-601:before { 1342 | content: "\f01b"; 1343 | } 1344 | .wi-owm-602:before { 1345 | content: "\f0b5"; 1346 | } 1347 | .wi-owm-611:before { 1348 | content: "\f017"; 1349 | } 1350 | .wi-owm-612:before { 1351 | content: "\f017"; 1352 | } 1353 | .wi-owm-615:before { 1354 | content: "\f017"; 1355 | } 1356 | .wi-owm-616:before { 1357 | content: "\f017"; 1358 | } 1359 | .wi-owm-620:before { 1360 | content: "\f017"; 1361 | } 1362 | .wi-owm-621:before { 1363 | content: "\f01b"; 1364 | } 1365 | .wi-owm-622:before { 1366 | content: "\f01b"; 1367 | } 1368 | .wi-owm-701:before { 1369 | content: "\f01a"; 1370 | } 1371 | .wi-owm-711:before { 1372 | content: "\f062"; 1373 | } 1374 | .wi-owm-721:before { 1375 | content: "\f0b6"; 1376 | } 1377 | .wi-owm-731:before { 1378 | content: "\f063"; 1379 | } 1380 | .wi-owm-741:before { 1381 | content: "\f014"; 1382 | } 1383 | .wi-owm-761:before { 1384 | content: "\f063"; 1385 | } 1386 | .wi-owm-762:before { 1387 | content: "\f063"; 1388 | } 1389 | .wi-owm-771:before { 1390 | content: "\f011"; 1391 | } 1392 | .wi-owm-781:before { 1393 | content: "\f056"; 1394 | } 1395 | .wi-owm-800:before { 1396 | content: "\f00d"; 1397 | } 1398 | .wi-owm-801:before { 1399 | content: "\f011"; 1400 | } 1401 | .wi-owm-802:before { 1402 | content: "\f011"; 1403 | } 1404 | .wi-owm-803:before { 1405 | content: "\f012"; 1406 | } 1407 | .wi-owm-804:before { 1408 | content: "\f013"; 1409 | } 1410 | .wi-owm-900:before { 1411 | content: "\f056"; 1412 | } 1413 | .wi-owm-901:before { 1414 | content: "\f01d"; 1415 | } 1416 | .wi-owm-902:before { 1417 | content: "\f073"; 1418 | } 1419 | .wi-owm-903:before { 1420 | content: "\f076"; 1421 | } 1422 | .wi-owm-904:before { 1423 | content: "\f072"; 1424 | } 1425 | .wi-owm-905:before { 1426 | content: "\f021"; 1427 | } 1428 | .wi-owm-906:before { 1429 | content: "\f015"; 1430 | } 1431 | .wi-owm-957:before { 1432 | content: "\f050"; 1433 | } 1434 | .wi-owm-day-200:before { 1435 | content: "\f010"; 1436 | } 1437 | .wi-owm-day-201:before { 1438 | content: "\f010"; 1439 | } 1440 | .wi-owm-day-202:before { 1441 | content: "\f010"; 1442 | } 1443 | .wi-owm-day-210:before { 1444 | content: "\f005"; 1445 | } 1446 | .wi-owm-day-211:before { 1447 | content: "\f005"; 1448 | } 1449 | .wi-owm-day-212:before { 1450 | content: "\f005"; 1451 | } 1452 | .wi-owm-day-221:before { 1453 | content: "\f005"; 1454 | } 1455 | .wi-owm-day-230:before { 1456 | content: "\f010"; 1457 | } 1458 | .wi-owm-day-231:before { 1459 | content: "\f010"; 1460 | } 1461 | .wi-owm-day-232:before { 1462 | content: "\f010"; 1463 | } 1464 | .wi-owm-day-300:before { 1465 | content: "\f00b"; 1466 | } 1467 | .wi-owm-day-301:before { 1468 | content: "\f00b"; 1469 | } 1470 | .wi-owm-day-302:before { 1471 | content: "\f008"; 1472 | } 1473 | .wi-owm-day-310:before { 1474 | content: "\f008"; 1475 | } 1476 | .wi-owm-day-311:before { 1477 | content: "\f008"; 1478 | } 1479 | .wi-owm-day-312:before { 1480 | content: "\f008"; 1481 | } 1482 | .wi-owm-day-313:before { 1483 | content: "\f008"; 1484 | } 1485 | .wi-owm-day-314:before { 1486 | content: "\f008"; 1487 | } 1488 | .wi-owm-day-321:before { 1489 | content: "\f00b"; 1490 | } 1491 | .wi-owm-day-500:before { 1492 | content: "\f00b"; 1493 | } 1494 | .wi-owm-day-501:before { 1495 | content: "\f008"; 1496 | } 1497 | .wi-owm-day-502:before { 1498 | content: "\f008"; 1499 | } 1500 | .wi-owm-day-503:before { 1501 | content: "\f008"; 1502 | } 1503 | .wi-owm-day-504:before { 1504 | content: "\f008"; 1505 | } 1506 | .wi-owm-day-511:before { 1507 | content: "\f006"; 1508 | } 1509 | .wi-owm-day-520:before { 1510 | content: "\f009"; 1511 | } 1512 | .wi-owm-day-521:before { 1513 | content: "\f009"; 1514 | } 1515 | .wi-owm-day-522:before { 1516 | content: "\f009"; 1517 | } 1518 | .wi-owm-day-531:before { 1519 | content: "\f00e"; 1520 | } 1521 | .wi-owm-day-600:before { 1522 | content: "\f00a"; 1523 | } 1524 | .wi-owm-day-601:before { 1525 | content: "\f0b2"; 1526 | } 1527 | .wi-owm-day-602:before { 1528 | content: "\f00a"; 1529 | } 1530 | .wi-owm-day-611:before { 1531 | content: "\f006"; 1532 | } 1533 | .wi-owm-day-612:before { 1534 | content: "\f006"; 1535 | } 1536 | .wi-owm-day-615:before { 1537 | content: "\f006"; 1538 | } 1539 | .wi-owm-day-616:before { 1540 | content: "\f006"; 1541 | } 1542 | .wi-owm-day-620:before { 1543 | content: "\f006"; 1544 | } 1545 | .wi-owm-day-621:before { 1546 | content: "\f00a"; 1547 | } 1548 | .wi-owm-day-622:before { 1549 | content: "\f00a"; 1550 | } 1551 | .wi-owm-day-701:before { 1552 | content: "\f009"; 1553 | } 1554 | .wi-owm-day-711:before { 1555 | content: "\f062"; 1556 | } 1557 | .wi-owm-day-721:before { 1558 | content: "\f0b6"; 1559 | } 1560 | .wi-owm-day-731:before { 1561 | content: "\f063"; 1562 | } 1563 | .wi-owm-day-741:before { 1564 | content: "\f003"; 1565 | } 1566 | .wi-owm-day-761:before { 1567 | content: "\f063"; 1568 | } 1569 | .wi-owm-day-762:before { 1570 | content: "\f063"; 1571 | } 1572 | .wi-owm-day-781:before { 1573 | content: "\f056"; 1574 | } 1575 | .wi-owm-day-800:before { 1576 | content: "\f00d"; 1577 | } 1578 | .wi-owm-day-801:before { 1579 | content: "\f000"; 1580 | } 1581 | .wi-owm-day-802:before { 1582 | content: "\f000"; 1583 | } 1584 | .wi-owm-day-803:before { 1585 | content: "\f000"; 1586 | } 1587 | .wi-owm-day-804:before { 1588 | content: "\f00c"; 1589 | } 1590 | .wi-owm-day-900:before { 1591 | content: "\f056"; 1592 | } 1593 | .wi-owm-day-902:before { 1594 | content: "\f073"; 1595 | } 1596 | .wi-owm-day-903:before { 1597 | content: "\f076"; 1598 | } 1599 | .wi-owm-day-904:before { 1600 | content: "\f072"; 1601 | } 1602 | .wi-owm-day-906:before { 1603 | content: "\f004"; 1604 | } 1605 | .wi-owm-day-957:before { 1606 | content: "\f050"; 1607 | } 1608 | .wi-owm-night-200:before { 1609 | content: "\f02d"; 1610 | } 1611 | .wi-owm-night-201:before { 1612 | content: "\f02d"; 1613 | } 1614 | .wi-owm-night-202:before { 1615 | content: "\f02d"; 1616 | } 1617 | .wi-owm-night-210:before { 1618 | content: "\f025"; 1619 | } 1620 | .wi-owm-night-211:before { 1621 | content: "\f025"; 1622 | } 1623 | .wi-owm-night-212:before { 1624 | content: "\f025"; 1625 | } 1626 | .wi-owm-night-221:before { 1627 | content: "\f025"; 1628 | } 1629 | .wi-owm-night-230:before { 1630 | content: "\f02d"; 1631 | } 1632 | .wi-owm-night-231:before { 1633 | content: "\f02d"; 1634 | } 1635 | .wi-owm-night-232:before { 1636 | content: "\f02d"; 1637 | } 1638 | .wi-owm-night-300:before { 1639 | content: "\f02b"; 1640 | } 1641 | .wi-owm-night-301:before { 1642 | content: "\f02b"; 1643 | } 1644 | .wi-owm-night-302:before { 1645 | content: "\f028"; 1646 | } 1647 | .wi-owm-night-310:before { 1648 | content: "\f028"; 1649 | } 1650 | .wi-owm-night-311:before { 1651 | content: "\f028"; 1652 | } 1653 | .wi-owm-night-312:before { 1654 | content: "\f028"; 1655 | } 1656 | .wi-owm-night-313:before { 1657 | content: "\f028"; 1658 | } 1659 | .wi-owm-night-314:before { 1660 | content: "\f028"; 1661 | } 1662 | .wi-owm-night-321:before { 1663 | content: "\f02b"; 1664 | } 1665 | .wi-owm-night-500:before { 1666 | content: "\f02b"; 1667 | } 1668 | .wi-owm-night-501:before { 1669 | content: "\f028"; 1670 | } 1671 | .wi-owm-night-502:before { 1672 | content: "\f028"; 1673 | } 1674 | .wi-owm-night-503:before { 1675 | content: "\f028"; 1676 | } 1677 | .wi-owm-night-504:before { 1678 | content: "\f028"; 1679 | } 1680 | .wi-owm-night-511:before { 1681 | content: "\f026"; 1682 | } 1683 | .wi-owm-night-520:before { 1684 | content: "\f029"; 1685 | } 1686 | .wi-owm-night-521:before { 1687 | content: "\f029"; 1688 | } 1689 | .wi-owm-night-522:before { 1690 | content: "\f029"; 1691 | } 1692 | .wi-owm-night-531:before { 1693 | content: "\f02c"; 1694 | } 1695 | .wi-owm-night-600:before { 1696 | content: "\f02a"; 1697 | } 1698 | .wi-owm-night-601:before { 1699 | content: "\f0b4"; 1700 | } 1701 | .wi-owm-night-602:before { 1702 | content: "\f02a"; 1703 | } 1704 | .wi-owm-night-611:before { 1705 | content: "\f026"; 1706 | } 1707 | .wi-owm-night-612:before { 1708 | content: "\f026"; 1709 | } 1710 | .wi-owm-night-615:before { 1711 | content: "\f026"; 1712 | } 1713 | .wi-owm-night-616:before { 1714 | content: "\f026"; 1715 | } 1716 | .wi-owm-night-620:before { 1717 | content: "\f026"; 1718 | } 1719 | .wi-owm-night-621:before { 1720 | content: "\f02a"; 1721 | } 1722 | .wi-owm-night-622:before { 1723 | content: "\f02a"; 1724 | } 1725 | .wi-owm-night-701:before { 1726 | content: "\f029"; 1727 | } 1728 | .wi-owm-night-711:before { 1729 | content: "\f062"; 1730 | } 1731 | .wi-owm-night-721:before { 1732 | content: "\f0b6"; 1733 | } 1734 | .wi-owm-night-731:before { 1735 | content: "\f063"; 1736 | } 1737 | .wi-owm-night-741:before { 1738 | content: "\f04a"; 1739 | } 1740 | .wi-owm-night-761:before { 1741 | content: "\f063"; 1742 | } 1743 | .wi-owm-night-762:before { 1744 | content: "\f063"; 1745 | } 1746 | .wi-owm-night-781:before { 1747 | content: "\f056"; 1748 | } 1749 | .wi-owm-night-800:before { 1750 | content: "\f02e"; 1751 | } 1752 | .wi-owm-night-801:before { 1753 | content: "\f022"; 1754 | } 1755 | .wi-owm-night-802:before { 1756 | content: "\f022"; 1757 | } 1758 | .wi-owm-night-803:before { 1759 | content: "\f022"; 1760 | } 1761 | .wi-owm-night-804:before { 1762 | content: "\f086"; 1763 | } 1764 | .wi-owm-night-900:before { 1765 | content: "\f056"; 1766 | } 1767 | .wi-owm-night-902:before { 1768 | content: "\f073"; 1769 | } 1770 | .wi-owm-night-903:before { 1771 | content: "\f076"; 1772 | } 1773 | .wi-owm-night-904:before { 1774 | content: "\f072"; 1775 | } 1776 | .wi-owm-night-906:before { 1777 | content: "\f024"; 1778 | } 1779 | .wi-owm-night-957:before { 1780 | content: "\f050"; 1781 | } 1782 | .wi-wu-chanceflurries:before { 1783 | content: "\f064"; 1784 | } 1785 | .wi-wu-chancerain:before { 1786 | content: "\f019"; 1787 | } 1788 | .wi-wu-chancesleat:before { 1789 | content: "\f0b5"; 1790 | } 1791 | .wi-wu-chancesnow:before { 1792 | content: "\f01b"; 1793 | } 1794 | .wi-wu-chancetstorms:before { 1795 | content: "\f01e"; 1796 | } 1797 | .wi-wu-clear:before { 1798 | content: "\f00d"; 1799 | } 1800 | .wi-wu-cloudy:before { 1801 | content: "\f002"; 1802 | } 1803 | .wi-wu-flurries:before { 1804 | content: "\f064"; 1805 | } 1806 | .wi-wu-hazy:before { 1807 | content: "\f0b6"; 1808 | } 1809 | .wi-wu-mostlycloudy:before { 1810 | content: "\f002"; 1811 | } 1812 | .wi-wu-mostlysunny:before { 1813 | content: "\f00d"; 1814 | } 1815 | .wi-wu-partlycloudy:before { 1816 | content: "\f002"; 1817 | } 1818 | .wi-wu-partlysunny:before { 1819 | content: "\f00d"; 1820 | } 1821 | .wi-wu-rain:before { 1822 | content: "\f01a"; 1823 | } 1824 | .wi-wu-sleat:before { 1825 | content: "\f0b5"; 1826 | } 1827 | .wi-wu-snow:before { 1828 | content: "\f01b"; 1829 | } 1830 | .wi-wu-sunny:before { 1831 | content: "\f00d"; 1832 | } 1833 | .wi-wu-tstorms:before { 1834 | content: "\f01e"; 1835 | } 1836 | .wi-wu-unknown:before { 1837 | content: "\f00d"; 1838 | } 1839 | -------------------------------------------------------------------------------- /fonts/hue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | --------------------------------------------------------------------------------