added generic html website

This commit is contained in:
alex 3
2023-04-09 19:50:30 -04:00
parent 4404a43c18
commit 8709797b89
19 changed files with 448 additions and 29494 deletions
-19
View File
@@ -1,19 +0,0 @@
name: build remote
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script: |
PATH=$PATH:/${{secrets.USERNAME}}/.nvm/versions/node/v18.8.0/bin
pm2 -v
pm2 restart website
-24
View File
@@ -1,24 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.idea
+145
View File
@@ -0,0 +1,145 @@
* {
margin: 0 auto;
padding:0;
}
body {
background-color:black;
font-family: 'DM Sans', sans-serif;
}
ul {
list-style-position:inside;
list-style-type:none;
}
li {
padding:0;
display:inline-block;
}
a {
color:white;
}
a:hover {
color:Gray
}
#container {
height:100vh;
}
@media only screen and (max-width:700px) {
#container {
height:100vh;
padding-top:50px;
}
}
#intro {
width:40%;
color:white;
text-align:center;
}
#navtype {
color:white;
}
.card {
background-color: #232931;
color: #fff;
border-radius: 8px;
overflow: hidden;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
}
.card-header {
background: linear-gradient(to right, #000, #424242);
padding: 20px;
font-size:10px;
}
.card-header h2 {
margin: 0;
}
.card-body {
padding: 20px;
}
.card-body p {
margin-bottom: 20px;
}
.btn {
display: inline-block;
padding: 10px 20px;
background-color: #000;
color: #fff;
border-radius: 4px;
text-decoration: none;
transition: background-color 0.2s ease-in-out;
}
.btn:hover {
color:white;
background-color: #424242;
}
#socials a {
text-decoration:none;
padding:5px;
}
#footer {
text-align:center;
}
#notice {
padding-top:2px;
}
.contact-form {
max-width: 500px;
text-align:center;
margin: 0 auto;
}
.contact-form label {
color:white;
display: block;
text-align:left;
padding-top:10px;
}
.contact-form input,
.contact-form textarea {
display: block;
padding: 5px;
border: 1px solid #ccc;
border-radius: 4px;
}
.contact-form button {
background-color: #000;
color: #fff;
border: none;
border-radius: 4px;
padding: 12px 16px;
cursor: pointer;
}
.contact-form button:hover {
background-color: #424242;
}
/* global classes */
.center {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
flex-direction: column;
}
+66
View File
@@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/assets/css/main.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@500&display=swap" rel="stylesheet">
<title>alex! - contact</title>
</head>
<body>
<div id="container" class="center">
<div id="intro">
<h1>lets get in touch</h1>
<p>reach out to me below or via <a href="mailto:hello@thatalex.dev">hello@thatalex.dev</a></p>
</div>
<br />
<form class="contact-form" method="POST" action="http://localhost:3002/v3/tools/contact">
<label for="name">Name</label>
<input type="text" id="name" name="name" required>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
<label for="message">Message</label>
<textarea id="message" name="message" required></textarea>
<br />
<button type="submit">Send Message</button>
</form>
<!-- br to space, fite me -->
<br />
<hr width="40%">
<br />
<div id="navtype">
<ul>
<li><a href="#">home</a></li>
<li><a href="/projects">projects</a></li>
<li><a href="/contact">contact</a></li>
</ul>
</div>
<br />
<div id="footer">
<div id="socials">
<a href="https://twitter.com/zstreamss" target="_blank" rel="noreferrer">
<i class="fa-brands fa-twitter" style="font-size:30px;"></i>
</a>
<a href="https://linkedin.com/in/thatalex" target="_blank" rel="noreferrer">
<i class="fa-brands fa-linkedin" style="font-size:30px;"></i>
</a>
<a href="mailto:hello@thatalex.dev" target="_blank" rel="noreferrer">
<i class="fa-solid fa-envelope" style="font-size:30px;"></i>
</a>
</div>
<p id="notice" style="color:white;">&#169; 2023, Alex Frantz. All Rights Reserved<br><a href="mailto:hello@thatalex.dev">hello@thatalex.dev</a></p>
</div>
</div>
</body>
</html>
+99
View File
@@ -0,0 +1,99 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@500&display=swap" rel="stylesheet">
<title>alex! - page not found</title>
<style>
body {
background-color:black;
font-family: 'DM Sans', sans-serif;
}
#header {
margin-bottom: 0;
transform: translateY(100%);
animation-delay:5s;
animation: move-up 1s forwards 1s;
}
a {
color:white;
text-decoration:none;
}
a:hover {
color:gray;
}
.error-message {
margin-top: 0;
opacity: 0;
animation-delay:6s;
animation: fade-in 1s forwards 1.5s;
}
.ital {
font-size:10px;
color:darkgray;
}
@keyframes move-up {
from {
transform: translateY(100%);
}
to {
transform: translateY(0%);
}
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
#container {
color:white;
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
#socials {
display:inline-block;
font-size:20px;
}
</style>
</head>
<body>
<div id="container">
<h1 id="header">something's not quite right..</h1>
<p class="error-message">that page doesn't exist. how'd you get here?<br />
<a href="#" onclick="history.back()">lets head back now.</a></p>
<div id="socials" class="error-message">
<a href="https://twitter.com/zstreamss" target="_blank" rel="noreferrer">
<i class="fa-brands fa-twitter"></i>
</a>
<a href="https://linkedin.com/in/thatalex" target="_blank" rel="noreferrer">
<i class="fa-brands fa-linkedin"></i>
</a>
<a href="mailto:hello@thatalex.dev" target="_blank" rel="noreferrer">
<i class="fa-solid fa-envelope"></i>
</a>
</div>
<p class="error-message ital"><i>meanwhile, reach me here if this page should exist</i></p>
</div>
</body>
</html>
+50
View File
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/assets/css/main.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@500&display=swap" rel="stylesheet">
<title>alex! - home</title>
</head>
<body>
<div id="container" class="center">
<div id="intro">
<h1>hi, i'm alex!</h1>
<p>i'm part-time QA Manual Testing + Automation at <a href="https://medal.tv">Medal.tv</a> and a full-time Node.js, Go and Kotlin geek</p>
</div>
<!-- br to space, fite me -->
<br />
<hr width="40%">
<br />
<div id="navtype">
<ul>
<li><a href="#">home</a></li>
<li><a href="/projects">projects</a></li>
<li><a href="/contact">contact</a></li>
</ul>
</div>
<br />
<div id="footer">
<div id="socials">
<a href="https://twitter.com/zstreamss" target="_blank" rel="noreferrer">
<i class="fa-brands fa-twitter" style="font-size:30px;"></i>
</a>
<a href="https://linkedin.com/in/thatalex" target="_blank" rel="noreferrer">
<i class="fa-brands fa-linkedin" style="font-size:30px;"></i>
</a>
<a href="mailto:hello@thatalex.dev" target="_blank" rel="noreferrer">
<i class="fa-solid fa-envelope" style="font-size:30px;"></i>
</a>
</div>
<p id="notice" style="color:white;">&#169; 2023, Alex Frantz. All Rights Reserved<br><a href="mailto:hello@thatalex.dev">hello@thatalex.dev</a></p>
</div>
</div>
</body>
</html>
-28919
View File
File diff suppressed because it is too large Load Diff
-41
View File
@@ -1,41 +0,0 @@
{
"name": "web",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"eslint": "8.22.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.4.3",
"react-scripts": "5.0.1",
"socket.io-client": "^4.5.3",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
+88
View File
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/assets/css/main.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@500&display=swap" rel="stylesheet">
<title>alex! - projects</title>
</head>
<body>
<div id="container" class="center">
<div id="intro">
<h1>what do i work on?</h1>
<p>a lot of random stuff. i mean, like, a lot.</p>
</div>
<br />
<div id="cards">
<div class="card">
<div class="card-header">
<h1>pause!</h1>
</div>
<div class="card-body">
<p>pause! is a website to live-control my music from my Spotify client over websockets & HTTP requests, built on Node.js</p>
<a href="https://github.com/azpha/pause" target="_blank" class="btn">View Project</a>
</div>
</div>
<br />
<div class="card">
<div class="card-header">
<h1>splitstat</h1>
</div>
<div class="card-body">
<p>splitstat is a Discord bot I hosted that fetched your Splitgate player stats from Tracker Network</p>
<a href="https://github.com/azpha/splitstat" target="_blank" class="btn">View Project</a>
</div>
</div>
<br />
<div class="card">
<div class="card-header">
<h1>medaltv-wrapper</h1>
</div>
<div class="card-body">
<p>medaltv-wrapper is a Node.js wrapper for the Medal.tv public REST API to fetch clips from the platform</p>
<a href="https://github.com/azpha/medaltv-wrapper" target="_blank" class="btn">View Project</a>
</div>
</div>
</div>
<br />
<h1 style="color:white;">..and more!</h1>
<p style="color:white">you can see all of my projects on my <a href="https://github.com/azpha" target="_blank">GitHub page</a></p>
<!-- br to space, fite me -->
<br />
<hr width="40%">
<br />
<div id="navtype">
<ul>
<li><a href="/">home</a></li>
<li><a href="#">projects</a></li>
<li><a href="/contact">contact</a></li>
</ul>
</div>
<br />
<div id="footer">
<div id="socials">
<a href="https://twitter.com/zstreamss" target="_blank" rel="noreferrer">
<i class="fa-brands fa-twitter" style="font-size:30px;"></i>
</a>
<a href="https://linkedin.com/in/thatalex" target="_blank" rel="noreferrer">
<i class="fa-brands fa-linkedin" style="font-size:30px;"></i>
</a>
<a href="mailto:hello@thatalex.dev" target="_blank" rel="noreferrer">
<i class="fa-solid fa-envelope" style="font-size:30px;"></i>
</a>
</div>
<p id="notice" style="color:white;">&#169; 2023, Alex Frantz. All Rights Reserved<br><a href="mailto:hello@thatalex.dev">hello@thatalex.dev</a></p>
</div>
</div>
</body>
</html>
-57
View File
@@ -1,57 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="og:description"
content="welcome to my website! here, you can find my portfolio and stuff about me along with any links to my socials!"
/>
<meta
name="og:title"
content="thatalex.dev"
/>
<meta
name="og:url"
content="https://thatalex.dev"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;500&display=swap" rel="stylesheet">
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>alex!</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
-9
View File
@@ -1,9 +0,0 @@
{
"short_name": "thatalex.dev",
"name": "Alex - my portfolio, about me & how to contact me",
"icons": [],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#525459"
}
-3
View File
@@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
-39
View File
@@ -1,39 +0,0 @@
import React from 'react';
import {Routes,BrowserRouter,Route} from 'react-router-dom';
import {NavBar,Footer} from "./Components";
import {HomePage,ContactPage,NotFound} from "./Pages";
const pages = [
{
"slug": "home",
"path": "/"
},
{
"slug": "contact",
"path": "/contact"
}
]
export class App extends React.Component {
renderPageLinks() {
return pages.map((page) => {
return <a href={page.path} key={page.slug} rel={"noreferrer"} target={"_self"}><li className={"nav-links"}>{page.slug}</li></a>
})
}
render() {
return (
<div id={"container"}>
<NavBar pages={this.renderPageLinks()} />
<BrowserRouter>
<Routes>
<Route path={"/"} element={<HomePage />} />
<Route path={"/contact"} element={<ContactPage />} />
<Route path={"*"} element={<NotFound />} />
</Routes>
</BrowserRouter>
<Footer />
</div>
)
}
}
-59
View File
@@ -1,59 +0,0 @@
import React from 'react';
import {Href} from './Utilities'
export class NavBar extends React.Component {
render() {
return (
<div id={"nav"}>
<ul style={{ paddingLeft:"0px" }} id={"nav-items"}>
{this.props.pages}
<div className={"social"}>
<a href={"https://twitter.com/zstreamss"} target={"_blank"} rel={"noreferrer"}>
<i className="fa-brands fa-twitter" aria-hidden="true"></i>
</a>
<a href={"https://social.thatalex.dev"} target={"_blank"} rel={"noreferrer"}>
<i className={"fa-brands fa-mastodon"} aria-hidden={"true"} />
</a>
<a href={"https://github.com/azpha"} target={"_blank"} rel={"noreferrer"}>
<i className="fa-brands fa-github" aria-hidden="true"></i>
</a>
<a href={"https://linkedin.com/in/thatalex"} target={"_blank"} rel={"noreferrer"}>
<i className="fa-brands fa-linkedin-in" aria-hidden="true"></i>
</a>
<a href={"mailto:hi@thatalex.dev"} target={"_blank"} rel={"noreferrer"}>
<i className="fa fa-envelope" aria-hidden="true"></i>
</a>
</div>
</ul>
</div>
)
}
}
export class Footer extends React.Component {
render() {
return (
<div id={"footer"}>
<p>Made with <i style={{color:"red"}} className={"fa-solid fa-heart"} /> & <i style={{color:"gray"}} className={"fa-solid fa-music"} /> by Alex</p>
<p><Href url={"https://github.com/azpha/website"} tab={"_blank"} content={"Source Code"} /></p>
</div>
)
}
}
export class ShowcaseCard extends React.Component {
render() {
if (this.props.header && this.props.paragraph) return (
<div id={"card"}>
<div id={"card-content"}>
<div id={"card-header"}>
{this.props.url ? <Href url={this.props.url} tab={"_blank"} content={<h1>{this.props.header}</h1>} /> : <h1>{this.props.header}</h1>}
</div>
<div id={"card-paragraph"}>
<p>{this.props.paragraph}</p>
</div>
</div>
</div>
)
}
}
-94
View File
@@ -1,94 +0,0 @@
import React from 'react';
import {ShowcaseCard} from "./Components";
export class HomePage extends React.Component {
render() {
return (
<div id={"home"} className={"centered horizontally vertically"} style={{paddingBottom:"10%"}}>
<div style={{ textAlign:"center" }}>
<div id={"profile"}>
<img width={"100px"} alt={"Profile"} src={"https://pbs.twimg.com/profile_images/1587882255740985346/5knCQsEd_400x400.jpg"} />
<h1 style={{color:"white"}}>Alex</h1>
<p style={{color:"white"}}>Just about everything QA @ <a href={"https://medal.tv"}>Medal.tv</a></p>
</div>
<ShowcaseCard
url={"https://github.com/azpha/splitstat"}
header={"SplitStat"}
paragraph={"SplitStat was a Discord bot that interfaced with Tracker Network's API to return and compare SplitStat: Arena Warfare stats with others."}
/>
<ShowcaseCard
url={"https://pause.thatalex.dev"}
header={"Pause!"}
paragraph={"Pause my music. Website that controls my Spotify client using the full suite of controls; skip, pause, repeat, shuffle, volume, you name it!"}
/>
<ShowcaseCard
url={"https://donotbro.me"}
header={"donotbrome"}
paragraph={"Just don't bro me. A website that one of my friends sparked me to make from starting conversations with one word; 'bro'."}
/>
</div>
</div>
)
}
}
export class ContactPage extends React.Component {
async sendMessage(event) {
event.preventDefault()
let data = new FormData(event.target)
return fetch("https://ash-api.thatalex.dev/v3/tools/contact", {
method: "POST",
headers: {
'content-type': "application/json"
},
body: JSON.stringify({
"name": data.get("name"),
"email": data.get("email"),
"subject": "Website form submission",
"message": data.get("message")
})
})
.then(result => {
if (result.ok) window.location.href="/?contact=success"
else return window.location.href="?contact=fail";
})
.catch(err => {
console.log('Contact request failed with error "' + err.message + '"');
return window.location.href="?contact=fail";
})
}
render() {
return (
<div id={"contact"} className={"centered horizontally vertically"}>
<div id={"form-container"}>
<h1 style={{whiteSpace: "nowrap"}}>lets get in touch</h1>
<br />
<form onSubmit={this.sendMessage} style={{textAlign:"center"}}>
<label htmlFor={"name"}>Name:</label><br />
<input type={"name"} id={"name"} name={"name"} /><br />
<label htmlFor={"email"}>Email:</label><br />
<input type={"email"} id={"email"} name={"email"} /><br />
<label htmlFor={"message"}>Message:</label><br />
<input type={"message"} id={"message"} name={"message"} /><br />
<input type="submit" value="Submit" />
</form>
</div>
</div>
)
}
}
export class NotFound extends React.Component {
render() {
return (
<div id={"error"} className={"centered horizontally vertically"} style={{bottom:"10%", lineHeight:"1.5em", color:"white", textAlign:"center"}}>
<video autoPlay={true} loop={true} style={{pointerEvents: "none", width:"500px"}}>
<source src={"https://storage.thatalex.dev/content/polar_bear-v2.mp4"} type={"video/mp4"} />
</video>
<h1>Well, this is awkward..</h1>
<p>You've landed on a page that just doesn't exist.<br />Enjoy this low-quality polar bear, traveller. You'll need it.</p>
</div>
)
}
}
-2
View File
@@ -1,2 +0,0 @@
import { io } from 'socket.io-client';
export const socket = io("https://api.zephmakes.tech");
-41
View File
@@ -1,41 +0,0 @@
import React from 'react';
import {NotFound} from './Pages';
export class Href extends React.Component {
render() {
if (this.props.url && this.props.content && this.props.tab) return (
<a
href={this.props.url}
rel={"noreferrer"}
target={this.props.tab}
>{this.props.content}</a>
)
}
}
export class Redirector extends React.Component {
constructor(props) {
super(props);
this.state = {
redirectTo: props.url,
success: null
}
}
async componentDidMount() {
if (this.state.redirectTo) {
window.location.href = this.state.redirectTo;
this.state.success = true;
}
else await this.setState({success:false});
console.log(this.state)
}
render() {
return (
<div id={"redirector"}>
{!this.state.success ? <NotFound /> : null}
</div>
)
}
}
-12
View File
@@ -1,12 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
// components/global styling
import { App } from './App';
import './main.css';
// react 18 compliance
const root = ReactDOM.createRoot(document.getElementById("root"))
root.render(
<App />
)
-175
View File
@@ -1,175 +0,0 @@
/* css reset */
html, body, ul, h1, h2, h3, h4 {
margin:0;
padding:0;
}
html,body {
background-color:black;
font-family: 'Open Sans', sans-serif;
overflow-x:hidden;
}
/* global */
a {
color:white;
text-decoration:none;
}
a:hover {
color:gray;
}
.centered {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: absolute;
z-index:-1;
}
.horizontally {
margin-left:auto;
margin-right:auto;
left:0;
right:0;
}
.vertically {
margin-top:0;
margin-bottom:0;
top:0;
bottom:0;
}
input[type="text"],
input[type="email"],
textarea {
background-color: white;
border: 1px solid gray;
color: black;
}
input[type="submit"] {
background-color: black;
border: none;
color: white;
}
/*components*/
#contact {
padding-bottom:5%;
}
#form-container {
background-color:white;
border-radius:10px;
border-style:solid;
border-color:gray;
padding: 5vw 5vh;
}
#form {
width:30vw;
padding:110px 100px;
background-color:gray;
border-radius:50px;
border-color:white;
border-style:solid;
}
#card {
display:inline-block;
margin:auto;
padding:10px;
text-align:center;
vertical-align: top;
}
#card-content {
background-color:black;
border-radius:50px;
border-style:solid;
color:#bfbfbf;
width:300px;
height:200px;
}
#card-header {
padding-top:20px;
font-size:15px;
}
#card-paragraph {
font-size:15px;
padding:0 10px;
}
@media only screen and (max-width:655px) {
#profile {
padding-top:10%;
}
}
/* nav bar */
#nav {
background-color:black;
text-align:left;
padding-left:15px;
overflow-y:hidden;
}
#nav-items ul {
list-style-type:none;
list-style-position:inside;
}
#nav-items li {
display:inline-block;
padding:10px;
font-size:20px;
}
#nav-items a {
color:white;
}
#nav-items a:hover {
color:gray;
}
.social {
padding:6px;
float:right;
font-size:25px;
}
.social a {
padding:10px 8px;
color:white;
}
.social a:hover {
color:gray;
}
@media only screen and (max-width:500px) {
.social {
display:none;
}
#nav {
padding-left:15px;
}
}
/* footer */
#footer {
text-align:center;
color:white;
background-color:#121212;
padding:20px;
position:fixed;
bottom:0;
left:0;
right:0;
line-height:0.1;
}
#footer a {
color:white;
text-decoration:none;
}
#footer a:hover {
color:gray;
text-decoration:underline;
}
#footer a:visited {
color:white;
}
/* animations */
@keyframes hover {
from { opacity:1; }
to { opacity:0.5; }
}