axiom/res/css/axiom.css
2025-08-06 17:41:44 -06:00

393 lines
8.5 KiB
CSS

:root {
/* background */
--axiom-color-background: #fff;
--axiom-color-background-secondary: #e2e2e2;
/* text */
--axiom-font-family-sans: "Inter", "Arial", sans;
--axiom-font-family-serif: serif;
/* color */
--axiom-color: #373c44;
--axiom-color-title: #2d3138;
--axiom-color-muted: #646b79;
--axiom-color-link: #0172ad;
--axiom-color-selection: #029ae840;
/* elements */
--axiom-body-margin: 5vw;
--axiom-color-border: #cfd5e2;
--axiom-border: 1px solid var(--axiom-color-border);
--axiom-padding: 1rem;
--axiom-border-radius: 0.4rem;
/* buttons */
--axiom-color-button: #0172ad;
--axiom-color-button-fg: #fff;
/* icons */
--axiom-icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
--axiom-icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
--axiom-icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E");
}
@media (prefers-color-scheme: dark) {
:root {
/* background */
--axiom-color-background: #13171F;
--axiom-color-background-secondary: #2a3140;
/* color */
--axiom-color: #c2c7d0;
--axiom-color-title: #e0e3e7;
--axiom-color-muted: #7b8495;
--axiom-color-link: #01aaff;
--axiom-color-selection: #01aaff30;
/* elements */
--axiom-color-border: #2a3140;
}
}
@media screen and (width <= 768px) {
button:not([rel="prev"]) {
width: 100% !important;
}
}
body {
background-color: var(--axiom-color-background);
color: var(--axiom-color);
font-family: var(--axiom-font-family-sans);
text-align: left;
line-height: 1.5rem;
height: 100vh;
width: 56rem;
max-width: 90vw;
margin: 0 var(--axiom-body-margin);
}
main {
padding: var(--axiom-padding) 0;
}
::selection {
background-color: var(--axiom-color-selection);
}
h1, h2, h3, h4, h5, h6 {
--axiom-title-font-family: var(--axiom-font-family-sans);
--axiom-title-text-align: left;
--axiom-title-color: var(--axiom-color-title);
font-family: var(--axiom-title-font-family);
color: var(--axiom-title-color);
text-align: var(--axiom-title-text-align);
}
h1 {
line-height: 2.4rem;
}
h2 {
line-height: 2rem;
}
h3 {
line-height: 1.6rem;
}
a {
text-decoration: none;
color: var(--axiom-color-link);
}
strong, em,
sub, sup {
color: var(--axiom-color);
}
header {
padding: var(--axiom-padding) 0;
}
.carousel {
display: flex;
gap: var(--axiom-padding);
overflow-x: auto;
max-width: 100%;
}
.carousel > * {
flex: 1 1 0;
min-width: min-content;
}
nav {
display: flex;
justify-content: space-between;
align-items: center;
}
nav > *:not(:last-child) {
padding-right: var(--axiom-padding);
}
nav ul {
padding: 0;
display: flex;
justify-content: space-between;
list-style: none;
}
nav ul li:not(:last-child) {
padding-right: var(--axiom-padding);
}
.overflow-auto {
overflow: auto;
}
.body-width {
width: calc(100vw - (var(--axiom-body-margin) * 2));
overflow-x: auto;
}
.muted {
color: var(--axiom-color-muted);
}
body img {
display: block;
width: 100%;
max-width: 38rem;
margin: 0 auto;
padding: 1rem 0;
}
form {
display: flex;
flex-direction: column;
}
form div {
display: flex;
justify-content: space-between;
align-items: center;
}
label {
color: var(--axiom-color);
}
input,
button,
select,
textarea {
font-family: var(--axiom-font-family-sans);
box-sizing: border-box;
color: var(--axiom-color);
white-space: nowrap;
font-size: 1.1rem;
width: 100%;
margin: calc(var(--axiom-padding) * .5) 0;
padding: calc(var(--axiom-padding) * .5) calc(var(--axiom-padding) * 0.8);
border: var(--axiom-border);
border-radius: var(--axiom-border-radius);
background-color: #00000002;
}
textarea {
resize: vertical;
white-space: pre-wrap;
min-height: 2em;
max-height: 65vh;
overflow-y: auto;
}
canvas {
/* TODO: canvas */
}
button {
width: max-content;
font-weight: 600;
background-color: var(--axiom-color-button);
border-color: var(--axiom-color-button);
color: var(--axiom-color-button-fg);
cursor: pointer;
}
button.outline {
background-color: #0000;
color: var(--axiom-color-button);
}
[type="checkbox"][role="switch"] {
font-size: inherit;
appearance: none;
margin: 0.2em 0;
padding: 1em;
cursor: pointer;
position: relative;
width: 3.8em;
height: 100%;
border: var(--axiom-border);
border-radius: 2em;
outline: none;
background-color: #ccc;
transition: background .2s;
}
[type="checkbox"][role="switch"]::after {
content: '';
position: absolute;
top: 0.97em;
left: 28%;
transform: translate(-50%, -50%);
border-radius: 50%;
height: 1.55em;
width: 1.55em;
background-color: #fff;
transition: left .2s;
}
[type="checkbox"][role="switch"]:checked {
background-color: var(--axiom-color-link);
border-color: var(--axiom-color-link);
}
[type="checkbox"][role="switch"]:checked::after {
left: 72%;
}
footer {
padding: var(--axiom-padding) 0;
}
details {
padding: calc(var(--axiom-padding) * .5) 0;
}
details summary {
list-style-type: none;
cursor: pointer;
}
details summary::after {
width: 1rem;
height: 1rem;
float: right;
transform: rotate(-90deg);
background-image: var(--axiom-icon-chevron);
background-size: 1rem auto;
background-repeat: no-repeat;
content: "";
}
details[open] summary::after {
transform: rotate(0deg);
}
table {
color: var(--axiom-color);
width: 100%;
margin: var(--axiom-padding) 0;
border-collapse: collapse;
table-layout: auto;
}
tbody tr:nth-child(odd) {
background: #00000002;
}
th, td {
font-size: 0.8rem;
padding: 0.1rem 0.4rem;
white-space: nowrap;
border-bottom: var(--axiom-border);
}
th > input,
td > input {
all: unset;
font-weight: normal;
max-width: 10em;
}
dialog[open] {
display: flex;
z-index: 999;
position: fixed;
inset: 0;
align-items: center;
justify-content: center;
width: inherit;
min-width: 100%;
height: inherit;
min-height: 100%;
padding: 0;
border: 0;
backdrop-filter: blur(0.375rem);
background-color: #00000008;
}
dialog > article {
padding: var(--axiom-padding);
width: 85%;
height: 80vh;
max-width: 40rem;
overflow-y: auto;
border: var(--axiom-border);
border-radius: var(--axiom-border-radius);
background-color: var(--axiom-color-background);
}
article > header {
margin-top: calc(var(--axiom-padding) * -1);
}
dialog > article > header :is(a, button)[rel="prev"] {
float: right;
width: 2.5rem;
height: 2.5rem;
border: var(--axiom-border);
border-radius: var(--axiom-border-radius);
background-image: var(--axiom-icon-close);
background-position: center;
background-size: auto 1rem;
background-repeat: no-repeat;
background-color: transparent;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(20em, 1fr));
gap: var(--axiom-padding);
}
[aria-busy="true"]:not(input, textarea, html, form)::after {
margin-right: 0.5em;
display: inline-block;
width: 1em;
height: 1em;
background-image: var(--axiom-icon-loading);
background-size: 1em auto;
background-repeat: no-repeat;
content: "";
vertical-align: -.125em;
}
[aria-busy="true"]:not(input, textarea):is(button, [type="submit"], [type="button"], [type="reset"], [role="button"]):not(.outline)::after {
filter: brightness(0) invert(1);
}
.clickable {
cursor: pointer;
transition: all 0.1s ease;
}
.clickable:hover {
background-color: var(--axiom-color-background-secondary);
}