mirror of
				https://github.com/aurora-dot/pastel.codes.git
				synced 2025-11-04 09:01:34 +00:00 
			
		
		
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			65c2601b61
			...
			snyk-fix-8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7ff9f6f361 | ||
| 8449b30401 | |||
| 80813d48e3 | |||
| 
						 | 
					96d69992a0 | ||
| 
						 | 
					138a8de86c | ||
| 
						 | 
					7d230410f1 | ||
| 
						 | 
					6850b3152e | ||
| 
						 | 
					fc85964ed9 | ||
| de6ab6277b | |||
| 61a0713ad5 | |||
| f475c89e27 | 
							
								
								
									
										15
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
# EditorConfig is awesome: https://EditorConfig.org
 | 
			
		||||
 | 
			
		||||
# top-most EditorConfig file
 | 
			
		||||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
charset = utf-8
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
insert_final_newline = false
 | 
			
		||||
 | 
			
		||||
[pug.ts]
 | 
			
		||||
indent_size = 4
 | 
			
		||||
							
								
								
									
										3
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": ["prettier"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
# For most projects, this workflow file will not need changing; you simply need
 | 
			
		||||
# to commit it to your repository.
 | 
			
		||||
#
 | 
			
		||||
# You may wish to alter this file to override the set of languages analyzed,
 | 
			
		||||
# or to provide custom queries or build logic.
 | 
			
		||||
#
 | 
			
		||||
# ******** NOTE ********
 | 
			
		||||
# We have attempted to detect the languages in your repository. Please check
 | 
			
		||||
# the `language` matrix defined below to confirm you have the correct set of
 | 
			
		||||
# supported CodeQL languages.
 | 
			
		||||
#
 | 
			
		||||
name: "CodeQL"
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: [ master ]
 | 
			
		||||
  pull_request:
 | 
			
		||||
    # The branches below must be a subset of the branches above
 | 
			
		||||
    branches: [ master ]
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: '38 12 * * 3'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  analyze:
 | 
			
		||||
    name: Analyze
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      actions: read
 | 
			
		||||
      contents: read
 | 
			
		||||
      security-events: write
 | 
			
		||||
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        language: [ 'javascript' ]
 | 
			
		||||
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
 | 
			
		||||
        # Learn more:
 | 
			
		||||
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout repository
 | 
			
		||||
      uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    # Initializes the CodeQL tools for scanning.
 | 
			
		||||
    - name: Initialize CodeQL
 | 
			
		||||
      uses: github/codeql-action/init@v1
 | 
			
		||||
      with:
 | 
			
		||||
        languages: ${{ matrix.language }}
 | 
			
		||||
        # If you wish to specify custom queries, you can do so here or in a config file.
 | 
			
		||||
        # By default, queries listed here will override any specified in a config file.
 | 
			
		||||
        # Prefix the list here with "+" to use these queries and those in the config file.
 | 
			
		||||
        # queries: ./path/to/local/query, your-org/your-repo/queries@main
 | 
			
		||||
 | 
			
		||||
    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
			
		||||
    # If this step fails, then you should remove it and run the build manually (see below)
 | 
			
		||||
    - name: Autobuild
 | 
			
		||||
      uses: github/codeql-action/autobuild@v1
 | 
			
		||||
 | 
			
		||||
    # ℹ️ Command-line programs to run using the OS shell.
 | 
			
		||||
    # 📚 https://git.io/JvXDl
 | 
			
		||||
 | 
			
		||||
    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
 | 
			
		||||
    #    and modify them (or add more) to build your code if your project
 | 
			
		||||
    #    uses a compiled language
 | 
			
		||||
 | 
			
		||||
    #- run: |
 | 
			
		||||
    #   make bootstrap
 | 
			
		||||
    #   make release
 | 
			
		||||
 | 
			
		||||
    - name: Perform CodeQL Analysis
 | 
			
		||||
      uses: github/codeql-action/analyze@v1
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -198,4 +198,6 @@ notes
 | 
			
		||||
 | 
			
		||||
.secrets
 | 
			
		||||
 | 
			
		||||
public/stylesheets/style.css
 | 
			
		||||
public/stylesheets/style.css
 | 
			
		||||
ngrok
 | 
			
		||||
.dccache
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
_
 | 
			
		||||
							
								
								
									
										4
									
								
								.husky/pre-commit
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.husky/pre-commit
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
. "$(dirname "$0")/_/husky.sh"
 | 
			
		||||
 | 
			
		||||
npx lint-staged
 | 
			
		||||
							
								
								
									
										8
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "trailingComma": "es5",
 | 
			
		||||
  "semi": true,
 | 
			
		||||
  "tabWidth": 2,
 | 
			
		||||
  "singleQuote": true,
 | 
			
		||||
  "jsxSingleQuote": true,
 | 
			
		||||
  "plugins": ["prettier-plugin-tailwindcss"]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +1,13 @@
 | 
			
		||||
FROM node:10.19.0
 | 
			
		||||
FROM node:16-bullseye-slim
 | 
			
		||||
 | 
			
		||||
ENV IS_DOCKER=true
 | 
			
		||||
ENV NODE_ENV=production
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
COPY ["package.json", "package-lock.json*", "./"]
 | 
			
		||||
RUN npm install && npm install nodemon
 | 
			
		||||
RUN npm install
 | 
			
		||||
RUN npm install nodemon
 | 
			
		||||
COPY . .
 | 
			
		||||
RUN npm run build-tailwind
 | 
			
		||||
 | 
			
		||||
