diff options
Diffstat (limited to 'static/css/style.css')
| -rw-r--r-- | static/css/style.css | 1096 |
1 files changed, 1096 insertions, 0 deletions
diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..c51d1e0 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,1096 @@ +:root { + --bg: #f9f5f0; + --bg-pattern: #f0ebe5; + --fg: #2a1810; + + /* Primary colors */ + --primary: #e8739d; + --primary-light: #f08db5; + --primary-dark: #d85980; + + /* Secondary colors */ + --secondary: #b19cd9; + --secondary-light: #c4b5fd; + --secondary-dark: #9d7eb8; + + /* Accent colors */ + --accent-brown: #8b6f47; + --accent-brown-light: #a8865b; + --accent-brown-dark: #6e5837; + + /* Status colors */ + --success: #4caf50; + --error: #d32f2f; + --warning: #ff9800; + --info: #2196f3; + + /* Neutral colors */ + --border: #2a1810; + --surface: #ffe8f0; + --surface-alt: #fdfcfb; + --muted: #6b5d54; + --border-light: #c0c0c0; + + /* Legacy aliases */ + --accent-pink: #e8739d; + --accent-lavender: #b19cd9; + + --space-xs: 0.5rem; + --space-sm: 1rem; + --space-md: 1.5rem; + --space-lg: 2rem; + --space-xl: 3rem; + + --border-width: 2px; + --border-style: solid; + + --font-mono: "Mono", monospace; + --line-height: 1.4; + + --shadow-sm: 1px 1px 0, 2px 2px 0, 1px 2px 0; + --shadow-md: 1px 1px 0, 2px 2px 0, 3px 3px 0, 2px 1px 0; + --shadow-lg: 1px 1px 0, 2px 2px 0, 3px 3px 0, 4px 4px 0, 2px 1px 0, 1px 2px 0, + 3px 1px 0; + --shadow-color: rgba(42, 24, 16, 0.5); + --shadow-box: 3px 3px 0 rgba(0, 0, 0, 0.2); + --shadow-button: 2px 2px 0 rgba(0, 0, 0, 0.2); + --highlight: rgba(255, 255, 255, 0.4); + --lowlight: rgba(42, 24, 16, 0.6); + + --content-max-width: 1000px; +} + +[data-theme="dark"] { + --bg: #35302a; + --bg-pattern: #2b2620; + --fg: #f5f5f5; + + --primary: #e8739d; + --primary-light: #f08db5; + --primary-dark: #d85980; + + --secondary: #b19cd9; + --secondary-light: #c4b5fd; + --secondary-dark: #9d7eb8; + + --accent-brown: #d4a574; + --accent-brown-light: #e8b896; + --accent-brown-dark: #b8885a; + + --border: #e8e8e8; + --border-light: #8b7d6b; + --surface: #3f3932; + --surface-alt: #47403a; + --muted: #a89f94; + + --accent-pink: #e8739d; + --accent-lavender: #b19cd9; + + --shadow-color: rgba(0, 0, 0, 0.8); + --highlight: rgba(255, 255, 255, 0.3); + --lowlight: rgba(0, 0, 0, 0.8); +} + +@font-face { + font-family: "Mono"; + src: url("/static/fonts/Maple.woff2") format("woff2"); + font-display: swap; + font-weight: normal; +} + +@supports (font-synthesis: none) { + @font-face { + font-family: "Mono"; + src: url("/static/fonts/Maple.woff2") format("woff2"); + font-synthesis: none; + } +} + +/* base */ + +* { + box-sizing: border-box; + margin: 0; + padding: 0; + cursor: + url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 24" width="32" height="24"><path d="M1 3h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v2H9v1h1v2h1v2h-1v1H8v-1H7v-2H6v-2H5v1H4v1H3v1H1" fill="%23ff69b4" stroke="%23b19cd9" stroke-width="0.5"/><path d="M2 5h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1h1v1H8v2h1v2h1v2H8v-2H7v-2H6v-1H5v1H4v1H3v1H2" fill="white" stroke="%23ff69b4" stroke-width="0.5"/></svg>') + 0 0, + auto !important; +} + +html { + font-size: 16px; + background-color: var(--bg); + position: relative; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 100vh; +} + +html::before { + content: ""; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: linear-gradient( + 45deg, + rgba(0, 0, 0, 0.2) 25%, + transparent 25%, + transparent 75%, + rgba(0, 0, 0, 0.2) 75% + ), + linear-gradient( + 45deg, + rgba(0, 0, 0, 0.2) 25%, + transparent 25%, + transparent 75%, + rgba(0, 0, 0, 0.2) 75% + ), + url("/static/img/bg.png"); + background-size: + 10px 10px, + 10px 10px, + auto; + background-position: + 0 0, + 5px 5px, + 0 0; + background-repeat: repeat; + opacity: 0.15; + z-index: -1; + pointer-events: none; +} + +body { + background: transparent; + color: var(--fg); + line-height: var(--line-height); + padding: var(--space-md); + padding-top: calc(var(--space-md) + 3rem); + max-width: var(--content-max-width); + margin: 0 auto; + font-family: var(--font-mono); + scrollbar-color: var(--accent-lavender) var(--bg); + scrollbar-width: thin; + display: flex; + flex-direction: column; + height: 100vh; +} + +/* webkit scrollbar (chrome, safari, edge) */ +::-webkit-scrollbar { + width: 12px; +} + +::-webkit-scrollbar-track { + background: var(--bg); + border: 2px solid var(--border-light); +} + +::-webkit-scrollbar-thumb { + background: var(--accent-lavender); + border: 2px outset var(--border-light); + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--accent-pink); +} + +.div-centered { + max-width: var(--content-max-width); + margin: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + min-height: calc(100vh - 4.5rem); + text-align: justify; +} + +/* typography */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-mono); + font-weight: bold; + line-height: 1.2; + margin-bottom: var(--space-md); + border: 2px solid var(--border-light); + padding: var(--space-sm); + background-size: 4px 4px; + background-color: var(--accent-pink); + background-position: + 0 0, + 2px 2px; + color: var(--bg); +} + +h1 { + font-size: 2rem; + margin-bottom: var(--space-lg); +} +h2 { + font-size: 1.5rem; + background-size: 4px 4px; + background-position: + 0 0, + 2px 2px; + background-color: var(--accent-lavender); + margin-bottom: var(--space-md); +} +h3 { + font-size: 1.25rem; + background-size: 4px 4px; + background-position: + 0 0, + 2px 2px; + background-color: var(--accent-brown); + box-shadow: var(--shadow-box); +} +h4 { + font-size: 1.1rem; +} +h5 { + font-size: 1rem; +} +h6 { + font-size: 0.9rem; +} + +p { + margin-bottom: var(--space-sm); +} + +a { + color: var(--accent-pink); + text-decoration: none; + border-bottom: 2px solid var(--accent-pink); + font-weight: bold; +} + +a:hover { + background: var(--accent-pink); + color: var(--bg); +} + +small { + color: var(--muted); + font-size: 0.875rem; +} + +blockquote { + border-left: 3px solid var(--accent-brown); + padding-left: var(--space-md); + margin: var(--space-md) 0; + font-style: italic; + color: var(--muted); +} + +/* lists */ + +ul, +ol { + margin: var(--space-sm) 0; + padding-left: var(--space-lg); +} + +li { + margin-bottom: var(--space-xs); +} + +/* tables */ + +table { + width: 100%; + border-collapse: collapse; + margin: var(--space-md) 0; + border: 2px solid var(--border-light); + background: var(--bg); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 3px 3px 0 rgba(0, 0, 0, 0.15); +} + +thead { + background: var(--secondary); + color: var(--bg); + font-weight: bold; +} + +th, +td { + padding: var(--space-xs) var(--space-sm); + border: 1px solid var(--border-light); + text-align: left; +} + +tbody tr:nth-child(odd) { + background: var(--surface-alt); +} + +tbody tr:nth-child(even) { + background: var(--bg); +} + +tbody tr:hover { + background: rgba(232, 115, 157, 0.1); +} + +/* code */ + +code { + background: var(--bg); + padding: 0.25rem 0.5rem; + border: 1px solid var(--border-light); + font-size: 0.875rem; + font-family: var(--font-mono); +} + +pre { + background: var(--bg); + border: 2px solid var(--border-light); + padding: var(--space-md); + margin: var(--space-md) 0; + overflow-x: auto; + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 3px 3px 0 rgba(0, 0, 0, 0.15); +} + +pre code { + background: transparent; + border: none; + padding: 0; + font-size: 0.875rem; +} + +/* dividers */ + +hr { + border: none; + border-top: 2px solid var(--border-light); + margin: var(--space-lg) 0; + height: 0; +} + +/* layout */ + +header { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + border-bottom: 2px outset var(--border-light); + padding: 0.4rem var(--space-md); + margin-bottom: 0; + background: var(--surface); + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-md); +} + +header h1 { + display: none; +} + +header::before { + content: ""; + display: inline-block; + width: 1.5rem; + height: 1.5rem; + background-image: url("/static/img/coffee.svg"); + background-size: contain; + background-repeat: no-repeat; + margin-right: 0.5rem; +} + +nav { + display: flex; + gap: var(--space-md); + flex-wrap: wrap; + align-items: center; + margin: 0; + flex: 1; +} + +nav a { + font-size: 0.85rem; + padding: 0.2rem 0.4rem; + color: var(--fg); + border-bottom: 2px solid var(--accent-pink); +} + +main { + flex: 1; +} + +article { + border: 2px solid var(--border-light); + padding: var(--space-md); + margin-bottom: var(--space-lg); + background: var(--surface); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 4px 4px 0 rgba(0, 0, 0, 0.2), + 5px 5px 0 rgba(0, 0, 0, 0.08); +} + +article > :last-child { + margin-bottom: 0; +} + +article h2 { + margin: calc(var(--space-md) * -1) calc(var(--space-md) * -1) var(--space-md); + border-left: none; + border-right: none; + border-top: none; +} + +footer { + border: 2px solid var(--border-light); + padding: var(--space-md); + text-align: center; + background: var(--surface); + font-size: 0.875rem; + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 4px 4px 0 rgba(0, 0, 0, 0.2), + 5px 5px 0 rgba(0, 0, 0, 0.08); +} + +footer > :last-child { + margin-bottom: 0; +} + +/* components */ + +/* forms */ + +input, +textarea, +select { + font-family: var(--font-mono); + padding: var(--space-xs) var(--space-sm); + border: 2px outset var(--border-light); + background: var(--bg); + color: var(--fg); + font-size: 0.875rem; + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight), + inset 2px 2px 0 rgba(255, 255, 255, 0.2), + inset -2px -2px 0 rgba(0, 0, 0, 0.4); + transition: border-color 0.2s, box-shadow 0.2s; + width: 100%; + max-width: 100%; +} + +input::placeholder, +textarea::placeholder, +select::placeholder { + color: var(--muted); + opacity: 0.8; +} + +[data-theme="dark"] input::placeholder, +[data-theme="dark"] textarea::placeholder, +[data-theme="dark"] select::placeholder { + color: #b8b0a0; + opacity: 1; +} + +input:focus, +textarea:focus, +select:focus { + outline: none; + border-color: var(--primary); + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight), + 0 0 0 2px var(--primary); +} + +input:invalid, +textarea:invalid { + border-color: var(--error); +} + +input:invalid:focus, +textarea:invalid:focus { + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight), + 0 0 0 2px var(--error); +} + +textarea { + resize: vertical; + min-height: 4rem; + width: 100%; +} + +select { + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232a1810' 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"); + background-repeat: no-repeat; + background-position: right 0.5rem center; + background-size: 1.2em; + padding-right: 2.5rem; +} + +[data-theme="dark"] select { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5e6e8' 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"); +} + +option { + background: var(--bg); + color: var(--fg); + padding: var(--space-sm); +} + +option:checked { + background: linear-gradient(var(--primary), var(--primary)); + color: var(--bg); +} + +input[type="checkbox"], +input[type="radio"] { + appearance: none; + width: 1.3rem; + height: 1.3rem; + min-width: 1.3rem; + min-height: 1.3rem; + padding: 0; + cursor: pointer; + margin: 0 0.5rem 0 0; + vertical-align: middle; + border: 2px solid var(--border-light); + box-shadow: inset 1px 1px 0 var(--highlight), inset -1px -1px 0 var(--lowlight); + background: var(--bg); + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + font-weight: normal; +} + +input[type="radio"] { + border-radius: 50%; +} + +input[type="checkbox"]:checked, +input[type="radio"]:checked { + background: var(--primary); +} + +label { + display: block; + margin-bottom: var(--space-xs); + font-weight: bold; + color: var(--fg); +} + +input[type="checkbox"] + label, +input[type="radio"] + label { + display: inline; + margin: 0; + font-weight: normal; +} + +/* toggle switches */ + +input[type="checkbox"].toggle { + appearance: none; + width: 2.8rem; + height: 1.6rem; + padding: 0; + margin: 0 0.5rem 0 0; + border: 2px outset var(--border-light); + background: var(--muted); + cursor: pointer; + position: relative; + vertical-align: middle; + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6); + transition: background 0.2s; +} + +input[type="checkbox"].toggle:checked { + background: var(--primary); +} + +input[type="checkbox"].toggle::after { + content: ""; + position: absolute; + width: 0.6rem; + height: 0.6rem; + background: var(--surface); + border: 2px outset var(--border-light); + top: 50%; + transform: translateY(-50%); + left: 0.2rem; + transition: left 0.2s; + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight); +} + +input[type="checkbox"].toggle:checked::after { + left: 1.5rem; +} + +[data-theme="dark"] input[type="checkbox"].toggle { + background: var(--secondary); +} + +[data-theme="dark"] input[type="checkbox"].toggle:checked { + background: var(--primary); +} + +[data-theme="dark"] input[type="checkbox"].toggle::after { + background: var(--accent-brown-light); +} + +#theme-toggle::before { + content: "☾"; + position: absolute; + right: 0.4rem; + top: 50%; + transform: translateY(-50%); + font-size: 0.9rem; + line-height: 1; + color: var(--bg); + transition: opacity 0.2s; +} + +#theme-toggle:checked::before { + content: "☀"; + right: auto; + left: 0.4rem; +} + +/* range sliders */ + +input[type="range"] { + width: 100%; + height: 2.2rem; + background: transparent; + cursor: pointer; + appearance: none; + vertical-align: middle; +} + +input[type="range"]::-webkit-slider-thumb { + appearance: none; + width: 1.5rem; + height: 1rem; + margin-top: -0.25rem; + background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary) 50%, var(--primary-dark) 100%); + border: 2px outset var(--border-light); + cursor: pointer; + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight), + 2px 2px 0 rgba(0, 0, 0, 0.3), + 3px 3px 0 rgba(0, 0, 0, 0.1); +} + +input[type="range"]::-webkit-slider-thumb:active { + box-shadow: + inset 1px 1px 0 var(--lowlight), + inset -1px -1px 0 var(--highlight), + 1px 1px 0 rgba(0, 0, 0, 0.2); +} + +input[type="range"]::-moz-range-thumb { + width: 1.5rem; + height: 0.8rem; + margin-top: -0.15rem; + background: linear-gradient(135deg, var(--primary-light) 0%, var(--primary) 50%, var(--primary-dark) 100%); + border: 2px outset var(--border-light); + cursor: pointer; + box-shadow: + inset 1px 1px 0 var(--highlight), + inset -1px -1px 0 var(--lowlight), + 2px 2px 0 rgba(0, 0, 0, 0.3), + 3px 3px 0 rgba(0, 0, 0, 0.1); + border-radius: 0.3rem; +} + +input[type="range"]::-moz-range-thumb:active { + box-shadow: + inset 1px 1px 0 var(--lowlight), + inset -1px -1px 0 var(--highlight), + 1px 1px 0 rgba(0, 0, 0, 0.2); +} + +input[type="range"]::-webkit-slider-runnable-track { + background: linear-gradient(180deg, + #c0c0c0 0%, + #e8e8e8 1px, + #dfdfdf 2px, + #d0d0d0 100%); + border: 2px inset var(--border-light); + height: 0.8rem; + box-shadow: + inset 2px 2px 0 rgba(255, 255, 255, 0.8), + inset -2px -2px 0 rgba(0, 0, 0, 0.4), + inset 1px 1px 0 rgba(0, 0, 0, 0.1); +} + +input[type="range"]::-moz-range-track { + background: transparent; + border: none; +} + +input[type="range"]::-moz-range-progress { + background: linear-gradient(180deg, + var(--secondary-light) 0%, + var(--secondary) 50%, + var(--secondary-dark) 100%); + height: 0.8rem; + border: 2px inset var(--border-light); + box-shadow: + inset 2px 2px 0 rgba(255, 255, 255, 0.6), + inset -2px -2px 0 rgba(0, 0, 0, 0.3); +} + +fieldset { + border: 2px solid var(--border-light); + padding: var(--space-md); + margin: var(--space-md) 0; + background: var(--surface); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6); +} + +fieldset > :last-child { + margin-bottom: 0; +} + +legend { + padding: 0 var(--space-xs); + margin-left: calc(var(--space-xs) * -1); + font-weight: bold; + color: var(--fg); + background: var(--surface); +} + +/* buttons */ + +button { + font-family: var(--font-mono); + font-weight: bold; + padding: var(--space-xs) var(--space-sm); + border: 2px outset var(--border-light); + background: var(--secondary); + color: var(--bg); + font-size: 0.875rem; + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.6), + inset -1px -1px 0 rgba(0, 0, 0, 0.8), + 3px 3px 0 rgba(0, 0, 0, 0.3), + 4px 4px 0 rgba(0, 0, 0, 0.1); + transition: + transform 0.05s, + box-shadow 0.05s; + cursor: pointer; +} + +button:hover { + background: var(--secondary-dark); + transform: translate(1px, 1px); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.6), + inset -1px -1px 0 rgba(0, 0, 0, 0.8), + 2px 2px 0 rgba(0, 0, 0, 0.3), + 3px 3px 0 rgba(0, 0, 0, 0.1); +} + +button:active { + transform: translate(4px, 4px); + box-shadow: + inset 1px 1px 0 rgba(0, 0, 0, 0.6), + inset -1px -1px 0 rgba(255, 255, 255, 0.3); +} + +/* button variants */ + +button.primary { + background: var(--primary); + color: var(--bg); +} + +button.primary:hover { + background: var(--primary-dark); +} + +button.secondary { + background: var(--secondary); + color: var(--bg); +} + +button.secondary:hover { + background: var(--secondary-dark); +} + +button.success { + background: var(--success); + color: white; +} + +button.success:hover { + background: #45a049; +} + +button.error { + background: var(--error); + color: white; +} + +button.error:hover { + background: #da190b; +} + +button.warning { + background: var(--warning); + color: white; +} + +button.warning:hover { + background: #e68900; +} + +button.info { + background: var(--info); + color: white; +} + +button.info:hover { + background: #0b7dda; +} + +button.contrast { + background: var(--fg); + color: var(--bg); +} + +button.contrast:hover { + background: var(--muted); +} + +button:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none !important; +} + +/* button groups */ + +.button-group { + display: inline-flex; + border: 2px solid var(--border-light); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 3px 3px 0 rgba(0, 0, 0, 0.15); +} + +.button-group button { + border: none; + margin: 0; + border-radius: 0; + box-shadow: none; +} + +.button-group button:not(:last-child) { + border-right: 1px solid var(--border-light); +} + +.button-group button:hover { + box-shadow: none; + transform: none; +} + +.button-group button:active { + box-shadow: none; + transform: none; +} + +/* alerts & messages */ + +.alert { + padding: var(--space-md); + margin: var(--space-md) 0; + border: 2px solid var(--border-light); + border-left: 4px solid var(--info); + background: var(--surface); + box-shadow: + inset 1px 1px 0 rgba(255, 255, 255, 0.3), + inset -1px -1px 0 rgba(0, 0, 0, 0.6), + 3px 3px 0 rgba(0, 0, 0, 0.15); +} + +.alert.success { + border-left-color: var(--success); + background-color: rgba(76, 175, 80, 0.1); +} + +.alert.error { + border-left-color: var(--error); + background-color: rgba(244, 67, 54, 0.1); +} + +.alert.warning { + border-left-color: var(--warning); + background-color: rgba(255, 152, 0, 0.1); +} + +.alert.info { + border-left-color: var(--info); + background-color: rgba(33, 150, 243, 0.1); +} + +/* badges & pills */ + +.badge { + display: inline-block; + padding: 0.25rem 0.5rem; + margin: 0 0.25rem; + background: var(--secondary); + color: var(--bg); + font-size: 0.75rem; + font-weight: bold; + border: 1px solid var(--border-light); +} + +.badge.primary { + background: var(--primary); +} + +.badge.success { + background: var(--success); + color: white; +} + +.badge.error { + background: var(--error); + color: white; +} + +.badge.warning { + background: var(--warning); + color: white; +} + +.badge.info { + background: var(--info); + color: white; +} + +.badge.contrast { + background: var(--fg); + color: var(--bg); +} + +/* helpers */ + +.text-success { + color: var(--success); + font-weight: bold; +} + +.text-error { + color: var(--error); + font-weight: bold; +} + +.text-warning { + color: var(--warning); + font-weight: bold; +} + +.text-info { + color: var(--info); + font-weight: bold; +} + +.text-muted { + color: var(--muted); +} + +.text-contrast { + color: var(--fg); + font-weight: bold; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-left { + text-align: left; +} + +.mt-xs { margin-top: var(--space-xs); } +.mt-sm { margin-top: var(--space-sm); } +.mt-md { margin-top: var(--space-md); } +.mt-lg { margin-top: var(--space-lg); } +.mt-xl { margin-top: var(--space-xl); } + +.mb-xs { margin-bottom: var(--space-xs); } +.mb-sm { margin-bottom: var(--space-sm); } +.mb-md { margin-bottom: var(--space-md); } +.mb-lg { margin-bottom: var(--space-lg); } +.mb-xl { margin-bottom: var(--space-xl); } + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.py-md { + padding-top: var(--space-md); + padding-bottom: var(--space-md); +} + +#theme-toggle { + margin-left: auto; + margin-bottom: 0; +} + +/* fairy dust */ + +@keyframes fairy-float { + 0% { + opacity: 1; + transform: translateY(0) scale(1); + } + 100% { + opacity: 0; + transform: translateY(40px) scale(0.5); + } +} |
