/*
Core
The core of Cutestrap is a large set of Custom Properties. Some are set on an
`html {}` ruleset and will be inherited by all children. Others are set on an
`* {}` ruleset and are used as mixins, which are special because they rely on
formulas. The only explicit styling performed here is setting `font-size` and
`line-height` on a `body {}` ruleset.
Markup:
Example paragraph
Styleguide 1.0
*/
* {
--rhythm: 2rem;
--rhythm-quadruple: calc(4 * var(--rhythm));
--rhythm-triple: calc(3 * var(--rhythm));
--rhythm-double: calc(2 * var(--rhythm));
--rhythm-half: calc((1/2) * var(--rhythm));
--rhythm-third: calc((1/3) * var(--rhythm));
--rhythm-fourth: calc((1/4) * var(--rhythm));
--rhythm-sixth: calc((1/6) * var(--rhythm));
--rhythm-eighth: calc((1/8) * var(--rhythm));
--rhythm-twelfth: calc((1/12) * var(--rhythm));
--rhythm-sixteenth: calc((1/16) * var(--rhythm));
--line-height: var(--sub-rhythm, var(--rhythm));
--line-height-ratio: 1.4;
--font-size: calc(var(--line-height) / var(--line-height-ratio));
}
html {
--border-radius: 4px;
--color-primary-tint1: hsl(350, 80%, 60%);
--color-primary: hsl(350, 80%, 45%);
--color-primary-shade1: hsl(350, 80%, 35%);
--color-accent-tint1: hsl(170, 80%, 60%);
--color-accent: hsl(170, 80%, 45%);
--color-accent-shade1: hsl(170, 80%, 35%);
--color-link: hsl(230, 60%, 50%);
--color-link-visited: hsl(290, 60%, 50%);
--color-link-hover: hsl(230, 80%, 60%);
--color-link-active: hsl(350, 60%, 50%);
--color-neutral-tint4: hsl(170, 10%, 98%);
--color-neutral-tint3: hsl(170, 10%, 94%);
--color-neutral-tint2: hsl(170, 10%, 85%);
--color-neutral-tint1: hsl(170, 10%, 68%);
--color-neutral: hsl(170, 10%, 55%);
--color-neutral-shade1: hsl(170, 10%, 41%);
--color-neutral-shade2: hsl(170, 10%, 30%);
--color-neutral-shade3: hsl(170, 10%, 18%);
--color-neutral-shade4: hsl(170, 10%, 2%);
--focus-outline: var(--rhythm-twelfth) dotted var(--color-primary-tint1);
--focus-outline-offset: var(--rhythm-twelfth);
--font-family: 'Avenir', 'Avenir Next', 'Helvetica Neue', 'Segoe UI', 'Verdana', sans-serif;
--font-mono: 'Consolas', 'Monaco', 'Courier New', monospace;
--font-heading: var(--font-family);
--font-body: var(--font-family);
}
body {
font-size: var(--font-size);
line-height: var(--line-height);
}
/*
Base
The base stylesheet requires `core.css` and uses it to set all html elements
to adhere to the Baseline Grid and gives them default styles.
Markup:
Headline 1
Paragraph
Headline 2
Unordered item
Unordered item
Headline 3
Ordered item
Ordered item
Headline 4
Preformatted
Headline 5
Blockquote
Headline 6
Table Header
Table Header
Table Cell
Table Cell
Styleguide 2.0
*/
* {
border: 0;
font: inherit;
margin: 0;
padding: 0;
text-rendering: geometricPrecision;
}
:focus {
outline: var(--focus-outline);
outline-offset: var(--focus-outline-offset);
}
html {
overflow-x: hidden;
}
html,
body {
box-sizing: border-box;
min-height: 100%;
}
body {
background-color: var(--color-neutral-tint4);
color: var(--color-neutral-shade4);
font-family: var(--font-body);
position: relative;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--font-heading);
font-size: var(--font-size);
line-height: var(--line-height);
margin: var(--rhythm) 0;
}
h1 {
--line-height-ratio: 1.1;
--sub-rhythm: var(--rhythm-triple);
font-weight: 700;
margin-bottom: var(--rhythm-double);
}
h2 {
--line-height-ratio: 1.2;
--sub-rhythm: var(--rhythm-triple);
}
h3 {
--line-height-ratio: 1.3;
--sub-rhythm: var(--rhythm-double);
font-weight: 700;
}
h4 {
--sub-rhythm: var(--rhythm-double);
}
h5 {
font-weight: 700;
}
p {
margin-bottom: var(--rhythm);
}
form {
margin: var(--rhythm) 0;
}
pre,
code,
samp,
kbd {
background-color: var(--color-neutral-tint3);
font-size: var(--font-size);
color: var(--color-primary-shade1);
font-family: var(--font-mono);
line-height: 1;
}
code,
samp,
kbd {
border-radius: var(--border-radius);
overflow-y: hidden;
overflow-x: auto;
padding: var(--rhythm-sixth);
}
pre {
border-radius: var(--border-radius);
line-height: var(--line-height);
overflow-y: hidden;
overflow-x: auto;
padding: var(--rhythm-half);
margin: 0 0 var(--rhythm);
}
pre code,
pre samp,
pre kbd {
background-color: transparent;
border: none;
border-radius: 0;
padding: 0;
}
a:link {
color: var(--color-link);
}
a:visited {
color: var(--color-link-visited);
}
a:hover,
a:focus {
color: var(--color-link-hover);
}
a:active {
color: var(--color-link-active);
}
img,
video {
max-width: 100%;
vertical-align: top;
}
hr {
height: var(--rhythm-double);
margin-bottom: var(--rhythm);
position: relative;
}
hr::before {
background-color: var(--color-neutral-tint1);
content: '';
height: 1px;
left: 0;
position: absolute;
top: 50%;
width: 100%;
}
ol,
ul {
margin: 0 0 var(--rhythm) var(--rhythm);
}
ol {
list-style-type: decimal;
}
ol ol {
margin-bottom: 0;
}
ul {
list-style-type: disc;
}
ul ul {
margin-bottom: 0;
}
dt {
font-style: italic;
}
dd {
margin-left: var(--rhythm);
}
blockquote {
margin: 0 0 var(--rhythm) var(--rhythm-half);
border-left: var(--rhythm-eighth) solid var(--color-neutral-tint1);
padding: var(--rhythm) var(--rhythm-half);
}
blockquote p:last-child {
margin-bottom: 0;
}
figure {
margin: 0 auto var(--rhythm);
}
small,
sub,
sup,
caption,
figcaption {
font-size: calc(2 * var(--rhythm-third));
vertical-align: top;
}
sub,
sup {
position: relative;
}
sub {
top: var(--rhythm-third);
}
sup {
bottom: var(--rhythm-third);
}
caption,
figcaption {
font-style: italic;
text-align: center;
}
em,
cite,
i {
font-style: italic;
}
strong,
var,
b {
font-weight: bold;
}
q::before {
content: "'";
}
q::after {
content: "'";
}
q > q {
font-style: italic;
}
dfn,
abbr {
border-bottom: var(--rhythm-sixteenth) dotted var(--color-neutral-shade2);
cursor: default;
}
table {
border-radius: var(--border-radius);
border-collapse: separate;
border-spacing: 0;
margin-bottom: var(--rhythm);
width: 100%;
}
table th {
text-align: left;
}
table th,
table td {
padding: 0 var(--rhythm-fourth);
}
input,
label,
select,
button,
textarea {
color: var(--color-neutral-shade4);
display: block;
padding: var(--rhythm-half);
resize: none;
-webkit-appearance: none;
-moz-appearance: none;
}
/* Firefox detection for keeping exact rhythm */
@-moz-document url-prefix() {
select {
line-height: calc(var(--rhythm) - 2px);
}
}
label {
color: var(--color-neutral-shade1);
padding: 0;
}
/*
Buttons
Buttons and their variations
Markup:
Button
.-secondary - A button with secondary colors
.-outlined - An outlined button
.-link - A button that looks like a link
.-block - Block level button
.-large - A large button
.-small - A small button
.-small.-outlined - A small, outlined button
Styleguide 3.0
*/
.button {
--border-color: transparent;
--border-color-hover: transparent;
--border-thickness: var(--rhythm-twelfth);
--background-color: var(--color-primary);
--background-color-hover: var(--color-primary-shade1);
--text-color: var(--color-neutral-tint4);
--text-color-hover: var(--color-neutral-tint4);
align-items: center;
align-content: center;
background-color: var(--background-color);
border: var(--border-thickness) solid var(--border-color);
border-radius: var(--border-radius);
box-sizing: border-box;
color: var(--text-color);
cursor: pointer;
display: inline-block;
font-size: var(--font-size);
justify-content: center;
line-height: var(--rhythm);
max-width: 100%;
min-height: calc(2 * var(--rhythm));
padding: calc(5 * var(--rhythm-twelfth)) var(--rhythm);
text-align: center;
transition-duration: 250ms;
transition-property: all;
user-select: none;
width: auto;
vertical-align: middle;
}
.button::-moz-focus-inner {
border: 0;
}
.button:link,
.button:visited {
color: var(--text-color);
text-decoration: none;
}
.button:focus,
.button:hover {
background-color: var(--background-color-hover);
border-color: var(--border-color-hover);
color: var(--text-color-hover);
}
.button:active {
background-color: var(--background-color);
color: var(--text-color);
}
.button:disabled {
opacity: .5;
pointer-events: none;
}
.button.-outlined {
--background-color: transparent;
--background-color-hover: var(--color-primary-shade1);
--border-color: var(--color-primary);
--border-color-hover: var(--color-primary-shade1);
--text-color: var(--color-primary);
}
.button.-secondary {
--background-color: var(--color-neutral-tint2);
--background-color-hover: var(--color-neutral-tint1);
--border-color: var(--color-neutral-tint2);
--border-color-hover: var(--color-neutral-tint1);
--text-color: var(--color-neutral-shade3);
--text-color-hover: var(--color-neutral-shade3);
}
.button.-link {
--background-color: transparent;
--background-color-hover: transparent;
--border-color: transparent;
--border-color-hover: transparent;
--text-color: var(--color-link);
--text-color-hover: var(--color-link-hover);
text-decoration: underline;
}
.button.-block {
display: block;
width: 100%;
}
.button.-small {
--sub-rhythm: calc(14 * var(--rhythm-sixteenth));
--border-thickness: var(--rhythm-sixteenth);
font-size: var(--font-size);
line-height: var(--line-height);
margin-top: calc(-2 * var(--rhythm-sixteenth));
min-height: var(--sub-rhythm);
padding: 0 var(--rhythm-half);
}
.button.-large {
--sub-rhythm: calc(1.5 * var(--rhythm));
--border-thickness: var(--rhythm-eighth);
font-size: var(--font-size);
line-height: var(--line-height);
min-height: calc(3 * var(--rhythm));
padding: calc(3 * var(--rhythm-eighth)) calc(2 * var(--rhythm));
}
/*
Forms
Markup:
Styleguide 4.0
*/
.field [disabled] + *,
[disabled] {
cursor: default;
opacity: .5;
pointer-events: none;
}
.field {
display: flex;
margin-bottom: var(--rhythm);
position: relative;
text-align: left;
}
.field .label {
z-index: 2;
}
.field [type=checkbox] + .label,
.field [type=radio] + .label {
color: var(--color-neutral-shade4);
cursor: pointer;
display: inline-block;
padding-left: var(--rhythm);
}
.field *:not([type=radio]):not([type=checkbox]) + .label {
font-size: var(--rhythm-half);
position: absolute;
left: var(--rhythm-sixteenth);
line-height: 1;
padding: var(--rhythm-fourth) var(--rhythm-fourth) 0;
right: var(--rhythm-sixteenth);
top: 0;
}
.field input,
.field textarea,
.field select {
background-color: var(--color-neutral-tint4);
border: 1px solid var(--color-neutral-shade1);
border-radius: var(--border-radius);
box-sizing: border-box;
margin-top: -2px;
padding: calc(7 * var(--rhythm-eighth)) var(--rhythm-fourth) var(--rhythm-eighth);
position: relative;
width: 100%;
}
.field select {
z-index: 1;
}
/*
Select
Markup:
Select
Option 1
Option 2
Option 3
Select Label
Styleguide 4.1
*/
.field select + .label::after {
content: '';
border-left: var(--rhythm-fourth) solid transparent;
border-right: var(--rhythm-fourth) solid transparent;
border-top: var(--rhythm-fourth) solid var(--color-neutral-shade1);
bottom: calc(-2 * var(--rhythm-third));
height: 0;
pointer-events: none;
position: absolute;
right: var(--rhythm-half);
width: 0;
}
.field option[disabled] {
background-color: var(--color-neutral-tint3);
color: var(--color-neutral-shade2);
}
.field.-inline {
display: inline-block;
margin-right: var(--rhythm-half);
}
.field [type=checkbox],
.field [type=radio] {
opacity: 0;
position: absolute;
z-index: 0;
}
.field [type=checkbox] + .label::before,
.field [type=radio] + .label::before {
background-color: var(--color-neutral-tint4);
border: 2px solid var(--color-neutral-shade1);
content: '';
height: var(--rhythm-half);
left: 0;
position: absolute;
top: var(--rhythm-eighth);
transform: translateY(var(--rhythm-sixteenth));
width: var(--rhythm-half);
}
.field [type=checkbox] + .label::after,
.field [type=radio] + .label::after {
background-color: var(--color-primary);
border: 2px solid transparent;
color: var(--color-neutral-tint4);
height: var(--rhythm-fourth);
left: var(--rhythm-eighth);
position: absolute;
top: var(--rhythm-fourth);
transform: translateY(var(--rhythm-sixteenth));
width: var(--rhythm-fourth);
}
/*
Checkbox
Markup:
Checkbox
Styleguide 4.2
*/
.field [type=checkbox] + .label::before,
.field [type=checkbox] + .label::after {
border-radius: var(--border-radius);
}
/*
Radio
Markup:
Radio
Styleguide 4.3
*/
.field [type=radio] + .label::before,
.field [type=radio] + .label::after {
border-radius: var(--rhythm);
}
.field [type=radio]:focus + .label::before,
.field [type=checkbox]:focus + .label::before {
outline: var(--focus-outline);
outline-offset: var(--focus-outline-offset);
}
.field [type=checkbox]:checked + .label::after,
.field [type=radio]:checked + .label::after {
content: '';
}
/*
Input and text areas
Markup:
Input
Textarea
Styleguide 4.4
*/
.field textarea {
margin-top: 0;
min-height: calc(4 * var(--rhythm));
}
/*
Disabled Fields
Markup:
Name
Cone
Bowl
Flavors
Chocolate
Vanilla
Favorite Ice Cream
I am some comments
Comments
I consent to my ice cream flavors being saved into a database for
eternity and understand and acknowledge this will have consequences
for all of my decendants for decades to come.
Styleguide 4.5
*/
/*
Grid
A simple grid with automatic columns
Markup:
Column
Column
Column
Column
Column
Column
.-medium - start at 45rem
.-large - start at 80rem
Styleguide 5.0
*/
.grid {
--columns: auto-fit;
display: grid;
column-gap: var(--rhythm);
grid-template-columns: repeat(var(--columns), minmax(0, 1fr));
}
@media (max-width: 45rem) {
.grid.-medium {
display: block;
}
}
@media (max-width: 80rem) {
.grid.-large {
display: block;
}
}
/*
Columns
Manually set column widths (Note: the syntax is passing a custom property with
a number value. KSS Docs only support modified classes, so ignore the term
[modifier class] and the dot before the number in the examples below).
Markup:
Column
Column
Column
Column
Column
Column
.2 - Two columns
.3 - Three columns
.4 - Four columns
Styleguide 5.1
*/
/*
Wrappers
Elements with max widths and paddings that can be used to separate content
Markup:
Wrapper
.-thin - A max-width of 45rem
.-wide - A max-width of 80rem
.-flush - No vertical or horizontal spacing
Styleguide 6.0
*/
.wrapper {
box-sizing: border-box;
margin: 0 auto;
max-width: 60rem;
padding: var(--rhythm-double) var(--rhythm-half);
width: 100%;
}
.wrapper.-thin {
max-width: 45rem;
padding: var(--rhythm) var(--rhythm-half);
}
.wrapper.-wide {
max-width: 80rem;
padding: var(--rhythm-triple) var(--rhythm-half);
}
.wrapper.-flush {
padding: 0 var(--rhythm-half);
}
/*
Utilities
These utility classes have one or two CSS properties that are meant to save you from creating several identical classes to do the same thing, like just centering some text.
Markup:
Example Text
.disabled - Disable an Element
.clearfix - Clear floats to keep the parent container in shape
.f-none - float: none;
.f-left - float: left;
.f-right - float: right;
.ta-left - text-align: left;
.ta-center - text-align: center;
.ta-right - text-align: right;
Styleguide 7.0
*/
.disabled {
cursor: default;
opacity: .5;
pointer-events: none;
}
.f-none {
float: none;
}
.f-left {
float: left;
}
.f-right {
float: right;
}
.clearfix {
clear: both;
overflow: hidden;
}
.ta-left {
text-align: left;
}
.ta-center {
text-align: center;
}
.ta-right {
text-align: right;
}
/*
Type Utilities
These are specific typography related utilities
Markup:
The quick
brown fox
jumps over
the lazy dog.
.fw-light - Changes the type to be 300 weight
.fw-normal - Changes the type to be 400 weight
.fw-bold - Changes the type to be 700 weight
.fs-small - Small font-size
.fs-base - Base font-size
.fs-large - Large font-size
Styleguide 7.1
*/
.fw-light {
font-weight: 300;
}
.fw-normal {
font-weight: 400;
}
.fw-bold {
font-weight: 700;
}
.fs-small,
.fs-base,
.fs-large {
font-size: var(--font-size);
line-height: var(--line-height);
}
.fs-small {
--sub-rhythm: calc(.75 * var(--rhythm));
}
.fs-base {
--sub-rhythm: initial;
}
.fs-large {
--sub-rhythm: calc(1.25 * var(--rhythm));
}
/*
Margin Utilities
These utilities allow you to easily remove margins that you don't want
Markup:
Do you like margins?
.m-zero - Remove margins
.mt-zero - Remove top margin only
.mb-zero - Remove bottom margin only
Styleguide 7.2
*/
.m-zero {
margin: 0;
}
.mt-zero {
margin-top: 0;
}
.mb-zero {
margin-bottom: 0;
}