sendou.ink/app/styles/common.css
2022-07-28 22:59:58 +03:00

499 lines
9.3 KiB
CSS

*,
*::before,
*::after {
box-sizing: border-box;
}
body {
width: 100%;
background-color: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: antialiased;
line-height: 1.55;
overflow-x: hidden;
}
*:focus:not(:focus-visible) {
outline: none !important;
}
a {
color: var(--theme);
font-weight: var(--semi-bold);
text-decoration: none;
}
:is(button, .button) {
display: flex;
width: auto;
align-items: center;
justify-content: center;
border: 2px solid var(--theme);
appearance: none;
background: var(--theme);
border-radius: var(--rounded-sm);
color: var(--button-text);
cursor: pointer;
font-size: var(--fonts-sm);
font-weight: var(--bold);
line-height: 1.2;
outline-offset: 2px;
padding-block: var(--s-1-5);
padding-inline: var(--s-2-5);
user-select: none;
}
:is(button, .button):focus-visible {
outline: 2px solid var(--theme);
}
:is(button, .button):active {
transform: translateY(1px);
}
:is(button, .button):disabled {
cursor: not-allowed;
opacity: 0.5;
transform: initial;
}
:is(button, .button).outlined {
background-color: transparent;
color: var(--theme);
}
:is(button, .button).outlined-success {
border-color: var(--theme-success);
background-color: transparent;
color: var(--theme-success);
}
:is(button, .button).tiny {
font-size: var(--fonts-xs);
padding-block: var(--s-1);
padding-inline: var(--s-2);
}
:is(button, .button).minimal {
padding: 0;
border: none;
background-color: transparent;
color: var(--theme);
outline: initial;
}
:is(button, .button).minimal-success {
padding: 0;
border: none;
background-color: transparent;
color: var(--theme-success);
}
:is(button, .button).success {
border-color: var(--theme-success);
background-color: var(--theme-success);
outline-color: var(--theme-success);
}
:is(button, .button).destructive {
border-color: var(--theme-error);
background-color: transparent;
color: var(--theme-error);
outline-color: var(--theme-error);
}
:is(button, .button).minimal-destructive {
padding: 0;
border: none;
background-color: transparent;
color: var(--theme-error);
outline-color: var(--theme-error);
}
:is(button, .button).loading {
cursor: not-allowed;
opacity: 0.6;
}
.button-icon {
width: 1.25rem;
margin-inline-end: var(--s-1-5);
}
.button-icon.lonely {
margin-inline-end: 0;
}
:is(button, .button).tiny > .button-icon {
width: 1rem;
margin-inline-end: var(--s-1);
}
textarea:not(.plain) {
padding: var(--s-2-5) var(--s-3);
border: 1px solid var(--border);
accent-color: var(--theme-secondary);
background-color: transparent;
border-radius: var(--rounded);
color: var(--text);
font-size: var(--fonts-sm);
outline: none;
overflow-wrap: normal;
overflow-x: scroll;
white-space: pre;
}
progress {
accent-color: var(--theme);
}
textarea:not(.plain):focus-within {
border-color: transparent;
/* TODO: rectangle on Safari */
outline: 2px solid var(--theme);
}
input:not(.plain) {
height: 1rem;
padding: var(--s-4) var(--s-3);
border: 1px solid var(--border);
accent-color: var(--theme-secondary);
background-color: transparent;
border-radius: var(--rounded);
color: var(--text);
font-size: var(--fonts-sm);
outline: none;
}
input:user-invalid {
border-color: transparent;
outline: 2px solid var(--theme-error);
}
input:not(.plain):focus-within {
border-color: transparent;
/* TODO: rectangle on Safari */
outline: 2px solid var(--theme);
}
input:not(.plain)::placeholder {
color: var(--text-lighter);
font-size: var(--fonts-xxs);
font-weight: var(--semi-bold);
letter-spacing: 0.5px;
}
input:not(.plain).error {
border-color: transparent;
outline: 2px solid var(--theme-error);
}
input[type="checkbox"] {
width: 16px;
height: 16px;
}
label {
display: block;
font-size: var(--fonts-xs);
font-weight: var(--bold);
margin-block-end: var(--label-margin);
}
details summary {
cursor: pointer;
}
fieldset {
border: none;
background-color: var(--bg-darker-transparent);
border-radius: var(--rounded);
font-size: var(--fonts-sm);
padding-block-end: var(--s-3);
padding-inline: var(--s-3);
}
legend {
background-color: transparent;
border-radius: 2px;
border-radius: var(--rounded-sm);
font-size: var(--fonts-xs);
font-weight: var(--bold);
}
article {
padding-inline: var(--s-3);
white-space: pre-line;
}
select {
all: unset;
width: 90%;
border: 1px solid var(--border);
background: var(--select-background, var(--bg-lighter));
/* TODO: Get color from CSS var */
background-image: url('data:image/svg+xml;utf8,<svg width="1rem" color="rgb(255 255 255 / 55%)" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /></svg>');
background-position-x: 92%;
background-position-y: 50%;
background-repeat: no-repeat;
border-radius: var(--rounded);
cursor: pointer;
font-size: var(--fonts-sm);
font-weight: 500;
padding-block: 3.5px;
padding-inline: var(--s-3);
}
select::selection {
overflow: hidden;
font-weight: bold;
}
select:focus {
outline: 2px solid var(--theme);
}
hr {
border-color: var(--theme-transparent);
}
abbr:not([title]) {
text-decoration: none;
}
abbr[title] {
cursor: help;
}
dialog {
width: min(90%, 24rem);
border: 0;
margin: auto;
background-color: var(--bg);
border-radius: var(--rounded);
}
dialog::backdrop {
background: hsla(237deg 98% 1% / 70%);
}
@supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {
dialog::backdrop {
-webkit-backdrop-filter: blur(7px) brightness(70%);
backdrop-filter: blur(7px) brightness(70%);
background-color: transparent;
}
}
dialog[open],
dialog::backdrop {
animation: show 500ms ease;
}
@keyframes show {
0% {
opacity: 0;
}
}
.button-text-paragraph {
display: flex;
gap: var(--s-1);
}
.button-text-paragraph > button {
font-size: var(--fonts-md);
font-size: var(--fonts-sm);
font-weight: var(--semi-bold);
margin-block-end: 0.125rem;
}
.sub-nav__container {
display: flex;
flex-wrap: wrap;
justify-content: center;
background-color: var(--bg-lighter);
background-image: url("/svg/background-pattern.svg");
margin-block-end: var(--s-4);
overflow-x: auto;
}
.sub-nav__link {
display: flex;
height: 100%;
flex-direction: column;
align-items: center;
padding: var(--s-4);
background-color: var(--bg-lighter);
color: var(--text);
font-size: var(--fonts-xs);
font-weight: var(--semi-bold);
white-space: nowrap;
}
.sub-nav__active-icon {
height: 1.2rem;
margin-block-end: -1rem;
margin-block-start: -3px;
visibility: hidden;
}
.sub-nav__link.active > .sub-nav__active-icon {
visibility: visible;
}
.popover-content {
z-index: 1;
max-width: 20rem;
padding: var(--s-2);
background-color: var(--bg-darker-transparent);
border-radius: var(--rounded);
font-size: var(--fonts-sm);
font-weight: var(--semi-bold);
white-space: pre-wrap;
}
@supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {
.popover-content {
-webkit-backdrop-filter: blur(10px) brightness(75%);
backdrop-filter: blur(10px) brightness(75%);
background-color: transparent;
}
}
.combobox-input {
width: 12rem;
}
.combobox-options {
position: absolute;
z-index: 2;
width: 12rem;
margin-top: var(--s-2);
background-color: var(--bg-darker);
border-radius: var(--rounded);
color: var(--text);
font-size: var(--fonts-sm);
padding-block: var(--s-3);
padding-inline: 0;
}
.combobox-options.empty {
padding-block: var(--s-1-5);
}
.combobox-item {
padding: var(--s-1) var(--s-3);
list-style: none;
}
.combobox-no-matches {
display: flex;
align-items: center;
justify-content: center;
color: var(--text-lighter);
font-size: var(--fonts-xs);
font-weight: var(--bold);
gap: var(--s-1);
}
.combobox-emoji {
color: var(--text);
font-size: var(--fonts-lg);
}
.combobox-item.active {
background-color: var(--theme-transparent);
}
.avatar {
background-color: var(--bg-lighter);
background-image: url("/svg/background-pattern.svg");
border-radius: 50%;
}
.stack {
display: flex;
flex-direction: column;
}
.stack.xxs {
gap: var(--s-1);
}
.stack.xs {
gap: var(--s-1-5);
}
.stack.sm {
gap: var(--s-2);
}
.stack.md {
gap: var(--s-4);
}
.stack.lg {
gap: var(--s-8);
}
.stack.horizontal {
flex-direction: row;
}
.lock-scroll {
overflow: hidden;
}
.label__container {
display: flex;
align-items: flex-end;
gap: var(--s-2);
margin-block-end: var(--label-margin);
}
.label__container > label {
margin: 0;
}
.label__value {
color: var(--text-lighter);
font-size: var(--fonts-xxs);
margin-block-start: -5px;
}
.label__value.warning {
color: var(--theme-warning);
}
.label__value.error {
color: var(--theme-error);
}
.error-message {
display: block;
color: var(--theme-error);
font-size: var(--fonts-xs);
margin-block-start: var(--label-margin);
}
.calendar__event__tags {
display: flex;
padding: 0;
color: var(--button-text);
font-size: var(--fonts-xxs);
font-weight: var(--semi-bold);
list-style: none;
}
.calendar__event__tags > li {
border-radius: var(--rounded);
padding-inline: var(--s-1-5);
}