@jaredpdesigns/pasta
Version:
Pasta provides a great starting place for web projects. It combines light styling for common web elements, yummy!
444 lines (374 loc) • 12.4 kB
CSS
@layer props {
:root {
--control__font-size: var(--type__size--m);
--control__line-height: var(--type__lineheight--l);
--control__padding--block: var(--size__s);
--control__padding--inline: var(--size__m);
--control__radius: var(--size__s);
--control__size: clamp(var(--size__xl),
var(--type__size--target),
var(--size__xxl));
}
}
@layer reset {
input,
button,
textarea,
select {
font: inherit;
}
fieldset {
border: none;
}
}
@layer config {
details:not([class]),
details.styled {
--radius: var(--size__s);
border: var(--size__xxs) solid var(--color__base--light);
border-radius: var(--radius);
summary {
border-radius: var(--radius);
font-size: var(--type__size--m);
line-height: var(--type__lineheight--l);
list-style: revert;
padding-block: var(--size__s);
padding-inline: var(--size__m);
&::marker {
color: var(--color__base--mid);
}
+* {
background-color: var(--color__base--ghost);
border-bottom-left-radius: var(--radius);
border-bottom-right-radius: var(--radius);
border-block-start: var(--size__xxs) solid var(--color__base--light);
padding-block: var(--size__s);
padding-inline: var(--size__m);
}
}
&[open] summary {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
}
}
@layer reset {
:where(*[class^="button__"],
*[class^="control__"] input,
*[class^="control__"] select) {
all: unset;
box-sizing: border-box;
display: revert;
&:before,
&:after {
box-sizing: border-box;
}
}
.button {
&__primary,
&__secondary,
&__tertiary {
--color__bg: var(--color__highlight);
--color__border: var(--color__highlight);
--color__type: var(--color__contrast--fixed);
align-items: center;
background-color: var(--color__bg);
border-color: var(--color__border);
border-radius: var(--control__radius);
color: var(--color__type);
cursor: pointer;
display: inline-flex;
font-size: var(--control__font-size);
gap: var(--size__s);
justify-content: center;
line-height: var(--control__line-height);
&:focus,
&:hover,
&:focus-visible {
transition: all 0.375s ease-in;
transition-property: background-color, border-color, color, opacity;
}
&[disabled] {
cursor: not-allowed;
}
}
&__primary,
&__secondary {
border: var(--size__xxs) solid var(--color__border);
padding-block: var(--control__padding--block);
padding-inline: var(--control__padding--inline);
&.button__micro {
padding-block: calc(var(--control__padding--block) / 2);
padding-inline: calc(var(--control__padding--inline) / 2);
}
}
&__primary {
&:focus:not([disabled]),
&:hover:not([disabled]) {
--color__bg: var(--color__highlight--ish);
}
&[disabled] {
--color__bg: var(--color__highlight--mid);
}
}
&__secondary,
&__tertiary {
--color__type: var(--color__base--ish);
&:focus:not([disabled]),
&:hover:not([disabled]) {
--color__type: var(--color__base);
}
}
&__secondary {
--color__bg: var(--color__contrast--adaptive);
--color__border: var(--color__base--light);
&:focus:not([disabled]),
&:hover:not([disabled]) {
--color__border: var(--color__base--semi);
}
&[disabled] {
--color__bg: var(--color__base--ghost);
}
}
&__tertiary {
--color__bg: transparent;
&:focus:not([disabled]),
&:hover:not([disabled]) {
opacity: 0.75;
}
&[disabled] {
opacity: 0.5;
}
}
}
.control {
&__input legend,
&__select legend,
&__checkbox legend,
&__radio legend,
&__toggle legend,
&__input label,
&__select label {
color: var(--color__base--ish);
display: block;
font-size: var(--type__size--xs);
font-weight: 600;
letter-spacing: var(--size__xxs);
line-height: var(--type__lineheight--l);
text-transform: uppercase;
+* {
margin-block-start: var(--size__s);
}
}
&__input,
&__select {
input,
select,
textarea {
appearance: none;
background-color: var(--color__contrast--adaptive);
border: var(--size__xxs) solid var(--color__base--semi);
border-radius: var(--control__radius);
color: var(--color__base);
font-size: var(--control__font-size);
line-height: var(--control__line-height);
min-height: var(--control__size);
padding-block: var(--control__padding--block);
padding-inline: var(--control__padding--inline);
width: 100%;
&::placeholder {
color: var(--color__base--mid);
}
&:hover {
background-color: var(--color__highlight--ghost);
border-color: var(--color__highlight);
transition: all 0.375s ease-in;
transition-property: background-color, border-color, color;
}
&[disabled] {
background-color: var(--color__base--ghost);
color: var(--color__base--ish);
cursor: not-allowed;
&::placeholder {
color: var(--color__base--semi);
}
&:hover {
background-color: var(--color__base--ghost);
border-color: var(--color__base--semi);
cursor: not-allowed;
}
}
}
select {
text-indent: 0.01px;
text-overflow: "";
&::-ms-expand {
display: none;
}
}
}
&__select {
span {
display: block;
position: relative;
&:after {
background-color: var(--color__base--semi);
block-size: var(--size__m);
content: "";
display: block;
inline-size: var(--size__m);
inset-block-start: 50%;
inset-inline-end: var(--control__padding--inline);
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M16.0000258,16.5154845 L22.7701434,8.9931316 C23.8785204,7.76160154 25.7753899,7.6617663 27.00692,8.77014336 C28.2384501,9.87852042 28.3382853,11.7753899 27.2299082,13.00692 L18.2299082,23.00692 C17.0381813,24.3310611 14.9618703,24.3310611 13.7701434,23.00692 L4.77014336,13.00692 C3.6617663,11.7753899 3.76160154,9.87852042 4.9931316,8.77014336 C6.22466167,7.6617663 8.12153118,7.76160154 9.22990824,8.9931316 L16.0000258,16.5154845 Z'%3E%3C/path%3E%3C/svg%3E") center / contain no-repeat;
position: absolute;
transform: translateY(-50%);
}
}
}
&__checkbox,
&__radio,
&__toggle {
label {
align-items: center;
cursor: pointer;
display: inline-flex;
grid-auto-flow: column;
>span {
align-items: center;
display: inline-flex;
}
+label {
margin-inline-start: var(--size__m);
}
}
input[type="checkbox"],
input[type="radio"] {
opacity: 0;
&:focus-visible+span:before {
outline: var(--outline__size) var(--outline__style) var(--outline__color);
outline-offset: var(--outline__offset, var(--outline__size));
}
+span:before {
--size: calc(var(--size__m) + var(--size__s));
align-items: center;
background-color: var(--color__contrast--adaptive);
background-position: center;
background-repeat: no-repeat;
border: var(--size__xxs) solid var(--color__base--semi);
color: var(--color__base--semi);
content: "";
display: inline-flex;
height: var(--size);
justify-content: center;
margin-right: var(--size__s);
width: var(--size);
}
&:hover+span:before {
border-color: var(--color__base--mid);
transition: all 0.375s ease-in;
transition-property: background, border-color, color;
}
&:checked+span:before {
background-color: var(--color__highlight);
}
&:checked:hover+span:before {
background-color: var(--color__highlight--dark);
}
&[disabled] {
+span {
color: var(--color__base--mid);
cursor: not-allowed;
}
+span:before {
background-color: var(--color__base--ghost);
border-color: var(--color__base--light);
}
&:checked+span:before {
background-color: var(--color__base--mid);
color: var(--color__base--mid);
}
}
}
input[type="checkbox"] {
+span:before {
border-radius: calc(var(--control__radius) / 2);
font-size: var(--type__size--xs);
font-weight: bold;
}
}
input[type="radio"] {
+span:before {
border-radius: 50%;
}
&:checked+span:before {
box-shadow: inset 0 0 0 calc(var(--size__xxs) * 2) var(--color__contrast);
}
&:checked:focus-visible+span:before {
outline: var(--outline__size) var(--outline__style) var(--outline__color);
outline-offset: var(--outline__offset, var(--outline__size));
}
}
span {
color: var(--color__base);
font-size: var(--control__font-size);
line-height: var(--control__line-height);
position: relative;
}
}
&__checkbox {
input[type="checkbox"]:checked+span:after,
input[type="checkbox"]:indeterminate+span:after {
block-size: var(--size__m);
content: "";
display: block;
inline-size: var(--size__m);
inset-inline-start: var(--size__xs);
position: absolute;
}
input[type="checkbox"]:checked+span:after {
background-color: white;
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M22.5041679,5.33621823 C23.4232253,3.95763217 25.2858333,3.58511056 26.6644194,4.50416794 C28.0430055,5.42322532 28.4155271,7.28583334 27.4964697,8.66441941 L15.4964697,26.6644194 C14.3090036,28.4456186 11.6916341,28.4456186 10.5041679,26.6644194 L4.50416794,17.6644194 C3.58511056,16.2858333 3.95763217,14.4232253 5.33621823,13.5041679 C6.7148043,12.5851106 8.57741233,12.9576322 9.4964697,14.3362182 L13.0003188,19.5919919 L22.5041679,5.33621823 Z'%3E%3C/path%3E%3C/svg%3E") center / contain no-repeat;
}
input[type="checkbox"]:indeterminate+span:after {
background-color: var(--color__base--semi);
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M25,13 C26.6568542,13 28,14.3431458 28,16 C28,17.6568542 26.6568542,19 25,19 L7,19 C5.34314575,19 4,17.6568542 4,16 C4,14.3431458 5.34314575,13 7,13 L25,13 Z'%3E%3C/path%3E%3C/svg%3E") center / contain no-repeat;
}
}
&__toggle {
input[type="checkbox"] {
+span {
&:before {
border-radius: calc(var(--size) / 2);
width: var(--size__xl);
}
&:after {
background-color: var(--color__base--semi);
border-radius: 50%;
content: "";
display: block;
height: var(--size__m);
inset-inline-start: calc(var(--size__xs));
position: absolute;
width: var(--size__m);
}
}
&[disabled] {
+span:before {
background-color: var(--color__base--ghost);
}
+span:after {
background-color: var(--color__base--light);
}
}
&:checked+span:after {
background-color: var(--color__contrast);
transform: scale(1.375) translateX(calc(100% - (var(--size__xs) + var(--size__xxs))));
}
&:hover+span:after {
transition: all 0.375s ease-in;
transition-property: background-color, transform;
}
}
}
}
}