CMD [ "npm", "start" ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
# pastel.codes
 | 
			
		||||
 | 
			
		||||
My portfolio website written in node.js, pug and sass
 | 
			
		||||
My portfolio website written in node.js, pug and tailwind
 | 
			
		||||
 | 
			
		||||
Docker image: https://hub.docker.com/r/auroradot/pastel.codes
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								app.js
									
									
									
									
									
								
							@@ -4,7 +4,7 @@ var path = require('path');
 | 
			
		||||
var cookieParser = require('cookie-parser');
 | 
			
		||||
var mLogger = require('morgan');
 | 
			
		||||
var logger = require('./config/winston');
 | 
			
		||||
const helmet = require("helmet");
 | 
			
		||||
const helmet = require('helmet');
 | 
			
		||||
 | 
			
		||||
var indexRouter = require('./routes/index');
 | 
			
		||||
var aboutRouter = require('./routes/about');
 | 
			
		||||
@@ -12,7 +12,8 @@ var contactRouter = require('./routes/contact');
 | 
			
		||||
 | 
			
		||||
var app = express();
 | 
			
		||||
 | 
			
		||||
if (process.env.IS_DOCKER != 'true') app.set('trust proxy', 'loopback,uniquelocal');
 | 
			
		||||
if (process.env.IS_DOCKER != 'true')
 | 
			
		||||
  app.set('trust proxy', 'loopback,uniquelocal');
 | 
			
		||||
app.disable('x-powered-by');
 | 
			
		||||
 | 
			
		||||
// view engine setup
 | 
			
		||||
@@ -20,26 +21,43 @@ app.set('views', path.join(__dirname, 'views'));
 | 
			
		||||
app.set('view engine', 'pug');
 | 
			
		||||
 | 
			
		||||
if (process.env.NODE_ENV === 'production') {
 | 
			
		||||
    app.use(mLogger("common", { "stream": logger.stream }));
 | 
			
		||||
  app.use(mLogger('common', { stream: logger.stream }));
 | 
			
		||||
} else {
 | 
			
		||||
    app.use(mLogger('dev'));
 | 
			
		||||
  app.use(mLogger('dev'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
app.use(helmet());
 | 
			
		||||
app.use(
 | 
			
		||||
    helmet.contentSecurityPolicy({
 | 
			
		||||
      directives: {
 | 
			
		||||
        defaultSrc: ["'self'"],
 | 
			
		||||
        scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://hcaptcha.com", "https://*.hcaptcha.com", "https://cdn.ravenjs.com/"],
 | 
			
		||||
        imgSrc: ["'self'", "https://blog.pastel.codes", "https://static.ghost.org", "https://secure.gravatar.com"],
 | 
			
		||||
        styleSrc: ["'self'", "'unsafe-inline'", "https://hcaptcha.com", "https://*.hcaptcha.com"],
 | 
			
		||||
        fontSrc: ["'self'", "data:"],
 | 
			
		||||
        frameSrc: ["https://hcaptcha.com", "https://*.hcaptcha.com"],
 | 
			
		||||
        objectSrc: ["'none'"],
 | 
			
		||||
        upgradeInsecureRequests: [],
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
  );
 | 
			
		||||
  helmet.contentSecurityPolicy({
 | 
			
		||||
    directives: {
 | 
			
		||||
      defaultSrc: ["'self'"],
 | 
			
		||||
      scriptSrc: [
 | 
			
		||||
        "'self'",
 | 
			
		||||
        "'unsafe-inline'",
 | 
			
		||||
        "'unsafe-eval'",
 | 
			
		||||
        'https://hcaptcha.com',
 | 
			
		||||
        'https://*.hcaptcha.com',
 | 
			
		||||
        'https://cdn.ravenjs.com/',
 | 
			
		||||
      ],
 | 
			
		||||
      imgSrc: [
 | 
			
		||||
        "'self'",
 | 
			
		||||
        'https://blog.pastel.codes',
 | 
			
		||||
        'https://static.ghost.org',
 | 
			
		||||
        'https://secure.gravatar.com',
 | 
			
		||||
      ],
 | 
			
		||||
      styleSrc: [
 | 
			
		||||
        "'self'",
 | 
			
		||||
        "'unsafe-inline'",
 | 
			
		||||
        'https://hcaptcha.com',
 | 
			
		||||
        'https://*.hcaptcha.com',
 | 
			
		||||
      ],
 | 
			
		||||
      fontSrc: ["'self'", 'data:'],
 | 
			
		||||
      frameSrc: ['https://hcaptcha.com', 'https://*.hcaptcha.com'],
 | 
			
		||||
      objectSrc: ["'none'"],
 | 
			
		||||
      upgradeInsecureRequests: [],
 | 
			
		||||
    },
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
app.use(express.json());
 | 
			
		||||
app.use(express.urlencoded({ extended: false }));
 | 
			
		||||
@@ -51,19 +69,19 @@ app.use('/about', aboutRouter);
 | 
			
		||||
app.use('/contact', contactRouter);
 | 
			
		||||
 | 
			
		||||
// catch 404 and forward to error handler
 | 
			
		||||
app.use(function(req, res, next) {
 | 
			
		||||
    next(createError(404));
 | 
			
		||||
app.use(function (req, res, next) {
 | 
			
		||||
  next(createError(404));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// error handler
 | 
			
		||||
app.use(function(err, req, res, next) {
 | 
			
		||||
    // set locals, only providing error in development
 | 
			
		||||
    res.locals.message = err.message;
 | 
			
		||||
    res.locals.error = req.app.get('env') === 'development' ? err : {};
 | 
			
		||||
app.use(function (err, req, res, _next) {
 | 
			
		||||
  // set locals, only providing error in development
 | 
			
		||||
  res.locals.message = err.message;
 | 
			
		||||
  res.locals.error = req.app.get('env') === 'development' ? err : {};
 | 
			
		||||
 | 
			
		||||
    // render the error page
 | 
			
		||||
    res.status(err.status || 500);
 | 
			
		||||
    res.render('error', { title: 'Error', description: "Error" });
 | 
			
		||||
  // render the error page
 | 
			
		||||
  res.status(err.status || 500);
 | 
			
		||||
  res.render('error', { title: 'Error', description: 'Error' });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = app;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								bin/www
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								bin/www
									
									
									
									
									
								
							@@ -35,19 +35,19 @@ server.on('listening', onListening);
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function normalizePort(val) {
 | 
			
		||||
    var port = parseInt(val, 10);
 | 
			
		||||
  var port = parseInt(val, 10);
 | 
			
		||||
 | 
			
		||||
    if (isNaN(port)) {
 | 
			
		||||
        // named pipe
 | 
			
		||||
        return val;
 | 
			
		||||
    }
 | 
			
		||||
  if (isNaN(port)) {
 | 
			
		||||
    // named pipe
 | 
			
		||||
    return val;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    if (port >= 0) {
 | 
			
		||||
        // port number
 | 
			
		||||
        return port;
 | 
			
		||||
    }
 | 
			
		||||
  if (port >= 0) {
 | 
			
		||||
    // port number
 | 
			
		||||
    return port;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -55,27 +55,25 @@ function normalizePort(val) {
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function onError(error) {
 | 
			
		||||
    if (error.syscall !== 'listen') {
 | 
			
		||||
        throw error;
 | 
			
		||||
    }
 | 
			
		||||
  if (error.syscall !== 'listen') {
 | 
			
		||||
    throw error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    var bind = typeof port === 'string'
 | 
			
		||||
        ? 'Pipe ' + port
 | 
			
		||||
        : 'Port ' + port;
 | 
			
		||||
  var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
 | 
			
		||||
 | 
			
		||||
    // handle specific listen errors with friendly messages
 | 
			
		||||
    switch (error.code) {
 | 
			
		||||
        case 'EACCES':
 | 
			
		||||
            console.error(bind + ' requires elevated privileges');
 | 
			
		||||
            process.exit(1);
 | 
			
		||||
            break;
 | 
			
		||||
        case 'EADDRINUSE':
 | 
			
		||||
            console.error(bind + ' is already in use');
 | 
			
		||||
            process.exit(1);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            throw error;
 | 
			
		||||
    }
 | 
			
		||||
  // handle specific listen errors with friendly messages
 | 
			
		||||
  switch (error.code) {
 | 
			
		||||
    case 'EACCES':
 | 
			
		||||
      console.error(bind + ' requires elevated privileges');
 | 
			
		||||
      process.exit(1);
 | 
			
		||||
      break;
 | 
			
		||||
    case 'EADDRINUSE':
 | 
			
		||||
      console.error(bind + ' is already in use');
 | 
			
		||||
      process.exit(1);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      throw error;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -83,9 +81,7 @@ function onError(error) {
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function onListening() {
 | 
			
		||||
    var addr = server.address();
 | 
			
		||||
    var bind = typeof addr === 'string'
 | 
			
		||||
        ? 'pipe ' + addr
 | 
			
		||||
        : 'port ' + addr.port;
 | 
			
		||||
    debug('Listening on ' + bind);
 | 
			
		||||
  var addr = server.address();
 | 
			
		||||
  var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
 | 
			
		||||
  debug('Listening on ' + bind);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,29 +2,29 @@ var winston = require('winston');
 | 
			
		||||
var appRoot = require('app-root-path');
 | 
			
		||||
 | 
			
		||||
var logger = new winston.createLogger({
 | 
			
		||||
    transports: [
 | 
			
		||||
        new winston.transports.File({
 | 
			
		||||
            level: 'info',
 | 
			
		||||
            filename: `${appRoot}/logs/app.log`,
 | 
			
		||||
            handleExceptions: true,
 | 
			
		||||
            json: true,
 | 
			
		||||
            maxsize: 5242880, //5MB
 | 
			
		||||
            maxFiles: 5,
 | 
			
		||||
            colorize: false
 | 
			
		||||
        }),
 | 
			
		||||
        new winston.transports.Console({
 | 
			
		||||
            level: 'debug',
 | 
			
		||||
            handleExceptions: true,
 | 
			
		||||
            json: false,
 | 
			
		||||
            colorize: true
 | 
			
		||||
        })
 | 
			
		||||
    ],
 | 
			
		||||
    exitOnError: false
 | 
			
		||||
  transports: [
 | 
			
		||||
    new winston.transports.File({
 | 
			
		||||
      level: 'info',
 | 
			
		||||
      filename: `${appRoot}/logs/app.log`,
 | 
			
		||||
      handleExceptions: true,
 | 
			
		||||
      json: true,
 | 
			
		||||
      maxsize: 5242880, //5MB
 | 
			
		||||
      maxFiles: 5,
 | 
			
		||||
      colorize: false,
 | 
			
		||||
    }),
 | 
			
		||||
    new winston.transports.Console({
 | 
			
		||||
      level: 'debug',
 | 
			
		||||
      handleExceptions: true,
 | 
			
		||||
      json: false,
 | 
			
		||||
      colorize: true,
 | 
			
		||||
    }),
 | 
			
		||||
  ],
 | 
			
		||||
  exitOnError: false,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
logger.stream = {
 | 
			
		||||
    write: function(message, encoding){
 | 
			
		||||
        logger.info(message);
 | 
			
		||||
    }
 | 
			
		||||
  write: function (message, _encoding) {
 | 
			
		||||
    logger.info(message);
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
module.exports = logger
 | 
			
		||||
module.exports = logger;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								eslint.config.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								eslint.config.mjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
import globals from 'globals';
 | 
			
		||||
import pluginJs from '@eslint/js';
 | 
			
		||||
 | 
			
		||||
export default [
 | 
			
		||||
  { files: ['**/*.js'], languageOptions: { sourceType: 'commonjs' } },
 | 
			
		||||
  { languageOptions: { globals: { ...globals.browser, ...globals.node } } },
 | 
			
		||||
  pluginJs.configs.recommended,
 | 
			
		||||
  {
 | 
			
		||||
    rules: {
 | 
			
		||||
      'no-unused-vars': [
 | 
			
		||||
        'error',
 | 
			
		||||
        {
 | 
			
		||||
          argsIgnorePattern: '^_',
 | 
			
		||||
          varsIgnorePattern: '^_',
 | 
			
		||||
          caughtErrorsIgnorePattern: '^_',
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
							
								
								
									
										6970
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6970
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										42
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								package.json
									
									
									
									
									
								
							@@ -2,24 +2,56 @@
 | 
			
		||||
  "name": "pastel.codes",
 | 
			
		||||
  "version": "0.0.0",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "watch": {
 | 
			
		||||
    "build-tailwind": {
 | 
			
		||||
      "patterns": [
 | 
			
		||||
        "views/"
 | 
			
		||||
      ],
 | 
			
		||||
      "extensions": "pug"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1",
 | 
			
		||||
    "start": "npx node-sass -r public/stylesheets/style.sass -o public/stylesheets && npx nodemon ./bin/www -e js,pug,sass"
 | 
			
		||||
    "dev": "npx nodemon ./bin/www -e js,pug,sass",
 | 
			
		||||
    "start": "npx ./bin/www -e js,pug,sass",
 | 
			
		||||
    "watch-tailwind": "npx npm-watch",
 | 
			
		||||
    "build-tailwind": "npx postcss src/tailwind.css -o public/stylesheets/style.css",
 | 
			
		||||
    "lint": "prettier --check . && eslint .",
 | 
			
		||||
    "format": "prettier --write --ignore-path .gitignore .",
 | 
			
		||||
    "prepare": "husky install"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@sendgrid/mail": "^7.4.4",
 | 
			
		||||
    "@sendgrid/mail": "^8.1.3",
 | 
			
		||||
    "app-root-path": "^3.0.0",
 | 
			
		||||
    "axios": "^0.21.2",
 | 
			
		||||
    "autoprefixer": "^10.3.4",
 | 
			
		||||
    "axios": "^1.6.8",
 | 
			
		||||
    "cookie-parser": "^1.4.5",
 | 
			
		||||
    "debug": "^4.3.1",
 | 
			
		||||
    "express": "^4.17.1",
 | 
			
		||||
    "express-rate-limit": "^5.2.6",
 | 
			
		||||
    "hcaptcha": "^0.0.2",
 | 
			
		||||
    "helmet": "^4.6.0",
 | 
			
		||||
    "http-errors": "^1.8.0",
 | 
			
		||||
    "morgan": "^1.10.0",
 | 
			
		||||
    "nodemailer": "^6.6.0",
 | 
			
		||||
    "nodemailer": "^6.6.1",
 | 
			
		||||
    "npm-watch": "^0.12.0",
 | 
			
		||||
    "postcss-cli": "^8.3.1",
 | 
			
		||||
    "pug": "^3.0.2",
 | 
			
		||||
    "tailwind-hamburgers": "^1.1.1",
 | 
			
		||||
    "tailwindcss": "^2.2.15",
 | 
			
		||||
    "winston": "^3.3.3"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@eslint/js": "^9.1.1",
 | 
			
		||||
    "eslint": "^9.1.1",
 | 
			
		||||
    "eslint-config-prettier": "^9.1.0",
 | 
			
		||||
    "globals": "^15.1.0",
 | 
			
		||||
    "husky": "^9.0.11",
 | 
			
		||||
    "lint-staged": "^15.2.2",
 | 
			
		||||
    "prettier": "^3.2.5",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "^0.5.14"
 | 
			
		||||
  },
 | 
			
		||||
  "lint-staged": {
 | 
			
		||||
    "*.js": "eslint --cache --fix",
 | 
			
		||||
    "*.{js,css,md,pug}": "prettier --write"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
  plugins: [require('tailwindcss'), require('autoprefixer')],
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										7134
									
								
								public/javascript/bootstrap.bundle.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7134
									
								
								public/javascript/bootstrap.bundle.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										7
									
								
								public/javascript/bootstrap.bundle.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								public/javascript/bootstrap.bundle.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4521
									
								
								public/javascript/bootstrap.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4521
									
								
								public/javascript/bootstrap.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										7
									
								
								public/javascript/bootstrap.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								public/javascript/bootstrap.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
$(document).ready(function () {
 | 
			
		||||
    $('.ham-button').on('click', function () {
 | 
			
		||||
        $('.ham').toggleClass('open');
 | 
			
		||||
    $('#menu').on('click', function () {
 | 
			
		||||
        $('#menu').toggleClass('tham-active');
 | 
			
		||||
        $('#menu-items').slideToggle(300);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										3899
									
								
								public/stylesheets/bootstrap-grid.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3899
									
								
								public/stylesheets/bootstrap-grid.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								public/stylesheets/bootstrap-grid.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								public/stylesheets/bootstrap-grid.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										327
									
								
								public/stylesheets/bootstrap-reboot.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										327
									
								
								public/stylesheets/bootstrap-reboot.css
									
									
									
									
										vendored
									
									
								
							@@ -1,327 +0,0 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
 | 
			
		||||
 * Copyright 2011-2019 The Bootstrap Authors
 | 
			
		||||
 * Copyright 2011-2019 Twitter, Inc.
 | 
			
		||||
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 | 
			
		||||
 * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
 | 
			
		||||
 */
 | 
			
		||||
*,
 | 
			
		||||
*::before,
 | 
			
		||||
*::after {
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
html {
 | 
			
		||||
  font-family: sans-serif;
 | 
			
		||||
  line-height: 1.15;
 | 
			
		||||
  -webkit-text-size-adjust: 100%;
 | 
			
		||||
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  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";
 | 
			
		||||
  font-size: 1rem;
 | 
			
		||||
  font-weight: 400;
 | 
			
		||||
  line-height: 1.5;
 | 
			
		||||
  color: #212529;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[tabindex="-1"]:focus:not(:focus-visible) {
 | 
			
		||||
  outline: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
hr {
 | 
			
		||||
  box-sizing: content-box;
 | 
			
		||||
  height: 0;
 | 
			
		||||
  overflow: visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1, h2, h3, h4, h5, h6 {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 0.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
p {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
abbr[title],
 | 
			
		||||
abbr[data-original-title] {
 | 
			
		||||
  text-decoration: underline;
 | 
			
		||||
  -webkit-text-decoration: underline dotted;
 | 
			
		||||
  text-decoration: underline dotted;
 | 
			
		||||
  cursor: help;
 | 
			
		||||
  border-bottom: 0;
 | 
			
		||||
  -webkit-text-decoration-skip-ink: none;
 | 
			
		||||
  text-decoration-skip-ink: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
address {
 | 
			
		||||
  margin-bottom: 1rem;
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ol,
 | 
			
		||||
ul,
 | 
			
		||||
dl {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ol ol,
 | 
			
		||||
ul ul,
 | 
			
		||||
ol ul,
 | 
			
		||||
ul ol {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dt {
 | 
			
		||||
  font-weight: 700;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dd {
 | 
			
		||||
  margin-bottom: .5rem;
 | 
			
		||||
  margin-left: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
blockquote {
 | 
			
		||||
  margin: 0 0 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
b,
 | 
			
		||||
strong {
 | 
			
		||||
  font-weight: bolder;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
small {
 | 
			
		||||
  font-size: 80%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub,
 | 
			
		||||
sup {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  font-size: 75%;
 | 
			
		||||
  line-height: 0;
 | 
			
		||||
  vertical-align: baseline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub {
 | 
			
		||||
  bottom: -.25em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sup {
 | 
			
		||||
  top: -.5em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a {
 | 
			
		||||
  color: #007bff;
 | 
			
		||||
  text-decoration: none;
 | 
			
		||||
  background-color: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:hover {
 | 
			
		||||
  color: #0056b3;
 | 
			
		||||
  text-decoration: underline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:not([href]) {
 | 
			
		||||
  color: inherit;
 | 
			
		||||
  text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:not([href]):hover {
 | 
			
		||||
  color: inherit;
 | 
			
		||||
  text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre,
 | 
			
		||||
code,
 | 
			
		||||
kbd,
 | 
			
		||||
samp {
 | 
			
		||||
  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre {
 | 
			
		||||
  margin-top: 0;
 | 
			
		||||
  margin-bottom: 1rem;
 | 
			
		||||
  overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
figure {
 | 
			
		||||
  margin: 0 0 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img {
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  border-style: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
svg {
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
  border-collapse: collapse;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
caption {
 | 
			
		||||
  padding-top: 0.75rem;
 | 
			
		||||
  padding-bottom: 0.75rem;
 | 
			
		||||
  color: #6c757d;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
  caption-side: bottom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
th {
 | 
			
		||||
  text-align: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
label {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  margin-bottom: 0.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button {
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button:focus {
 | 
			
		||||
  outline: 1px dotted;
 | 
			
		||||
  outline: 5px auto -webkit-focus-ring-color;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input,
 | 
			
		||||
button,
 | 
			
		||||
select,
 | 
			
		||||
optgroup,
 | 
			
		||||
textarea {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  font-family: inherit;
 | 
			
		||||
  font-size: inherit;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button,
 | 
			
		||||
input {
 | 
			
		||||
  overflow: visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button,
 | 
			
		||||
select {
 | 
			
		||||
  text-transform: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
select {
 | 
			
		||||
  word-wrap: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button,
 | 
			
		||||
[type="button"],
 | 
			
		||||
[type="reset"],
 | 
			
		||||
[type="submit"] {
 | 
			
		||||
  -webkit-appearance: button;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button:not(:disabled),
 | 
			
		||||
[type="button"]:not(:disabled),
 | 
			
		||||
[type="reset"]:not(:disabled),
 | 
			
		||||
[type="submit"]:not(:disabled) {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button::-moz-focus-inner,
 | 
			
		||||
[type="button"]::-moz-focus-inner,
 | 
			
		||||
[type="reset"]::-moz-focus-inner,
 | 
			
		||||
[type="submit"]::-moz-focus-inner {
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  border-style: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input[type="radio"],
 | 
			
		||||
input[type="checkbox"] {
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input[type="date"],
 | 
			
		||||
input[type="time"],
 | 
			
		||||
input[type="datetime-local"],
 | 
			
		||||
input[type="month"] {
 | 
			
		||||
  -webkit-appearance: listbox;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
textarea {
 | 
			
		||||
  overflow: auto;
 | 
			
		||||
  resize: vertical;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fieldset {
 | 
			
		||||
  min-width: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  border: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
legend {
 | 
			
		||||
  display: block;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  max-width: 100%;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin-bottom: .5rem;
 | 
			
		||||
  font-size: 1.5rem;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
  color: inherit;
 | 
			
		||||
  white-space: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
progress {
 | 
			
		||||
  vertical-align: baseline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[type="number"]::-webkit-inner-spin-button,
 | 
			
		||||
[type="number"]::-webkit-outer-spin-button {
 | 
			
		||||
  height: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[type="search"] {
 | 
			
		||||
  outline-offset: -2px;
 | 
			
		||||
  -webkit-appearance: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[type="search"]::-webkit-search-decoration {
 | 
			
		||||
  -webkit-appearance: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
::-webkit-file-upload-button {
 | 
			
		||||
  font: inherit;
 | 
			
		||||
  -webkit-appearance: button;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
output {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
summary {
 | 
			
		||||
  display: list-item;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[hidden] {
 | 
			
		||||
  display: none !important;
 | 
			
		||||
}
 | 
			
		||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
 | 
			
		||||
							
								
								
									
										8
									
								
								public/stylesheets/bootstrap-reboot.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								public/stylesheets/bootstrap-reboot.min.css
									
									
									
									
										vendored
									
									
								
							@@ -1,8 +0,0 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
 | 
			
		||||
 * Copyright 2011-2019 The Bootstrap Authors
 | 
			
		||||
 * Copyright 2011-2019 Twitter, Inc.
 | 
			
		||||
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 | 
			
		||||
 * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
 | 
			
		||||
 */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;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";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
 | 
			
		||||
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
 | 
			
		||||
							
								
								
									
										10224
									
								
								public/stylesheets/bootstrap.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10224
									
								
								public/stylesheets/bootstrap.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								public/stylesheets/bootstrap.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								public/stylesheets/bootstrap.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										291
									
								
								public/stylesheets/old-style.sass
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										291
									
								
								public/stylesheets/old-style.sass
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,291 @@
 | 
			
		||||
$pink: #CC7A98
 | 
			
		||||
$black: #002234
 | 
			
		||||
$green: #CDE7B0
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
  font-family: 'Titling Gothic FB'
 | 
			
		||||
  src: url("../fonts/TITLINGGOTHICFB-WIDE.OTF") format('opentype')
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
  font-family: 'Gilroy'
 | 
			
		||||
  src: url("../fonts/Gilroy-ExtraBold.otf") format('opentype')
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
  font-family: 'Apercu Mono'
 | 
			
		||||
  src: url("../fonts/ApercuMono.ttf") format('truetype')
 | 
			
		||||
 | 
			
		||||
html, body
 | 
			
		||||
  width: 100%
 | 
			
		||||
  height: 100%
 | 
			
		||||
 | 
			
		||||
body
 | 
			
		||||
  background-color: $black
 | 
			
		||||
  color: $pink
 | 
			
		||||
 | 
			
		||||
h1
 | 
			
		||||
  font-family: "Gilroy", sans-serif
 | 
			
		||||
 | 
			
		||||
h2
 | 
			
		||||
  font-weight: bold
 | 
			
		||||
  font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
p, label, input, textarea
 | 
			
		||||
  font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
label
 | 
			
		||||
  font-size: 3vh
 | 
			
		||||
 | 
			
		||||
a:hover
 | 
			
		||||
  color: $green
 | 
			
		||||
 | 
			
		||||
article
 | 
			
		||||
  min-height: 100%
 | 
			
		||||
  display: grid
 | 
			
		||||
  grid-template-rows: auto 1fr auto
 | 
			
		||||
  grid-template-columns: 100%
 | 
			
		||||
 | 
			
		||||
header
 | 
			
		||||
  nav
 | 
			
		||||
    a
 | 
			
		||||
      span
 | 
			
		||||
        font-size: 2rem
 | 
			
		||||
        font-family: 'Titling Gothic FB', sans-serif
 | 
			
		||||
        color: $pink
 | 
			
		||||
 | 
			
		||||
        #navbarSupportedContent23
 | 
			
		||||
          ul
 | 
			
		||||
            background-color: $pink
 | 
			
		||||
            li
 | 
			
		||||
              transition: 0.5s
 | 
			
		||||
              background-color: $pink
 | 
			
		||||
              text-align: center
 | 
			
		||||
              a
 | 
			
		||||
                span
 | 
			
		||||
                  transition: 0.2s
 | 
			
		||||
                  color: $black
 | 
			
		||||
                  font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
                li:hover
 | 
			
		||||
                  background-color: $black
 | 
			
		||||
                  a
 | 
			
		||||
                    span
 | 
			
		||||
                      color: $pink
 | 
			
		||||
 | 
			
		||||
                .active
 | 
			
		||||
                  background-color: $black
 | 
			
		||||
                  a
 | 
			
		||||
                    span
 | 
			
		||||
                      color: $green
 | 
			
		||||
 | 
			
		||||
                .active:hover
 | 
			
		||||
                  background-color: $pink
 | 
			
		||||
                  a
 | 
			
		||||
                    span
 | 
			
		||||
                      color: $black
 | 
			
		||||
main
 | 
			
		||||
  padding: 0.5rem
 | 
			
		||||
  h1
 | 
			
		||||
    padding-bottom: 1rem
 | 
			
		||||
    font-size: 4.5rem
 | 
			
		||||
    span
 | 
			
		||||
      text-decoration: underline $pink
 | 
			
		||||
      text-decoration-style: wavy
 | 
			
		||||
    p
 | 
			
		||||
      font-size: 2rem
 | 
			
		||||
      margin-bottom: 5px
 | 
			
		||||
 | 
			
		||||
footer
 | 
			
		||||
  text-align: center
 | 
			
		||||
  font-size: 1rem
 | 
			
		||||
  padding: 0.5rem
 | 
			
		||||
  a
 | 
			
		||||
    color: $pink
 | 
			
		||||
    text-decoration: underline $pink
 | 
			
		||||
 | 
			
		||||
.ef
 | 
			
		||||
  max-height: 85vh
 | 
			
		||||
  min-height: 85vh !important
 | 
			
		||||
 | 
			
		||||
.error
 | 
			
		||||
  text-align: center
 | 
			
		||||
 | 
			
		||||
.pink-block
 | 
			
		||||
  background-color: $pink
 | 
			
		||||
  min-height: 100vh
 | 
			
		||||
 | 
			
		||||
.center-v
 | 
			
		||||
  min-height: 100% /* Fallback for browsers do NOT support vh unit */
 | 
			
		||||
  min-height: 100vh /* These two lines are counted as one :-) */
 | 
			
		||||
 | 
			
		||||
  display: flex
 | 
			
		||||
  align-items: center
 | 
			
		||||
 | 
			
		||||
.center-v-h
 | 
			
		||||
  display: flex
 | 
			
		||||
  justify-content: center
 | 
			
		||||
  align-items: center
 | 
			
		||||
  min-height: 100vh
 | 
			
		||||
 | 
			
		||||
.logos-container
 | 
			
		||||
  width: 3.5rem
 | 
			
		||||
 | 
			
		||||
.logo
 | 
			
		||||
  width: auto
 | 
			
		||||
  height: 3.5rem
 | 
			
		||||
  fill: $black
 | 
			
		||||
  margin-bottom: 2.5rem
 | 
			
		||||
 | 
			
		||||
.logo-container
 | 
			
		||||
  cursor: pointer
 | 
			
		||||
 | 
			
		||||
.about-pos
 | 
			
		||||
  p
 | 
			
		||||
    font-size: 3vh
 | 
			
		||||
    margin-bottom: 3vh
 | 
			
		||||
 | 
			
		||||
.pr
 | 
			
		||||
  img
 | 
			
		||||
    width: 100%
 | 
			
		||||
    border: 2vh solid $pink
 | 
			
		||||
    margin-bottom: 3vh
 | 
			
		||||
    margin-top: 1vh
 | 
			
		||||
 | 
			
		||||
.pr-text
 | 
			
		||||
  a
 | 
			
		||||
    color: $pink
 | 
			
		||||
    h1
 | 
			
		||||
 | 
			
		||||
      font-size: 4vh
 | 
			
		||||
      margin-bottom: 0
 | 
			
		||||
      padding-bottom: 0
 | 
			
		||||
    a:hover
 | 
			
		||||
      color: $green
 | 
			
		||||
    p
 | 
			
		||||
      font-size: 3vh
 | 
			
		||||
 | 
			
		||||
.start
 | 
			
		||||
  margin-top: 3vh
 | 
			
		||||
 | 
			
		||||
#contact-message
 | 
			
		||||
  margin-top: 2vh
 | 
			
		||||
  p
 | 
			
		||||
    color: $green
 | 
			
		||||
    span
 | 
			
		||||
      text-decoration: underline $green
 | 
			
		||||
 | 
			
		||||
.h-captcha
 | 
			
		||||
  margin-bottom: 0.5vh
 | 
			
		||||
 | 
			
		||||
.button-c
 | 
			
		||||
  display: inline-block
 | 
			
		||||
  font-weight: 400
 | 
			
		||||
  color: #212529
 | 
			
		||||
  text-align: center
 | 
			
		||||
  vertical-align: middle
 | 
			
		||||
  cursor: pointer
 | 
			
		||||
  user-select: none
 | 
			
		||||
  border: 1px solid $black
 | 
			
		||||
  padding: 0.375rem 0.75rem
 | 
			
		||||
  font-size: 1rem
 | 
			
		||||
  line-height: 1.5
 | 
			
		||||
  border-radius: 0.25rem
 | 
			
		||||
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out
 | 
			
		||||
  font-family: "Apercu Mono"
 | 
			
		||||
 | 
			
		||||
.button-c
 | 
			
		||||
  background-color: $pink
 | 
			
		||||
 | 
			
		||||
.button-c:hover
 | 
			
		||||
  background-color: $black
 | 
			
		||||
  color: $pink
 | 
			
		||||
  border-color: $pink
 | 
			
		||||
 | 
			
		||||
// Nav stuff
 | 
			
		||||
 | 
			
		||||
.ham
 | 
			
		||||
  width: 30px
 | 
			
		||||
  height: 20px
 | 
			
		||||
  position: relative
 | 
			
		||||
  margin: 0px
 | 
			
		||||
  -webkit-transform: rotate(0deg)
 | 
			
		||||
  -moz-transform: rotate(0deg)
 | 
			
		||||
  -o-transform: rotate(0deg)
 | 
			
		||||
  transform: rotate(0deg)
 | 
			
		||||
  -webkit-transition: .5s ease-in-out
 | 
			
		||||
  -moz-transition: .5s ease-in-out
 | 
			
		||||
  -o-transition: .5s ease-in-out
 | 
			
		||||
  transition: .5s ease-in-out
 | 
			
		||||
  cursor: pointer
 | 
			
		||||
 | 
			
		||||
.ham span
 | 
			
		||||
  display: block
 | 
			
		||||
  position: absolute
 | 
			
		||||
  height: 3px
 | 
			
		||||
  width: 100%
 | 
			
		||||
  border-radius: 9px
 | 
			
		||||
  opacity: 1
 | 
			
		||||
  left: 0
 | 
			
		||||
  -webkit-transform: rotate(0deg)
 | 
			
		||||
  -moz-transform: rotate(0deg)
 | 
			
		||||
  -o-transform: rotate(0deg)
 | 
			
		||||
  transform: rotate(0deg)
 | 
			
		||||
  -webkit-transition: .25s ease-in-out
 | 
			
		||||
  -moz-transition: .25s ease-in-out
 | 
			
		||||
  -o-transition: .25s ease-in-out
 | 
			
		||||
  transition: .25s ease-in-out
 | 
			
		||||
  background: $pink
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(1)
 | 
			
		||||
  top: 0
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(2), .ham span:nth-child(3)
 | 
			
		||||
  top: 10px
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(4)
 | 
			
		||||
  top: 20px
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(1)
 | 
			
		||||
  top: 11px
 | 
			
		||||
  width: 0
 | 
			
		||||
  left: 50%
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(2)
 | 
			
		||||
  -webkit-transform: rotate(45deg)
 | 
			
		||||
  -moz-transform: rotate(45deg)
 | 
			
		||||
  -o-transform: rotate(45deg)
 | 
			
		||||
  transform: rotate(45deg)
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(3)
 | 
			
		||||
  -webkit-transform: rotate(-45deg)
 | 
			
		||||
  -moz-transform: rotate(-45deg)
 | 
			
		||||
  -o-transform: rotate(-45deg)
 | 
			
		||||
  transform: rotate(-45deg)
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(4)
 | 
			
		||||
  top: 11px
 | 
			
		||||
  width: 0
 | 
			
		||||
  left: 50%
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-height: 421px)
 | 
			
		||||
  .pr-text
 | 
			
		||||
    margin-bottom: 5vh !important
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-width: 575px)
 | 
			
		||||
  .logo
 | 
			
		||||
    height: 5rem
 | 
			
		||||
    .logos-container
 | 
			
		||||
      width: 5rem
 | 
			
		||||
    .aaa
 | 
			
		||||
      min-height: 40vh !important
 | 
			
		||||
    .aaaa
 | 
			
		||||
      margin-top: 5vh !important
 | 
			
		||||
    .ef
 | 
			
		||||
      max-height: none !important
 | 
			
		||||
      min-height: 0 !important
 | 
			
		||||
    .ff
 | 
			
		||||
      min-height: 82.8vh !important
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-height: 815px)
 | 
			
		||||
  .ef
 | 
			
		||||
    max-height: none !important
 | 
			
		||||
    min-height: 0 !important
 | 
			
		||||
@@ -1,295 +0,0 @@
 | 
			
		||||
$pink: #CC7A98
 | 
			
		||||
$black: #002234
 | 
			
		||||
$green: #CDE7B0
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
    font-family: 'Titling Gothic FB'
 | 
			
		||||
    src: url("../fonts/TITLINGGOTHICFB-WIDE.OTF") format('opentype')
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
    font-family: 'Gilroy'
 | 
			
		||||
    src: url("../fonts/Gilroy-ExtraBold.otf") format('opentype')
 | 
			
		||||
 | 
			
		||||
@font-face
 | 
			
		||||
    font-family: 'Apercu Mono'
 | 
			
		||||
    src: url("../fonts/ApercuMono.ttf") format('truetype')
 | 
			
		||||
 | 
			
		||||
html, body
 | 
			
		||||
    width: 100%
 | 
			
		||||
    height: 100%
 | 
			
		||||
 | 
			
		||||
body
 | 
			
		||||
    background-color: $black
 | 
			
		||||
    color: $pink
 | 
			
		||||
 | 
			
		||||
h1
 | 
			
		||||
    font-family: "Gilroy", sans-serif
 | 
			
		||||
 | 
			
		||||
h2
 | 
			
		||||
    font-weight: bold
 | 
			
		||||
    font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
p, label, input, textarea
 | 
			
		||||
    font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
label
 | 
			
		||||
    font-size: 3vh
 | 
			
		||||
 | 
			
		||||
a:hover
 | 
			
		||||
    color: $green
 | 
			
		||||
 | 
			
		||||
article
 | 
			
		||||
    min-height: 100%
 | 
			
		||||
    display: grid
 | 
			
		||||
    grid-template-rows: auto 1fr auto
 | 
			
		||||
    grid-template-columns: 100%
 | 
			
		||||
 | 
			
		||||
header
 | 
			
		||||
    nav
 | 
			
		||||
        a
 | 
			
		||||
            span
 | 
			
		||||
                font-size: 2rem
 | 
			
		||||
                font-family: 'Titling Gothic FB', sans-serif
 | 
			
		||||
                color: $pink
 | 
			
		||||
 | 
			
		||||
        #navbarSupportedContent23
 | 
			
		||||
            ul
 | 
			
		||||
                background-color: $pink
 | 
			
		||||
                li
 | 
			
		||||
                    transition: 0.5s
 | 
			
		||||
                    background-color: $pink
 | 
			
		||||
                    text-align: center
 | 
			
		||||
                    a
 | 
			
		||||
                        span
 | 
			
		||||
                            transition: 0.2s
 | 
			
		||||
                            color: $black
 | 
			
		||||
                            font-family: "Apercu Mono", monospace
 | 
			
		||||
 | 
			
		||||
                li:hover
 | 
			
		||||
                    background-color: $black
 | 
			
		||||
                    a
 | 
			
		||||
                        span
 | 
			
		||||
                            color: $pink
 | 
			
		||||
 | 
			
		||||
                .active
 | 
			
		||||
                    background-color: $black
 | 
			
		||||
                    a
 | 
			
		||||
                        span
 | 
			
		||||
                            color: $green
 | 
			
		||||
 | 
			
		||||
                .active:hover
 | 
			
		||||
                    background-color: $pink
 | 
			
		||||
                    a
 | 
			
		||||
                        span
 | 
			
		||||
                            color: $black
 | 
			
		||||
main
 | 
			
		||||
    padding: 0.5rem
 | 
			
		||||
    h1
 | 
			
		||||
        padding-bottom: 1rem
 | 
			
		||||
        font-size: 4.5rem
 | 
			
		||||
        span
 | 
			
		||||
            text-decoration: underline $pink
 | 
			
		||||
            text-decoration-style: wavy
 | 
			
		||||
    p
 | 
			
		||||
        font-size: 2rem
 | 
			
		||||
        margin-bottom: 5px
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
footer
 | 
			
		||||
    text-align: center
 | 
			
		||||
    font-size: 1rem
 | 
			
		||||
    padding: 0.5rem
 | 
			
		||||
    a
 | 
			
		||||
        color: $pink
 | 
			
		||||
        text-decoration: underline $pink
 | 
			
		||||
 | 
			
		||||
.ef
 | 
			
		||||
    max-height: 85vh
 | 
			
		||||
    min-height: 85vh !important
 | 
			
		||||
 | 
			
		||||
.error
 | 
			
		||||
    text-align: center
 | 
			
		||||
 | 
			
		||||
.pink-block
 | 
			
		||||
    background-color: $pink
 | 
			
		||||
    min-height: 100vh
 | 
			
		||||
 | 
			
		||||
.center-v
 | 
			
		||||
    min-height: 100%  /* Fallback for browsers do NOT support vh unit */
 | 
			
		||||
    min-height: 100vh /* These two lines are counted as one :-)       */
 | 
			
		||||
 | 
			
		||||
    display: flex
 | 
			
		||||
    align-items: center
 | 
			
		||||
 | 
			
		||||
.center-v-h
 | 
			
		||||
    display: flex
 | 
			
		||||
    justify-content: center
 | 
			
		||||
    align-items: center
 | 
			
		||||
    min-height: 100vh
 | 
			
		||||
 | 
			
		||||
.logos-container
 | 
			
		||||
    width: 3.5rem
 | 
			
		||||
 | 
			
		||||
.logo
 | 
			
		||||
    width: auto
 | 
			
		||||
    height: 3.5rem
 | 
			
		||||
    fill: $black
 | 
			
		||||
    margin-bottom: 2.5rem
 | 
			
		||||
 | 
			
		||||
.logo-container
 | 
			
		||||
    cursor: pointer
 | 
			
		||||
 | 
			
		||||
.about-pos
 | 
			
		||||
    p
 | 
			
		||||
        font-size: 3vh
 | 
			
		||||
        margin-bottom: 3vh
 | 
			
		||||
 | 
			
		||||
.pr
 | 
			
		||||
    img
 | 
			
		||||
        width: 100%
 | 
			
		||||
        border: 2vh solid $pink
 | 
			
		||||
    margin-bottom: 3vh
 | 
			
		||||
    margin-top: 1vh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.pr-text
 | 
			
		||||
    a
 | 
			
		||||
        color: $pink
 | 
			
		||||
        h1
 | 
			
		||||
 | 
			
		||||
            font-size: 4vh
 | 
			
		||||
            margin-bottom: 0
 | 
			
		||||
            padding-bottom: 0
 | 
			
		||||
    a:hover
 | 
			
		||||
        color: $green
 | 
			
		||||
    p
 | 
			
		||||
        font-size: 3vh
 | 
			
		||||
 | 
			
		||||
.start
 | 
			
		||||
    margin-top: 3vh
 | 
			
		||||
 | 
			
		||||
#contact-message
 | 
			
		||||
    margin-top: 2vh
 | 
			
		||||
    p
 | 
			
		||||
        color: $green
 | 
			
		||||
        span
 | 
			
		||||
            text-decoration: underline $green
 | 
			
		||||
 | 
			
		||||
.h-captcha
 | 
			
		||||
    margin-bottom: 0.5vh
 | 
			
		||||
 | 
			
		||||
.button-c
 | 
			
		||||
    display: inline-block
 | 
			
		||||
    font-weight: 400
 | 
			
		||||
    color: #212529
 | 
			
		||||
    text-align: center
 | 
			
		||||
    vertical-align: middle
 | 
			
		||||
    cursor: pointer
 | 
			
		||||
    user-select: none
 | 
			
		||||
    border: 1px solid $black
 | 
			
		||||
    padding: 0.375rem 0.75rem
 | 
			
		||||
    font-size: 1rem
 | 
			
		||||
    line-height: 1.5
 | 
			
		||||
    border-radius: 0.25rem
 | 
			
		||||
    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out
 | 
			
		||||
    font-family: "Apercu Mono"
 | 
			
		||||
 | 
			
		||||
.button-c
 | 
			
		||||
    background-color: $pink
 | 
			
		||||
 | 
			
		||||
.button-c:hover
 | 
			
		||||
    background-color: $black
 | 
			
		||||
    color: $pink
 | 
			
		||||
    border-color: $pink
 | 
			
		||||
 | 
			
		||||
// Nav stuff
 | 
			
		||||
 | 
			
		||||
.ham
 | 
			
		||||
    width: 30px
 | 
			
		||||
    height: 20px
 | 
			
		||||
    position: relative
 | 
			
		||||
    margin: 0px
 | 
			
		||||
    -webkit-transform: rotate(0deg)
 | 
			
		||||
    -moz-transform: rotate(0deg)
 | 
			
		||||
    -o-transform: rotate(0deg)
 | 
			
		||||
    transform: rotate(0deg)
 | 
			
		||||
    -webkit-transition: .5s ease-in-out
 | 
			
		||||
    -moz-transition: .5s ease-in-out
 | 
			
		||||
    -o-transition: .5s ease-in-out
 | 
			
		||||
    transition: .5s ease-in-out
 | 
			
		||||
    cursor: pointer
 | 
			
		||||
 | 
			
		||||
.ham span
 | 
			
		||||
    display: block
 | 
			
		||||
    position: absolute
 | 
			
		||||
    height: 3px
 | 
			
		||||
    width: 100%
 | 
			
		||||
    border-radius: 9px
 | 
			
		||||
    opacity: 1
 | 
			
		||||
    left: 0
 | 
			
		||||
    -webkit-transform: rotate(0deg)
 | 
			
		||||
    -moz-transform: rotate(0deg)
 | 
			
		||||
    -o-transform: rotate(0deg)
 | 
			
		||||
    transform: rotate(0deg)
 | 
			
		||||
    -webkit-transition: .25s ease-in-out
 | 
			
		||||
    -moz-transition: .25s ease-in-out
 | 
			
		||||
    -o-transition: .25s ease-in-out
 | 
			
		||||
    transition: .25s ease-in-out
 | 
			
		||||
    background: $pink
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(1)
 | 
			
		||||
    top: 0
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(2), .ham span:nth-child(3)
 | 
			
		||||
    top: 10px
 | 
			
		||||
 | 
			
		||||
.ham span:nth-child(4)
 | 
			
		||||
    top: 20px
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(1)
 | 
			
		||||
    top: 11px
 | 
			
		||||
    width: 0
 | 
			
		||||
    left: 50%
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(2)
 | 
			
		||||
    -webkit-transform: rotate(45deg)
 | 
			
		||||
    -moz-transform: rotate(45deg)
 | 
			
		||||
    -o-transform: rotate(45deg)
 | 
			
		||||
    transform: rotate(45deg)
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(3)
 | 
			
		||||
    -webkit-transform: rotate(-45deg)
 | 
			
		||||
    -moz-transform: rotate(-45deg)
 | 
			
		||||
    -o-transform: rotate(-45deg)
 | 
			
		||||
    transform: rotate(-45deg)
 | 
			
		||||
 | 
			
		||||
.ham.open span:nth-child(4)
 | 
			
		||||
    top: 11px
 | 
			
		||||
    width: 0
 | 
			
		||||
    left: 50%
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-height: 421px)
 | 
			
		||||
    .pr-text
 | 
			
		||||
        margin-bottom: 5vh !important
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-width: 575px)
 | 
			
		||||
    .logo
 | 
			
		||||
        height: 5rem
 | 
			
		||||
    .logos-container
 | 
			
		||||
        width: 5rem
 | 
			
		||||
    .aaa
 | 
			
		||||
        min-height: 40vh !important
 | 
			
		||||
    .aaaa
 | 
			
		||||
        margin-top: 5vh !important
 | 
			
		||||
    .ef
 | 
			
		||||
        max-height: none !important
 | 
			
		||||
        min-height: 0 !important
 | 
			
		||||
    .ff
 | 
			
		||||
        min-height: 82.8vh !important
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@media only screen and (max-height: 815px)
 | 
			
		||||
    .ef
 | 
			
		||||
        max-height: none !important
 | 
			
		||||
        min-height: 0 !important
 | 
			
		||||
 | 
			
		||||
@@ -3,25 +3,35 @@ const axios = require('axios');
 | 
			
		||||
var router = express.Router();
 | 
			
		||||
 | 
			
		||||
/* GET home page. */
 | 
			
		||||
router.get('/', function(req, res, next) {
 | 
			
		||||
    const GHOST_KEY = process.env.GHOST_KEY
 | 
			
		||||
    const base_url = `https://blog.pastel.codes/ghost/api/v3/content/posts/?key=${GHOST_KEY}`
 | 
			
		||||
router.get('/', function (req, res, _next) {
 | 
			
		||||
  const GHOST_KEY = process.env.GHOST_KEY;
 | 
			
		||||
  const base_url = `https://blog.pastel.codes/ghost/api/v3/content/posts/?key=${GHOST_KEY}`;
 | 
			
		||||
 | 
			
		||||
    axios.all([
 | 
			
		||||
        axios.get(`${base_url}&limit=3`),
 | 
			
		||||
        axios.get(`${base_url}&limit=3&filter=tag:project`),
 | 
			
		||||
  axios
 | 
			
		||||
    .all([
 | 
			
		||||
      axios.get(`${base_url}&limit=3`),
 | 
			
		||||
      axios.get(`${base_url}&limit=3&filter=tag:project`),
 | 
			
		||||
    ])
 | 
			
		||||
        .then(axios.spread((response1, response2) => {
 | 
			
		||||
            var base = { title: 'About', description: 'Who??? What??? AAAAaaa, about me.'};
 | 
			
		||||
            var blog = JSON.parse(JSON.stringify(response1.data).split('"posts":').join('"blog":'));
 | 
			
		||||
            var projects = JSON.parse(JSON.stringify(response2.data).split('"posts":').join('"project":'));
 | 
			
		||||
            var out = Object.assign(base, blog, projects);
 | 
			
		||||
    .then(
 | 
			
		||||
      axios.spread((response1, response2) => {
 | 
			
		||||
        var base = {
 | 
			
		||||
          title: 'About',
 | 
			
		||||
          description: 'Who??? What??? AAAAaaa, about me.',
 | 
			
		||||
        };
 | 
			
		||||
        var blog = JSON.parse(
 | 
			
		||||
          JSON.stringify(response1.data).split('"posts":').join('"blog":')
 | 
			
		||||
        );
 | 
			
		||||
        var projects = JSON.parse(
 | 
			
		||||
          JSON.stringify(response2.data).split('"posts":').join('"project":')
 | 
			
		||||
        );
 | 
			
		||||
        var out = Object.assign(base, blog, projects);
 | 
			
		||||
 | 
			
		||||
            res.render('about', out);
 | 
			
		||||
        }))
 | 
			
		||||
        .catch(error => {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
        });
 | 
			
		||||
        res.render('about', out);
 | 
			
		||||
      })
 | 
			
		||||
    )
 | 
			
		||||
    .catch((error) => {
 | 
			
		||||
      console.log(error);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = router;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,73 +1,80 @@
 | 
			
		||||
var express = require('express');
 | 
			
		||||
var rate_limit = require("express-rate-limit")
 | 
			
		||||
const {verify} = require('hcaptcha');
 | 
			
		||||
const nodemailer = require('nodemailer')
 | 
			
		||||
var rate_limit = require('express-rate-limit');
 | 
			
		||||
const { verify } = require('hcaptcha');
 | 
			
		||||
var router = express.Router();
 | 
			
		||||
 | 
			
		||||
const sgMail = require('@sendgrid/mail');
 | 
			
		||||
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
 | 
			
		||||
 | 
			
		||||
const contact_rate_limit = rate_limit({
 | 
			
		||||
    windowMs: 10 * 60 * 1000, // 10 minutes
 | 
			
		||||
    max: 5, // limit each IP to 10 requests per windowMs
 | 
			
		||||
    message: "Too many contact requests, try again later.",
 | 
			
		||||
    handler: function (req, res /*, next*/) {
 | 
			
		||||
        res.render('error', {
 | 
			
		||||
            title: "Error",
 | 
			
		||||
            message: "Too many contact requests, try again later.",
 | 
			
		||||
            error: {status: null}
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
  windowMs: 10 * 60 * 1000, // 10 minutes
 | 
			
		||||
  max: 5, // limit each IP to 10 requests per windowMs
 | 
			
		||||
  message: 'Too many contact requests, try again later.',
 | 
			
		||||
  handler: function (req, res /*, next*/) {
 | 
			
		||||
    res.render('error', {
 | 
			
		||||
      title: 'Error',
 | 
			
		||||
      message: 'Too many contact requests, try again later.',
 | 
			
		||||
      error: { status: null },
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// POST route from contact form
 | 
			
		||||
router.post('/', contact_rate_limit, (req, res) => {
 | 
			
		||||
    const TO_MAIL_USER = process.env.TO_MAIL_USER
 | 
			
		||||
    const FROM_MAIL_USER = process.env.FROM_MAIL_USER
 | 
			
		||||
    const HCAPTCHA_KEY = process.env.HCAPTCHA_KEY
 | 
			
		||||
    const REPLY_TO_MAIL = process.env.REPLY_TO_MAIL
 | 
			
		||||
    const token = req.body["g-recaptcha-response"];
 | 
			
		||||
    const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
 | 
			
		||||
  const TO_MAIL_USER = process.env.TO_MAIL_USER;
 | 
			
		||||
  const FROM_MAIL_USER = process.env.FROM_MAIL_USER;
 | 
			
		||||
  const HCAPTCHA_KEY = process.env.HCAPTCHA_KEY;
 | 
			
		||||
  const REPLY_TO_MAIL = process.env.REPLY_TO_MAIL;
 | 
			
		||||
  const token = req.body['g-recaptcha-response'];
 | 
			
		||||
  const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
 | 
			
		||||
 | 
			
		||||
    verify(HCAPTCHA_KEY, token)
 | 
			
		||||
        .then((data) => {
 | 
			
		||||
            if (data.success === true) {
 | 
			
		||||
                const msg = {
 | 
			
		||||
                    to: TO_MAIL_USER,
 | 
			
		||||
                    from: FROM_MAIL_USER,
 | 
			
		||||
                    subject: 'New message from contact form at pastel.codes',
 | 
			
		||||
                    text: `${req.body.firstname} ${req.body.lastname} (${req.body.email})\nsays: ${req.body.message}\n\nip: ${ip}`
 | 
			
		||||
                };
 | 
			
		||||
  verify(HCAPTCHA_KEY, token)
 | 
			
		||||
    .then((data) => {
 | 
			
		||||
      if (data.success === true) {
 | 
			
		||||
        const msg = {
 | 
			
		||||
          to: TO_MAIL_USER,
 | 
			
		||||
          from: FROM_MAIL_USER,
 | 
			
		||||
          subject: 'New message from contact form at pastel.codes',
 | 
			
		||||
          text: `${req.body.firstname} ${req.body.lastname} (${req.body.email})\nsays: ${req.body.message}\n\nip: ${ip}`,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
                sgMail
 | 
			
		||||
                    .send(msg)
 | 
			
		||||
                    .then(() => {
 | 
			
		||||
                        res.render('contact', {
 | 
			
		||||
                            title: 'Contact',
 | 
			
		||||
                            message: "I will get back to you soon!",
 | 
			
		||||
                            success: "Make sure the email is from ",
 | 
			
		||||
                            email: REPLY_TO_MAIL
 | 
			
		||||
                        })
 | 
			
		||||
                    })
 | 
			
		||||
                    .catch(error => {
 | 
			
		||||
                        console.log(error)
 | 
			
		||||
                        res.render('error', {title: 'Contact', message: "Email did not send"})
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
                // rerender with same info in the text box and show error message
 | 
			
		||||
                res.render('contact', {title: 'Contact', message: "Captcha failed, try again"});
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        .catch(error => {
 | 
			
		||||
        sgMail
 | 
			
		||||
          .send(msg)
 | 
			
		||||
          .then(() => {
 | 
			
		||||
            res.render('contact', {
 | 
			
		||||
              title: 'Contact',
 | 
			
		||||
              message: 'I will get back to you soon!',
 | 
			
		||||
              success: 'Make sure the email is from ',
 | 
			
		||||
              email: REPLY_TO_MAIL,
 | 
			
		||||
            });
 | 
			
		||||
          })
 | 
			
		||||
          .catch((error) => {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
            res.render('contact', {title: 'Contact', message: "Something wrong happened, try again later"});
 | 
			
		||||
            res.render('error', {
 | 
			
		||||
              title: 'Contact',
 | 
			
		||||
              message: 'Email did not send',
 | 
			
		||||
            });
 | 
			
		||||
          });
 | 
			
		||||
      } else {
 | 
			
		||||
        // rerender with same info in the text box and show error message
 | 
			
		||||
        res.render('contact', {
 | 
			
		||||
          title: 'Contact',
 | 
			
		||||
          message: 'Captcha failed, try again',
 | 
			
		||||
        });
 | 
			
		||||
})
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    .catch((error) => {
 | 
			
		||||
      console.log(error);
 | 
			
		||||
      res.render('contact', {
 | 
			
		||||
        title: 'Contact',
 | 
			
		||||
        message: 'Something wrong happened, try again later',
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
/* GET home page. */
 | 
			
		||||
router.get('/', function (req, res, next) {
 | 
			
		||||
    res.render('contact', {title: 'Contact', description: "Contact me!"});
 | 
			
		||||
router.get('/', function (req, res, _next) {
 | 
			
		||||
  res.render('contact', { title: 'Contact', description: 'Contact me!' });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = router;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@ var express = require('express');
 | 
			
		||||
var router = express.Router();
 | 
			
		||||
 | 
			
		||||
/* GET home page. */
 | 
			
		||||
router.get('/', function(req, res, next) {
 | 
			
		||||
    res.render('index', { title: 'Home', description: "Hello, I'm E" });
 | 
			
		||||
router.get('/', function (req, res, _next) {
 | 
			
		||||
  res.render('index', { title: 'Home', description: "Hello, I'm E" });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = router;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								src/tailwind.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/tailwind.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
@tailwind base;
 | 
			
		||||
@tailwind components;
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: 'Titling Gothic FB';
 | 
			
		||||
  src: url('../fonts/TITLINGGOTHICFB-WIDE.OTF') format('opentype');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: 'Gilroy';
 | 
			
		||||
  src: url('../fonts/Gilroy-ExtraBold.otf') format('opentype');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: 'Apercu Mono';
 | 
			
		||||
  src: url('../fonts/ApercuMono.ttf') format('truetype');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.wavy {
 | 
			
		||||
  text-decoration: underline;
 | 
			
		||||
  text-decoration-style: wavy;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@tailwind utilities;
 | 
			
		||||
							
								
								
									
										31
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
  mode: 'jit',
 | 
			
		||||
  purge: ['views/*.pug'],
 | 
			
		||||
  darkMode: false, // or 'media' or 'class'
 | 
			
		||||
  theme: {
 | 
			
		||||
    extend: {
 | 
			
		||||
      fontFamily: {
 | 
			
		||||
        extra: ['"Titling Gothic FB"'],
 | 
			
		||||
        sans: ['Gilroy'],
 | 
			
		||||
        mono: ['"Apercu Mono"'],
 | 
			
		||||
      },
 | 
			
		||||
      colors: {
 | 
			
		||||
        transparent: 'transparent',
 | 
			
		||||
        current: 'currentColor',
 | 
			
		||||
        black: {
 | 
			
		||||
          DEFAULT: '#002234',
 | 
			
		||||
        },
 | 
			
		||||
        pink: {
 | 
			
		||||
          DEFAULT: '#CC7A98',
 | 
			
		||||
        },
 | 
			
		||||
        green: {
 | 
			
		||||
          DEFAULT: '#CDE7B0',
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  variants: {
 | 
			
		||||
    extend: {},
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [require('tailwind-hamburgers')],
 | 
			
		||||
};
 | 
			
		||||
@@ -1,68 +1,62 @@
 | 
			
		||||
extends layout
 | 
			
		||||
 | 
			
		||||
block nav-links
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/')
 | 
			
		||||
    a(href='/')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Home
 | 
			
		||||
    li.nav-item.active
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-black text-green hover:bg-pink hover:text-black transition duration-500 ease-in-out") 
 | 
			
		||||
            span About
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span CV
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://github.com/aurora-dot')
 | 
			
		||||
    a(href='https://github.com/aurora-dot')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Projects
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://blog.pastel.codes')
 | 
			
		||||
    a(href='https://blog.pastel.codes')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Blog
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/contact')
 | 
			
		||||
    a(href='/contact')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Contact
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
    .container
 | 
			
		||||
        .about-pos
 | 
			
		||||
            .row
 | 
			
		||||
                .col
 | 
			
		||||
                    h1
 | 
			
		||||
                        span Hello.
 | 
			
		||||
                    p I’m E, a 20 year old student in 3rd year of university, who studies computer science & artificial intelligence.
 | 
			
		||||
                    p In my free time, I create small projects to learn new skills to be helpful for others, recently i have been focusing on node.js.
 | 
			
		||||
                    p Graphic design is also very fun and i enjoy making small projects to post on instagram, it helps with programming too which is neat
 | 
			
		||||
            .row
 | 
			
		||||
                .col.start
 | 
			
		||||
                    h1
 | 
			
		||||
                        span Projects.
 | 
			
		||||
            .row
 | 
			
		||||
 | 
			
		||||
    div.mt-5
 | 
			
		||||
            div.text-lg
 | 
			
		||||
                h1.font-sans.text-6xl.wavy.mb-10 Hello.
 | 
			
		||||
                p.mb-5 I’m E, a 20 year old student in 3rd year of university, who studies computer science & artificial intelligence, somehow achieved a 1:1 for the previous two years.
 | 
			
		||||
                p.mb-5 In my free time, I create small projects to learn new skills to be helpful for others, recently i have been focusing on Django and tailwind for my job.
 | 
			
		||||
                p.mb-5 Graphic design is also very fun and i enjoy making small projects to post on instagram, it has helped a lot with UX/UI design for applications.
 | 
			
		||||
                p.mb-5 Currently I am working as a freelance developer for Bounce Technologies!
 | 
			
		||||
            div
 | 
			
		||||
                h1.font-sans.text-6xl.wavy.my-10 Projects.
 | 
			
		||||
            
 | 
			
		||||
            div
 | 
			
		||||
                each val in project
 | 
			
		||||
                    .col
 | 
			
		||||
                        .pr
 | 
			
		||||
                            a(href=val.url)
 | 
			
		||||
                    div(class="mb-10 text-center sm:text-left")
 | 
			
		||||
                        div.contents
 | 
			
		||||
                            a(href=val.url).contents
 | 
			
		||||
                                if val.feature_image
 | 
			
		||||
                                    img(src=val.feature_image)
 | 
			
		||||
                                    img(class="sm:w-2/3 mx-auto sm:mx-0" src=val.feature_image)
 | 
			
		||||
                                else
 | 
			
		||||
                                    img(src="/images/logo.png")
 | 
			
		||||
                        .pr-text
 | 
			
		||||
                        div.mt-2
 | 
			
		||||
                            a(href=val.url)
 | 
			
		||||
                                h1 #{val.title}
 | 
			
		||||
                            p #{val.excerpt}
 | 
			
		||||
                                span(class="font-sans text-2xl sm:text-3xl mt-3 mb-3") #{val.title}
 | 
			
		||||
                            p.text-lg #{val.excerpt}
 | 
			
		||||
 | 
			
		||||
            .row
 | 
			
		||||
                .col.start
 | 
			
		||||
                    h1
 | 
			
		||||
                        span Blog.
 | 
			
		||||
            .row
 | 
			
		||||
            div
 | 
			
		||||
                h1.font-sans.text-6xl.wavy.my-10 Blog.
 | 
			
		||||
            div
 | 
			
		||||
                each val in blog
 | 
			
		||||
                    .col
 | 
			
		||||
                        .pr
 | 
			
		||||
                            a(href=val.url)
 | 
			
		||||
                    div(class="mb-10 text-center sm:text-left")
 | 
			
		||||
                        div.contents
 | 
			
		||||
                            a(href=val.url).contents
 | 
			
		||||
                                if val.feature_image
 | 
			
		||||
                                    img(src=val.feature_image)
 | 
			
		||||
                                    img(class="sm:w-2/3 mx-auto sm:mx-0" src=val.feature_image)
 | 
			
		||||
                                else
 | 
			
		||||
                                    img(src="/images/logo.png")
 | 
			
		||||
                        .pr-text
 | 
			
		||||
                        div.mt-2
 | 
			
		||||
                            a(href=val.url)
 | 
			
		||||
                                h1 #{val.title}
 | 
			
		||||
                            p #{val.excerpt}
 | 
			
		||||
                                span(class="font-sans text-2xl sm:text-3xl mt-3 mb-3") #{val.title}
 | 
			
		||||
                            p.text-lg #{val.excerpt}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,57 +4,56 @@ block head
 | 
			
		||||
    script(src='https://hcaptcha.com/1/api.js' async='' defer='defer')
 | 
			
		||||
 | 
			
		||||
block nav-links
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/')
 | 
			
		||||
    a(href='/')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Home
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/about')
 | 
			
		||||
    a(href='/about')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span About
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span CV
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://github.com/aurora-dot')
 | 
			
		||||
    a(href='https://github.com/aurora-dot')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Projects
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://blog.pastel.codes')
 | 
			
		||||
    a(href='https://blog.pastel.codes')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Blog
 | 
			
		||||
    li.nav-item.active
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-black text-green hover:bg-pink hover:text-black transition duration-500 ease-in-out") 
 | 
			
		||||
            span Contact
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
    .container
 | 
			
		||||
        .row
 | 
			
		||||
            .col
 | 
			
		||||
                h1
 | 
			
		||||
                    span Contact.
 | 
			
		||||
        .row
 | 
			
		||||
            .col
 | 
			
		||||
                form#contact-form(action='/contact' method='post' role='form')
 | 
			
		||||
                    .form-group
 | 
			
		||||
                        label Name
 | 
			
		||||
                        .form-row
 | 
			
		||||
                            .col
 | 
			
		||||
                                input#fname(name='firstname' class="form-control" type='text' placeholder='First name' required="true" pattern="^[\\w'\\-,.][^0-9_!¡?÷?¿/\\\\+=@#$%ˆ&*(){}|~<>;:[\\]]{2,}$")
 | 
			
		||||
                            .col
 | 
			
		||||
                                input#lname(name='lastname' class="form-control" type='text' placeholder='Last name' required="true" pattern="^[\\w'\\-,.][^0-9_!¡?÷?¿/\\\\+=@#$%ˆ&*(){}|~<>;:[\\]]{2,}$")
 | 
			
		||||
    div.w-full
 | 
			
		||||
        div
 | 
			
		||||
            h1.font-sans.text-6xl.wavy.mb-10 Contact.
 | 
			
		||||
 | 
			
		||||
                    .form-group
 | 
			
		||||
                        label(for='email') Email
 | 
			
		||||
                        input#email(name='email' class="form-control" type='text' placeholder='Email (example@email.com)' required='true' pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")
 | 
			
		||||
                    .form-group
 | 
			
		||||
                        label(for='message') Message
 | 
			
		||||
                        textarea#message(name='message' class="form-control" placeholder='Enter your message here' rows='3' required='true')
 | 
			
		||||
                    .form-group(style="margin-bottom: 0.5rem")
 | 
			
		||||
                        .h-captcha(data-sitekey='49abba50-1813-4ab3-acbf-2a8bfff1f7c3')
 | 
			
		||||
                    button(type='submit' class="button-c") Submit
 | 
			
		||||
        div
 | 
			
		||||
            form#contact-form(action='/contact' method='post' role='form')
 | 
			
		||||
                div.mb-5
 | 
			
		||||
                    label Name
 | 
			
		||||
                    div(class="sm:flex sm:flex-row")
 | 
			
		||||
                        .flex.w-full
 | 
			
		||||
                            input#fname(class="w-full border-2 border-pink bg-black p-2 text-base" name='firstname' class="form-control" type='text' placeholder='First name' required="true")
 | 
			
		||||
                        div(class="mb-3 sm:mb-0 sm:ml-5")
 | 
			
		||||
                        .flex.w-full
 | 
			
		||||
                            input#lname(class="w-full border-2 border-pink bg-black p-2 text-base" name='lastname' class="form-control" type='text' placeholder='Last name' required="true")
 | 
			
		||||
 | 
			
		||||
        .row
 | 
			
		||||
            .col
 | 
			
		||||
                if message
 | 
			
		||||
                div.mb-5
 | 
			
		||||
                    label(for='email') Email
 | 
			
		||||
                    input#email(class="w-full border-2 border-pink bg-black p-2 text-base" name='email' class="form-control" type='text' placeholder='Email (example@email.com)' required='true' pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")
 | 
			
		||||
                div.mb-5
 | 
			
		||||
                    label(for='message') Message
 | 
			
		||||
                    textarea#message(class="w-full border-2 border-pink bg-black p-2 text-base" name='message' class="form-control" placeholder='Enter your message here' rows='3' required='true')
 | 
			
		||||
                div(class="mb-5 justify-center sm:justify-items-start flex sm:block")
 | 
			
		||||
                    .h-captcha(data-sitekey='49abba50-1813-4ab3-acbf-2a8bfff1f7c3')
 | 
			
		||||
                button(type='submit' class="rounded-lg px-3 py-2 bg-pink text-black text-lg hover:ring-pink hover:ring-2 hover:bg-black hover:text-pink sm:w-auto w-full sm:text-base") Submit
 | 
			
		||||
 | 
			
		||||
        div
 | 
			
		||||
            if message
 | 
			
		||||
                div(class="mt-10 mb-6 sm:text-left text-center")
 | 
			
		||||
                    #contact-message
 | 
			
		||||
                        p=message
 | 
			
		||||
                        if success
 | 
			
		||||
                            p=success
 | 
			
		||||
                                span#email=email
 | 
			
		||||
                                span#email.text-green=email
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										112
									
								
								views/index.pug
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								views/index.pug
									
									
									
									
									
								
							@@ -1,73 +1,69 @@
 | 
			
		||||
extends layout
 | 
			
		||||
 | 
			
		||||
block nav-links
 | 
			
		||||
    li.nav-item.active
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-black text-green hover:bg-pink hover:text-black transition duration-500 ease-in-out")
 | 
			
		||||
            span Home
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/about')
 | 
			
		||||
    a(href='/about')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span About
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='#')
 | 
			
		||||
    a(href='#')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span CV
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://github.com/aurora-dot')
 | 
			
		||||
    a(href='https://github.com/aurora-dot')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Projects
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='https://blog.pastel.codes')
 | 
			
		||||
    a(href='https://blog.pastel.codes')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Blog
 | 
			
		||||
    li.nav-item
 | 
			
		||||
        a.nav-link(href='/contact')
 | 
			
		||||
    a(href='/contact')
 | 
			
		||||
        li(class="py-3 bg-pink text-black hover:bg-black hover:text-pink transition duration-500 ease-in-out")
 | 
			
		||||
            span Contact
 | 
			
		||||
 | 
			
		||||
block content
 | 
			
		||||
    .container-fluid
 | 
			
		||||
        .row
 | 
			
		||||
            .col-sm-2
 | 
			
		||||
            .center-v.col-sm-4.aaa.ef
 | 
			
		||||
                div
 | 
			
		||||
                    h1
 | 
			
		||||
                        | Hello,
 | 
			
		||||
                        br
 | 
			
		||||
                        | I'm
 | 
			
		||||
                        |
 | 
			
		||||
                        span E
 | 
			
		||||
                    p I'm a Programmer & Designer from the UK.
 | 
			
		||||
                    p I like to make stuff.
 | 
			
		||||
            .col-sm-2.aaaa
 | 
			
		||||
            .col-sm.pink-block.ef
 | 
			
		||||
                .center-v-h.ef
 | 
			
		||||
                    .logos-container
 | 
			
		||||
                        a(class="logo-container" id="email" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' style="margin-top: 2.5rem;" viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Mail icon
 | 
			
		||||
                                path(d='M11.585 5.267c1.834 0 3.558.811 4.824 2.08v.004c0-.609.41-1.068.979-1.068h.145c.891 0 1.073.842 1.073 1.109l.005 9.475c-.063.621.64.941 1.029.543 1.521-1.564 3.342-8.038-.946-11.79-3.996-3.497-9.357-2.921-12.209-.955-3.031 2.091-4.971 6.718-3.086 11.064 2.054 4.74 7.931 6.152 11.424 4.744 1.769-.715 2.586 1.676.749 2.457-2.776 1.184-10.502 1.064-14.11-5.188C-.977 13.521-.847 6.093 5.62 2.245 10.567-.698 17.09.117 21.022 4.224c4.111 4.294 3.872 12.334-.139 15.461-1.816 1.42-4.516.037-4.498-2.031l-.019-.678c-1.265 1.256-2.948 1.988-4.782 1.988-3.625 0-6.813-3.189-6.813-6.812 0-3.659 3.189-6.885 6.814-6.885zm4.561 6.623c-.137-2.653-2.106-4.249-4.484-4.249h-.09c-2.745 0-4.268 2.159-4.268 4.61 0 2.747 1.842 4.481 4.256 4.481 2.693 0 4.464-1.973 4.592-4.306l-.006-.536z')
 | 
			
		||||
                        a(class="logo-container" href="https://github.com/aurora-dot" target="_blank")
 | 
			
		||||
                            svg(class="logo" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg")
 | 
			
		||||
                                title GitHub icon
 | 
			
		||||
                                path(d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12")
 | 
			
		||||
                        a(class="logo-container" href="https://git.pastel.codes/Blankie" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Gitea icon
 | 
			
		||||
                                path(d='M4.186 5.421C2.341 5.417-.13 6.59.006 9.531c.213 4.594 4.92 5.02 6.801 5.057.206.862 2.42 3.834 4.059 3.99h7.18c4.306-.286 7.53-13.022 5.14-13.07-3.953.186-6.296.28-8.305.296v3.975l-.626-.277-.004-3.696c-2.306-.001-4.336-.108-8.189-.298-.482-.003-1.154-.085-1.876-.087zm.261 1.625h.22c.262 2.355.688 3.732 1.55 5.836-2.2-.26-4.072-.899-4.416-3.285-.178-1.235.422-2.524 2.646-2.552zm8.557 2.315c.15.002.303.03.447.096l.749.323-.537.979a.672.597 0 0 0-.241.038.672.597 0 0 0-.405.764.672.597 0 0 0 .112.174l-.926 1.686a.672.597 0 0 0-.222.038.672.597 0 0 0-.405.764.672.597 0 0 0 .86.36.672.597 0 0 0 .404-.765.672.597 0 0 0-.158-.22l.902-1.642a.672.597 0 0 0 .293-.03.672.597 0 0 0 .213-.112c.348.146.633.265.838.366.308.152.417.253.45.365.033.11-.003.322-.177.694-.13.277-.345.67-.599 1.133a.672.597 0 0 0-.251.038.672.597 0 0 0-.405.764.672.597 0 0 0 .86.36.672.597 0 0 0 .404-.764.672.597 0 0 0-.137-.202c.251-.458.467-.852.606-1.148.188-.402.286-.701.2-.99-.086-.289-.35-.477-.7-.65-.23-.113-.517-.233-.86-.377a.672.597 0 0 0-.038-.239.672.597 0 0 0-.145-.209l.528-.963 2.924 1.263c.528.229.746.79.49 1.26l-2.01 3.68c-.257.469-.888.663-1.416.435l-4.137-1.788c-.528-.228-.747-.79-.49-1.26l2.01-3.679c.176-.323.53-.515.905-.53h.064z')
 | 
			
		||||
                        a(class="logo-container" href="https://blog.pastel.codes" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Ghost icon
 | 
			
		||||
                                path(d='M9.604 19.199H.008V24h9.597v-4.801zm14.39 0h-9.591V24h9.591v-4.801zm.003-9.599H0v4.8h23.997V9.6zM24 0h-4.801v4.801H24V0zm-9.596 0H.008v4.801h14.396V0z')
 | 
			
		||||
                        a(class="logo-container" href="https://matrix.to/#/@blankie:matrix.pastel.codes" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Matrix icon
 | 
			
		||||
                                path(d='M.632.55v22.9H2.28V24H0V0h2.28v.55zm7.043 7.26v1.157h.033c.309-.443.683-.784 1.117-1.024.433-.245.936-.365 1.5-.365.54 0 1.033.107 1.481.314.448.208.785.582 1.02 1.108.254-.374.6-.706 1.034-.992.434-.287.95-.43 1.546-.43.453 0 .872.056 1.26.167.388.11.716.286.993.53.276.245.489.559.646.951.152.392.23.863.23 1.417v5.728h-2.349V11.52c0-.286-.01-.559-.032-.812a1.755 1.755 0 0 0-.18-.66 1.106 1.106 0 0 0-.438-.448c-.194-.11-.457-.166-.785-.166-.332 0-.6.064-.803.189a1.38 1.38 0 0 0-.48.499 1.946 1.946 0 0 0-.231.696 5.56 5.56 0 0 0-.06.785v4.768h-2.35v-4.8c0-.254-.004-.503-.018-.752a2.074 2.074 0 0 0-.143-.688 1.052 1.052 0 0 0-.415-.503c-.194-.125-.476-.19-.854-.19-.111 0-.259.024-.439.074-.18.051-.36.143-.53.282-.171.138-.319.337-.439.595-.12.259-.18.6-.18 1.02v4.966H5.46V7.81zm15.693 15.64V.55H21.72V0H24v24h-2.28v-.55z')
 | 
			
		||||
                        a(class="logo-container" href="https://twitter.com/ErrorFacade" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Twitter icon
 | 
			
		||||
                                path(d='M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z')
 | 
			
		||||
                        a(class="logo-container" href="https://instagram.com/_e.psd" target="_blank")
 | 
			
		||||
                            svg(class="logo" role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                                title Instagram icon
 | 
			
		||||
                                path(d='M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z')
 | 
			
		||||
    div(class="flex sm:w-2/4 items-center sm:my-0 mt-10 mb-16")
 | 
			
		||||
        div.text-2xl
 | 
			
		||||
            h1(class="font-sans text-7xl pb-5 sm:pb-10")
 | 
			
		||||
                | Hello,
 | 
			
		||||
                br
 | 
			
		||||
                | I'm
 | 
			
		||||
                |
 | 
			
		||||
                span.wavy E
 | 
			
		||||
            p I'm a Programmer & Designer from the UK.
 | 
			
		||||
            p.pt-5 I like to make stuff.
 | 
			
		||||
 | 
			
		||||
            .col-sm-2
 | 
			
		||||
    div(class="sm:w-1/4")
 | 
			
		||||
 | 
			
		||||
    div(id="side-social" c class="flex bg-pink justify-center sm:w-1/4")
 | 
			
		||||
        div(class="w-16 sm:w-14 fill-current text-black flex flex-col justify-around")
 | 
			
		||||
            a(id="email" target="_blank")
 | 
			
		||||
                svg.mt-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Mail icon
 | 
			
		||||
                    path(d='M11.585 5.267c1.834 0 3.558.811 4.824 2.08v.004c0-.609.41-1.068.979-1.068h.145c.891 0 1.073.842 1.073 1.109l.005 9.475c-.063.621.64.941 1.029.543 1.521-1.564 3.342-8.038-.946-11.79-3.996-3.497-9.357-2.921-12.209-.955-3.031 2.091-4.971 6.718-3.086 11.064 2.054 4.74 7.931 6.152 11.424 4.744 1.769-.715 2.586 1.676.749 2.457-2.776 1.184-10.502 1.064-14.11-5.188C-.977 13.521-.847 6.093 5.62 2.245 10.567-.698 17.09.117 21.022 4.224c4.111 4.294 3.872 12.334-.139 15.461-1.816 1.42-4.516.037-4.498-2.031l-.019-.678c-1.265 1.256-2.948 1.988-4.782 1.988-3.625 0-6.813-3.189-6.813-6.812 0-3.659 3.189-6.885 6.814-6.885zm4.561 6.623c-.137-2.653-2.106-4.249-4.484-4.249h-.09c-2.745 0-4.268 2.159-4.268 4.61 0 2.747 1.842 4.481 4.256 4.481 2.693 0 4.464-1.973 4.592-4.306l-.006-.536z')
 | 
			
		||||
            a(href="https://github.com/aurora-dot" target="_blank")
 | 
			
		||||
                svg.mt-5(role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg")
 | 
			
		||||
                    title GitHub icon
 | 
			
		||||
                    path(d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12")
 | 
			
		||||
            a(href="https://git.pastel.codes/Blankie" target="_blank")
 | 
			
		||||
                svg.mt-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Gitea icon
 | 
			
		||||
                    path(d='M4.186 5.421C2.341 5.417-.13 6.59.006 9.531c.213 4.594 4.92 5.02 6.801 5.057.206.862 2.42 3.834 4.059 3.99h7.18c4.306-.286 7.53-13.022 5.14-13.07-3.953.186-6.296.28-8.305.296v3.975l-.626-.277-.004-3.696c-2.306-.001-4.336-.108-8.189-.298-.482-.003-1.154-.085-1.876-.087zm.261 1.625h.22c.262 2.355.688 3.732 1.55 5.836-2.2-.26-4.072-.899-4.416-3.285-.178-1.235.422-2.524 2.646-2.552zm8.557 2.315c.15.002.303.03.447.096l.749.323-.537.979a.672.597 0 0 0-.241.038.672.597 0 0 0-.405.764.672.597 0 0 0 .112.174l-.926 1.686a.672.597 0 0 0-.222.038.672.597 0 0 0-.405.764.672.597 0 0 0 .86.36.672.597 0 0 0 .404-.765.672.597 0 0 0-.158-.22l.902-1.642a.672.597 0 0 0 .293-.03.672.597 0 0 0 .213-.112c.348.146.633.265.838.366.308.152.417.253.45.365.033.11-.003.322-.177.694-.13.277-.345.67-.599 1.133a.672.597 0 0 0-.251.038.672.597 0 0 0-.405.764.672.597 0 0 0 .86.36.672.597 0 0 0 .404-.764.672.597 0 0 0-.137-.202c.251-.458.467-.852.606-1.148.188-.402.286-.701.2-.99-.086-.289-.35-.477-.7-.65-.23-.113-.517-.233-.86-.377a.672.597 0 0 0-.038-.239.672.597 0 0 0-.145-.209l.528-.963 2.924 1.263c.528.229.746.79.49 1.26l-2.01 3.68c-.257.469-.888.663-1.416.435l-4.137-1.788c-.528-.228-.747-.79-.49-1.26l2.01-3.679c.176-.323.53-.515.905-.53h.064z')
 | 
			
		||||
            a(href="https://blog.pastel.codes" target="_blank")
 | 
			
		||||
                svg.mt-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Ghost icon
 | 
			
		||||
                    path(d='M9.604 19.199H.008V24h9.597v-4.801zm14.39 0h-9.591V24h9.591v-4.801zm.003-9.599H0v4.8h23.997V9.6zM24 0h-4.801v4.801H24V0zm-9.596 0H.008v4.801h14.396V0z')
 | 
			
		||||
            a(href="https://matrix.to/#/@blankie:matrix.pastel.codes" target="_blank")
 | 
			
		||||
                svg.mt-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Matrix icon
 | 
			
		||||
                    path(d='M.632.55v22.9H2.28V24H0V0h2.28v.55zm7.043 7.26v1.157h.033c.309-.443.683-.784 1.117-1.024.433-.245.936-.365 1.5-.365.54 0 1.033.107 1.481.314.448.208.785.582 1.02 1.108.254-.374.6-.706 1.034-.992.434-.287.95-.43 1.546-.43.453 0 .872.056 1.26.167.388.11.716.286.993.53.276.245.489.559.646.951.152.392.23.863.23 1.417v5.728h-2.349V11.52c0-.286-.01-.559-.032-.812a1.755 1.755 0 0 0-.18-.66 1.106 1.106 0 0 0-.438-.448c-.194-.11-.457-.166-.785-.166-.332 0-.6.064-.803.189a1.38 1.38 0 0 0-.48.499 1.946 1.946 0 0 0-.231.696 5.56 5.56 0 0 0-.06.785v4.768h-2.35v-4.8c0-.254-.004-.503-.018-.752a2.074 2.074 0 0 0-.143-.688 1.052 1.052 0 0 0-.415-.503c-.194-.125-.476-.19-.854-.19-.111 0-.259.024-.439.074-.18.051-.36.143-.53.282-.171.138-.319.337-.439.595-.12.259-.18.6-.18 1.02v4.966H5.46V7.81zm15.693 15.64V.55H21.72V0H24v24h-2.28v-.55z')
 | 
			
		||||
            a(href="https://twitter.com/ErrorFacade" target="_blank")
 | 
			
		||||
                svg.mt-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Twitter icon
 | 
			
		||||
                    path(d='M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z')
 | 
			
		||||
            a(href="https://instagram.com/_e.psd" target="_blank")
 | 
			
		||||
                svg.my-5(role='img' viewbox='0 0 24 24' xmlns='http://www.w3.org/2000/svg')
 | 
			
		||||
                    title Instagram icon
 | 
			
		||||
                    path(d='M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z')
 | 
			
		||||
 | 
			
		||||
block scripts
 | 
			
		||||
    script(src="/javascript/index.js")
 | 
			
		||||
 
 | 
			
		||||
@@ -11,40 +11,36 @@ html
 | 
			
		||||
        link(rel='icon' type='image/png' sizes='96x96' href='/images/favicon-96x96.png')
 | 
			
		||||
        link(rel='icon' type='image/png' sizes='16x16' href='/images/favicon-16x16.png')
 | 
			
		||||
 | 
			
		||||
        link(rel='stylesheet', href='/stylesheets/bootstrap.css')
 | 
			
		||||
        link(rel='stylesheet', href='/stylesheets/style.css')
 | 
			
		||||
        block head
 | 
			
		||||
    body
 | 
			
		||||
        article
 | 
			
		||||
            header
 | 
			
		||||
                // Navbar
 | 
			
		||||
                nav.navbar
 | 
			
		||||
                    // Navbar brand
 | 
			
		||||
                    a.navbar-brand(href='/')
 | 
			
		||||
                        span EEEE.
 | 
			
		||||
                    // Collapse button
 | 
			
		||||
                    button.navbar-toggler.ham-button(type='button' data-toggle='collapse' data-target='#navbarSupportedContent23' aria-controls='navbarSupportedContent23' aria-expanded='false' aria-label='Toggle navigation' style='cursor: pointer;')
 | 
			
		||||
                        .ham
 | 
			
		||||
                            span
 | 
			
		||||
                            span
 | 
			
		||||
                            span
 | 
			
		||||
                            span
 | 
			
		||||
                    // Collapsible content
 | 
			
		||||
                    #navbarSupportedContent23.collapse.navbar-collapse
 | 
			
		||||
                        // Links
 | 
			
		||||
                        ul.navbar-nav.mr-auto
 | 
			
		||||
                            block nav-links
 | 
			
		||||
 | 
			
		||||
            main
 | 
			
		||||
    body.flex.flex-col.min-h-screen.bg-black.text-pink.font-mono.text-xl
 | 
			
		||||
        nav
 | 
			
		||||
            div(class="mx-auto px-5")
 | 
			
		||||
                div.relative.flex.items-center.justify-between.h-16
 | 
			
		||||
                    div.flex-shrink-0.flex.items-center
 | 
			
		||||
                        p.block.text-3xl.font-extra.font
 | 
			
		||||
                            a(href="/") EEEE.
 | 
			
		||||
                    
 | 
			
		||||
                    div(class="absolute inset-y-0 right-0 flex items-center")    
 | 
			
		||||
                        div(id="menu").tham.tham-e-squeeze.tham-w-8
 | 
			
		||||
                            div.tham-box
 | 
			
		||||
                                div(class="tham-inner bg-pink")
 | 
			
		||||
 | 
			
		||||
            div
 | 
			
		||||
                ul(class="hidden transition duration-500 ease-in-out text-center mx-5 list-none mb-5" id="menu-items")
 | 
			
		||||
                    block nav-links
 | 
			
		||||
 | 
			
		||||
        main(class="flex flex-grow sm:items-stretch")
 | 
			
		||||
            div(class="flex flex-col sm:flex-row flex-grow max-w-4xl mx-auto px-5")
 | 
			
		||||
                block content
 | 
			
		||||
 | 
			
		||||
            footer
 | 
			
		||||
                p © 2020 |
 | 
			
		||||
                    |
 | 
			
		||||
                    |
 | 
			
		||||
                    a(href="/") EEEE.
 | 
			
		||||
        footer.w-full.text-center.p-4.text-base
 | 
			
		||||
            p.font-mono © 2020 |
 | 
			
		||||
                |
 | 
			
		||||
                |
 | 
			
		||||
                a(href="/").underline EEEE.
 | 
			
		||||
 | 
			
		||||
        script(src="/javascript/jquery-3.5.1.min.js")
 | 
			
		||||
        script(src="/javascript/bootstrap.js")
 | 
			
		||||
        script(src="/javascript/nav.js")
 | 
			
		||||
        block scripts
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user