ee80b87c8c
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Jason Zimdars <jz@37signals.com>
286 lines
8.9 KiB
CSS
286 lines
8.9 KiB
CSS
@layer utilities {
|
|
/* Text */
|
|
.txt-xx-small { font-size: var(--text-xx-small); }
|
|
.txt-x-small { font-size: var(--text-x-small); }
|
|
.txt-small { font-size: var(--text-small); }
|
|
.txt-normal { font-size: var(--text-normal); }
|
|
.txt-medium { font-size: var(--text-medium); }
|
|
.txt-large { font-size: var(--text-large); }
|
|
.txt-x-large { font-size: var(--text-x-large); }
|
|
.txt-xx-large { font-size: var(--text-xx-large); }
|
|
|
|
.txt-align-center { text-align: center; }
|
|
.txt-align-start { text-align: start; }
|
|
.txt-align-end { text-align: end; }
|
|
|
|
.txt-ink { color: var(--color-ink); }
|
|
.txt-reversed { color: var(--color-ink-inverted); }
|
|
.txt-negative { color: var(--color-negative); }
|
|
.txt-subtle { color: var(--color-ink-dark); }
|
|
.txt-alert { color: var(--color-marker); }
|
|
.txt-undecorated { text-decoration: none; }
|
|
.txt-underline { text-decoration: underline; }
|
|
.txt-tight-lines { line-height: 1.2; }
|
|
.txt-nowrap { white-space: nowrap; }
|
|
.txt-break { word-break: break-word; }
|
|
.txt-uppercase { text-transform: uppercase; }
|
|
.txt-capitalize { text-transform: capitalize; }
|
|
.txt-capitalize-first-letter::first-letter { text-transform: capitalize; }
|
|
.txt-link { color: var(--color-link); text-decoration: underline; }
|
|
|
|
.font-weight-black { font-weight: 900; }
|
|
.font-weight-normal { font-weight: normal; }
|
|
|
|
/* Flexbox and Grid */
|
|
.justify-end { justify-content: end; }
|
|
.justify-start { justify-content: start; }
|
|
.justify-center { justify-content: center; }
|
|
.justify-space-between { justify-content: space-between; }
|
|
|
|
.align-center { align-items: center; }
|
|
.align-start { align-items: start; }
|
|
.align-end { align-items: end; }
|
|
|
|
.align-self-center { align-self: center; }
|
|
.align-self-end { align-self: end; }
|
|
.align-self-start { align-self: start; }
|
|
|
|
.v-align-middle { vertical-align: middle; }
|
|
|
|
.contain { contain: inline-size; }
|
|
|
|
.display-inline { display: inline; }
|
|
|
|
.flex { display: flex; }
|
|
.flex-inline { display: inline-flex; }
|
|
.flex-column { flex-direction: column; }
|
|
.flex-wrap { flex-wrap: wrap; }
|
|
|
|
.flex-1 { flex: 1; }
|
|
.flex-item-grow { flex-grow: 1; }
|
|
.flex-item-shrink { flex-shrink: 1; }
|
|
.flex-item-no-shrink { flex-shrink: 0; }
|
|
.flex-item-justify-start { margin-inline-end: auto; }
|
|
.flex-item-justify-end { margin-inline-start: auto; }
|
|
|
|
.gap {
|
|
column-gap: var(--column-gap, var(--inline-space));
|
|
row-gap: var(--row-gap, var(--block-space));
|
|
}
|
|
|
|
.gap-half {
|
|
column-gap: var(--column-gap, var(--inline-space-half));
|
|
row-gap: var(--row-gap, var(--block-space-half));
|
|
}
|
|
|
|
.gap-none {
|
|
--column-gap: 0;
|
|
--row-gap: 0;
|
|
|
|
gap: 0;
|
|
}
|
|
|
|
/* Sizing */
|
|
.full-width { inline-size: 100%; }
|
|
.min-width { min-inline-size: 0; }
|
|
.half-width { inline-size: 50%; }
|
|
.max-width { max-inline-size: 100%; }
|
|
.min-content { inline-size: min-content; }
|
|
.fit-content { inline-size: fit-content; }
|
|
.max-inline-size { max-inline-size: 100%; }
|
|
|
|
/* Overflow */
|
|
.overflow-x { overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; }
|
|
.overflow-y { overflow-y: auto; scroll-snap-type: y mandatory; scroll-behavior: smooth; }
|
|
.overflow-clip { text-overflow: clip; white-space: nowrap; overflow: hidden; }
|
|
.overflow-ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
|
|
|
|
.overflow-hide-scrollbar::-webkit-scrollbar {
|
|
@media (pointer: course) {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.overflow-line-clamp {
|
|
-webkit-line-clamp: var(--lines, 2);
|
|
-webkit-box-orient: vertical;
|
|
display: -webkit-box;
|
|
overflow: hidden;
|
|
text-overflow: clip;
|
|
white-space: normal;
|
|
}
|
|
|
|
/* Mouse pointer */
|
|
.non-clickable {
|
|
cursor: default;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.cursor-pointer { cursor: pointer; }
|
|
|
|
/* Padding */
|
|
.pad { padding: var(--block-space) var(--inline-space); }
|
|
.pad-double { padding: var(--block-space-double) var(--inline-space-double); }
|
|
|
|
.pad-block { padding-block: var(--block-space); }
|
|
.pad-block-start { padding-block-start: var(--block-space); }
|
|
.pad-block-end { padding-block-end: var(--block-space); }
|
|
.pad-block-half { padding-block: var(--block-space-half); }
|
|
.pad-block-start-half { padding-block-start: var(--block-space-half); }
|
|
|
|
.pad-inline { padding-inline: var(--inline-space); }
|
|
.pad-inline-start { padding-inline-start: var(--inline-space); }
|
|
.pad-inline-end { padding-inline-end: var(--inline-space); }
|
|
.pad-inline-half { padding-inline: var(--inline-space-half); }
|
|
.pad-inline-double { padding-inline: var(--inline-space-double); }
|
|
|
|
.unpad { padding: 0; }
|
|
.unpad-block-end { padding-block-end: 0; }
|
|
.unpad-inline { padding-inline: 0; }
|
|
|
|
/* Margins */
|
|
.margin { margin: var(--block-space) var(--inline-space); }
|
|
.margin-block { margin-block: var(--block-space); }
|
|
.margin-block-half { margin-block: var(--block-space-half); }
|
|
.margin-block-start { margin-block-start: var(--block-space); }
|
|
.margin-block-start-half { margin-block-start: var(--block-space-half); }
|
|
.margin-block-start-auto { margin-block-start: auto; }
|
|
.margin-block-end { margin-block-end: var(--block-space); }
|
|
.margin-block-end-half { margin-block-end: var(--block-space-half); }
|
|
.margin-block-double { margin-block: var(--block-space-double); }
|
|
.margin-block-end-double { margin-block-end: var(--block-space-double); }
|
|
.margin-block-start-double { margin-block-start: var(--block-space-double); }
|
|
|
|
.margin-inline { margin-inline: var(--inline-space); }
|
|
.margin-inline-start { margin-inline-start: var(--inline-space); }
|
|
.margin-inline-start-half { margin-inline-start: var(--inline-space-half); }
|
|
.margin-inline-end { margin-inline-end: var(--inline-space); }
|
|
.margin-inline-end-half { margin-inline-end: var(--inline-space-half); }
|
|
.margin-inline-half { margin-inline: var(--inline-space-half); }
|
|
.margin-inline-double { margin-inline: var(--inline-space-double); }
|
|
|
|
.margin-none { margin: 0; }
|
|
.margin-none-block { margin-block: 0; }
|
|
.margin-none-block-start { margin-block-start: 0; }
|
|
.margin-none-block-end { margin-block-end: 0; }
|
|
|
|
.margin-none-inline { margin-inline: 0; }
|
|
.margin-none-inline-start { margin-inline-start: 0; }
|
|
.margin-none-inline-end { margin-inline-end: 0; }
|
|
|
|
.center { margin-inline: auto; }
|
|
.center-block { margin-block: auto; }
|
|
|
|
/* Position */
|
|
.position-relative { position: relative; }
|
|
.position-sticky { position: sticky; inset: var(--inset, 0 auto auto auto); z-index: var(--z, 1); }
|
|
|
|
/* Fills */
|
|
.fill { background-color: var(--color-canvas); }
|
|
.fill-black { background-color: var(--color-ink); }
|
|
.fill-white { background-color: var(--color-ink-inverted); }
|
|
.fill-shade { background-color: var(--color-ink-lightest); }
|
|
.fill-selected { background-color: var(--color-selected); }
|
|
.fill-highlight { background-color: var(--color-highlight); }
|
|
.fill-transparent { background-color: transparent; }
|
|
|
|
.fill-highlighter {
|
|
display: inline-block;
|
|
position: relative;
|
|
z-index: 1;
|
|
|
|
&::before {
|
|
background-color: var(--color-highlight);
|
|
border-radius: 0.2em;
|
|
content: "";
|
|
inset-block: 0;
|
|
inset-inline: -0.1em;
|
|
position: absolute;
|
|
transform: skewX(-10deg) rotate(1deg);
|
|
z-index: -1;
|
|
}
|
|
}
|
|
|
|
.translucent { opacity: var(--opacity, 0.66); }
|
|
|
|
/* Borders */
|
|
.border { border: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-ink-lighter)); }
|
|
.border-block { border-block: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-ink-lighter)); }
|
|
.border-bottom { border-block-end: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-ink-lighter)); }
|
|
.border-top { border-block-start: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-ink-lighter)); }
|
|
.borderless { border: 0; }
|
|
|
|
/* Border radius */
|
|
.border-radius { border-radius: var(--border-radius, 0.5em); }
|
|
|
|
/* Shadows */
|
|
.shadow { box-shadow: var(--shadow); }
|
|
|
|
/* Lists */
|
|
:where(.list-style-none) {
|
|
list-style: none;
|
|
margin: 0 auto;
|
|
padding: 0;
|
|
}
|
|
|
|
/* Accessibility */
|
|
.visually-hidden,
|
|
.for-screen-reader {
|
|
block-size: 1px;
|
|
clip-path: inset(50%);
|
|
inline-size: 1px;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Visibility */
|
|
[hidden] { display: none !important; }
|
|
.display-contents,
|
|
[contents] { display: contents; }
|
|
|
|
.hide-in-pwa {
|
|
@media (display-mode: standalone) {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.hide-in-browser {
|
|
@media (display-mode: browser) {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.hide-focus-ring {
|
|
--focus-ring-size: 0;
|
|
}
|
|
|
|
.hide-on-touch {
|
|
@media (any-hover: none) {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.show-on-touch {
|
|
display: none;
|
|
|
|
@media (any-hover: none) {
|
|
display: unset;
|
|
}
|
|
}
|
|
|
|
.show-in-mobile-app {
|
|
display: none;
|
|
}
|
|
|
|
.hide-scrollbar {
|
|
-ms-overflow-style: none; /* Edge */
|
|
scrollbar-width: none; /* FF */
|
|
|
|
/* Chrome/Safari/Opera */
|
|
&::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|