Last active
March 1, 2023 04:20
-
-
Save jolheiser/93612855a4b29aed8781d6036635239b to your computer and use it in GitHub Desktop.
simple.css with Catppuccin theme
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Global variables. */ | |
:root { | |
/* Set sans-serif & mono fonts */ | |
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, | |
"Nimbus Sans L", Roboto, Noto, "Segoe UI", Arial, Helvetica, | |
"Helvetica Neue", sans-serif; | |
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; | |
/* Catppuccin */ | |
--red: #F28FAD; | |
--peach: #F8BD96; | |
--yellow: #FAE3B0; | |
--lavender: #C9CBFF; | |
--black0: #161320; | |
--black1: #1A1826; | |
--black2: #1E1E2E; | |
--black3: #302D41; | |
--black4: #575268; | |
--gray0: #6E6C7E; | |
--gray1: #988BA2; | |
--gray2: #C3BAC6; | |
--white: #D9E0EE; | |
/* Default (light) theme */ | |
--bg: var(--white); | |
--accent-bg: var(--lavender); | |
--text: var(--black0); | |
--text-light: var(--black4); | |
--border: var(--gray2); | |
--accent: var(--black3); | |
--code: var(--red); | |
--preformatted: var(--black1); | |
--marked: var(--yellow); | |
--disabled: var(--gray2); | |
} | |
/* Dark theme */ | |
@media (prefers-color-scheme: dark) { | |
:root { | |
--bg: var(--black2); | |
--accent-bg: var(--black1); | |
--text: var(--white); | |
--text-light: var(--gray1); | |
--border: var(--gray0); | |
--accent: var(--peach); | |
--code: var(--red); | |
--preformatted: var(--lavender); | |
--disabled: var(--black0); | |
} | |
/* Add a bit of transparancy so light media isn't so glaring in dark mode */ | |
img, | |
video { | |
opacity: 0.8; | |
} | |
} | |
/* Reset box-sizing */ | |
*, *::before, *::after { | |
box-sizing: border-box; | |
} | |
/* Reset default appearance */ | |
textarea, | |
select, | |
input, | |
progress { | |
appearance: none; | |
-webkit-appearance: none; | |
-moz-appearance: none; | |
} | |
html { | |
/* Set the font globally */ | |
font-family: var(--sans-font); | |
scroll-behavior: smooth; | |
} | |
/* Make the body a nice central block */ | |
body { | |
color: var(--text); | |
background-color: var(--bg); | |
font-size: 1.15rem; | |
line-height: 1.5; | |
display: grid; | |
grid-template-columns: 1fr min(45rem, 90%) 1fr; | |
margin: 0; | |
} | |
body > * { | |
grid-column: 2; | |
} | |
/* Make the header bg full width, but the content inline with body */ | |
body > header { | |
background-color: var(--accent-bg); | |
border-bottom: 1px solid var(--border); | |
text-align: center; | |
padding: 0 0.5rem 2rem 0.5rem; | |
grid-column: 1 / -1; | |
} | |
body > header h1 { | |
max-width: 1200px; | |
margin: 1rem auto; | |
} | |
body > header p { | |
max-width: 40rem; | |
margin: 1rem auto; | |
} | |
/* Add a little padding to ensure spacing is correct between content and header > nav */ | |
main { | |
padding-top: 1.5rem; | |
} | |
body > footer { | |
margin-top: 4rem; | |
padding: 2rem 1rem 1.5rem 1rem; | |
color: var(--text-light); | |
font-size: 0.9rem; | |
text-align: center; | |
border-top: 1px solid var(--border); | |
} | |
/* Format headers */ | |
h1 { | |
font-size: 3rem; | |
} | |
h2 { | |
font-size: 2.6rem; | |
margin-top: 3rem; | |
} | |
h3 { | |
font-size: 2rem; | |
margin-top: 3rem; | |
} | |
h4 { | |
font-size: 1.44rem; | |
} | |
h5 { | |
font-size: 1.15rem; | |
} | |
h6 { | |
font-size: 0.96rem; | |
} | |
/* Prevent long strings from overflowing container */ | |
p, h1, h2, h3, h4, h5, h6 { | |
overflow-wrap: break-word; | |
} | |
/* Fix line height when title wraps */ | |
h1, | |
h2, | |
h3 { | |
line-height: 1.1; | |
} | |
/* Reduce header size on mobile */ | |
@media only screen and (max-width: 720px) { | |
h1 { | |
font-size: 2.5rem; | |
} | |
h2 { | |
font-size: 2.1rem; | |
} | |
h3 { | |
font-size: 1.75rem; | |
} | |
h4 { | |
font-size: 1.25rem; | |
} | |
} | |
/* Format links & buttons */ | |
a, | |
a:visited { | |
color: var(--accent); | |
} | |
a:hover { | |
text-decoration: none; | |
} | |
button, | |
[role="button"], | |
input[type="submit"], | |
input[type="reset"], | |
input[type="button"], | |
label[type="button"] { | |
border: none; | |
border-radius: 5px; | |
background-color: var(--accent); | |
font-size: 1rem; | |
color: var(--bg); | |
padding: 0.7rem 0.9rem; | |
margin: 0.5rem 0; | |
} | |
button[disabled], | |
[role="button"][aria-disabled="true"], | |
input[type="submit"][disabled], | |
input[type="reset"][disabled], | |
input[type="button"][disabled], | |
input[type="checkbox"][disabled], | |
input[type="radio"][disabled], | |
select[disabled] { | |
cursor: not-allowed; | |
} | |
input:disabled, | |
textarea:disabled, | |
select:disabled, | |
button[disabled] { | |
cursor: not-allowed; | |
background-color: var(--disabled); | |
color: var(--text-light) | |
} | |
input[type="range"] { | |
padding: 0; | |
} | |
/* Set the cursor to '?' on an abbreviation and style the abbreviation to show that there is more information underneath */ | |
abbr[title] { | |
cursor: help; | |
text-decoration-line: underline; | |
text-decoration-style: dotted; | |
} | |
button:enabled:hover, | |
[role="button"]:not([aria-disabled="true"]):hover, | |
input[type="submit"]:enabled:hover, | |
input[type="reset"]:enabled:hover, | |
input[type="button"]:enabled:hover, | |
label[type="button"]:hover { | |
filter: brightness(1.4); | |
cursor: pointer; | |
} | |
button:focus-visible:where(:enabled, [role="button"]:not([aria-disabled="true"])), | |
input:enabled:focus-visible:where( | |
[type="submit"], | |
[type="reset"], | |
[type="button"] | |
) { | |
outline: 2px solid var(--accent); | |
outline-offset: 1px; | |
} | |
/* Format navigation */ | |
header > nav { | |
font-size: 1rem; | |
line-height: 2; | |
padding: 1rem 0 0 0; | |
} | |
/* Use flexbox to allow items to wrap, as needed */ | |
header > nav ul, | |
header > nav ol { | |
align-content: space-around; | |
align-items: center; | |
display: flex; | |
flex-direction: row; | |
flex-wrap: wrap; | |
justify-content: center; | |
list-style-type: none; | |
margin: 0; | |
padding: 0; | |
} | |
/* List items are inline elements, make them behave more like blocks */ | |
header > nav ul li, | |
header > nav ol li { | |
display: inline-block; | |
} | |
header > nav a, | |
header > nav a:visited { | |
margin: 0 0.5rem 1rem 0.5rem; | |
border: 1px solid var(--border); | |
border-radius: 5px; | |
color: var(--text); | |
display: inline-block; | |
padding: 0.1rem 1rem; | |
text-decoration: none; | |
} | |
header > nav a:hover { | |
border-color: var(--accent); | |
color: var(--accent); | |
cursor: pointer; | |
} | |
/* Reduce nav side on mobile */ | |
@media only screen and (max-width: 720px) { | |
header > nav a { | |
border: none; | |
padding: 0; | |
text-decoration: underline; | |
line-height: 1; | |
} | |
} | |
/* Consolidate box styling */ | |
aside, details, pre, progress { | |
background-color: var(--accent-bg); | |
border: 1px solid var(--border); | |
border-radius: 5px; | |
margin-bottom: 1rem; | |
} | |
aside { | |
font-size: 1rem; | |
width: 30%; | |
padding: 0 15px; | |
margin-left: 15px; | |
float: right; | |
} | |
/* Make aside full-width on mobile */ | |
@media only screen and (max-width: 720px) { | |
aside { | |
width: 100%; | |
float: none; | |
margin-left: 0; | |
} | |
} | |
article, fieldset { | |
border: 1px solid var(--border); | |
padding: 1rem; | |
border-radius: 5px; | |
margin-bottom: 1rem; | |
} | |
article h2:first-child, | |
section h2:first-child { | |
margin-top: 1rem; | |
} | |
section { | |
border-top: 1px solid var(--border); | |
border-bottom: 1px solid var(--border); | |
padding: 2rem 1rem; | |
margin: 3rem 0; | |
} | |
/* Don't double separators when chaining sections */ | |
section + section, | |
section:first-child { | |
border-top: 0; | |
padding-top: 0; | |
} | |
section:last-child { | |
border-bottom: 0; | |
padding-bottom: 0; | |
} | |
details { | |
padding: 0.7rem 1rem; | |
} | |
summary { | |
cursor: pointer; | |
font-weight: bold; | |
padding: 0.7rem 1rem; | |
margin: -0.7rem -1rem; | |
word-break: break-all; | |
} | |
details[open] > summary + * { | |
margin-top: 0; | |
} | |
details[open] > summary { | |
margin-bottom: 0.5rem; | |
} | |
details[open] > :last-child { | |
margin-bottom: 0; | |
} | |
/* Format tables */ | |
table { | |
border-collapse: collapse; | |
display: block; | |
margin: 1.5rem 0; | |
overflow: auto; | |
width: 100%; | |
} | |
td, | |
th { | |
border: 1px solid var(--border); | |
text-align: left; | |
padding: 0.5rem; | |
} | |
th { | |
background-color: var(--accent-bg); | |
font-weight: bold; | |
} | |
tr:nth-child(even) { | |
/* Set every other cell slightly darker. Improves readability. */ | |
background-color: var(--accent-bg); | |
} | |
table caption { | |
font-weight: bold; | |
margin-bottom: 0.5rem; | |
} | |
/* Format forms */ | |
textarea, | |
select, | |
input { | |
font-size: inherit; | |
font-family: inherit; | |
padding: 0.5rem; | |
margin-bottom: 0.5rem; | |
color: var(--text); | |
background-color: var(--bg); | |
border: 1px solid var(--border); | |
border-radius: 5px; | |
box-shadow: none; | |
max-width: 100%; | |
display: inline-block; | |
} | |
label { | |
display: block; | |
} | |
textarea:not([cols]) { | |
width: 100%; | |
} | |
/* Add arrow to drop-down */ | |
select:not([multiple]) { | |
background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%), | |
linear-gradient(135deg, var(--text) 51%, transparent 49%); | |
background-position: calc(100% - 15px), calc(100% - 10px); | |
background-size: 5px 5px, 5px 5px; | |
background-repeat: no-repeat; | |
padding-right: 25px; | |
} | |
/* checkbox and radio button style */ | |
input[type="checkbox"], | |
input[type="radio"] { | |
vertical-align: middle; | |
position: relative; | |
width: min-content; | |
} | |
input[type="checkbox"] + label, | |
input[type="radio"] + label { | |
display: inline-block; | |
} | |
input[type="radio"] { | |
border-radius: 100%; | |
} | |
input[type="checkbox"]:checked, | |
input[type="radio"]:checked { | |
background-color: var(--accent); | |
} | |
input[type="checkbox"]:checked::after { | |
/* Creates a rectangle with colored right and bottom borders which is rotated to look like a check mark */ | |
content: " "; | |
width: 0.18em; | |
height: 0.32em; | |
border-radius: 0; | |
position: absolute; | |
top: 0.05em; | |
left: 0.17em; | |
background-color: transparent; | |
border-right: solid var(--bg) 0.08em; | |
border-bottom: solid var(--bg) 0.08em; | |
font-size: 1.8em; | |
transform: rotate(45deg); | |
} | |
input[type="radio"]:checked::after { | |
/* creates a colored circle for the checked radio button */ | |
content: " "; | |
width: 0.25em; | |
height: 0.25em; | |
border-radius: 100%; | |
position: absolute; | |
top: 0.125em; | |
background-color: var(--bg); | |
left: 0.125em; | |
font-size: 32px; | |
} | |
/* Makes input fields wider on smaller screens */ | |
@media only screen and (max-width: 720px) { | |
textarea, | |
select, | |
input { | |
width: 100%; | |
} | |
} | |
/* Set a height for color input */ | |
input[type="color"] { | |
height: 2.5rem; | |
padding: 0.2rem; | |
} | |
/* do not show border around file selector button */ | |
input[type="file"] { | |
border: 0; | |
} | |
/* Misc body elements */ | |
hr { | |
border: none; | |
height: 1px; | |
background: var(--border); | |
margin: 1rem auto; | |
} | |
mark { | |
padding: 2px 5px; | |
border-radius: 4px; | |
background-color: var(--marked); | |
} | |
img, | |
video { | |
max-width: 100%; | |
height: auto; | |
border-radius: 5px; | |
} | |
figure { | |
margin: 0; | |
text-align: center; | |
} | |
figcaption { | |
font-size: 0.9rem; | |
color: var(--text-light); | |
margin-bottom: 1rem; | |
} | |
blockquote { | |
margin: 2rem 0 2rem 2rem; | |
padding: 0.4rem 0.8rem; | |
border-left: 0.35rem solid var(--accent); | |
color: var(--text-light); | |
font-style: italic; | |
} | |
cite { | |
font-size: 0.9rem; | |
color: var(--text-light); | |
font-style: normal; | |
} | |
dt { | |
color: var(--text-light); | |
} | |
/* Use mono font for code elements */ | |
code, | |
pre, | |
pre span, | |
kbd, | |
samp { | |
font-family: var(--mono-font); | |
color: var(--code); | |
} | |
kbd { | |
color: var(--preformatted); | |
border: 1px solid var(--preformatted); | |
border-bottom: 3px solid var(--preformatted); | |
border-radius: 5px; | |
padding: 0.1rem 0.4rem; | |
} | |
pre { | |
padding: 1rem 1.4rem; | |
max-width: 100%; | |
overflow: auto; | |
color: var(--preformatted); | |
} | |
/* Fix embedded code within pre */ | |
pre code { | |
color: var(--preformatted); | |
background: none; | |
margin: 0; | |
padding: 0; | |
} | |
/* Progress bars */ | |
/* Declarations are repeated because you */ | |
/* cannot combine vendor-specific selectors */ | |
progress { | |
width: 100%; | |
} | |
progress:indeterminate { | |
background-color: var(--accent-bg); | |
} | |
progress::-webkit-progress-bar { | |
border-radius: 5px; | |
background-color: var(--accent-bg); | |
} | |
progress::-webkit-progress-value { | |
border-radius: 5px; | |
background-color: var(--accent); | |
} | |
progress::-moz-progress-bar { | |
border-radius: 5px; | |
background-color: var(--accent); | |
transition-property: width; | |
transition-duration: 0.3s; | |
} | |
progress:indeterminate::-moz-progress-bar { | |
background-color: var(--accent-bg); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment