@import '/fonts/poppins.css'; @import '/fonts/comfortaa.css'; @import '/fonts/cascadia-code.css'; @import '/fonts/material-symbols-outlined.css'; body { /* Fonts */ --fontDefault: 'Poppins'; --fontCode: 'Cascadia Code'; --fontHeading: 'Comfortaa'; --fontButton: 'Comfortaa'; --fontContext: 'Comfortaa'; --fontIcons: 'Material Symbols Outlined Rounded'; /* Timing functions */ --bezier: cubic-bezier(0.1, 0.3, 0.3, 1); /* Body styles */ margin: 0px; background: var(--b1); color: var(--f1); font-family: var(--fontDefault); font-size: 16px; line-height: 1; } * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; } a { color: var(--f3); text-decoration: underline; } a:hover { color: var(--f2); text-decoration: underline; } h1, h2, h3, h4, h5, h6 { font-family: var(--fontHeading); font-weight: bold; color: var(--f1); line-height: 1.2; margin-top: 1em; margin-bottom: 0.4em; word-break: break-word; } h1 { font-size: 2.2rem } h2 { font-size: 1.8rem } h3 { font-size: 1.5rem; color: var(--f2) } h4 { font-size: 1.3rem; color: var(--f3) } h5 { font-size: 1.1rem; color: var(--f3) } h6 { font-size: 1rem; color: var(--f3) } h1:not(.no-border), h2:not(.no-border) { padding-bottom: 0.1em; border-bottom: 1px solid var(--b3); } p, li { line-height: 1.6; word-break: break-word; } p, ul, ol { margin: 0px; margin-bottom: 0.8em; } small { font-size: 14px; line-height: 1.2; color: var(--f4); } small.pad-top { display: block; margin-top: 0.5em; } label { font-size: 14px; color: var(--f3); display: block; margin-bottom: 0.5em; } blockquote { margin: 0px; margin-bottom: 10px; margin-left: 5px; padding: 10px 15px; border-left: 2px solid var(--b4); } table { border: 1px solid var(--b4); border-collapse: collapse; margin-bottom: 10px; line-height: 1.5; } table > thead { background: var(--b3); text-align: left; } table th, table td { padding: 8px 12px; border: 1px solid var(--b4); } table th { font-family: var(--fontHeading); font-weight: bold; color: var(--f2); } code { font-family: var(--fontCode); } code:not(pre code) { padding: 2px 4px; background: var(--b0); border: 1px solid var(--b2); border-radius: 8px; word-break: break-word; } pre { padding: 10px; border-radius: 20px; background: var(--b0); border: 1px solid var(--b2); color: var(--f1); } pre code { display: block; padding: 10px; max-height: 500px; max-width: 100%; overflow: auto; line-height: 1.4; font-size: 16px; } .cm-comment, .cm-meta, .cm-hr, code .token.comment, code .token.deleted, code .token.prolog, code .token.doctype, code .token.cdata { color: var(--syntax-comment) !important } .cm-header, .cm-def, .cm-variable, .cm-variable-3, .cm-number, .cm-builtin, .cm-atom, .cm-qualifier, .cm-attribute, code .token.builtin, code .token.property, code .token.attr-name, code .token.boolean, code .token.number, code .token.constant { color: var(--syntax-constant) !important } .cm-variable-2, .cm-type, code .token.color, code .token.variable { color: var(--syntax-variable) !important } .cm-calle, code .token.function, code .token.symbol, code .token.entity { color: var(--syntax-entity) !important } .cm-tag, code .token.class-name, code .token.selector, code .token.tag { color: var(--syntax-entity-tag) !important } .cm-keyword, .cm-operator, code .token.important, code .token.keyword, code .token.operator, code .token.atrule, code .token.unit { color: var(--syntax-keyword) !important } .cm-quote, .cm-string, .cm-string-2, .cm-link, code .token.string, code .token.char, code .token.regex, code .token.url, code .token.attr-value { color: var(--syntax-string) !important } .cm-property, .cm-positive, .cm-negative, .cm-bracket, .cm-error, .cm-invalidchar, code .token.punctuation, code .token.inserted, code .token.interpolation-punctuation { color: var(--f1) !important } code .token.bold { font-weight: bold; } code .token.italic { font-style: italic } code .token.namespace { color: var(--f3) } .CodeMirror { background: var(--b0); border: 1px solid var(--b2); color: var(--f1); font-family: 'Cascadia Code'; font-size: 18px; line-height: 1.3; } .CodeMirror-gutters { border: none; background: none; } .CodeMirror-linenumbers { background: var(--b0); padding: 0px 10px; } .CodeMirror-linenumber { color: var(--f3); } .CodeMirror-selected, .CodeMirror-selectedtext, .CodeMirror *::selection { background: var(--b3) !important; } .CodeMirror-activeline-background { background: var(--b2); } .CodeMirror-cursor { border-color: var(--f1); } h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child, p:first-child, a:first-child, li:first-child { margin-top: 0px; } h1:last-child, h2:last-child, h3:last-child, h4:last-child, h5:last-child, h6:last-child, p:last-child, a:last-child, li:last-child { margin-bottom: 0px; } .btn { --height: 40px; --padding-top: 2px; --padding-lr: 20px; --gap: 12px; --icon-size: 26px; height: var(--height); padding: 0px var(--padding-lr); padding-top: var(--padding-top); border: none; border-radius: 100px; font-family: var(--fontButton); font-size: var(--font-size); font-weight: bold; color: var(--fg); background: var(--bg); text-decoration: none; display: flex; align-items: center; justify-content: center; gap: var(--gap); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; user-select: none; cursor: pointer; flex-shrink: 0; transition: 0.3s var(--bezier); } .btnGroup { display: flex; flex-direction: row; gap: 2px; overflow-x: auto; scrollbar-width: none; } .btnGroup::-webkit-scrollbar { display: none; } .btnGroup > .btn { border-radius: 6px 6px 6px 6px; } .btnGroup > .btn:first-child { border-top-left-radius: 25px; border-bottom-left-radius: 25px; } .btnGroup > .btn:last-child { border-top-right-radius: 25px; border-bottom-right-radius: 25px; } .btn { --fg: var(--b1); --bg: var(--f3); --bgHover: var(--f4); --bgActive: var(--b5); } .btn.secondary { --fg: var(--f2); --bg: var(--b3); --bgHover: var(--b4); --bgActive: var(--b5); } .btn.tertiary { --fg: var(--f3); --bg: transparent; --bgHover: var(--b3); --bgActive: var(--b4); } .btn.overlay { --fg: var(--l8); --bg: transparent; --bgHover: rgba(255, 255, 255, 0.2); --bgActive: rgba(255, 255, 255, 0.4); } .btn.info { --fg: var(--f1); --bg: var(--blue1); --bgHover: var(--blue2); --bgActive: var(--blue3); } .btn.success { --fg: var(--f1); --bg: var(--green1); --bgHover: var(--green2); --bgActive: var(--green3); } .btn.warning { --fg: var(--f1); --bg: var(--yellow1); --bgHover: var(--yellow2); --bgActive: var(--yellow3); } .btn.danger { --fg: var(--f1); --bg: var(--red1); --bgHover: var(--red2); --bgActive: var(--red3); } .btn:hover:not(:disabled), .btn:focus-visible:not(:disabled) { background: var(--bgHover); color: var(--fg); text-decoration: none; transition: none; } @media ( hover: none ) { .btn:hover:not(:disabled) { background: var(--bg); transition: 0.2s var(--bezier); } } .btn:active:not(:disabled) { background: var(--bgActive); color: var(--fg); text-decoration: none; } .btn > .icon { font-family: var(--fontIcons); font-size: var(--icon-size); line-height: 1; color: inherit; font-weight: normal; } .btn.iconOnly > *:not(.icon) { display: none; } .btn:not(.iconOnly) > .icon { margin: -2px -5px 0px -5px; } .btn.iconOnly > .icon { margin-left: 1px; } .btn.small { --height: 34px; --font-size: 14px; --padding-top: 1px; --padding-lr: 16px; --icon-size: 24px; } .btn.large { --height: 46px; --font-size: 16px; --padding-top: 2px; --padding-lr: 24px; --icon-size: 28px; } .btn.iconOnly { padding: 0px; width: var(--height); height: var(--height); } .btn:disabled { opacity: 0.4; cursor: not-allowed; } .textbox { width: 100%; height: 40px; padding: 0px 20px; border: 2px solid var(--b3); border-radius: 20px; font-family: var(--fontDefault); font-size: 16px; line-height: 1.3; background: var(--b3); color: var(--f1); display: flex; align-items: center; transition: 0.1s var(--bezier); } .textbox:focus, .textbox:focus-within { border-color: var(--f4); background: var(--b2); outline: none; } .textbox.textarea { height: auto; padding: 12px 0px; } .textbox.textarea > textarea { width: 100%; height: 100%; padding: 0px 20px; border: none; background: transparent; color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; line-height: 1.3; resize: none; outline: none; } input[type="date"], input[type="time"], input[type="datetime-local"], select { appearance: none; } .dropdown { position: relative; } .dropdown > select { padding-right: 40px; } .dropdown::after { position: absolute; top: 0px; right: 10px; height: 100%; display: flex; align-items: center; justify-content: center; content: 'expand_more'; font-family: var(--fontIcons); font-size: 32px; color: var(--f3); pointer-events: none; } .popupCont { position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; padding: 10px; z-index: 10; display: flex; background: rgba(0, 0, 0, 0.3); overflow-x: hidden; overflow-y: auto; opacity: 0; transition: 0.2s var(--bezier); } .popupCont.visible { opacity: 1; } .popup { margin: auto; max-width: 600px; max-height: 100%; background: var(--b1); border-radius: 20px; display: flex; flex-direction: column; overflow: hidden; scale: 1.1; transition: 0.2s var(--bezier); box-shadow: 0px 0px 50px 0px rgba(0, 0, 0, 0.2); } .popupCont.visible > .popup { scale: 1; } .popup > .title { font-family: var(--fontHeading); font-size: 22px; font-weight: bold; color: var(--f1); padding: 20px 20px 10px 20px; } .popup > .body { padding: 0px 20px 10px 20px; max-height: 99999px; min-height: 23px; overflow-y: auto; z-index: 1; } .popup > .actions { padding: 10px 20px 15px 20px; display: flex; flex-direction: row-reverse; flex-wrap: wrap; gap: 12px; user-select: none; } .contextCont { position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 20; overflow: hidden; user-select: none; } .context { position: fixed; top: 0px; left: 0px; max-width: 400px; max-height: 100%; overflow-x: hidden; overflow-y: auto; text-overflow: ellipsis; white-space: nowrap; border-radius: 20px; background: var(--b1); border: 1px solid var(--b3); padding: 6px; display: flex; flex-direction: column; gap: 6px; scale: 0.9; opacity: 0; box-shadow: 0px 0px 50px 0px rgba(0, 0, 0, 0.1); scrollbar-width: none; } .context::-webkit-scrollbar { display: none; } .contextCont.ani .context { transition: 0.1s var(--bezier); } .contextCont.visible .context { opacity: 1; scale: 1; } .context > .item { height: 34px; padding: 0px 12px; display: flex; align-items: center; gap: 12px; background: transparent; outline: none; border: none; border-radius: 14px; transition: 0.2s var(--bezier); cursor: pointer; flex-shrink: 0; } .context > .item:hover:not(:disabled), .context > .item:focus:not(:disabled) { background: var(--b3); transition: none; } @media ( hover: none ) { .context > .item:hover:not(:disabled) { background: transparent; transition: 0.2s var(--bezier); } } .context > .item:active:not(:disabled) { background: var(--b4); } .context > .item > .label { max-width: 100%; margin-top: 3px; color: var(--f1); font-family: var(--fontContext); font-weight: bold; font-size: 16px; text-align: left; display: flex; flex-direction: column; justify-content: center; } .context > .item > .label, .context > .item > .label * { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .context > .item > .icon { font-family: var(--fontIcons); width: 24px; font-size: 24px; line-height: 1; color: var(--f3); display: flex; align-items: center; } .context > .item > .icon.hidden { opacity: 0; } .context.hideIcons > .item > .icon { display: none; } .context > .item:disabled { cursor: not-allowed; opacity: 0.5; } .context > .separator { height: 1px; background: var(--b3); flex-shrink: 0; } @media (pointer: coarse) { .context { gap: 3px; } .context > .item { height: 37px; } } .tooltip { position: fixed; top: 0px; left: 0px; max-width: 400px; padding: 6px 12px; border-radius: 20px; background: var(--b2); border: 1px solid var(--b3); font-size: 15px; line-height: 1.2; word-break: break-word; pointer-events: none; box-shadow: 0px 0px 50px 0px rgba(0, 0, 0, 0.2); opacity: 0; transition: 0.2s var(--bezier); z-index: 99; } @media (hover: hover) { .tooltip.visible { opacity: 1; } } .toastOverlay { position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 20; padding: 20px; pointer-events: none; overflow: hidden; filter: drop-shadow(0px 0px 50px rgba(0, 0, 0, 0.2)); } .toastOverlay > .toast { position: relative; max-width: 500px; padding: 0px 10px; border-radius: 20px; background: var(--b3); border: 1px solid var(--b4); scale: 0.8; opacity: 0; transition: 0.2s var(--bezier); pointer-events: all; } .toastOverlay > .toast.visible { scale: 1; opacity: 1; } .toastOverlay > .toast > .icon { font-family: var(--fontIcons); font-size: 28px; line-height: 1; color: var(--f2); display: flex; align-items: center; padding: 10px 0px; margin-left: 5px; user-select: none; } .toastOverlay > .toast > .icon.hidden { display: none; } .toastOverlay > .toast > .body { padding: 15px 5px; } .toastOverlay > .toast > .close { padding: 15px 0px; } .notice { border-radius: 20px; background: var(--b3); border: 1px solid var(--b4); display: flex; margin-bottom: 10px; } .notice.info { border-color: var(--blue1); background: var(--blue2); } .notice.success { border-color: var(--green1); background: var(--green2); } .notice.warning { border-color: var(--yellow1); background: var(--yellow2); } .notice.danger { border-color: var(--red1); background: var(--red2); } .notice > .icon { font-family: var(--fontIcons); font-size: 28px; line-height: 1; color: var(--f3); display: flex; align-items: center; padding: 10px 20px; padding-right: 0px; user-select: none; } .notice > .body { padding: 15px 20px; } progress { --bg: var(--b4); --fill: var(--f3); appearance: none; position: relative; margin: 8px 0px; background: var(--bg); width: 100%; height: 5px; border-radius: 4px; overflow: hidden; outline: none; border: none; } progress.info { --fill: var(--blue1); } progress.success { --fill: var(--green1); } progress.warning { --fill: var(--yellow1); } progress.danger { --fill: var(--red1); } progress:not([value]):before, progress:not([value]):after { content: ""; background-color: var(--fill); border-radius: 100px; height: 5px; position: absolute; left: 0; top: 0; width: 30%; animation: move 1.5s linear infinite; transform: translateX(-100%); } progress:not([value]):after { animation-delay: 0.75s; } @keyframes move { 0% { transform: translateX(-100%); } 100% { transform: translateX(350%); } } progress::-webkit-progress-bar { background: var(--bg); border-radius: 4px; } progress::-webkit-progress-value { background: var(--fill); border-radius: 4px; transition: 0.1s ease-in-out; } progress::-moz-progress-bar { background: var(--fill); border-radius: 4px; transition: 0.1s ease-in-out; } .slider { --thumbFill: var(--b0); --thumbFillHover: var(--b3); --barBg: var(--b4); --barFill: var(--f3); position: relative; width: 100%; height: 27px; } .slider.overlay { --thumbFill: white; --thumbFillHover: var(--l7); --barBg: rgba(255, 255, 255, 0.2); --barFill: var(--l8); } .slider progress { --bg: var(--barBg); --fill: var(--barFill); position: absolute; margin-top: 11px; } .slider progress::-webkit-progress-value { transition: none; } .slider progress::-moz-progress-bar { transition: none; } .slider input[type="range"] { position: absolute; appearance: none; background: transparent; position: absolute; top: 0px; left: 0px; width: 100%; margin-left: -12px; width: calc(100% + 24px); height: 24px; z-index: 2; } .slider input[type="range"]::-webkit-slider-thumb { appearance: none; width: 21px; height: 21px; background: var(--thumbFill); border-radius: 100px; transition: 0.2s var(--bezier); box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.2); } .slider input[type="range"]::-webkit-slider-thumb:hover, .slider input[type="range"]::-webkit-slider-thumb:active { background: var(--thumbFillHover); transition: none; } .slider input[type="range"]::-moz-range-thumb { appearance: none; width: 24px; height: 24px; background: var(--thumbFill); border: 3px solid var(--b100); border-radius: 100px; transition: 0.1s var(--bezier); } .slider input[type="range"]::-moz-range-thumb:hover, .slider input[type="range"]::-moz-range-thumb:active { background: var(--thumbFillHover); } input[type="radio"], input[type="checkbox"] { appearance: none; font-family: var(--fontIcons); font-size: 1.8em; color: var(--f1); line-height: 1; flex-shrink: 0; cursor: pointer; } input[type="radio"]:checked, input[type="checkbox"]:checked { color: var(--f4); } input[type="radio"]::before { content: "radio_button_unchecked"; } input[type="radio"]:checked::before { content: "radio_button_checked"; } input[type="checkbox"]::before { content: "check_box_outline_blank"; } input[type="checkbox"]:checked::before { content: "check_box"; } label.selectOption { margin: 0px; padding-right: 8px; display: flex; align-items: center; font-family: var(--fontDefault); font-size: 16px; line-height: 1.2; color: var(--f1); cursor: pointer; user-select: none; } label.selectOption input[type="radio"], label.selectOption input[type="checkbox"] { margin-top: 0; margin-right: 0.3em; } label.selectOption:hover > input[type="radio"], label.selectOption:hover > input[type="checkbox"] { color: var(--f2); } label.selectOption:hover > input[type="radio"]:checked, label.selectOption:hover > input[type="checkbox"]:checked { color: var(--b5); } @keyframes spinner { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .spinner { --bg: var(--b4); --fill: var(--f3); --size: 48px; --thickness: 5px; height: var(--size); width: var(--size); border: var(--thickness) solid var(--bg); border-top-color: var(--fill); border-radius: 50%; animation: spinner 1s linear infinite; } .spinner.info { --fill: var(--blue1); } .spinner.success { --fill: var(--green1); } .spinner.warning { --fill: var(--yellow1); } .spinner.danger { --fill: var(--red1); } .spinner.overlay { --bg: rgba(255, 255, 255, 0.2); --fill: var(--l8); } .container { max-width: 1000px; padding: 30px 20px; margin: 0px auto; } .container img { max-width: 100%; } .text-muted { color: var(--f4) !important; } .text-info { color: var(--blue0) !important; } .text-success { color: var(--green0) !important; } .text-warning { color: var(--yellow0) !important; } .text-danger { color: var(--red0) !important; } .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .text-overflow-ellipses { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .no-margin { margin: 0px; } .no-padding { padding: 0px; } .no-select { user-select: none; } .row { display: flex; flex-direction: row; } @media screen and (max-width: 480px) { .row.xs { flex-direction: column; } .row.xs > * { width: 100% !important; } } @media screen and (max-width: 540px) { .row.sm { flex-direction: column; } .row.sm > * { width: 100% !important; } } @media screen and (max-width: 720px) { .row.md { flex-direction: column; } .row.md > * { width: 100% !important; } } @media screen and (max-width: 960px) { .row.lg { flex-direction: column; } .row.lg > * { width: 100% !important; } } @media screen and (max-width: 1200px) { .row.xl { flex-direction: column; } .row.xl > * { width: 100% !important; } } .col { display: flex; flex-direction: column; } .align-start { align-items: flex-start; } .align-center { align-items: center; } .align-end { align-items: flex-end; } .justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .flex-grow { flex-grow: 1; } .flex-wrap { flex-wrap: wrap; } .flex-no-shrink { flex-shrink: 0; } .flex-1 { flex: 1; } .gap-2 { gap: 2px } .gap-5 { gap: 5px } .gap-8 { gap: 8px } .gap-10 { gap: 10px } .gap-12 { gap: 12px } .gap-15 { gap: 15px } .gap-18 { gap: 18px } .gap-20 { gap: 20px } .gap-22 { gap: 22px } .gap-25 { gap: 25px } .gap-28 { gap: 28px } .gap-30 { gap: 30px } ::selection { background-color: var(--b4); color: var(--f1); } [placeholder]:empty::before, [placeholder]:empty::after { color: var(--f4); pointer-events: none; } [placeholder]:empty:not(:focus)::before { content: attr(placeholder); } [placeholder]:empty:focus::after { content: attr(placeholder); } ::placeholder { color: var(--f4); } ::-webkit-scrollbar { width: 10px; height: 10px; background: transparent; } ::-webkit-resizer { background: transparent; } ::-webkit-scrollbar-corner { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--b5); border-radius: 100px; background-clip: padding-box; border: 4px solid transparent; } ::-webkit-scrollbar-thumb:hover { background-color: var(--f4); background-clip: padding-box; border: 2px solid transparent; } * { scrollbar-color: var(--b5) transparent; scrollbar-width: thin; }