Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MMM-DynamicWeather.css 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. .MMM-DynamicWeather .flake-downwards {
  2. position: absolute;
  3. top: -50px;
  4. animation-name: flake-downwards;
  5. animation-iteration-count: infinite;
  6. }
  7. .MMM-DynamicWeather .flake-upwards {
  8. position: absolute;
  9. top: -50px;
  10. animation-name: flake-upwards;
  11. animation-iteration-count: infinite;
  12. }
  13. .MMM-DynamicWeather .flake-right-left {
  14. position: absolute;
  15. animation-name: flake-right-left;
  16. animation-iteration-count: infinite;
  17. }
  18. .MMM-DynamicWeather .flake-left-right {
  19. position: absolute;
  20. animation-name: flake-left-right;
  21. animation-iteration-count: infinite;
  22. }
  23. .MMM-DynamicWeather *[class|="flake"] div {
  24. width: 20px;
  25. height: 20px;
  26. background-repeat: no-repeat;
  27. background-size: contain;
  28. animation-iteration-count: infinite;
  29. }
  30. /* Animate opacity */
  31. @keyframes fade {
  32. from {
  33. opacity: 1;
  34. }
  35. to {
  36. opacity: 0;
  37. }
  38. }
  39. @keyframes flake-downwards {
  40. from {
  41. transform: translateY(0vh);
  42. }
  43. to {
  44. transform: translateY(100vh);
  45. }
  46. }
  47. @keyframes flake-upwards {
  48. from {
  49. transform: translateY(calc(100vh + 20px));
  50. }
  51. to {
  52. transform: translateY(0vh);
  53. }
  54. }
  55. @keyframes flake-left-right {
  56. from {
  57. transform: translateX(0vw);
  58. }
  59. to {
  60. transform: translateX(calc(100vw + 60px));
  61. }
  62. }
  63. @keyframes flake-right-left {
  64. from {
  65. transform: translateX(calc(100vw + 60px));
  66. }
  67. to {
  68. transform: translateX(0vw);
  69. }
  70. }
  71. @keyframes flake-jiggle {
  72. 0% {
  73. transform: translateX(0vw);
  74. }
  75. 20% {
  76. transform: translateX(20vw);
  77. }
  78. 30% {
  79. transform: translateX(5vw);
  80. }
  81. 50% {
  82. transform: translateX(25vw);
  83. }
  84. 70% {
  85. transform: translateX(0vw);
  86. }
  87. 85% {
  88. transform: translateX(15vw);
  89. }
  90. 100% {
  91. transform: translateX(0vw);
  92. }
  93. }
  94. @keyframes flake-jiggle-left-right {
  95. 0% {
  96. transform: translateX(0vw);
  97. }
  98. 100% {
  99. transform: translateX(150vw);
  100. }
  101. }
  102. @keyframes flake-jiggle-right-left {
  103. 0% {
  104. transform: translateX(0vw);
  105. }
  106. 100% {
  107. transform: translateX(-150vw);
  108. }
  109. }
  110. /********************
  111. RAIN CSS
  112. *********************/
  113. .MMM-DynamicWeather .rain {
  114. position: absolute;
  115. left: 0;
  116. width: 100%;
  117. height: 100%;
  118. z-index: 2;
  119. }
  120. .MMM-DynamicWeather .rain.back-row {
  121. display: none;
  122. z-index: 1;
  123. bottom: 60px;
  124. opacity: 0.5;
  125. }
  126. .MMM-DynamicWeather div.back-row-toggle .rain.back-row {
  127. display: block;
  128. }
  129. .MMM-DynamicWeather .drop {
  130. position: absolute;
  131. bottom: 100%;
  132. width: 15px;
  133. height: 120px;
  134. pointer-events: none;
  135. animation: drop 0.5s linear infinite;
  136. }
  137. @keyframes drop {
  138. 0% {
  139. transform: translateY(0vh);
  140. }
  141. 75% {
  142. transform: translateY(90vh);
  143. }
  144. 100% {
  145. transform: translateY(90vh);
  146. }
  147. }
  148. .MMM-DynamicWeather .stem {
  149. width: 3px;
  150. height: 60%;
  151. margin-left: 7px;
  152. background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.25));
  153. animation: stem 0.5s linear infinite;
  154. }
  155. @keyframes stem {
  156. 0% {
  157. opacity: 1;
  158. }
  159. 65% {
  160. opacity: 1;
  161. }
  162. 75% {
  163. opacity: 0;
  164. }
  165. 100% {
  166. opacity: 0;
  167. }
  168. }
  169. /******************************
  170. Clouds
  171. https://codepen.io/Mark_Bowley/pen/xEbuI
  172. ******************************/
  173. /* KEYFRAMES */
  174. @-webkit-keyframes animateCloud {
  175. 0% {
  176. margin-left: -1000px;
  177. }
  178. 100% {
  179. margin-left: 100%;
  180. }
  181. }
  182. @-moz-keyframes animateCloud {
  183. 0% {
  184. margin-left: -1000px;
  185. }
  186. 100% {
  187. margin-left: 100%;
  188. }
  189. }
  190. @keyframes animateCloud {
  191. 0% {
  192. margin-left: -1000px;
  193. }
  194. 100% {
  195. margin-left: 100%;
  196. }
  197. }
  198. /* OBJECTS */
  199. .MMM-DynamicWeather .cloud {
  200. opacity: 0.5;
  201. background: #fff;
  202. background: -moz-linear-gradient(top, #fff 5%, #f1f1f1 100%);
  203. background: -webkit-gradient(linear, left top, left bottom, color-stop(5%, #fff), color-stop(100%, #f1f1f1));
  204. background: -webkit-linear-gradient(top, #fff 5%, #f1f1f1 100%);
  205. background: -o-linear-gradient(top, #fff 5%, #f1f1f1 100%);
  206. background: -ms-linear-gradient(top, #fff 5%, #f1f1f1 100%);
  207. background: linear-gradient(top, #fff 5%, #f1f1f1 100%);
  208. filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f1f1f1',GradientType=0 );
  209. -webkit-border-radius: 100px;
  210. -moz-border-radius: 100px;
  211. border-radius: 100px;
  212. -webkit-box-shadow: 0 8px 5px rgba(0, 0, 0, 0.1);
  213. -moz-box-shadow: 0 8px 5px rgba(0, 0, 0, 0.1);
  214. box-shadow: 0 8px 5px rgba(0, 0, 0, 0.1);
  215. height: 120px;
  216. position: relative;
  217. width: 350px;
  218. }
  219. .MMM-DynamicWeather .cloud:after,
  220. .cloud:before {
  221. background: #fff;
  222. content: "";
  223. position: absolute;
  224. z-index: -1;
  225. }
  226. .MMM-DynamicWeather .cloud:after {
  227. -webkit-border-radius: 100px;
  228. -moz-border-radius: 100px;
  229. border-radius: 100px;
  230. height: 100px;
  231. left: 50px;
  232. top: -50px;
  233. width: 100px;
  234. }
  235. .MMM-DynamicWeather .cloud:before {
  236. -webkit-border-radius: 200px;
  237. -moz-border-radius: 200px;
  238. border-radius: 200px;
  239. width: 180px;
  240. height: 180px;
  241. right: 50px;
  242. top: -90px;
  243. }
  244. /***************************
  245. Fog
  246. https://codepen.io/Ravyre/pen/gXawyY
  247. ***************************/
  248. /* ---------- Fog ---------- */
  249. .MMM-DynamicWeather .fogwrapper {
  250. height: 150%;
  251. position: absolute;
  252. top: -150px;
  253. width: 100%;
  254. -webkit-filter: blur(1px) grayscale(0.2) saturate(1.2) sepia(0.2);
  255. filter: blur(1px) grayscale(0.2) saturate(1.2) sepia(0.2);
  256. }
  257. .MMM-DynamicWeather #foglayer_01,
  258. .MMM-DynamicWeather #foglayer_02,
  259. .MMM-DynamicWeather #foglayer_03 {
  260. height: 150%;
  261. position: absolute;
  262. width: 500%;
  263. top: -150px;
  264. }
  265. .MMM-DynamicWeather #foglayer_01 .image01,
  266. .MMM-DynamicWeather #foglayer_01 .image02,
  267. .MMM-DynamicWeather #foglayer_02 .image01,
  268. .MMM-DynamicWeather #foglayer_02 .image02,
  269. .MMM-DynamicWeather #foglayer_03 .image01,
  270. .MMM-DynamicWeather #foglayer_03 .image02 {
  271. float: left;
  272. height: 150%;
  273. top: -150px;
  274. width: 100%;
  275. }
  276. .MMM-DynamicWeather #foglayer_01,
  277. .MMM-DynamicWeather #foglayer_02,
  278. .MMM-DynamicWeather #foglayer_03 {
  279. animation: foglayer_01_opacity 10s linear infinite, foglayer_moveme 10s linear infinite;
  280. }
  281. .MMM-DynamicWeather #foglayer_01 .image01,
  282. .MMM-DynamicWeather #foglayer_01 .image02 {
  283. background: url("images/fog1.png") center center/cover no-repeat transparent;
  284. }
  285. .MMM-DynamicWeather #foglayer_02 .image01,
  286. .MMM-DynamicWeather #foglayer_02 .image02,
  287. .MMM-DynamicWeather #foglayer_03 .image01,
  288. .MMM-DynamicWeather #foglayer_03 .image02 {
  289. background: url("images/fog2.png") center center/cover no-repeat transparent;
  290. }
  291. /* ---------- Keyframe Layer 1 ---------- */
  292. @keyframes foglayer_01_opacity {
  293. 0% {
  294. opacity: 0;
  295. }
  296. 50% {
  297. opacity: 0.7;
  298. }
  299. 100% {
  300. opacity: 0;
  301. }
  302. }
  303. /* ---------- Keyframe moveMe ---------- */
  304. @keyframes foglayer_moveme {
  305. 0% {
  306. left: 0;
  307. }
  308. 100% {
  309. left: -100%;
  310. }
  311. }
  312. /***************************
  313. Lightning
  314. ***************************/
  315. .MMM-DynamicWeather .lightningPlayer {
  316. height: 100%;
  317. position: absolute;
  318. top: -10px;
  319. left: 0px;
  320. width: 100%;
  321. display: block;
  322. }
  323. .MMM-DynamicWeather .lightning1 {
  324. height: 100%;
  325. position: absolute;
  326. top: -10px;
  327. left: 0px;
  328. width: 100%;
  329. background: url("images/lightning1.png") center center/cover no-repeat transparent;
  330. animation: lightning1_opacity 14s linear;
  331. animation-fill-mode: forwards;
  332. animation-delay: 0s;
  333. }
  334. .MMM-DynamicWeather .lightning2 {
  335. height: 100%;
  336. position: absolute;
  337. top: -10px;
  338. left: 0px;
  339. width: 100%;
  340. background: url("images/lightning2.png") center center/cover no-repeat transparent;
  341. animation: lightning2_opacity 14s linear;
  342. animation-fill-mode: forwards;
  343. animation-delay: 0s;
  344. }
  345. @keyframes lightningPlayer_opacity {
  346. 0% {
  347. opacity: 1;
  348. }
  349. 100% {
  350. opacity: 0;
  351. }
  352. }
  353. @keyframes lightning1_opacity {
  354. 0% {
  355. opacity: 0;
  356. }
  357. 49% {
  358. opacity: 0;
  359. }
  360. 50% {
  361. opacity: 0.8;
  362. }
  363. 55% {
  364. opacity: 0;
  365. }
  366. 100% {
  367. opacity: 0;
  368. }
  369. }
  370. @keyframes lightning2_opacity {
  371. 0% {
  372. opacity: 0;
  373. }
  374. 19% {
  375. opacity: 0;
  376. }
  377. 20% {
  378. opacity: 0.8;
  379. }
  380. 25% {
  381. opacity: 0;
  382. }
  383. 59% {
  384. opacity: 0;
  385. }
  386. 60% {
  387. opacity: 0.8;
  388. }
  389. 65% {
  390. opacity: 0;
  391. }
  392. 100% {
  393. opacity: 0;
  394. }
  395. }
  396. /***************************
  397. Sunny
  398. ***************************/
  399. .MMM-DynamicWeather .sunnyPlayer {
  400. height: 100%;
  401. width: 100%;
  402. position: absolute;
  403. display: block;
  404. opacity: .4;
  405. }
  406. .MMM-DynamicWeather .sun {
  407. height: 100%;
  408. width: 100%;
  409. position: absolute;
  410. opacity: .4;
  411. }
  412. /***************************
  413. Snowman
  414. ***************************/
  415. .MMM-DynamicWeather .snowman {
  416. width: 350px !important;
  417. bottom: 20px;
  418. left: 25%;
  419. position: absolute;
  420. display: block;
  421. height: 100px !important;
  422. background: url("images/SNOWMAN_1.png") center center/cover no-repeat transparent;
  423. animation: snowmanBg linear;
  424. animation-fill-mode: forwards;
  425. animation-duration: 60;
  426. /* animation-delay: 10s; */
  427. }
  428. @keyframes snowmanBg {
  429. 0% {
  430. background-image: url("images/SNOWMAN_1.png");
  431. height: 100px;
  432. }
  433. 10% {
  434. background-image: url("images/SNOWMAN_1.png");
  435. height: 100px;
  436. }
  437. 20% {
  438. background-image: url("images/SNOWMAN_2.png");
  439. height: 200px;
  440. }
  441. 30% {
  442. background-image: url("images/SNOWMAN_3.png");
  443. height: 300px;
  444. }
  445. 40% {
  446. background-image: url("images/SNOWMAN_4.png");
  447. height: 375px;
  448. }
  449. 50% {
  450. background-image: url("images/SNOWMAN_5.png");
  451. height: 450px;
  452. }
  453. 60% {
  454. background-image: url("images/SNOWMAN_6.png");
  455. height: 600px;
  456. }
  457. 70% {
  458. background-image: url("images/SNOWMAN_7.png");
  459. height: 625px;
  460. }
  461. 80% {
  462. background-image: url("images/SNOWMAN_8.png");
  463. height: 625px;
  464. }
  465. 90% {
  466. background-image: url("images/SNOWMAN_9.png");
  467. height: 650px;
  468. }
  469. 100% {
  470. background-image: url("images/SNOWMAN_9.png");
  471. height: 650px;
  472. }
  473. }
  474. /***************************
  475. Flower
  476. ***************************/
  477. .MMM-DynamicWeather .flower {
  478. width: 400px !important;
  479. bottom: 20px;
  480. left: 25%;
  481. position: absolute;
  482. display: block;
  483. height: 250px !important;
  484. background: url("images/FLOWER_1.png") center center/cover no-repeat transparent;
  485. animation: flowerBg linear;
  486. animation-fill-mode: forwards;
  487. animation-delay: 10s;
  488. }
  489. @keyframes flowerBg {
  490. 0%, 10% {
  491. background-image: url("images/FLOWER_1.png");
  492. height: 250px;
  493. }
  494. 20% {
  495. background-image: url("images/FLOWER_2.png");
  496. height: 350px;
  497. }
  498. 30% {
  499. background-image: url("images/FLOWER_3.png");
  500. height: 400px;
  501. }
  502. 40% {
  503. background-image: url("images/FLOWER_4.png");
  504. height: 450px;
  505. }
  506. 50% {
  507. background-image: url("images/FLOWER_5.png");
  508. height: 500px;
  509. }
  510. 60% {
  511. background-image: url("images/FLOWER_6.png");
  512. height: 600px;
  513. }
  514. 70% {
  515. background-image: url("images/FLOWER_7.png");
  516. height: 650px;
  517. }
  518. 80%, 100% {
  519. background-image: url("images/FLOWER_8.png");
  520. height: 650px;
  521. }
  522. }