*, *::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) { width: 18rem; max-width: 100%; height: 8rem; 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, [type="radio"]) { width: 12rem; } 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 { white-space: pre-wrap; } 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,'); 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); } table { width: 100%; border-collapse: separate; border-spacing: 0 var(--s-1-5); font-size: var(--fonts-xs); text-align: left; } table > thead { font-size: var(--fonts-xxs); } table > tbody > tr:nth-child(2n) { background-color: var(--bg); } table > thead > tr > th { padding-inline: var(--s-1); } table > tbody > tr > td { padding-inline: var(--s-1); } 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; } } .toggle { all: unset; position: relative; display: inline-flex; width: var(--s-11); height: var(--s-6); align-items: center; background-color: var(--theme-transparent); border-radius: var(--rounded); } .toggle.tiny { width: var(--s-6); height: var(--s-3); } .toggle.checked { background-color: var(--theme); } .toggle:active { transform: initial; } .toggle-dot { display: inline-block; width: var(--s-4); height: var(--s-4); background-color: white; border-radius: 50%; transform: translateX(var(--s-1)); transition: transform 0.2s ease; } .toggle-dot.tiny { width: var(--s-3); height: var(--s-3); transform: translateX(-0.2rem); } .toggle-dot.checked { transform: translateX(var(--s-6)); } .toggle-dot.checked.tiny { transform: translateX(var(--s-4)); } .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; } .input-container { display: flex; 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-container:focus-within { border-color: transparent; /* TODO: rectangle on Safari */ outline: 2px solid var(--theme); } /* stylelint-disable no-descending-specificity */ .input-container > input { width: 100%; border: none; } /* stylelint-enable no-descending-specificity */ .input-container > input:focus-within { outline: none; } .input-addon { display: grid; background-color: var(--bg-lighter); border-radius: var(--rounded) 0 0 var(--rounded); color: var(--text-lighter); font-size: var(--fonts-xs); font-weight: var(--semi-bold); padding-inline: var(--s-2); place-items: center; } .sub-nav__container { display: flex; flex-wrap: wrap; justify-content: center; background-color: var(--bg-lighter); background-image: url("/svg/background-pattern.svg"); 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 { display: flex; align-items: center; padding: var(--s-1) var(--s-3); gap: var(--s-2); 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); } .article > p { padding-block: var(--s-2-5); } .alert { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; background-color: var(--theme-info-transparent); border-radius: var(--rounded); color: var(--text); font-size: var(--fonts-sm); font-weight: var(--semi-bold); gap: var(--s-2); line-height: 0.75; margin-inline: auto; padding-block: var(--s-1-5); padding-inline-end: var(--s-4); padding-inline-start: var(--s-3); } .avatar { background-color: var(--bg-lighter); background-image: url("/svg/background-pattern.svg"); border-radius: 50%; } .alert > svg { height: 1.75rem; fill: var(--theme-info); } .form-errors { font-size: var(--fonts-sm); } .form-errors > h4 { color: var(--theme-error); } .section > div { padding: var(--s-2); background-color: var(--bg-darker); border-radius: var(--rounded); } .section > h2 { color: var(--text-lighter); font-size: var(--fonts-md); } .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.smedium { gap: var(--s-6); } .stack.lg { gap: var(--s-8); } .stack.horizontal { flex-direction: row; } .lock-scroll { overflow: hidden; } /* https://stackoverflow.com/questions/50917016/make-a-hidden-field-required/50917245#comment117565184_50917245 */ .hidden-input-with-validation { position: absolute; width: 0; height: 0; border: none; opacity: 0; pointer-events: none; } .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); } .info-message { display: block; color: var(--text-lighter); font-size: var(--fonts-xs); margin-block-start: var(--label-margin); } .calendar__event__tags { display: flex; max-width: var(--tags-max-width, 18rem); flex-wrap: wrap; padding: 0; color: var(--black-text); font-size: var(--fonts-xxs); font-weight: var(--semi-bold); gap: var(--s-1); list-style: none; } .calendar__event__tags > li { display: flex; border-radius: var(--rounded); padding-inline: var(--s-1-5); } .calendar__event__badge-tag { color: var(--badge-text); } .calendar__event__tag-delete-button { margin-left: auto; } .calendar__event__tag-badges { display: flex; margin-inline-start: var(--s-1); } .calendar__event__tag-delete-button > svg { width: 0.85rem !important; color: var(--black-text); margin-inline-end: 0 !important; margin-inline-start: var(--s-1); } .builds-container { display: grid; justify-content: center; gap: var(--s-3); grid-template-columns: repeat(auto-fit, 15rem); } .build { display: flex; flex-direction: column; padding: var(--s-2-5); background-color: var(--bg-lighter); border-radius: var(--rounded); gap: var(--s-3); } .build__title { font-size: var(--fonts-sm); word-wrap: break-word; } .build__top-row { display: flex; justify-content: space-between; } .build__date { display: block; font-size: var(--fonts-xxxs); } .build__modes { display: flex; min-width: max-content; gap: var(--s-1); } .build__weapon { padding: var(--s-0-5); background-color: var(--bg-darker-very-transparent); border-radius: 50%; } .build__weapon-text { padding-left: var(--s-1); color: var(--text-lighter); font-size: var(--fonts-xxs); font-weight: var(--semi-bold); } .build__weapons { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--s-1); } .build__gear-abilities { display: grid; column-gap: var(--s-1); grid-template-columns: repeat(5, max-content); place-items: center; row-gap: var(--s-2); } .build__gear { background-color: var(--bg-darker-very-transparent); border-radius: 50%; } .build__ability { width: var(--ability-size); height: var(--ability-size); border: 2px solid var(--theme-transparent); border-right: 0; border-bottom: 0; background: var(--bg-ability); background-size: 100%; border-radius: 50%; box-shadow: 0 0 0 1px var(--bg-ability); user-select: none; } .build__bottom-row { display: flex; height: 100%; align-items: flex-end; justify-content: center; gap: var(--s-2); } .build__small-text { font-size: var(--fonts-xxs) !important; } .ability-selector__container { display: flex; width: 100%; flex-direction: column; justify-content: center; gap: var(--s-3); } .ability-selector__slots { display: grid; margin: 0 auto; gap: var(--s-2); grid-template-columns: repeat(4, max-content); place-items: center; } .ability-selector__ability-buttons { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--s-1); } .ability-selector__ability-button { padding: var(--s-0-5); border-color: var(--abilities-button-bg); background-color: var(--abilities-button-bg); border-radius: 50%; }