Compare commits
	
		
			8 Commits
		
	
	
		
			v1.11.0-rc
			...
			feat/deep-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 83f1c6ce12 | ||
|  | fd6c58734d | ||
|  | 114a7aa09d | ||
|  | d0ba8c9038 | ||
|  | 934fb0a23b | ||
|  | 8ecf3b4e99 | ||
|  | b5ee8386e7 | ||
|  | 0fcd598ff7 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -37,5 +37,3 @@ Thumbs.db | ||||
| # Db | ||||
| db.sqlite | ||||
| /searxng | ||||
|  | ||||
| certificates | ||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -16,7 +16,7 @@ | ||||
|  | ||||
| <hr/> | ||||
|  | ||||
| [](https://discord.gg/26aArMy8tT) | ||||
| [](https://discord.gg/26aArMy8tT) | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -90,9 +90,6 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker. | ||||
|    - `OLLAMA`: Your Ollama API URL. You should enter it as `http://host.docker.internal:PORT_NUMBER`. If you installed Ollama on port 11434, use `http://host.docker.internal:11434`. For other ports, adjust accordingly. **You need to fill this if you wish to use Ollama's models instead of OpenAI's**. | ||||
|    - `GROQ`: Your Groq API key. **You only need to fill this if you wish to use Groq's hosted models**. | ||||
|    - `ANTHROPIC`: Your Anthropic API key. **You only need to fill this if you wish to use Anthropic models**. | ||||
|    - `Gemini`: Your Gemini API key. **You only need to fill this if you wish to use Google's models**. | ||||
|    - `DEEPSEEK`: Your Deepseek API key. **Only needed if you want Deepseek models.** | ||||
|    - `AIMLAPI`: Your AI/ML API key. **Only needed if you want to use AI/ML API models and embeddings.** | ||||
|  | ||||
|      **Note**: You can change these after starting Perplexica from the settings dialog. | ||||
|  | ||||
| @@ -114,7 +111,7 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker. | ||||
| 2. Clone the repository and rename the `sample.config.toml` file to `config.toml` in the root directory. Ensure you complete all required fields in this file. | ||||
| 3. After populating the configuration run `npm i`. | ||||
| 4. Install the dependencies and then execute `npm run build`. | ||||
| 5. Finally, start the app by running `npm run start` | ||||
| 5. Finally, start the app by running `npm rum start` | ||||
|  | ||||
| **Note**: Using Docker is recommended as it simplifies the setup process, especially for managing environment variables and dependencies. | ||||
|  | ||||
| @@ -135,7 +132,7 @@ If you're encountering an Ollama connection error, it is likely due to the backe | ||||
|  | ||||
| 3. **Linux Users - Expose Ollama to Network:** | ||||
|  | ||||
|    - Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0:11434"`. (Change the port number if you are using a different one.) Then reload the systemd manager configuration with `systemctl daemon-reload`, and restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux) | ||||
|    - Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0"`. Then restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux) | ||||
|  | ||||
|    - Ensure that the port (default is 11434) is not blocked by your firewall. | ||||
|  | ||||
| @@ -162,7 +159,6 @@ Perplexica runs on Next.js and handles all API requests. It works right away on | ||||
|  | ||||
| [](https://usw.sealos.io/?openapp=system-template%3FtemplateName%3Dperplexica) | ||||
| [](https://repocloud.io/details/?app_id=267) | ||||
| [](https://template.run.claw.cloud/?referralCode=U11MRQ8U9RM4&openapp=system-fastdeploy%3FtemplateName%3Dperplexica) | ||||
|  | ||||
| ## Upcoming Features | ||||
|  | ||||
|   | ||||
| @@ -12,9 +12,6 @@ COPY public ./public | ||||
| RUN mkdir -p /home/perplexica/data | ||||
| RUN yarn build | ||||
|  | ||||
| RUN yarn add --dev @vercel/ncc | ||||
| RUN yarn ncc build ./src/lib/db/migrate.ts -o migrator | ||||
|  | ||||
| FROM node:20.18.0-slim | ||||
|  | ||||
| WORKDIR /home/perplexica | ||||
| @@ -24,12 +21,7 @@ COPY --from=builder /home/perplexica/.next/static ./public/_next/static | ||||
|  | ||||
| COPY --from=builder /home/perplexica/.next/standalone ./ | ||||
| COPY --from=builder /home/perplexica/data ./data | ||||
| COPY drizzle ./drizzle | ||||
| COPY --from=builder /home/perplexica/migrator/build ./build | ||||
| COPY --from=builder /home/perplexica/migrator/index.js ./migrate.js | ||||
|  | ||||
| RUN mkdir /home/perplexica/uploads | ||||
|  | ||||
| COPY entrypoint.sh ./entrypoint.sh | ||||
| RUN chmod +x ./entrypoint.sh | ||||
| CMD ["./entrypoint.sh"] | ||||
| CMD ["node", "server.js"] | ||||
| @@ -16,7 +16,6 @@ services: | ||||
|       dockerfile: app.dockerfile | ||||
|     environment: | ||||
|       - SEARXNG_API_URL=http://searxng:8080 | ||||
|       - DATA_DIR=/home/perplexica | ||||
|     ports: | ||||
|       - 3000:3000 | ||||
|     networks: | ||||
|   | ||||
| @@ -41,6 +41,6 @@ To update Perplexica to the latest version, follow these steps: | ||||
| 3. Check for changes in the configuration files. If the `sample.config.toml` file contains new fields, delete your existing `config.toml` file, rename `sample.config.toml` to `config.toml`, and update the configuration accordingly. | ||||
| 4. After populating the configuration run `npm i`. | ||||
| 5. Install the dependencies and then execute `npm run build`. | ||||
| 6. Finally, start the app by running `npm run start` | ||||
| 6. Finally, start the app by running `npm rum start` | ||||
|  | ||||
| --- | ||||
|   | ||||
| @@ -1,11 +1,10 @@ | ||||
| import { defineConfig } from 'drizzle-kit'; | ||||
| import path from 'path'; | ||||
|  | ||||
| export default defineConfig({ | ||||
|   dialect: 'sqlite', | ||||
|   schema: './src/lib/db/schema.ts', | ||||
|   out: './drizzle', | ||||
|   dbCredentials: { | ||||
|     url: path.join(process.cwd(), 'data', 'db.sqlite'), | ||||
|     url: './data/db.sqlite', | ||||
|   }, | ||||
| }); | ||||
|   | ||||
| @@ -1,16 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS `chats` ( | ||||
| 	`id` text PRIMARY KEY NOT NULL, | ||||
| 	`title` text NOT NULL, | ||||
| 	`createdAt` text NOT NULL, | ||||
| 	`focusMode` text NOT NULL, | ||||
| 	`files` text DEFAULT '[]' | ||||
| ); | ||||
| --> statement-breakpoint | ||||
| CREATE TABLE IF NOT EXISTS `messages` ( | ||||
| 	`id` integer PRIMARY KEY NOT NULL, | ||||
| 	`content` text NOT NULL, | ||||
| 	`chatId` text NOT NULL, | ||||
| 	`messageId` text NOT NULL, | ||||
| 	`type` text, | ||||
| 	`metadata` text | ||||
| ); | ||||
| @@ -1,116 +0,0 @@ | ||||
| { | ||||
|   "version": "6", | ||||
|   "dialect": "sqlite", | ||||
|   "id": "ef3a044b-0f34-40b5-babb-2bb3a909ba27", | ||||
|   "prevId": "00000000-0000-0000-0000-000000000000", | ||||
|   "tables": { | ||||
|     "chats": { | ||||
|       "name": "chats", | ||||
|       "columns": { | ||||
|         "id": { | ||||
|           "name": "id", | ||||
|           "type": "text", | ||||
|           "primaryKey": true, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "title": { | ||||
|           "name": "title", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "createdAt": { | ||||
|           "name": "createdAt", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "focusMode": { | ||||
|           "name": "focusMode", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "files": { | ||||
|           "name": "files", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": false, | ||||
|           "autoincrement": false, | ||||
|           "default": "'[]'" | ||||
|         } | ||||
|       }, | ||||
|       "indexes": {}, | ||||
|       "foreignKeys": {}, | ||||
|       "compositePrimaryKeys": {}, | ||||
|       "uniqueConstraints": {}, | ||||
|       "checkConstraints": {} | ||||
|     }, | ||||
|     "messages": { | ||||
|       "name": "messages", | ||||
|       "columns": { | ||||
|         "id": { | ||||
|           "name": "id", | ||||
|           "type": "integer", | ||||
|           "primaryKey": true, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "content": { | ||||
|           "name": "content", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "chatId": { | ||||
|           "name": "chatId", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "messageId": { | ||||
|           "name": "messageId", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": true, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "type": { | ||||
|           "name": "type", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": false, | ||||
|           "autoincrement": false | ||||
|         }, | ||||
|         "metadata": { | ||||
|           "name": "metadata", | ||||
|           "type": "text", | ||||
|           "primaryKey": false, | ||||
|           "notNull": false, | ||||
|           "autoincrement": false | ||||
|         } | ||||
|       }, | ||||
|       "indexes": {}, | ||||
|       "foreignKeys": {}, | ||||
|       "compositePrimaryKeys": {}, | ||||
|       "uniqueConstraints": {}, | ||||
|       "checkConstraints": {} | ||||
|     } | ||||
|   }, | ||||
|   "views": {}, | ||||
|   "enums": {}, | ||||
|   "_meta": { | ||||
|     "schemas": {}, | ||||
|     "tables": {}, | ||||
|     "columns": {} | ||||
|   }, | ||||
|   "internal": { | ||||
|     "indexes": {} | ||||
|   } | ||||
| } | ||||
| @@ -1,13 +0,0 @@ | ||||
| { | ||||
|   "version": "7", | ||||
|   "dialect": "sqlite", | ||||
|   "entries": [ | ||||
|     { | ||||
|       "idx": 0, | ||||
|       "version": "6", | ||||
|       "when": 1748405503809, | ||||
|       "tag": "0000_fuzzy_randall", | ||||
|       "breakpoints": true | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,6 +0,0 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
|  | ||||
| node migrate.js | ||||
|  | ||||
| exec node server.js | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "perplexica-frontend", | ||||
|   "version": "1.11.0-rc2", | ||||
|   "version": "1.10.2", | ||||
|   "license": "MIT", | ||||
|   "author": "ItzCrazyKns", | ||||
|   "scripts": { | ||||
| @@ -30,10 +30,8 @@ | ||||
|     "compute-dot": "^1.1.0", | ||||
|     "drizzle-orm": "^0.40.1", | ||||
|     "html-to-text": "^9.0.5", | ||||
|     "jspdf": "^3.0.1", | ||||
|     "langchain": "^0.1.30", | ||||
|     "lucide-react": "^0.363.0", | ||||
|     "mammoth": "^1.9.1", | ||||
|     "markdown-to-jsx": "^7.7.2", | ||||
|     "next": "^15.2.2", | ||||
|     "next-themes": "^0.3.0", | ||||
| @@ -51,7 +49,6 @@ | ||||
|   "devDependencies": { | ||||
|     "@types/better-sqlite3": "^7.6.12", | ||||
|     "@types/html-to-text": "^9.0.4", | ||||
|     "@types/jspdf": "^2.0.0", | ||||
|     "@types/node": "^20", | ||||
|     "@types/pdf-parse": "^1.1.4", | ||||
|     "@types/react": "^18", | ||||
|   | ||||
| Before Width: | Height: | Size: 916 B | 
| Before Width: | Height: | Size: 515 B | 
							
								
								
									
										
											BIN
										
									
								
								public/icon.png
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 183 KiB | 
| Before Width: | Height: | Size: 130 KiB | 
| Before Width: | Height: | Size: 627 KiB | 
| Before Width: | Height: | Size: 202 KiB | 
| @@ -1,131 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.34167" y="-.34167" width="1.6833" height="1.85"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-sun-shiny { | ||||
|         0% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           stroke-dasharray: 0.1px 10px; | ||||
|           stroke-dashoffset: -1px; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun-shiny line { | ||||
|         -webkit-animation-name: am-weather-sun-shiny; | ||||
|         -moz-animation-name: am-weather-sun-shiny; | ||||
|         -ms-animation-name: am-weather-sun-shiny; | ||||
|         animation-name: am-weather-sun-shiny; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 4.9 KiB | 
| @@ -1,159 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.3038" y="-.3318" width="1.6076" height="1.894"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g id="night" transform="translate(-4,-18)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .78534 36 20.022)" stroke-width="1.2616"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5" fill="#ffa500" stroke-miterlimit="10" | ||||
|           stroke-width="1.4105" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5" | ||||
|           fill="#ffa500" stroke-miterlimit="10" stroke-width="1.4105" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2.5232" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 6.7 KiB | 
| @@ -1,178 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.28472" width="1.403" height="1.6944"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-sun-shiny { | ||||
|         0% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           stroke-dasharray: 0.1px 10px; | ||||
|           stroke-dashoffset: -1px; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun-shiny line { | ||||
|         -webkit-animation-name: am-weather-sun-shiny; | ||||
|         -moz-animation-name: am-weather-sun-shiny; | ||||
|         -ms-animation-name: am-weather-sun-shiny; | ||||
|         animation-name: am-weather-sun-shiny; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-2" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#c6deff" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 6.8 KiB | 
| @@ -1,206 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.19471" y="-.26087" width="1.3744" height="1.6884"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-2" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#c6deff" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 8.6 KiB | 
| @@ -1,244 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** FOG | ||||
| */ | ||||
|       @keyframes am-weather-fog-1 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           transform: translate(7px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-1 { | ||||
|         -webkit-animation-name: am-weather-fog-1; | ||||
|         -moz-animation-name: am-weather-fog-1; | ||||
|         -ms-animation-name: am-weather-fog-1; | ||||
|         animation-name: am-weather-fog-1; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-2 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         21.05% { | ||||
|           transform: translate(-6px, 0px) | ||||
|         } | ||||
|  | ||||
|         78.95% { | ||||
|           transform: translate(9px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-2 { | ||||
|         -webkit-animation-name: am-weather-fog-2; | ||||
|         -moz-animation-name: am-weather-fog-2; | ||||
|         -ms-animation-name: am-weather-fog-2; | ||||
|         animation-name: am-weather-fog-2; | ||||
|         -webkit-animation-duration: 20s; | ||||
|         -moz-animation-duration: 20s; | ||||
|         -ms-animation-duration: 20s; | ||||
|         animation-duration: 20s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-3 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         25% { | ||||
|           transform: translate(4px, 0px) | ||||
|         } | ||||
|  | ||||
|         75% { | ||||
|           transform: translate(-4px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-3 { | ||||
|         -webkit-animation-name: am-weather-fog-3; | ||||
|         -moz-animation-name: am-weather-fog-3; | ||||
|         -ms-animation-name: am-weather-fog-3; | ||||
|         animation-name: am-weather-fog-3; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-4 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           transform: translate(-4px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-4 { | ||||
|         -webkit-animation-name: am-weather-fog-4; | ||||
|         -moz-animation-name: am-weather-fog-4; | ||||
|         -ms-animation-name: am-weather-fog-4; | ||||
|         animation-name: am-weather-fog-4; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" transform="translate(0,16)"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" />F | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffc04a" stroke="#ffc04a" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-fog" transform="translate(-10,20)" fill="none" stroke="#c6deff" stroke-linecap="round" | ||||
|       stroke-width="2"> | ||||
|       <line class="am-weather-fog-1" y1="0" y2="0" x1="1" x2="37" stroke-dasharray="3, 5, 17, 5, 7" /> | ||||
|       <line class="am-weather-fog-2" y1="5" y2="5" x1="9" x2="33" stroke-dasharray="11, 7, 15" /> | ||||
|       <line class="am-weather-fog-3" y1="10" y2="10" x1="5" x2="40" stroke-dasharray="11, 7, 3, 5, 9" /> | ||||
|       <line class="am-weather-fog-4" y1="15" y2="15" x1="7" x2="42" stroke-dasharray="13, 5, 9, 5, 3" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 8.0 KiB | 
| @@ -1,309 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** FOG | ||||
| */ | ||||
|       @keyframes am-weather-fog-1 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           transform: translate(7px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-1 { | ||||
|         -webkit-animation-name: am-weather-fog-1; | ||||
|         -moz-animation-name: am-weather-fog-1; | ||||
|         -ms-animation-name: am-weather-fog-1; | ||||
|         animation-name: am-weather-fog-1; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-2 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         21.05% { | ||||
|           transform: translate(-6px, 0px) | ||||
|         } | ||||
|  | ||||
|         78.95% { | ||||
|           transform: translate(9px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-2 { | ||||
|         -webkit-animation-name: am-weather-fog-2; | ||||
|         -moz-animation-name: am-weather-fog-2; | ||||
|         -ms-animation-name: am-weather-fog-2; | ||||
|         animation-name: am-weather-fog-2; | ||||
|         -webkit-animation-duration: 20s; | ||||
|         -moz-animation-duration: 20s; | ||||
|         -ms-animation-duration: 20s; | ||||
|         animation-duration: 20s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-3 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         25% { | ||||
|           transform: translate(4px, 0px) | ||||
|         } | ||||
|  | ||||
|         75% { | ||||
|           transform: translate(-4px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-3 { | ||||
|         -webkit-animation-name: am-weather-fog-3; | ||||
|         -moz-animation-name: am-weather-fog-3; | ||||
|         -ms-animation-name: am-weather-fog-3; | ||||
|         animation-name: am-weather-fog-3; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-fog-4 { | ||||
|         0% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           transform: translate(-4px, 0px) | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           transform: translate(0px, 0px) | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-fog-4 { | ||||
|         -webkit-animation-name: am-weather-fog-4; | ||||
|         -moz-animation-name: am-weather-fog-4; | ||||
|         -ms-animation-name: am-weather-fog-4; | ||||
|         animation-name: am-weather-fog-4; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffc04a" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffc04a" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffc04a" stroke="#ffc04a" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-fog" transform="translate(-10,20)" fill="none" stroke="#c6deff" stroke-linecap="round" | ||||
|       stroke-width="2"> | ||||
|       <line class="am-weather-fog-1" y1="0" y2="0" x1="1" x2="37" stroke-dasharray="3, 5, 17, 5, 7" /> | ||||
|       <line class="am-weather-fog-2" y1="5" y2="5" x1="9" x2="33" stroke-dasharray="11, 7, 15" /> | ||||
|       <line class="am-weather-fog-3" y1="10" y2="10" x1="5" x2="40" stroke-dasharray="11, 7, 3, 5, 9" /> | ||||
|       <line class="am-weather-fog-4" y1="15" y2="15" x1="7" x2="42" stroke-dasharray="13, 5, 9, 5, 3" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,204 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** FROST | ||||
| */ | ||||
|       @keyframes am-weather-frost { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         1% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         3% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         5% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         7% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         9% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         11% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         13% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         15% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         16% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-frost { | ||||
|         -webkit-animation-name: am-weather-frost; | ||||
|         -moz-animation-name: am-weather-frost; | ||||
|         animation-name: am-weather-frost; | ||||
|         -webkit-animation-duration: 1.11s; | ||||
|         -moz-animation-duration: 1.11s; | ||||
|         animation-duration: 1.11s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" transform="translate(0,16)"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" />F | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffc04a" stroke="#ffc04a" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g transform="translate(-16,4)"> | ||||
|       <g class="am-weather-frost" stroke="#57a0ee" transform="translate(0,2)" fill="none" stroke-width="2" | ||||
|         stroke-linecap="round" | ||||
|         style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-frost;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-frost;-webkit-animation-timing-function:linear"> | ||||
|         <path d="M11,32H45" /> | ||||
|         <path d="M15.5,37H40.5" /> | ||||
|         <path d="M22.5,42H33.5" /> | ||||
|       </g> | ||||
|       <g> | ||||
|         <path stroke="#57a0ee" transform="translate(0,0)" fill="none" stroke-width="2" stroke-linecap="round" | ||||
|           d="M28,31V9M28,22l11,-3.67M34,20l2,-4M34,20l4,2M28,22l-11,-3.67M22,20l-2,-4M22,20l-4,2M28,14.27l3.01,-3.02M28,14.27l-3.01,-3.02" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 7.3 KiB | 
| @@ -1,269 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** FROST | ||||
| */ | ||||
|       @keyframes am-weather-frost { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         1% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         3% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         5% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         7% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         9% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         11% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         13% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         15% { | ||||
|           -webkit-transform: translate(-0.3px, 0.0px); | ||||
|           -moz-transform: translate(-0.3px, 0.0px); | ||||
|           -ms-transform: translate(-0.3px, 0.0px); | ||||
|           transform: translate(-0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         16% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-frost { | ||||
|         -webkit-animation-name: am-weather-frost; | ||||
|         -moz-animation-name: am-weather-frost; | ||||
|         animation-name: am-weather-frost; | ||||
|         -webkit-animation-duration: 1.11s; | ||||
|         -moz-animation-duration: 1.11s; | ||||
|         animation-duration: 1.11s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffc04a" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffc04a" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffc04a" stroke="#ffc04a" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g transform="translate(-16,4)"> | ||||
|       <g class="am-weather-frost" stroke="#57a0ee" transform="translate(0,2)" fill="none" stroke-width="2" | ||||
|         stroke-linecap="round" | ||||
|         style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-frost;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-frost;-webkit-animation-timing-function:linear"> | ||||
|         <path d="M11,32H45" /> | ||||
|         <path d="M15.5,37H40.5" /> | ||||
|         <path d="M22.5,42H33.5" /> | ||||
|       </g> | ||||
|       <g> | ||||
|         <path stroke="#57a0ee" transform="translate(0,0)" fill="none" stroke-width="2" stroke-linecap="round" | ||||
|           d="M28,31V9M28,22l11,-3.67M34,20l2,-4M34,20l4,2M28,22l-11,-3.67M22,20l-2,-4M22,20l-4,2M28,14.27l3.01,-3.02M28,14.27l-3.01,-3.02" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,141 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <!-- Mix of Rain and Sleet | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.24684" y="-.22776" width="1.4937" height="1.5756"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-2 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-delay: 0.25s; | ||||
|         -moz-animation-delay: 0.25s; | ||||
|         -ms-animation-delay: 0.25s; | ||||
|         animation-delay: 0.25s; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-3 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-3 { | ||||
|         -webkit-animation-name: am-weather-cloud-3; | ||||
|         -moz-animation-name: am-weather-cloud-3; | ||||
|         animation-name: am-weather-cloud-3; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-3;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-3;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-sleet-2" transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8" | ||||
|       stroke-linecap="round"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-5,1)" y2="8" stroke-dasharray="0.1, 7" stroke-width="2" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-1" transform="translate(5)" y2="8" stroke-dasharray="0.1, 7" stroke-width="2" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|     <g class="am-weather-rain-3" transform="translate(-20,-10) rotate(10,-245.89,217.31)" fill="none" stroke="#91c0f8" | ||||
|       stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-13,1)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-1" transform="translate(-3,2)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-2" transform="translate(7,-1)" y2="8" | ||||
|         style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 7.6 KiB | 
| @@ -1,179 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-rain-1" transform="translate(-20,-10) rotate(10,-238.68,233.96)"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-6,1)" y2="8" fill="none" stroke="#91c0f8" | ||||
|         stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 7.4 KiB | 
| @@ -1,243 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weaher-rain-1" transform="translate(-20,-10) rotate(10,-238.68,233.96)"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-6,1)" y2="8" fill="none" stroke="#91c0f8" | ||||
|         stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 10 KiB | 
| @@ -1,204 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.20592" width="1.403" height="1.4872"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-2 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-delay: 0.25s; | ||||
|         -moz-animation-delay: 0.25s; | ||||
|         -ms-animation-delay: 0.25s; | ||||
|         animation-delay: 0.25s; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" stroke="#ffa500" stroke-linecap="round" stroke-width="2" fifll="none" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g transform="translate(-20,-10) rotate(10,-245.89,217.31)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 7" stroke-linecap="round" | ||||
|       stroke-width="2"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-6,1)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-2" transform="translate(0,-1)" y2="8" | ||||
|         style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 8.8 KiB | 
| @@ -1,256 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-2 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-delay: 0.25s; | ||||
|         -moz-animation-delay: 0.25s; | ||||
|         -ms-animation-delay: 0.25s; | ||||
|         animation-delay: 0.25s; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g class="layer" transform="translate(16,-2)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-rain-2" transform="translate(-20,-10) rotate(10,34,46)" fill="none" stroke="#91c0f8" | ||||
|       stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-6,1)" x1="34" x2="34" y1="46" y2="54" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-2" transform="translate(0,-1)" x1="34" x2="34" y1="46" y2="54" | ||||
|         style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,206 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.24684" y="-.22892" width="1.4937" height="1.5576"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-2 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-delay: 0.25s; | ||||
|         -moz-animation-delay: 0.25s; | ||||
|         -ms-animation-delay: 0.25s; | ||||
|         animation-delay: 0.25s; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" stroke="#ffa500" stroke-linecap="round" stroke-width="2" fifll="none" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 4" | ||||
|       stroke-linecap="round" stroke-width="2"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-4,1)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-2" transform="translate(0,-1)" y2="8" | ||||
|         style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-1" transform="translate(4)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 9.3 KiB | 
| @@ -1,270 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.24684" y="-.22892" width="1.4937" height="1.5576"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** RAIN | ||||
| */ | ||||
|       @keyframes am-weather-rain { | ||||
|         0% { | ||||
|           stroke-dashoffset: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dashoffset: -100; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-1 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-rain-2 { | ||||
|         -webkit-animation-name: am-weather-rain; | ||||
|         -moz-animation-name: am-weather-rain; | ||||
|         -ms-animation-name: am-weather-rain; | ||||
|         animation-name: am-weather-rain; | ||||
|         -webkit-animation-delay: 0.25s; | ||||
|         -moz-animation-delay: 0.25s; | ||||
|         -ms-animation-delay: 0.25s; | ||||
|         animation-delay: 0.25s; | ||||
|         -webkit-animation-duration: 8s; | ||||
|         -moz-animation-duration: 8s; | ||||
|         -ms-animation-duration: 8s; | ||||
|         animation-duration: 8s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 4" | ||||
|       stroke-linecap="round" stroke-width="2"> | ||||
|       <line class="am-weather-rain-1" transform="translate(-4,1)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-2" transform="translate(0,-1)" y2="8" | ||||
|         style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|       <line class="am-weather-rain-1" transform="translate(4)" y2="8" | ||||
|         style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 12 KiB | 
| @@ -1,374 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <!-- Scattered Thunderstorms | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.1975" width="1.403" height="1.4766"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-3 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(-5px, 0px); | ||||
|           -moz-transform: translate(-5px, 0px); | ||||
|           -ms-transform: translate(-5px, 0px); | ||||
|           transform: translate(-5px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(10px, 0px); | ||||
|           -moz-transform: translate(10px, 0px); | ||||
|           -ms-transform: translate(10px, 0px); | ||||
|           transform: translate(10px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(-5px, 0px); | ||||
|           -moz-transform: translate(-5px, 0px); | ||||
|           -ms-transform: translate(-5px, 0px); | ||||
|           transform: translate(-5px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-3 { | ||||
|         -webkit-animation-name: am-weather-cloud-3; | ||||
|         -moz-animation-name: am-weather-cloud-3; | ||||
|         animation-name: am-weather-cloud-3; | ||||
|         -webkit-animation-duration: 7s; | ||||
|         -moz-animation-duration: 7s; | ||||
|         animation-duration: 7s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-sun-shiny { | ||||
|         0% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           stroke-dasharray: 0.1px 10px; | ||||
|           stroke-dashoffset: -1px; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun-shiny line { | ||||
|         -webkit-animation-name: am-weather-sun-shiny; | ||||
|         -moz-animation-name: am-weather-sun-shiny; | ||||
|         -ms-animation-name: am-weather-sun-shiny; | ||||
|         animation-name: am-weather-sun-shiny; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** STROKE | ||||
| */ | ||||
|       @keyframes am-weather-stroke { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         2% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         4% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         6% { | ||||
|           -webkit-transform: translate(0.5px, 0.4px); | ||||
|           -moz-transform: translate(0.5px, 0.4px); | ||||
|           -ms-transform: translate(0.5px, 0.4px); | ||||
|           transform: translate(0.5px, 0.4px); | ||||
|         } | ||||
|  | ||||
|         8% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         10% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         12% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         14% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         16% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         18% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         20% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         22% { | ||||
|           -webkit-transform: translate(1px, 0.0px); | ||||
|           -moz-transform: translate(1px, 0.0px); | ||||
|           -ms-transform: translate(1px, 0.0px); | ||||
|           transform: translate(1px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         24% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         26% { | ||||
|           -webkit-transform: translate(-1px, 0.0px); | ||||
|           -moz-transform: translate(-1px, 0.0px); | ||||
|           -ms-transform: translate(-1px, 0.0px); | ||||
|           transform: translate(-1px, 0.0px); | ||||
|  | ||||
|         } | ||||
|  | ||||
|         28% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         40% { | ||||
|           fill: orange; | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         65% { | ||||
|           fill: white; | ||||
|           -webkit-transform: translate(-1px, 5.0px); | ||||
|           -moz-transform: translate(-1px, 5.0px); | ||||
|           -ms-transform: translate(-1px, 5.0px); | ||||
|           transform: translate(-1px, 5.0px); | ||||
|         } | ||||
|  | ||||
|         61% { | ||||
|           fill: orange; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-stroke { | ||||
|         -webkit-animation-name: am-weather-stroke; | ||||
|         -moz-animation-name: am-weather-stroke; | ||||
|         animation-name: am-weather-stroke; | ||||
|         -webkit-animation-duration: 1.11s; | ||||
|         -moz-animation-duration: 1.11s; | ||||
|         animation-duration: 1.11s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g id="thunder" transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-lightning" transform="matrix(1.2,0,0,1.2,-4,28)"> | ||||
|       <polygon class="am-weather-stroke" points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9" | ||||
|         fill="#ffa500" stroke="#fff" | ||||
|         style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 13 KiB | 
| @@ -1,283 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <!-- Scattered Thunderstorms | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.1975" width="1.403" height="1.4766"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-3 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(-5px, 0px); | ||||
|           -moz-transform: translate(-5px, 0px); | ||||
|           -ms-transform: translate(-5px, 0px); | ||||
|           transform: translate(-5px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(10px, 0px); | ||||
|           -moz-transform: translate(10px, 0px); | ||||
|           -ms-transform: translate(10px, 0px); | ||||
|           transform: translate(10px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(-5px, 0px); | ||||
|           -moz-transform: translate(-5px, 0px); | ||||
|           -ms-transform: translate(-5px, 0px); | ||||
|           transform: translate(-5px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-3 { | ||||
|         -webkit-animation-name: am-weather-cloud-3; | ||||
|         -moz-animation-name: am-weather-cloud-3; | ||||
|         animation-name: am-weather-cloud-3; | ||||
|         -webkit-animation-duration: 7s; | ||||
|         -moz-animation-duration: 7s; | ||||
|         animation-duration: 7s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** STROKE | ||||
| */ | ||||
|       @keyframes am-weather-stroke { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         2% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         4% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         6% { | ||||
|           -webkit-transform: translate(0.5px, 0.4px); | ||||
|           -moz-transform: translate(0.5px, 0.4px); | ||||
|           -ms-transform: translate(0.5px, 0.4px); | ||||
|           transform: translate(0.5px, 0.4px); | ||||
|         } | ||||
|  | ||||
|         8% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         10% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         12% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         14% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         16% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         18% { | ||||
|           -webkit-transform: translate(0.3px, 0.0px); | ||||
|           -moz-transform: translate(0.3px, 0.0px); | ||||
|           -ms-transform: translate(0.3px, 0.0px); | ||||
|           transform: translate(0.3px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         20% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         22% { | ||||
|           -webkit-transform: translate(1px, 0.0px); | ||||
|           -moz-transform: translate(1px, 0.0px); | ||||
|           -ms-transform: translate(1px, 0.0px); | ||||
|           transform: translate(1px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         24% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         26% { | ||||
|           -webkit-transform: translate(-1px, 0.0px); | ||||
|           -moz-transform: translate(-1px, 0.0px); | ||||
|           -ms-transform: translate(-1px, 0.0px); | ||||
|           transform: translate(-1px, 0.0px); | ||||
|  | ||||
|         } | ||||
|  | ||||
|         28% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         40% { | ||||
|           fill: orange; | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|  | ||||
|         65% { | ||||
|           fill: white; | ||||
|           -webkit-transform: translate(-1px, 5.0px); | ||||
|           -moz-transform: translate(-1px, 5.0px); | ||||
|           -ms-transform: translate(-1px, 5.0px); | ||||
|           transform: translate(-1px, 5.0px); | ||||
|         } | ||||
|  | ||||
|         61% { | ||||
|           fill: orange; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0.0px, 0.0px); | ||||
|           -moz-transform: translate(0.0px, 0.0px); | ||||
|           -ms-transform: translate(0.0px, 0.0px); | ||||
|           transform: translate(0.0px, 0.0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-stroke { | ||||
|         -webkit-animation-name: am-weather-stroke; | ||||
|         -moz-animation-name: am-weather-stroke; | ||||
|         animation-name: am-weather-stroke; | ||||
|         -webkit-animation-duration: 1.11s; | ||||
|         -moz-animation-duration: 1.11s; | ||||
|         animation-duration: 1.11s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g id="thunder" transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-lightning" transform="matrix(1.2,0,0,1.2,-4,28)"> | ||||
|       <polygon class="am-weather-stroke" points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9" | ||||
|         fill="#ffa500" stroke="#fff" | ||||
|         style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" /> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,307 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <!-- Severe Thunderstorm | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|     <defs> | ||||
|         <filter id="blur" x="-.17571" y="-.19575" width="1.3379" height="1.4959"> | ||||
|             <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|             <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|             <feComponentTransfer> | ||||
|                 <feFuncA slope="0.05" type="linear" /> | ||||
|             </feComponentTransfer> | ||||
|             <feMerge> | ||||
|                 <feMergeNode /> | ||||
|                 <feMergeNode in="SourceGraphic" /> | ||||
|             </feMerge> | ||||
|         </filter> | ||||
|         <style type="text/css"> | ||||
|             <![CDATA[ | ||||
|             /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|             @keyframes am-weather-cloud-3 { | ||||
|                 0% { | ||||
|                     -webkit-transform: translate(-5px, 0px); | ||||
|                     -moz-transform: translate(-5px, 0px); | ||||
|                     -ms-transform: translate(-5px, 0px); | ||||
|                     transform: translate(-5px, 0px); | ||||
|                 } | ||||
|  | ||||
|                 50% { | ||||
|                     -webkit-transform: translate(10px, 0px); | ||||
|                     -moz-transform: translate(10px, 0px); | ||||
|                     -ms-transform: translate(10px, 0px); | ||||
|                     transform: translate(10px, 0px); | ||||
|                 } | ||||
|  | ||||
|                 100% { | ||||
|                     -webkit-transform: translate(-5px, 0px); | ||||
|                     -moz-transform: translate(-5px, 0px); | ||||
|                     -ms-transform: translate(-5px, 0px); | ||||
|                     transform: translate(-5px, 0px); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             .am-weather-cloud-3 { | ||||
|                 -webkit-animation-name: am-weather-cloud-3; | ||||
|                 -moz-animation-name: am-weather-cloud-3; | ||||
|                 animation-name: am-weather-cloud-3; | ||||
|                 -webkit-animation-duration: 7s; | ||||
|                 -moz-animation-duration: 7s; | ||||
|                 animation-duration: 7s; | ||||
|                 -webkit-animation-timing-function: linear; | ||||
|                 -moz-animation-timing-function: linear; | ||||
|                 animation-timing-function: linear; | ||||
|                 -webkit-animation-iteration-count: infinite; | ||||
|                 -moz-animation-iteration-count: infinite; | ||||
|                 animation-iteration-count: infinite; | ||||
|             } | ||||
|  | ||||
|             @keyframes am-weather-cloud-1 { | ||||
|                 0% { | ||||
|                     -webkit-transform: translate(0px, 0px); | ||||
|                     -moz-transform: translate(0px, 0px); | ||||
|                     -ms-transform: translate(0px, 0px); | ||||
|                     transform: translate(0px, 0px); | ||||
|                 } | ||||
|  | ||||
|                 50% { | ||||
|                     -webkit-transform: translate(2px, 0px); | ||||
|                     -moz-transform: translate(2px, 0px); | ||||
|                     -ms-transform: translate(2px, 0px); | ||||
|                     transform: translate(2px, 0px); | ||||
|                 } | ||||
|  | ||||
|                 100% { | ||||
|                     -webkit-transform: translate(0px, 0px); | ||||
|                     -moz-transform: translate(0px, 0px); | ||||
|                     -ms-transform: translate(0px, 0px); | ||||
|                     transform: translate(0px, 0px); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             .am-weather-cloud-1 { | ||||
|                 -webkit-animation-name: am-weather-cloud-1; | ||||
|                 -moz-animation-name: am-weather-cloud-1; | ||||
|                 animation-name: am-weather-cloud-1; | ||||
|                 -webkit-animation-duration: 3s; | ||||
|                 -moz-animation-duration: 3s; | ||||
|                 animation-duration: 3s; | ||||
|                 -webkit-animation-timing-function: linear; | ||||
|                 -moz-animation-timing-function: linear; | ||||
|                 animation-timing-function: linear; | ||||
|                 -webkit-animation-iteration-count: infinite; | ||||
|                 -moz-animation-iteration-count: infinite; | ||||
|                 animation-iteration-count: infinite; | ||||
|             } | ||||
|  | ||||
|             /* | ||||
| ** STROKE | ||||
| */ | ||||
|  | ||||
|             @keyframes am-weather-stroke { | ||||
|                 0% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 2% { | ||||
|                     -webkit-transform: translate(0.3px, 0.0px); | ||||
|                     -moz-transform: translate(0.3px, 0.0px); | ||||
|                     -ms-transform: translate(0.3px, 0.0px); | ||||
|                     transform: translate(0.3px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 4% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 6% { | ||||
|                     -webkit-transform: translate(0.5px, 0.4px); | ||||
|                     -moz-transform: translate(0.5px, 0.4px); | ||||
|                     -ms-transform: translate(0.5px, 0.4px); | ||||
|                     transform: translate(0.5px, 0.4px); | ||||
|                 } | ||||
|  | ||||
|                 8% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 10% { | ||||
|                     -webkit-transform: translate(0.3px, 0.0px); | ||||
|                     -moz-transform: translate(0.3px, 0.0px); | ||||
|                     -ms-transform: translate(0.3px, 0.0px); | ||||
|                     transform: translate(0.3px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 12% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 14% { | ||||
|                     -webkit-transform: translate(0.3px, 0.0px); | ||||
|                     -moz-transform: translate(0.3px, 0.0px); | ||||
|                     -ms-transform: translate(0.3px, 0.0px); | ||||
|                     transform: translate(0.3px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 16% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 18% { | ||||
|                     -webkit-transform: translate(0.3px, 0.0px); | ||||
|                     -moz-transform: translate(0.3px, 0.0px); | ||||
|                     -ms-transform: translate(0.3px, 0.0px); | ||||
|                     transform: translate(0.3px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 20% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 22% { | ||||
|                     -webkit-transform: translate(1px, 0.0px); | ||||
|                     -moz-transform: translate(1px, 0.0px); | ||||
|                     -ms-transform: translate(1px, 0.0px); | ||||
|                     transform: translate(1px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 24% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 26% { | ||||
|                     -webkit-transform: translate(-1px, 0.0px); | ||||
|                     -moz-transform: translate(-1px, 0.0px); | ||||
|                     -ms-transform: translate(-1px, 0.0px); | ||||
|                     transform: translate(-1px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 28% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 40% { | ||||
|                     fill: orange; | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|  | ||||
|                 65% { | ||||
|                     fill: white; | ||||
|                     -webkit-transform: translate(-1px, 5.0px); | ||||
|                     -moz-transform: translate(-1px, 5.0px); | ||||
|                     -ms-transform: translate(-1px, 5.0px); | ||||
|                     transform: translate(-1px, 5.0px); | ||||
|                 } | ||||
|  | ||||
|                 61% { | ||||
|                     fill: orange; | ||||
|                 } | ||||
|  | ||||
|                 100% { | ||||
|                     -webkit-transform: translate(0.0px, 0.0px); | ||||
|                     -moz-transform: translate(0.0px, 0.0px); | ||||
|                     -ms-transform: translate(0.0px, 0.0px); | ||||
|                     transform: translate(0.0px, 0.0px); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             .am-weather-stroke { | ||||
|                 -webkit-animation-name: am-weather-stroke; | ||||
|                 -moz-animation-name: am-weather-stroke; | ||||
|                 animation-name: am-weather-stroke; | ||||
|                 -webkit-animation-duration: 1.11s; | ||||
|                 -moz-animation-duration: 1.11s; | ||||
|                 animation-duration: 1.11s; | ||||
|                 -webkit-animation-timing-function: linear; | ||||
|                 -moz-animation-timing-function: linear; | ||||
|                 animation-timing-function: linear; | ||||
|                 -webkit-animation-iteration-count: infinite; | ||||
|                 -moz-animation-iteration-count: infinite; | ||||
|                 animation-iteration-count: infinite; | ||||
|             } | ||||
|  | ||||
|             @keyframes error { | ||||
|                 0% { | ||||
|                     fill: #cc0000; | ||||
|                 } | ||||
|  | ||||
|                 50% { | ||||
|                     fill: #ff0000; | ||||
|                 } | ||||
|  | ||||
|                 100% { | ||||
|                     fill: #cc0000; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             #Shape { | ||||
|                 -webkit-animation-name: error; | ||||
|                 -moz-animation-name: error; | ||||
|                 animation-name: error; | ||||
|                 -webkit-animation-duration: 1s; | ||||
|                 -moz-animation-duration: 1s; | ||||
|                 animation-duration: 1s; | ||||
|                 -webkit-animation-timing-function: linear; | ||||
|                 -moz-animation-timing-function: linear; | ||||
|                 animation-timing-function: linear; | ||||
|                 -webkit-animation-iteration-count: infinite; | ||||
|                 -moz-animation-iteration-count: infinite; | ||||
|                 animation-iteration-count: infinite; | ||||
|             } | ||||
|             ]]> | ||||
|         </style> | ||||
|     </defs> | ||||
|     <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|         <g class="am-weather-cloud-1" | ||||
|             style="-moz-animation-duration:7s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-1;-moz-animation-timing-function:linear;-webkit-animation-duration:7s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-1;-webkit-animation-timing-function:linear"> | ||||
|             <path transform="matrix(.6 0 0 .6 -10 -6)" | ||||
|                 d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|                 fill="#666" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|         </g> | ||||
|         <g class="am-weather-cloud-3"> | ||||
|             <path transform="translate(-20,-11)" | ||||
|                 d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|                 fill="#333" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|         </g> | ||||
|         <g transform="matrix(1.2,0,0,1.2,-4,28)"> | ||||
|             <polygon class="am-weather-stroke" | ||||
|                 points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9" fill="#ffa500" stroke="#fff" | ||||
|                 style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" /> | ||||
|         </g> | ||||
|         <g class="warning" transform="translate(20,30)"> | ||||
|             <path | ||||
|                 d="m7.7791 2.906-5.9912 10.117c-0.56283 0.95042-0.24862 2.1772 0.7018 2.74 0.30853 0.18271 0.66051 0.27911 1.0191 0.27911h11.982c1.1046 0 2-0.89543 2-2 0-0.35857-0.0964-0.71056-0.27911-1.0191l-5.9912-10.117c-0.56283-0.95042-1.7896-1.2646-2.74-0.7018-0.28918 0.17125-0.53055 0.41262-0.7018 0.7018z" | ||||
|                 fill="#c00" /> | ||||
|             <path d="m9.5 10.5v-5" stroke="#fff" stroke-linecap="round" stroke-width="1.5" /> | ||||
|             <circle cx="9.5" cy="13" r="1" fill="#fff" /> | ||||
|         </g> | ||||
|     </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 13 KiB | 
| @@ -1,241 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-sun-shiny { | ||||
|         0% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           stroke-dasharray: 0.1px 10px; | ||||
|           stroke-dashoffset: -1px; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun-shiny line { | ||||
|         -webkit-animation-name: am-weather-sun-shiny; | ||||
|         -moz-animation-name: am-weather-sun-shiny; | ||||
|         -ms-animation-name: am-weather-sun-shiny; | ||||
|         animation-name: am-weather-sun-shiny; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SNOW | ||||
| */ | ||||
|       @keyframes am-weather-snow { | ||||
|         0% { | ||||
|           -webkit-transform: translateX(0) translateY(0); | ||||
|           -moz-transform: translateX(0) translateY(0); | ||||
|           -ms-transform: translateX(0) translateY(0); | ||||
|           transform: translateX(0) translateY(0); | ||||
|         } | ||||
|  | ||||
|         33.33% { | ||||
|           -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|           -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|           -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|           transform: translateX(-1.2px) translateY(2px); | ||||
|         } | ||||
|  | ||||
|         66.66% { | ||||
|           -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|           -moz-transform: translateX(1.4px) translateY(4px); | ||||
|           -ms-transform: translateX(1.4px) translateY(4px); | ||||
|           transform: translateX(1.4px) translateY(4px); | ||||
|           opacity: 1; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|           -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|           -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|           transform: translateX(-1.6px) translateY(6px); | ||||
|           opacity: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-1 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" transform="translate(0,16)" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-1" | ||||
|       style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(12,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 9.6 KiB | 
| @@ -1,269 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SNOW | ||||
| */ | ||||
|       @keyframes am-weather-snow { | ||||
|         0% { | ||||
|           -webkit-transform: translateX(0) translateY(0); | ||||
|           -moz-transform: translateX(0) translateY(0); | ||||
|           -ms-transform: translateX(0) translateY(0); | ||||
|           transform: translateX(0) translateY(0); | ||||
|         } | ||||
|  | ||||
|         33.33% { | ||||
|           -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|           -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|           -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|           transform: translateX(-1.2px) translateY(2px); | ||||
|         } | ||||
|  | ||||
|         66.66% { | ||||
|           -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|           -moz-transform: translateX(1.4px) translateY(4px); | ||||
|           -ms-transform: translateX(1.4px) translateY(4px); | ||||
|           transform: translateX(1.4px) translateY(4px); | ||||
|           opacity: 1; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|           -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|           -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|           transform: translateX(-1.6px) translateY(6px); | ||||
|           opacity: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-1 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-1" | ||||
|       style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(12,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,273 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SUN | ||||
| */ | ||||
|       @keyframes am-weather-sun { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(360deg); | ||||
|           -moz-transform: rotate(360deg); | ||||
|           -ms-transform: rotate(360deg); | ||||
|           transform: rotate(360deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun { | ||||
|         -webkit-animation-name: am-weather-sun; | ||||
|         -moz-animation-name: am-weather-sun; | ||||
|         -ms-animation-name: am-weather-sun; | ||||
|         animation-name: am-weather-sun; | ||||
|         -webkit-animation-duration: 9s; | ||||
|         -moz-animation-duration: 9s; | ||||
|         -ms-animation-duration: 9s; | ||||
|         animation-duration: 9s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-sun-shiny { | ||||
|         0% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           stroke-dasharray: 0.1px 10px; | ||||
|           stroke-dashoffset: -1px; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           stroke-dasharray: 3px 10px; | ||||
|           stroke-dashoffset: 0px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-sun-shiny line { | ||||
|         -webkit-animation-name: am-weather-sun-shiny; | ||||
|         -moz-animation-name: am-weather-sun-shiny; | ||||
|         -ms-animation-name: am-weather-sun-shiny; | ||||
|         animation-name: am-weather-sun-shiny; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SNOW | ||||
| */ | ||||
|       @keyframes am-weather-snow { | ||||
|         0% { | ||||
|           -webkit-transform: translateX(0) translateY(0); | ||||
|           -moz-transform: translateX(0) translateY(0); | ||||
|           -ms-transform: translateX(0) translateY(0); | ||||
|           transform: translateX(0) translateY(0); | ||||
|         } | ||||
|  | ||||
|         33.33% { | ||||
|           -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|           -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|           -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|           transform: translateX(-1.2px) translateY(2px); | ||||
|         } | ||||
|  | ||||
|         66.66% { | ||||
|           -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|           -moz-transform: translateX(1.4px) translateY(4px); | ||||
|           -ms-transform: translateX(1.4px) translateY(4px); | ||||
|           transform: translateX(1.4px) translateY(4px); | ||||
|           opacity: 1; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|           -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|           -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|           transform: translateX(-1.6px) translateY(6px); | ||||
|           opacity: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-1 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-2 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-delay: 1.2s; | ||||
|         -moz-animation-delay: 1.2s; | ||||
|         -ms-animation-delay: 1.2s; | ||||
|         animation-delay: 1.2s; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="translate(0,16)"> | ||||
|       <g class="am-weather-sun" | ||||
|         style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|         <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" /> | ||||
|         <g transform="rotate(45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(135)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="scale(-1)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(225)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-90)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|         <g transform="rotate(-45)"> | ||||
|           <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|             stroke-width="2" /> | ||||
|         </g> | ||||
|       </g> | ||||
|       <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-1" | ||||
|       style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(7,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-2" | ||||
|       style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(16,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 11 KiB | 
| @@ -1,301 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|   <defs> | ||||
|     <filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634"> | ||||
|       <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|       <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|       <feComponentTransfer> | ||||
|         <feFuncA slope="0.05" type="linear" /> | ||||
|       </feComponentTransfer> | ||||
|       <feMerge> | ||||
|         <feMergeNode /> | ||||
|         <feMergeNode in="SourceGraphic" /> | ||||
|       </feMerge> | ||||
|     </filter> | ||||
|     <style type="text/css"> | ||||
|       <![CDATA[ | ||||
|       /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|       @keyframes am-weather-cloud-2 { | ||||
|         0% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: translate(2px, 0px); | ||||
|           -moz-transform: translate(2px, 0px); | ||||
|           -ms-transform: translate(2px, 0px); | ||||
|           transform: translate(2px, 0px); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translate(0px, 0px); | ||||
|           -moz-transform: translate(0px, 0px); | ||||
|           -ms-transform: translate(0px, 0px); | ||||
|           transform: translate(0px, 0px); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-cloud-2 { | ||||
|         -webkit-animation-name: am-weather-cloud-2; | ||||
|         -moz-animation-name: am-weather-cloud-2; | ||||
|         animation-name: am-weather-cloud-2; | ||||
|         -webkit-animation-duration: 3s; | ||||
|         -moz-animation-duration: 3s; | ||||
|         animation-duration: 3s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** MOON | ||||
| */ | ||||
|       @keyframes am-weather-moon { | ||||
|         0% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|  | ||||
|         50% { | ||||
|           -webkit-transform: rotate(15deg); | ||||
|           -moz-transform: rotate(15deg); | ||||
|           -ms-transform: rotate(15deg); | ||||
|           transform: rotate(15deg); | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: rotate(0deg); | ||||
|           -moz-transform: rotate(0deg); | ||||
|           -ms-transform: rotate(0deg); | ||||
|           transform: rotate(0deg); | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon { | ||||
|         -webkit-animation-name: am-weather-moon; | ||||
|         -moz-animation-name: am-weather-moon; | ||||
|         -ms-animation-name: am-weather-moon; | ||||
|         animation-name: am-weather-moon; | ||||
|         -webkit-animation-duration: 6s; | ||||
|         -moz-animation-duration: 6s; | ||||
|         -ms-animation-duration: 6s; | ||||
|         animation-duration: 6s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|         -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -moz-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         -ms-transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|         transform-origin: 12.5px 15.15px 0; | ||||
|         /* TODO FF CENTER ISSUE */ | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-1 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-1 { | ||||
|         -webkit-animation-name: am-weather-moon-star-1; | ||||
|         -moz-animation-name: am-weather-moon-star-1; | ||||
|         -ms-animation-name: am-weather-moon-star-1; | ||||
|         animation-name: am-weather-moon-star-1; | ||||
|         -webkit-animation-delay: 3s; | ||||
|         -moz-animation-delay: 3s; | ||||
|         -ms-animation-delay: 3s; | ||||
|         animation-delay: 3s; | ||||
|         -webkit-animation-duration: 5s; | ||||
|         -moz-animation-duration: 5s; | ||||
|         -ms-animation-duration: 5s; | ||||
|         animation-duration: 5s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       @keyframes am-weather-moon-star-2 { | ||||
|         0% { | ||||
|           opacity: 0; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           opacity: 1; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-moon-star-2 { | ||||
|         -webkit-animation-name: am-weather-moon-star-2; | ||||
|         -moz-animation-name: am-weather-moon-star-2; | ||||
|         -ms-animation-name: am-weather-moon-star-2; | ||||
|         animation-name: am-weather-moon-star-2; | ||||
|         -webkit-animation-delay: 5s; | ||||
|         -moz-animation-delay: 5s; | ||||
|         -ms-animation-delay: 5s; | ||||
|         animation-delay: 5s; | ||||
|         -webkit-animation-duration: 4s; | ||||
|         -moz-animation-duration: 4s; | ||||
|         -ms-animation-duration: 4s; | ||||
|         animation-duration: 4s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: 1; | ||||
|         -moz-animation-iteration-count: 1; | ||||
|         -ms-animation-iteration-count: 1; | ||||
|         animation-iteration-count: 1; | ||||
|       } | ||||
|  | ||||
|       /* | ||||
| ** SNOW | ||||
| */ | ||||
|       @keyframes am-weather-snow { | ||||
|         0% { | ||||
|           -webkit-transform: translateX(0) translateY(0); | ||||
|           -moz-transform: translateX(0) translateY(0); | ||||
|           -ms-transform: translateX(0) translateY(0); | ||||
|           transform: translateX(0) translateY(0); | ||||
|         } | ||||
|  | ||||
|         33.33% { | ||||
|           -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|           -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|           -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|           transform: translateX(-1.2px) translateY(2px); | ||||
|         } | ||||
|  | ||||
|         66.66% { | ||||
|           -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|           -moz-transform: translateX(1.4px) translateY(4px); | ||||
|           -ms-transform: translateX(1.4px) translateY(4px); | ||||
|           transform: translateX(1.4px) translateY(4px); | ||||
|           opacity: 1; | ||||
|         } | ||||
|  | ||||
|         100% { | ||||
|           -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|           -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|           -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|           transform: translateX(-1.6px) translateY(6px); | ||||
|           opacity: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-1 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|  | ||||
|       .am-weather-snow-2 { | ||||
|         -webkit-animation-name: am-weather-snow; | ||||
|         -moz-animation-name: am-weather-snow; | ||||
|         -ms-animation-name: am-weather-snow; | ||||
|         animation-name: am-weather-snow; | ||||
|         -webkit-animation-delay: 1.2s; | ||||
|         -moz-animation-delay: 1.2s; | ||||
|         -ms-animation-delay: 1.2s; | ||||
|         animation-delay: 1.2s; | ||||
|         -webkit-animation-duration: 2s; | ||||
|         -moz-animation-duration: 2s; | ||||
|         -ms-animation-duration: 2s; | ||||
|         animation-duration: 2s; | ||||
|         -webkit-animation-timing-function: linear; | ||||
|         -moz-animation-timing-function: linear; | ||||
|         -ms-animation-timing-function: linear; | ||||
|         animation-timing-function: linear; | ||||
|         -webkit-animation-iteration-count: infinite; | ||||
|         -moz-animation-iteration-count: infinite; | ||||
|         -ms-animation-iteration-count: infinite; | ||||
|         animation-iteration-count: infinite; | ||||
|       } | ||||
|       ]]> | ||||
|     </style> | ||||
|   </defs> | ||||
|   <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|     <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|       <g class="am-weather-moon-star-1" | ||||
|         style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|         <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|           stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon-star-2" | ||||
|         style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|         <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|           fill="#ffa500" stroke-miterlimit="10" /> | ||||
|       </g> | ||||
|       <g class="am-weather-moon" | ||||
|         style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|         <path | ||||
|           d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|           fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-cloud-3" | ||||
|       style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|       <path transform="translate(-20,-11)" | ||||
|         d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|         fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-1" | ||||
|       style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(7,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|     <g class="am-weather-snow-2" | ||||
|       style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|       <g transform="translate(16,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|         <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|         <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|         <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 13 KiB | 
| @@ -1,334 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|    <defs> | ||||
|       <filter id="blur" x="-.24684" y="-.26897" width="1.4937" height="1.6759"> | ||||
|          <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|          <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|          <feComponentTransfer> | ||||
|             <feFuncA slope="0.05" type="linear" /> | ||||
|          </feComponentTransfer> | ||||
|          <feMerge> | ||||
|             <feMergeNode /> | ||||
|             <feMergeNode in="SourceGraphic" /> | ||||
|          </feMerge> | ||||
|       </filter> | ||||
|       <style type="text/css"> | ||||
|          <![CDATA[ | ||||
|          /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|          @keyframes am-weather-cloud-2 { | ||||
|             0% { | ||||
|                -webkit-transform: translate(0px, 0px); | ||||
|                -moz-transform: translate(0px, 0px); | ||||
|                -ms-transform: translate(0px, 0px); | ||||
|                transform: translate(0px, 0px); | ||||
|             } | ||||
|  | ||||
|             50% { | ||||
|                -webkit-transform: translate(2px, 0px); | ||||
|                -moz-transform: translate(2px, 0px); | ||||
|                -ms-transform: translate(2px, 0px); | ||||
|                transform: translate(2px, 0px); | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translate(0px, 0px); | ||||
|                -moz-transform: translate(0px, 0px); | ||||
|                -ms-transform: translate(0px, 0px); | ||||
|                transform: translate(0px, 0px); | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-cloud-2 { | ||||
|             -webkit-animation-name: am-weather-cloud-2; | ||||
|             -moz-animation-name: am-weather-cloud-2; | ||||
|             animation-name: am-weather-cloud-2; | ||||
|             -webkit-animation-duration: 3s; | ||||
|             -moz-animation-duration: 3s; | ||||
|             animation-duration: 3s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          /* | ||||
| ** SUN | ||||
| */ | ||||
|          @keyframes am-weather-sun { | ||||
|             0% { | ||||
|                -webkit-transform: rotate(0deg); | ||||
|                -moz-transform: rotate(0deg); | ||||
|                -ms-transform: rotate(0deg); | ||||
|                transform: rotate(0deg); | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: rotate(360deg); | ||||
|                -moz-transform: rotate(360deg); | ||||
|                -ms-transform: rotate(360deg); | ||||
|                transform: rotate(360deg); | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-sun { | ||||
|             -webkit-animation-name: am-weather-sun; | ||||
|             -moz-animation-name: am-weather-sun; | ||||
|             -ms-animation-name: am-weather-sun; | ||||
|             animation-name: am-weather-sun; | ||||
|             -webkit-animation-duration: 9s; | ||||
|             -moz-animation-duration: 9s; | ||||
|             -ms-animation-duration: 9s; | ||||
|             animation-duration: 9s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          @keyframes am-weather-sun-shiny { | ||||
|             0% { | ||||
|                stroke-dasharray: 3px 10px; | ||||
|                stroke-dashoffset: 0px; | ||||
|             } | ||||
|  | ||||
|             50% { | ||||
|                stroke-dasharray: 0.1px 10px; | ||||
|                stroke-dashoffset: -1px; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                stroke-dasharray: 3px 10px; | ||||
|                stroke-dashoffset: 0px; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-sun-shiny line { | ||||
|             -webkit-animation-name: am-weather-sun-shiny; | ||||
|             -moz-animation-name: am-weather-sun-shiny; | ||||
|             -ms-animation-name: am-weather-sun-shiny; | ||||
|             animation-name: am-weather-sun-shiny; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          /* | ||||
| ** SNOW | ||||
| */ | ||||
|          @keyframes am-weather-snow { | ||||
|             0% { | ||||
|                -webkit-transform: translateX(0) translateY(0); | ||||
|                -moz-transform: translateX(0) translateY(0); | ||||
|                -ms-transform: translateX(0) translateY(0); | ||||
|                transform: translateX(0) translateY(0); | ||||
|             } | ||||
|  | ||||
|             33.33% { | ||||
|                -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|                -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|                -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|                transform: translateX(-1.2px) translateY(2px); | ||||
|             } | ||||
|  | ||||
|             66.66% { | ||||
|                -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|                -moz-transform: translateX(1.4px) translateY(4px); | ||||
|                -ms-transform: translateX(1.4px) translateY(4px); | ||||
|                transform: translateX(1.4px) translateY(4px); | ||||
|                opacity: 1; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|                -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|                -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|                transform: translateX(-1.6px) translateY(6px); | ||||
|                opacity: 0; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          @keyframes am-weather-snow-reverse { | ||||
|             0% { | ||||
|                -webkit-transform: translateX(0) translateY(0); | ||||
|                -moz-transform: translateX(0) translateY(0); | ||||
|                -ms-transform: translateX(0) translateY(0); | ||||
|                transform: translateX(0) translateY(0); | ||||
|             } | ||||
|  | ||||
|             33.33% { | ||||
|                -webkit-transform: translateX(1.2px) translateY(2px); | ||||
|                -moz-transform: translateX(1.2px) translateY(2px); | ||||
|                -ms-transform: translateX(1.2px) translateY(2px); | ||||
|                transform: translateX(1.2px) translateY(2px); | ||||
|             } | ||||
|  | ||||
|             66.66% { | ||||
|                -webkit-transform: translateX(-1.4px) translateY(4px); | ||||
|                -moz-transform: translateX(-1.4px) translateY(4px); | ||||
|                -ms-transform: translateX(-1.4px) translateY(4px); | ||||
|                transform: translateX(-1.4px) translateY(4px); | ||||
|                opacity: 1; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translateX(1.6px) translateY(6px); | ||||
|                -moz-transform: translateX(1.6px) translateY(6px); | ||||
|                -ms-transform: translateX(1.6px) translateY(6px); | ||||
|                transform: translateX(1.6px) translateY(6px); | ||||
|                opacity: 0; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-1 { | ||||
|             -webkit-animation-name: am-weather-snow; | ||||
|             -moz-animation-name: am-weather-snow; | ||||
|             -ms-animation-name: am-weather-snow; | ||||
|             animation-name: am-weather-snow; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-2 { | ||||
|             -webkit-animation-name: am-weather-snow; | ||||
|             -moz-animation-name: am-weather-snow; | ||||
|             -ms-animation-name: am-weather-snow; | ||||
|             animation-name: am-weather-snow; | ||||
|             -webkit-animation-delay: 1.2s; | ||||
|             -moz-animation-delay: 1.2s; | ||||
|             -ms-animation-delay: 1.2s; | ||||
|             animation-delay: 1.2s; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-3 { | ||||
|             -webkit-animation-name: am-weather-snow-reverse; | ||||
|             -moz-animation-name: am-weather-snow-reverse; | ||||
|             -ms-animation-name: am-weather-snow-reverse; | ||||
|             animation-name: am-weather-snow-reverse; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|          ]]> | ||||
|       </style> | ||||
|    </defs> | ||||
|    <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|       <g transform="translate(0,16)"> | ||||
|          <g class="am-weather-sun" | ||||
|             style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear"> | ||||
|             <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                stroke-width="2" /> | ||||
|             <g transform="rotate(45)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="rotate(90)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="rotate(135)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="scale(-1)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="rotate(225)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="rotate(-90)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|             <g transform="rotate(-45)"> | ||||
|                <line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" | ||||
|                   stroke-width="2" /> | ||||
|             </g> | ||||
|          </g> | ||||
|          <circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" /> | ||||
|       </g> | ||||
|       <g class="am-weather-cloud-2" | ||||
|          style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|          <path transform="translate(-20,-11)" | ||||
|             d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|             fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-1" | ||||
|          style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(3,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-2" | ||||
|          style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(11,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-3" | ||||
|          style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow-reverse;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow-reverse;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow-reverse;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(20,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|    </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 15 KiB | 
| @@ -1,361 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- (c) ammap.com | SVG weather icons --> | ||||
| <svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg"> | ||||
|    <defs> | ||||
|       <filter id="blur" x="-.24684" y="-.26897" width="1.4937" height="1.6759"> | ||||
|          <feGaussianBlur in="SourceAlpha" stdDeviation="3" /> | ||||
|          <feOffset dx="0" dy="4" result="offsetblur" /> | ||||
|          <feComponentTransfer> | ||||
|             <feFuncA slope="0.05" type="linear" /> | ||||
|          </feComponentTransfer> | ||||
|          <feMerge> | ||||
|             <feMergeNode /> | ||||
|             <feMergeNode in="SourceGraphic" /> | ||||
|          </feMerge> | ||||
|       </filter> | ||||
|       <style type="text/css"> | ||||
|          <![CDATA[ | ||||
|          /* | ||||
| ** CLOUDS | ||||
| */ | ||||
|          @keyframes am-weather-cloud-2 { | ||||
|             0% { | ||||
|                -webkit-transform: translate(0px, 0px); | ||||
|                -moz-transform: translate(0px, 0px); | ||||
|                -ms-transform: translate(0px, 0px); | ||||
|                transform: translate(0px, 0px); | ||||
|             } | ||||
|  | ||||
|             50% { | ||||
|                -webkit-transform: translate(2px, 0px); | ||||
|                -moz-transform: translate(2px, 0px); | ||||
|                -ms-transform: translate(2px, 0px); | ||||
|                transform: translate(2px, 0px); | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translate(0px, 0px); | ||||
|                -moz-transform: translate(0px, 0px); | ||||
|                -ms-transform: translate(0px, 0px); | ||||
|                transform: translate(0px, 0px); | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-cloud-2 { | ||||
|             -webkit-animation-name: am-weather-cloud-2; | ||||
|             -moz-animation-name: am-weather-cloud-2; | ||||
|             animation-name: am-weather-cloud-2; | ||||
|             -webkit-animation-duration: 3s; | ||||
|             -moz-animation-duration: 3s; | ||||
|             animation-duration: 3s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          /* | ||||
| ** MOON | ||||
| */ | ||||
|          @keyframes am-weather-moon { | ||||
|             0% { | ||||
|                -webkit-transform: rotate(0deg); | ||||
|                -moz-transform: rotate(0deg); | ||||
|                -ms-transform: rotate(0deg); | ||||
|                transform: rotate(0deg); | ||||
|             } | ||||
|  | ||||
|             50% { | ||||
|                -webkit-transform: rotate(15deg); | ||||
|                -moz-transform: rotate(15deg); | ||||
|                -ms-transform: rotate(15deg); | ||||
|                transform: rotate(15deg); | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: rotate(0deg); | ||||
|                -moz-transform: rotate(0deg); | ||||
|                -ms-transform: rotate(0deg); | ||||
|                transform: rotate(0deg); | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-moon { | ||||
|             -webkit-animation-name: am-weather-moon; | ||||
|             -moz-animation-name: am-weather-moon; | ||||
|             -ms-animation-name: am-weather-moon; | ||||
|             animation-name: am-weather-moon; | ||||
|             -webkit-animation-duration: 6s; | ||||
|             -moz-animation-duration: 6s; | ||||
|             -ms-animation-duration: 6s; | ||||
|             animation-duration: 6s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|             -webkit-transform-origin: 12.5px 15.15px 0; | ||||
|             /* TODO FF CENTER ISSUE */ | ||||
|             -moz-transform-origin: 12.5px 15.15px 0; | ||||
|             /* TODO FF CENTER ISSUE */ | ||||
|             -ms-transform-origin: 12.5px 15.15px 0; | ||||
|             /* TODO FF CENTER ISSUE */ | ||||
|             transform-origin: 12.5px 15.15px 0; | ||||
|             /* TODO FF CENTER ISSUE */ | ||||
|          } | ||||
|  | ||||
|          @keyframes am-weather-moon-star-1 { | ||||
|             0% { | ||||
|                opacity: 0; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                opacity: 1; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-moon-star-1 { | ||||
|             -webkit-animation-name: am-weather-moon-star-1; | ||||
|             -moz-animation-name: am-weather-moon-star-1; | ||||
|             -ms-animation-name: am-weather-moon-star-1; | ||||
|             animation-name: am-weather-moon-star-1; | ||||
|             -webkit-animation-delay: 3s; | ||||
|             -moz-animation-delay: 3s; | ||||
|             -ms-animation-delay: 3s; | ||||
|             animation-delay: 3s; | ||||
|             -webkit-animation-duration: 5s; | ||||
|             -moz-animation-duration: 5s; | ||||
|             -ms-animation-duration: 5s; | ||||
|             animation-duration: 5s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: 1; | ||||
|             -moz-animation-iteration-count: 1; | ||||
|             -ms-animation-iteration-count: 1; | ||||
|             animation-iteration-count: 1; | ||||
|          } | ||||
|  | ||||
|          @keyframes am-weather-moon-star-2 { | ||||
|             0% { | ||||
|                opacity: 0; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                opacity: 1; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-moon-star-2 { | ||||
|             -webkit-animation-name: am-weather-moon-star-2; | ||||
|             -moz-animation-name: am-weather-moon-star-2; | ||||
|             -ms-animation-name: am-weather-moon-star-2; | ||||
|             animation-name: am-weather-moon-star-2; | ||||
|             -webkit-animation-delay: 5s; | ||||
|             -moz-animation-delay: 5s; | ||||
|             -ms-animation-delay: 5s; | ||||
|             animation-delay: 5s; | ||||
|             -webkit-animation-duration: 4s; | ||||
|             -moz-animation-duration: 4s; | ||||
|             -ms-animation-duration: 4s; | ||||
|             animation-duration: 4s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: 1; | ||||
|             -moz-animation-iteration-count: 1; | ||||
|             -ms-animation-iteration-count: 1; | ||||
|             animation-iteration-count: 1; | ||||
|          } | ||||
|  | ||||
|          /* | ||||
| ** SNOW | ||||
| */ | ||||
|          @keyframes am-weather-snow { | ||||
|             0% { | ||||
|                -webkit-transform: translateX(0) translateY(0); | ||||
|                -moz-transform: translateX(0) translateY(0); | ||||
|                -ms-transform: translateX(0) translateY(0); | ||||
|                transform: translateX(0) translateY(0); | ||||
|             } | ||||
|  | ||||
|             33.33% { | ||||
|                -webkit-transform: translateX(-1.2px) translateY(2px); | ||||
|                -moz-transform: translateX(-1.2px) translateY(2px); | ||||
|                -ms-transform: translateX(-1.2px) translateY(2px); | ||||
|                transform: translateX(-1.2px) translateY(2px); | ||||
|             } | ||||
|  | ||||
|             66.66% { | ||||
|                -webkit-transform: translateX(1.4px) translateY(4px); | ||||
|                -moz-transform: translateX(1.4px) translateY(4px); | ||||
|                -ms-transform: translateX(1.4px) translateY(4px); | ||||
|                transform: translateX(1.4px) translateY(4px); | ||||
|                opacity: 1; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translateX(-1.6px) translateY(6px); | ||||
|                -moz-transform: translateX(-1.6px) translateY(6px); | ||||
|                -ms-transform: translateX(-1.6px) translateY(6px); | ||||
|                transform: translateX(-1.6px) translateY(6px); | ||||
|                opacity: 0; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          @keyframes am-weather-snow-reverse { | ||||
|             0% { | ||||
|                -webkit-transform: translateX(0) translateY(0); | ||||
|                -moz-transform: translateX(0) translateY(0); | ||||
|                -ms-transform: translateX(0) translateY(0); | ||||
|                transform: translateX(0) translateY(0); | ||||
|             } | ||||
|  | ||||
|             33.33% { | ||||
|                -webkit-transform: translateX(1.2px) translateY(2px); | ||||
|                -moz-transform: translateX(1.2px) translateY(2px); | ||||
|                -ms-transform: translateX(1.2px) translateY(2px); | ||||
|                transform: translateX(1.2px) translateY(2px); | ||||
|             } | ||||
|  | ||||
|             66.66% { | ||||
|                -webkit-transform: translateX(-1.4px) translateY(4px); | ||||
|                -moz-transform: translateX(-1.4px) translateY(4px); | ||||
|                -ms-transform: translateX(-1.4px) translateY(4px); | ||||
|                transform: translateX(-1.4px) translateY(4px); | ||||
|                opacity: 1; | ||||
|             } | ||||
|  | ||||
|             100% { | ||||
|                -webkit-transform: translateX(1.6px) translateY(6px); | ||||
|                -moz-transform: translateX(1.6px) translateY(6px); | ||||
|                -ms-transform: translateX(1.6px) translateY(6px); | ||||
|                transform: translateX(1.6px) translateY(6px); | ||||
|                opacity: 0; | ||||
|             } | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-1 { | ||||
|             -webkit-animation-name: am-weather-snow; | ||||
|             -moz-animation-name: am-weather-snow; | ||||
|             -ms-animation-name: am-weather-snow; | ||||
|             animation-name: am-weather-snow; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-2 { | ||||
|             -webkit-animation-name: am-weather-snow; | ||||
|             -moz-animation-name: am-weather-snow; | ||||
|             -ms-animation-name: am-weather-snow; | ||||
|             animation-name: am-weather-snow; | ||||
|             -webkit-animation-delay: 1.2s; | ||||
|             -moz-animation-delay: 1.2s; | ||||
|             -ms-animation-delay: 1.2s; | ||||
|             animation-delay: 1.2s; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|  | ||||
|          .am-weather-snow-3 { | ||||
|             -webkit-animation-name: am-weather-snow-reverse; | ||||
|             -moz-animation-name: am-weather-snow-reverse; | ||||
|             -ms-animation-name: am-weather-snow-reverse; | ||||
|             animation-name: am-weather-snow-reverse; | ||||
|             -webkit-animation-duration: 2s; | ||||
|             -moz-animation-duration: 2s; | ||||
|             -ms-animation-duration: 2s; | ||||
|             animation-duration: 2s; | ||||
|             -webkit-animation-timing-function: linear; | ||||
|             -moz-animation-timing-function: linear; | ||||
|             -ms-animation-timing-function: linear; | ||||
|             animation-timing-function: linear; | ||||
|             -webkit-animation-iteration-count: infinite; | ||||
|             -moz-animation-iteration-count: infinite; | ||||
|             -ms-animation-iteration-count: infinite; | ||||
|             animation-iteration-count: infinite; | ||||
|          } | ||||
|          ]]> | ||||
|       </style> | ||||
|    </defs> | ||||
|    <g transform="translate(16,-2)" filter="url(#blur)"> | ||||
|       <g transform="matrix(.8 0 0 .8 16 4)"> | ||||
|          <g class="am-weather-moon-star-1" | ||||
|             style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear"> | ||||
|             <polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500" | ||||
|                stroke-miterlimit="10" /> | ||||
|          </g> | ||||
|          <g class="am-weather-moon-star-2" | ||||
|             style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear"> | ||||
|             <polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" | ||||
|                fill="#ffa500" stroke-miterlimit="10" /> | ||||
|          </g> | ||||
|          <g class="am-weather-moon" | ||||
|             style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0"> | ||||
|             <path | ||||
|                d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z" | ||||
|                fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" /> | ||||
|          </g> | ||||
|       </g> | ||||
|       <g class="am-weather-cloud-2" | ||||
|          style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear"> | ||||
|          <path transform="translate(-20,-11)" | ||||
|             d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z" | ||||
|             fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" /> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-1" | ||||
|          style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(3,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-2" | ||||
|          style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(11,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|       <g class="am-weather-snow-3" | ||||
|          style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow-reverse;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow-reverse;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow-reverse;-webkit-animation-timing-function:linear"> | ||||
|          <g transform="translate(20,28)" fill="none" stroke="#57a0ee" stroke-linecap="round"> | ||||
|             <line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" /> | ||||
|             <line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" /> | ||||
|             <line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" /> | ||||
|          </g> | ||||
|       </g> | ||||
|    </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 17 KiB | 
| @@ -25,11 +25,5 @@ API_URL = "" # Ollama API URL - http://host.docker.internal:11434 | ||||
| [MODELS.DEEPSEEK] | ||||
| API_KEY = "" | ||||
|  | ||||
| [MODELS.AIMLAPI] | ||||
| API_KEY = "" # Required to use AI/ML API chat and embedding models | ||||
|  | ||||
| [MODELS.LM_STUDIO] | ||||
| API_URL = "" # LM Studio API URL - http://host.docker.internal:1234 | ||||
|  | ||||
| [API_ENDPOINTS] | ||||
| SEARXNG = "" # SearxNG API URL - http://localhost:32768 | ||||
| SEARXNG = "" # SearxNG API URL - http://localhost:32768 | ||||
| @@ -8,8 +8,6 @@ import { | ||||
|   getOllamaApiEndpoint, | ||||
|   getOpenaiApiKey, | ||||
|   getDeepseekApiKey, | ||||
|   getAimlApiKey, | ||||
|   getLMStudioApiEndpoint, | ||||
|   updateConfig, | ||||
| } from '@/lib/config'; | ||||
| import { | ||||
| @@ -53,12 +51,10 @@ export const GET = async (req: Request) => { | ||||
|  | ||||
|     config['openaiApiKey'] = getOpenaiApiKey(); | ||||
|     config['ollamaApiUrl'] = getOllamaApiEndpoint(); | ||||
|     config['lmStudioApiUrl'] = getLMStudioApiEndpoint(); | ||||
|     config['anthropicApiKey'] = getAnthropicApiKey(); | ||||
|     config['groqApiKey'] = getGroqApiKey(); | ||||
|     config['geminiApiKey'] = getGeminiApiKey(); | ||||
|     config['deepseekApiKey'] = getDeepseekApiKey(); | ||||
|     config['aimlApiKey'] = getAimlApiKey(); | ||||
|     config['customOpenaiApiUrl'] = getCustomOpenaiApiUrl(); | ||||
|     config['customOpenaiApiKey'] = getCustomOpenaiApiKey(); | ||||
|     config['customOpenaiModelName'] = getCustomOpenaiModelName(); | ||||
| @@ -97,12 +93,6 @@ export const POST = async (req: Request) => { | ||||
|         DEEPSEEK: { | ||||
|           API_KEY: config.deepseekApiKey, | ||||
|         }, | ||||
|         AIMLAPI: { | ||||
|           API_KEY: config.aimlApiKey, | ||||
|         }, | ||||
|         LM_STUDIO: { | ||||
|           API_URL: config.lmStudioApiUrl, | ||||
|         }, | ||||
|         CUSTOM_OPENAI: { | ||||
|           API_URL: config.customOpenaiApiUrl, | ||||
|           API_KEY: config.customOpenaiApiKey, | ||||
|   | ||||
| @@ -16,43 +16,28 @@ const topics = ['AI', 'tech']; /* TODO: Add UI to customize this */ | ||||
|  | ||||
| export const GET = async (req: Request) => { | ||||
|   try { | ||||
|     const params = new URL(req.url).searchParams; | ||||
|     const mode: 'normal' | 'preview' = | ||||
|       (params.get('mode') as 'normal' | 'preview') || 'normal'; | ||||
|  | ||||
|     let data = []; | ||||
|  | ||||
|     if (mode === 'normal') { | ||||
|       data = ( | ||||
|         await Promise.all([ | ||||
|           ...new Array(articleWebsites.length * topics.length) | ||||
|             .fill(0) | ||||
|             .map(async (_, i) => { | ||||
|               return ( | ||||
|                 await searchSearxng( | ||||
|                   `site:${articleWebsites[i % articleWebsites.length]} ${ | ||||
|                     topics[i % topics.length] | ||||
|                   }`, | ||||
|                   { | ||||
|                     engines: ['bing news'], | ||||
|                     pageno: 1, | ||||
|                   }, | ||||
|                 ) | ||||
|               ).results; | ||||
|             }), | ||||
|         ]) | ||||
|       ) | ||||
|         .map((result) => result) | ||||
|         .flat() | ||||
|         .sort(() => Math.random() - 0.5); | ||||
|     } else { | ||||
|       data = ( | ||||
|         await searchSearxng( | ||||
|           `site:${articleWebsites[Math.floor(Math.random() * articleWebsites.length)]} ${topics[Math.floor(Math.random() * topics.length)]}`, | ||||
|           { engines: ['bing news'], pageno: 1 }, | ||||
|         ) | ||||
|       ).results; | ||||
|     } | ||||
|     const data = ( | ||||
|       await Promise.all([ | ||||
|         ...new Array(articleWebsites.length * topics.length) | ||||
|           .fill(0) | ||||
|           .map(async (_, i) => { | ||||
|             return ( | ||||
|               await searchSearxng( | ||||
|                 `site:${articleWebsites[i % articleWebsites.length]} ${ | ||||
|                   topics[i % topics.length] | ||||
|                 }`, | ||||
|                 { | ||||
|                   engines: ['bing news'], | ||||
|                   pageno: 1, | ||||
|                 }, | ||||
|               ) | ||||
|             ).results; | ||||
|           }), | ||||
|       ]) | ||||
|     ) | ||||
|       .map((result) => result) | ||||
|       .flat() | ||||
|       .sort(() => Math.random() - 0.5); | ||||
|  | ||||
|     return Response.json( | ||||
|       { | ||||
|   | ||||
| @@ -1,164 +0,0 @@ | ||||
| export const POST = async (req: Request) => { | ||||
|   try { | ||||
|     const body: { lat: number; lng: number } = await req.json(); | ||||
|  | ||||
|     if (!body.lat || !body.lng) { | ||||
|       return Response.json( | ||||
|         { | ||||
|           message: 'Invalid request.', | ||||
|         }, | ||||
|         { status: 400 }, | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     const res = await fetch( | ||||
|       `https://api.open-meteo.com/v1/forecast?latitude=${body.lat}&longitude=${body.lng}¤t=weather_code,temperature_2m,is_day,relative_humidity_2m,wind_speed_10m&timezone=auto`, | ||||
|     ); | ||||
|  | ||||
|     const data = await res.json(); | ||||
|  | ||||
|     if (data.error) { | ||||
|       console.error(`Error fetching weather data: ${data.reason}`); | ||||
|       return Response.json( | ||||
|         { | ||||
|           message: 'An error has occurred.', | ||||
|         }, | ||||
|         { status: 500 }, | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     const weather: { | ||||
|       temperature: number; | ||||
|       condition: string; | ||||
|       humidity: number; | ||||
|       windSpeed: number; | ||||
|       icon: string; | ||||
|     } = { | ||||
|       temperature: data.current.temperature_2m, | ||||
|       condition: '', | ||||
|       humidity: data.current.relative_humidity_2m, | ||||
|       windSpeed: data.current.wind_speed_10m, | ||||
|       icon: '', | ||||
|     }; | ||||
|  | ||||
|     const code = data.current.weather_code; | ||||
|     const isDay = data.current.is_day === 1; | ||||
|     const dayOrNight = isDay ? 'day' : 'night'; | ||||
|  | ||||
|     switch (code) { | ||||
|       case 0: | ||||
|         weather.icon = `clear-${dayOrNight}`; | ||||
|         weather.condition = 'Clear'; | ||||
|         break; | ||||
|  | ||||
|       case 1: | ||||
|         weather.condition = 'Mainly Clear'; | ||||
|       case 2: | ||||
|         weather.condition = 'Partly Cloudy'; | ||||
|       case 3: | ||||
|         weather.icon = `cloudy-1-${dayOrNight}`; | ||||
|         weather.condition = 'Cloudy'; | ||||
|         break; | ||||
|  | ||||
|       case 45: | ||||
|         weather.condition = 'Fog'; | ||||
|       case 48: | ||||
|         weather.icon = `fog-${dayOrNight}`; | ||||
|         weather.condition = 'Fog'; | ||||
|         break; | ||||
|  | ||||
|       case 51: | ||||
|         weather.condition = 'Light Drizzle'; | ||||
|       case 53: | ||||
|         weather.condition = 'Moderate Drizzle'; | ||||
|       case 55: | ||||
|         weather.icon = `rainy-1-${dayOrNight}`; | ||||
|         weather.condition = 'Dense Drizzle'; | ||||
|         break; | ||||
|  | ||||
|       case 56: | ||||
|         weather.condition = 'Light Freezing Drizzle'; | ||||
|       case 57: | ||||
|         weather.icon = `frost-${dayOrNight}`; | ||||
|         weather.condition = 'Dense Freezing Drizzle'; | ||||
|         break; | ||||
|  | ||||
|       case 61: | ||||
|         weather.condition = 'Slight Rain'; | ||||
|       case 63: | ||||
|         weather.condition = 'Moderate Rain'; | ||||
|       case 65: | ||||
|         weather.condition = 'Heavy Rain'; | ||||
|         weather.icon = `rainy-2-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 66: | ||||
|         weather.condition = 'Light Freezing Rain'; | ||||
|       case 67: | ||||
|         weather.condition = 'Heavy Freezing Rain'; | ||||
|         weather.icon = 'rain-and-sleet-mix'; | ||||
|         break; | ||||
|  | ||||
|       case 71: | ||||
|         weather.condition = 'Slight Snow Fall'; | ||||
|       case 73: | ||||
|         weather.condition = 'Moderate Snow Fall'; | ||||
|       case 75: | ||||
|         weather.condition = 'Heavy Snow Fall'; | ||||
|         weather.icon = `snowy-2-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 77: | ||||
|         weather.condition = 'Snow'; | ||||
|         weather.icon = `snowy-1-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 80: | ||||
|         weather.condition = 'Slight Rain Showers'; | ||||
|       case 81: | ||||
|         weather.condition = 'Moderate Rain Showers'; | ||||
|       case 82: | ||||
|         weather.condition = 'Heavy Rain Showers'; | ||||
|         weather.icon = `rainy-3-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 85: | ||||
|         weather.condition = 'Slight Snow Showers'; | ||||
|       case 86: | ||||
|         weather.condition = 'Moderate Snow Showers'; | ||||
|       case 87: | ||||
|         weather.condition = 'Heavy Snow Showers'; | ||||
|         weather.icon = `snowy-3-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 95: | ||||
|         weather.condition = 'Thunderstorm'; | ||||
|         weather.icon = `scattered-thunderstorms-${dayOrNight}`; | ||||
|         break; | ||||
|  | ||||
|       case 96: | ||||
|         weather.condition = 'Thunderstorm with Slight Hail'; | ||||
|       case 99: | ||||
|         weather.condition = 'Thunderstorm with Heavy Hail'; | ||||
|         weather.icon = 'severe-thunderstorm'; | ||||
|         break; | ||||
|  | ||||
|       default: | ||||
|         weather.icon = `clear-${dayOrNight}`; | ||||
|         weather.condition = 'Clear'; | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     return Response.json(weather); | ||||
|   } catch (err) { | ||||
|     console.error('An error occurred while getting home widgets', err); | ||||
|     return Response.json( | ||||
|       { | ||||
|         message: 'An error has occurred.', | ||||
|       }, | ||||
|       { | ||||
|         status: 500, | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| }; | ||||
| @@ -11,11 +11,3 @@ | ||||
|     display: none; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media screen and (-webkit-min-device-pixel-ratio: 0) { | ||||
|   select, | ||||
|   textarea, | ||||
|   input { | ||||
|     font-size: 16px !important; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,54 +0,0 @@ | ||||
| import type { MetadataRoute } from 'next'; | ||||
|  | ||||
| export default function manifest(): MetadataRoute.Manifest { | ||||
|   return { | ||||
|     name: 'Perplexica - Chat with the internet', | ||||
|     short_name: 'Perplexica', | ||||
|     description: | ||||
|       'Perplexica is an AI powered chatbot that is connected to the internet.', | ||||
|     start_url: '/', | ||||
|     display: 'standalone', | ||||
|     background_color: '#0a0a0a', | ||||
|     theme_color: '#0a0a0a', | ||||
|     screenshots: [ | ||||
|       { | ||||
|         src: '/screenshots/p1.png', | ||||
|         form_factor: 'wide', | ||||
|         sizes: '2560x1600', | ||||
|       }, | ||||
|       { | ||||
|         src: '/screenshots/p2.png', | ||||
|         form_factor: 'wide', | ||||
|         sizes: '2560x1600', | ||||
|       }, | ||||
|       { | ||||
|         src: '/screenshots/p1_small.png', | ||||
|         form_factor: 'narrow', | ||||
|         sizes: '828x1792', | ||||
|       }, | ||||
|       { | ||||
|         src: '/screenshots/p2_small.png', | ||||
|         form_factor: 'narrow', | ||||
|         sizes: '828x1792', | ||||
|       }, | ||||
|     ], | ||||
|     icons: [ | ||||
|       { | ||||
|         src: '/icon-50.png', | ||||
|         sizes: '50x50', | ||||
|         type: 'image/png' as const, | ||||
|       }, | ||||
|       { | ||||
|         src: '/icon-100.png', | ||||
|         sizes: '100x100', | ||||
|         type: 'image/png', | ||||
|       }, | ||||
|       { | ||||
|         src: '/icon.png', | ||||
|         sizes: '440x440', | ||||
|         type: 'image/png', | ||||
|         purpose: 'any', | ||||
|       }, | ||||
|     ], | ||||
|   }; | ||||
| } | ||||
| @@ -7,7 +7,6 @@ import { Switch } from '@headlessui/react'; | ||||
| import ThemeSwitcher from '@/components/theme/Switcher'; | ||||
| import { ImagesIcon, VideoIcon } from 'lucide-react'; | ||||
| import Link from 'next/link'; | ||||
| import { PROVIDER_METADATA } from '@/lib/providers'; | ||||
|  | ||||
| interface SettingsType { | ||||
|   chatModelProviders: { | ||||
| @@ -21,9 +20,7 @@ interface SettingsType { | ||||
|   anthropicApiKey: string; | ||||
|   geminiApiKey: string; | ||||
|   ollamaApiUrl: string; | ||||
|   lmStudioApiUrl: string; | ||||
|   deepseekApiKey: string; | ||||
|   aimlApiKey: string; | ||||
|   customOpenaiApiKey: string; | ||||
|   customOpenaiApiUrl: string; | ||||
|   customOpenaiModelName: string; | ||||
| @@ -144,7 +141,7 @@ const Page = () => { | ||||
|   const [selectedEmbeddingModel, setSelectedEmbeddingModel] = useState< | ||||
|     string | null | ||||
|   >(null); | ||||
|   const [isLoading, setIsLoading] = useState(true); | ||||
|   const [isLoading, setIsLoading] = useState(false); | ||||
|   const [automaticImageSearch, setAutomaticImageSearch] = useState(false); | ||||
|   const [automaticVideoSearch, setAutomaticVideoSearch] = useState(false); | ||||
|   const [systemInstructions, setSystemInstructions] = useState<string>(''); | ||||
| @@ -152,6 +149,7 @@ const Page = () => { | ||||
|  | ||||
|   useEffect(() => { | ||||
|     const fetchConfig = async () => { | ||||
|       setIsLoading(true); | ||||
|       const res = await fetch(`/api/config`, { | ||||
|         headers: { | ||||
|           'Content-Type': 'application/json', | ||||
| @@ -550,9 +548,8 @@ const Page = () => { | ||||
|                         (provider) => ({ | ||||
|                           value: provider, | ||||
|                           label: | ||||
|                             (PROVIDER_METADATA as any)[provider]?.displayName || | ||||
|                             provider.charAt(0).toUpperCase() + | ||||
|                               provider.slice(1), | ||||
|                             provider.slice(1), | ||||
|                         }), | ||||
|                       )} | ||||
|                     /> | ||||
| @@ -693,9 +690,8 @@ const Page = () => { | ||||
|                         (provider) => ({ | ||||
|                           value: provider, | ||||
|                           label: | ||||
|                             (PROVIDER_METADATA as any)[provider]?.displayName || | ||||
|                             provider.charAt(0).toUpperCase() + | ||||
|                               provider.slice(1), | ||||
|                             provider.slice(1), | ||||
|                         }), | ||||
|                       )} | ||||
|                     /> | ||||
| @@ -862,44 +858,6 @@ const Page = () => { | ||||
|                     onSave={(value) => saveConfig('deepseekApiKey', value)} | ||||
|                   /> | ||||
|                 </div> | ||||
|  | ||||
|                 <div className="flex flex-col space-y-1"> | ||||
|                   <p className="text-black/70 dark:text-white/70 text-sm"> | ||||
|                     AI/ML API Key | ||||
|                   </p> | ||||
|                   <Input | ||||
|                     type="text" | ||||
|                     placeholder="AI/ML API Key" | ||||
|                     value={config.aimlApiKey} | ||||
|                     isSaving={savingStates['aimlApiKey']} | ||||
|                     onChange={(e) => { | ||||
|                       setConfig((prev) => ({ | ||||
|                         ...prev!, | ||||
|                         aimlApiKey: e.target.value, | ||||
|                       })); | ||||
|                     }} | ||||
|                     onSave={(value) => saveConfig('aimlApiKey', value)} | ||||
|                   /> | ||||
|                 </div> | ||||
|  | ||||
|                 <div className="flex flex-col space-y-1"> | ||||
|                   <p className="text-black/70 dark:text-white/70 text-sm"> | ||||
|                     LM Studio API URL | ||||
|                   </p> | ||||
|                   <Input | ||||
|                     type="text" | ||||
|                     placeholder="LM Studio API URL" | ||||
|                     value={config.lmStudioApiUrl} | ||||
|                     isSaving={savingStates['lmStudioApiUrl']} | ||||
|                     onChange={(e) => { | ||||
|                       setConfig((prev) => ({ | ||||
|                         ...prev!, | ||||
|                         lmStudioApiUrl: e.target.value, | ||||
|                       })); | ||||
|                     }} | ||||
|                     onSave={(value) => saveConfig('lmStudioApiUrl', value)} | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </SettingsSection> | ||||
|           </div> | ||||
|   | ||||
| @@ -82,29 +82,14 @@ const checkConfig = async ( | ||||
|     ) { | ||||
|       if (!chatModel || !chatModelProvider) { | ||||
|         const chatModelProviders = providers.chatModelProviders; | ||||
|         const chatModelProvidersKeys = Object.keys(chatModelProviders); | ||||
|  | ||||
|         if (!chatModelProviders || chatModelProvidersKeys.length === 0) { | ||||
|           return toast.error('No chat models available'); | ||||
|         } else { | ||||
|           chatModelProvider = | ||||
|             chatModelProvidersKeys.find( | ||||
|               (provider) => | ||||
|                 Object.keys(chatModelProviders[provider]).length > 0, | ||||
|             ) || chatModelProvidersKeys[0]; | ||||
|         } | ||||
|  | ||||
|         if ( | ||||
|           chatModelProvider === 'custom_openai' && | ||||
|           Object.keys(chatModelProviders[chatModelProvider]).length === 0 | ||||
|         ) { | ||||
|           toast.error( | ||||
|             "Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.", | ||||
|           ); | ||||
|           return setHasError(true); | ||||
|         } | ||||
|         chatModelProvider = | ||||
|           chatModelProvider || Object.keys(chatModelProviders)[0]; | ||||
|  | ||||
|         chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; | ||||
|  | ||||
|         if (!chatModelProviders || Object.keys(chatModelProviders).length === 0) | ||||
|           return toast.error('No chat models available'); | ||||
|       } | ||||
|  | ||||
|       if (!embeddingModel || !embeddingModelProvider) { | ||||
| @@ -132,8 +117,7 @@ const checkConfig = async ( | ||||
|  | ||||
|       if ( | ||||
|         Object.keys(chatModelProviders).length > 0 && | ||||
|         (!chatModelProviders[chatModelProvider] || | ||||
|           Object.keys(chatModelProviders[chatModelProvider]).length === 0) | ||||
|         !chatModelProviders[chatModelProvider] | ||||
|       ) { | ||||
|         const chatModelProvidersKeys = Object.keys(chatModelProviders); | ||||
|         chatModelProvider = | ||||
| @@ -148,16 +132,6 @@ const checkConfig = async ( | ||||
|         chatModelProvider && | ||||
|         !chatModelProviders[chatModelProvider][chatModel] | ||||
|       ) { | ||||
|         if ( | ||||
|           chatModelProvider === 'custom_openai' && | ||||
|           Object.keys(chatModelProviders[chatModelProvider]).length === 0 | ||||
|         ) { | ||||
|           toast.error( | ||||
|             "Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.", | ||||
|           ); | ||||
|           return setHasError(true); | ||||
|         } | ||||
|  | ||||
|         chatModel = Object.keys( | ||||
|           chatModelProviders[ | ||||
|             Object.keys(chatModelProviders[chatModelProvider]).length > 0 | ||||
| @@ -165,7 +139,6 @@ const checkConfig = async ( | ||||
|               : Object.keys(chatModelProviders)[0] | ||||
|           ], | ||||
|         )[0]; | ||||
|  | ||||
|         localStorage.setItem('chatModel', chatModel); | ||||
|       } | ||||
|  | ||||
| @@ -390,20 +363,18 @@ const ChatWindow = ({ id }: { id?: string }) => { | ||||
|  | ||||
|       if (data.type === 'sources') { | ||||
|         sources = data.data; | ||||
|         if (!added) { | ||||
|           setMessages((prevMessages) => [ | ||||
|             ...prevMessages, | ||||
|             { | ||||
|               content: '', | ||||
|               messageId: data.messageId, | ||||
|               chatId: chatId!, | ||||
|               role: 'assistant', | ||||
|               sources: sources, | ||||
|               createdAt: new Date(), | ||||
|             }, | ||||
|           ]); | ||||
|           added = true; | ||||
|         } | ||||
|         setMessages((prevMessages) => [ | ||||
|           ...prevMessages, | ||||
|           { | ||||
|             content: '', | ||||
|             messageId: data.messageId, | ||||
|             chatId: chatId!, | ||||
|             role: 'assistant', | ||||
|             sources: sources, | ||||
|             createdAt: new Date(), | ||||
|           }, | ||||
|         ]); | ||||
|         added = true; | ||||
|         setMessageAppeared(true); | ||||
|       } | ||||
|  | ||||
| @@ -421,20 +392,20 @@ const ChatWindow = ({ id }: { id?: string }) => { | ||||
|             }, | ||||
|           ]); | ||||
|           added = true; | ||||
|           setMessageAppeared(true); | ||||
|         } else { | ||||
|           setMessages((prev) => | ||||
|             prev.map((message) => { | ||||
|               if (message.messageId === data.messageId) { | ||||
|                 return { ...message, content: message.content + data.data }; | ||||
|               } | ||||
|  | ||||
|               return message; | ||||
|             }), | ||||
|           ); | ||||
|         } | ||||
|  | ||||
|         setMessages((prev) => | ||||
|           prev.map((message) => { | ||||
|             if (message.messageId === data.messageId) { | ||||
|               return { ...message, content: message.content + data.data }; | ||||
|             } | ||||
|  | ||||
|             return message; | ||||
|           }), | ||||
|         ); | ||||
|  | ||||
|         recievedMessage += data.data; | ||||
|         setMessageAppeared(true); | ||||
|       } | ||||
|  | ||||
|       if (data.type === 'messageEnd') { | ||||
|   | ||||
| @@ -1,9 +1,8 @@ | ||||
| import { Settings } from 'lucide-react'; | ||||
| import EmptyChatMessageInput from './EmptyChatMessageInput'; | ||||
| import { useState } from 'react'; | ||||
| import { File } from './ChatWindow'; | ||||
| import Link from 'next/link'; | ||||
| import WeatherWidget from './WeatherWidget'; | ||||
| import NewsArticleWidget from './NewsArticleWidget'; | ||||
|  | ||||
| const EmptyChat = ({ | ||||
|   sendMessage, | ||||
| @@ -26,6 +25,8 @@ const EmptyChat = ({ | ||||
|   files: File[]; | ||||
|   setFiles: (files: File[]) => void; | ||||
| }) => { | ||||
|   const [isSettingsOpen, setIsSettingsOpen] = useState(false); | ||||
|  | ||||
|   return ( | ||||
|     <div className="relative"> | ||||
|       <div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5"> | ||||
| @@ -33,31 +34,21 @@ const EmptyChat = ({ | ||||
|           <Settings className="cursor-pointer lg:hidden" /> | ||||
|         </Link> | ||||
|       </div> | ||||
|       <div className="flex flex-col items-center justify-center min-h-screen max-w-screen-sm mx-auto p-2 space-y-4"> | ||||
|         <div className="flex flex-col items-center justify-center w-full space-y-8"> | ||||
|           <h2 className="text-black/70 dark:text-white/70 text-3xl font-medium -mt-8"> | ||||
|             Research begins here. | ||||
|           </h2> | ||||
|           <EmptyChatMessageInput | ||||
|             sendMessage={sendMessage} | ||||
|             focusMode={focusMode} | ||||
|             setFocusMode={setFocusMode} | ||||
|             optimizationMode={optimizationMode} | ||||
|             setOptimizationMode={setOptimizationMode} | ||||
|             fileIds={fileIds} | ||||
|             setFileIds={setFileIds} | ||||
|             files={files} | ||||
|             setFiles={setFiles} | ||||
|           /> | ||||
|         </div> | ||||
|         <div className="flex flex-col w-full gap-4 mt-2 sm:flex-row sm:justify-center"> | ||||
|           <div className="flex-1 w-full"> | ||||
|             <WeatherWidget /> | ||||
|           </div> | ||||
|           <div className="flex-1 w-full"> | ||||
|             <NewsArticleWidget /> | ||||
|           </div> | ||||
|         </div> | ||||
|       <div className="flex flex-col items-center justify-center min-h-screen max-w-screen-sm mx-auto p-2 space-y-8"> | ||||
|         <h2 className="text-black/70 dark:text-white/70 text-3xl font-medium -mt-8"> | ||||
|           Research begins here. | ||||
|         </h2> | ||||
|         <EmptyChatMessageInput | ||||
|           sendMessage={sendMessage} | ||||
|           focusMode={focusMode} | ||||
|           setFocusMode={setFocusMode} | ||||
|           optimizationMode={optimizationMode} | ||||
|           setOptimizationMode={setOptimizationMode} | ||||
|           fileIds={fileIds} | ||||
|           setFileIds={setFileIds} | ||||
|           files={files} | ||||
|           setFiles={setFiles} | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
|   | ||||
| @@ -97,7 +97,6 @@ const MessageBox = ({ | ||||
|           }, | ||||
|         ), | ||||
|       ); | ||||
|       setSpeechMessage(message.content.replace(regex, '')); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -76,13 +76,11 @@ const Optimization = ({ | ||||
|               <PopoverButton | ||||
|                 onClick={() => setOptimizationMode(mode.key)} | ||||
|                 key={i} | ||||
|                 disabled={mode.key === 'quality'} | ||||
|                 className={cn( | ||||
|                   'p-2 rounded-lg flex flex-col items-start justify-start text-start space-y-1 duration-200 cursor-pointer transition', | ||||
|                   optimizationMode === mode.key | ||||
|                     ? 'bg-light-secondary dark:bg-dark-secondary' | ||||
|                     : 'hover:bg-light-secondary dark:hover:bg-dark-secondary', | ||||
|                   mode.key === 'quality' && 'opacity-50 cursor-not-allowed', | ||||
|                 )} | ||||
|               > | ||||
|                 <div className="flex flex-row items-center space-x-1 text-black dark:text-white"> | ||||
|   | ||||
| @@ -1,122 +1,8 @@ | ||||
| import { Clock, Edit, Share, Trash, FileText, FileDown } from 'lucide-react'; | ||||
| import { Clock, Edit, Share, Trash } from 'lucide-react'; | ||||
| import { Message } from './ChatWindow'; | ||||
| import { useEffect, useState, Fragment } from 'react'; | ||||
| import { useEffect, useState } from 'react'; | ||||
| import { formatTimeDifference } from '@/lib/utils'; | ||||
| import DeleteChat from './DeleteChat'; | ||||
| import { | ||||
|   Popover, | ||||
|   PopoverButton, | ||||
|   PopoverPanel, | ||||
|   Transition, | ||||
| } from '@headlessui/react'; | ||||
| import jsPDF from 'jspdf'; | ||||
|  | ||||
| const downloadFile = (filename: string, content: string, type: string) => { | ||||
|   const blob = new Blob([content], { type }); | ||||
|   const url = URL.createObjectURL(blob); | ||||
|   const a = document.createElement('a'); | ||||
|   a.href = url; | ||||
|   a.download = filename; | ||||
|   document.body.appendChild(a); | ||||
|   a.click(); | ||||
|   setTimeout(() => { | ||||
|     document.body.removeChild(a); | ||||
|     URL.revokeObjectURL(url); | ||||
|   }, 0); | ||||
| }; | ||||
|  | ||||
| const exportAsMarkdown = (messages: Message[], title: string) => { | ||||
|   const date = new Date(messages[0]?.createdAt || Date.now()).toLocaleString(); | ||||
|   let md = `# 💬 Chat Export: ${title}\n\n`; | ||||
|   md += `*Exported on: ${date}*\n\n---\n`; | ||||
|   messages.forEach((msg, idx) => { | ||||
|     md += `\n---\n`; | ||||
|     md += `**${msg.role === 'user' ? '🧑 User' : '🤖 Assistant'}**   | ||||
| `; | ||||
|     md += `*${new Date(msg.createdAt).toLocaleString()}*\n\n`; | ||||
|     md += `> ${msg.content.replace(/\n/g, '\n> ')}\n`; | ||||
|     if (msg.sources && msg.sources.length > 0) { | ||||
|       md += `\n**Citations:**\n`; | ||||
|       msg.sources.forEach((src: any, i: number) => { | ||||
|         const url = src.metadata?.url || ''; | ||||
|         md += `- [${i + 1}] [${url}](${url})\n`; | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
|   md += '\n---\n'; | ||||
|   downloadFile(`${title || 'chat'}.md`, md, 'text/markdown'); | ||||
| }; | ||||
|  | ||||
| const exportAsPDF = (messages: Message[], title: string) => { | ||||
|   const doc = new jsPDF(); | ||||
|   const date = new Date(messages[0]?.createdAt || Date.now()).toLocaleString(); | ||||
|   let y = 15; | ||||
|   const pageHeight = doc.internal.pageSize.height; | ||||
|   doc.setFontSize(18); | ||||
|   doc.text(`Chat Export: ${title}`, 10, y); | ||||
|   y += 8; | ||||
|   doc.setFontSize(11); | ||||
|   doc.setTextColor(100); | ||||
|   doc.text(`Exported on: ${date}`, 10, y); | ||||
|   y += 8; | ||||
|   doc.setDrawColor(200); | ||||
|   doc.line(10, y, 200, y); | ||||
|   y += 6; | ||||
|   doc.setTextColor(30); | ||||
|   messages.forEach((msg, idx) => { | ||||
|     if (y > pageHeight - 30) { | ||||
|       doc.addPage(); | ||||
|       y = 15; | ||||
|     } | ||||
|     doc.setFont('helvetica', 'bold'); | ||||
|     doc.text(`${msg.role === 'user' ? 'User' : 'Assistant'}`, 10, y); | ||||
|     doc.setFont('helvetica', 'normal'); | ||||
|     doc.setFontSize(10); | ||||
|     doc.setTextColor(120); | ||||
|     doc.text(`${new Date(msg.createdAt).toLocaleString()}`, 40, y); | ||||
|     y += 6; | ||||
|     doc.setTextColor(30); | ||||
|     doc.setFontSize(12); | ||||
|     const lines = doc.splitTextToSize(msg.content, 180); | ||||
|     for (let i = 0; i < lines.length; i++) { | ||||
|       if (y > pageHeight - 20) { | ||||
|         doc.addPage(); | ||||
|         y = 15; | ||||
|       } | ||||
|       doc.text(lines[i], 12, y); | ||||
|       y += 6; | ||||
|     } | ||||
|     if (msg.sources && msg.sources.length > 0) { | ||||
|       doc.setFontSize(11); | ||||
|       doc.setTextColor(80); | ||||
|       if (y > pageHeight - 20) { | ||||
|         doc.addPage(); | ||||
|         y = 15; | ||||
|       } | ||||
|       doc.text('Citations:', 12, y); | ||||
|       y += 5; | ||||
|       msg.sources.forEach((src: any, i: number) => { | ||||
|         const url = src.metadata?.url || ''; | ||||
|         if (y > pageHeight - 15) { | ||||
|           doc.addPage(); | ||||
|           y = 15; | ||||
|         } | ||||
|         doc.text(`- [${i + 1}] ${url}`, 15, y); | ||||
|         y += 5; | ||||
|       }); | ||||
|       doc.setTextColor(30); | ||||
|     } | ||||
|     y += 6; | ||||
|     doc.setDrawColor(230); | ||||
|     if (y > pageHeight - 10) { | ||||
|       doc.addPage(); | ||||
|       y = 15; | ||||
|     } | ||||
|     doc.line(10, y, 200, y); | ||||
|     y += 4; | ||||
|   }); | ||||
|   doc.save(`${title || 'chat'}.pdf`); | ||||
| }; | ||||
|  | ||||
| const Navbar = ({ | ||||
|   chatId, | ||||
| @@ -173,39 +59,10 @@ const Navbar = ({ | ||||
|       <p className="hidden lg:flex">{title}</p> | ||||
|  | ||||
|       <div className="flex flex-row items-center space-x-4"> | ||||
|         <Popover className="relative"> | ||||
|           <PopoverButton className="active:scale-95 transition duration-100 cursor-pointer p-2 rounded-full hover:bg-light-secondary dark:hover:bg-dark-secondary"> | ||||
|             <Share size={17} /> | ||||
|           </PopoverButton> | ||||
|           <Transition | ||||
|             as={Fragment} | ||||
|             enter="transition ease-out duration-100" | ||||
|             enterFrom="opacity-0 translate-y-1" | ||||
|             enterTo="opacity-100 translate-y-0" | ||||
|             leave="transition ease-in duration-75" | ||||
|             leaveFrom="opacity-100 translate-y-0" | ||||
|             leaveTo="opacity-0 translate-y-1" | ||||
|           > | ||||
|             <PopoverPanel className="absolute right-0 mt-2 w-64 rounded-xl shadow-xl bg-light-primary dark:bg-dark-primary border border-light-200 dark:border-dark-200 z-50"> | ||||
|               <div className="flex flex-col py-3 px-3 gap-2"> | ||||
|                 <button | ||||
|                   className="flex items-center gap-2 px-4 py-2 text-left hover:bg-light-secondary dark:hover:bg-dark-secondary transition-colors text-black dark:text-white rounded-lg font-medium" | ||||
|                   onClick={() => exportAsMarkdown(messages, title || '')} | ||||
|                 > | ||||
|                   <FileText size={17} className="text-[#24A0ED]" /> | ||||
|                   Export as Markdown | ||||
|                 </button> | ||||
|                 <button | ||||
|                   className="flex items-center gap-2 px-4 py-2 text-left hover:bg-light-secondary dark:hover:bg-dark-secondary transition-colors text-black dark:text-white rounded-lg font-medium" | ||||
|                   onClick={() => exportAsPDF(messages, title || '')} | ||||
|                 > | ||||
|                   <FileDown size={17} className="text-[#24A0ED]" /> | ||||
|                   Export as PDF | ||||
|                 </button> | ||||
|               </div> | ||||
|             </PopoverPanel> | ||||
|           </Transition> | ||||
|         </Popover> | ||||
|         <Share | ||||
|           size={17} | ||||
|           className="active:scale-95 transition duration-100 cursor-pointer" | ||||
|         /> | ||||
|         <DeleteChat redirect chatId={chatId} chats={[]} setChats={() => {}} /> | ||||
|       </div> | ||||
|     </div> | ||||
|   | ||||
| @@ -1,71 +0,0 @@ | ||||
| import { useEffect, useState } from 'react'; | ||||
|  | ||||
| interface Article { | ||||
|   title: string; | ||||
|   content: string; | ||||
|   url: string; | ||||
|   thumbnail: string; | ||||
| } | ||||
|  | ||||
| const NewsArticleWidget = () => { | ||||
|   const [article, setArticle] = useState<Article | null>(null); | ||||
|   const [loading, setLoading] = useState(true); | ||||
|   const [error, setError] = useState(false); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     fetch('/api/discover?mode=preview') | ||||
|       .then((res) => res.json()) | ||||
|       .then((data) => { | ||||
|         const articles = (data.blogs || []).filter((a: Article) => a.thumbnail); | ||||
|         setArticle(articles[Math.floor(Math.random() * articles.length)]); | ||||
|         setLoading(false); | ||||
|       }) | ||||
|       .catch(() => { | ||||
|         setError(true); | ||||
|         setLoading(false); | ||||
|       }); | ||||
|   }, []); | ||||
|  | ||||
|   return ( | ||||
|     <div className="bg-light-secondary dark:bg-dark-secondary rounded-xl border border-light-200 dark:border-dark-200 shadow-sm flex flex-row items-center w-full h-24 min-h-[96px] max-h-[96px] px-3 py-2 gap-3 overflow-hidden"> | ||||
|       {loading ? ( | ||||
|         <> | ||||
|           <div className="animate-pulse flex flex-row items-center w-full h-full"> | ||||
|             <div className="rounded-lg w-16 min-w-16 max-w-16 h-16 min-h-16 max-h-16 bg-light-200 dark:bg-dark-200 mr-3" /> | ||||
|             <div className="flex flex-col justify-center flex-1 h-full w-0 gap-2"> | ||||
|               <div className="h-4 w-3/4 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|               <div className="h-3 w-1/2 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|             </div> | ||||
|           </div> | ||||
|         </> | ||||
|       ) : error ? ( | ||||
|         <div className="w-full text-xs text-red-400">Could not load news.</div> | ||||
|       ) : article ? ( | ||||
|         <a | ||||
|           href={`/?q=Summary: ${article.url}`} | ||||
|           className="flex flex-row items-center w-full h-full group" | ||||
|         > | ||||
|           <img | ||||
|             className="object-cover rounded-lg w-16 min-w-16 max-w-16 h-16 min-h-16 max-h-16 border border-light-200 dark:border-dark-200 bg-light-200 dark:bg-dark-200 group-hover:opacity-90 transition" | ||||
|             src={ | ||||
|               new URL(article.thumbnail).origin + | ||||
|               new URL(article.thumbnail).pathname + | ||||
|               `?id=${new URL(article.thumbnail).searchParams.get('id')}` | ||||
|             } | ||||
|             alt={article.title} | ||||
|           /> | ||||
|           <div className="flex flex-col justify-center flex-1 h-full pl-3 w-0"> | ||||
|             <div className="font-bold text-xs text-black dark:text-white leading-tight truncate overflow-hidden whitespace-nowrap"> | ||||
|               {article.title} | ||||
|             </div> | ||||
|             <p className="text-black/70 dark:text-white/70 text-xs leading-snug truncate overflow-hidden whitespace-nowrap"> | ||||
|               {article.content} | ||||
|             </p> | ||||
|           </div> | ||||
|         </a> | ||||
|       ) : null} | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| export default NewsArticleWidget; | ||||
| @@ -1,155 +0,0 @@ | ||||
| import { Cloud, Sun, CloudRain, CloudSnow, Wind } from 'lucide-react'; | ||||
| import { useEffect, useState } from 'react'; | ||||
|  | ||||
| const WeatherWidget = () => { | ||||
|   const [data, setData] = useState({ | ||||
|     temperature: 0, | ||||
|     condition: '', | ||||
|     location: '', | ||||
|     humidity: 0, | ||||
|     windSpeed: 0, | ||||
|     icon: '', | ||||
|   }); | ||||
|   const [loading, setLoading] = useState(true); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     const getApproxLocation = async () => { | ||||
|       const res = await fetch('https://ipwhois.app/json/'); | ||||
|       const data = await res.json(); | ||||
|  | ||||
|       return { | ||||
|         latitude: data.latitude, | ||||
|         longitude: data.longitude, | ||||
|         city: data.city, | ||||
|       }; | ||||
|     }; | ||||
|  | ||||
|     const getLocation = async ( | ||||
|       callback: (location: { | ||||
|         latitude: number; | ||||
|         longitude: number; | ||||
|         city: string; | ||||
|       }) => void, | ||||
|     ) => { | ||||
|       if (navigator.geolocation) { | ||||
|         const result = await navigator.permissions.query({ | ||||
|           name: 'geolocation', | ||||
|         }); | ||||
|  | ||||
|         if (result.state === 'granted') { | ||||
|           navigator.geolocation.getCurrentPosition(async (position) => { | ||||
|             const res = await fetch( | ||||
|               `https://api-bdc.io/data/reverse-geocode-client?latitude=${position.coords.latitude}&longitude=${position.coords.longitude}&localityLanguage=en`, | ||||
|               { | ||||
|                 method: 'GET', | ||||
|                 headers: { | ||||
|                   'Content-Type': 'application/json', | ||||
|                 }, | ||||
|               }, | ||||
|             ); | ||||
|  | ||||
|             const data = await res.json(); | ||||
|  | ||||
|             callback({ | ||||
|               latitude: position.coords.latitude, | ||||
|               longitude: position.coords.longitude, | ||||
|               city: data.locality, | ||||
|             }); | ||||
|           }); | ||||
|         } else if (result.state === 'prompt') { | ||||
|           callback(await getApproxLocation()); | ||||
|           navigator.geolocation.getCurrentPosition((position) => {}); | ||||
|         } else if (result.state === 'denied') { | ||||
|           callback(await getApproxLocation()); | ||||
|         } | ||||
|       } else { | ||||
|         callback(await getApproxLocation()); | ||||
|       } | ||||
|     }; | ||||
|  | ||||
|     getLocation(async (location) => { | ||||
|       const res = await fetch(`/api/weather`, { | ||||
|         method: 'POST', | ||||
|         body: JSON.stringify({ | ||||
|           lat: location.latitude, | ||||
|           lng: location.longitude, | ||||
|         }), | ||||
|       }); | ||||
|  | ||||
|       const data = await res.json(); | ||||
|  | ||||
|       if (res.status !== 200) { | ||||
|         console.error('Error fetching weather data'); | ||||
|         setLoading(false); | ||||
|         return; | ||||
|       } | ||||
|  | ||||
|       setData({ | ||||
|         temperature: data.temperature, | ||||
|         condition: data.condition, | ||||
|         location: location.city, | ||||
|         humidity: data.humidity, | ||||
|         windSpeed: data.windSpeed, | ||||
|         icon: data.icon, | ||||
|       }); | ||||
|       setLoading(false); | ||||
|     }); | ||||
|   }, []); | ||||
|  | ||||
|   return ( | ||||
|     <div className="bg-light-secondary dark:bg-dark-secondary rounded-xl border border-light-200 dark:border-dark-200 shadow-sm flex flex-row items-center w-full h-24 min-h-[96px] max-h-[96px] px-3 py-2 gap-3"> | ||||
|       {loading ? ( | ||||
|         <> | ||||
|           <div className="flex flex-col items-center justify-center w-16 min-w-16 max-w-16 h-full animate-pulse"> | ||||
|             <div className="h-10 w-10 rounded-full bg-light-200 dark:bg-dark-200 mb-2" /> | ||||
|             <div className="h-4 w-10 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|           </div> | ||||
|           <div className="flex flex-col justify-between flex-1 h-full py-1 animate-pulse"> | ||||
|             <div className="flex flex-row items-center justify-between"> | ||||
|               <div className="h-3 w-20 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|               <div className="h-3 w-12 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|             </div> | ||||
|             <div className="h-3 w-16 rounded bg-light-200 dark:bg-dark-200 mt-1" /> | ||||
|             <div className="flex flex-row justify-between w-full mt-auto pt-1 border-t border-light-200 dark:border-dark-200"> | ||||
|               <div className="h-3 w-16 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|               <div className="h-3 w-8 rounded bg-light-200 dark:bg-dark-200" /> | ||||
|             </div> | ||||
|           </div> | ||||
|         </> | ||||
|       ) : ( | ||||
|         <> | ||||
|           <div className="flex flex-col items-center justify-center w-16 min-w-16 max-w-16 h-full"> | ||||
|             <img | ||||
|               src={`/weather-ico/${data.icon}.svg`} | ||||
|               alt={data.condition} | ||||
|               className="h-10 w-auto" | ||||
|             /> | ||||
|             <span className="text-base font-semibold text-black dark:text-white"> | ||||
|               {data.temperature}°C | ||||
|             </span> | ||||
|           </div> | ||||
|           <div className="flex flex-col justify-between flex-1 h-full py-1"> | ||||
|             <div className="flex flex-row items-center justify-between"> | ||||
|               <span className="text-xs font-medium text-black dark:text-white"> | ||||
|                 {data.location} | ||||
|               </span> | ||||
|               <span className="flex items-center text-xs text-black/60 dark:text-white/60"> | ||||
|                 <Wind className="w-3 h-3 mr-1" /> | ||||
|                 {data.windSpeed} km/h | ||||
|               </span> | ||||
|             </div> | ||||
|             <span className="text-xs text-black/60 dark:text-white/60 mt-1"> | ||||
|               {data.condition} | ||||
|             </span> | ||||
|             <div className="flex flex-row justify-between w-full mt-auto pt-1 border-t border-light-200 dark:border-dark-200 text-xs text-black/60 dark:text-white/60"> | ||||
|               <span>Humidity: {data.humidity}%</span> | ||||
|               <span>Now</span> | ||||
|             </div> | ||||
|           </div> | ||||
|         </> | ||||
|       )} | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| export default WeatherWidget; | ||||
| @@ -1,14 +1,7 @@ | ||||
| import fs from 'fs'; | ||||
| import path from 'path'; | ||||
| import toml from '@iarna/toml'; | ||||
|  | ||||
| // Use dynamic imports for Node.js modules to prevent client-side errors | ||||
| let fs: any; | ||||
| let path: any; | ||||
| if (typeof window === 'undefined') { | ||||
|   // We're on the server | ||||
|   fs = require('fs'); | ||||
|   path = require('path'); | ||||
| } | ||||
|  | ||||
| const configFileName = 'config.toml'; | ||||
|  | ||||
| interface Config { | ||||
| @@ -35,12 +28,6 @@ interface Config { | ||||
|     DEEPSEEK: { | ||||
|       API_KEY: string; | ||||
|     }; | ||||
|     AIMLAPI: { | ||||
|       API_KEY: string; | ||||
|     }; | ||||
|     LM_STUDIO: { | ||||
|       API_URL: string; | ||||
|     }; | ||||
|     CUSTOM_OPENAI: { | ||||
|       API_URL: string; | ||||
|       API_KEY: string; | ||||
| @@ -56,17 +43,10 @@ type RecursivePartial<T> = { | ||||
|   [P in keyof T]?: RecursivePartial<T[P]>; | ||||
| }; | ||||
|  | ||||
| const loadConfig = () => { | ||||
|   // Server-side only | ||||
|   if (typeof window === 'undefined') { | ||||
|     return toml.parse( | ||||
|       fs.readFileSync(path.join(process.cwd(), `${configFileName}`), 'utf-8'), | ||||
|     ) as any as Config; | ||||
|   } | ||||
|  | ||||
|   // Client-side fallback - settings will be loaded via API | ||||
|   return {} as Config; | ||||
| }; | ||||
| const loadConfig = () => | ||||
|   toml.parse( | ||||
|     fs.readFileSync(path.join(process.cwd(), `${configFileName}`), 'utf-8'), | ||||
|   ) as any as Config; | ||||
|  | ||||
| export const getSimilarityMeasure = () => | ||||
|   loadConfig().GENERAL.SIMILARITY_MEASURE; | ||||
| @@ -88,8 +68,6 @@ export const getOllamaApiEndpoint = () => loadConfig().MODELS.OLLAMA.API_URL; | ||||
|  | ||||
| export const getDeepseekApiKey = () => loadConfig().MODELS.DEEPSEEK.API_KEY; | ||||
|  | ||||
| export const getAimlApiKey = () => loadConfig().MODELS.AIMLAPI.API_KEY; | ||||
|  | ||||
| export const getCustomOpenaiApiKey = () => | ||||
|   loadConfig().MODELS.CUSTOM_OPENAI.API_KEY; | ||||
|  | ||||
| @@ -99,9 +77,6 @@ export const getCustomOpenaiApiUrl = () => | ||||
| export const getCustomOpenaiModelName = () => | ||||
|   loadConfig().MODELS.CUSTOM_OPENAI.MODEL_NAME; | ||||
|  | ||||
| export const getLMStudioApiEndpoint = () => | ||||
|   loadConfig().MODELS.LM_STUDIO.API_URL; | ||||
|  | ||||
| const mergeConfigs = (current: any, update: any): any => { | ||||
|   if (update === null || update === undefined) { | ||||
|     return current; | ||||
| @@ -134,13 +109,10 @@ const mergeConfigs = (current: any, update: any): any => { | ||||
| }; | ||||
|  | ||||
| export const updateConfig = (config: RecursivePartial<Config>) => { | ||||
|   // Server-side only | ||||
|   if (typeof window === 'undefined') { | ||||
|     const currentConfig = loadConfig(); | ||||
|     const mergedConfig = mergeConfigs(currentConfig, config); | ||||
|     fs.writeFileSync( | ||||
|       path.join(path.join(process.cwd(), `${configFileName}`)), | ||||
|       toml.stringify(mergedConfig), | ||||
|     ); | ||||
|   } | ||||
|   const currentConfig = loadConfig(); | ||||
|   const mergedConfig = mergeConfigs(currentConfig, config); | ||||
|   fs.writeFileSync( | ||||
|     path.join(path.join(process.cwd(), `${configFileName}`)), | ||||
|     toml.stringify(mergedConfig), | ||||
|   ); | ||||
| }; | ||||
|   | ||||
| @@ -3,8 +3,7 @@ import Database from 'better-sqlite3'; | ||||
| import * as schema from './schema'; | ||||
| import path from 'path'; | ||||
|  | ||||
| const DATA_DIR = process.env.DATA_DIR || process.cwd(); | ||||
| const sqlite = new Database(path.join(DATA_DIR, './data/db.sqlite')); | ||||
| const sqlite = new Database(path.join(process.cwd(), 'data/db.sqlite')); | ||||
| const db = drizzle(sqlite, { | ||||
|   schema: schema, | ||||
| }); | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
| import db from './'; | ||||
| import { migrate } from 'drizzle-orm/better-sqlite3/migrator'; | ||||
| import path from 'path'; | ||||
|  | ||||
| migrate(db, { migrationsFolder: path.join(process.cwd(), 'drizzle') }); | ||||
| @@ -1,94 +0,0 @@ | ||||
| import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai'; | ||||
| import { getAimlApiKey } from '../config'; | ||||
| import { ChatModel, EmbeddingModel } from '.'; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
| import { Embeddings } from '@langchain/core/embeddings'; | ||||
| import axios from 'axios'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'aimlapi', | ||||
|   displayName: 'AI/ML API', | ||||
| }; | ||||
|  | ||||
| interface AimlApiModel { | ||||
|   id: string; | ||||
|   name?: string; | ||||
|   type?: string; | ||||
| } | ||||
|  | ||||
| const API_URL = 'https://api.aimlapi.com'; | ||||
|  | ||||
| export const loadAimlApiChatModels = async () => { | ||||
|   const apiKey = getAimlApiKey(); | ||||
|  | ||||
|   if (!apiKey) return {}; | ||||
|  | ||||
|   try { | ||||
|     const response = await axios.get(`${API_URL}/models`, { | ||||
|       headers: { | ||||
|         'Content-Type': 'application/json', | ||||
|         Authorization: `Bearer ${apiKey}`, | ||||
|       }, | ||||
|     }); | ||||
|  | ||||
|     const chatModels: Record<string, ChatModel> = {}; | ||||
|  | ||||
|     response.data.data.forEach((model: AimlApiModel) => { | ||||
|       if (model.type === 'chat-completion') { | ||||
|         chatModels[model.id] = { | ||||
|           displayName: model.name || model.id, | ||||
|           model: new ChatOpenAI({ | ||||
|             openAIApiKey: apiKey, | ||||
|             modelName: model.id, | ||||
|             temperature: 0.7, | ||||
|             configuration: { | ||||
|               baseURL: API_URL, | ||||
|             }, | ||||
|           }) as unknown as BaseChatModel, | ||||
|         }; | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|     return chatModels; | ||||
|   } catch (err) { | ||||
|     console.error(`Error loading AI/ML API models: ${err}`); | ||||
|     return {}; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export const loadAimlApiEmbeddingModels = async () => { | ||||
|   const apiKey = getAimlApiKey(); | ||||
|  | ||||
|   if (!apiKey) return {}; | ||||
|  | ||||
|   try { | ||||
|     const response = await axios.get(`${API_URL}/models`, { | ||||
|       headers: { | ||||
|         'Content-Type': 'application/json', | ||||
|         Authorization: `Bearer ${apiKey}`, | ||||
|       }, | ||||
|     }); | ||||
|  | ||||
|     const embeddingModels: Record<string, EmbeddingModel> = {}; | ||||
|  | ||||
|     response.data.data.forEach((model: AimlApiModel) => { | ||||
|       if (model.type === 'embedding') { | ||||
|         embeddingModels[model.id] = { | ||||
|           displayName: model.name || model.id, | ||||
|           model: new OpenAIEmbeddings({ | ||||
|             openAIApiKey: apiKey, | ||||
|             modelName: model.id, | ||||
|             configuration: { | ||||
|               baseURL: API_URL, | ||||
|             }, | ||||
|           }) as unknown as Embeddings, | ||||
|         }; | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|     return embeddingModels; | ||||
|   } catch (err) { | ||||
|     console.error(`Error loading AI/ML API embeddings models: ${err}`); | ||||
|     return {}; | ||||
|   } | ||||
| }; | ||||
| @@ -1,11 +1,6 @@ | ||||
| import { ChatAnthropic } from '@langchain/anthropic'; | ||||
| import { ChatModel } from '.'; | ||||
| import { getAnthropicApiKey } from '../config'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'anthropic', | ||||
|   displayName: 'Anthropic', | ||||
| }; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
|  | ||||
| const anthropicChatModels: Record<string, string>[] = [ | ||||
|   | ||||
| @@ -3,11 +3,6 @@ import { getDeepseekApiKey } from '../config'; | ||||
| import { ChatModel } from '.'; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'deepseek', | ||||
|   displayName: 'Deepseek AI', | ||||
| }; | ||||
|  | ||||
| const deepseekChatModels: Record<string, string>[] = [ | ||||
|   { | ||||
|     displayName: 'Deepseek Chat (Deepseek V3)', | ||||
|   | ||||
| @@ -4,26 +4,13 @@ import { | ||||
| } from '@langchain/google-genai'; | ||||
| import { getGeminiApiKey } from '../config'; | ||||
| import { ChatModel, EmbeddingModel } from '.'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'gemini', | ||||
|   displayName: 'Google Gemini', | ||||
| }; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
| import { Embeddings } from '@langchain/core/embeddings'; | ||||
|  | ||||
| const geminiChatModels: Record<string, string>[] = [ | ||||
|   { | ||||
|     displayName: 'Gemini 2.5 Flash Preview 05-20', | ||||
|     key: 'gemini-2.5-flash-preview-05-20', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Gemini 2.5 Pro Preview', | ||||
|     key: 'gemini-2.5-pro-preview-05-06', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Gemini 2.5 Pro Experimental', | ||||
|     key: 'gemini-2.5-pro-preview-05-06', | ||||
|     key: 'gemini-2.5-pro-exp-03-25', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Gemini 2.0 Flash', | ||||
|   | ||||
| @@ -1,36 +1,101 @@ | ||||
| import { ChatOpenAI } from '@langchain/openai'; | ||||
| import { getGroqApiKey } from '../config'; | ||||
| import { ChatModel } from '.'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'groq', | ||||
|   displayName: 'Groq', | ||||
| }; | ||||
|  | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
|  | ||||
| const groqChatModels: Record<string, string>[] = [ | ||||
|   { | ||||
|     displayName: 'Gemma2 9B IT', | ||||
|     key: 'gemma2-9b-it', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.3 70B Versatile', | ||||
|     key: 'llama-3.3-70b-versatile', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.1 8B Instant', | ||||
|     key: 'llama-3.1-8b-instant', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama3 70B 8192', | ||||
|     key: 'llama3-70b-8192', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama3 8B 8192', | ||||
|     key: 'llama3-8b-8192', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Mixtral 8x7B 32768', | ||||
|     key: 'mixtral-8x7b-32768', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Qwen QWQ 32B (Preview)', | ||||
|     key: 'qwen-qwq-32b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Mistral Saba 24B (Preview)', | ||||
|     key: 'mistral-saba-24b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Qwen 2.5 Coder 32B (Preview)', | ||||
|     key: 'qwen-2.5-coder-32b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Qwen 2.5 32B (Preview)', | ||||
|     key: 'qwen-2.5-32b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'DeepSeek R1 Distill Qwen 32B (Preview)', | ||||
|     key: 'deepseek-r1-distill-qwen-32b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'DeepSeek R1 Distill Llama 70B (Preview)', | ||||
|     key: 'deepseek-r1-distill-llama-70b', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.3 70B SpecDec (Preview)', | ||||
|     key: 'llama-3.3-70b-specdec', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.2 1B Preview (Preview)', | ||||
|     key: 'llama-3.2-1b-preview', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.2 3B Preview (Preview)', | ||||
|     key: 'llama-3.2-3b-preview', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.2 11B Vision Preview (Preview)', | ||||
|     key: 'llama-3.2-11b-vision-preview', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'Llama 3.2 90B Vision Preview (Preview)', | ||||
|     key: 'llama-3.2-90b-vision-preview', | ||||
|   }, | ||||
|   /* { | ||||
|     displayName: 'Llama 4 Maverick 17B 128E Instruct (Preview)', | ||||
|     key: 'meta-llama/llama-4-maverick-17b-128e-instruct', | ||||
|   }, */ | ||||
|   { | ||||
|     displayName: 'Llama 4 Scout 17B 16E Instruct (Preview)', | ||||
|     key: 'meta-llama/llama-4-scout-17b-16e-instruct', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| export const loadGroqChatModels = async () => { | ||||
|   const groqApiKey = getGroqApiKey(); | ||||
|  | ||||
|   if (!groqApiKey) return {}; | ||||
|  | ||||
|   try { | ||||
|     const res = await fetch('https://api.groq.com/openai/v1/models', { | ||||
|       method: 'GET', | ||||
|       headers: { | ||||
|         Authorization: `bearer ${groqApiKey}`, | ||||
|         'Content-Type': 'application/json', | ||||
|       }, | ||||
|     }); | ||||
|  | ||||
|     const groqChatModels = (await res.json()).data; | ||||
|     const chatModels: Record<string, ChatModel> = {}; | ||||
|  | ||||
|     groqChatModels.forEach((model: any) => { | ||||
|       chatModels[model.id] = { | ||||
|         displayName: model.id, | ||||
|     groqChatModels.forEach((model) => { | ||||
|       chatModels[model.key] = { | ||||
|         displayName: model.displayName, | ||||
|         model: new ChatOpenAI({ | ||||
|           openAIApiKey: groqApiKey, | ||||
|           modelName: model.id, | ||||
|           modelName: model.key, | ||||
|           temperature: 0.7, | ||||
|           configuration: { | ||||
|             baseURL: 'https://api.groq.com/openai/v1', | ||||
|   | ||||
| @@ -1,66 +1,18 @@ | ||||
| import { Embeddings } from '@langchain/core/embeddings'; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
| import { | ||||
|   loadOpenAIChatModels, | ||||
|   loadOpenAIEmbeddingModels, | ||||
|   PROVIDER_INFO as OpenAIInfo, | ||||
|   PROVIDER_INFO, | ||||
| } from './openai'; | ||||
| import { loadOpenAIChatModels, loadOpenAIEmbeddingModels } from './openai'; | ||||
| import { | ||||
|   getCustomOpenaiApiKey, | ||||
|   getCustomOpenaiApiUrl, | ||||
|   getCustomOpenaiModelName, | ||||
| } from '../config'; | ||||
| import { ChatOpenAI } from '@langchain/openai'; | ||||
| import { | ||||
|   loadOllamaChatModels, | ||||
|   loadOllamaEmbeddingModels, | ||||
|   PROVIDER_INFO as OllamaInfo, | ||||
| } from './ollama'; | ||||
| import { loadGroqChatModels, PROVIDER_INFO as GroqInfo } from './groq'; | ||||
| import { | ||||
|   loadAnthropicChatModels, | ||||
|   PROVIDER_INFO as AnthropicInfo, | ||||
| } from './anthropic'; | ||||
| import { | ||||
|   loadGeminiChatModels, | ||||
|   loadGeminiEmbeddingModels, | ||||
|   PROVIDER_INFO as GeminiInfo, | ||||
| } from './gemini'; | ||||
| import { | ||||
|   loadTransformersEmbeddingsModels, | ||||
|   PROVIDER_INFO as TransformersInfo, | ||||
| } from './transformers'; | ||||
| import { | ||||
|   loadDeepseekChatModels, | ||||
|   PROVIDER_INFO as DeepseekInfo, | ||||
| } from './deepseek'; | ||||
| import { | ||||
|   loadAimlApiChatModels, | ||||
|   loadAimlApiEmbeddingModels, | ||||
|   PROVIDER_INFO as AimlApiInfo, | ||||
| } from './aimlapi'; | ||||
| import { | ||||
|   loadLMStudioChatModels, | ||||
|   loadLMStudioEmbeddingsModels, | ||||
|   PROVIDER_INFO as LMStudioInfo, | ||||
| } from './lmstudio'; | ||||
|  | ||||
| export const PROVIDER_METADATA = { | ||||
|   openai: OpenAIInfo, | ||||
|   ollama: OllamaInfo, | ||||
|   groq: GroqInfo, | ||||
|   anthropic: AnthropicInfo, | ||||
|   gemini: GeminiInfo, | ||||
|   transformers: TransformersInfo, | ||||
|   deepseek: DeepseekInfo, | ||||
|   aimlapi: AimlApiInfo, | ||||
|   lmstudio: LMStudioInfo, | ||||
|   custom_openai: { | ||||
|     key: 'custom_openai', | ||||
|     displayName: 'Custom OpenAI', | ||||
|   }, | ||||
| }; | ||||
| import { loadOllamaChatModels, loadOllamaEmbeddingModels } from './ollama'; | ||||
| import { loadGroqChatModels } from './groq'; | ||||
| import { loadAnthropicChatModels } from './anthropic'; | ||||
| import { loadGeminiChatModels, loadGeminiEmbeddingModels } from './gemini'; | ||||
| import { loadTransformersEmbeddingsModels } from './transformers'; | ||||
| import { loadDeepseekChatModels } from './deepseek'; | ||||
|  | ||||
| export interface ChatModel { | ||||
|   displayName: string; | ||||
| @@ -82,8 +34,6 @@ export const chatModelProviders: Record< | ||||
|   anthropic: loadAnthropicChatModels, | ||||
|   gemini: loadGeminiChatModels, | ||||
|   deepseek: loadDeepseekChatModels, | ||||
|   aimlapi: loadAimlApiChatModels, | ||||
|   lmstudio: loadLMStudioChatModels, | ||||
| }; | ||||
|  | ||||
| export const embeddingModelProviders: Record< | ||||
| @@ -94,8 +44,6 @@ export const embeddingModelProviders: Record< | ||||
|   ollama: loadOllamaEmbeddingModels, | ||||
|   gemini: loadGeminiEmbeddingModels, | ||||
|   transformers: loadTransformersEmbeddingsModels, | ||||
|   aimlapi: loadAimlApiEmbeddingModels, | ||||
|   lmstudio: loadLMStudioEmbeddingsModels, | ||||
| }; | ||||
|  | ||||
| export const getAvailableChatModelProviders = async () => { | ||||
|   | ||||
| @@ -1,100 +0,0 @@ | ||||
| import { getKeepAlive, getLMStudioApiEndpoint } from '../config'; | ||||
| import axios from 'axios'; | ||||
| import { ChatModel, EmbeddingModel } from '.'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'lmstudio', | ||||
|   displayName: 'LM Studio', | ||||
| }; | ||||
| import { ChatOpenAI } from '@langchain/openai'; | ||||
| import { OpenAIEmbeddings } from '@langchain/openai'; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
| import { Embeddings } from '@langchain/core/embeddings'; | ||||
|  | ||||
| interface LMStudioModel { | ||||
|   id: string; | ||||
|   name?: string; | ||||
| } | ||||
|  | ||||
| const ensureV1Endpoint = (endpoint: string): string => | ||||
|   endpoint.endsWith('/v1') ? endpoint : `${endpoint}/v1`; | ||||
|  | ||||
| const checkServerAvailability = async (endpoint: string): Promise<boolean> => { | ||||
|   try { | ||||
|     await axios.get(`${ensureV1Endpoint(endpoint)}/models`, { | ||||
|       headers: { 'Content-Type': 'application/json' }, | ||||
|     }); | ||||
|     return true; | ||||
|   } catch { | ||||
|     return false; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export const loadLMStudioChatModels = async () => { | ||||
|   const endpoint = getLMStudioApiEndpoint(); | ||||
|  | ||||
|   if (!endpoint) return {}; | ||||
|   if (!(await checkServerAvailability(endpoint))) return {}; | ||||
|  | ||||
|   try { | ||||
|     const response = await axios.get(`${ensureV1Endpoint(endpoint)}/models`, { | ||||
|       headers: { 'Content-Type': 'application/json' }, | ||||
|     }); | ||||
|  | ||||
|     const chatModels: Record<string, ChatModel> = {}; | ||||
|  | ||||
|     response.data.data.forEach((model: LMStudioModel) => { | ||||
|       chatModels[model.id] = { | ||||
|         displayName: model.name || model.id, | ||||
|         model: new ChatOpenAI({ | ||||
|           openAIApiKey: 'lm-studio', | ||||
|           configuration: { | ||||
|             baseURL: ensureV1Endpoint(endpoint), | ||||
|           }, | ||||
|           modelName: model.id, | ||||
|           temperature: 0.7, | ||||
|           streaming: true, | ||||
|           maxRetries: 3, | ||||
|         }) as unknown as BaseChatModel, | ||||
|       }; | ||||
|     }); | ||||
|  | ||||
|     return chatModels; | ||||
|   } catch (err) { | ||||
|     console.error(`Error loading LM Studio models: ${err}`); | ||||
|     return {}; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| export const loadLMStudioEmbeddingsModels = async () => { | ||||
|   const endpoint = getLMStudioApiEndpoint(); | ||||
|  | ||||
|   if (!endpoint) return {}; | ||||
|   if (!(await checkServerAvailability(endpoint))) return {}; | ||||
|  | ||||
|   try { | ||||
|     const response = await axios.get(`${ensureV1Endpoint(endpoint)}/models`, { | ||||
|       headers: { 'Content-Type': 'application/json' }, | ||||
|     }); | ||||
|  | ||||
|     const embeddingsModels: Record<string, EmbeddingModel> = {}; | ||||
|  | ||||
|     response.data.data.forEach((model: LMStudioModel) => { | ||||
|       embeddingsModels[model.id] = { | ||||
|         displayName: model.name || model.id, | ||||
|         model: new OpenAIEmbeddings({ | ||||
|           openAIApiKey: 'lm-studio', | ||||
|           configuration: { | ||||
|             baseURL: ensureV1Endpoint(endpoint), | ||||
|           }, | ||||
|           modelName: model.id, | ||||
|         }) as unknown as Embeddings, | ||||
|       }; | ||||
|     }); | ||||
|  | ||||
|     return embeddingsModels; | ||||
|   } catch (err) { | ||||
|     console.error(`Error loading LM Studio embeddings model: ${err}`); | ||||
|     return {}; | ||||
|   } | ||||
| }; | ||||
| @@ -1,11 +1,6 @@ | ||||
| import axios from 'axios'; | ||||
| import { getKeepAlive, getOllamaApiEndpoint } from '../config'; | ||||
| import { ChatModel, EmbeddingModel } from '.'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'ollama', | ||||
|   displayName: 'Ollama', | ||||
| }; | ||||
| import { ChatOllama } from '@langchain/community/chat_models/ollama'; | ||||
| import { OllamaEmbeddings } from '@langchain/community/embeddings/ollama'; | ||||
|  | ||||
|   | ||||
| @@ -1,11 +1,6 @@ | ||||
| import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai'; | ||||
| import { getOpenaiApiKey } from '../config'; | ||||
| import { ChatModel, EmbeddingModel } from '.'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'openai', | ||||
|   displayName: 'OpenAI', | ||||
| }; | ||||
| import { BaseChatModel } from '@langchain/core/language_models/chat_models'; | ||||
| import { Embeddings } from '@langchain/core/embeddings'; | ||||
|  | ||||
| @@ -30,18 +25,6 @@ const openaiChatModels: Record<string, string>[] = [ | ||||
|     displayName: 'GPT-4 omni mini', | ||||
|     key: 'gpt-4o-mini', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'GPT 4.1 nano', | ||||
|     key: 'gpt-4.1-nano', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'GPT 4.1 mini', | ||||
|     key: 'gpt-4.1-mini', | ||||
|   }, | ||||
|   { | ||||
|     displayName: 'GPT 4.1', | ||||
|     key: 'gpt-4.1', | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| const openaiEmbeddingModels: Record<string, string>[] = [ | ||||
|   | ||||
| @@ -1,10 +1,5 @@ | ||||
| import { HuggingFaceTransformersEmbeddings } from '../huggingfaceTransformer'; | ||||
|  | ||||
| export const PROVIDER_INFO = { | ||||
|   key: 'transformers', | ||||
|   displayName: 'Hugging Face', | ||||
| }; | ||||
|  | ||||
| export const loadTransformersEmbeddingsModels = async () => { | ||||
|   try { | ||||
|     const embeddingModels = { | ||||
|   | ||||
| @@ -6,24 +6,20 @@ import { | ||||
|   MessagesPlaceholder, | ||||
|   PromptTemplate, | ||||
| } from '@langchain/core/prompts'; | ||||
| import { | ||||
|   RunnableLambda, | ||||
|   RunnableMap, | ||||
|   RunnableSequence, | ||||
| } from '@langchain/core/runnables'; | ||||
| import { BaseMessage } from '@langchain/core/messages'; | ||||
| import { StringOutputParser } from '@langchain/core/output_parsers'; | ||||
| import LineListOutputParser from '../outputParsers/listLineOutputParser'; | ||||
| import LineOutputParser from '../outputParsers/lineOutputParser'; | ||||
| import { getDocumentsFromLinks } from '../utils/documents'; | ||||
| import { Document } from 'langchain/document'; | ||||
| import { searchSearxng } from '../searxng'; | ||||
| import { searchSearxng, SearxngSearchResult } from '../searxng'; | ||||
| import path from 'node:path'; | ||||
| import fs from 'node:fs'; | ||||
| import computeSimilarity from '../utils/computeSimilarity'; | ||||
| import formatChatHistoryAsString from '../utils/formatHistory'; | ||||
| import eventEmitter from 'events'; | ||||
| import { StreamEvent } from '@langchain/core/tracers/log_stream'; | ||||
| import { EventEmitter } from 'node:stream'; | ||||
|  | ||||
| export interface MetaSearchAgentType { | ||||
|   searchAndAnswer: ( | ||||
| @@ -47,7 +43,7 @@ interface Config { | ||||
|   activeEngines: string[]; | ||||
| } | ||||
|  | ||||
| type BasicChainInput = { | ||||
| type SearchInput = { | ||||
|   chat_history: BaseMessage[]; | ||||
|   query: string; | ||||
| }; | ||||
| @@ -60,237 +56,385 @@ class MetaSearchAgent implements MetaSearchAgentType { | ||||
|     this.config = config; | ||||
|   } | ||||
|  | ||||
|   private async createSearchRetrieverChain(llm: BaseChatModel) { | ||||
|   private async searchSources( | ||||
|     llm: BaseChatModel, | ||||
|     input: SearchInput, | ||||
|     emitter: EventEmitter, | ||||
|   ) { | ||||
|     (llm as unknown as ChatOpenAI).temperature = 0; | ||||
|  | ||||
|     return RunnableSequence.from([ | ||||
|       PromptTemplate.fromTemplate(this.config.queryGeneratorPrompt), | ||||
|       llm, | ||||
|       this.strParser, | ||||
|       RunnableLambda.from(async (input: string) => { | ||||
|         const linksOutputParser = new LineListOutputParser({ | ||||
|           key: 'links', | ||||
|         }); | ||||
|     const chatPrompt = PromptTemplate.fromTemplate( | ||||
|       this.config.queryGeneratorPrompt, | ||||
|     ); | ||||
|  | ||||
|         const questionOutputParser = new LineOutputParser({ | ||||
|           key: 'question', | ||||
|         }); | ||||
|     const processedChatPrompt = await chatPrompt.invoke({ | ||||
|       chat_history: formatChatHistoryAsString(input.chat_history), | ||||
|       query: input.query, | ||||
|     }); | ||||
|  | ||||
|         const links = await linksOutputParser.parse(input); | ||||
|         let question = this.config.summarizer | ||||
|           ? await questionOutputParser.parse(input) | ||||
|           : input; | ||||
|     const llmRes = await llm.invoke(processedChatPrompt); | ||||
|     const messageStr = await this.strParser.invoke(llmRes); | ||||
|  | ||||
|         if (question === 'not_needed') { | ||||
|           return { query: '', docs: [] }; | ||||
|     const linksOutputParser = new LineListOutputParser({ | ||||
|       key: 'links', | ||||
|     }); | ||||
|  | ||||
|     const questionOutputParser = new LineOutputParser({ | ||||
|       key: 'question', | ||||
|     }); | ||||
|  | ||||
|     const links = await linksOutputParser.parse(messageStr); | ||||
|     let question = this.config.summarizer | ||||
|       ? await questionOutputParser.parse(messageStr) | ||||
|       : messageStr; | ||||
|  | ||||
|     if (question === 'not_needed') { | ||||
|       return { query: '', docs: [] }; | ||||
|     } | ||||
|  | ||||
|     if (links.length > 0) { | ||||
|       if (question.length === 0) { | ||||
|         question = 'summarize'; | ||||
|       } | ||||
|  | ||||
|       let docs: Document[] = []; | ||||
|  | ||||
|       const linkDocs = await getDocumentsFromLinks({ links }); | ||||
|  | ||||
|       const docGroups: Document[] = []; | ||||
|  | ||||
|       linkDocs.map((doc) => { | ||||
|         const URLDocExists = docGroups.find( | ||||
|           (d) => | ||||
|             d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, | ||||
|         ); | ||||
|  | ||||
|         if (!URLDocExists) { | ||||
|           docGroups.push({ | ||||
|             ...doc, | ||||
|             metadata: { | ||||
|               ...doc.metadata, | ||||
|               totalDocs: 1, | ||||
|             }, | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         if (links.length > 0) { | ||||
|           if (question.length === 0) { | ||||
|             question = 'summarize'; | ||||
|           } | ||||
|         const docIndex = docGroups.findIndex( | ||||
|           (d) => | ||||
|             d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, | ||||
|         ); | ||||
|  | ||||
|           let docs: Document[] = []; | ||||
|  | ||||
|           const linkDocs = await getDocumentsFromLinks({ links }); | ||||
|  | ||||
|           const docGroups: Document[] = []; | ||||
|  | ||||
|           linkDocs.map((doc) => { | ||||
|             const URLDocExists = docGroups.find( | ||||
|               (d) => | ||||
|                 d.metadata.url === doc.metadata.url && | ||||
|                 d.metadata.totalDocs < 10, | ||||
|             ); | ||||
|  | ||||
|             if (!URLDocExists) { | ||||
|               docGroups.push({ | ||||
|                 ...doc, | ||||
|                 metadata: { | ||||
|                   ...doc.metadata, | ||||
|                   totalDocs: 1, | ||||
|                 }, | ||||
|               }); | ||||
|             } | ||||
|  | ||||
|             const docIndex = docGroups.findIndex( | ||||
|               (d) => | ||||
|                 d.metadata.url === doc.metadata.url && | ||||
|                 d.metadata.totalDocs < 10, | ||||
|             ); | ||||
|  | ||||
|             if (docIndex !== -1) { | ||||
|               docGroups[docIndex].pageContent = | ||||
|                 docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; | ||||
|               docGroups[docIndex].metadata.totalDocs += 1; | ||||
|             } | ||||
|           }); | ||||
|  | ||||
|           await Promise.all( | ||||
|             docGroups.map(async (doc) => { | ||||
|               const res = await llm.invoke(` | ||||
|             You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the  | ||||
|             text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query. | ||||
|             If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary. | ||||
|              | ||||
|             - **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague. | ||||
|             - **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query. | ||||
|             - **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format. | ||||
|  | ||||
|             The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. | ||||
|  | ||||
|             <example> | ||||
|             1. \`<text> | ||||
|             Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers.  | ||||
|             It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications  | ||||
|             by using containers. | ||||
|             </text> | ||||
|  | ||||
|             <query> | ||||
|             What is Docker and how does it work? | ||||
|             </query> | ||||
|  | ||||
|             Response: | ||||
|             Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application  | ||||
|             deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in  | ||||
|             any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. | ||||
|             \` | ||||
|             2. \`<text> | ||||
|             The theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general | ||||
|             relativity. However, the word "relativity" is sometimes used in reference to Galilean invariance. The term "theory of relativity" was based | ||||
|             on the expression "relative theory" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by | ||||
|             Albert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity. | ||||
|             General relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical | ||||
|             realm, including astronomy. | ||||
|             </text> | ||||
|  | ||||
|             <query> | ||||
|             summarize | ||||
|             </query> | ||||
|  | ||||
|             Response: | ||||
|             The theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special | ||||
|             relativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its | ||||
|             relation to other forces of nature. The theory of relativity is based on the concept of "relative theory," as introduced by Max Planck in | ||||
|             1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe. | ||||
|             \` | ||||
|             </example> | ||||
|  | ||||
|             Everything below is the actual data you will be working with. Good luck! | ||||
|  | ||||
|             <query> | ||||
|             ${question} | ||||
|             </query> | ||||
|  | ||||
|             <text> | ||||
|             ${doc.pageContent} | ||||
|             </text> | ||||
|  | ||||
|             Make sure to answer the query in the summary. | ||||
|           `); | ||||
|  | ||||
|               const document = new Document({ | ||||
|                 pageContent: res.content as string, | ||||
|                 metadata: { | ||||
|                   title: doc.metadata.title, | ||||
|                   url: doc.metadata.url, | ||||
|                 }, | ||||
|               }); | ||||
|  | ||||
|               docs.push(document); | ||||
|             }), | ||||
|           ); | ||||
|  | ||||
|           return { query: question, docs: docs }; | ||||
|         } else { | ||||
|           question = question.replace(/<think>.*?<\/think>/g, ''); | ||||
|  | ||||
|           const res = await searchSearxng(question, { | ||||
|             language: 'en', | ||||
|             engines: this.config.activeEngines, | ||||
|           }); | ||||
|  | ||||
|           const documents = res.results.map( | ||||
|             (result) => | ||||
|               new Document({ | ||||
|                 pageContent: | ||||
|                   result.content || | ||||
|                   (this.config.activeEngines.includes('youtube') | ||||
|                     ? result.title | ||||
|                     : '') /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, | ||||
|                 metadata: { | ||||
|                   title: result.title, | ||||
|                   url: result.url, | ||||
|                   ...(result.img_src && { img_src: result.img_src }), | ||||
|                 }, | ||||
|               }), | ||||
|           ); | ||||
|  | ||||
|           return { query: question, docs: documents }; | ||||
|         if (docIndex !== -1) { | ||||
|           docGroups[docIndex].pageContent = | ||||
|             docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; | ||||
|           docGroups[docIndex].metadata.totalDocs += 1; | ||||
|         } | ||||
|       }), | ||||
|     ]); | ||||
|       }); | ||||
|  | ||||
|       await Promise.all( | ||||
|         docGroups.map(async (doc) => { | ||||
|           const res = await llm.invoke(` | ||||
|         You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the  | ||||
|         text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query. | ||||
|         If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary. | ||||
|          | ||||
|         - **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague. | ||||
|         - **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query. | ||||
|         - **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format. | ||||
|  | ||||
|         The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. | ||||
|  | ||||
|         <example> | ||||
|         1. \`<text> | ||||
|         Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers.  | ||||
|         It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications  | ||||
|         by using containers. | ||||
|         </text> | ||||
|  | ||||
|         <query> | ||||
|         What is Docker and how does it work? | ||||
|         </query> | ||||
|  | ||||
|         Response: | ||||
|         Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application  | ||||
|         deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in  | ||||
|         any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. | ||||
|         \` | ||||
|         2. \`<text> | ||||
|         The theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general | ||||
|         relativity. However, the word "relativity" is sometimes used in reference to Galilean invariance. The term "theory of relativity" was based | ||||
|         on the expression "relative theory" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by | ||||
|         Albert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity. | ||||
|         General relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical | ||||
|         realm, including astronomy. | ||||
|         </text> | ||||
|  | ||||
|         <query> | ||||
|         summarize | ||||
|         </query> | ||||
|  | ||||
|         Response: | ||||
|         The theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special | ||||
|         relativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its | ||||
|         relation to other forces of nature. The theory of relativity is based on the concept of "relative theory," as introduced by Max Planck in | ||||
|         1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe. | ||||
|         \` | ||||
|         </example> | ||||
|  | ||||
|         Everything below is the actual data you will be working with. Good luck! | ||||
|  | ||||
|         <query> | ||||
|         ${question} | ||||
|         </query> | ||||
|  | ||||
|         <text> | ||||
|         ${doc.pageContent} | ||||
|         </text> | ||||
|  | ||||
|         Make sure to answer the query in the summary. | ||||
|       `); | ||||
|  | ||||
|           const document = new Document({ | ||||
|             pageContent: res.content as string, | ||||
|             metadata: { | ||||
|               title: doc.metadata.title, | ||||
|               url: doc.metadata.url, | ||||
|             }, | ||||
|           }); | ||||
|  | ||||
|           docs.push(document); | ||||
|         }), | ||||
|       ); | ||||
|  | ||||
|       return { query: question, docs: docs }; | ||||
|     } else { | ||||
|       question = question.replace(/<think>.*?<\/think>/g, ''); | ||||
|  | ||||
|       const res = await searchSearxng(question, { | ||||
|         language: 'en', | ||||
|         engines: this.config.activeEngines, | ||||
|       }); | ||||
|  | ||||
|       const documents = res.results.map( | ||||
|         (result) => | ||||
|           new Document({ | ||||
|             pageContent: | ||||
|               result.content || | ||||
|               (this.config.activeEngines.includes('youtube') | ||||
|                 ? result.title | ||||
|                 : '') /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, | ||||
|             metadata: { | ||||
|               title: result.title, | ||||
|               url: result.url, | ||||
|               ...(result.img_src && { img_src: result.img_src }), | ||||
|             }, | ||||
|           }), | ||||
|       ); | ||||
|  | ||||
|       return { query: question, docs: documents }; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private async createAnsweringChain( | ||||
|   private async performDeepResearch( | ||||
|     llm: BaseChatModel, | ||||
|     input: SearchInput, | ||||
|     emitter: EventEmitter, | ||||
|   ) { | ||||
|     (llm as unknown as ChatOpenAI).temperature = 0; | ||||
|  | ||||
|     const queryGenPrompt = PromptTemplate.fromTemplate( | ||||
|       this.config.queryGeneratorPrompt, | ||||
|     ); | ||||
|  | ||||
|     const formattedChatPrompt = await queryGenPrompt.invoke({ | ||||
|       chat_history: formatChatHistoryAsString(input.chat_history), | ||||
|       query: input.query, | ||||
|     }); | ||||
|  | ||||
|     let i = 0; | ||||
|     let currentQuery = await this.strParser.invoke( | ||||
|       await llm.invoke(formattedChatPrompt), | ||||
|     ); | ||||
|     const originalQuery = currentQuery; | ||||
|     const pastQueries: string[] = []; | ||||
|     const results: SearxngSearchResult[] = []; | ||||
|  | ||||
|     while (i < 10) { | ||||
|       const res = await searchSearxng(currentQuery, { | ||||
|         language: 'en', | ||||
|         engines: this.config.activeEngines, | ||||
|       }); | ||||
|  | ||||
|       results.push(...res.results); | ||||
|  | ||||
|       const reflectorPrompt = PromptTemplate.fromTemplate(` | ||||
|           You are an LLM that is tasked with reflecting on the results of a search query. | ||||
|  | ||||
|           ## Goal | ||||
|           You will be given question of the user, a list of search results collected from the web to answer that question along with past queries made to collect those results. You have to analyze the results based on user's question and do the following: | ||||
|            | ||||
|           1. Identify unexplored areas or areas with less detailed information in the results and generate a new query that focuses on those areas. The new queries should be more specific and a similar query shall not exist in past queries which will be provided to you. Make sure to include keywords that you're looking for because the new query will be used to search the web for information on that topic. Make sure the query contains only 1 question and is not too long to ensure it is Search Engine friendly. | ||||
|           2. You'll have to generate a description explaining what you are doing for example "I am looking for more information about X" or "Understanding how X works" etc. The description should be short and concise. | ||||
|            | ||||
|           ## Output format | ||||
|  | ||||
|           You need to output in XML format and do not generate any other text. ake sure to not include any other text in the output or start a conversation in the output. The output should be in the following format: | ||||
|  | ||||
|           <query>(query)</query> | ||||
|           <description>(description)</description> | ||||
|  | ||||
|           ## Example | ||||
|           Say the user asked "What is Llama 4 by Meta?" and let search results contain information about Llama 4 being an LLM and very little information about its features. You can output: | ||||
|  | ||||
|           <query>Llama 4 features</query> // Generate queries that capture keywords for SEO and not making words like "How", "What", "Why" etc. | ||||
|           <description>Looking for new features in Llama 4</description> | ||||
|  | ||||
|           or something like | ||||
|  | ||||
|           <query>How is Llama 4 better than its previous generation models</query> | ||||
|           <description>Understanding the difference between Llama 4 and previous generation models.</description> | ||||
|            | ||||
|           ## BELOW IS THE ACTUAL DATA YOU WILL BE WORKING WITH. IT IS NOT A PART OF EXAMPLES. YOU'LL HAVE TO GENERATE YOUR ANSWER BASED ON THIS DATA. | ||||
|           <user_question>\n{question}\n</user_question> | ||||
|           <search_results>\n{search_results}\n</search_results> | ||||
|           <past_queries>\n{past_queries}\n</past_queries> | ||||
|  | ||||
|           Response: | ||||
|       `); | ||||
|  | ||||
|       const formattedReflectorPrompt = await reflectorPrompt.invoke({ | ||||
|         question: originalQuery, | ||||
|         search_results: results | ||||
|           .map( | ||||
|             (result) => `<result>${result.title} - ${result.content}</result>`, | ||||
|           ) | ||||
|           .join('\n'), | ||||
|         past_queries: pastQueries.map((q) => `<query>${q}</query>`).join('\n'), | ||||
|       }); | ||||
|  | ||||
|       const feedback = await this.strParser.invoke( | ||||
|         await llm.invoke(formattedReflectorPrompt), | ||||
|       ); | ||||
|  | ||||
|       console.log(`Feedback: ${feedback}`); | ||||
|  | ||||
|       const queryOutputParser = new LineOutputParser({ | ||||
|         key: 'query', | ||||
|       }); | ||||
|  | ||||
|       const descriptionOutputParser = new LineOutputParser({ | ||||
|         key: 'description', | ||||
|       }); | ||||
|  | ||||
|       currentQuery = await queryOutputParser.parse(feedback); | ||||
|       const description = await descriptionOutputParser.parse(feedback); | ||||
|       console.log(`Query: ${currentQuery}`); | ||||
|       console.log(`Description: ${description}`); | ||||
|  | ||||
|       pastQueries.push(currentQuery); | ||||
|       ++i; | ||||
|     } | ||||
|  | ||||
|     const uniqueResults: SearxngSearchResult[] = []; | ||||
|  | ||||
|     results.forEach((res) => { | ||||
|       const exists = uniqueResults.find((r) => r.url === res.url); | ||||
|  | ||||
|       if (!exists) { | ||||
|         uniqueResults.push(res); | ||||
|       } else { | ||||
|         exists.content += `\n\n` + res.content; | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|     const documents = uniqueResults /* .slice(0, 50) */ | ||||
|       .map( | ||||
|         (r) => | ||||
|           new Document({ | ||||
|             pageContent: r.content || '', | ||||
|             metadata: { | ||||
|               title: r.title, | ||||
|               url: r.url, | ||||
|               ...(r.img_src && { img_src: r.img_src }), | ||||
|             }, | ||||
|           }), | ||||
|       ); | ||||
|  | ||||
|     return documents; | ||||
|   } | ||||
|  | ||||
|   private async streamAnswer( | ||||
|     llm: BaseChatModel, | ||||
|     fileIds: string[], | ||||
|     embeddings: Embeddings, | ||||
|     optimizationMode: 'speed' | 'balanced' | 'quality', | ||||
|     systemInstructions: string, | ||||
|     input: SearchInput, | ||||
|     emitter: EventEmitter, | ||||
|   ) { | ||||
|     return RunnableSequence.from([ | ||||
|       RunnableMap.from({ | ||||
|         systemInstructions: () => systemInstructions, | ||||
|         query: (input: BasicChainInput) => input.query, | ||||
|         chat_history: (input: BasicChainInput) => input.chat_history, | ||||
|         date: () => new Date().toISOString(), | ||||
|         context: RunnableLambda.from(async (input: BasicChainInput) => { | ||||
|           const processedHistory = formatChatHistoryAsString( | ||||
|             input.chat_history, | ||||
|           ); | ||||
|     const chatPrompt = ChatPromptTemplate.fromMessages([ | ||||
|       ['system', this.config.responsePrompt], | ||||
|       new MessagesPlaceholder('chat_history'), | ||||
|       ['user', '{query}'], | ||||
|     ]); | ||||
|  | ||||
|           let docs: Document[] | null = null; | ||||
|           let query = input.query; | ||||
|     let context = ''; | ||||
|  | ||||
|           if (this.config.searchWeb) { | ||||
|             const searchRetrieverChain = | ||||
|               await this.createSearchRetrieverChain(llm); | ||||
|     if (optimizationMode === 'speed' || optimizationMode === 'balanced') { | ||||
|       let docs: Document[] | null = null; | ||||
|       let query = input.query; | ||||
|  | ||||
|             const searchRetrieverResult = await searchRetrieverChain.invoke({ | ||||
|               chat_history: processedHistory, | ||||
|               query, | ||||
|             }); | ||||
|       if (this.config.searchWeb) { | ||||
|         const searchResults = await this.searchSources(llm, input, emitter); | ||||
|  | ||||
|             query = searchRetrieverResult.query; | ||||
|             docs = searchRetrieverResult.docs; | ||||
|           } | ||||
|         query = searchResults.query; | ||||
|         docs = searchResults.docs; | ||||
|       } | ||||
|  | ||||
|           const sortedDocs = await this.rerankDocs( | ||||
|             query, | ||||
|             docs ?? [], | ||||
|             fileIds, | ||||
|             embeddings, | ||||
|             optimizationMode, | ||||
|           ); | ||||
|       const sortedDocs = await this.rerankDocs( | ||||
|         query, | ||||
|         docs ?? [], | ||||
|         fileIds, | ||||
|         embeddings, | ||||
|         optimizationMode, | ||||
|       ); | ||||
|  | ||||
|           return sortedDocs; | ||||
|         }) | ||||
|           .withConfig({ | ||||
|             runName: 'FinalSourceRetriever', | ||||
|           }) | ||||
|           .pipe(this.processDocs), | ||||
|       }), | ||||
|       ChatPromptTemplate.fromMessages([ | ||||
|         ['system', this.config.responsePrompt], | ||||
|         new MessagesPlaceholder('chat_history'), | ||||
|         ['user', '{query}'], | ||||
|       ]), | ||||
|       llm, | ||||
|       this.strParser, | ||||
|     ]).withConfig({ | ||||
|       runName: 'FinalResponseGenerator', | ||||
|       emitter.emit( | ||||
|         'data', | ||||
|         JSON.stringify({ type: 'sources', data: sortedDocs }), | ||||
|       ); | ||||
|  | ||||
|       context = this.processDocs(sortedDocs); | ||||
|     } else if (optimizationMode === 'quality') { | ||||
|       let docs: Document[] = []; | ||||
|  | ||||
|       docs = await this.performDeepResearch(llm, input, emitter); | ||||
|  | ||||
|       emitter.emit('data', JSON.stringify({ type: 'sources', data: docs })); | ||||
|  | ||||
|       context = this.processDocs(docs); | ||||
|     } | ||||
|  | ||||
|     const formattedChatPrompt = await chatPrompt.invoke({ | ||||
|       query: input.query, | ||||
|       chat_history: input.chat_history, | ||||
|       date: new Date().toISOString(), | ||||
|       context: context, | ||||
|       systemInstructions: systemInstructions, | ||||
|     }); | ||||
|  | ||||
|     const llmRes = await llm.stream(formattedChatPrompt); | ||||
|  | ||||
|     for await (const data of llmRes) { | ||||
|       const messageStr = await this.strParser.invoke(data); | ||||
|  | ||||
|       emitter.emit( | ||||
|         'data', | ||||
|         JSON.stringify({ type: 'response', data: messageStr }), | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     emitter.emit('end'); | ||||
|   } | ||||
|  | ||||
|   private async rerankDocs( | ||||
| @@ -426,44 +570,13 @@ class MetaSearchAgent implements MetaSearchAgentType { | ||||
|     return docs | ||||
|       .map( | ||||
|         (_, index) => | ||||
|           `${index + 1}. ${docs[index].metadata.title} ${docs[index].pageContent}`, | ||||
|           `${index + 1}. ${docs[index].metadata.title} ${ | ||||
|             docs[index].pageContent | ||||
|           }`, | ||||
|       ) | ||||
|       .join('\n'); | ||||
|   } | ||||
|  | ||||
|   private async handleStream( | ||||
|     stream: AsyncGenerator<StreamEvent, any, any>, | ||||
|     emitter: eventEmitter, | ||||
|   ) { | ||||
|     for await (const event of stream) { | ||||
|       if ( | ||||
|         event.event === 'on_chain_end' && | ||||
|         event.name === 'FinalSourceRetriever' | ||||
|       ) { | ||||
|         ``; | ||||
|         emitter.emit( | ||||
|           'data', | ||||
|           JSON.stringify({ type: 'sources', data: event.data.output }), | ||||
|         ); | ||||
|       } | ||||
|       if ( | ||||
|         event.event === 'on_chain_stream' && | ||||
|         event.name === 'FinalResponseGenerator' | ||||
|       ) { | ||||
|         emitter.emit( | ||||
|           'data', | ||||
|           JSON.stringify({ type: 'response', data: event.data.chunk }), | ||||
|         ); | ||||
|       } | ||||
|       if ( | ||||
|         event.event === 'on_chain_end' && | ||||
|         event.name === 'FinalResponseGenerator' | ||||
|       ) { | ||||
|         emitter.emit('end'); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   async searchAndAnswer( | ||||
|     message: string, | ||||
|     history: BaseMessage[], | ||||
| @@ -475,26 +588,19 @@ class MetaSearchAgent implements MetaSearchAgentType { | ||||
|   ) { | ||||
|     const emitter = new eventEmitter(); | ||||
|  | ||||
|     const answeringChain = await this.createAnsweringChain( | ||||
|     this.streamAnswer( | ||||
|       llm, | ||||
|       fileIds, | ||||
|       embeddings, | ||||
|       optimizationMode, | ||||
|       systemInstructions, | ||||
|     ); | ||||
|  | ||||
|     const stream = answeringChain.streamEvents( | ||||
|       { | ||||
|         chat_history: history, | ||||
|         query: message, | ||||
|       }, | ||||
|       { | ||||
|         version: 'v1', | ||||
|       }, | ||||
|       emitter, | ||||
|     ); | ||||
|  | ||||
|     this.handleStream(stream, emitter); | ||||
|  | ||||
|     return emitter; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -8,7 +8,7 @@ interface SearxngSearchOptions { | ||||
|   pageno?: number; | ||||
| } | ||||
|  | ||||
| interface SearxngSearchResult { | ||||
| export interface SearxngSearchResult { | ||||
|   title: string; | ||||
|   url: string; | ||||
|   img_src?: string; | ||||
|   | ||||
| @@ -64,7 +64,7 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { | ||||
|         const splittedText = await splitter.splitText(parsedText); | ||||
|         const title = res.data | ||||
|           .toString('utf8') | ||||
|           .match(/<title.*>(.*?)<\/title>/)?.[1]; | ||||
|           .match(/<title>(.*?)<\/title>/)?.[1]; | ||||
|  | ||||
|         const linkDocs = splittedText.map((text) => { | ||||
|           return new Document({ | ||||
|   | ||||
							
								
								
									
										294
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						| @@ -40,11 +40,6 @@ | ||||
|     node-fetch "^2.6.7" | ||||
|     web-streams-polyfill "^3.2.1" | ||||
|  | ||||
| "@babel/runtime@^7.12.5", "@babel/runtime@^7.26.7": | ||||
|   version "7.27.3" | ||||
|   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.3.tgz#10491113799fb8d77e1d9273384d5d68deeea8f6" | ||||
|   integrity sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw== | ||||
|  | ||||
| "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.0": | ||||
|   version "7.24.4" | ||||
|   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" | ||||
| @@ -971,13 +966,6 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" | ||||
|   integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== | ||||
|  | ||||
| "@types/jspdf@^2.0.0": | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@types/jspdf/-/jspdf-2.0.0.tgz#c64d63e9248a62849902085c1cd4753b33f8ee0c" | ||||
|   integrity sha512-oonYDXI4GegGaG7FFVtriJ+Yqlh4YR3L3NVDiwCEBVG7sbya19SoGx4MW4kg1MCMRPgkbbFTck8YKJL8PrkDfA== | ||||
|   dependencies: | ||||
|     jspdf "*" | ||||
|  | ||||
| "@types/long@^4.0.1": | ||||
|   version "4.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" | ||||
| @@ -1022,11 +1010,6 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" | ||||
|   integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== | ||||
|  | ||||
| "@types/raf@^3.4.0": | ||||
|   version "3.4.3" | ||||
|   resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" | ||||
|   integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== | ||||
|  | ||||
| "@types/react-dom@^18": | ||||
|   version "18.2.24" | ||||
|   resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.24.tgz#8dda8f449ae436a7a6e91efed8035d4ab03ff759" | ||||
| @@ -1052,11 +1035,6 @@ | ||||
|   resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" | ||||
|   integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== | ||||
|  | ||||
| "@types/trusted-types@^2.0.7": | ||||
|   version "2.0.7" | ||||
|   resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" | ||||
|   integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== | ||||
|  | ||||
| "@types/uuid@^10.0.0": | ||||
|   version "10.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" | ||||
| @@ -1129,11 +1107,6 @@ | ||||
|   optionalDependencies: | ||||
|     onnxruntime-node "1.14.0" | ||||
|  | ||||
| "@xmldom/xmldom@^0.8.6": | ||||
|   version "0.8.10" | ||||
|   resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" | ||||
|   integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== | ||||
|  | ||||
| abort-controller@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" | ||||
| @@ -1218,13 +1191,6 @@ argparse@^2.0.1: | ||||
|   resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" | ||||
|   integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== | ||||
|  | ||||
| argparse@~1.0.3: | ||||
|   version "1.0.10" | ||||
|   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" | ||||
|   integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== | ||||
|   dependencies: | ||||
|     sprintf-js "~1.0.2" | ||||
|  | ||||
| aria-query@^5.3.0: | ||||
|   version "5.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" | ||||
| @@ -1351,11 +1317,6 @@ asynckit@^0.4.0: | ||||
|   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" | ||||
|   integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== | ||||
|  | ||||
| atob@^2.1.2: | ||||
|   version "2.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" | ||||
|   integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== | ||||
|  | ||||
| autoprefixer@^10.0.1: | ||||
|   version "10.4.19" | ||||
|   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" | ||||
| @@ -1444,11 +1405,6 @@ base-64@^0.1.0: | ||||
|   resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" | ||||
|   integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== | ||||
|  | ||||
| base64-arraybuffer@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" | ||||
|   integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== | ||||
|  | ||||
| base64-js@^1.3.1, base64-js@^1.5.1: | ||||
|   version "1.5.1" | ||||
|   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" | ||||
| @@ -1488,11 +1444,6 @@ bl@^4.0.3: | ||||
|     inherits "^2.0.4" | ||||
|     readable-stream "^3.4.0" | ||||
|  | ||||
| bluebird@~3.4.0: | ||||
|   version "3.4.7" | ||||
|   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" | ||||
|   integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== | ||||
|  | ||||
| brace-expansion@^1.1.7: | ||||
|   version "1.1.11" | ||||
|   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" | ||||
| @@ -1525,11 +1476,6 @@ browserslist@^4.23.0: | ||||
|     node-releases "^2.0.14" | ||||
|     update-browserslist-db "^1.0.13" | ||||
|  | ||||
| btoa@^1.2.1: | ||||
|   version "1.2.1" | ||||
|   resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" | ||||
|   integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== | ||||
|  | ||||
| buffer-from@^1.0.0: | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" | ||||
| @@ -1586,20 +1532,6 @@ caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: | ||||
|   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e" | ||||
|   integrity sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg== | ||||
|  | ||||
| canvg@^3.0.11: | ||||
|   version "3.0.11" | ||||
|   resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b" | ||||
|   integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.12.5" | ||||
|     "@types/raf" "^3.4.0" | ||||
|     core-js "^3.8.3" | ||||
|     raf "^3.4.1" | ||||
|     regenerator-runtime "^0.13.7" | ||||
|     rgbcolor "^1.0.1" | ||||
|     stackblur-canvas "^2.0.0" | ||||
|     svg-pathdata "^6.0.3" | ||||
|  | ||||
| chalk@^4.0.0, chalk@^4.1.2: | ||||
|   version "4.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" | ||||
| @@ -1759,16 +1691,6 @@ console-table-printer@^2.12.1: | ||||
|   dependencies: | ||||
|     simple-wcswidth "^1.0.1" | ||||
|  | ||||
| core-js@^3.6.0, core-js@^3.8.3: | ||||
|   version "3.42.0" | ||||
|   resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.42.0.tgz#edbe91f78ac8cfb6df8d997e74d368a68082fe37" | ||||
|   integrity sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g== | ||||
|  | ||||
| core-util-is@~1.0.0: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" | ||||
|   integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== | ||||
|  | ||||
| cross-spawn@^7.0.0, cross-spawn@^7.0.2: | ||||
|   version "7.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" | ||||
| @@ -1783,13 +1705,6 @@ crypt@0.0.2: | ||||
|   resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" | ||||
|   integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== | ||||
|  | ||||
| css-line-break@^2.1.0: | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" | ||||
|   integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== | ||||
|   dependencies: | ||||
|     utrie "^1.0.2" | ||||
|  | ||||
| cssesc@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" | ||||
| @@ -1919,11 +1834,6 @@ digest-fetch@^1.3.0: | ||||
|     base-64 "^0.1.0" | ||||
|     md5 "^2.3.0" | ||||
|  | ||||
| dingbat-to-unicode@^1.0.1: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz#5091dd673241453e6b5865e26e5a4452cdef5c83" | ||||
|   integrity sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w== | ||||
|  | ||||
| dir-glob@^3.0.1: | ||||
|   version "3.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" | ||||
| @@ -1971,13 +1881,6 @@ domhandler@^5.0.2, domhandler@^5.0.3: | ||||
|   dependencies: | ||||
|     domelementtype "^2.3.0" | ||||
|  | ||||
| dompurify@^3.2.4: | ||||
|   version "3.2.6" | ||||
|   resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.6.tgz#ca040a6ad2b88e2a92dc45f38c79f84a714a1cad" | ||||
|   integrity sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ== | ||||
|   optionalDependencies: | ||||
|     "@types/trusted-types" "^2.0.7" | ||||
|  | ||||
| domutils@^3.0.1: | ||||
|   version "3.2.2" | ||||
|   resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" | ||||
| @@ -2003,13 +1906,6 @@ drizzle-orm@^0.40.1: | ||||
|   resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.40.1.tgz#15f1d970d4fb034db2b13e4a33fcbbccda9bf1cb" | ||||
|   integrity sha512-aPNhtiJiPfm3qxz1czrnIDkfvkSdKGXYeZkpG55NPTVI186LmK2fBLMi4dsHpPHlJrZeQ92D322YFPHADBALew== | ||||
|  | ||||
| duck@^0.1.12: | ||||
|   version "0.1.12" | ||||
|   resolved "https://registry.yarnpkg.com/duck/-/duck-0.1.12.tgz#de7adf758421230b6d7aee799ce42670586b9efa" | ||||
|   integrity sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg== | ||||
|   dependencies: | ||||
|     underscore "^1.13.1" | ||||
|  | ||||
| eastasianwidth@^0.2.0: | ||||
|   version "0.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" | ||||
| @@ -2528,11 +2424,6 @@ fecha@^4.2.0: | ||||
|   resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" | ||||
|   integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== | ||||
|  | ||||
| fflate@^0.8.1: | ||||
|   version "0.8.2" | ||||
|   resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" | ||||
|   integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== | ||||
|  | ||||
| file-entry-cache@^6.0.1: | ||||
|   version "6.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" | ||||
| @@ -2870,14 +2761,6 @@ html-to-text@^9.0.5: | ||||
|     htmlparser2 "^8.0.2" | ||||
|     selderee "^0.11.0" | ||||
|  | ||||
| html2canvas@^1.0.0-rc.5: | ||||
|   version "1.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" | ||||
|   integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== | ||||
|   dependencies: | ||||
|     css-line-break "^2.1.0" | ||||
|     text-segmentation "^1.0.3" | ||||
|  | ||||
| htmlparser2@^8.0.2: | ||||
|   version "8.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" | ||||
| @@ -2905,11 +2788,6 @@ ignore@^5.2.0: | ||||
|   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" | ||||
|   integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== | ||||
|  | ||||
| immediate@~3.0.5: | ||||
|   version "3.0.6" | ||||
|   resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" | ||||
|   integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== | ||||
|  | ||||
| import-fresh@^3.2.1: | ||||
|   version "3.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" | ||||
| @@ -2931,7 +2809,7 @@ inflight@^1.0.4: | ||||
|     once "^1.3.0" | ||||
|     wrappy "1" | ||||
|  | ||||
| inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: | ||||
| inherits@2, inherits@^2.0.3, inherits@^2.0.4: | ||||
|   version "2.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" | ||||
|   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== | ||||
| @@ -3157,11 +3035,6 @@ isarray@^2.0.5: | ||||
|   resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" | ||||
|   integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== | ||||
|  | ||||
| isarray@~1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" | ||||
|   integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== | ||||
|  | ||||
| isexe@^2.0.0: | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" | ||||
| @@ -3250,21 +3123,6 @@ jsonpointer@^5.0.1: | ||||
|   resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" | ||||
|   integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== | ||||
|  | ||||
| jspdf@*, jspdf@^3.0.1: | ||||
|   version "3.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.1.tgz#d81e1964f354f60412516eb2449ea2cccd4d2a3b" | ||||
|   integrity sha512-qaGIxqxetdoNnFQQXxTKUD9/Z7AloLaw94fFsOiJMxbfYdBbrBuhWmbzI8TVjrw7s3jBY1PFHofBKMV/wZPapg== | ||||
|   dependencies: | ||||
|     "@babel/runtime" "^7.26.7" | ||||
|     atob "^2.1.2" | ||||
|     btoa "^1.2.1" | ||||
|     fflate "^0.8.1" | ||||
|   optionalDependencies: | ||||
|     canvg "^3.0.11" | ||||
|     core-js "^3.6.0" | ||||
|     dompurify "^3.2.4" | ||||
|     html2canvas "^1.0.0-rc.5" | ||||
|  | ||||
| "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: | ||||
|   version "3.3.5" | ||||
|   resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" | ||||
| @@ -3275,16 +3133,6 @@ jspdf@*, jspdf@^3.0.1: | ||||
|     object.assign "^4.1.4" | ||||
|     object.values "^1.1.6" | ||||
|  | ||||
| jszip@^3.7.1: | ||||
|   version "3.10.1" | ||||
|   resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" | ||||
|   integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== | ||||
|   dependencies: | ||||
|     lie "~3.3.0" | ||||
|     pako "~1.0.2" | ||||
|     readable-stream "~2.3.6" | ||||
|     setimmediate "^1.0.5" | ||||
|  | ||||
| keyv@^4.5.3: | ||||
|   version "4.5.4" | ||||
|   resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" | ||||
| @@ -3392,13 +3240,6 @@ levn@^0.4.1: | ||||
|     prelude-ls "^1.2.1" | ||||
|     type-check "~0.4.0" | ||||
|  | ||||
| lie@~3.3.0: | ||||
|   version "3.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" | ||||
|   integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== | ||||
|   dependencies: | ||||
|     immediate "~3.0.5" | ||||
|  | ||||
| lilconfig@^2.1.0: | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" | ||||
| @@ -3460,15 +3301,6 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: | ||||
|   dependencies: | ||||
|     js-tokens "^3.0.0 || ^4.0.0" | ||||
|  | ||||
| lop@^0.4.2: | ||||
|   version "0.4.2" | ||||
|   resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.2.tgz#c9c2f958a39b9da1c2f36ca9ad66891a9fe84640" | ||||
|   integrity sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw== | ||||
|   dependencies: | ||||
|     duck "^0.1.12" | ||||
|     option "~0.2.1" | ||||
|     underscore "^1.13.1" | ||||
|  | ||||
| lru-cache@^10.2.0: | ||||
|   version "10.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" | ||||
| @@ -3486,22 +3318,6 @@ lucide-react@^0.363.0: | ||||
|   resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.363.0.tgz#2bb1f9d09b830dda86f5118fcd097f87247fe0e3" | ||||
|   integrity sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ== | ||||
|  | ||||
| mammoth@^1.9.1: | ||||
|   version "1.9.1" | ||||
|   resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.9.1.tgz#b544c26747a412b5b00a11aa80477c6796860eaf" | ||||
|   integrity sha512-4S2v1eP4Yo4so0zGNicJKcP93su3wDPcUk+xvkjSG75nlNjSkDJu8BhWQ+e54BROM0HfA6nPzJn12S6bq2Ko6w== | ||||
|   dependencies: | ||||
|     "@xmldom/xmldom" "^0.8.6" | ||||
|     argparse "~1.0.3" | ||||
|     base64-js "^1.5.1" | ||||
|     bluebird "~3.4.0" | ||||
|     dingbat-to-unicode "^1.0.1" | ||||
|     jszip "^3.7.1" | ||||
|     lop "^0.4.2" | ||||
|     path-is-absolute "^1.0.0" | ||||
|     underscore "^1.13.1" | ||||
|     xmlbuilder "^10.0.0" | ||||
|  | ||||
| markdown-to-jsx@^7.7.2: | ||||
|   version "7.7.2" | ||||
|   resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.7.2.tgz#59c1dd64f48b53719311ab140be3cd51cdabccd3" | ||||
| @@ -3892,11 +3708,6 @@ openapi-types@^12.1.3: | ||||
|   resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" | ||||
|   integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== | ||||
|  | ||||
| option@~0.2.1: | ||||
|   version "0.2.4" | ||||
|   resolved "https://registry.yarnpkg.com/option/-/option-0.2.4.tgz#fd475cdf98dcabb3cb397a3ba5284feb45edbfe4" | ||||
|   integrity sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A== | ||||
|  | ||||
| optionator@^0.9.3: | ||||
|   version "0.9.3" | ||||
|   resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" | ||||
| @@ -3951,11 +3762,6 @@ p-timeout@^3.2.0: | ||||
|   dependencies: | ||||
|     p-finally "^1.0.0" | ||||
|  | ||||
| pako@~1.0.2: | ||||
|   version "1.0.11" | ||||
|   resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" | ||||
|   integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== | ||||
|  | ||||
| parent-module@^1.0.0: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" | ||||
| @@ -4017,11 +3823,6 @@ peberminta@^0.9.0: | ||||
|   resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" | ||||
|   integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== | ||||
|  | ||||
| performance-now@^2.1.0: | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" | ||||
|   integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== | ||||
|  | ||||
| picocolors@^1.0.0: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" | ||||
| @@ -4150,11 +3951,6 @@ prettier@^3.2.5: | ||||
|   resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" | ||||
|   integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== | ||||
|  | ||||
| process-nextick-args@~2.0.0: | ||||
|   version "2.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" | ||||
|   integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== | ||||
|  | ||||
| prop-types@^15.8.1: | ||||
|   version "15.8.1" | ||||
|   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" | ||||
| @@ -4206,13 +4002,6 @@ queue-microtask@^1.2.2: | ||||
|   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" | ||||
|   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== | ||||
|  | ||||
| raf@^3.4.1: | ||||
|   version "3.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" | ||||
|   integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== | ||||
|   dependencies: | ||||
|     performance-now "^2.1.0" | ||||
|  | ||||
| rc@^1.2.7: | ||||
|   version "1.2.8" | ||||
|   resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" | ||||
| @@ -4273,19 +4062,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.2: | ||||
|     string_decoder "^1.1.1" | ||||
|     util-deprecate "^1.0.1" | ||||
|  | ||||
| readable-stream@~2.3.6: | ||||
|   version "2.3.8" | ||||
|   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" | ||||
|   integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== | ||||
|   dependencies: | ||||
|     core-util-is "~1.0.0" | ||||
|     inherits "~2.0.3" | ||||
|     isarray "~1.0.0" | ||||
|     process-nextick-args "~2.0.0" | ||||
|     safe-buffer "~5.1.1" | ||||
|     string_decoder "~1.1.1" | ||||
|     util-deprecate "~1.0.1" | ||||
|  | ||||
| readdirp@~3.6.0: | ||||
|   version "3.6.0" | ||||
|   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" | ||||
| @@ -4306,11 +4082,6 @@ reflect.getprototypeof@^1.0.4: | ||||
|     globalthis "^1.0.3" | ||||
|     which-builtin-type "^1.1.3" | ||||
|  | ||||
| regenerator-runtime@^0.13.7: | ||||
|   version "0.13.11" | ||||
|   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" | ||||
|   integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== | ||||
|  | ||||
| regenerator-runtime@^0.14.0: | ||||
|   version "0.14.1" | ||||
|   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" | ||||
| @@ -4364,11 +4135,6 @@ reusify@^1.0.4: | ||||
|   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" | ||||
|   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== | ||||
|  | ||||
| rgbcolor@^1.0.1: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" | ||||
|   integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== | ||||
|  | ||||
| rimraf@^3.0.2: | ||||
|   version "3.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" | ||||
| @@ -4398,11 +4164,6 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0: | ||||
|   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" | ||||
|   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== | ||||
|  | ||||
| safe-buffer@~5.1.0, safe-buffer@~5.1.1: | ||||
|   version "5.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" | ||||
|   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== | ||||
|  | ||||
| safe-regex-test@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" | ||||
| @@ -4470,11 +4231,6 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: | ||||
|     functions-have-names "^1.2.3" | ||||
|     has-property-descriptors "^1.0.2" | ||||
|  | ||||
| setimmediate@^1.0.5: | ||||
|   version "1.0.5" | ||||
|   resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" | ||||
|   integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== | ||||
|  | ||||
| sharp@^0.32.0: | ||||
|   version "0.32.6" | ||||
|   resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" | ||||
| @@ -4609,21 +4365,11 @@ source-map@^0.6.0: | ||||
|   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" | ||||
|   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== | ||||
|  | ||||
| sprintf-js@~1.0.2: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" | ||||
|   integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== | ||||
|  | ||||
| stack-trace@0.0.x: | ||||
|   version "0.0.10" | ||||
|   resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" | ||||
|   integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== | ||||
|  | ||||
| stackblur-canvas@^2.0.0: | ||||
|   version "2.7.0" | ||||
|   resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" | ||||
|   integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== | ||||
|  | ||||
| streamsearch@^1.1.0: | ||||
|   version "1.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" | ||||
| @@ -4719,13 +4465,6 @@ string_decoder@^1.1.1: | ||||
|   dependencies: | ||||
|     safe-buffer "~5.2.0" | ||||
|  | ||||
| string_decoder@~1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" | ||||
|   integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== | ||||
|   dependencies: | ||||
|     safe-buffer "~5.1.0" | ||||
|  | ||||
| "strip-ansi-cjs@npm:strip-ansi@^6.0.1": | ||||
|   version "6.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" | ||||
| @@ -4799,11 +4538,6 @@ supports-preserve-symlinks-flag@^1.0.0: | ||||
|   resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" | ||||
|   integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== | ||||
|  | ||||
| svg-pathdata@^6.0.3: | ||||
|   version "6.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" | ||||
|   integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== | ||||
|  | ||||
| tabbable@^6.0.0: | ||||
|   version "6.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" | ||||
| @@ -4902,13 +4636,6 @@ text-hex@1.0.x: | ||||
|   resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" | ||||
|   integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== | ||||
|  | ||||
| text-segmentation@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" | ||||
|   integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== | ||||
|   dependencies: | ||||
|     utrie "^1.0.2" | ||||
|  | ||||
| text-table@^0.2.0: | ||||
|   version "0.2.0" | ||||
|   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" | ||||
| @@ -5048,11 +4775,6 @@ unbox-primitive@^1.0.2: | ||||
|     has-symbols "^1.0.3" | ||||
|     which-boxed-primitive "^1.0.2" | ||||
|  | ||||
| underscore@^1.13.1: | ||||
|   version "1.13.7" | ||||
|   resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" | ||||
|   integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== | ||||
|  | ||||
| undici-types@~5.26.4: | ||||
|   version "5.26.5" | ||||
|   resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" | ||||
| @@ -5095,18 +4817,11 @@ use-latest@^1.2.1: | ||||
|   dependencies: | ||||
|     use-isomorphic-layout-effect "^1.1.1" | ||||
|  | ||||
| util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: | ||||
| util-deprecate@^1.0.1, util-deprecate@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" | ||||
|   integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== | ||||
|  | ||||
| utrie@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" | ||||
|   integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== | ||||
|   dependencies: | ||||
|     base64-arraybuffer "^1.0.2" | ||||
|  | ||||
| uuid@^10.0.0: | ||||
|   version "10.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" | ||||
| @@ -5263,11 +4978,6 @@ wrappy@1: | ||||
|   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" | ||||
|   integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== | ||||
|  | ||||
| xmlbuilder@^10.0.0: | ||||
|   version "10.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" | ||||
|   integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== | ||||
|  | ||||
| yallist@^4.0.0: | ||||
|   version "4.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" | ||||
|   | ||||