├── react-articles
├── public
│ ├── favicon.ico
│ ├── manifest.json
│ └── index.html
├── src
│ ├── App.js
│ ├── .gitignore
│ ├── index.css
│ ├── index.js
│ ├── article
│ │ ├── Article.js
│ │ ├── ArticleList.js
│ │ └── ArticleManager.js
│ ├── paragraph
│ │ ├── Paragraph.js
│ │ ├── EditableParagraph.js
│ │ ├── ParagraphList.js
│ │ └── ParagraphContainer.js
│ ├── serviceWorker.js
│ └── App.css
├── package.json
└── README.md
├── server
├── README.md
├── .eslintrc.js
├── services
│ ├── db.js
│ ├── paragraph
│ │ ├── create.js
│ │ ├── delete.js
│ │ ├── read.js
│ │ └── update.js
│ ├── article
│ │ ├── create.js
│ │ ├── update.js
│ │ ├── delete.js
│ │ └── read.js
│ └── paragraphs
│ │ └── update.js
├── models
│ ├── article.js
│ └── paragraph.js
├── package.json
└── serverless.yml
├── .idea
├── misc.xml
├── vcs.xml
├── modules.xml
├── serverless-articles.iml
├── inspectionProfiles
│ └── Project_Default.xml
└── workspace.xml
├── README.md
├── .gitignore
└── package.json
/react-articles/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NansD/articles/master/react-articles/public/favicon.ico
--------------------------------------------------------------------------------
/server/README.md:
--------------------------------------------------------------------------------
1 | # serverless-articles
2 |
3 | run `npm i`
4 | then run `npm start`
5 | your serverless services are now running on localhost:3000 !
6 | 🚀
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/server/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "extends": "airbnb-base",
3 | "env": {
4 | "node": true
5 | },
6 | "rules": {
7 | "no-console": 0,
8 | "no-underscore-dangle": 0,
9 | },
10 | };
11 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/react-articles/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import './App.css';
3 | import ArticleManager from "./article/ArticleManager";
4 |
5 | class App extends Component {
6 | render() {
7 | return (
8 |
9 | );
10 | }
11 | }
12 |
13 | export default App;
14 |
--------------------------------------------------------------------------------
/server/services/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const mongodbUri = 'mongodb://admin:foo1bar@ds129386.mlab.com:29386/articles'; // very secure credentials
4 | mongoose.connect(mongodbUri);
5 | const db = mongoose.connection;
6 |
7 | db.on('error', console.error.bind(console, 'connection error:'));
8 | db.once('open', () => { });
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # articles
2 | School project, REST api for a enhanced todo-style app, with articles and paragraphs with a has-many relation
3 |
4 | # How to run the app ?
5 |
6 | `git clone https://github.com/NansD/articles.git`
7 |
8 | `cd articles && npm install`
9 |
10 | `npm start`
11 |
12 | :clap: Your app is running on port 3001 :rocket:
13 |
--------------------------------------------------------------------------------
/react-articles/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/react-articles/src/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/react-articles/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
5 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
6 | sans-serif;
7 | -webkit-font-smoothing: antialiased;
8 | -moz-osx-font-smoothing: grayscale;
9 | }
10 |
11 | code {
12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
13 | monospace;
14 | }
15 |
--------------------------------------------------------------------------------
/.idea/serverless-articles.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/react-articles/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import * as serviceWorker from './serviceWorker';
6 |
7 | ReactDOM.render( , document.getElementById('root'));
8 |
9 | // If you want your app to work offline and load faster, you can change
10 | // unregister() to register() below. Note this comes with some pitfalls.
11 | // Learn more about service workers: http://bit.ly/CRA-PWA
12 | serviceWorker.unregister();
13 |
--------------------------------------------------------------------------------
/react-articles/src/article/Article.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const Article = (props) => {
4 | //Onclick of an article component = display its paragraphs
5 | return (
6 |
9 | {props.title}
10 |
11 | {/*i used to delete article on click*/}
12 |
15 |
)
16 | };
17 |
18 | export default Article;
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/server/services/paragraph/create.js:
--------------------------------------------------------------------------------
1 | const Paragraph = require('../../models/paragraph');
2 | const queryString = require('querystring');
3 | const sanitize = require('mongo-sanitize');
4 | require('../db');
5 |
6 | module.exports.create = async (event, context) => {
7 | let statusCode = 200;
8 | let message = 'paragraph create endpoint called, paragraph successfully created';
9 | const formData = sanitize(queryString.parse(event.body));
10 | const paragraph = await Paragraph.create(formData);
11 |
12 | return {
13 | statusCode,
14 | body: JSON.stringify({
15 | message,
16 | paragraph,
17 | }),
18 | };
19 | };
20 |
--------------------------------------------------------------------------------
/react-articles/src/article/ArticleList.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Article from "./Article";
3 |
4 | const ArticleList = (props) => {
5 | var options = [];
6 | if (props.results) {
7 | //mapping the article list to display them
8 | options = props.results.map(article => (
9 |
14 | ))
15 | }
16 | return {options}
17 | };
18 |
19 | export default ArticleList;
--------------------------------------------------------------------------------
/server/models/article.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | // delete already existing model because of this issue : https://github.com/kriasoft/react-starter-kit/issues/1418
4 | // see this answer : https://github.com/kriasoft/react-starter-kit/issues/1418#issuecomment-334913935
5 | // this line doesn't crash if no model exists
6 | delete mongoose.connection.models.Article;
7 |
8 | // we use embedded Data models because it suits our needs (https://docs.mongodb.com/manual/core/data-model-design/)
9 | const articleSchema = mongoose.Schema({
10 | title: String,
11 | });
12 | const Article = mongoose.model('Article', articleSchema);
13 | module.exports = Article;
14 |
--------------------------------------------------------------------------------
/server/services/article/create.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | const Article = require('../../models/article');
5 | require('../db');
6 |
7 | module.exports.create = async (event, context) => {
8 | const statusCode = 200;
9 | const message = 'article create endpoint called, article successfully created';
10 | const formData = sanitize(queryString.parse(event.body));
11 | const article = await Article.create(formData);
12 |
13 | return {
14 | statusCode,
15 | body: JSON.stringify({
16 | message,
17 | article,
18 | }),
19 | };
20 | };
21 |
--------------------------------------------------------------------------------
/react-articles/src/paragraph/Paragraph.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {SortableElement} from 'react-sortable-hoc';
3 |
4 | const Paragraph = SortableElement((props) => {
5 | return(
6 | {/*giving id in data-id permits the onSortEnd to know the id of its paragraph*/}
7 |
10 |
12 | {props.content}
13 |
14 |
15 | )
16 | });
17 |
18 | export default Paragraph;
--------------------------------------------------------------------------------
/server/models/paragraph.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | // delete already existing model because of this issue : https://github.com/kriasoft/react-starter-kit/issues/1418
4 | // see this answer : https://github.com/kriasoft/react-starter-kit/issues/1418#issuecomment-334913935
5 | // this line doesn't crash if no model exists
6 | delete mongoose.connection.models.Paragraph;
7 |
8 | // we use embedded Data models because it suits our needs (https://docs.mongodb.com/manual/core/data-model-design/)
9 | const paragraphSchema = mongoose.Schema({
10 | articleId: String,
11 | order: Number,
12 | content: String,
13 | });
14 | const Paragraph = mongoose.model('Paragraph', paragraphSchema);
15 | module.exports = Paragraph;
16 |
--------------------------------------------------------------------------------
/react-articles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-articles",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.18.0",
7 | "react": "^16.7.0",
8 | "react-dom": "^16.7.0",
9 | "react-scripts": "2.1.1",
10 | "react-sortable": "^2.0.0",
11 | "react-sortable-hoc": "^0.8.4"
12 | },
13 | "proxy": "http://localhost:3000",
14 | "scripts": {
15 | "start": "PORT=3001 react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": "react-app"
22 | },
23 | "browserslist": [
24 | ">0.2%",
25 | "not dead",
26 | "not ie <= 11",
27 | "not op_mini all"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/react-articles/src/paragraph/EditableParagraph.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {SortableElement} from 'react-sortable-hoc';
3 |
4 | const EditableParagraph = SortableElement((props) => {
5 | {/*giving id in data-id permits the different methods using events to know the id of their paragraph during the call of the function*/}
6 | return(
14 | )
15 | });
16 |
17 | export default EditableParagraph;
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | node_modules
3 |
4 |
5 | /server/node_modules
6 | /server/.DS_Store
7 | /server/.idea
8 | /server/package-lock.json
9 | /server/.serverless
10 |
11 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
12 |
13 | # dependencies
14 | /react-articles/node_modules
15 | /react-articles/.pnp
16 | /react-articles/.pnp.js
17 |
18 | # testing
19 | /react-articles/coverage
20 |
21 | # production
22 | /react-articles/build
23 |
24 | # misc
25 | /react-articles/.DS_Store
26 | /react-articles/.env.local
27 | /react-articles/.env.development.local
28 | /react-articles/.env.test.local
29 | /react-articles/.env.production.local
30 |
31 | /react-articles/npm-debug.log*
32 | /react-articles/yarn-debug.log*
33 | /react-articles/yarn-error.log*
34 | /react-articles/package-lock.json
35 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "articles",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "concurrently --kill-others \"cd server && npm start\" \"cd react-articles && npm start\"",
8 | "install": "concurrently \"cd server && npm install\" \"cd react-articles && npm install\"",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/NansD/serverless-articles.git"
14 | },
15 | "author": "",
16 | "license": "ISC",
17 | "bugs": {
18 | "url": "https://github.com/NansD/serverless-articles/issues"
19 | },
20 | "homepage": "https://github.com/NansD/serverless-articles#readme",
21 | "dependencies": {
22 | "concurrently": "^4.1.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "serverless-store",
3 | "version": "1.0.0",
4 | "description": "",
5 | "dependencies": {
6 | "base-64": "^0.1.0",
7 | "mongo-sanitize": "^1.0.0",
8 | "mongoose-unique-validator": "^2.0.1",
9 | "serverless": "^1.32.0",
10 | "mongoose": "^5.4.0",
11 | "qs": "^6.5.2"
12 | },
13 | "devDependencies": {
14 | "cryptiles": "^4.1.2",
15 | "serverless-offline": "^3.25.11"
16 | },
17 | "scripts": {
18 | "start": "serverless offline start",
19 | "test": "echo \"Error: no test specified\" && exit 1"
20 | },
21 | "repository": {
22 | "type": "git",
23 | "url": "git+https://github.com/NansD/serverless-store.git"
24 | },
25 | "author": "",
26 | "license": "ISC",
27 | "bugs": {
28 | "url": "https://github.com/NansD/serverless-store/issues"
29 | },
30 | "homepage": "https://github.com/NansD/serverless-store#readme"
31 | }
32 |
--------------------------------------------------------------------------------
/server/services/paragraph/delete.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | require('../db');
5 |
6 | module.exports.delete = async (event, context) => {
7 | let statusCode = 200;
8 | let message = 'paragraph delete endpoint called';
9 | let paragraph;
10 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
11 | ? sanitize(event.pathParameters._id)
12 | : false;
13 | if (_id) {
14 | paragraph = await Paragraph.findOneAndDelete({ _id });
15 | message += ' paragraph successfully deleted';
16 | } else {
17 | statusCode = 400;
18 | message = 'paragraph delete endpoint called, please specify an id';
19 | }
20 |
21 |
22 | return {
23 | statusCode,
24 | body: JSON.stringify({
25 | message,
26 | paragraph,
27 | }),
28 | };
29 | };
30 |
--------------------------------------------------------------------------------
/server/services/article/update.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Article = require('../../models/article');
4 | require('../db');
5 |
6 | module.exports.update = async (event, context) => {
7 | let statusCode = 200;
8 | let article;
9 | let message = 'article update endpoint called, article successfully updated';
10 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
11 | ? sanitize(event.pathParameters._id)
12 | : false;
13 | const formData = sanitize(queryString.parse(event.body));
14 | if (!_id) {
15 | statusCode = 400;
16 | message = 'bad request';
17 | } else {
18 | article = await Article.findOneAndUpdate({ _id: formData._id }, formData, { new: true });
19 | }
20 |
21 | return {
22 | statusCode,
23 | body: JSON.stringify({
24 | message,
25 | article,
26 | }),
27 | };
28 | };
29 |
--------------------------------------------------------------------------------
/server/services/article/delete.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | const Article = require('../../models/article');
5 | require('../db');
6 |
7 | module.exports.delete = async (event, context) => {
8 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
9 | ? sanitize(event.pathParameters._id)
10 | : false;
11 | let statusCode = 200;
12 | let message = 'article delete endpoint called';
13 | let article;
14 | if (!_id) {
15 | statusCode = 400;
16 | message = 'article delete endpoint called, please specify an id';
17 | } else {
18 | await Paragraph.deleteMany({ articleId: _id });
19 | article = await Article.findOneAndDelete({ _id });
20 | }
21 |
22 | return {
23 | statusCode,
24 | body: JSON.stringify({
25 | message,
26 | article,
27 | }),
28 | };
29 | };
30 |
--------------------------------------------------------------------------------
/server/services/paragraph/read.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | require('../db');
5 |
6 | module.exports.read = async (event, context) => {
7 | const statusCode = 200;
8 | let message = 'paragraph read endpoint called';
9 | let paragraph;
10 | let paragraphs;
11 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
12 | ? sanitize(event.pathParameters._id)
13 | : false;
14 | // if no id is specified, send all the paragraphs
15 | // otherwise send the paragraph with the right id
16 | if (!_id) {
17 | paragraphs = await Paragraph.find({});
18 | } else {
19 | paragraph = await Paragraph.findOne({ _id });
20 | if (!paragraph) {
21 | message += 'paragraph not found'
22 | }
23 | }
24 |
25 | return {
26 | statusCode,
27 | body: JSON.stringify({
28 | message,
29 | paragraph,
30 | paragraphs,
31 | }),
32 | };
33 | };
34 |
--------------------------------------------------------------------------------
/server/services/paragraphs/update.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | require('../db');
5 |
6 | /**
7 | * Allows the update of multiple paragraphs at once
8 | */
9 | module.exports.update = async (event, context) => {
10 | let statusCode = 200;
11 | let message = 'paragraphs endpoint called. Paragraphs successfully updated';
12 | const formData = sanitize(queryString.parse(event.body));
13 | const paragraphs = JSON.parse(queryString.parse(event.body).paragraphs);
14 | if (!formData.paragraphs) {
15 | statusCode = 400;
16 | message = 'Wrong parameters';
17 | } else {
18 | // the frontend sends us an array of paragraphs which are
19 | // ordered accordingly to the interface
20 | // so we update each paragraph with its correct order
21 | for (let i = 0; i < paragraphs.length; i++) {
22 | let paragraph = paragraphs[i];
23 | paragraph = {
24 | ...paragraph,
25 | order: i,
26 | };
27 | await Paragraph.findOneAndUpdate({ _id: paragraph._id }, paragraph);
28 | }
29 | }
30 |
31 |
32 | return {
33 | statusCode,
34 | body: JSON.stringify({
35 | message,
36 | paragraphs: formData.paragraphs,
37 | }),
38 | };
39 | };
40 |
--------------------------------------------------------------------------------
/server/services/paragraph/update.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | require('../db');
5 |
6 | module.exports.update = async (event, context) => {
7 | let statusCode = 200;
8 | let paragraph;
9 | let message = 'paragraph update endpoint called, paragraph successfully updated';
10 | const formData = sanitize(queryString.parse(event.body));
11 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
12 | ? sanitize(event.pathParameters._id)
13 | : false;
14 | if (_id && _id === formData._id) {
15 | // Lorsqu'on update le paragraphe, il a un nouvel ordre
16 | // Il peut s'agir d'un numéro d'ordre qui est déjà utilisé
17 | // On va décaler les ordres des paragraphes existants après
18 | const articleParagraphs = await Paragraph.find({ articleId: formData.articleId });
19 | for (let i = 0; i < articleParagraphs.length; i++) {
20 | const p = articleParagraphs[i];
21 | if (p._id != _id && formData.order && p.order >= formData.order) {
22 | p.order += 1;
23 | await Paragraph.findOneAndUpdate({ _id: p._id }, p);
24 | }
25 | }
26 | paragraph = await Paragraph.findOneAndUpdate({ _id }, formData, { new: true });
27 | } else {
28 | statusCode = 400;
29 | message = 'Bad request';
30 | }
31 |
32 | if (paragraph == null) {
33 | statusCode = 404;
34 | message = 'Paragraph not found';
35 | }
36 |
37 | return {
38 | statusCode,
39 | body: JSON.stringify({
40 | message,
41 | paragraph,
42 | }),
43 | };
44 | };
45 |
--------------------------------------------------------------------------------
/react-articles/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
22 | Articles & Paragraphes
23 |
24 |
25 |
26 | You need to enable JavaScript to run this app.
27 |
28 |
29 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/server/services/article/read.js:
--------------------------------------------------------------------------------
1 | const queryString = require('querystring');
2 | const sanitize = require('mongo-sanitize');
3 | const Paragraph = require('../../models/paragraph');
4 | const Article = require('../../models/article');
5 | require('../db');
6 |
7 | /**
8 | * @param event
9 | * @param context
10 | * @returns {Promise<{statusCode: number, body: string}>}
11 | * si pas de filtre, je renvoie tous les articles et leurs paragraphes
12 | si filtre, je renvoie juste les articles avec leur titre
13 | si _id, je renvoie un article et ses paragraphes
14 | */
15 |
16 | module.exports.read = async (event, context) => {
17 | let statusCode = 200;
18 | let message = 'article read endpoint called';
19 | const _id = (event.pathParameters && event.pathParameters.hasOwnProperty('_id'))
20 | ? sanitize(event.pathParameters._id)
21 | : false;
22 |
23 | const queryStringParameters = sanitize(event.queryStringParameters);
24 | let article;
25 | let articles;
26 | if (_id) {
27 | article = await Article.findOne({ _id });
28 | if (article) {
29 | const paragraphs = await Paragraph.find({ articleId: article._id });
30 | article = {
31 | _id: article._id,
32 | title: article.title,
33 | paragraphs,
34 | };
35 | } else {
36 | statusCode = 404;
37 | message = 'article not found';
38 | }
39 | } else {
40 | articles = await Article.find();
41 | const articlesWithParagraphs = [];
42 | if (!queryStringParameters || !queryStringParameters.filter) {
43 | for (let i = 0; i < articles.length; i++) {
44 | articlesWithParagraphs.push({
45 | _id: articles[i]._id,
46 | title: articles[i].title,
47 | paragraphs: await Paragraph.find({ articleId: articles[i]._id }),
48 | });
49 | }
50 | articles = articlesWithParagraphs;
51 | }
52 | }
53 |
54 |
55 | return {
56 | statusCode,
57 | body: JSON.stringify({
58 | message,
59 | article,
60 | articles,
61 | }),
62 | };
63 | };
64 |
--------------------------------------------------------------------------------
/react-articles/README.md:
--------------------------------------------------------------------------------
1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
2 |
3 | ## Available Scripts
4 |
5 | In the project directory, you can run:
6 |
7 | ### `npm start`
8 |
9 | Runs the app in the development mode.
10 | Open [http://localhost:3001](http://localhost:3001) to view it in the browser.
11 |
12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console.
14 |
15 | ### `npm test`
16 |
17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
19 |
20 | ### `npm run build`
21 |
22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance.
24 |
25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed!
27 |
28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
29 |
30 | ### `npm run eject`
31 |
32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
33 |
34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
35 |
36 | Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
37 |
38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
39 |
40 | ## Learn More
41 |
42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
43 |
44 | To learn React, check out the [React documentation](https://reactjs.org/).
45 |
--------------------------------------------------------------------------------
/react-articles/src/paragraph/ParagraphList.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Paragraph from './Paragraph';
3 | import EditableParagraph from './EditableParagraph'
4 | import {SortableContainer} from 'react-sortable-hoc';
5 |
6 | const ParagraphList = SortableContainer((props) => {
7 | return (
8 |
9 | {/*index prop is used for react-sortable-hoc library, but not used in pargraph/editableparagraph component*/}
10 | {/*Two components: Editable and Paragraph to display the edition mode only on the paragraphs clicked*/}
11 | {
12 | props.items.map((paragraph,index) => (paragraph.toEdit ?
:
19 | ))
26 | }
27 |
28 | )
29 | });
30 |
31 | export default ParagraphList;
--------------------------------------------------------------------------------
/react-articles/src/article/ArticleManager.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import ArticleList from './ArticleList';
3 | import axios from 'axios';
4 | import ParagraphContainer from "../paragraph/ParagraphContainer";
5 |
6 | class ArticleManager extends Component {
7 | //initalization of state's component
8 | constructor() {
9 | super();
10 | this.state = {
11 | results: [],
12 | articleToDisplay: '',
13 | inputClasses: 'input',
14 | inputIsError: false,
15 | newArticle: false,
16 | change: {
17 | articleName : ''
18 | }
19 | }
20 | }
21 |
22 | //Change articleToDisplay value which leads to display the paragraph clicked
23 | showParagraph(e) {
24 | this.setState({
25 | articleToDisplay: e.target.name,
26 | })
27 | }
28 |
29 | //On mounting: get all the articles
30 | componentDidMount() {
31 | axios.get('/article').then(res => {
32 | this.setState({
33 | results:res.data.articles
34 | })
35 | });
36 | }
37 |
38 | //Adds an article in the db and in the front app
39 | addArticle = () => {
40 | const title = this.state.change.articleName.trim();
41 | if(title) {
42 | axios.post('/article',"title="+title).then((res) => {
43 | this.setState(prevState => ({
44 | inputClasses: 'input',
45 | inputIsError: false,
46 | results: [...prevState.results, {
47 | _id: res.data.article._id,
48 | title: title
49 | }],
50 | newArticle: true,
51 | articleToDisplay: res.data.article._id
52 | }));
53 | });
54 | } else {this.setState({
55 | inputClasses: 'input is-error',
56 | inputIsError: true,
57 | })}
58 | };
59 |
60 | //Deletes an article in the db and in the front app
61 | delArticle = (e) => {
62 | const id = e.target.id;
63 | axios.delete('/article/' + id).then(res => {
64 | axios.get('/article').then(res => {
65 | this.setState({
66 | results:res.data.articles
67 | })
68 | })
69 | });
70 | //Supress the paragraphs of the page if the articled deleted is the one being displayed
71 | if(id === this.state.articleToDisplay) {
72 | this.setState({
73 | articleToDisplay: null
74 | })
75 | }
76 | };
77 |
78 | //Handle input changes (for new article name)
79 | handleChange(e) {
80 | this.setState({
81 | change : {
82 | ...this.state.change,
83 | [e.target.name] : e.target.value,
84 | },
85 | });
86 | };
87 |
88 | render() {
89 | //Show the paragraphs of an article if one of them is clicked
90 | //Otherwise: nothing
91 | const article = this.state.articleToDisplay ? : null;
93 | return (
94 |
95 |
96 |
97 |
Ajouter un article
98 |
99 | {this.state.inputIsError &&
Veuillez donner un nom à votre article.
}
100 |
101 |
102 |
103 | Liste des Articles
104 |
105 |
106 | {article}
107 |
108 | );
109 | }
110 | }
111 |
112 | export default ArticleManager;
--------------------------------------------------------------------------------
/react-articles/src/serviceWorker.js:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read http://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.1/8 is considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 | )
21 | );
22 |
23 | export function register(config) {
24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 | // The URL constructor is available in all browsers that support SW.
26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
27 | if (publicUrl.origin !== window.location.origin) {
28 | // Our service worker won't work if PUBLIC_URL is on a different origin
29 | // from what our page is served on. This might happen if a CDN is used to
30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 | return;
32 | }
33 |
34 | window.addEventListener('load', () => {
35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
36 |
37 | if (isLocalhost) {
38 | // This is running on localhost. Let's check if a service worker still exists or not.
39 | checkValidServiceWorker(swUrl, config);
40 |
41 | // Add some additional logging to localhost, pointing developers to the
42 | // service worker/PWA documentation.
43 | navigator.serviceWorker.ready.then(() => {
44 | console.log(
45 | 'This web app is being served cache-first by a service ' +
46 | 'worker. To learn more, visit http://bit.ly/CRA-PWA'
47 | );
48 | });
49 | } else {
50 | // Is not localhost. Just register service worker
51 | registerValidSW(swUrl, config);
52 | }
53 | });
54 | }
55 | }
56 |
57 | function registerValidSW(swUrl, config) {
58 | navigator.serviceWorker
59 | .register(swUrl)
60 | .then(registration => {
61 | registration.onupdatefound = () => {
62 | const installingWorker = registration.installing;
63 | if (installingWorker == null) {
64 | return;
65 | }
66 | installingWorker.onstatechange = () => {
67 | if (installingWorker.state === 'installed') {
68 | if (navigator.serviceWorker.controller) {
69 | // At this point, the updated precached content has been fetched,
70 | // but the previous service worker will still serve the older
71 | // content until all client tabs are closed.
72 | console.log(
73 | 'New content is available and will be used when all ' +
74 | 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'
75 | );
76 |
77 | // Execute callback
78 | if (config && config.onUpdate) {
79 | config.onUpdate(registration);
80 | }
81 | } else {
82 | // At this point, everything has been precached.
83 | // It's the perfect time to display a
84 | // "Content is cached for offline use." message.
85 | console.log('Content is cached for offline use.');
86 |
87 | // Execute callback
88 | if (config && config.onSuccess) {
89 | config.onSuccess(registration);
90 | }
91 | }
92 | }
93 | };
94 | };
95 | })
96 | .catch(error => {
97 | console.error('Error during service worker registration:', error);
98 | });
99 | }
100 |
101 | function checkValidServiceWorker(swUrl, config) {
102 | // Check if the service worker can be found. If it can't reload the page.
103 | fetch(swUrl)
104 | .then(response => {
105 | // Ensure service worker exists, and that we really are getting a JS file.
106 | const contentType = response.headers.get('content-type');
107 | if (
108 | response.status === 404 ||
109 | (contentType != null && contentType.indexOf('javascript') === -1)
110 | ) {
111 | // No service worker found. Probably a different app. Reload the page.
112 | navigator.serviceWorker.ready.then(registration => {
113 | registration.unregister().then(() => {
114 | window.location.reload();
115 | });
116 | });
117 | } else {
118 | // Service worker found. Proceed as normal.
119 | registerValidSW(swUrl, config);
120 | }
121 | })
122 | .catch(() => {
123 | console.log(
124 | 'No internet connection found. App is running in offline mode.'
125 | );
126 | });
127 | }
128 |
129 | export function unregister() {
130 | if ('serviceWorker' in navigator) {
131 | navigator.serviceWorker.ready.then(registration => {
132 | registration.unregister();
133 | });
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/server/serverless.yml:
--------------------------------------------------------------------------------
1 | # Welcome to Serverless!
2 | #
3 | # This file is the main config file for your service.
4 | # It's very minimal at this point and uses default values.
5 | # You can always add more config options for more control.
6 | # We've included some commented out config examples here.
7 | # Just uncomment any of them to get that config option.
8 | #
9 | # For full config options, check the docs:
10 | # docs.serverless.com
11 | #
12 | # Happy Coding!
13 |
14 | service: my-service # NOTE: update this with your service name
15 |
16 | # You can pin your service to only deploy with a specific Serverless version
17 | # Check out our docs for more details
18 | # frameworkVersion: "=X.X.X"
19 |
20 | provider:
21 | name: aws
22 | runtime: nodejs8.10
23 | iamRoleStatements:
24 | - Effect: Allow
25 | Action:
26 | - lambda:InvokeFunction
27 | Resource: "*"
28 |
29 | # you can overwrite defaults here
30 | # stage: dev
31 | # region: us-east-1
32 |
33 | # you can add statements to the Lambda function's IAM Role here
34 | # iamRoleStatements:
35 | # - Effect: "Allow"
36 | # Action:
37 | # - "s3:ListBucket"
38 | # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
39 | # - Effect: "Allow"
40 | # Action:
41 | # - "s3:PutObject"
42 | # Resource:
43 | # Fn::Join:
44 | # - ""
45 | # - - "arn:aws:s3:::"
46 | # - "Ref" : "ServerlessDeploymentBucket"
47 | # - "/*"
48 |
49 | # you can define service wide environment variables here
50 | # environment:
51 | # variable1: value1
52 |
53 | # you can add packaging information here
54 | #package:
55 | # include:
56 | # - include-me.js
57 | # - include-me-dir/**
58 | # exclude:
59 | # - exclude-me.js
60 | # - exclude-me-dir/**
61 |
62 | functions:
63 | paragraphPOST:
64 | handler: services/paragraph/create.create
65 | events:
66 | - http:
67 | path: paragraph
68 | method: POST
69 | paragraphDELETE:
70 | handler: services/paragraph/delete.delete
71 | events:
72 | - http:
73 | path: paragraph/{_id}
74 | method: DELETE
75 | request:
76 | parameters:
77 | paths:
78 | id: true
79 | paragraphREAD:
80 | handler: services/paragraph/read.read
81 | events:
82 | - http:
83 | path: paragraph/{_id}
84 | method: GET
85 | request:
86 | parameters:
87 | paths:
88 | id: true
89 | paragraphsREAD:
90 | handler: services/paragraph/read.read
91 | events:
92 | - http:
93 | path: paragraph
94 | method: GET
95 | paragraphPATCH:
96 | handler: services/paragraph/update.update
97 | events:
98 | - http:
99 | path: paragraph/{_id}
100 | method: PATCH
101 | request:
102 | parameters:
103 | paths:
104 | id: true
105 | paragraphsPATCH:
106 | handler: services/paragraphs/update.update
107 | events:
108 | - http:
109 | path: paragraphs
110 | method: PATCH
111 | articlePOST:
112 | handler: services/article/create.create
113 | events:
114 | - http:
115 | path: article
116 | method: POST
117 | articleDELETE:
118 | handler: services/article/delete.delete
119 | events:
120 | - http:
121 | path: article/{_id}
122 | method: DELETE
123 | request:
124 | parameters:
125 | paths:
126 | id: true
127 | articlesRead:
128 | handler: services/article/read.read
129 | events:
130 | - http:
131 | path: article
132 | method: GET
133 | articleREAD:
134 | handler: services/article/read.read
135 | events:
136 | - http:
137 | path: article/{_id}
138 | method: GET
139 | request:
140 | parameters:
141 | paths:
142 | id: true
143 | articlePATCH:
144 | handler: services/article/update.update
145 | events:
146 | - http:
147 | path: article/{_id}
148 | method: PATCH
149 | request:
150 | parameters:
151 | paths:
152 | id: true
153 | plugins:
154 | - serverless-offline
155 |
156 | # The following are a few example events you can configure
157 | # NOTE: Please make sure to change your handler code to work with those events
158 | # Check the event documentation for details
159 | # events:
160 | # - http:
161 | # path: users/create
162 | # method: get
163 | # - s3: ${env:BUCKET}
164 | # - schedule: rate(10 minutes)
165 | # - sns: greeter-topic
166 | # - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
167 | # - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
168 | # - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
169 | # - iot:
170 | # sql: "SELECT * FROM 'some_topic'"
171 | # - cloudwatchEvent:
172 | # event:
173 | # source:
174 | # - "aws.ec2"
175 | # detail-type:
176 | # - "EC2 Instance State-change Notification"
177 | # detail:
178 | # state:
179 | # - pending
180 | # - cloudwatchLog: '/aws/lambda/hello'
181 | # - cognitoUserPool:
182 | # pool: MyUserPool
183 | # trigger: PreSignUp
184 |
185 | # Define function environment variables here
186 | # environment:
187 | # variable2: value2
188 |
189 | # you can add CloudFormation resource templates here
190 | #resources:
191 | # Resources:
192 | # NewResource:
193 | # Type: AWS::S3::Bucket
194 | # Properties:
195 | # BucketName: my-new-bucket
196 | # Outputs:
197 | # NewOutput:
198 | # Description: "Description for the output"
199 | # Value: "Some output value"
200 |
--------------------------------------------------------------------------------
/react-articles/src/paragraph/ParagraphContainer.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import ParagraphList from './ParagraphList';
3 | import axios from "axios";
4 | import {arrayMove} from 'react-sortable-hoc';
5 |
6 |
7 | class ParagraphContainer extends Component {
8 | //initialization of component's state
9 | constructor(props) {
10 | super(props);
11 |
12 | this.state = {
13 | paragraphs: [],
14 | id: 0,
15 | name: '',
16 | editionMode: false,
17 | change: {
18 | paragraphContent: '',
19 | },
20 | }
21 | }
22 |
23 | //display the article on the first click using props
24 | componentDidMount() {
25 | if(this.props.newArticle) {
26 | this.setState({
27 | editionMode: true
28 | })
29 | };
30 | this.updateFrontParagraph();
31 | }
32 |
33 | // update the displayed paragraphs according to the
34 | // article that will be displayed
35 | componentWillReceiveProps(nextProps) {
36 | if(nextProps.newArticle) {
37 | this.setState({
38 | editionMode: true
39 | })
40 | };
41 | this.updateFrontParagraph(nextProps.articleid);
42 | }
43 |
44 | //Method displaying the paragraphs of an article
45 | updateFrontParagraph = (articleId) => {
46 | const articleIdToQuery = articleId || this.props.articleid
47 | axios.get('/article/' + articleIdToQuery).then(res => {
48 | let paragraphs = res.data.article.paragraphs;
49 |
50 | paragraphs.sort(function (a, b) {
51 | return a.order - b.order;
52 | });
53 |
54 | paragraphs.map((paragraph,index) => {
55 | paragraphs[index].toEdit = false;
56 | paragraphs[index].previousContent = paragraph.content;
57 | });
58 |
59 | this.setState({
60 | name: res.data.article.title,
61 | paragraphs: paragraphs,
62 | });
63 | });
64 | };
65 |
66 | //Add a paragraph to the article
67 | //Add the paragraph to the dtabase using Post request
68 | //Using paragraphs.length as the order to boost performance
69 | addParagraph = () => {
70 | const order = this.state.paragraphs.length + 1;
71 | const content = this.state.change.paragraphContent ? this.state.change.paragraphContent : "Nouveau Paragraphe";
72 | axios.post('/paragraph',"articleId=" + this.props.articleid + "&order=" + order + "&content=" + content).then(
73 | this.updateFrontParagraph()
74 | )
75 | };
76 |
77 |
78 | //Handle inputs change for every inputs in the page
79 | handleChange(e) {
80 | this.setState({
81 | change : {
82 | ...this.state.change,
83 | [e.target.name] : e.target.value,
84 | },
85 | });
86 | };
87 |
88 | //Toggle if the user can edit the paragraphs or not
89 | toggleEditionMode = () => {
90 | const newEditionMode = !this.state.editionMode;
91 | this.setState({
92 | editionMode : newEditionMode,
93 | })
94 | };
95 |
96 | //Passing toEdit value to true will display a textarea instead of div (permitting edition)
97 | editParagraph = (e) => {
98 | if (this.state.editionMode) {
99 | let paragraphs = [...this.state.paragraphs];
100 | paragraphs[e.target.dataset.id].toEdit = true;
101 | this.setState({paragraphs});
102 | }
103 | };
104 |
105 | //Handle the edition of a paragraph during tapping
106 | handleChangeParagraph = (e) => {
107 | let paragraphs = [...this.state.paragraphs];
108 | paragraphs[e.target.name].content = e.target.value;
109 | this.setState({paragraphs});
110 | };
111 |
112 | //Deletes a pargraph in the database and in the state
113 | delParagraph = (e) => {
114 | const id = e.target.dataset.id;
115 | axios.delete("/paragraph/" + id).then(
116 | this.updateFrontParagraph()
117 | )
118 | };
119 |
120 | //Handle key down in the textarea durinf edition of a paragraph
121 | //27 = ESC key -- 13 = Ebter key
122 | handleKeyDown = (e) => {
123 | if (e.keyCode === 27) {
124 | let paragraphs = [...this.state.paragraphs];
125 | paragraphs[e.target.name].toEdit = false;
126 | paragraphs[e.target.name].content = paragraphs[e.target.name].previousContent;
127 | this.setState({paragraphs});
128 | }
129 | if (e.keyCode === 13) {
130 | const id = e.target.dataset.id;
131 | let paragraphs = [...this.state.paragraphs];
132 | axios.patch("/paragraph/" + id,"_id=" + id + "&content=" + paragraphs[e.target.name].content).then(
133 | paragraphs[e.target.name].toEdit = false
134 | );
135 | paragraphs[e.target.name].previousContent = paragraphs[e.target.name].content;
136 | this.setState({paragraphs});
137 | e.target.blur();
138 | }
139 | };
140 |
141 | //Handle end of sorting (given by the react-sortable-hoc library)
142 | //Editing the paragraphs' orders in the database
143 | onSortEnd = ({oldIndex, newIndex, collection}, e) => {
144 | this.setState({
145 | paragraphs: arrayMove(this.state.paragraphs, oldIndex, newIndex)
146 | }, () => {
147 | // If we keep the RESTful approach for the backend, we have to do this :
148 | // let id;
149 | // this.state.paragraphs.forEach(function (paragraph, index) {
150 | // id = paragraph._id;
151 | // axios.patch("/paragraph/" + id,"_id=" + id + "&order=" + index);
152 | // })
153 | //
154 | // but instead we have decided to create a route to allow to update
155 | // several paragraphs at a time :
156 | axios.patch('/paragraphs', "paragraphs="+JSON.stringify(this.state.paragraphs));
157 | });
158 |
159 |
160 | };
161 |
162 |
163 | //Rendering the paragraph container component
164 | render() {
165 | return(
166 |
167 |
{this.state.editionMode ? "Désactiver l'édition des paragraphes" : "Activer l'édition des paragraphes"}
168 | {this.state.editionMode &&
169 |
170 | Ajouter un paragraphe
171 |
172 |
173 |
}
174 |
175 | {this.state.name}
176 | {/*distance is used for avoiding the mixing of onClick to start edition and the click for sorting elements*/}
177 |
184 |
185 |
186 | )
187 | }
188 | }
189 |
190 | export default ParagraphContainer;
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 | close
163 | console
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 | true
195 | DEFINITION_ORDER
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 | GeneralJavaScript
222 |
223 |
224 | JavaScript
225 |
226 |
227 |
228 |
229 | JSCheckFunctionSignatures
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 | 1545338839545
318 |
319 |
320 | 1545338839545
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
--------------------------------------------------------------------------------
/react-articles/src/App.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * NES.css v0.0.2(alpha)
3 | */
4 | /*!
5 | * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)
6 | * Copyright 2011-2018 The Bootstrap Authors
7 | * Copyright 2011-2018 Twitter, Inc.
8 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
10 | */
11 | @import url("https://fonts.googleapis.com/css?family=Press+Start+2P");
12 | *,
13 | *::before,
14 | *::after {
15 | box-sizing: border-box;
16 | }
17 |
18 | html {
19 | font-family: sans-serif;
20 | line-height: 1.15;
21 | -webkit-text-size-adjust: 100%;
22 | -ms-overflow-style: scrollbar;
23 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
24 | cursor: url(https://unpkg.com/nes.css/assets/cursor.png),auto;
25 | }
26 |
27 | @-ms-viewport {
28 | width: device-width;
29 | }
30 |
31 | article,
32 | aside,
33 | figcaption,
34 | figure,
35 | footer,
36 | header,
37 | hgroup,
38 | main,
39 | nav,
40 | section {
41 | display: block;
42 | }
43 |
44 | body {
45 | margin: 4rem;
46 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, Noto Sans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
47 | font-size: 1rem;
48 | font-weight: 400;
49 | line-height: 1.5;
50 | color: #212529;
51 | text-align: left;
52 | background-color: #fff;
53 | }
54 |
55 | [tabindex="-1"]:focus {
56 | outline: 0 !important;
57 | }
58 |
59 | hr {
60 | box-sizing: content-box;
61 | height: 0;
62 | overflow: visible;
63 | }
64 |
65 | h1,
66 | h2,
67 | h3,
68 | h4,
69 | h5,
70 | h6 {
71 | margin-top: 0;
72 | margin-bottom: 0.5rem;
73 | }
74 |
75 | p {
76 | display: block;
77 | margin-block-start: 1em;
78 | margin-block-end: 1em;
79 | margin-inline-start: 0px;
80 | margin-inline-end: 0px;
81 | }
82 |
83 | abbr[title],
84 | abbr[data-original-title] {
85 | -webkit-text-decoration: underline dotted;
86 | text-decoration: underline;
87 | text-decoration: underline dotted;
88 | cursor: help;
89 | border-bottom: 0;
90 | }
91 |
92 | address {
93 | margin-bottom: 1rem;
94 | font-style: normal;
95 | line-height: inherit;
96 | }
97 |
98 | ol,
99 | ul,
100 | dl {
101 | margin-top: 0;
102 | margin-bottom: 1rem;
103 | }
104 |
105 | ol ol,
106 | ul ul,
107 | ol ul,
108 | ul ol {
109 | margin-bottom: 0;
110 | }
111 |
112 | dt {
113 | font-weight: 700;
114 | }
115 |
116 | dd {
117 | margin-bottom: 0.5rem;
118 | margin-left: 0;
119 | }
120 |
121 | blockquote {
122 | margin: 0 0 1rem;
123 | }
124 |
125 | b,
126 | strong {
127 | font-weight: bolder;
128 | }
129 |
130 | small {
131 | font-size: 80%;
132 | }
133 |
134 | sub,
135 | sup {
136 | position: relative;
137 | font-size: 75%;
138 | line-height: 0;
139 | vertical-align: baseline;
140 | }
141 |
142 | sub {
143 | bottom: -0.25em;
144 | }
145 |
146 | sup {
147 | top: -0.5em;
148 | }
149 |
150 | a {
151 | color: #007bff;
152 | text-decoration: none;
153 | background-color: transparent;
154 | }
155 |
156 | a:hover {
157 | color: #0056b3;
158 | text-decoration: underline;
159 | }
160 |
161 | a:not([href]):not([tabindex]) {
162 | color: inherit;
163 | text-decoration: none;
164 | }
165 |
166 | a:not([href]):not([tabindex]):hover,
167 | a:not([href]):not([tabindex]):focus {
168 | color: inherit;
169 | text-decoration: none;
170 | }
171 |
172 | a:not([href]):not([tabindex]):focus {
173 | outline: 0;
174 | }
175 |
176 | pre,
177 | code,
178 | kbd,
179 | samp {
180 | font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
181 | font-size: 1em;
182 | }
183 |
184 | pre {
185 | margin-top: 0;
186 | margin-bottom: 1rem;
187 | overflow: auto;
188 | -ms-overflow-style: scrollbar;
189 | }
190 |
191 | figure {
192 | margin: 0 0 1rem;
193 | }
194 |
195 | img {
196 | vertical-align: middle;
197 | border-style: none;
198 | }
199 |
200 | svg {
201 | overflow: hidden;
202 | vertical-align: middle;
203 | }
204 |
205 | table {
206 | border-collapse: collapse;
207 | }
208 |
209 | caption {
210 | padding-top: 0.75rem;
211 | padding-bottom: 0.75rem;
212 | color: #6c757d;
213 | text-align: left;
214 | caption-side: bottom;
215 | }
216 |
217 | th {
218 | text-align: inherit;
219 | }
220 |
221 | label {
222 | display: inline-block;
223 | margin-bottom: 0.5rem;
224 | }
225 |
226 | button {
227 | border-radius: 0;
228 | }
229 |
230 | input,
231 | button,
232 | select,
233 | optgroup,
234 | textarea {
235 | margin: 0;
236 | font-family: inherit;
237 | font-size: inherit;
238 | line-height: inherit;
239 | }
240 |
241 | button,
242 | input {
243 | overflow: visible;
244 | }
245 |
246 | button,
247 | select {
248 | text-transform: none;
249 | }
250 |
251 | button,
252 | [type="button"],
253 | [type="reset"],
254 | [type="submit"] {
255 | -webkit-appearance: button;
256 | }
257 |
258 | button::-moz-focus-inner,
259 | [type="button"]::-moz-focus-inner,
260 | [type="reset"]::-moz-focus-inner,
261 | [type="submit"]::-moz-focus-inner {
262 | padding: 0;
263 | border-style: none;
264 | }
265 |
266 | button:focus {
267 | outline: 1px dotted;
268 | outline: 5px auto -webkit-focus-ring-color;
269 | }
270 |
271 | input[type="radio"],
272 | input[type="checkbox"] {
273 | box-sizing: border-box;
274 | padding: 0;
275 | }
276 |
277 | input[type="date"],
278 | input[type="time"],
279 | input[type="datetime-local"],
280 | input[type="month"] {
281 | -webkit-appearance: listbox;
282 | }
283 |
284 | textarea {
285 | overflow: auto;
286 | resize: vertical;
287 | }
288 |
289 | div {
290 | overflow: auto;
291 | resize: vertical;
292 | }
293 |
294 |
295 | fieldset {
296 | min-width: 0;
297 | padding: 0;
298 | margin: 0;
299 | border: 0;
300 | }
301 |
302 | legend {
303 | display: block;
304 | width: 100%;
305 | max-width: 100%;
306 | padding: 0;
307 | margin-bottom: 0.5rem;
308 | font-size: 1.5rem;
309 | line-height: inherit;
310 | color: inherit;
311 | white-space: normal;
312 | }
313 |
314 | progress {
315 | vertical-align: baseline;
316 | }
317 |
318 | [type="number"]::-webkit-inner-spin-button,
319 | [type="number"]::-webkit-outer-spin-button {
320 | height: auto;
321 | }
322 |
323 | [type="search"] {
324 | outline-offset: -2px;
325 | -webkit-appearance: none;
326 | }
327 |
328 | [type="search"]::-webkit-search-decoration {
329 | -webkit-appearance: none;
330 | }
331 |
332 | ::-webkit-file-upload-button {
333 | font: inherit;
334 | -webkit-appearance: button;
335 | }
336 |
337 | output {
338 | display: inline-block;
339 | }
340 |
341 | summary {
342 | display: list-item;
343 | cursor: pointer;
344 | }
345 |
346 | template {
347 | display: none;
348 | }
349 |
350 | [hidden] {
351 | display: none !important;
352 | }
353 |
354 | html,
355 | body,
356 | pre,
357 | code,
358 | kbd,
359 | samp {
360 | font-family: "Press Start 2P";
361 | }
362 |
363 | body {
364 | font-size: 16px;
365 | color: #212529;
366 | background-color: #fff;
367 | }
368 |
369 | button,
370 | [type="button"],
371 | [type="reset"],
372 | [type="submit"] {
373 | -webkit-appearance: none;
374 | }
375 |
376 | @keyframes blink {
377 | 0% {
378 | opacity: 1;
379 | }
380 | 50% {
381 | opacity: 0;
382 | }
383 | }
384 |
385 | .is-inline{
386 | display: inline-block;
387 | }
388 |
389 | .btn {
390 | position: relative;
391 | display: inline-block;
392 | padding: 10px 12px;
393 | margin: 10px;
394 | text-align: center;
395 | vertical-align: middle;
396 | cursor: pointer;
397 | -webkit-user-select: none;
398 | -moz-user-select: none;
399 | -ms-user-select: none;
400 | user-select: none;
401 | color: #212529;
402 | background-color: #fff;
403 | box-shadow: inset -4px -4px #adafbc;
404 | cursor: url(https://unpkg.com/nes.css/assets/cursor-click.png),pointer;
405 | }
406 |
407 | .btn:hover {
408 | background-color: #e7e7e7;
409 | box-shadow: inset -6px -6px #adafbc;
410 | }
411 |
412 | .btn:active {
413 | box-shadow: inset 4px 4px #adafbc;
414 | }
415 |
416 | .btn::before, .btn::after {
417 | position: absolute;
418 | box-sizing: content-box;
419 | width: 100%;
420 | height: 100%;
421 | content: "";
422 | border-color: #212529;
423 | border-style: solid;
424 | border-width: 4px;
425 | }
426 |
427 | .btn::before {
428 | top: -4px;
429 | left: 0;
430 | border-right: 2px;
431 | border-left: 2px;
432 | }
433 |
434 | .btn::after {
435 | top: 0;
436 | left: -4px;
437 | border-top: 2px;
438 | border-bottom: 2px;
439 | }
440 |
441 | .btn:focus {
442 | outline: 0;
443 | }
444 |
445 | .btn.is-primary {
446 | color: #fff;
447 | background-color: #92cc41;
448 | box-shadow: inset -4px -4px #4aa52e;
449 | }
450 |
451 | .btn.is-primary:hover {
452 | background-color: #76c442;
453 | box-shadow: inset -6px -6px #4aa52e;
454 | }
455 |
456 | .btn.is-primary:active {
457 | box-shadow: inset 4px 4px #4aa52e;
458 | }
459 |
460 | .btn.is-success {
461 | color: #fff;
462 | background-color: #209cee;
463 | box-shadow: inset -4px -4px #006bb3;
464 | }
465 |
466 | .btn.is-success:hover {
467 | background-color: #108de0;
468 | box-shadow: inset -6px -6px #006bb3;
469 | }
470 |
471 | .btn.is-success:active {
472 | box-shadow: inset 4px 4px #006bb3;
473 | }
474 |
475 | .btn.is-warning {
476 | color: #212529;
477 | background-color: #f7d51d;
478 | box-shadow: inset -4px -4px #e59400;
479 | }
480 |
481 | .btn.is-warning:hover {
482 | background-color: #f2c409;
483 | box-shadow: inset -6px -6px #e59400;
484 | }
485 |
486 | .btn.is-warning:active {
487 | box-shadow: inset 4px 4px #e59400;
488 | }
489 |
490 | .btn.is-error {
491 | color: #fff;
492 | background-color: #e76e55;
493 | box-shadow: inset -4px -4px #8c2022;
494 | }
495 |
496 | .btn.is-error:hover {
497 | background-color: #ce372b;
498 | box-shadow: inset -6px -6px #8c2022;
499 | }
500 |
501 | .btn.is-error:active {
502 | box-shadow: inset 4px 4px #8c2022;
503 | }
504 |
505 | .container {
506 | position: relative;
507 | padding: 1.5rem 2rem;
508 | margin-bottom: 1rem;
509 | }
510 |
511 | div.containers > .container {
512 | display: inline-block;
513 | max-width: 550px;
514 | }
515 |
516 | .container > p {
517 | word-wrap: break-word;
518 | max-width: 500px;
519 | }
520 |
521 | .container > :last-child {
522 | margin-bottom: 0;
523 | }
524 |
525 | .container::before, .container::after {
526 | position: absolute;
527 | z-index: -1;
528 | content: "";
529 | }
530 |
531 | .container::before {
532 | top: 0;
533 | right: 0;
534 | bottom: 0;
535 | left: 0;
536 | }
537 |
538 | .container::after {
539 | top: 2px;
540 | right: 2px;
541 | bottom: 2px;
542 | left: 2px;
543 | border-color: #212529;
544 | border-style: solid;
545 | border-width: 4px;
546 | border-radius: 4px;
547 | }
548 |
549 | .container.is-rounded {
550 | padding: 1rem 1.5rem;
551 | margin: 14px 8px;
552 | }
553 |
554 | .container.is-rounded::after {
555 | border: none;
556 | border-radius: 0;
557 | box-shadow: 0 -4px #fff, 0 -8px #212529, 4px 0 #fff, 4px -4px #212529, 8px 0 #212529, 0 4px #fff, 0 8px #212529, -4px 0 #fff, -4px 4px #212529, -8px 0 #212529, -4px -4px #212529, 4px 4px #212529;
558 | }
559 |
560 | .container.is-rounded.is-dark::after {
561 | border: none;
562 | border-radius: 0;
563 | box-shadow: 0 -4px #212529, 0 -8px #fff, 4px 0 #212529, 4px -4px #fff, 8px 0 #fff, 0 4px #212529, 0 8px #fff, -4px 0 #212529, -4px 4px #fff, -8px 0 #fff, -4px -4px #fff, 4px 4px #fff;
564 | }
565 |
566 | .container.is-rounded.is-dark::before {
567 | top: -8px;
568 | right: -8px;
569 | bottom: -8px;
570 | left: -8px;
571 | }
572 |
573 | .container.with-title {
574 | display: flex;
575 | flex-direction: column;
576 | justify-content: flex-start;
577 | padding-top: 3rem;
578 | }
579 |
580 | .container.with-title > .title {
581 | position: absolute;
582 | top: 0;
583 | padding: 0 0.5rem;
584 | margin: 0;
585 | font-size: 1rem;
586 | background-color: #fff;
587 | }
588 |
589 | .container.with-title.is-center {
590 | align-items: center;
591 | }
592 |
593 | .container.with-title.is-right {
594 | align-items: right;
595 | }
596 |
597 | .container.is-dark::before {
598 | background-color: #212529;
599 | }
600 |
601 | .container.is-dark::after {
602 | border-color: #fff;
603 | }
604 |
605 | .container.is-dark > .title {
606 | color: #fff;
607 | background-color: #212529;
608 | }
609 |
610 | .radio {
611 | margin-right: 20px;
612 | -webkit-appearance: none;
613 | -moz-appearance: none;
614 | appearance: none;
615 | }
616 |
617 | .radio + span {
618 | position: relative;
619 | }
620 |
621 | .radio:checked + span::before {
622 | position: absolute;
623 | top: -2px;
624 | left: -20px;
625 | content: "";
626 | animation: blink 1s infinite steps(1);
627 | width: 2px;
628 | height: 2px;
629 | box-shadow: 2px 2px #212529,4px 2px #212529,2px 4px #212529,4px 4px #212529,6px 4px #212529,8px 4px #212529,2px 6px #212529,4px 6px #212529,6px 6px #212529,8px 6px #212529,10px 6px #212529,2px 8px #212529,4px 8px #212529,6px 8px #212529,8px 8px #212529,10px 8px #212529,12px 8px #212529,2px 10px #212529,4px 10px #212529,6px 10px #212529,8px 10px #212529,10px 10px #212529,2px 12px #212529,4px 12px #212529,6px 12px #212529,8px 12px #212529,2px 14px #212529,4px 14px #212529;;
630 | }
631 |
632 | .checkbox {
633 | margin-left: 28px;
634 | -webkit-appearance: none;
635 | -moz-appearance: none;
636 | appearance: none;
637 | }
638 |
639 | .checkbox + span {
640 | position: relative;
641 | }
642 |
643 | .checkbox + span::before,
644 | .checkbox:checked + span::before {
645 | position: absolute;
646 | top: -3px;
647 | left: -28px;
648 | content: "";
649 | }
650 |
651 | .checkbox + span::before {
652 | /* stylelint-disable-line no-descending-specificity */
653 | width: 2px;
654 | height: 2px;
655 | box-shadow: 2px 2px #212529,4px 2px #212529,6px 2px #212529,8px 2px #212529,10px 2px #212529,12px 2px #212529,14px 2px #212529,16px 2px #212529,2px 4px #212529,16px 4px #212529,2px 6px #212529,16px 6px #212529,2px 8px #212529,16px 8px #212529,2px 10px #212529,16px 10px #212529,2px 12px #212529,16px 12px #212529,2px 14px #212529,16px 14px #212529,2px 16px #212529,4px 16px #212529,6px 16px #212529,8px 16px #212529,10px 16px #212529,12px 16px #212529,14px 16px #212529,16px 16px #212529;;
656 | }
657 |
658 | .checkbox:checked + span::before {
659 | width: 2px;
660 | height: 2px;
661 | box-shadow: 2px 2px #212529,4px 2px #212529,6px 2px #212529,8px 2px #212529,10px 2px #212529,12px 2px #212529,14px 2px #212529,18px 2px #212529,20px 2px #212529,2px 4px #212529,16px 4px #212529,18px 4px #212529,20px 4px #212529,2px 6px #212529,14px 6px #212529,16px 6px #212529,2px 8px #212529,4px 8px #212529,12px 8px #212529,14px 8px #212529,2px 10px #212529,4px 10px #212529,6px 10px #212529,10px 10px #212529,12px 10px #212529,16px 10px #212529,2px 12px #212529,6px 12px #212529,8px 12px #212529,10px 12px #212529,16px 12px #212529,2px 14px #212529,8px 14px #212529,16px 14px #212529,2px 16px #212529,4px 16px #212529,6px 16px #212529,8px 16px #212529,10px 16px #212529,12px 16px #212529,14px 16px #212529,16px 16px #212529;;
662 | }
663 |
664 | .balloon {
665 | position: relative;
666 | display: inline-block;
667 | padding: 1rem 1.5rem;
668 | margin: 8px;
669 | margin-bottom: 30px;
670 | background-color: #fff;
671 | box-shadow: 0 -4px #fff, 0 -8px #212529, 4px 0 #fff, 4px -4px #212529, 8px 0 #212529, 0 4px #fff, 0 8px #212529, -4px 0 #fff, -4px 4px #212529, -8px 0 #212529, -4px -4px #212529, 4px 4px #212529;
672 | }
673 |
674 | .balloon > :last-child {
675 | margin-bottom: 0;
676 | }
677 |
678 | .balloon::before, .balloon::after {
679 | position: absolute;
680 | content: "";
681 | }
682 |
683 | .balloon.from-left::before, .balloon.from-left::after {
684 | left: 2rem;
685 | }
686 |
687 | .balloon.from-left::before {
688 | bottom: -14px;
689 | width: 26px;
690 | height: 10px;
691 | background-color: #fff;
692 | border-right: 4px solid #212529;
693 | border-left: 4px solid #212529;
694 | }
695 |
696 | .balloon.from-left::after {
697 | bottom: -18px;
698 | width: 18px;
699 | height: 3px;
700 | margin-right: 8px;
701 | background-color: #fff;
702 | box-shadow: -4px 0 #212529, 4px 0 #212529, -4px 4px #fff, 0 4px #212529, -8px 4px #212529, -4px 8px #212529, -8px 8px #212529;
703 | }
704 |
705 | .balloon.from-right::before, .balloon.from-right::after {
706 | right: 2rem;
707 | }
708 |
709 | .balloon.from-right::before {
710 | bottom: -14px;
711 | width: 26px;
712 | height: 10px;
713 | background-color: #fff;
714 | border-right: 4px solid #212529;
715 | border-left: 4px solid #212529;
716 | }
717 |
718 | .balloon.from-right::after {
719 | bottom: -18px;
720 | width: 18px;
721 | height: 3px;
722 | margin-left: 8px;
723 | background-color: #fff;
724 | box-shadow: -4px 0 #212529, 4px 0 #212529, 4px 4px #fff, 0 4px #212529, 8px 4px #212529, 4px 8px #212529, 8px 8px #212529;
725 | }
726 |
727 | .input {
728 | padding: 0.5rem 1rem;
729 | margin: 4px;
730 | border: none;
731 | box-shadow: 0 4px #212529, 0 -4px #212529, 4px 0 #212529, -4px 0 #212529;
732 | }
733 |
734 | .input.is-success {
735 | box-shadow: 0 4px #209cee, 0 -4px #209cee, 4px 0 #209cee, -4px 0 #209cee;
736 | }
737 |
738 | .input.is-warning {
739 | box-shadow: 0 4px #f7d51d, 0 -4px #f7d51d, 4px 0 #f7d51d, -4px 0 #f7d51d;
740 | }
741 |
742 | .input.is-error {
743 | box-shadow: 0 4px #e76e55, 0 -4px #e76e55, 4px 0 #e76e55, -4px 0 #e76e55;
744 | }
745 |
746 | .field > label {
747 | display: block;
748 | }
749 |
750 | .field .input {
751 | display: block;
752 | }
753 |
754 | .field.is-inline {
755 | display: flex;
756 | align-items: center;
757 | }
758 |
759 | .field.is-inline > label {
760 | flex-basis: 0;
761 | flex-grow: 1;
762 | margin: 0;
763 | margin-right: 1.5rem;
764 | text-align: right;
765 | }
766 |
767 | .field.is-inline .input {
768 | flex-basis: 0;
769 | flex-grow: 5;
770 | }
771 |
772 | .icon {
773 | position: relative;
774 | display: inline-block;
775 | width: 32px;
776 | height: 32px;
777 | }
778 |
779 | .icon::before {
780 | position: absolute;
781 | top: -2px;
782 | left: -2px;
783 | display: block;
784 | width: 32px;
785 | height: 32px;
786 | content: "";
787 | background: transparent;
788 | }
789 |
790 | .icon.heart::before {
791 | width: 2px;
792 | height: 2px;
793 | box-shadow: 6px 4px #444,8px 4px #444,10px 4px #444,22px 4px #444,24px 4px #444,26px 4px #444,4px 6px #444,6px 6px #f22426,8px 6px #f22426,10px 6px #f22426,12px 6px #444,20px 6px #444,22px 6px #f22426,24px 6px #f22426,26px 6px #842300,28px 6px #444,2px 8px #444,4px 8px #f22426,6px 8px #fff,8px 8px #fff,10px 8px #f22426,12px 8px #f22426,14px 8px #444,18px 8px #444,20px 8px #f22426,22px 8px #f22426,24px 8px #f22426,26px 8px #f22426,28px 8px #842300,30px 8px #444,2px 10px #444,4px 10px #f22426,6px 10px #fff,8px 10px #f22426,10px 10px #f22426,12px 10px #f22426,14px 10px #f22426,16px 10px #444,18px 10px #f22426,20px 10px #f22426,22px 10px #f22426,24px 10px #f22426,26px 10px #f22426,28px 10px #842300,30px 10px #444,2px 12px #444,4px 12px #f22426,6px 12px #f22426,8px 12px #f22426,10px 12px #f22426,12px 12px #f22426,14px 12px #f22426,16px 12px #f22426,18px 12px #f22426,20px 12px #f22426,22px 12px #f22426,24px 12px #f22426,26px 12px #f22426,28px 12px #842300,30px 12px #444,2px 14px #444,4px 14px #f22426,6px 14px #f22426,8px 14px #f22426,10px 14px #f22426,12px 14px #f22426,14px 14px #f22426,16px 14px #f22426,18px 14px #f22426,20px 14px #f22426,22px 14px #f22426,24px 14px #f22426,26px 14px #f22426,28px 14px #842300,30px 14px #444,2px 16px #444,4px 16px #f22426,6px 16px #f22426,8px 16px #f22426,10px 16px #f22426,12px 16px #f22426,14px 16px #f22426,16px 16px #f22426,18px 16px #f22426,20px 16px #f22426,22px 16px #f22426,24px 16px #f22426,26px 16px #f22426,28px 16px #842300,30px 16px #444,4px 18px #444,6px 18px #f22426,8px 18px #f22426,10px 18px #f22426,12px 18px #f22426,14px 18px #f22426,16px 18px #f22426,18px 18px #f22426,20px 18px #f22426,22px 18px #f22426,24px 18px #f22426,26px 18px #842300,28px 18px #444,6px 20px #444,8px 20px #f22426,10px 20px #f22426,12px 20px #f22426,14px 20px #f22426,16px 20px #f22426,18px 20px #f22426,20px 20px #f22426,22px 20px #f22426,24px 20px #842300,26px 20px #444,8px 22px #444,10px 22px #f22426,12px 22px #f22426,14px 22px #f22426,16px 22px #f22426,18px 22px #f22426,20px 22px #f22426,22px 22px #842300,24px 22px #444,10px 24px #444,12px 24px #f22426,14px 24px #f22426,16px 24px #f22426,18px 24px #f22426,20px 24px #842300,22px 24px #444,12px 26px #444,14px 26px #f22426,16px 26px #f22426,18px 26px #842300,20px 26px #444,14px 28px #444,16px 28px #842300,18px 28px #444,16px 30px #444;;
794 | }
795 |
796 | .icon.star::before {
797 | width: 2px;
798 | height: 2px;
799 | box-shadow: 16px 2px #444,14px 4px #444,16px 4px #ebe527,18px 4px #444,14px 6px #444,16px 6px #ebe527,18px 6px #444,12px 8px #444,14px 8px #ebe527,16px 8px #ebe527,18px 8px #ebe527,20px 8px #444,12px 10px #444,14px 10px #fff,16px 10px #fff,18px 10px #ebe527,20px 10px #444,2px 12px #444,4px 12px #444,6px 12px #444,8px 12px #444,10px 12px #444,12px 12px #444,14px 12px #fff,16px 12px #ebe527,18px 12px #ebe527,20px 12px #ebe527,22px 12px #444,24px 12px #444,26px 12px #444,28px 12px #444,30px 12px #444,2px 14px #444,4px 14px #ebe527,6px 14px #ebe527,8px 14px #ebe527,10px 14px #fff,12px 14px #fff,14px 14px #ebe527,16px 14px #ebe527,18px 14px #ebe527,20px 14px #ebe527,22px 14px #ebe527,24px 14px #ebe527,26px 14px #ebe527,28px 14px #ebe527,30px 14px #444,4px 16px #444,6px 16px #ebe527,8px 16px #ebe527,10px 16px #fff,12px 16px #ebe527,14px 16px #ebe527,16px 16px #ebe527,18px 16px #ebe527,20px 16px #ebe527,22px 16px #ebe527,24px 16px #ebe527,26px 16px #f59f54,28px 16px #444,6px 18px #444,8px 18px #ebe527,10px 18px #ebe527,12px 18px #ebe527,14px 18px #ebe527,16px 18px #ebe527,18px 18px #ebe527,20px 18px #ebe527,22px 18px #f59f54,24px 18px #f59f54,26px 18px #444,8px 20px #444,10px 20px #ebe527,12px 20px #ebe527,14px 20px #ebe527,16px 20px #ebe527,18px 20px #ebe527,20px 20px #ebe527,22px 20px #ebe527,24px 20px #444,6px 22px #444,8px 22px #ebe527,10px 22px #ebe527,12px 22px #ebe527,14px 22px #ebe527,16px 22px #f59f54,18px 22px #ebe527,20px 22px #ebe527,22px 22px #ebe527,24px 22px #ebe527,26px 22px #444,6px 24px #444,8px 24px #ebe527,10px 24px #ebe527,12px 24px #ebe527,14px 24px #f59f54,16px 24px #f59f54,18px 24px #f59f54,20px 24px #ebe527,22px 24px #ebe527,24px 24px #ebe527,26px 24px #444,4px 26px #444,6px 26px #ebe527,8px 26px #ebe527,10px 26px #f59f54,12px 26px #f59f54,14px 26px #f59f54,16px 26px #444,18px 26px #f59f54,20px 26px #f59f54,22px 26px #f59f54,24px 26px #ebe527,26px 26px #ebe527,28px 26px #444,4px 28px #444,6px 28px #ebe527,8px 28px #f59f54,10px 28px #f59f54,12px 28px #444,14px 28px #444,18px 28px #444,20px 28px #444,22px 28px #f59f54,24px 28px #f59f54,26px 28px #ebe527,28px 28px #444,2px 30px #444,4px 30px #f59f54,6px 30px #f59f54,8px 30px #444,10px 30px #444,22px 30px #444,24px 30px #444,26px 30px #f59f54,28px 30px #f59f54,30px 30px #444,2px 32px #444,4px 32px #444,6px 32px #444,26px 32px #444,28px 32px #444,30px 32px #444;;
800 | }
801 |
802 | .icon.like::before {
803 | width: 2px;
804 | height: 2px;
805 | box-shadow: 16px 4px #333,18px 4px #333,16px 6px #333,18px 6px #fff,20px 6px #333,16px 8px #333,18px 8px #fff,20px 8px #333,14px 10px #333,16px 10px #fff,18px 10px #fff,20px 10px #333,14px 12px #333,16px 12px #fff,18px 12px #fff,20px 12px #333,22px 12px #333,24px 12px #333,26px 12px #333,28px 12px #333,30px 12px #333,12px 14px #333,14px 14px #fff,16px 14px #fff,18px 14px #fff,20px 14px #fff,22px 14px #fff,24px 14px #fff,26px 14px #fff,28px 14px #fff,30px 14px #fff,32px 14px #333,4px 16px #333,6px 16px #333,8px 16px #333,12px 16px #333,14px 16px #fff,16px 16px #fff,18px 16px #fff,20px 16px #fff,22px 16px #fff,24px 16px #fff,26px 16px #fff,28px 16px #fff,30px 16px #fff,32px 16px #333,2px 18px #333,4px 18px #2e77be,6px 18px #2e77be,8px 18px #2e77be,10px 18px #333,12px 18px #fff,14px 18px #fff,16px 18px #fff,18px 18px #fff,20px 18px #fff,22px 18px #fff,24px 18px #fff,26px 18px #fff,28px 18px #fff,30px 18px #fff,32px 18px #333,2px 20px #333,4px 20px #2e77be,6px 20px #2e77be,8px 20px #2e77be,10px 20px #333,12px 20px #fff,14px 20px #fff,16px 20px #fff,18px 20px #fff,20px 20px #fff,22px 20px #fff,24px 20px #fff,26px 20px #fff,28px 20px #fff,30px 20px #333,2px 22px #333,4px 22px #2e77be,6px 22px #2e77be,8px 22px #2e77be,10px 22px #333,12px 22px #fff,14px 22px #fff,16px 22px #fff,18px 22px #fff,20px 22px #fff,22px 22px #fff,24px 22px #fff,26px 22px #fff,28px 22px #fff,30px 22px #333,2px 24px #333,4px 24px #2e77be,6px 24px #2e77be,8px 24px #2e77be,10px 24px #333,12px 24px #fff,14px 24px #fff,16px 24px #fff,18px 24px #fff,20px 24px #fff,22px 24px #fff,24px 24px #fff,26px 24px #fff,28px 24px #fff,30px 24px #333,2px 26px #333,4px 26px #2e77be,6px 26px #2e77be,8px 26px #2e77be,10px 26px #333,12px 26px #fff,14px 26px #fff,16px 26px #fff,18px 26px #fff,20px 26px #fff,22px 26px #fff,24px 26px #fff,26px 26px #fff,28px 26px #333,2px 28px #333,4px 28px #2e77be,6px 28px #2e77be,8px 28px #2e77be,10px 28px #333,12px 28px #fff,14px 28px #fff,16px 28px #fff,18px 28px #fff,20px 28px #fff,22px 28px #fff,24px 28px #fff,26px 28px #fff,28px 28px #333,4px 30px #333,6px 30px #333,8px 30px #333,12px 30px #333,14px 30px #333,16px 30px #333,18px 30px #333,20px 30px #333,22px 30px #333,24px 30px #333,26px 30px #333;;
806 | }
807 |
808 | .icon.twitter::before {
809 | width: 2px;
810 | height: 2px;
811 | box-shadow: 4px 2px #2c9ceb,6px 2px #2c9ceb,8px 2px #2c9ceb,10px 2px #2c9ceb,12px 2px #2c9ceb,14px 2px #2c9ceb,16px 2px #2c9ceb,18px 2px #2c9ceb,20px 2px #2c9ceb,22px 2px #2c9ceb,24px 2px #2c9ceb,26px 2px #2c9ceb,28px 2px #2c9ceb,30px 2px #2c9ceb,2px 4px #2c9ceb,4px 4px #2c9ceb,6px 4px #2c9ceb,8px 4px #2c9ceb,10px 4px #2c9ceb,12px 4px #2c9ceb,14px 4px #2c9ceb,16px 4px #2c9ceb,18px 4px #2c9ceb,20px 4px #2c9ceb,22px 4px #2c9ceb,24px 4px #2c9ceb,26px 4px #2c9ceb,28px 4px #2c9ceb,30px 4px #2c9ceb,32px 4px #2c9ceb,2px 6px #2c9ceb,6px 6px #2c9ceb,8px 6px #2c9ceb,10px 6px #2c9ceb,12px 6px #2c9ceb,14px 6px #2c9ceb,16px 6px #2c9ceb,18px 6px #2c9ceb,20px 6px #fff,22px 6px #fff,24px 6px #fff,26px 6px #2c9ceb,28px 6px #2c9ceb,30px 6px #2c9ceb,32px 6px #2c9ceb,2px 8px #2c9ceb,4px 8px #fff,6px 8px #fff,8px 8px #fff,10px 8px #2c9ceb,12px 8px #2c9ceb,14px 8px #2c9ceb,16px 8px #2c9ceb,18px 8px #fff,20px 8px #fff,22px 8px #fff,24px 8px #fff,26px 8px #fff,28px 8px #2c9ceb,30px 8px #2c9ceb,32px 8px #2c9ceb,2px 10px #2c9ceb,4px 10px #fff,6px 10px #fff,8px 10px #fff,10px 10px #fff,12px 10px #fff,14px 10px #2c9ceb,16px 10px #fff,18px 10px #fff,20px 10px #fff,22px 10px #fff,24px 10px #fff,26px 10px #fff,28px 10px #fff,30px 10px #fff,32px 10px #2c9ceb,2px 12px #2c9ceb,4px 12px #2c9ceb,6px 12px #fff,8px 12px #fff,10px 12px #fff,12px 12px #fff,14px 12px #fff,16px 12px #fff,18px 12px #fff,20px 12px #fff,22px 12px #fff,24px 12px #fff,26px 12px #fff,28px 12px #fff,30px 12px #2c9ceb,32px 12px #2c9ceb,2px 14px #2c9ceb,4px 14px #2c9ceb,6px 14px #fff,8px 14px #fff,10px 14px #fff,12px 14px #fff,14px 14px #fff,16px 14px #fff,18px 14px #fff,20px 14px #fff,22px 14px #fff,24px 14px #fff,26px 14px #fff,28px 14px #fff,30px 14px #2c9ceb,32px 14px #2c9ceb,2px 16px #2c9ceb,4px 16px #2c9ceb,6px 16px #2c9ceb,8px 16px #fff,10px 16px #fff,12px 16px #fff,14px 16px #fff,16px 16px #fff,18px 16px #fff,20px 16px #fff,22px 16px #fff,24px 16px #fff,26px 16px #fff,28px 16px #2c9ceb,30px 16px #2c9ceb,32px 16px #2c9ceb,2px 18px #2c9ceb,4px 18px #2c9ceb,6px 18px #2c9ceb,8px 18px #fff,10px 18px #fff,12px 18px #fff,14px 18px #fff,16px 18px #fff,18px 18px #fff,20px 18px #fff,22px 18px #fff,24px 18px #fff,26px 18px #2c9ceb,28px 18px #2c9ceb,30px 18px #2c9ceb,32px 18px #2c9ceb,2px 20px #2c9ceb,4px 20px #2c9ceb,6px 20px #2c9ceb,8px 20px #2c9ceb,10px 20px #fff,12px 20px #fff,14px 20px #fff,16px 20px #fff,18px 20px #fff,20px 20px #fff,22px 20px #fff,24px 20px #fff,26px 20px #2c9ceb,28px 20px #2c9ceb,30px 20px #2c9ceb,32px 20px #2c9ceb,2px 22px #2c9ceb,4px 22px #2c9ceb,6px 22px #2c9ceb,8px 22px #2c9ceb,10px 22px #2c9ceb,12px 22px #fff,14px 22px #fff,16px 22px #fff,18px 22px #fff,20px 22px #fff,22px 22px #fff,24px 22px #fff,26px 22px #2c9ceb,28px 22px #2c9ceb,30px 22px #2c9ceb,32px 22px #2c9ceb,2px 24px #2c9ceb,4px 24px #2c9ceb,6px 24px #2c9ceb,8px 24px #2c9ceb,10px 24px #fff,12px 24px #fff,14px 24px #fff,16px 24px #fff,18px 24px #fff,20px 24px #fff,22px 24px #fff,24px 24px #2c9ceb,26px 24px #2c9ceb,28px 24px #2c9ceb,30px 24px #2c9ceb,32px 24px #2c9ceb,2px 26px #2c9ceb,4px 26px #2c9ceb,6px 26px #fff,8px 26px #fff,10px 26px #fff,12px 26px #fff,14px 26px #fff,16px 26px #fff,18px 26px #fff,20px 26px #2c9ceb,22px 26px #2c9ceb,24px 26px #2c9ceb,26px 26px #2c9ceb,28px 26px #2c9ceb,30px 26px #2c9ceb,32px 26px #2c9ceb,2px 28px #2c9ceb,4px 28px #2c9ceb,6px 28px #2c9ceb,8px 28px #fff,10px 28px #fff,12px 28px #fff,14px 28px #2c9ceb,16px 28px #2c9ceb,18px 28px #2c9ceb,20px 28px #2c9ceb,22px 28px #2c9ceb,24px 28px #2c9ceb,26px 28px #2c9ceb,28px 28px #2c9ceb,30px 28px #2c9ceb,32px 28px #2c9ceb,2px 30px #2c9ceb,4px 30px #2c9ceb,6px 30px #2c9ceb,8px 30px #2c9ceb,10px 30px #2c9ceb,12px 30px #2c9ceb,14px 30px #2c9ceb,16px 30px #2c9ceb,18px 30px #2c9ceb,20px 30px #2c9ceb,22px 30px #2c9ceb,24px 30px #2c9ceb,26px 30px #2c9ceb,28px 30px #2c9ceb,30px 30px #2c9ceb,32px 30px #2c9ceb,4px 32px #2c9ceb,6px 32px #2c9ceb,8px 32px #2c9ceb,10px 32px #2c9ceb,12px 32px #2c9ceb,14px 32px #2c9ceb,16px 32px #2c9ceb,18px 32px #2c9ceb,20px 32px #2c9ceb,22px 32px #2c9ceb,24px 32px #2c9ceb,26px 32px #2c9ceb,28px 32px #2c9ceb,30px 32px #2c9ceb;;
812 | }
813 |
814 | .icon.facebook::before {
815 | width: 2px;
816 | height: 2px;
817 | box-shadow: 4px 2px #4566ae,6px 2px #4566ae,8px 2px #4566ae,10px 2px #4566ae,12px 2px #4566ae,14px 2px #4566ae,16px 2px #4566ae,18px 2px #4566ae,20px 2px #4566ae,22px 2px #4566ae,24px 2px #4566ae,26px 2px #4566ae,28px 2px #4566ae,30px 2px #4566ae,2px 4px #4566ae,4px 4px #4566ae,6px 4px #4566ae,8px 4px #4566ae,10px 4px #4566ae,12px 4px #4566ae,14px 4px #4566ae,16px 4px #4566ae,18px 4px #4566ae,20px 4px #4566ae,22px 4px #fff,24px 4px #fff,26px 4px #fff,28px 4px #fff,30px 4px #4566ae,32px 4px #4566ae,2px 6px #4566ae,4px 6px #4566ae,6px 6px #4566ae,8px 6px #4566ae,10px 6px #4566ae,12px 6px #4566ae,14px 6px #4566ae,16px 6px #4566ae,18px 6px #4566ae,20px 6px #fff,22px 6px #fff,24px 6px #fff,26px 6px #fff,28px 6px #fff,30px 6px #4566ae,32px 6px #4566ae,2px 8px #4566ae,4px 8px #4566ae,6px 8px #4566ae,8px 8px #4566ae,10px 8px #4566ae,12px 8px #4566ae,14px 8px #4566ae,16px 8px #4566ae,18px 8px #fff,20px 8px #fff,22px 8px #fff,24px 8px #fff,26px 8px #fff,28px 8px #fff,30px 8px #4566ae,32px 8px #4566ae,2px 10px #4566ae,4px 10px #4566ae,6px 10px #4566ae,8px 10px #4566ae,10px 10px #4566ae,12px 10px #4566ae,14px 10px #4566ae,16px 10px #4566ae,18px 10px #fff,20px 10px #fff,22px 10px #fff,24px 10px #4566ae,26px 10px #4566ae,28px 10px #4566ae,30px 10px #4566ae,32px 10px #4566ae,2px 12px #4566ae,4px 12px #4566ae,6px 12px #4566ae,8px 12px #4566ae,10px 12px #4566ae,12px 12px #4566ae,14px 12px #4566ae,16px 12px #4566ae,18px 12px #fff,20px 12px #fff,22px 12px #fff,24px 12px #4566ae,26px 12px #4566ae,28px 12px #4566ae,30px 12px #4566ae,32px 12px #4566ae,2px 14px #4566ae,4px 14px #4566ae,6px 14px #4566ae,8px 14px #4566ae,10px 14px #4566ae,12px 14px #4566ae,14px 14px #4566ae,16px 14px #4566ae,18px 14px #fff,20px 14px #fff,22px 14px #fff,24px 14px #4566ae,26px 14px #4566ae,28px 14px #4566ae,30px 14px #4566ae,32px 14px #4566ae,2px 16px #4566ae,4px 16px #4566ae,6px 16px #4566ae,8px 16px #4566ae,10px 16px #4566ae,12px 16px #fff,14px 16px #fff,16px 16px #fff,18px 16px #fff,20px 16px #fff,22px 16px #fff,24px 16px #fff,26px 16px #fff,28px 16px #fff,30px 16px #4566ae,32px 16px #4566ae,2px 18px #4566ae,4px 18px #4566ae,6px 18px #4566ae,8px 18px #4566ae,10px 18px #4566ae,12px 18px #fff,14px 18px #fff,16px 18px #fff,18px 18px #fff,20px 18px #fff,22px 18px #fff,24px 18px #fff,26px 18px #fff,28px 18px #fff,30px 18px #4566ae,32px 18px #4566ae,2px 20px #4566ae,4px 20px #4566ae,6px 20px #4566ae,8px 20px #4566ae,10px 20px #4566ae,12px 20px #fff,14px 20px #fff,16px 20px #fff,18px 20px #fff,20px 20px #fff,22px 20px #fff,24px 20px #fff,26px 20px #fff,28px 20px #fff,30px 20px #4566ae,32px 20px #4566ae,2px 22px #4566ae,4px 22px #4566ae,6px 22px #4566ae,8px 22px #4566ae,10px 22px #4566ae,12px 22px #4566ae,14px 22px #4566ae,16px 22px #4566ae,18px 22px #fff,20px 22px #fff,22px 22px #fff,24px 22px #4566ae,26px 22px #4566ae,28px 22px #4566ae,30px 22px #4566ae,32px 22px #4566ae,2px 24px #4566ae,4px 24px #4566ae,6px 24px #4566ae,8px 24px #4566ae,10px 24px #4566ae,12px 24px #4566ae,14px 24px #4566ae,16px 24px #4566ae,18px 24px #fff,20px 24px #fff,22px 24px #fff,24px 24px #4566ae,26px 24px #4566ae,28px 24px #4566ae,30px 24px #4566ae,32px 24px #4566ae,2px 26px #4566ae,4px 26px #4566ae,6px 26px #4566ae,8px 26px #4566ae,10px 26px #4566ae,12px 26px #4566ae,14px 26px #4566ae,16px 26px #4566ae,18px 26px #fff,20px 26px #fff,22px 26px #fff,24px 26px #4566ae,26px 26px #4566ae,28px 26px #4566ae,30px 26px #4566ae,32px 26px #4566ae,2px 28px #4566ae,4px 28px #4566ae,6px 28px #4566ae,8px 28px #4566ae,10px 28px #4566ae,12px 28px #4566ae,14px 28px #4566ae,16px 28px #4566ae,18px 28px #fff,20px 28px #fff,22px 28px #fff,24px 28px #4566ae,26px 28px #4566ae,28px 28px #4566ae,30px 28px #4566ae,32px 28px #4566ae,2px 30px #4566ae,4px 30px #4566ae,6px 30px #4566ae,8px 30px #4566ae,10px 30px #4566ae,12px 30px #4566ae,14px 30px #4566ae,16px 30px #4566ae,18px 30px #fff,20px 30px #fff,22px 30px #fff,24px 30px #4566ae,26px 30px #4566ae,28px 30px #4566ae,30px 30px #4566ae,32px 30px #4566ae,4px 32px #4566ae,6px 32px #4566ae,8px 32px #4566ae,10px 32px #4566ae,12px 32px #4566ae,14px 32px #4566ae,16px 32px #4566ae,18px 32px #fff,20px 32px #fff,22px 32px #fff,24px 32px #4566ae,26px 32px #4566ae,28px 32px #4566ae,30px 32px #4566ae;;
818 | }
819 |
820 | .icon.github::before {
821 | width: 2px;
822 | height: 2px;
823 | box-shadow: 4px 2px #333,6px 2px #333,8px 2px #333,10px 2px #333,12px 2px #333,14px 2px #333,16px 2px #333,18px 2px #333,20px 2px #333,22px 2px #333,24px 2px #333,26px 2px #333,28px 2px #333,30px 2px #333,2px 4px #333,4px 4px #333,6px 4px #333,8px 4px #333,10px 4px #fff,12px 4px #333,14px 4px #333,16px 4px #333,18px 4px #333,20px 4px #333,22px 4px #333,24px 4px #333,26px 4px #333,28px 4px #fff,30px 4px #333,32px 4px #333,2px 6px #333,4px 6px #333,6px 6px #333,8px 6px #333,10px 6px #fff,12px 6px #fff,14px 6px #333,16px 6px #333,18px 6px #333,20px 6px #333,22px 6px #333,24px 6px #333,26px 6px #fff,28px 6px #fff,30px 6px #333,32px 6px #333,2px 8px #333,4px 8px #333,6px 8px #333,8px 8px #333,10px 8px #fff,12px 8px #fff,14px 8px #fff,16px 8px #fff,18px 8px #fff,20px 8px #fff,22px 8px #fff,24px 8px #fff,26px 8px #fff,28px 8px #fff,30px 8px #333,32px 8px #333,2px 10px #333,4px 10px #333,6px 10px #333,8px 10px #fff,10px 10px #fff,12px 10px #fff,14px 10px #fff,16px 10px #fff,18px 10px #fff,20px 10px #fff,22px 10px #fff,24px 10px #fff,26px 10px #fff,28px 10px #fff,30px 10px #fff,32px 10px #333,2px 12px #333,4px 12px #333,6px 12px #333,8px 12px #fff,10px 12px #fff,12px 12px #fff,14px 12px #fff,16px 12px #fff,18px 12px #fff,20px 12px #fff,22px 12px #fff,24px 12px #fff,26px 12px #fff,28px 12px #fff,30px 12px #fff,32px 12px #333,2px 14px #333,4px 14px #333,6px 14px #333,8px 14px #fff,10px 14px #fff,12px 14px #fff,14px 14px #fff,16px 14px #fff,18px 14px #fff,20px 14px #fff,22px 14px #fff,24px 14px #fff,26px 14px #fff,28px 14px #fff,30px 14px #fff,32px 14px #333,2px 16px #333,4px 16px #333,6px 16px #333,8px 16px #fff,10px 16px #fff,12px 16px #fff,14px 16px #fff,16px 16px #fff,18px 16px #fff,20px 16px #fff,22px 16px #fff,24px 16px #fff,26px 16px #fff,28px 16px #fff,30px 16px #fff,32px 16px #333,2px 18px #333,4px 18px #333,6px 18px #333,8px 18px #333,10px 18px #fff,12px 18px #fff,14px 18px #fff,16px 18px #fff,18px 18px #fff,20px 18px #fff,22px 18px #fff,24px 18px #fff,26px 18px #fff,28px 18px #fff,30px 18px #333,32px 18px #333,2px 20px #333,4px 20px #333,6px 20px #333,8px 20px #333,10px 20px #333,12px 20px #fff,14px 20px #fff,16px 20px #fff,18px 20px #fff,20px 20px #fff,22px 20px #fff,24px 20px #fff,26px 20px #fff,28px 20px #333,30px 20px #333,32px 20px #333,2px 22px #333,4px 22px #fff,6px 22px #fff,8px 22px #333,10px 22px #333,12px 22px #333,14px 22px #333,16px 22px #fff,18px 22px #fff,20px 22px #fff,22px 22px #fff,24px 22px #333,26px 22px #333,28px 22px #333,30px 22px #333,32px 22px #333,2px 24px #333,4px 24px #333,6px 24px #333,8px 24px #fff,10px 24px #333,12px 24px #333,14px 24px #fff,16px 24px #fff,18px 24px #fff,20px 24px #fff,22px 24px #fff,24px 24px #fff,26px 24px #333,28px 24px #333,30px 24px #333,32px 24px #333,2px 26px #333,4px 26px #333,6px 26px #333,8px 26px #333,10px 26px #fff,12px 26px #fff,14px 26px #fff,16px 26px #fff,18px 26px #fff,20px 26px #fff,22px 26px #fff,24px 26px #fff,26px 26px #333,28px 26px #333,30px 26px #333,32px 26px #333,2px 28px #333,4px 28px #333,6px 28px #333,8px 28px #333,10px 28px #333,12px 28px #333,14px 28px #fff,16px 28px #fff,18px 28px #fff,20px 28px #fff,22px 28px #fff,24px 28px #fff,26px 28px #333,28px 28px #333,30px 28px #333,32px 28px #333,2px 30px #333,4px 30px #333,6px 30px #333,8px 30px #333,10px 30px #333,12px 30px #333,14px 30px #fff,16px 30px #fff,18px 30px #fff,20px 30px #fff,22px 30px #fff,24px 30px #fff,26px 30px #333,28px 30px #333,30px 30px #333,32px 30px #333,4px 32px #333,6px 32px #333,8px 32px #333,10px 32px #333,12px 32px #333,14px 32px #333,16px 32px #333,18px 32px #333,20px 32px #333,22px 32px #333,24px 32px #333,26px 32px #333,28px 32px #333,30px 32px #333;;
824 | }
825 |
826 | .icon.close::before {
827 | width: 2px;
828 | height: 2px;
829 | text-align: right;
830 | box-shadow: 2px 2px #212529,4px 2px #212529,6px 2px #212529,8px 2px #212529,26px 2px #212529,28px 2px #212529,30px 2px #212529,32px 2px #212529,2px 4px #212529,4px 4px #212529,6px 4px #212529,8px 4px #212529,26px 4px #212529,28px 4px #212529,30px 4px #212529,32px 4px #212529,2px 6px #212529,4px 6px #212529,6px 6px #212529,8px 6px #212529,26px 6px #212529,28px 6px #212529,30px 6px #212529,32px 6px #212529,2px 8px #212529,4px 8px #212529,6px 8px #212529,8px 8px #212529,10px 8px #212529,12px 8px #212529,14px 8px #212529,20px 8px #212529,22px 8px #212529,24px 8px #212529,26px 8px #212529,28px 8px #212529,30px 8px #212529,32px 8px #212529,8px 10px #212529,10px 10px #212529,12px 10px #212529,14px 10px #212529,20px 10px #212529,22px 10px #212529,24px 10px #212529,26px 10px #212529,8px 12px #212529,10px 12px #212529,12px 12px #212529,14px 12px #212529,20px 12px #212529,22px 12px #212529,24px 12px #212529,26px 12px #212529,8px 14px #212529,10px 14px #212529,12px 14px #212529,14px 14px #212529,16px 14px #212529,18px 14px #212529,20px 14px #212529,22px 14px #212529,24px 14px #212529,26px 14px #212529,14px 16px #212529,16px 16px #212529,18px 16px #212529,20px 16px #212529,14px 18px #212529,16px 18px #212529,18px 18px #212529,20px 18px #212529,8px 20px #212529,10px 20px #212529,12px 20px #212529,14px 20px #212529,16px 20px #212529,18px 20px #212529,20px 20px #212529,22px 20px #212529,24px 20px #212529,26px 20px #212529,8px 22px #212529,10px 22px #212529,12px 22px #212529,14px 22px #212529,20px 22px #212529,22px 22px #212529,24px 22px #212529,26px 22px #212529,8px 24px #212529,10px 24px #212529,12px 24px #212529,14px 24px #212529,20px 24px #212529,22px 24px #212529,24px 24px #212529,26px 24px #212529,2px 26px #212529,4px 26px #212529,6px 26px #212529,8px 26px #212529,10px 26px #212529,12px 26px #212529,14px 26px #212529,20px 26px #212529,22px 26px #212529,24px 26px #212529,26px 26px #212529,28px 26px #212529,30px 26px #212529,32px 26px #212529,2px 28px #212529,4px 28px #212529,6px 28px #212529,8px 28px #212529,26px 28px #212529,28px 28px #212529,30px 28px #212529,32px 28px #212529,2px 30px #212529,4px 30px #212529,6px 30px #212529,8px 30px #212529,26px 30px #212529,28px 30px #212529,30px 30px #212529,32px 30px #212529,2px 32px #212529,4px 32px #212529,6px 32px #212529,8px 32px #212529,26px 32px #212529,28px 32px #212529,30px 32px #212529,32px 32px #212529;;
831 | cursor: url(https://unpkg.com/nes.css/assets/cursor-click.png),pointer;
832 | }
833 |
834 | .icon.is-medium {
835 | width: 48px;
836 | height: 48px;
837 | }
838 |
839 | .icon.is-medium::before {
840 | position: absolute;
841 | top: -3px;
842 | left: -3px;
843 | display: block;
844 | width: 48px;
845 | height: 48px;
846 | content: "";
847 | background: transparent;
848 | }
849 |
850 | .icon.is-medium.heart::before {
851 | width: 3px;
852 | height: 3px;
853 | box-shadow: 9px 6px #444,12px 6px #444,15px 6px #444,33px 6px #444,36px 6px #444,39px 6px #444,6px 9px #444,9px 9px #f22426,12px 9px #f22426,15px 9px #f22426,18px 9px #444,30px 9px #444,33px 9px #f22426,36px 9px #f22426,39px 9px #842300,42px 9px #444,3px 12px #444,6px 12px #f22426,9px 12px #fff,12px 12px #fff,15px 12px #f22426,18px 12px #f22426,21px 12px #444,27px 12px #444,30px 12px #f22426,33px 12px #f22426,36px 12px #f22426,39px 12px #f22426,42px 12px #842300,45px 12px #444,3px 15px #444,6px 15px #f22426,9px 15px #fff,12px 15px #f22426,15px 15px #f22426,18px 15px #f22426,21px 15px #f22426,24px 15px #444,27px 15px #f22426,30px 15px #f22426,33px 15px #f22426,36px 15px #f22426,39px 15px #f22426,42px 15px #842300,45px 15px #444,3px 18px #444,6px 18px #f22426,9px 18px #f22426,12px 18px #f22426,15px 18px #f22426,18px 18px #f22426,21px 18px #f22426,24px 18px #f22426,27px 18px #f22426,30px 18px #f22426,33px 18px #f22426,36px 18px #f22426,39px 18px #f22426,42px 18px #842300,45px 18px #444,3px 21px #444,6px 21px #f22426,9px 21px #f22426,12px 21px #f22426,15px 21px #f22426,18px 21px #f22426,21px 21px #f22426,24px 21px #f22426,27px 21px #f22426,30px 21px #f22426,33px 21px #f22426,36px 21px #f22426,39px 21px #f22426,42px 21px #842300,45px 21px #444,3px 24px #444,6px 24px #f22426,9px 24px #f22426,12px 24px #f22426,15px 24px #f22426,18px 24px #f22426,21px 24px #f22426,24px 24px #f22426,27px 24px #f22426,30px 24px #f22426,33px 24px #f22426,36px 24px #f22426,39px 24px #f22426,42px 24px #842300,45px 24px #444,6px 27px #444,9px 27px #f22426,12px 27px #f22426,15px 27px #f22426,18px 27px #f22426,21px 27px #f22426,24px 27px #f22426,27px 27px #f22426,30px 27px #f22426,33px 27px #f22426,36px 27px #f22426,39px 27px #842300,42px 27px #444,9px 30px #444,12px 30px #f22426,15px 30px #f22426,18px 30px #f22426,21px 30px #f22426,24px 30px #f22426,27px 30px #f22426,30px 30px #f22426,33px 30px #f22426,36px 30px #842300,39px 30px #444,12px 33px #444,15px 33px #f22426,18px 33px #f22426,21px 33px #f22426,24px 33px #f22426,27px 33px #f22426,30px 33px #f22426,33px 33px #842300,36px 33px #444,15px 36px #444,18px 36px #f22426,21px 36px #f22426,24px 36px #f22426,27px 36px #f22426,30px 36px #842300,33px 36px #444,18px 39px #444,21px 39px #f22426,24px 39px #f22426,27px 39px #842300,30px 39px #444,21px 42px #444,24px 42px #842300,27px 42px #444,24px 45px #444;;
854 | }
855 |
856 | .icon.is-medium.star::before {
857 | width: 3px;
858 | height: 3px;
859 | box-shadow: 24px 3px #444,21px 6px #444,24px 6px #ebe527,27px 6px #444,21px 9px #444,24px 9px #ebe527,27px 9px #444,18px 12px #444,21px 12px #ebe527,24px 12px #ebe527,27px 12px #ebe527,30px 12px #444,18px 15px #444,21px 15px #fff,24px 15px #fff,27px 15px #ebe527,30px 15px #444,3px 18px #444,6px 18px #444,9px 18px #444,12px 18px #444,15px 18px #444,18px 18px #444,21px 18px #fff,24px 18px #ebe527,27px 18px #ebe527,30px 18px #ebe527,33px 18px #444,36px 18px #444,39px 18px #444,42px 18px #444,45px 18px #444,3px 21px #444,6px 21px #ebe527,9px 21px #ebe527,12px 21px #ebe527,15px 21px #fff,18px 21px #fff,21px 21px #ebe527,24px 21px #ebe527,27px 21px #ebe527,30px 21px #ebe527,33px 21px #ebe527,36px 21px #ebe527,39px 21px #ebe527,42px 21px #ebe527,45px 21px #444,6px 24px #444,9px 24px #ebe527,12px 24px #ebe527,15px 24px #fff,18px 24px #ebe527,21px 24px #ebe527,24px 24px #ebe527,27px 24px #ebe527,30px 24px #ebe527,33px 24px #ebe527,36px 24px #ebe527,39px 24px #f59f54,42px 24px #444,9px 27px #444,12px 27px #ebe527,15px 27px #ebe527,18px 27px #ebe527,21px 27px #ebe527,24px 27px #ebe527,27px 27px #ebe527,30px 27px #ebe527,33px 27px #f59f54,36px 27px #f59f54,39px 27px #444,12px 30px #444,15px 30px #ebe527,18px 30px #ebe527,21px 30px #ebe527,24px 30px #ebe527,27px 30px #ebe527,30px 30px #ebe527,33px 30px #ebe527,36px 30px #444,9px 33px #444,12px 33px #ebe527,15px 33px #ebe527,18px 33px #ebe527,21px 33px #ebe527,24px 33px #f59f54,27px 33px #ebe527,30px 33px #ebe527,33px 33px #ebe527,36px 33px #ebe527,39px 33px #444,9px 36px #444,12px 36px #ebe527,15px 36px #ebe527,18px 36px #ebe527,21px 36px #f59f54,24px 36px #f59f54,27px 36px #f59f54,30px 36px #ebe527,33px 36px #ebe527,36px 36px #ebe527,39px 36px #444,6px 39px #444,9px 39px #ebe527,12px 39px #ebe527,15px 39px #f59f54,18px 39px #f59f54,21px 39px #f59f54,24px 39px #444,27px 39px #f59f54,30px 39px #f59f54,33px 39px #f59f54,36px 39px #ebe527,39px 39px #ebe527,42px 39px #444,6px 42px #444,9px 42px #ebe527,12px 42px #f59f54,15px 42px #f59f54,18px 42px #444,21px 42px #444,27px 42px #444,30px 42px #444,33px 42px #f59f54,36px 42px #f59f54,39px 42px #ebe527,42px 42px #444,3px 45px #444,6px 45px #f59f54,9px 45px #f59f54,12px 45px #444,15px 45px #444,33px 45px #444,36px 45px #444,39px 45px #f59f54,42px 45px #f59f54,45px 45px #444,3px 48px #444,6px 48px #444,9px 48px #444,39px 48px #444,42px 48px #444,45px 48px #444;;
860 | }
861 |
862 | .icon.is-medium.like::before {
863 | width: 3px;
864 | height: 3px;
865 | box-shadow: 24px 6px #333,27px 6px #333,24px 9px #333,27px 9px #fff,30px 9px #333,24px 12px #333,27px 12px #fff,30px 12px #333,21px 15px #333,24px 15px #fff,27px 15px #fff,30px 15px #333,21px 18px #333,24px 18px #fff,27px 18px #fff,30px 18px #333,33px 18px #333,36px 18px #333,39px 18px #333,42px 18px #333,45px 18px #333,18px 21px #333,21px 21px #fff,24px 21px #fff,27px 21px #fff,30px 21px #fff,33px 21px #fff,36px 21px #fff,39px 21px #fff,42px 21px #fff,45px 21px #fff,48px 21px #333,6px 24px #333,9px 24px #333,12px 24px #333,18px 24px #333,21px 24px #fff,24px 24px #fff,27px 24px #fff,30px 24px #fff,33px 24px #fff,36px 24px #fff,39px 24px #fff,42px 24px #fff,45px 24px #fff,48px 24px #333,3px 27px #333,6px 27px #2e77be,9px 27px #2e77be,12px 27px #2e77be,15px 27px #333,18px 27px #fff,21px 27px #fff,24px 27px #fff,27px 27px #fff,30px 27px #fff,33px 27px #fff,36px 27px #fff,39px 27px #fff,42px 27px #fff,45px 27px #fff,48px 27px #333,3px 30px #333,6px 30px #2e77be,9px 30px #2e77be,12px 30px #2e77be,15px 30px #333,18px 30px #fff,21px 30px #fff,24px 30px #fff,27px 30px #fff,30px 30px #fff,33px 30px #fff,36px 30px #fff,39px 30px #fff,42px 30px #fff,45px 30px #333,3px 33px #333,6px 33px #2e77be,9px 33px #2e77be,12px 33px #2e77be,15px 33px #333,18px 33px #fff,21px 33px #fff,24px 33px #fff,27px 33px #fff,30px 33px #fff,33px 33px #fff,36px 33px #fff,39px 33px #fff,42px 33px #fff,45px 33px #333,3px 36px #333,6px 36px #2e77be,9px 36px #2e77be,12px 36px #2e77be,15px 36px #333,18px 36px #fff,21px 36px #fff,24px 36px #fff,27px 36px #fff,30px 36px #fff,33px 36px #fff,36px 36px #fff,39px 36px #fff,42px 36px #fff,45px 36px #333,3px 39px #333,6px 39px #2e77be,9px 39px #2e77be,12px 39px #2e77be,15px 39px #333,18px 39px #fff,21px 39px #fff,24px 39px #fff,27px 39px #fff,30px 39px #fff,33px 39px #fff,36px 39px #fff,39px 39px #fff,42px 39px #333,3px 42px #333,6px 42px #2e77be,9px 42px #2e77be,12px 42px #2e77be,15px 42px #333,18px 42px #fff,21px 42px #fff,24px 42px #fff,27px 42px #fff,30px 42px #fff,33px 42px #fff,36px 42px #fff,39px 42px #fff,42px 42px #333,6px 45px #333,9px 45px #333,12px 45px #333,18px 45px #333,21px 45px #333,24px 45px #333,27px 45px #333,30px 45px #333,33px 45px #333,36px 45px #333,39px 45px #333;;
866 | }
867 |
868 | .icon.is-medium.twitter::before {
869 | width: 3px;
870 | height: 3px;
871 | box-shadow: 6px 3px #2c9ceb,9px 3px #2c9ceb,12px 3px #2c9ceb,15px 3px #2c9ceb,18px 3px #2c9ceb,21px 3px #2c9ceb,24px 3px #2c9ceb,27px 3px #2c9ceb,30px 3px #2c9ceb,33px 3px #2c9ceb,36px 3px #2c9ceb,39px 3px #2c9ceb,42px 3px #2c9ceb,45px 3px #2c9ceb,3px 6px #2c9ceb,6px 6px #2c9ceb,9px 6px #2c9ceb,12px 6px #2c9ceb,15px 6px #2c9ceb,18px 6px #2c9ceb,21px 6px #2c9ceb,24px 6px #2c9ceb,27px 6px #2c9ceb,30px 6px #2c9ceb,33px 6px #2c9ceb,36px 6px #2c9ceb,39px 6px #2c9ceb,42px 6px #2c9ceb,45px 6px #2c9ceb,48px 6px #2c9ceb,3px 9px #2c9ceb,9px 9px #2c9ceb,12px 9px #2c9ceb,15px 9px #2c9ceb,18px 9px #2c9ceb,21px 9px #2c9ceb,24px 9px #2c9ceb,27px 9px #2c9ceb,30px 9px #fff,33px 9px #fff,36px 9px #fff,39px 9px #2c9ceb,42px 9px #2c9ceb,45px 9px #2c9ceb,48px 9px #2c9ceb,3px 12px #2c9ceb,6px 12px #fff,9px 12px #fff,12px 12px #fff,15px 12px #2c9ceb,18px 12px #2c9ceb,21px 12px #2c9ceb,24px 12px #2c9ceb,27px 12px #fff,30px 12px #fff,33px 12px #fff,36px 12px #fff,39px 12px #fff,42px 12px #2c9ceb,45px 12px #2c9ceb,48px 12px #2c9ceb,3px 15px #2c9ceb,6px 15px #fff,9px 15px #fff,12px 15px #fff,15px 15px #fff,18px 15px #fff,21px 15px #2c9ceb,24px 15px #fff,27px 15px #fff,30px 15px #fff,33px 15px #fff,36px 15px #fff,39px 15px #fff,42px 15px #fff,45px 15px #fff,48px 15px #2c9ceb,3px 18px #2c9ceb,6px 18px #2c9ceb,9px 18px #fff,12px 18px #fff,15px 18px #fff,18px 18px #fff,21px 18px #fff,24px 18px #fff,27px 18px #fff,30px 18px #fff,33px 18px #fff,36px 18px #fff,39px 18px #fff,42px 18px #fff,45px 18px #2c9ceb,48px 18px #2c9ceb,3px 21px #2c9ceb,6px 21px #2c9ceb,9px 21px #fff,12px 21px #fff,15px 21px #fff,18px 21px #fff,21px 21px #fff,24px 21px #fff,27px 21px #fff,30px 21px #fff,33px 21px #fff,36px 21px #fff,39px 21px #fff,42px 21px #fff,45px 21px #2c9ceb,48px 21px #2c9ceb,3px 24px #2c9ceb,6px 24px #2c9ceb,9px 24px #2c9ceb,12px 24px #fff,15px 24px #fff,18px 24px #fff,21px 24px #fff,24px 24px #fff,27px 24px #fff,30px 24px #fff,33px 24px #fff,36px 24px #fff,39px 24px #fff,42px 24px #2c9ceb,45px 24px #2c9ceb,48px 24px #2c9ceb,3px 27px #2c9ceb,6px 27px #2c9ceb,9px 27px #2c9ceb,12px 27px #fff,15px 27px #fff,18px 27px #fff,21px 27px #fff,24px 27px #fff,27px 27px #fff,30px 27px #fff,33px 27px #fff,36px 27px #fff,39px 27px #2c9ceb,42px 27px #2c9ceb,45px 27px #2c9ceb,48px 27px #2c9ceb,3px 30px #2c9ceb,6px 30px #2c9ceb,9px 30px #2c9ceb,12px 30px #2c9ceb,15px 30px #fff,18px 30px #fff,21px 30px #fff,24px 30px #fff,27px 30px #fff,30px 30px #fff,33px 30px #fff,36px 30px #fff,39px 30px #2c9ceb,42px 30px #2c9ceb,45px 30px #2c9ceb,48px 30px #2c9ceb,3px 33px #2c9ceb,6px 33px #2c9ceb,9px 33px #2c9ceb,12px 33px #2c9ceb,15px 33px #2c9ceb,18px 33px #fff,21px 33px #fff,24px 33px #fff,27px 33px #fff,30px 33px #fff,33px 33px #fff,36px 33px #fff,39px 33px #2c9ceb,42px 33px #2c9ceb,45px 33px #2c9ceb,48px 33px #2c9ceb,3px 36px #2c9ceb,6px 36px #2c9ceb,9px 36px #2c9ceb,12px 36px #2c9ceb,15px 36px #fff,18px 36px #fff,21px 36px #fff,24px 36px #fff,27px 36px #fff,30px 36px #fff,33px 36px #fff,36px 36px #2c9ceb,39px 36px #2c9ceb,42px 36px #2c9ceb,45px 36px #2c9ceb,48px 36px #2c9ceb,3px 39px #2c9ceb,6px 39px #2c9ceb,9px 39px #fff,12px 39px #fff,15px 39px #fff,18px 39px #fff,21px 39px #fff,24px 39px #fff,27px 39px #fff,30px 39px #2c9ceb,33px 39px #2c9ceb,36px 39px #2c9ceb,39px 39px #2c9ceb,42px 39px #2c9ceb,45px 39px #2c9ceb,48px 39px #2c9ceb,3px 42px #2c9ceb,6px 42px #2c9ceb,9px 42px #2c9ceb,12px 42px #fff,15px 42px #fff,18px 42px #fff,21px 42px #2c9ceb,24px 42px #2c9ceb,27px 42px #2c9ceb,30px 42px #2c9ceb,33px 42px #2c9ceb,36px 42px #2c9ceb,39px 42px #2c9ceb,42px 42px #2c9ceb,45px 42px #2c9ceb,48px 42px #2c9ceb,3px 45px #2c9ceb,6px 45px #2c9ceb,9px 45px #2c9ceb,12px 45px #2c9ceb,15px 45px #2c9ceb,18px 45px #2c9ceb,21px 45px #2c9ceb,24px 45px #2c9ceb,27px 45px #2c9ceb,30px 45px #2c9ceb,33px 45px #2c9ceb,36px 45px #2c9ceb,39px 45px #2c9ceb,42px 45px #2c9ceb,45px 45px #2c9ceb,48px 45px #2c9ceb,6px 48px #2c9ceb,9px 48px #2c9ceb,12px 48px #2c9ceb,15px 48px #2c9ceb,18px 48px #2c9ceb,21px 48px #2c9ceb,24px 48px #2c9ceb,27px 48px #2c9ceb,30px 48px #2c9ceb,33px 48px #2c9ceb,36px 48px #2c9ceb,39px 48px #2c9ceb,42px 48px #2c9ceb,45px 48px #2c9ceb;;
872 | }
873 |
874 | .icon.is-medium.facebook::before {
875 | width: 3px;
876 | height: 3px;
877 | box-shadow: 6px 3px #4566ae,9px 3px #4566ae,12px 3px #4566ae,15px 3px #4566ae,18px 3px #4566ae,21px 3px #4566ae,24px 3px #4566ae,27px 3px #4566ae,30px 3px #4566ae,33px 3px #4566ae,36px 3px #4566ae,39px 3px #4566ae,42px 3px #4566ae,45px 3px #4566ae,3px 6px #4566ae,6px 6px #4566ae,9px 6px #4566ae,12px 6px #4566ae,15px 6px #4566ae,18px 6px #4566ae,21px 6px #4566ae,24px 6px #4566ae,27px 6px #4566ae,30px 6px #4566ae,33px 6px #fff,36px 6px #fff,39px 6px #fff,42px 6px #fff,45px 6px #4566ae,48px 6px #4566ae,3px 9px #4566ae,6px 9px #4566ae,9px 9px #4566ae,12px 9px #4566ae,15px 9px #4566ae,18px 9px #4566ae,21px 9px #4566ae,24px 9px #4566ae,27px 9px #4566ae,30px 9px #fff,33px 9px #fff,36px 9px #fff,39px 9px #fff,42px 9px #fff,45px 9px #4566ae,48px 9px #4566ae,3px 12px #4566ae,6px 12px #4566ae,9px 12px #4566ae,12px 12px #4566ae,15px 12px #4566ae,18px 12px #4566ae,21px 12px #4566ae,24px 12px #4566ae,27px 12px #fff,30px 12px #fff,33px 12px #fff,36px 12px #fff,39px 12px #fff,42px 12px #fff,45px 12px #4566ae,48px 12px #4566ae,3px 15px #4566ae,6px 15px #4566ae,9px 15px #4566ae,12px 15px #4566ae,15px 15px #4566ae,18px 15px #4566ae,21px 15px #4566ae,24px 15px #4566ae,27px 15px #fff,30px 15px #fff,33px 15px #fff,36px 15px #4566ae,39px 15px #4566ae,42px 15px #4566ae,45px 15px #4566ae,48px 15px #4566ae,3px 18px #4566ae,6px 18px #4566ae,9px 18px #4566ae,12px 18px #4566ae,15px 18px #4566ae,18px 18px #4566ae,21px 18px #4566ae,24px 18px #4566ae,27px 18px #fff,30px 18px #fff,33px 18px #fff,36px 18px #4566ae,39px 18px #4566ae,42px 18px #4566ae,45px 18px #4566ae,48px 18px #4566ae,3px 21px #4566ae,6px 21px #4566ae,9px 21px #4566ae,12px 21px #4566ae,15px 21px #4566ae,18px 21px #4566ae,21px 21px #4566ae,24px 21px #4566ae,27px 21px #fff,30px 21px #fff,33px 21px #fff,36px 21px #4566ae,39px 21px #4566ae,42px 21px #4566ae,45px 21px #4566ae,48px 21px #4566ae,3px 24px #4566ae,6px 24px #4566ae,9px 24px #4566ae,12px 24px #4566ae,15px 24px #4566ae,18px 24px #fff,21px 24px #fff,24px 24px #fff,27px 24px #fff,30px 24px #fff,33px 24px #fff,36px 24px #fff,39px 24px #fff,42px 24px #fff,45px 24px #4566ae,48px 24px #4566ae,3px 27px #4566ae,6px 27px #4566ae,9px 27px #4566ae,12px 27px #4566ae,15px 27px #4566ae,18px 27px #fff,21px 27px #fff,24px 27px #fff,27px 27px #fff,30px 27px #fff,33px 27px #fff,36px 27px #fff,39px 27px #fff,42px 27px #fff,45px 27px #4566ae,48px 27px #4566ae,3px 30px #4566ae,6px 30px #4566ae,9px 30px #4566ae,12px 30px #4566ae,15px 30px #4566ae,18px 30px #fff,21px 30px #fff,24px 30px #fff,27px 30px #fff,30px 30px #fff,33px 30px #fff,36px 30px #fff,39px 30px #fff,42px 30px #fff,45px 30px #4566ae,48px 30px #4566ae,3px 33px #4566ae,6px 33px #4566ae,9px 33px #4566ae,12px 33px #4566ae,15px 33px #4566ae,18px 33px #4566ae,21px 33px #4566ae,24px 33px #4566ae,27px 33px #fff,30px 33px #fff,33px 33px #fff,36px 33px #4566ae,39px 33px #4566ae,42px 33px #4566ae,45px 33px #4566ae,48px 33px #4566ae,3px 36px #4566ae,6px 36px #4566ae,9px 36px #4566ae,12px 36px #4566ae,15px 36px #4566ae,18px 36px #4566ae,21px 36px #4566ae,24px 36px #4566ae,27px 36px #fff,30px 36px #fff,33px 36px #fff,36px 36px #4566ae,39px 36px #4566ae,42px 36px #4566ae,45px 36px #4566ae,48px 36px #4566ae,3px 39px #4566ae,6px 39px #4566ae,9px 39px #4566ae,12px 39px #4566ae,15px 39px #4566ae,18px 39px #4566ae,21px 39px #4566ae,24px 39px #4566ae,27px 39px #fff,30px 39px #fff,33px 39px #fff,36px 39px #4566ae,39px 39px #4566ae,42px 39px #4566ae,45px 39px #4566ae,48px 39px #4566ae,3px 42px #4566ae,6px 42px #4566ae,9px 42px #4566ae,12px 42px #4566ae,15px 42px #4566ae,18px 42px #4566ae,21px 42px #4566ae,24px 42px #4566ae,27px 42px #fff,30px 42px #fff,33px 42px #fff,36px 42px #4566ae,39px 42px #4566ae,42px 42px #4566ae,45px 42px #4566ae,48px 42px #4566ae,3px 45px #4566ae,6px 45px #4566ae,9px 45px #4566ae,12px 45px #4566ae,15px 45px #4566ae,18px 45px #4566ae,21px 45px #4566ae,24px 45px #4566ae,27px 45px #fff,30px 45px #fff,33px 45px #fff,36px 45px #4566ae,39px 45px #4566ae,42px 45px #4566ae,45px 45px #4566ae,48px 45px #4566ae,6px 48px #4566ae,9px 48px #4566ae,12px 48px #4566ae,15px 48px #4566ae,18px 48px #4566ae,21px 48px #4566ae,24px 48px #4566ae,27px 48px #fff,30px 48px #fff,33px 48px #fff,36px 48px #4566ae,39px 48px #4566ae,42px 48px #4566ae,45px 48px #4566ae;;
878 | }
879 |
880 | .icon.is-medium.github::before {
881 | width: 3px;
882 | height: 3px;
883 | box-shadow: 6px 3px #333,9px 3px #333,12px 3px #333,15px 3px #333,18px 3px #333,21px 3px #333,24px 3px #333,27px 3px #333,30px 3px #333,33px 3px #333,36px 3px #333,39px 3px #333,42px 3px #333,45px 3px #333,3px 6px #333,6px 6px #333,9px 6px #333,12px 6px #333,15px 6px #fff,18px 6px #333,21px 6px #333,24px 6px #333,27px 6px #333,30px 6px #333,33px 6px #333,36px 6px #333,39px 6px #333,42px 6px #fff,45px 6px #333,48px 6px #333,3px 9px #333,6px 9px #333,9px 9px #333,12px 9px #333,15px 9px #fff,18px 9px #fff,21px 9px #333,24px 9px #333,27px 9px #333,30px 9px #333,33px 9px #333,36px 9px #333,39px 9px #fff,42px 9px #fff,45px 9px #333,48px 9px #333,3px 12px #333,6px 12px #333,9px 12px #333,12px 12px #333,15px 12px #fff,18px 12px #fff,21px 12px #fff,24px 12px #fff,27px 12px #fff,30px 12px #fff,33px 12px #fff,36px 12px #fff,39px 12px #fff,42px 12px #fff,45px 12px #333,48px 12px #333,3px 15px #333,6px 15px #333,9px 15px #333,12px 15px #fff,15px 15px #fff,18px 15px #fff,21px 15px #fff,24px 15px #fff,27px 15px #fff,30px 15px #fff,33px 15px #fff,36px 15px #fff,39px 15px #fff,42px 15px #fff,45px 15px #fff,48px 15px #333,3px 18px #333,6px 18px #333,9px 18px #333,12px 18px #fff,15px 18px #fff,18px 18px #fff,21px 18px #fff,24px 18px #fff,27px 18px #fff,30px 18px #fff,33px 18px #fff,36px 18px #fff,39px 18px #fff,42px 18px #fff,45px 18px #fff,48px 18px #333,3px 21px #333,6px 21px #333,9px 21px #333,12px 21px #fff,15px 21px #fff,18px 21px #fff,21px 21px #fff,24px 21px #fff,27px 21px #fff,30px 21px #fff,33px 21px #fff,36px 21px #fff,39px 21px #fff,42px 21px #fff,45px 21px #fff,48px 21px #333,3px 24px #333,6px 24px #333,9px 24px #333,12px 24px #fff,15px 24px #fff,18px 24px #fff,21px 24px #fff,24px 24px #fff,27px 24px #fff,30px 24px #fff,33px 24px #fff,36px 24px #fff,39px 24px #fff,42px 24px #fff,45px 24px #fff,48px 24px #333,3px 27px #333,6px 27px #333,9px 27px #333,12px 27px #333,15px 27px #fff,18px 27px #fff,21px 27px #fff,24px 27px #fff,27px 27px #fff,30px 27px #fff,33px 27px #fff,36px 27px #fff,39px 27px #fff,42px 27px #fff,45px 27px #333,48px 27px #333,3px 30px #333,6px 30px #333,9px 30px #333,12px 30px #333,15px 30px #333,18px 30px #fff,21px 30px #fff,24px 30px #fff,27px 30px #fff,30px 30px #fff,33px 30px #fff,36px 30px #fff,39px 30px #fff,42px 30px #333,45px 30px #333,48px 30px #333,3px 33px #333,6px 33px #fff,9px 33px #fff,12px 33px #333,15px 33px #333,18px 33px #333,21px 33px #333,24px 33px #fff,27px 33px #fff,30px 33px #fff,33px 33px #fff,36px 33px #333,39px 33px #333,42px 33px #333,45px 33px #333,48px 33px #333,3px 36px #333,6px 36px #333,9px 36px #333,12px 36px #fff,15px 36px #333,18px 36px #333,21px 36px #fff,24px 36px #fff,27px 36px #fff,30px 36px #fff,33px 36px #fff,36px 36px #fff,39px 36px #333,42px 36px #333,45px 36px #333,48px 36px #333,3px 39px #333,6px 39px #333,9px 39px #333,12px 39px #333,15px 39px #fff,18px 39px #fff,21px 39px #fff,24px 39px #fff,27px 39px #fff,30px 39px #fff,33px 39px #fff,36px 39px #fff,39px 39px #333,42px 39px #333,45px 39px #333,48px 39px #333,3px 42px #333,6px 42px #333,9px 42px #333,12px 42px #333,15px 42px #333,18px 42px #333,21px 42px #fff,24px 42px #fff,27px 42px #fff,30px 42px #fff,33px 42px #fff,36px 42px #fff,39px 42px #333,42px 42px #333,45px 42px #333,48px 42px #333,3px 45px #333,6px 45px #333,9px 45px #333,12px 45px #333,15px 45px #333,18px 45px #333,21px 45px #fff,24px 45px #fff,27px 45px #fff,30px 45px #fff,33px 45px #fff,36px 45px #fff,39px 45px #333,42px 45px #333,45px 45px #333,48px 45px #333,6px 48px #333,9px 48px #333,12px 48px #333,15px 48px #333,18px 48px #333,21px 48px #333,24px 48px #333,27px 48px #333,30px 48px #333,33px 48px #333,36px 48px #333,39px 48px #333,42px 48px #333,45px 48px #333;;
884 | }
885 |
886 | .icon.is-medium.close::before {
887 | width: 3px;
888 | height: 3px;
889 | box-shadow: 3px 3px #212529,6px 3px #212529,9px 3px #212529,12px 3px #212529,39px 3px #212529,42px 3px #212529,45px 3px #212529,48px 3px #212529,3px 6px #212529,6px 6px #212529,9px 6px #212529,12px 6px #212529,39px 6px #212529,42px 6px #212529,45px 6px #212529,48px 6px #212529,3px 9px #212529,6px 9px #212529,9px 9px #212529,12px 9px #212529,39px 9px #212529,42px 9px #212529,45px 9px #212529,48px 9px #212529,3px 12px #212529,6px 12px #212529,9px 12px #212529,12px 12px #212529,15px 12px #212529,18px 12px #212529,21px 12px #212529,30px 12px #212529,33px 12px #212529,36px 12px #212529,39px 12px #212529,42px 12px #212529,45px 12px #212529,48px 12px #212529,12px 15px #212529,15px 15px #212529,18px 15px #212529,21px 15px #212529,30px 15px #212529,33px 15px #212529,36px 15px #212529,39px 15px #212529,12px 18px #212529,15px 18px #212529,18px 18px #212529,21px 18px #212529,30px 18px #212529,33px 18px #212529,36px 18px #212529,39px 18px #212529,12px 21px #212529,15px 21px #212529,18px 21px #212529,21px 21px #212529,24px 21px #212529,27px 21px #212529,30px 21px #212529,33px 21px #212529,36px 21px #212529,39px 21px #212529,21px 24px #212529,24px 24px #212529,27px 24px #212529,30px 24px #212529,21px 27px #212529,24px 27px #212529,27px 27px #212529,30px 27px #212529,12px 30px #212529,15px 30px #212529,18px 30px #212529,21px 30px #212529,24px 30px #212529,27px 30px #212529,30px 30px #212529,33px 30px #212529,36px 30px #212529,39px 30px #212529,12px 33px #212529,15px 33px #212529,18px 33px #212529,21px 33px #212529,30px 33px #212529,33px 33px #212529,36px 33px #212529,39px 33px #212529,12px 36px #212529,15px 36px #212529,18px 36px #212529,21px 36px #212529,30px 36px #212529,33px 36px #212529,36px 36px #212529,39px 36px #212529,3px 39px #212529,6px 39px #212529,9px 39px #212529,12px 39px #212529,15px 39px #212529,18px 39px #212529,21px 39px #212529,30px 39px #212529,33px 39px #212529,36px 39px #212529,39px 39px #212529,42px 39px #212529,45px 39px #212529,48px 39px #212529,3px 42px #212529,6px 42px #212529,9px 42px #212529,12px 42px #212529,39px 42px #212529,42px 42px #212529,45px 42px #212529,48px 42px #212529,3px 45px #212529,6px 45px #212529,9px 45px #212529,12px 45px #212529,39px 45px #212529,42px 45px #212529,45px 45px #212529,48px 45px #212529,3px 48px #212529,6px 48px #212529,9px 48px #212529,12px 48px #212529,39px 48px #212529,42px 48px #212529,45px 48px #212529,48px 48px #212529;;
890 | }
891 |
892 | .icon.is-large {
893 | width: 64px;
894 | height: 64px;
895 | }
896 |
897 | .icon.is-large::before {
898 | position: absolute;
899 | top: -4px;
900 | left: -4px;
901 | display: block;
902 | width: 64px;
903 | height: 64px;
904 | content: "";
905 | background: transparent;
906 | }
907 |
908 | .icon.is-large.heart::before {
909 | width: 4px;
910 | height: 4px;
911 | box-shadow: 12px 8px #444,16px 8px #444,20px 8px #444,44px 8px #444,48px 8px #444,52px 8px #444,8px 12px #444,12px 12px #f22426,16px 12px #f22426,20px 12px #f22426,24px 12px #444,40px 12px #444,44px 12px #f22426,48px 12px #f22426,52px 12px #842300,56px 12px #444,4px 16px #444,8px 16px #f22426,12px 16px #fff,16px 16px #fff,20px 16px #f22426,24px 16px #f22426,28px 16px #444,36px 16px #444,40px 16px #f22426,44px 16px #f22426,48px 16px #f22426,52px 16px #f22426,56px 16px #842300,60px 16px #444,4px 20px #444,8px 20px #f22426,12px 20px #fff,16px 20px #f22426,20px 20px #f22426,24px 20px #f22426,28px 20px #f22426,32px 20px #444,36px 20px #f22426,40px 20px #f22426,44px 20px #f22426,48px 20px #f22426,52px 20px #f22426,56px 20px #842300,60px 20px #444,4px 24px #444,8px 24px #f22426,12px 24px #f22426,16px 24px #f22426,20px 24px #f22426,24px 24px #f22426,28px 24px #f22426,32px 24px #f22426,36px 24px #f22426,40px 24px #f22426,44px 24px #f22426,48px 24px #f22426,52px 24px #f22426,56px 24px #842300,60px 24px #444,4px 28px #444,8px 28px #f22426,12px 28px #f22426,16px 28px #f22426,20px 28px #f22426,24px 28px #f22426,28px 28px #f22426,32px 28px #f22426,36px 28px #f22426,40px 28px #f22426,44px 28px #f22426,48px 28px #f22426,52px 28px #f22426,56px 28px #842300,60px 28px #444,4px 32px #444,8px 32px #f22426,12px 32px #f22426,16px 32px #f22426,20px 32px #f22426,24px 32px #f22426,28px 32px #f22426,32px 32px #f22426,36px 32px #f22426,40px 32px #f22426,44px 32px #f22426,48px 32px #f22426,52px 32px #f22426,56px 32px #842300,60px 32px #444,8px 36px #444,12px 36px #f22426,16px 36px #f22426,20px 36px #f22426,24px 36px #f22426,28px 36px #f22426,32px 36px #f22426,36px 36px #f22426,40px 36px #f22426,44px 36px #f22426,48px 36px #f22426,52px 36px #842300,56px 36px #444,12px 40px #444,16px 40px #f22426,20px 40px #f22426,24px 40px #f22426,28px 40px #f22426,32px 40px #f22426,36px 40px #f22426,40px 40px #f22426,44px 40px #f22426,48px 40px #842300,52px 40px #444,16px 44px #444,20px 44px #f22426,24px 44px #f22426,28px 44px #f22426,32px 44px #f22426,36px 44px #f22426,40px 44px #f22426,44px 44px #842300,48px 44px #444,20px 48px #444,24px 48px #f22426,28px 48px #f22426,32px 48px #f22426,36px 48px #f22426,40px 48px #842300,44px 48px #444,24px 52px #444,28px 52px #f22426,32px 52px #f22426,36px 52px #842300,40px 52px #444,28px 56px #444,32px 56px #842300,36px 56px #444,32px 60px #444;;
912 | }
913 |
914 | .icon.is-large.star::before {
915 | width: 4px;
916 | height: 4px;
917 | box-shadow: 32px 4px #444,28px 8px #444,32px 8px #ebe527,36px 8px #444,28px 12px #444,32px 12px #ebe527,36px 12px #444,24px 16px #444,28px 16px #ebe527,32px 16px #ebe527,36px 16px #ebe527,40px 16px #444,24px 20px #444,28px 20px #fff,32px 20px #fff,36px 20px #ebe527,40px 20px #444,4px 24px #444,8px 24px #444,12px 24px #444,16px 24px #444,20px 24px #444,24px 24px #444,28px 24px #fff,32px 24px #ebe527,36px 24px #ebe527,40px 24px #ebe527,44px 24px #444,48px 24px #444,52px 24px #444,56px 24px #444,60px 24px #444,4px 28px #444,8px 28px #ebe527,12px 28px #ebe527,16px 28px #ebe527,20px 28px #fff,24px 28px #fff,28px 28px #ebe527,32px 28px #ebe527,36px 28px #ebe527,40px 28px #ebe527,44px 28px #ebe527,48px 28px #ebe527,52px 28px #ebe527,56px 28px #ebe527,60px 28px #444,8px 32px #444,12px 32px #ebe527,16px 32px #ebe527,20px 32px #fff,24px 32px #ebe527,28px 32px #ebe527,32px 32px #ebe527,36px 32px #ebe527,40px 32px #ebe527,44px 32px #ebe527,48px 32px #ebe527,52px 32px #f59f54,56px 32px #444,12px 36px #444,16px 36px #ebe527,20px 36px #ebe527,24px 36px #ebe527,28px 36px #ebe527,32px 36px #ebe527,36px 36px #ebe527,40px 36px #ebe527,44px 36px #f59f54,48px 36px #f59f54,52px 36px #444,16px 40px #444,20px 40px #ebe527,24px 40px #ebe527,28px 40px #ebe527,32px 40px #ebe527,36px 40px #ebe527,40px 40px #ebe527,44px 40px #ebe527,48px 40px #444,12px 44px #444,16px 44px #ebe527,20px 44px #ebe527,24px 44px #ebe527,28px 44px #ebe527,32px 44px #f59f54,36px 44px #ebe527,40px 44px #ebe527,44px 44px #ebe527,48px 44px #ebe527,52px 44px #444,12px 48px #444,16px 48px #ebe527,20px 48px #ebe527,24px 48px #ebe527,28px 48px #f59f54,32px 48px #f59f54,36px 48px #f59f54,40px 48px #ebe527,44px 48px #ebe527,48px 48px #ebe527,52px 48px #444,8px 52px #444,12px 52px #ebe527,16px 52px #ebe527,20px 52px #f59f54,24px 52px #f59f54,28px 52px #f59f54,32px 52px #444,36px 52px #f59f54,40px 52px #f59f54,44px 52px #f59f54,48px 52px #ebe527,52px 52px #ebe527,56px 52px #444,8px 56px #444,12px 56px #ebe527,16px 56px #f59f54,20px 56px #f59f54,24px 56px #444,28px 56px #444,36px 56px #444,40px 56px #444,44px 56px #f59f54,48px 56px #f59f54,52px 56px #ebe527,56px 56px #444,4px 60px #444,8px 60px #f59f54,12px 60px #f59f54,16px 60px #444,20px 60px #444,44px 60px #444,48px 60px #444,52px 60px #f59f54,56px 60px #f59f54,60px 60px #444,4px 64px #444,8px 64px #444,12px 64px #444,52px 64px #444,56px 64px #444,60px 64px #444;;
918 | }
919 |
920 | .icon.is-large.like::before {
921 | width: 4px;
922 | height: 4px;
923 | box-shadow: 32px 8px #333,36px 8px #333,32px 12px #333,36px 12px #fff,40px 12px #333,32px 16px #333,36px 16px #fff,40px 16px #333,28px 20px #333,32px 20px #fff,36px 20px #fff,40px 20px #333,28px 24px #333,32px 24px #fff,36px 24px #fff,40px 24px #333,44px 24px #333,48px 24px #333,52px 24px #333,56px 24px #333,60px 24px #333,24px 28px #333,28px 28px #fff,32px 28px #fff,36px 28px #fff,40px 28px #fff,44px 28px #fff,48px 28px #fff,52px 28px #fff,56px 28px #fff,60px 28px #fff,64px 28px #333,8px 32px #333,12px 32px #333,16px 32px #333,24px 32px #333,28px 32px #fff,32px 32px #fff,36px 32px #fff,40px 32px #fff,44px 32px #fff,48px 32px #fff,52px 32px #fff,56px 32px #fff,60px 32px #fff,64px 32px #333,4px 36px #333,8px 36px #2e77be,12px 36px #2e77be,16px 36px #2e77be,20px 36px #333,24px 36px #fff,28px 36px #fff,32px 36px #fff,36px 36px #fff,40px 36px #fff,44px 36px #fff,48px 36px #fff,52px 36px #fff,56px 36px #fff,60px 36px #fff,64px 36px #333,4px 40px #333,8px 40px #2e77be,12px 40px #2e77be,16px 40px #2e77be,20px 40px #333,24px 40px #fff,28px 40px #fff,32px 40px #fff,36px 40px #fff,40px 40px #fff,44px 40px #fff,48px 40px #fff,52px 40px #fff,56px 40px #fff,60px 40px #333,4px 44px #333,8px 44px #2e77be,12px 44px #2e77be,16px 44px #2e77be,20px 44px #333,24px 44px #fff,28px 44px #fff,32px 44px #fff,36px 44px #fff,40px 44px #fff,44px 44px #fff,48px 44px #fff,52px 44px #fff,56px 44px #fff,60px 44px #333,4px 48px #333,8px 48px #2e77be,12px 48px #2e77be,16px 48px #2e77be,20px 48px #333,24px 48px #fff,28px 48px #fff,32px 48px #fff,36px 48px #fff,40px 48px #fff,44px 48px #fff,48px 48px #fff,52px 48px #fff,56px 48px #fff,60px 48px #333,4px 52px #333,8px 52px #2e77be,12px 52px #2e77be,16px 52px #2e77be,20px 52px #333,24px 52px #fff,28px 52px #fff,32px 52px #fff,36px 52px #fff,40px 52px #fff,44px 52px #fff,48px 52px #fff,52px 52px #fff,56px 52px #333,4px 56px #333,8px 56px #2e77be,12px 56px #2e77be,16px 56px #2e77be,20px 56px #333,24px 56px #fff,28px 56px #fff,32px 56px #fff,36px 56px #fff,40px 56px #fff,44px 56px #fff,48px 56px #fff,52px 56px #fff,56px 56px #333,8px 60px #333,12px 60px #333,16px 60px #333,24px 60px #333,28px 60px #333,32px 60px #333,36px 60px #333,40px 60px #333,44px 60px #333,48px 60px #333,52px 60px #333;;
924 | }
925 |
926 | .icon.is-large.twitter::before {
927 | width: 4px;
928 | height: 4px;
929 | box-shadow: 8px 4px #2c9ceb,12px 4px #2c9ceb,16px 4px #2c9ceb,20px 4px #2c9ceb,24px 4px #2c9ceb,28px 4px #2c9ceb,32px 4px #2c9ceb,36px 4px #2c9ceb,40px 4px #2c9ceb,44px 4px #2c9ceb,48px 4px #2c9ceb,52px 4px #2c9ceb,56px 4px #2c9ceb,60px 4px #2c9ceb,4px 8px #2c9ceb,8px 8px #2c9ceb,12px 8px #2c9ceb,16px 8px #2c9ceb,20px 8px #2c9ceb,24px 8px #2c9ceb,28px 8px #2c9ceb,32px 8px #2c9ceb,36px 8px #2c9ceb,40px 8px #2c9ceb,44px 8px #2c9ceb,48px 8px #2c9ceb,52px 8px #2c9ceb,56px 8px #2c9ceb,60px 8px #2c9ceb,64px 8px #2c9ceb,4px 12px #2c9ceb,12px 12px #2c9ceb,16px 12px #2c9ceb,20px 12px #2c9ceb,24px 12px #2c9ceb,28px 12px #2c9ceb,32px 12px #2c9ceb,36px 12px #2c9ceb,40px 12px #fff,44px 12px #fff,48px 12px #fff,52px 12px #2c9ceb,56px 12px #2c9ceb,60px 12px #2c9ceb,64px 12px #2c9ceb,4px 16px #2c9ceb,8px 16px #fff,12px 16px #fff,16px 16px #fff,20px 16px #2c9ceb,24px 16px #2c9ceb,28px 16px #2c9ceb,32px 16px #2c9ceb,36px 16px #fff,40px 16px #fff,44px 16px #fff,48px 16px #fff,52px 16px #fff,56px 16px #2c9ceb,60px 16px #2c9ceb,64px 16px #2c9ceb,4px 20px #2c9ceb,8px 20px #fff,12px 20px #fff,16px 20px #fff,20px 20px #fff,24px 20px #fff,28px 20px #2c9ceb,32px 20px #fff,36px 20px #fff,40px 20px #fff,44px 20px #fff,48px 20px #fff,52px 20px #fff,56px 20px #fff,60px 20px #fff,64px 20px #2c9ceb,4px 24px #2c9ceb,8px 24px #2c9ceb,12px 24px #fff,16px 24px #fff,20px 24px #fff,24px 24px #fff,28px 24px #fff,32px 24px #fff,36px 24px #fff,40px 24px #fff,44px 24px #fff,48px 24px #fff,52px 24px #fff,56px 24px #fff,60px 24px #2c9ceb,64px 24px #2c9ceb,4px 28px #2c9ceb,8px 28px #2c9ceb,12px 28px #fff,16px 28px #fff,20px 28px #fff,24px 28px #fff,28px 28px #fff,32px 28px #fff,36px 28px #fff,40px 28px #fff,44px 28px #fff,48px 28px #fff,52px 28px #fff,56px 28px #fff,60px 28px #2c9ceb,64px 28px #2c9ceb,4px 32px #2c9ceb,8px 32px #2c9ceb,12px 32px #2c9ceb,16px 32px #fff,20px 32px #fff,24px 32px #fff,28px 32px #fff,32px 32px #fff,36px 32px #fff,40px 32px #fff,44px 32px #fff,48px 32px #fff,52px 32px #fff,56px 32px #2c9ceb,60px 32px #2c9ceb,64px 32px #2c9ceb,4px 36px #2c9ceb,8px 36px #2c9ceb,12px 36px #2c9ceb,16px 36px #fff,20px 36px #fff,24px 36px #fff,28px 36px #fff,32px 36px #fff,36px 36px #fff,40px 36px #fff,44px 36px #fff,48px 36px #fff,52px 36px #2c9ceb,56px 36px #2c9ceb,60px 36px #2c9ceb,64px 36px #2c9ceb,4px 40px #2c9ceb,8px 40px #2c9ceb,12px 40px #2c9ceb,16px 40px #2c9ceb,20px 40px #fff,24px 40px #fff,28px 40px #fff,32px 40px #fff,36px 40px #fff,40px 40px #fff,44px 40px #fff,48px 40px #fff,52px 40px #2c9ceb,56px 40px #2c9ceb,60px 40px #2c9ceb,64px 40px #2c9ceb,4px 44px #2c9ceb,8px 44px #2c9ceb,12px 44px #2c9ceb,16px 44px #2c9ceb,20px 44px #2c9ceb,24px 44px #fff,28px 44px #fff,32px 44px #fff,36px 44px #fff,40px 44px #fff,44px 44px #fff,48px 44px #fff,52px 44px #2c9ceb,56px 44px #2c9ceb,60px 44px #2c9ceb,64px 44px #2c9ceb,4px 48px #2c9ceb,8px 48px #2c9ceb,12px 48px #2c9ceb,16px 48px #2c9ceb,20px 48px #fff,24px 48px #fff,28px 48px #fff,32px 48px #fff,36px 48px #fff,40px 48px #fff,44px 48px #fff,48px 48px #2c9ceb,52px 48px #2c9ceb,56px 48px #2c9ceb,60px 48px #2c9ceb,64px 48px #2c9ceb,4px 52px #2c9ceb,8px 52px #2c9ceb,12px 52px #fff,16px 52px #fff,20px 52px #fff,24px 52px #fff,28px 52px #fff,32px 52px #fff,36px 52px #fff,40px 52px #2c9ceb,44px 52px #2c9ceb,48px 52px #2c9ceb,52px 52px #2c9ceb,56px 52px #2c9ceb,60px 52px #2c9ceb,64px 52px #2c9ceb,4px 56px #2c9ceb,8px 56px #2c9ceb,12px 56px #2c9ceb,16px 56px #fff,20px 56px #fff,24px 56px #fff,28px 56px #2c9ceb,32px 56px #2c9ceb,36px 56px #2c9ceb,40px 56px #2c9ceb,44px 56px #2c9ceb,48px 56px #2c9ceb,52px 56px #2c9ceb,56px 56px #2c9ceb,60px 56px #2c9ceb,64px 56px #2c9ceb,4px 60px #2c9ceb,8px 60px #2c9ceb,12px 60px #2c9ceb,16px 60px #2c9ceb,20px 60px #2c9ceb,24px 60px #2c9ceb,28px 60px #2c9ceb,32px 60px #2c9ceb,36px 60px #2c9ceb,40px 60px #2c9ceb,44px 60px #2c9ceb,48px 60px #2c9ceb,52px 60px #2c9ceb,56px 60px #2c9ceb,60px 60px #2c9ceb,64px 60px #2c9ceb,8px 64px #2c9ceb,12px 64px #2c9ceb,16px 64px #2c9ceb,20px 64px #2c9ceb,24px 64px #2c9ceb,28px 64px #2c9ceb,32px 64px #2c9ceb,36px 64px #2c9ceb,40px 64px #2c9ceb,44px 64px #2c9ceb,48px 64px #2c9ceb,52px 64px #2c9ceb,56px 64px #2c9ceb,60px 64px #2c9ceb;;
930 | }
931 |
932 | .icon.is-large.facebook::before {
933 | width: 4px;
934 | height: 4px;
935 | box-shadow: 8px 4px #4566ae,12px 4px #4566ae,16px 4px #4566ae,20px 4px #4566ae,24px 4px #4566ae,28px 4px #4566ae,32px 4px #4566ae,36px 4px #4566ae,40px 4px #4566ae,44px 4px #4566ae,48px 4px #4566ae,52px 4px #4566ae,56px 4px #4566ae,60px 4px #4566ae,4px 8px #4566ae,8px 8px #4566ae,12px 8px #4566ae,16px 8px #4566ae,20px 8px #4566ae,24px 8px #4566ae,28px 8px #4566ae,32px 8px #4566ae,36px 8px #4566ae,40px 8px #4566ae,44px 8px #fff,48px 8px #fff,52px 8px #fff,56px 8px #fff,60px 8px #4566ae,64px 8px #4566ae,4px 12px #4566ae,8px 12px #4566ae,12px 12px #4566ae,16px 12px #4566ae,20px 12px #4566ae,24px 12px #4566ae,28px 12px #4566ae,32px 12px #4566ae,36px 12px #4566ae,40px 12px #fff,44px 12px #fff,48px 12px #fff,52px 12px #fff,56px 12px #fff,60px 12px #4566ae,64px 12px #4566ae,4px 16px #4566ae,8px 16px #4566ae,12px 16px #4566ae,16px 16px #4566ae,20px 16px #4566ae,24px 16px #4566ae,28px 16px #4566ae,32px 16px #4566ae,36px 16px #fff,40px 16px #fff,44px 16px #fff,48px 16px #fff,52px 16px #fff,56px 16px #fff,60px 16px #4566ae,64px 16px #4566ae,4px 20px #4566ae,8px 20px #4566ae,12px 20px #4566ae,16px 20px #4566ae,20px 20px #4566ae,24px 20px #4566ae,28px 20px #4566ae,32px 20px #4566ae,36px 20px #fff,40px 20px #fff,44px 20px #fff,48px 20px #4566ae,52px 20px #4566ae,56px 20px #4566ae,60px 20px #4566ae,64px 20px #4566ae,4px 24px #4566ae,8px 24px #4566ae,12px 24px #4566ae,16px 24px #4566ae,20px 24px #4566ae,24px 24px #4566ae,28px 24px #4566ae,32px 24px #4566ae,36px 24px #fff,40px 24px #fff,44px 24px #fff,48px 24px #4566ae,52px 24px #4566ae,56px 24px #4566ae,60px 24px #4566ae,64px 24px #4566ae,4px 28px #4566ae,8px 28px #4566ae,12px 28px #4566ae,16px 28px #4566ae,20px 28px #4566ae,24px 28px #4566ae,28px 28px #4566ae,32px 28px #4566ae,36px 28px #fff,40px 28px #fff,44px 28px #fff,48px 28px #4566ae,52px 28px #4566ae,56px 28px #4566ae,60px 28px #4566ae,64px 28px #4566ae,4px 32px #4566ae,8px 32px #4566ae,12px 32px #4566ae,16px 32px #4566ae,20px 32px #4566ae,24px 32px #fff,28px 32px #fff,32px 32px #fff,36px 32px #fff,40px 32px #fff,44px 32px #fff,48px 32px #fff,52px 32px #fff,56px 32px #fff,60px 32px #4566ae,64px 32px #4566ae,4px 36px #4566ae,8px 36px #4566ae,12px 36px #4566ae,16px 36px #4566ae,20px 36px #4566ae,24px 36px #fff,28px 36px #fff,32px 36px #fff,36px 36px #fff,40px 36px #fff,44px 36px #fff,48px 36px #fff,52px 36px #fff,56px 36px #fff,60px 36px #4566ae,64px 36px #4566ae,4px 40px #4566ae,8px 40px #4566ae,12px 40px #4566ae,16px 40px #4566ae,20px 40px #4566ae,24px 40px #fff,28px 40px #fff,32px 40px #fff,36px 40px #fff,40px 40px #fff,44px 40px #fff,48px 40px #fff,52px 40px #fff,56px 40px #fff,60px 40px #4566ae,64px 40px #4566ae,4px 44px #4566ae,8px 44px #4566ae,12px 44px #4566ae,16px 44px #4566ae,20px 44px #4566ae,24px 44px #4566ae,28px 44px #4566ae,32px 44px #4566ae,36px 44px #fff,40px 44px #fff,44px 44px #fff,48px 44px #4566ae,52px 44px #4566ae,56px 44px #4566ae,60px 44px #4566ae,64px 44px #4566ae,4px 48px #4566ae,8px 48px #4566ae,12px 48px #4566ae,16px 48px #4566ae,20px 48px #4566ae,24px 48px #4566ae,28px 48px #4566ae,32px 48px #4566ae,36px 48px #fff,40px 48px #fff,44px 48px #fff,48px 48px #4566ae,52px 48px #4566ae,56px 48px #4566ae,60px 48px #4566ae,64px 48px #4566ae,4px 52px #4566ae,8px 52px #4566ae,12px 52px #4566ae,16px 52px #4566ae,20px 52px #4566ae,24px 52px #4566ae,28px 52px #4566ae,32px 52px #4566ae,36px 52px #fff,40px 52px #fff,44px 52px #fff,48px 52px #4566ae,52px 52px #4566ae,56px 52px #4566ae,60px 52px #4566ae,64px 52px #4566ae,4px 56px #4566ae,8px 56px #4566ae,12px 56px #4566ae,16px 56px #4566ae,20px 56px #4566ae,24px 56px #4566ae,28px 56px #4566ae,32px 56px #4566ae,36px 56px #fff,40px 56px #fff,44px 56px #fff,48px 56px #4566ae,52px 56px #4566ae,56px 56px #4566ae,60px 56px #4566ae,64px 56px #4566ae,4px 60px #4566ae,8px 60px #4566ae,12px 60px #4566ae,16px 60px #4566ae,20px 60px #4566ae,24px 60px #4566ae,28px 60px #4566ae,32px 60px #4566ae,36px 60px #fff,40px 60px #fff,44px 60px #fff,48px 60px #4566ae,52px 60px #4566ae,56px 60px #4566ae,60px 60px #4566ae,64px 60px #4566ae,8px 64px #4566ae,12px 64px #4566ae,16px 64px #4566ae,20px 64px #4566ae,24px 64px #4566ae,28px 64px #4566ae,32px 64px #4566ae,36px 64px #fff,40px 64px #fff,44px 64px #fff,48px 64px #4566ae,52px 64px #4566ae,56px 64px #4566ae,60px 64px #4566ae;;
936 | }
937 |
938 | .icon.is-large.github::before {
939 | width: 4px;
940 | height: 4px;
941 | box-shadow: 8px 4px #333,12px 4px #333,16px 4px #333,20px 4px #333,24px 4px #333,28px 4px #333,32px 4px #333,36px 4px #333,40px 4px #333,44px 4px #333,48px 4px #333,52px 4px #333,56px 4px #333,60px 4px #333,4px 8px #333,8px 8px #333,12px 8px #333,16px 8px #333,20px 8px #fff,24px 8px #333,28px 8px #333,32px 8px #333,36px 8px #333,40px 8px #333,44px 8px #333,48px 8px #333,52px 8px #333,56px 8px #fff,60px 8px #333,64px 8px #333,4px 12px #333,8px 12px #333,12px 12px #333,16px 12px #333,20px 12px #fff,24px 12px #fff,28px 12px #333,32px 12px #333,36px 12px #333,40px 12px #333,44px 12px #333,48px 12px #333,52px 12px #fff,56px 12px #fff,60px 12px #333,64px 12px #333,4px 16px #333,8px 16px #333,12px 16px #333,16px 16px #333,20px 16px #fff,24px 16px #fff,28px 16px #fff,32px 16px #fff,36px 16px #fff,40px 16px #fff,44px 16px #fff,48px 16px #fff,52px 16px #fff,56px 16px #fff,60px 16px #333,64px 16px #333,4px 20px #333,8px 20px #333,12px 20px #333,16px 20px #fff,20px 20px #fff,24px 20px #fff,28px 20px #fff,32px 20px #fff,36px 20px #fff,40px 20px #fff,44px 20px #fff,48px 20px #fff,52px 20px #fff,56px 20px #fff,60px 20px #fff,64px 20px #333,4px 24px #333,8px 24px #333,12px 24px #333,16px 24px #fff,20px 24px #fff,24px 24px #fff,28px 24px #fff,32px 24px #fff,36px 24px #fff,40px 24px #fff,44px 24px #fff,48px 24px #fff,52px 24px #fff,56px 24px #fff,60px 24px #fff,64px 24px #333,4px 28px #333,8px 28px #333,12px 28px #333,16px 28px #fff,20px 28px #fff,24px 28px #fff,28px 28px #fff,32px 28px #fff,36px 28px #fff,40px 28px #fff,44px 28px #fff,48px 28px #fff,52px 28px #fff,56px 28px #fff,60px 28px #fff,64px 28px #333,4px 32px #333,8px 32px #333,12px 32px #333,16px 32px #fff,20px 32px #fff,24px 32px #fff,28px 32px #fff,32px 32px #fff,36px 32px #fff,40px 32px #fff,44px 32px #fff,48px 32px #fff,52px 32px #fff,56px 32px #fff,60px 32px #fff,64px 32px #333,4px 36px #333,8px 36px #333,12px 36px #333,16px 36px #333,20px 36px #fff,24px 36px #fff,28px 36px #fff,32px 36px #fff,36px 36px #fff,40px 36px #fff,44px 36px #fff,48px 36px #fff,52px 36px #fff,56px 36px #fff,60px 36px #333,64px 36px #333,4px 40px #333,8px 40px #333,12px 40px #333,16px 40px #333,20px 40px #333,24px 40px #fff,28px 40px #fff,32px 40px #fff,36px 40px #fff,40px 40px #fff,44px 40px #fff,48px 40px #fff,52px 40px #fff,56px 40px #333,60px 40px #333,64px 40px #333,4px 44px #333,8px 44px #fff,12px 44px #fff,16px 44px #333,20px 44px #333,24px 44px #333,28px 44px #333,32px 44px #fff,36px 44px #fff,40px 44px #fff,44px 44px #fff,48px 44px #333,52px 44px #333,56px 44px #333,60px 44px #333,64px 44px #333,4px 48px #333,8px 48px #333,12px 48px #333,16px 48px #fff,20px 48px #333,24px 48px #333,28px 48px #fff,32px 48px #fff,36px 48px #fff,40px 48px #fff,44px 48px #fff,48px 48px #fff,52px 48px #333,56px 48px #333,60px 48px #333,64px 48px #333,4px 52px #333,8px 52px #333,12px 52px #333,16px 52px #333,20px 52px #fff,24px 52px #fff,28px 52px #fff,32px 52px #fff,36px 52px #fff,40px 52px #fff,44px 52px #fff,48px 52px #fff,52px 52px #333,56px 52px #333,60px 52px #333,64px 52px #333,4px 56px #333,8px 56px #333,12px 56px #333,16px 56px #333,20px 56px #333,24px 56px #333,28px 56px #fff,32px 56px #fff,36px 56px #fff,40px 56px #fff,44px 56px #fff,48px 56px #fff,52px 56px #333,56px 56px #333,60px 56px #333,64px 56px #333,4px 60px #333,8px 60px #333,12px 60px #333,16px 60px #333,20px 60px #333,24px 60px #333,28px 60px #fff,32px 60px #fff,36px 60px #fff,40px 60px #fff,44px 60px #fff,48px 60px #fff,52px 60px #333,56px 60px #333,60px 60px #333,64px 60px #333,8px 64px #333,12px 64px #333,16px 64px #333,20px 64px #333,24px 64px #333,28px 64px #333,32px 64px #333,36px 64px #333,40px 64px #333,44px 64px #333,48px 64px #333,52px 64px #333,56px 64px #333,60px 64px #333;;
942 | }
943 |
944 | .icon.is-large.close::before {
945 | width: 4px;
946 | height: 4px;
947 | box-shadow: 4px 4px #212529,8px 4px #212529,12px 4px #212529,16px 4px #212529,52px 4px #212529,56px 4px #212529,60px 4px #212529,64px 4px #212529,4px 8px #212529,8px 8px #212529,12px 8px #212529,16px 8px #212529,52px 8px #212529,56px 8px #212529,60px 8px #212529,64px 8px #212529,4px 12px #212529,8px 12px #212529,12px 12px #212529,16px 12px #212529,52px 12px #212529,56px 12px #212529,60px 12px #212529,64px 12px #212529,4px 16px #212529,8px 16px #212529,12px 16px #212529,16px 16px #212529,20px 16px #212529,24px 16px #212529,28px 16px #212529,40px 16px #212529,44px 16px #212529,48px 16px #212529,52px 16px #212529,56px 16px #212529,60px 16px #212529,64px 16px #212529,16px 20px #212529,20px 20px #212529,24px 20px #212529,28px 20px #212529,40px 20px #212529,44px 20px #212529,48px 20px #212529,52px 20px #212529,16px 24px #212529,20px 24px #212529,24px 24px #212529,28px 24px #212529,40px 24px #212529,44px 24px #212529,48px 24px #212529,52px 24px #212529,16px 28px #212529,20px 28px #212529,24px 28px #212529,28px 28px #212529,32px 28px #212529,36px 28px #212529,40px 28px #212529,44px 28px #212529,48px 28px #212529,52px 28px #212529,28px 32px #212529,32px 32px #212529,36px 32px #212529,40px 32px #212529,28px 36px #212529,32px 36px #212529,36px 36px #212529,40px 36px #212529,16px 40px #212529,20px 40px #212529,24px 40px #212529,28px 40px #212529,32px 40px #212529,36px 40px #212529,40px 40px #212529,44px 40px #212529,48px 40px #212529,52px 40px #212529,16px 44px #212529,20px 44px #212529,24px 44px #212529,28px 44px #212529,40px 44px #212529,44px 44px #212529,48px 44px #212529,52px 44px #212529,16px 48px #212529,20px 48px #212529,24px 48px #212529,28px 48px #212529,40px 48px #212529,44px 48px #212529,48px 48px #212529,52px 48px #212529,4px 52px #212529,8px 52px #212529,12px 52px #212529,16px 52px #212529,20px 52px #212529,24px 52px #212529,28px 52px #212529,40px 52px #212529,44px 52px #212529,48px 52px #212529,52px 52px #212529,56px 52px #212529,60px 52px #212529,64px 52px #212529,4px 56px #212529,8px 56px #212529,12px 56px #212529,16px 56px #212529,52px 56px #212529,56px 56px #212529,60px 56px #212529,64px 56px #212529,4px 60px #212529,8px 60px #212529,12px 60px #212529,16px 60px #212529,52px 60px #212529,56px 60px #212529,60px 60px #212529,64px 60px #212529,4px 64px #212529,8px 64px #212529,12px 64px #212529,16px 64px #212529,52px 64px #212529,56px 64px #212529,60px 64px #212529,64px 64px #212529;;
948 | }
949 |
950 | .nes-logo {
951 | position: relative;
952 | display: inline-block;
953 | width: 48px;
954 | height: 33px;
955 | }
956 |
957 | .nes-logo::before {
958 | position: absolute;
959 | top: -3px;
960 | left: -3px;
961 | content: "";
962 | background: transparent;
963 | width: 3px;
964 | height: 3px;
965 | box-shadow: 21px 3px #3e3634,21px 6px #3e3634,24px 9px #3e3634,3px 12px #c3c3c3,6px 12px #c3c3c3,9px 12px #c3c3c3,12px 12px #c3c3c3,15px 12px #c3c3c3,18px 12px #c3c3c3,21px 12px #c3c3c3,24px 12px #c3c3c3,27px 12px #c3c3c3,30px 12px #c3c3c3,33px 12px #c3c3c3,36px 12px #c3c3c3,39px 12px #c3c3c3,42px 12px #c3c3c3,45px 12px #c3c3c3,3px 15px #c3c3c3,6px 15px #3e3634,9px 15px #3e3634,12px 15px #3e3634,15px 15px #3e3634,18px 15px #3e3634,21px 15px #3e3634,24px 15px #3e3634,27px 15px #3e3634,30px 15px #3e3634,33px 15px #3e3634,36px 15px #3e3634,39px 15px #3e3634,42px 15px #3e3634,45px 15px #c3c3c3,3px 18px #c3c3c3,6px 18px #3e3634,9px 18px #3e3634,12px 18px #c3c3c3,15px 18px #3e3634,18px 18px #3e3634,21px 18px #787973,24px 18px #787973,27px 18px #787973,30px 18px #3e3634,33px 18px #3e3634,36px 18px #3e3634,39px 18px #3e3634,42px 18px #3e3634,45px 18px #c3c3c3,3px 21px #c3c3c3,6px 21px #3e3634,9px 21px #c3c3c3,12px 21px #c3c3c3,15px 21px #c3c3c3,18px 21px #3e3634,21px 21px #3e3634,24px 21px #3e3634,27px 21px #3e3634,30px 21px #3e3634,33px 21px #3e3634,36px 21px #3e3634,39px 21px #3e3634,42px 21px #3e3634,45px 21px #c3c3c3,3px 24px #c3c3c3,6px 24px #3e3634,9px 24px #3e3634,12px 24px #c3c3c3,15px 24px #3e3634,18px 24px #3e3634,21px 24px #787973,24px 24px #787973,27px 24px #787973,30px 24px #3e3634,33px 24px #bf1710,36px 24px #3e3634,39px 24px #bf1710,42px 24px #3e3634,45px 24px #c3c3c3,3px 27px #c3c3c3,6px 27px #3e3634,9px 27px #3e3634,12px 27px #3e3634,15px 27px #3e3634,18px 27px #3e3634,21px 27px #3e3634,24px 27px #3e3634,27px 27px #3e3634,30px 27px #3e3634,33px 27px #3e3634,36px 27px #3e3634,39px 27px #3e3634,42px 27px #3e3634,45px 27px #c3c3c3,3px 30px #c3c3c3,6px 30px #c3c3c3,9px 30px #c3c3c3,12px 30px #c3c3c3,15px 30px #c3c3c3,18px 30px #c3c3c3,21px 30px #c3c3c3,24px 30px #c3c3c3,27px 30px #c3c3c3,30px 30px #c3c3c3,33px 30px #c3c3c3,36px 30px #c3c3c3,39px 30px #c3c3c3,42px 30px #c3c3c3,45px 30px #c3c3c3;
966 | }
967 |
968 | .snes-logo {
969 | position: relative;
970 | display: inline-block;
971 | width: 48px;
972 | height: 33px;
973 | }
974 |
975 | .snes-logo::before {
976 | position: absolute;
977 | top: -3px;
978 | left: -3px;
979 | content: "";
980 | background: transparent;
981 | width: 3px;
982 | height: 3px;
983 | box-shadow: 21px 3px #333,21px 6px #333,24px 9px #333,9px 12px #333,12px 12px #333,15px 12px #333,18px 12px #333,21px 12px #333,24px 12px #333,27px 12px #333,30px 12px #333,33px 12px #333,36px 12px #333,39px 12px #333,6px 15px #333,9px 15px #d7d7d7,12px 15px #d7d7d7,15px 15px #d7d7d7,18px 15px #d7d7d7,21px 15px #d7d7d7,24px 15px #d7d7d7,27px 15px #d7d7d7,30px 15px #d7d7d7,33px 15px #d7d7d7,36px 15px #d7d7d7,39px 15px #d7d7d7,42px 15px #333,3px 18px #333,6px 18px #d7d7d7,9px 18px #d7d7d7,12px 18px #333,15px 18px #d7d7d7,18px 18px #d7d7d7,21px 18px #d7d7d7,24px 18px #d7d7d7,27px 18px #d7d7d7,30px 18px #d7d7d7,33px 18px #d7d7d7,36px 18px #999cf7,39px 18px #d7d7d7,42px 18px #d7d7d7,45px 18px #333,3px 21px #333,6px 21px #d7d7d7,9px 21px #333,12px 21px #333,15px 21px #333,18px 21px #d7d7d7,21px 21px #d7d7d7,24px 21px #d7d7d7,27px 21px #d7d7d7,30px 21px #d7d7d7,33px 21px #7dbb78,36px 21px #d7d7d7,39px 21px #f40500,42px 21px #d7d7d7,45px 21px #333,3px 24px #333,6px 24px #d7d7d7,9px 24px #d7d7d7,12px 24px #333,15px 24px #d7d7d7,18px 24px #d7d7d7,21px 24px #333,24px 24px #d7d7d7,27px 24px #333,30px 24px #d7d7d7,33px 24px #d7d7d7,36px 24px #f6f504,39px 24px #d7d7d7,42px 24px #d7d7d7,45px 24px #333,6px 27px #333,9px 27px #d7d7d7,12px 27px #d7d7d7,15px 27px #d7d7d7,18px 27px #d7d7d7,21px 27px #d7d7d7,24px 27px #d7d7d7,27px 27px #d7d7d7,30px 27px #d7d7d7,33px 27px #d7d7d7,36px 27px #d7d7d7,39px 27px #d7d7d7,42px 27px #333,9px 30px #333,12px 30px #333,15px 30px #333,18px 30px #333,21px 30px #333,24px 30px #333,27px 30px #333,30px 30px #333,33px 30px #333,36px 30px #333,39px 30px #333;;
984 | }
985 |
986 | .bcrikko {
987 | position: relative;
988 | display: inline-block;
989 | width: 64px;
990 | height: 64px;
991 | }
992 |
993 | .bcrikko::before {
994 | position: absolute;
995 | top: -4px;
996 | left: -4px;
997 | content: "";
998 | background: transparent;
999 | width: 4px;
1000 | height: 4px;
1001 | box-shadow: 8px 4px #f9f2d7,12px 4px #f9f2d7,16px 4px #f9f2d7,20px 4px #f9f2d7,24px 4px #f9f2d7,28px 4px #f9f2d7,32px 4px #f9f2d7,36px 4px #f9f2d7,40px 4px #f9f2d7,44px 4px #f9f2d7,48px 4px #f9f2d7,52px 4px #f9f2d7,56px 4px #f9f2d7,60px 4px #f9f2d7,4px 8px #f9f2d7,8px 8px #f9f2d7,12px 8px #f9f2d7,16px 8px #f9f2d7,20px 8px #f9f2d7,24px 8px #f9f2d7,28px 8px #f9f2d7,32px 8px #f9f2d7,36px 8px #f9f2d7,40px 8px #f9f2d7,44px 8px #f9f2d7,48px 8px #f9f2d7,52px 8px #f9f2d7,56px 8px #f9f2d7,60px 8px #f9f2d7,64px 8px #f9f2d7,4px 12px #f9f2d7,8px 12px #f9f2d7,12px 12px #f9f2d7,16px 12px #f9f2d7,20px 12px #f9f2d7,24px 12px #f9f2d7,28px 12px #f9f2d7,32px 12px #f9f2d7,36px 12px #f9f2d7,40px 12px #f9f2d7,44px 12px #f9f2d7,48px 12px #f9f2d7,52px 12px #f9f2d7,56px 12px #f9f2d7,60px 12px #f9f2d7,64px 12px #f9f2d7,4px 16px #f9f2d7,8px 16px #f9f2d7,12px 16px #f9f2d7,16px 16px #f9f2d7,20px 16px #333,24px 16px #333,28px 16px #f9f2d7,32px 16px #f9f2d7,36px 16px #f9f2d7,40px 16px #f9f2d7,44px 16px #333,48px 16px #333,52px 16px #f9f2d7,56px 16px #f9f2d7,60px 16px #f9f2d7,64px 16px #f9f2d7,4px 20px #f9f2d7,8px 20px #f9f2d7,12px 20px #f9f2d7,16px 20px #333,20px 20px #333,24px 20px #fff,28px 20px #333,32px 20px #f9f2d7,36px 20px #f9f2d7,40px 20px #333,44px 20px #333,48px 20px #fff,52px 20px #333,56px 20px #f9f2d7,60px 20px #f9f2d7,64px 20px #f9f2d7,4px 24px #f9f2d7,8px 24px #f9f2d7,12px 24px #f9f2d7,16px 24px #333,20px 24px #333,24px 24px #333,28px 24px #333,32px 24px #f9f2d7,36px 24px #f9f2d7,40px 24px #333,44px 24px #333,48px 24px #333,52px 24px #333,56px 24px #f9f2d7,60px 24px #f9f2d7,64px 24px #f9f2d7,4px 28px #f9f2d7,8px 28px #f9f2d7,12px 28px #f9f2d7,16px 28px #333,20px 28px #333,24px 28px #333,28px 28px #333,32px 28px #f9f2d7,36px 28px #f9f2d7,40px 28px #333,44px 28px #333,48px 28px #333,52px 28px #333,56px 28px #f9f2d7,60px 28px #f9f2d7,64px 28px #f9f2d7,4px 32px #f9f2d7,8px 32px #f9f2d7,12px 32px #f9f2d7,16px 32px #333,20px 32px #333,24px 32px #333,28px 32px #333,32px 32px #f9f2d7,36px 32px #f9f2d7,40px 32px #333,44px 32px #333,48px 32px #333,52px 32px #333,56px 32px #f9f2d7,60px 32px #f9f2d7,64px 32px #f9f2d7,4px 36px #f9f2d7,8px 36px #f9f2d7,12px 36px #f9f2d7,16px 36px #f9f2d7,20px 36px #333,24px 36px #333,28px 36px #f9f2d7,32px 36px #f9f2d7,36px 36px #f9f2d7,40px 36px #f9f2d7,44px 36px #333,48px 36px #333,52px 36px #f9f2d7,56px 36px #f9f2d7,60px 36px #f9f2d7,64px 36px #f9f2d7,4px 40px #f9f2d7,8px 40px #f9f2d7,12px 40px #f9f2d7,16px 40px #f9f2d7,20px 40px #f9f2d7,24px 40px #f9f2d7,28px 40px #f9f2d7,32px 40px #f9f2d7,36px 40px #f9f2d7,40px 40px #f9f2d7,44px 40px #f9f2d7,48px 40px #f9f2d7,52px 40px #f9f2d7,56px 40px #f9f2d7,60px 40px #f9f2d7,64px 40px #f9f2d7,4px 44px #f9f2d7,8px 44px #f9f2d7,12px 44px #f9f2d7,16px 44px #f9f2d7,20px 44px #f9f2d7,24px 44px #f9f2d7,28px 44px #f9f2d7,32px 44px #f9f2d7,36px 44px #f9f2d7,40px 44px #f9f2d7,44px 44px #f9f2d7,48px 44px #f9f2d7,52px 44px #f9f2d7,56px 44px #f9f2d7,60px 44px #f9f2d7,64px 44px #f9f2d7,4px 48px #f9f2d7,8px 48px #f9f2d7,12px 48px #f9f2d7,16px 48px #c5090c,20px 48px #f9f2d7,24px 48px #f9f2d7,28px 48px #f9f2d7,32px 48px #f9f2d7,36px 48px #f9f2d7,40px 48px #f9f2d7,44px 48px #f9f2d7,48px 48px #f9f2d7,52px 48px #c5090c,56px 48px #f9f2d7,60px 48px #f9f2d7,64px 48px #f9f2d7,4px 52px #f9f2d7,8px 52px #f9f2d7,12px 52px #f9f2d7,16px 52px #c5090c,20px 52px #f9f2d7,24px 52px #f9f2d7,28px 52px #f9f2d7,32px 52px #f9f2d7,36px 52px #f9f2d7,40px 52px #f9f2d7,44px 52px #f9f2d7,48px 52px #f9f2d7,52px 52px #c5090c,56px 52px #f9f2d7,60px 52px #f9f2d7,64px 52px #f9f2d7,4px 56px #f9f2d7,8px 56px #f9f2d7,12px 56px #f9f2d7,16px 56px #f9f2d7,20px 56px #c5090c,24px 56px #c5090c,28px 56px #c5090c,32px 56px #c5090c,36px 56px #c5090c,40px 56px #c5090c,44px 56px #c5090c,48px 56px #c5090c,52px 56px #f9f2d7,56px 56px #f9f2d7,60px 56px #f9f2d7,64px 56px #f9f2d7,4px 60px #f9f2d7,8px 60px #f9f2d7,12px 60px #f9f2d7,16px 60px #f9f2d7,20px 60px #f9f2d7,24px 60px #f9f2d7,28px 60px #f9f2d7,32px 60px #f9f2d7,36px 60px #f9f2d7,40px 60px #f9f2d7,44px 60px #f9f2d7,48px 60px #f9f2d7,52px 60px #f9f2d7,56px 60px #f9f2d7,60px 60px #f9f2d7,64px 60px #f9f2d7,8px 64px #f9f2d7,12px 64px #f9f2d7,16px 64px #f9f2d7,20px 64px #f9f2d7,24px 64px #f9f2d7,28px 64px #f9f2d7,32px 64px #f9f2d7,36px 64px #f9f2d7,40px 64px #f9f2d7,44px 64px #f9f2d7,48px 64px #f9f2d7,52px 64px #f9f2d7,56px 64px #f9f2d7,60px 64px #f9f2d7;;
1002 | }
1003 |
1004 | .octocat {
1005 | position: relative;
1006 | display: inline-block;
1007 | width: 84px;
1008 | height: 90px;
1009 | }
1010 |
1011 | .octocat::before {
1012 | position: absolute;
1013 | top: -6px;
1014 | left: -6px;
1015 | content: "";
1016 | background: transparent;
1017 | width: 6px;
1018 | height: 6px;
1019 | box-shadow: 24px 6px #333,78px 6px #333,24px 12px #333,30px 12px #333,72px 12px #333,78px 12px #333,24px 18px #333,30px 18px #333,36px 18px #333,42px 18px #333,48px 18px #333,54px 18px #333,60px 18px #333,66px 18px #333,72px 18px #333,78px 18px #333,18px 24px #333,24px 24px #333,30px 24px #333,36px 24px #333,42px 24px #333,48px 24px #333,54px 24px #333,60px 24px #333,66px 24px #333,72px 24px #333,78px 24px #333,84px 24px #333,18px 30px #333,24px 30px #333,30px 30px #333,36px 30px #333,42px 30px #333,48px 30px #333,54px 30px #333,60px 30px #333,66px 30px #333,72px 30px #333,78px 30px #333,84px 30px #333,18px 36px #333,24px 36px #333,30px 36px #333,36px 36px #ffdec4,42px 36px #ffdec4,48px 36px #ffdec4,54px 36px #ffdec4,60px 36px #ffdec4,66px 36px #ffdec4,72px 36px #333,78px 36px #333,84px 36px #333,18px 42px #333,24px 42px #333,30px 42px #ffdec4,36px 42px #cb7066,42px 42px #ffdec4,48px 42px #ffdec4,54px 42px #ffdec4,60px 42px #ffdec4,66px 42px #cb7066,72px 42px #ffdec4,78px 42px #333,84px 42px #333,18px 48px #333,24px 48px #333,30px 48px #ffdec4,36px 48px #cb7066,42px 48px #ffdec4,48px 48px #ffdec4,54px 48px #ffdec4,60px 48px #ffdec4,66px 48px #cb7066,72px 48px #ffdec4,78px 48px #333,84px 48px #333,24px 54px #333,30px 54px #333,36px 54px #ffdec4,42px 54px #ffdec4,48px 54px #cb7066,54px 54px #cb7066,60px 54px #ffdec4,66px 54px #ffdec4,72px 54px #333,78px 54px #333,6px 60px #333,12px 60px #333,42px 60px #333,48px 60px #333,54px 60px #333,60px 60px #333,18px 66px #333,24px 66px #333,36px 66px #333,42px 66px #333,48px 66px #333,54px 66px #333,60px 66px #333,66px 66px #333,24px 72px #333,30px 72px #333,36px 72px #333,42px 72px #333,48px 72px #333,54px 72px #333,60px 72px #333,66px 72px #333,36px 78px #333,48px 78px #333,54px 78px #333,66px 78px #333,36px 84px #333,48px 84px #333,54px 84px #333,66px 84px #333,30px 90px #333,42px 90px #333,60px 90px #333,72px 90px #333;;
1020 | }
1021 |
1022 | .octocat.animate::before {
1023 | animation: wave 0.5s infinite steps(1);
1024 | }
1025 |
1026 | @keyframes wave {
1027 | 0% {
1028 | width: 6px;
1029 | height: 6px;
1030 | box-shadow: 24px 6px #333,78px 6px #333,24px 12px #333,30px 12px #333,72px 12px #333,78px 12px #333,24px 18px #333,30px 18px #333,36px 18px #333,42px 18px #333,48px 18px #333,54px 18px #333,60px 18px #333,66px 18px #333,72px 18px #333,78px 18px #333,18px 24px #333,24px 24px #333,30px 24px #333,36px 24px #333,42px 24px #333,48px 24px #333,54px 24px #333,60px 24px #333,66px 24px #333,72px 24px #333,78px 24px #333,84px 24px #333,18px 30px #333,24px 30px #333,30px 30px #333,36px 30px #333,42px 30px #333,48px 30px #333,54px 30px #333,60px 30px #333,66px 30px #333,72px 30px #333,78px 30px #333,84px 30px #333,18px 36px #333,24px 36px #333,30px 36px #333,36px 36px #ffdec4,42px 36px #ffdec4,48px 36px #ffdec4,54px 36px #ffdec4,60px 36px #ffdec4,66px 36px #ffdec4,72px 36px #333,78px 36px #333,84px 36px #333,18px 42px #333,24px 42px #333,30px 42px #ffdec4,36px 42px #cb7066,42px 42px #ffdec4,48px 42px #ffdec4,54px 42px #ffdec4,60px 42px #ffdec4,66px 42px #cb7066,72px 42px #ffdec4,78px 42px #333,84px 42px #333,18px 48px #333,24px 48px #333,30px 48px #ffdec4,36px 48px #cb7066,42px 48px #ffdec4,48px 48px #ffdec4,54px 48px #ffdec4,60px 48px #ffdec4,66px 48px #cb7066,72px 48px #ffdec4,78px 48px #333,84px 48px #333,24px 54px #333,30px 54px #333,36px 54px #ffdec4,42px 54px #ffdec4,48px 54px #cb7066,54px 54px #cb7066,60px 54px #ffdec4,66px 54px #ffdec4,72px 54px #333,78px 54px #333,6px 60px #333,12px 60px #333,42px 60px #333,48px 60px #333,54px 60px #333,60px 60px #333,18px 66px #333,24px 66px #333,36px 66px #333,42px 66px #333,48px 66px #333,54px 66px #333,60px 66px #333,66px 66px #333,24px 72px #333,30px 72px #333,36px 72px #333,42px 72px #333,48px 72px #333,54px 72px #333,60px 72px #333,66px 72px #333,36px 78px #333,48px 78px #333,54px 78px #333,66px 78px #333,36px 84px #333,48px 84px #333,54px 84px #333,66px 84px #333,30px 90px #333,42px 90px #333,60px 90px #333,72px 90px #333;;
1031 | }
1032 | 50% {
1033 | width: 6px;
1034 | height: 6px;
1035 | box-shadow: 24px 6px #333,78px 6px #333,24px 12px #333,30px 12px #333,72px 12px #333,78px 12px #333,24px 18px #333,30px 18px #333,36px 18px #333,42px 18px #333,48px 18px #333,54px 18px #333,60px 18px #333,66px 18px #333,72px 18px #333,78px 18px #333,18px 24px #333,24px 24px #333,30px 24px #333,36px 24px #333,42px 24px #333,48px 24px #333,54px 24px #333,60px 24px #333,66px 24px #333,72px 24px #333,78px 24px #333,84px 24px #333,18px 30px #333,24px 30px #333,30px 30px #333,36px 30px #333,42px 30px #333,48px 30px #333,54px 30px #333,60px 30px #333,66px 30px #333,72px 30px #333,78px 30px #333,84px 30px #333,18px 36px #333,24px 36px #333,30px 36px #333,36px 36px #ffdec4,42px 36px #ffdec4,48px 36px #ffdec4,54px 36px #ffdec4,60px 36px #ffdec4,66px 36px #ffdec4,72px 36px #333,78px 36px #333,84px 36px #333,18px 42px #333,24px 42px #333,30px 42px #ffdec4,36px 42px #ffdec4,42px 42px #ffdec4,48px 42px #ffdec4,54px 42px #ffdec4,60px 42px #ffdec4,66px 42px #ffdec4,72px 42px #ffdec4,78px 42px #333,84px 42px #333,12px 48px #333,18px 48px #333,24px 48px #333,30px 48px #ffdec4,36px 48px #cb7066,42px 48px #ffdec4,48px 48px #ffdec4,54px 48px #ffdec4,60px 48px #ffdec4,66px 48px #cb7066,72px 48px #ffdec4,78px 48px #333,84px 48px #333,12px 54px #333,24px 54px #333,30px 54px #333,36px 54px #ffdec4,42px 54px #ffdec4,48px 54px #cb7066,54px 54px #cb7066,60px 54px #ffdec4,66px 54px #ffdec4,72px 54px #333,78px 54px #333,18px 60px #333,42px 60px #333,48px 60px #333,54px 60px #333,60px 60px #333,24px 66px #333,36px 66px #333,42px 66px #333,48px 66px #333,54px 66px #333,60px 66px #333,66px 66px #333,24px 72px #333,30px 72px #333,36px 72px #333,42px 72px #333,48px 72px #333,54px 72px #333,60px 72px #333,66px 72px #333,36px 78px #333,48px 78px #333,54px 78px #333,66px 78px #333,36px 84px #333,48px 84px #333,54px 84px #333,66px 84px #333,30px 90px #333,42px 90px #333,60px 90px #333,72px 90px #333;;
1036 | }
1037 | }
1038 | /*# sourceMappingURL=nes.css.map */
--------------------------------------------------------------------------------