mirror of
https://github.com/ryan-haskell/elm-spa.git
synced 2024-11-22 03:12:01 +03:00
638 lines
14 KiB
CSS
638 lines
14 KiB
CSS
:root {
|
|
--font--display: 'Nunito Sans', sans-serif;
|
|
--font--body: 'Nunito', sans-serif;
|
|
--font--monospace: 'Fira Code', monospace;
|
|
|
|
--weight--light: 300;
|
|
--weight--semibold: 600;
|
|
--weight--bold: 800;
|
|
|
|
--color--white: #ffffff;
|
|
--color--grey-100: #f0f0f0;
|
|
--color--grey-200: #cccccc;
|
|
--color--grey-300: #aaaaaa;
|
|
--color--grey-500: #696969;
|
|
--color--grey-700: #333333;
|
|
--color--green: #407742;
|
|
--color--green-dark: #264727;
|
|
--color--green-light: #d7ead8;
|
|
--color--blue: dodgerblue;
|
|
|
|
--size--h1: 3em;
|
|
--size--h2: 2em;
|
|
--size--h3: 1.5em;
|
|
--size--h4: 1.2em;
|
|
--size--h5: 1.2em;
|
|
--size--h6: 0.75em;
|
|
--size--paragraph: 1.2em;
|
|
|
|
--shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
|
|
--shadow-dark: 0 0.5em 2em rgb(0, 0, 0, 0.2);
|
|
|
|
--height--header: 102px;
|
|
}
|
|
|
|
:root {
|
|
--color--bg: var(--color--grey-100);
|
|
--color--bg-bold: var(--color--white);
|
|
--color--text: var(--color--grey-700);
|
|
--color--text-bold: var(--color--grey-700);
|
|
--color--text-faint: var(--color--grey-300);
|
|
--color--border: var(--color--grey-200);
|
|
--color--border-bold: var(--color--grey-300);
|
|
|
|
--color--outline: var(--color--blue);
|
|
--color--pre-text: var(--color--grey-100);
|
|
--color--pre-border: var(--color--grey-700);
|
|
--color--pre-bg: var(--color--grey-700);
|
|
--color--inline-code: var(--color--green);
|
|
--color--quote-border: var(--color--green);
|
|
--color--quote-bg: var(--color--bg-bold);
|
|
--color--quote-text: var(--color--grey-500);
|
|
--color--table-bg: var(--color--bg-bold);
|
|
--color--table-bg-alt: var(--color--grey-100);
|
|
--color--table-border: var(--color--border);
|
|
|
|
--color--text-100: var(--color--grey-100);
|
|
--color--text-500: var(--color--grey-500);
|
|
--color--text-700: var(--color--grey-700);
|
|
--color--primary: var(--color--green);
|
|
--color--primary-light: var(--color--green-light);
|
|
|
|
--color--bg-100: var(--color--grey-100);
|
|
--color--bg-500: var(--color--grey-500);
|
|
--color--bg-700: var(--color--grey-700);
|
|
|
|
--color--npm-hover: indianred;
|
|
--color--github-hover: mediumseagreen;
|
|
--color--elm-hover: dodgerblue;
|
|
|
|
--color--gradient-light: var(--color--green);
|
|
--color--gradient-dark: var(--color--green-dark);
|
|
--color--gradient-text: var(--color--white);
|
|
--color--gradient-inline-code: var(--color--white);
|
|
|
|
--color--shadow-05: rgba(0, 0, 0, 0.05);
|
|
--color--shadow-10: rgba(0, 0, 0, 0.10);
|
|
--color--shadow-25: rgba(0, 0, 0, 0.25);
|
|
--color--shadow-40: rgba(0, 0, 0, 0.40);
|
|
--color--shadow-50: rgba(0, 0, 0, 0.50);
|
|
--shadow: 0 4px 8px var(--color--shadow-05);
|
|
--shadow-dark: 0 0.5em 2em var(--color--shadow-25);
|
|
}
|
|
|
|
|
|
/* Resets */
|
|
@media screen and (min-width: 1920px ) {
|
|
html { font-size: 20px; }
|
|
:root { --height--header: 127px; }
|
|
}
|
|
|
|
body {
|
|
background: var(--color--bg);
|
|
color: var(--color--text);
|
|
font-family: var(--font--body);
|
|
font-weight: var(--weight--light);
|
|
overflow-y: scroll;
|
|
padding-top: var(--height--header);
|
|
}
|
|
|
|
* {
|
|
outline-color: var(--color--outline);
|
|
outline-offset: 0.25em;
|
|
}
|
|
|
|
input {
|
|
line-height: normal;
|
|
-webkit-appearance: none;
|
|
}
|
|
|
|
code {
|
|
font-family: var(--font--monospace);
|
|
font-variant-ligatures: normal;
|
|
}
|
|
|
|
pre {
|
|
line-height: 1.45;
|
|
border: solid 1px var(--color--pre-border);
|
|
border-radius: 0.25rem;
|
|
padding: 1rem;
|
|
background-color: var(--color--pre-bg);
|
|
}
|
|
|
|
.aside {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.table-of-contents {
|
|
min-width: 14em;
|
|
max-width: 14em;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
main {
|
|
animation: fadeIn 200ms 400ms ease-in forwards;
|
|
opacity: 0;
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
hr { border: 0; }
|
|
|
|
.container { max-width: 64rem; }
|
|
|
|
/* Typography */
|
|
|
|
.h1 {
|
|
font-family: var(--font--display);
|
|
font-weight: var(--weight--bold);
|
|
font-size: var(--size--h1);
|
|
line-height: 1;
|
|
}
|
|
|
|
.h2 {
|
|
font-family: var(--font--display);
|
|
font-weight: var(--weight--bold);
|
|
font-size: var(--size--h2);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.h3 {
|
|
font-family: var(--font--display);
|
|
font-weight: var(--weight--bold);
|
|
font-size: var(--size--h3);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.h4 {
|
|
font-family: var(--font--body);
|
|
font-weight: var(--weight--bold);
|
|
font-size: var(--size--h4);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.h5 {
|
|
font-family: var(--font--body);
|
|
font-weight: var(--weight--light);
|
|
font-size: var(--size--h5);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.h6 {
|
|
font-family: var(--font--body);
|
|
font-weight: var(--weight--light);
|
|
font-size: var(--size--h6);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.p, li {
|
|
font-family: var(--font--body);
|
|
font-weight: var(--weight--light);
|
|
font-size: var(--size--paragraph);
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.faded { opacity: 0.6; }
|
|
|
|
.markdown {
|
|
display: flex;
|
|
flex-direction: column;
|
|
max-width: 36em;
|
|
}
|
|
|
|
.markdown hr {
|
|
margin-top: 2em;
|
|
}
|
|
|
|
.markdown > h1:not(:first-child),
|
|
.markdown > h2:not(:first-child) {
|
|
padding-top: 2rem;
|
|
}
|
|
|
|
.markdown > h3:not(:first-child),
|
|
.markdown > h4:not(:first-child) {
|
|
padding-top: 1rem;
|
|
}
|
|
|
|
.markdown > h1:first-child { margin-bottom: 2rem }
|
|
|
|
.markdown > *:not(:last-child) { margin-bottom: 1.2rem }
|
|
|
|
.markdown code {
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.markdown table code {
|
|
white-space: pre;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.markdown p code,
|
|
.markdown li code {
|
|
font-size: 0.92em;
|
|
color: var(--color--inline-code);
|
|
}
|
|
|
|
.markdown p code::before, .markdown li code::before { content: '`'; opacity: 0.75; pointer-events: none; user-select: none; }
|
|
.markdown p code::after, .markdown li code::after { content: '`'; opacity: 0.75; pointer-events: none; user-select: none; }
|
|
|
|
.markdown blockquote {
|
|
padding-left: 1rem;
|
|
border-left: solid 4px var(--color--quote-border);
|
|
background-color: var(--color--quote-bg);
|
|
padding: 1rem;
|
|
box-shadow: 0 4px 8px var(--color--shadow-05);
|
|
color: var(--color--quote-text);
|
|
}
|
|
|
|
.markdown blockquote::before {
|
|
content: 'Note:';
|
|
display: block;
|
|
/* font-size: var(--size--paragraph); */
|
|
line-height: 1.4;
|
|
|
|
padding-bottom: 0.25em;
|
|
font-weight: bold;
|
|
color: var(--color--text-bold);
|
|
font-size: 1.2em;
|
|
}
|
|
|
|
.markdown ul, .markdown ol {
|
|
margin-left: 1.5rem;
|
|
}
|
|
|
|
.markdown li {
|
|
padding-bottom: 0.75rem;
|
|
}
|
|
|
|
.markdown pre {
|
|
position: relative;
|
|
border-color: var(--color--pre-border);
|
|
box-shadow: inset 0 0.5em 1.5em var(--color--shadow-40);
|
|
text-shadow: 0 0.125em 0.5em var(--color--shadow-50);
|
|
background-color: var(--color--pre-bg);
|
|
color: var(--color--pre-text);
|
|
padding: 1rem;
|
|
font-size: 0.9em;
|
|
font-family: var(--font--monospace);
|
|
}
|
|
|
|
.markdown pre.language-terminal {
|
|
position: relative;
|
|
padding-left: 2.25em;
|
|
}
|
|
|
|
.markdown pre.language-terminal::before {
|
|
font-family: var(--font--monospace);
|
|
content: '$ ';
|
|
position: absolute;
|
|
top: 1em;
|
|
left: 1em;
|
|
pointer-events: none;
|
|
user-select: none;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.markdown .table {
|
|
display: block;
|
|
width: 100%;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.markdown table {
|
|
border-radius: 5px;
|
|
overflow: hidden;
|
|
background-color: var(--color--table-bg);
|
|
border-color: var(--color--table-border);
|
|
font-size: 0.85em;
|
|
}
|
|
|
|
.markdown tr {
|
|
border-color: var(--color--table-border);
|
|
}
|
|
|
|
.markdown th,
|
|
.markdown td { padding: 0.75em }
|
|
|
|
.markdown tbody tr:nth-child(2n + 1) {
|
|
background-color: var(--color--table-bg-alt);
|
|
}
|
|
|
|
.markdown__link:hover::after {
|
|
content: ' 🔗';
|
|
display: inline-block;
|
|
font-size: 0.5em;
|
|
transform: translate(50%, -25%);
|
|
}
|
|
|
|
.markdown a img {
|
|
transition: transform 200ms ease-in-out, opacity 200ms ease-in-out;
|
|
}
|
|
|
|
.markdown a img:hover {
|
|
transform: scale(1.05);
|
|
opacity: 0.75;
|
|
}
|
|
|
|
.bold {
|
|
font-weight: var(--weight--bold);
|
|
}
|
|
|
|
/* Colors */
|
|
|
|
.text-100 { color: var(--color--text-100) }
|
|
.text-500 { color: var(--color--text-500) }
|
|
.text-700 { color: var(--color--text-700) }
|
|
.text-blue { color: var(--color--primary) }
|
|
|
|
.bg-white { background-color: var(--color--bg-bold) }
|
|
.bg-100 { background-color: var(--color--bg-100) }
|
|
.bg-500 { background-color: var(--color--bg-500) }
|
|
.bg-700 { background-color: var(--color--bg-700) }
|
|
|
|
.border-left {
|
|
border-left: solid 3px var(--color--border);
|
|
}
|
|
|
|
.border-thin {
|
|
border-width: 2px;
|
|
}
|
|
|
|
/* Links & Buttons */
|
|
.link, .underline {
|
|
border-bottom: solid 2px var(--color--border);
|
|
transition: border 200ms ease-in-out;
|
|
}
|
|
|
|
.button {
|
|
padding: 0.7em 1.2em;
|
|
background: var(--color--bg-bold);
|
|
border: 1px solid var(--color--border-bold);
|
|
color: var(--color--primary);
|
|
border-radius: 0.25em;
|
|
transition: transform 200ms ease-in-out, opacity 200ms ease-in-out;
|
|
transform-origin: center;
|
|
font-weight: var(--weight--bold);
|
|
}
|
|
|
|
.button:hover {
|
|
opacity: 0.8;
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.dropdown__link {
|
|
padding: 1rem;
|
|
transition: background-color 200ms ease-in-out;
|
|
}
|
|
|
|
.dropdown__link:focus .underline,
|
|
.dropdown__link:hover .underline {
|
|
border-color: var(--color--primary);
|
|
}
|
|
|
|
.dropdown__link:hover,
|
|
.dropdown__link:focus {
|
|
background-color: var(--color--primary-light);
|
|
}
|
|
|
|
.dropdown__link strong {
|
|
color: var(--color--primary);
|
|
}
|
|
|
|
.markdown__link:hover {
|
|
border-bottom: solid 2px var(--color--border);
|
|
}
|
|
|
|
.link:hover, .link:focus {
|
|
border-color: var(--color--primary);
|
|
}
|
|
|
|
/* STICKY SCROLLING */
|
|
.header {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 2;
|
|
background: var(--color--bg);
|
|
}
|
|
|
|
.header__logo {
|
|
font-size: 1.5em;
|
|
}
|
|
|
|
@media screen and (max-width: 640px) {
|
|
.header__logo { font-size: 1.25em }
|
|
}
|
|
|
|
.page {
|
|
background-color: var(--color--bg);
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.sticky {
|
|
position: sticky;
|
|
left: 0;
|
|
top: var(--height--header);
|
|
}
|
|
|
|
/* Images & Icons */
|
|
|
|
.logo {
|
|
background-image: url('/images/logo.svg');
|
|
background-size: contain;
|
|
min-width: 5em;
|
|
min-height: 5em;
|
|
}
|
|
|
|
.logo--small {
|
|
min-width: 1.5em;
|
|
min-height: 1.5em;
|
|
}
|
|
|
|
.logo__text {
|
|
white-space: nowrap;
|
|
font-weight: var(--weight--bold);
|
|
font-family: var(--font--display);
|
|
font-size: 1.25em;
|
|
}
|
|
|
|
.hero {
|
|
padding: 10em 0;
|
|
}
|
|
|
|
.hero__logo {
|
|
font-size: 1.75em;
|
|
}
|
|
|
|
@media screen and (max-width: 640px) {
|
|
.hero { padding: 5em 0 }
|
|
.hero__logo { font-size: 1em }
|
|
}
|
|
|
|
/* Search */
|
|
|
|
.search {
|
|
display: flex;
|
|
position: relative;
|
|
}
|
|
|
|
.search__input {
|
|
border-radius: 1.25em;
|
|
min-width: 0;
|
|
width: 15em;
|
|
padding: 0.5em 1em;
|
|
padding-right: 3.25em;
|
|
padding-left: 2.75em;
|
|
border: 0;
|
|
box-shadow: 0 2px 4px var(--color--shadow-10);
|
|
}
|
|
|
|
.search__icon {
|
|
/* display: none; */
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 0em;
|
|
transform: translate(1em, -50%);
|
|
}
|
|
|
|
.search__kbd {
|
|
position: absolute;
|
|
top: 50%;
|
|
right: 0em;
|
|
transform: translate(-1.5em, -50%);
|
|
pointer-events: none;
|
|
user-select: none;
|
|
padding: 0.5em 0.7em;
|
|
box-shadow: 0 1px 4px var(--color--shadow-20);
|
|
color: var(--color--text-faint);
|
|
border-radius: 3px;
|
|
font-family: var(--font--monospace);
|
|
font-size: 0.75em;
|
|
}
|
|
|
|
.icon {
|
|
width: 1.25em;
|
|
height: 1.25em;
|
|
background-size: contain;
|
|
background-position: center;
|
|
}
|
|
|
|
.icon--search {
|
|
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><ellipse cx="40" cy="40" rx="30" ry="30" fill="none" stroke="rgb(180, 180, 180)" stroke-width="10" /><line x1="66" y1="66" x2="85" y2="85" stroke-linecap="round" stroke="rgb(180, 180, 180)" stroke-width="10" /></svg>');
|
|
}
|
|
|
|
.link__icon {
|
|
font-size: 1.25em;
|
|
}
|
|
|
|
.fa-elm {
|
|
width: 0.85em;
|
|
height: 0.85em;
|
|
background-size: contain;
|
|
background-position: center;
|
|
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 323.141 322.95"><g><polygon fill="rgb(51,51,51)" points="161.649,152.782 231.514,82.916 91.783,82.916"/><polygon fill="rgb(51,51,51)" points="8.867,0 79.241,70.375 232.213,70.375 161.838,0"/><rect fill="rgb(51,51,51)" x="192.99" y="107.392" transform="matrix(0.7071 0.7071 -0.7071 0.7071 186.4727 -127.2386)" width="107.676" height="108.167"/><polygon fill="rgb(51,51,51)" points="323.298,143.724 323.298,0 179.573,0"/><polygon fill="rgb(51,51,51)" points="152.781,161.649 0,8.868 0,314.432"/><polygon fill="rgb(51,51,51)" points="255.522,246.655 323.298,314.432 323.298,178.879"/><polygon fill="rgb(51,51,51)" points="161.649,170.517 8.869,323.298 314.43,323.298"/> </g> </svg>');
|
|
}
|
|
|
|
.link__icon.fa-npm:hover {
|
|
color: var(--color--npm-hover);
|
|
}
|
|
|
|
.link__icon.fa-github:hover {
|
|
color: var(--color--github-hover);
|
|
}
|
|
|
|
.link__icon.fa-elm:hover {
|
|
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 323.141 322.95"><g><polygon fill="dodgerblue" points="161.649,152.782 231.514,82.916 91.783,82.916"/><polygon fill="dodgerblue" points="8.867,0 79.241,70.375 232.213,70.375 161.838,0"/><rect fill="dodgerblue" x="192.99" y="107.392" transform="matrix(0.7071 0.7071 -0.7071 0.7071 186.4727 -127.2386)" width="107.676" height="108.167"/><polygon fill="dodgerblue" points="323.298,143.724 323.298,0 179.573,0"/><polygon fill="dodgerblue" points="152.781,161.649 0,8.868 0,314.432"/><polygon fill="dodgerblue" points="255.522,246.655 323.298,314.432 323.298,178.879"/><polygon fill="dodgerblue" points="161.649,170.517 8.869,323.298 314.43,323.298"/> </g> </svg>');
|
|
}
|
|
|
|
.shadow { box-shadow: 0 0.5em 2em var(--color--shadow-05) }
|
|
.shadow-dark { box-shadow: 0 0.5em 2em var(--color--shadow-25); }
|
|
.rounded { border-radius: 5px; }
|
|
.faint { opacity: 0.6; }
|
|
|
|
.toc {
|
|
padding: 1rem;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
/* Homepage */
|
|
|
|
.home__section-row {
|
|
padding: 8em 1em;
|
|
}
|
|
|
|
.home__section:nth-child(2n + 1) {
|
|
background: linear-gradient(30deg, var(--color--gradient-dark), var(--color--gradient-light));
|
|
color: var(--color--gradient-text);
|
|
}
|
|
|
|
.home__section:nth-child(2n + 1) code {
|
|
color: var(--color--gradient-inline-code);
|
|
}
|
|
|
|
.home__section:nth-child(2n + 1) .h2 {
|
|
text-shadow: 0 0 0.5em var(--color--shadow-25);
|
|
}
|
|
|
|
.home__section pre {
|
|
font-size: 1.1em;
|
|
max-width: 16em;
|
|
padding: 0.85rem 1rem;
|
|
}
|
|
.home__section code {
|
|
font-size: 1.2em;
|
|
}
|
|
|
|
.home__section > .col {
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.home__section-icon {
|
|
position: absolute;
|
|
top: 50%;
|
|
transform: translate(50%, -50%);
|
|
right: calc(50% + 18rem);
|
|
width: 12em;
|
|
z-index: 2;
|
|
filter: drop-shadow( 0 0.25rem 0.125rem var(--color--shadow-25));
|
|
}
|
|
|
|
.home__section:nth-child(2n + 1) .home__section-icon {
|
|
right: unset;
|
|
left: calc(50% + 18rem);
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
@media screen and (max-width: 800px) {
|
|
.home__section-icon {
|
|
display: none;
|
|
}
|
|
|
|
.home__section-row {
|
|
padding: 4em 1em;
|
|
}
|
|
}
|
|
|
|
@media screen and (max-width: 640px) {
|
|
.home__section { font-size: 1em }
|
|
.margin-override { margin-right: 0 !important; }
|
|
}
|
|
|
|
/* Footer */
|
|
.footer {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
}
|
|
|
|
.footer__zone {
|
|
padding: 8em 0;
|
|
}
|