<link href="https://fonts.googleapis.com/css2?family=Montserrat&family=Oswald:wght@400;600&display=swap" rel="stylesheet">
<header>
<div>
<h1>Álvaro Montoro</h1>
<p>CSS Aficionado</p>
</div>
<a class="more" href="#about" title="About">
<span class="a11y-hidden">Go to about section</span>
</a>
</header>
<main>
<section id="about">
<div class="container mini">
<h2>Hello there!</h2>
<p>
I am a Software Engineer based in Austin, TX, currently working as a
<a href="/work">UI Manager at Visa</a>.</p>
<p>
I have over 15 years of experience in software development, and a passion for Front-End.
I enjoy exploring web technologies and creating sites and web apps.
</p>
<p>
My work involves a lot of HTML, CSS, and JavaScript (with React), but I also have plenty
experience with back-end development and databases.
</p>
<p>
I <a href="/blog">blog about technology</a>,
act as a <a href="https://es.stackoverflow.com/users/250/alvaro-montoro?tab=profile">
moderator in Stack Overflow en Español</a>, and
often engage with the <a href="https://twitter.com/alvaro_montoro">Tech Twitter community</a>.
</p>
</div>
<a class="more" href="#projects" title="Projects">
<span class="a11y-hidden">Go to projects section</span>
</a>
</section>
<section id="projects">
<div class="container left">
<h2>Projects & Demos</h2>
<p>I like building things using Web technologies, and exploring what HTML and CSS have to offer.</p>
<p>
I often share demos on <a href="https://codepen.io/alvaromontoro">CodePen</a>, but I build many other things:
</p>
<ul>
<li><a href="https://codepen.io/collection/AOaOdx">CSS Illustrations</a></li>
<li><a href="https://codepen.io/collection/nvJYmm">CSS Games</a></li>
<li>
<a href="https://github.com/alvaromontoro">JavaScript projects</a>:
<ul>
<li><a href="https://github.com/alvaromontoro/gamecontroller.js">GameController.JS</a></li>
<li><a href="https://github.com/alvaromontoro/gamepad-simulator">Gamepad Simulator</a></li>
<li><a href="https://github.com/alvaromontoro/TourGuide">TourGuide.JS</a></li>
</ul>
</li>
</ul>
</div>
</section>
</main>
<footer>
<p>2021 © <a href="https://alvaromontoro.com">Álvaro Montoro</a></p>
<nav class="social-links" aria-describedby="social-media-links-title">
<h2 id="social-media-links-title" class="a11y-hidden">Social Media Links</h2>
<a href="https://codepen.io/alvaromontoro" rel="external noreferrer">
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" title="CodePen"><path fill="currentcolor" d="m24 7.598c-.044-.264-.08-.47-.36-.641-11.449-6.791-11.287-7.297-12.03-6.848-8.677 5.394-11.092 6.597-11.439 7.017-.315.323-.171.818-.171 8.298-.021.851 7.743 5.462 11.519 8.404.333.237.752.199 1.003-.029 11.224-7.956 11.497-7.636 11.478-8.375 0 0-.012-7.927 0-7.826zm-1.5 6.491-3.876-2.359 3.876-2.697zm-5.277-3.212-4.473-2.722v-6.07l9.126 5.555zm-5.223 3.633-3.876-2.697 3.876-2.359 3.876 2.359zm-.75-12.426v6.074c-1.739 1.079-3.209 1.98-4.451 2.734l-4.675-3.252zm-5.857 9.658c-1.874 1.127-3.098 1.843-3.893 2.32v-5.029zm1.33.924 4.527 3.149v5.999l-9.126-6.349zm6.027 9.149v-5.999l4.527-3.149 4.599 2.799z"></path></svg>
<span class="a11y-hidden">Codepen</span>
</a>
<a href="https://github.com/alvaromontoro" rel="external noreferrer">
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" title="Github"><path fill="currentcolor" d="m.184 10.462c-.779 4.906 1.401 10.823 8.123 13.006.12.022.231.032.335.032.782 0 1.32-.582 1.32-1.3-.097-.523.383-2.642-.92-2.357-2.519.536-2.821-.871-3.205-1.607 1.086 1.394 2.718 1.359 3.949.819.683-.3.326-1.064.65-1.343.496-.426.244-1.243-.407-1.314-2.314-.255-4.457-1.001-4.457-4.702 0-2.168 1.505-2.362 1.09-3.269-.015-.033-.333-.754-.045-1.849 1.419.262 2.072 1.28 2.753 1.097 1.687-.46 3.544-.46 5.23 0 .704.189 1.207-.801 2.738-1.103.441 1.654-.473 2.058.103 2.677.632.68.953 1.503.953 2.447 0 5.564-4.717 3.957-5.101 5.22-.088.288.005.599.235.792.61.513.53 1.83.465 2.889-.067 1.098-.125 2.045.482 2.579.214.19.595.393 1.284.253 6.634-2.131 8.83-8.022 8.063-12.917-2.096-13.368-21.526-13.352-23.638-.05zm8.27 10.978.004.505c-.523-.181-1.015-.39-1.475-.623.425.109.913.156 1.471.118zm.37-3.7c-.005.026-.01.053-.015.08-.853.252-1.509.001-1.957-.752 0-.001 0-.001-.001-.002.68.364 1.381.56 1.973.674zm3.176-15.74c11.833 0 14.502 16.267 3.469 19.941-.038-.297-.003-.857.021-1.252.058-.951.126-2.059-.213-2.985 5.088-1.059 5.513-6.646 3.554-9.135.243-.952.145-3.189-.729-3.463-.206-.065-1.305-.304-3.437 1.037-1.741-.416-3.62-.417-5.361 0-1.064-.667-3.462-1.752-3.922-.6-.534 1.342-.407 2.427-.248 3.03-1.739 2.204-1.218 5.894.534 7.626-.993-.475-2.361-.637-2.656.314-.323 1.037.912.911 1.679 2.804.073.236.208.513.415.788-6.811-5.565-3.525-18.105 6.894-18.105z"></path></svg>
<span class="a11y-hidden">Github</span>
</a>
<a href="https://twitter.com/alvaro_montoro" rel="external noreferrer">
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" title="Twitter"><path fill="currentcolor" d="m.473 19.595c2.222 1.41 4.808 2.155 7.478 2.155 3.91 0 7.493-1.502 10.09-4.229 2.485-2.61 3.852-6.117 3.784-9.676.942-.806 2.05-2.345 2.05-3.845 0-.575-.624-.94-1.13-.647-.885.52-1.692.656-2.522.423-1.695-1.652-4.218-2-6.344-.854-1.858 1-2.891 2.83-2.798 4.83-3.139-.383-6.039-1.957-8.061-4.403-.332-.399-.962-.352-1.226.1-.974 1.668-.964 3.601-.117 5.162-.403.071-.652.41-.652.777 0 1.569.706 3.011 1.843 3.995-.212.204-.282.507-.192.777.5 1.502 1.632 2.676 3.047 3.264-1.539.735-3.241.98-4.756.794-.784-.106-1.171.948-.494 1.377zm7.683-1.914c.561-.431.263-1.329-.441-1.344-1.24-.026-2.369-.637-3.072-1.598.339-.022.69-.074 1.024-.164.761-.206.725-1.304-.048-1.459-1.403-.282-2.504-1.304-2.917-2.62.377.093.761.145 1.144.152.759.004 1.046-.969.427-1.376-1.395-.919-1.99-2.542-1.596-4.068 2.436 2.468 5.741 3.955 9.237 4.123.501.031.877-.44.767-.917-.475-2.059.675-3.502 1.91-4.167 1.222-.66 3.184-.866 4.688.712.447.471 1.955.489 2.722.31-.344.648-.873 1.263-1.368 1.609-.211.148-.332.394-.319.651.161 3.285-1.063 6.551-3.358 8.96-2.312 2.427-5.509 3.764-9.004 3.764-1.39 0-2.753-.226-4.041-.662 1.54-.298 3.003-.95 4.245-1.906z"></path></svg>
<span class="a11y-hidden">Twitter</span>
</a>
<a href="https://www.youtube.com/c/AlvaroMontoroCSS" rel="external noreferrer">
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" title="Youtube"><path fill="currentcolor" d="m9.939 7.856c-.497-.297-1.134.062-1.134.644v7c0 .585.638.939 1.134.645l5.869-3.495c.488-.291.487-.997.001-1.289zm.366 6.325v-4.36l3.655 2.183z"></path><path fill="currentcolor" d="m19.904 3.271c-4.653-.691-11.153-.691-15.808 0-1.862.276-3.329 1.738-3.649 3.636-.596 3.523-.596 6.664 0 10.186.32 1.899 1.787 3.36 3.649 3.636 2.332.346 5.124.519 7.915.519 2.786 0 5.571-.172 7.894-.518 1.86-.276 3.326-1.737 3.648-3.636.596-3.523.596-6.665 0-10.188-.32-1.897-1.787-3.359-3.649-3.635zm2.17 13.573c-.213 1.256-1.173 2.222-2.39 2.402-4.518.671-10.838.671-15.368-.001-1.218-.181-2.179-1.146-2.391-2.402-.574-3.394-.574-6.291 0-9.687.213-1.256 1.173-2.22 2.392-2.402 2.262-.335 4.973-.503 7.682-.503 2.711 0 5.422.168 7.684.503 1.218.181 2.179 1.146 2.391 2.402.574 3.396.574 6.293 0 9.688z"></path></svg>
<span class="a11y-hidden">Youtube</span>
</a>
<a href="https://www.linkedin.com/in/alvaromontoro/" rel="external noreferrer">
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" title="Linkedin"><path fill="currentcolor" d="m18.59 24c.103 0 4.762-.001 4.66-.001.414 0 .75-.336.75-.75-.35-7.857 1.842-16.148-6.338-16.148-1.573 0-2.826.537-3.729 1.247 0-1.461-1.579-.653-5.224-.87-.414 0-.75.336-.75.75.302 14.166-.674 15.771.75 15.771h4.66c1.353 0 .492-1.908.75-8.188 0-2.594.75-3.102 2.046-3.102 1.434 0 1.675.996 1.675 3.228.257 6.167-.598 8.063.75 8.063zm-2.425-12.791c-4.491 0-3.546 4.938-3.546 11.29h-3.16v-13.521h2.974v1.298c0 .72 1.097 1.074 1.479.35.492-.934 1.77-2.025 3.75-2.025 3.527 0 4.838 1.733 4.838 6.396v7.503h-3.16c0-7.144.756-11.291-3.175-11.291z"></path><path fill="currentcolor" d="m1.122 7.479c-1.42 0-.448 1.585-.75 15.771 0 .414.336.75.75.75h4.665c1.42 0 .448-1.585.75-15.771 0-1.295-1.881-.531-5.415-.75zm3.915 15.021h-3.165v-13.521h3.165z"></path><path fill="currentcolor" d="m3.452 0c-4.576 0-4.548 6.929 0 6.929 4.545 0 4.581-6.929 0-6.929zm0 5.429c-2.568 0-2.592-3.929 0-3.929 2.597 0 2.564 3.929 0 3.929z"></path></svg>
<span class="a11y-hidden">Linkedin</span>
</a>
</nav>
</footer>
:root {
--main: 215deg;
--bg: hsl(var(--main), 50%, 20%);
--c1: hsl(var(--main), 50%, 50%);
--c2: #fff;
--c3: hsl(var(--main), 50%, 90%);;
/*
--bg: #1d3557;
--c1: #457b9d;
--c2: #fff;
--c3: #a8dadc;
--bg: #112;
--c1: blue;
--c2: white;
--c3: #eef;
*/
}
html, body {
background: var(--bg);
font-family: Montserrat, Oswald, Arial, sans-serif;
color: #dde;
margin: 0;
padding: 0;
font-size: 1.125em;
scroll-snap-type: y mandatory;
scroll-behavior: smooth;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 400;
font-family: Oswald, Montserrat, arial, sans-serif;
margin: 0;
color: var(--c2);
}
h1 {
font-size: 3rem;
}
h2 {
font-size: 2rem;
}
p, li {
color: var(--c3);
margin: 0;
font-size: 1rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
line-height: 1.5;
max-width: 60ch;
}
li {
margin-bottom: 0.25rem;
}
a, a:link, a:visited {
color: var(--c2);
}
a:hover, a:focus {
text-decoration: none;
}
section {
min-height: 100vh;
display: flex;
align-items: center;
scroll-snap-align: start;
position: relative;
}
.container {
width: 80%;
max-width: 1000px;
margin: auto auto;
padding: 2rem 0;
box-sizing: border-box;
}
.container.mini {
max-width: 500px;
}
.container.left {
padding-right: 10vw;
}
.more {
width: 2vmin;
height: 2vmin;
border: 0;
border-bottom: 2px solid var(--c3);
border-left: 2px solid var(--c3);
position: absolute;
bottom: 2rem;
left: 50%;
transform: translate(-50%, -50%) rotate(-45deg);
margin: 0;
animation: none;
opacity: 1;
overflow: hidden;
}
.a11y-hidden {
display: block;
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
left: -10000in;
clip: rect(0, 0, 0, 0);
clip-path: polygon(0 0, 0 0, 0 0, 0 0);
}
footer {
scroll-snap-align: start;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
flex-wrap: wrap;
padding: 14vh 1rem 3rem 1rem;
background-repeat: no-repeat;
background-size: 70% 5%;
background-image:
linear-gradient(var(--c1),var(--c1)),
linear-gradient(var(--c2),var(--c2));
background-position: 0% 5%, 100% 15%;
}
footer > div {
margin-bottom: 1rem;
}
footer nav {
display: flex;
justify-content: flex-end;
flex-wrap: wrap;
flex: 1;
}
footer nav a {
margin-right: 1rem;
}
footer nav a:hover {
color: var(--c1);
}
footer svg {
width: 3rem;
height: 3rem;
display: inline-block;
}
/* HEADER - START */
header {
height: 100vh;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
background-color: var(--bg);
scroll-snap-align: start;
}
@keyframes showBars {
0% { opacity: 0; background-position: -400% 7%, 500% 21%, -400% 35%, 500% 49%, -400% 63%, 500% 77%, -400% 91% ; }
14% { background-position: 0% 7%, 500% 21%, -400% 35%, 500% 49%, -400% 63%, 500% 77%, -400% 91% ; }
28% { background-position: 0% 7%, 100% 21%, -400% 35%, 500% 49%, -400% 63%, 500% 77%, -400% 91% ; }
42% { background-position: 0% 7%, 100% 21%, 0% 35%, 500% 49%, -400% 63%, 500% 77%, -400% 91% ; }
56% { background-position: 0% 7%, 100% 21%, 0% 35%, 100% 49%, -400% 63%, 500% 77%, -400% 91% ; }
70% { background-position: 0% 7%, 100% 21%, 0% 35%, 100% 49%, 0% 63%, 500% 77%, -400% 91% ; }
84% { background-position: 0% 7%, 100% 21%, 0% 35%, 100% 49%, 0% 63%, 100% 77%, -400% 91% ; }
98%, 100% { opacity: 1; background-position: 0% 7%, 100% 21%, 0% 35%, 100% 49%, 0% 63%, 100% 77%, 0% 91%; }
}
header::after {
content: "";
width: 100%;
height: 20vh;
position: absolute;
top: 0;
left: 0;
background-color: inherit;
background-repeat: no-repeat;
background-size: 70% 7%;
background-image:
linear-gradient(var(--c1),var(--c1)),
linear-gradient(var(--c2),var(--c2)),
linear-gradient(var(--c1),var(--c1)),
linear-gradient(var(--c2),var(--c2)),
linear-gradient(var(--c1),var(--c1)),
linear-gradient(var(--c2),var(--c2)),
linear-gradient(var(--c1),var(--c1));
background-position: 0% 7%, 100% 21%, 0% 35%, 100% 49%, 0% 63%, 100% 77%, 0% 91%;
animation: showBars 3.5s;
}
@keyframes showText {
0% { opacity: 0; transform: translate(0, -100%); }
20% { opacity: 0; }
100% { opacity: 1; transform: translate(0, 0); }
}
header > div {
position: relative;
transform: translate(-100%, 0);
opacity: 0;
animation: showText 2s 1;
animation-fill-mode: forwards;
animation-delay: 3.5s;
text-align: center;
}
header h1 {
font-size: 10vw;
}
header p {
font-size: 5vw;
}
/* HEADER - END */
@media all and (min-width: 768px) {
html, body {
font-size: 1.25em;
}
footer {
justify-content: space-between;
flex-direction: row;
align-items: center;
padding: 10vh 1rem 3rem 1rem;
background-size: 70% 7%;
background-position: 0% 7%, 100% 21%;
}
@keyframes showBarsBig {
0% { background-position: 7% -400%, 21% 500%, 35% -400%, 49% 500%, 63% -400%, 77% 500%, 91% -400%; }
14% { background-position: 7% 0%, 21% 500%, 35% -400%, 49% 500%, 63% -400%, 77% 500%, 91% -400%; }
28% { background-position: 7% 0%, 21% 100%, 35% -400%, 49% 500%, 63% -400%, 77% 500%, 91% -400%; }
42% { background-position: 7% 0%, 21% 100%, 35% 0%, 49% 500%, 63% -400%, 77% 500%, 91% -400%; }
56% { background-position: 7% 0%, 21% 100%, 35% 0%, 49% 100%, 63% -400%, 77% 500%, 91% -400%; }
70% { background-position: 7% 0%, 21% 100%, 35% 0%, 49% 100%, 63% 0%, 77% 500%, 91% -400%; }
84% { background-position: 7% 0%, 21% 100%, 35% 0%, 49% 100%, 63% 0%, 77% 100%, 91% -400%; }
98%, 100% { background-position: 7% 0%, 21% 100%, 35% 0%, 49% 100%, 63% 0%, 77% 100%, 91% 0%; }
}
@keyframes showTextBig {
0% { opacity: 0; transform: translate(-100%, 0); }
20% { opacity: 0; }
100% { opacity: 1; transform: translate(0vw, 0); }
}
header {
height: 100vh;
flex-direction: column;
align-items: flex-start;
justify-content: center;
}
header::after {
width: 20vw;
height: 100%;
background-size: 7% 70%;
background-position:
7% 0%, 21% 100%, 35% 0%, 49% 100%, 63% 0%, 77% 100%, 91% 0%;
animation-name: showBarsBig;
}
header > div {
animation-name: showTextBig;
margin-left: 22vw;
text-align: left;
}
header h1 {
font-size: 8vw;
}
header p {
font-size: 4vw;
margin-bottom: 0;
}
#about {
position: relative;
}
#about::before,
#about::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 20vw;
height: 100%;
background-image:
linear-gradient(var(--c2),var(--c2)),
linear-gradient(var(--c2),var(--c2)),
linear-gradient(var(--c2),var(--c2));
background-size: 7% 21%, 7% 14%, 7% 7%;
background-position: 21% 0%, 49% 0%, 77% 0%;
background-repeat: no-repeat;
pointer-events: none;
}
#about::after {
left: auto;
right: 0;
background-size: 7% 41%, 7% 34%, 7% 27%;
background-position: 21% 100%, 49% 100%, 77% 100%;
transform: translate(0, 20%);
}
}
@media (prefers-reduced-motion) {
html, body {
scroll-behavior: auto;
scroll-snap-type: none;
}
header::after {
animation: none !important;
}
@keyframes showTextReduced {
0% { opacity: 0; }
100% { opacity: 1; }
}
header > div {
transform: translate(0,0);
animation-name: showTextReduced;
animation-delay: 0.5s !important;
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.