/* fonts */ @font-face { font-family: "Iosevka Waffle Web"; font-display: swap; font-weight: 400; font-stretch: normal; font-style: normal; src: url("assets/woff2/iosevka-waffle-regular.woff2") format("woff2"); } @font-face { font-family: 'Iosevka Waffle Web'; font-display: swap; font-weight: 700; font-stretch: normal; font-style: normal; src: url('assets/woff2/iosevka-waffle-bold.woff2') format('woff2'); } /* top-level */ :root { --background-color-0: hsl(180, 11%, 4%); --background-color-1: hsl(180, 11%, 5%); --background-color-2: hsl(180, 11%, 8%); --background-color-3: hsl(180, 11%, 11%); --background-color-4: hsl(180, 11%, 15%); --foreground-color-1: hsl(210, 100%, 100%); --foreground-color-2: hsl(63, 10%, 82%); --foreground-color-3: hsl(63, 2%, 60%); --foreground-color-4: hsl(63, 2%, 49%); --foreground-special-color-1: hsl(180, 18%, 70%); --colored-element-text-color: var(--foreground-color-1); --purple-1: hsl(280, 78%, 50%); --blue-1: hsl(200, 78%, 50%); --green-1: hsl(140, 78%, 50%); --yellow-1: hsl(50, 78%, 50%); --red-1: hsl(2, 78%, 65%); --purple-2: hsl(280, 78%, 45%); --blue-2: hsl(200, 78%, 45%); --green-2: hsl(140, 78%, 40%); --yellow-2: hsl(50, 78%, 60%); --red-2: hsl(2, 78%, 60%); --space-unit: 1em; --space-xxs: calc(0.25 * var(--space-unit)); --space-xs: calc(0.5 * var(--space-unit)); --space-xsplus: calc(0.65 * var(--space-unit)); --space-sm: calc(0.75 * var(--space-unit)); --space-norm: var(--space-unit); --space-normplus: calc(var(--space-unit) + var(--space-sm)); --space-md: calc(1.25 * var(--space-unit)); --space-lg: calc(2 * var(--space-unit)); --space-xl: calc(3.25 * var(--space-unit)); --space-xxl: calc(5.25 * var(--space-unit)); --radius-unit: 0.5em; --radius-xxs: calc(0.25 * var(--radius-unit)); --radius-xs: calc(0.5 * var(--radius-unit)); --radius-xsplus: calc(0.65 * var(--radius-unit)); --radius-sm: calc(0.75 * var(--radius-unit)); --radius-norm: var(--radius-unit); --radius-md: calc(1.25 * var(--radius-unit)); --radius-mdplus: calc(1.50 * var(--radius-unit)); --radius-lg: calc(2 * var(--radius-unit)); --radius-xl: calc(3.25 * var(--radius-unit)); --radius-xxl: calc(5.25 * var(--sradius-unit)); /* initial values. these will be modified by javascript */ --viewportWidth: 100vw; --viewportHeight: 100vh; } html, body { padding: 0; margin: 0; color-scheme: dark; accent-color: var(--purple-2); } body { overflow: hidden; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); color: var(--foreground-color-1); background-color: var(--background-color-1); font-size: 100%; font-family: "Iosevka Waffle Web", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; line-height: 1.75; display: flex; flex-direction: row; width: var(--viewportWidth); height: var(--viewportHeight); } /* fullscreen message */ .fullscreen-message { padding: 0; margin: 0; display: flex; align-items: center; justify-content: center; flex-direction: column; width: 100%; height: 100%; overflow: hidden; background-color: var(--background-color-1); } /* top bar */ .top-bar { display: flex; align-items: center; justify-content: left; width: 100%; padding-left: var(--space-sm); padding-right: var(--space-sm); padding-top: var(--space-xs); padding-bottom: var(--space-xs); flex-grow: 0; flex-shrink: 0; } .top-bar.darker { background-color: var(--background-color-0); } .top-bar-heading { margin-left: var(--space-xxs); } /* modal */ .modal-backdrop { overflow: hidden; display: flex; justify-content: center; align-items: center; position: fixed; width: 100%; height: 100%; top: 0; left: 0; right: 0; bottom: 0; z-index: 15; background-color: rgba(0, 0, 0, 0.4); backdrop-filter: blur(1.5px); } .modal-backdrop-opaque { background-color: var(--background-color-1); backdrop-filter: unset; } .modal { display: flex; flex-direction: column; background-color: var(--background-color-1); border-radius: var(--radius-lg); } .modal-header { font-weight: bold; padding: var(--space-md); } .modal-content { padding: var(--space-md); padding-top: 0; } .modal-footer { margin-top: auto; padding: var(--space-md); background-color: var(--background-color-0); border-bottom-right-radius: var(--radius-lg); border-bottom-left-radius: var(--radius-lg); } .modal-primary-action { float: right; } .modal-secondary-action { float: left; } @media screen and (max-width: 768px) { .modal { width: 100%; border-radius: var(--radius-xl); } .modal, .modal-footer { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .modal-backdrop { align-items: flex-end; justify-content: center; backdrop-filter: unset; } .modal-backdrop-opaque { display: block; } .modal-backdrop-opaque .modal { width: 100%; height: 100%; border-radius: 0; } } /* input */ .input-label { text-transform: uppercase; color: var(--foreground-color-2); user-select: none; } .input { background-color : var(--background-color-2); border: none; color: currentColor; border-radius: var(--radius-md); padding: var(--space-sm); font-size: inherit; line-height: inherit; } .input::placeholder { color: var(--foreground-color-2); } /* button */ .button { color: var(--foreground-color-1); background: none; text-align: center; border: none; padding: 0.6em; border-radius: 1em; font: inherit; user-select: none; /* TODO: inefficient */ display: flex; justify-content: center; align-items: center; flex-shrink: 0; } .button:hover { background-color: var(--background-color-2); } .button-accent { color: var(--colored-element-text-color); background-color: var(--purple-2); } .button-accent:hover { background-color: var(--purple-1); } .button-accent:disabled { background-color: var(--purple-2); } .button-red { color: var(--colored-element-text-color); background-color: var(--red-2); } .button-red:hover { background-color: var(--red-1); } .button-red:disabled { background-color: var(--red-2); } .button-danger { color: var(--red-2); } /* icon buttons */ .icon-button { display: flex; justify-content: center; align-items: center; background-color: transparent; color: var(--foreground-color-2); text-align: center; border: none; border-radius: var(--radius-md); font: inherit; } .icon-button .material-icons, .icon-button .material-icons-outlined { color: currentColor; } .icon-button-auto { margin-left: auto; } .icon-button:hover { color: var(--foreground-color-1); } /* unread indicator */ .unread-indicator { display: inline-flex; justify-content: center; align-items: center; background-color: var(--red-2); padding-top: 1px; padding-bottom: 1px; padding-left: 0.375rem; padding-right: 0.375rem; border-radius: 9999px; font-size: x-small; } /* spinner */ .spinner { display: inline-block; border: 5px solid hsla(0, 0%, 100%, 0.1); border-left-color: hsla(0, 0%, 100%, 0.3); border-radius: 50%; animation: spinner-fadein 0.5s, spinner-spin 1.1s cubic-bezier(0.77,0,0.18,1) infinite; width: 38px; height: 38px; } .spinner.ui { width: 28px; height: 28px; flex-shrink: 0; } @keyframes spinner-fadein { from { opacity: 0; } to { opacity: 1; } } @keyframes spinner-spin { to { transform: rotate(1turn); } } /* text */ .h1 {font-size: 1.802rem;} .h2 {font-size: 1.602rem;} .h3 {font-size: 1.424rem;} .h4 {font-size: 1.266rem;} .h5 {font-size: 1.125rem;} .text-small {font-size: 0.889rem;} /* sidebar */ .sidebar-container { display: flex; flex-direction: column; background-color: var(--background-color-0); height: 100%; min-width: 255px; max-width: 255px; } @media screen and (max-width: 768px) { .sidebar-container { flex-basis: 100%; min-width: unset; max-width: unset; } } .sidebar { width: 100%; height: 100%; padding: var(--space-xs); overflow-x: hidden; overflow-y: auto; } .sidebar-button { user-select: none; flex-shrink: 0; display: flex; align-items: center; justify-content: left; border: none; background-color: var(--background-color-0); padding: var(--space-xs); margin-bottom: var(--space-xxs); color: var(--foreground-special-color-1); font: inherit; border-radius: var(--radius-md); width: 100%; } .sidebar-button .sidebar-button-text { margin-left: var(--space-xxs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sidebar-button .icon-button { display: none; } .sidebar-button.selected .icon-button, .sidebar-button:hover .icon-button { display: flex; } .sidebar-button:hover { background-color: var(--background-color-2); } .sidebar-button.selected { color: var(--foreground-color-1); background-color: var(--background-color-2); } .sidebar-button.selected .icon-button { color: var(--foreground-color-1); } .material-icons-outlined, .material-icons { user-select: none; color: var(--foreground-special-color-1); } /* badges */ .user-badge { display: inline-flex; justify-content: center; align-items: center; background-color: var(--purple-2); padding-top: 1px; padding-bottom: 1px; padding-left: 0.375rem; padding-right: 0.375rem; border-radius: 9999px; font-size: x-small; margin-left: var(--space-sm); cursor: pointer; } /*! the tweaks below are heavily based on modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ *, ::before, ::after { box-sizing: border-box; } /* firefox placeholder */ ::-moz-placeholder { opacity: 1; } html { line-height: 1.15; -webkit-text-size-adjust: 100%; /* Prevent adjustments of font size after orientation changes in iOS */ } b, strong { font-weight: bolder; } code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 1em; } small { font-size: 80%; } button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; line-height: 1.15; margin: 0; } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* Correct the inability to style clickable types in iOS and Safari. */ button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; appearance: button; } /* Remove the additional ":invalid" styles in Firefox. */ /* See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 */ :-moz-ui-invalid { box-shadow: none; }