the home site for me: also iteration 3 or 4 of my site

feat: add biome and format

+785 -732
+31
biome.json
···
··· 1 + { 2 + "$schema": "https://biomejs.dev/schemas/1.9.2/schema.json", 3 + "vcs": { 4 + "enabled": false, 5 + "clientKind": "git", 6 + "useIgnoreFile": false 7 + }, 8 + "files": { 9 + "ignoreUnknown": false, 10 + "ignore": [] 11 + }, 12 + "formatter": { 13 + "formatWithErrors": true, 14 + "enabled": true, 15 + "indentStyle": "tab" 16 + }, 17 + "organizeImports": { 18 + "enabled": true 19 + }, 20 + "linter": { 21 + "enabled": true, 22 + "rules": { 23 + "recommended": true 24 + } 25 + }, 26 + "javascript": { 27 + "formatter": { 28 + "quoteStyle": "double" 29 + } 30 + } 31 + }
+79 -79
sass/css/mods.css
··· 1 #nav-bar { 2 - padding: 0.625rem 0 0 0; 3 - display: flex; 4 - flex-direction: row; 5 - gap: 0.25rem; 6 - flex-wrap: wrap; 7 - justify-content: flex-end; 8 - align-items: center; 9 - align-content: flex-end; 10 } 11 12 #footer-container { 13 - display: flex; 14 - flex-wrap: wrap; 15 - justify-content: center; 16 - align-items: center; 17 - text-align: center; 18 - padding-bottom: 0.5rem; 19 } 20 21 .accent-data { 22 - color: var(--accent-light); 23 } 24 25 .theme-transition { 26 - transition: background-color 0.3s ease; 27 } 28 29 .tags-data { 30 - display: flex; 31 - flex-direction: row; 32 - flex-wrap: wrap; 33 - justify-content: flex-end; 34 - align-items: flex-start; 35 - align-content: flex-end; 36 - gap: 0.25rem; 37 } 38 39 .title-list li { 40 - margin-bottom: 0.375rem; 41 } 42 43 /* icons settings */ 44 .icons { 45 - width: 1.3rem; 46 - height: 1.3rem; 47 - aspect-ratio: 1/1; 48 - display: inline-block; 49 - vertical-align: middle; 50 - color: var(--text); 51 - fill: var(--text); 52 - background-color: transparent; 53 - cursor: pointer; 54 } 55 56 .icons:hover { 57 - background-color: transparent; 58 - color: var(--accent); 59 } 60 61 /* footnotes */ 62 .footnote-definition { 63 - margin: 0 0 0 0.125rem; 64 } 65 66 .footnote-definition-label { 67 - color: var(--accent); 68 } 69 70 .footnote-definition p { 71 - display: inline; 72 - margin: 0.625rem 0 0 0.625rem; 73 } 74 75 /* general classes */ 76 .no-style { 77 - padding: 0; 78 - margin: 0; 79 - border: none; 80 - border-radius: 0; 81 } 82 83 .no-style:hover { 84 - background-color: transparent; 85 - color: var(--accent); 86 } 87 88 .center { 89 - text-align: center; 90 } 91 92 .center img { 93 - display: block; 94 - margin: 1rem auto; 95 } 96 97 .center figcaption { 98 - text-align: center; 99 } 100 101 .float-right { 102 - float: right; 103 } 104 105 .float-left { 106 - float: left; 107 } 108 109 div code, 110 li code, 111 p code { 112 - color: var(--text); 113 - background-color: var(--bg-light); 114 } 115 116 pre { 117 - border-top-left-radius: 0; 118 } 119 120 blockquote { 121 - padding-top: 0.2rem; 122 - padding-bottom: 0.2rem; 123 } 124 125 blockquote:has(+ pre) { 126 - display: inline-block; 127 - border: none; 128 - font-family: "code" !important; 129 - font-size: 0.8rem; 130 - font-weight: 600; 131 - margin: 0; 132 - margin-bottom: 0.2rem; 133 - margin-block: 0 0; 134 - border-top-left-radius: 5px; 135 - border-top-right-radius: 5px; 136 - padding-left: 0.75rem; 137 - padding-right: 0.75rem; 138 - padding-top: 0.25rem; 139 - padding-bottom: 0.25rem; 140 - position: relative; 141 - background-color: var(--accent); 142 } 143 144 blockquote:has(+ pre) p { 145 - margin: 0; 146 - color: var(--accent-text); 147 } 148 149 .yt-embed { 150 - width: 100%; 151 - display: flex; 152 - justify-content: center; 153 } 154 155 .yt-embed iframe { 156 - width: 100%; 157 - aspect-ratio: 16 / 9; 158 }
··· 1 #nav-bar { 2 + padding: 0.625rem 0 0 0; 3 + display: flex; 4 + flex-direction: row; 5 + gap: 0.25rem; 6 + flex-wrap: wrap; 7 + justify-content: flex-end; 8 + align-items: center; 9 + align-content: flex-end; 10 } 11 12 #footer-container { 13 + display: flex; 14 + flex-wrap: wrap; 15 + justify-content: center; 16 + align-items: center; 17 + text-align: center; 18 + padding-bottom: 0.5rem; 19 } 20 21 .accent-data { 22 + color: var(--accent-light); 23 } 24 25 .theme-transition { 26 + transition: background-color 0.3s ease; 27 } 28 29 .tags-data { 30 + display: flex; 31 + flex-direction: row; 32 + flex-wrap: wrap; 33 + justify-content: flex-end; 34 + align-items: flex-start; 35 + align-content: flex-end; 36 + gap: 0.25rem; 37 } 38 39 .title-list li { 40 + margin-bottom: 0.375rem; 41 } 42 43 /* icons settings */ 44 .icons { 45 + width: 1.3rem; 46 + height: 1.3rem; 47 + aspect-ratio: 1 / 1; 48 + display: inline-block; 49 + vertical-align: middle; 50 + color: var(--text); 51 + fill: var(--text); 52 + background-color: transparent; 53 + cursor: pointer; 54 } 55 56 .icons:hover { 57 + background-color: transparent; 58 + color: var(--accent); 59 } 60 61 /* footnotes */ 62 .footnote-definition { 63 + margin: 0 0 0 0.125rem; 64 } 65 66 .footnote-definition-label { 67 + color: var(--accent); 68 } 69 70 .footnote-definition p { 71 + display: inline; 72 + margin: 0.625rem 0 0 0.625rem; 73 } 74 75 /* general classes */ 76 .no-style { 77 + padding: 0; 78 + margin: 0; 79 + border: none; 80 + border-radius: 0; 81 } 82 83 .no-style:hover { 84 + background-color: transparent; 85 + color: var(--accent); 86 } 87 88 .center { 89 + text-align: center; 90 } 91 92 .center img { 93 + display: block; 94 + margin: 1rem auto; 95 } 96 97 .center figcaption { 98 + text-align: center; 99 } 100 101 .float-right { 102 + float: right; 103 } 104 105 .float-left { 106 + float: left; 107 } 108 109 div code, 110 li code, 111 p code { 112 + color: var(--text); 113 + background-color: var(--bg-light); 114 } 115 116 pre { 117 + border-top-left-radius: 0; 118 } 119 120 blockquote { 121 + padding-top: 0.2rem; 122 + padding-bottom: 0.2rem; 123 } 124 125 blockquote:has(+ pre) { 126 + display: inline-block; 127 + border: none; 128 + font-family: "code" !important; 129 + font-size: 0.8rem; 130 + font-weight: 600; 131 + margin: 0; 132 + margin-bottom: 0.2rem; 133 + margin-block: 0 0; 134 + border-top-left-radius: 5px; 135 + border-top-right-radius: 5px; 136 + padding-left: 0.75rem; 137 + padding-right: 0.75rem; 138 + padding-top: 0.25rem; 139 + padding-bottom: 0.25rem; 140 + position: relative; 141 + background-color: var(--accent); 142 } 143 144 blockquote:has(+ pre) p { 145 + margin: 0; 146 + color: var(--accent-text); 147 } 148 149 .yt-embed { 150 + width: 100%; 151 + display: flex; 152 + justify-content: center; 153 } 154 155 .yt-embed iframe { 156 + width: 100%; 157 + aspect-ratio: 16 / 9; 158 }
+24 -24
sass/css/reset.css
··· 2 *, 3 *::before, 4 *::after { 5 - box-sizing: border-box; 6 - -webkit-box-sizing: border-box; 7 } 8 9 * { 10 - margin: 0; 11 } 12 13 /* Prevent font size inflation */ 14 html { 15 - -moz-text-size-adjust: none; 16 - -webkit-text-size-adjust: none; 17 - text-size-adjust: none; 18 } 19 20 /* Remove default margin in favour of better control in authored CSS */ ··· 28 blockquote, 29 dl, 30 dd { 31 - margin-block-end: 0; 32 } 33 34 /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ ··· 36 ol, 37 ul[role="list"], 38 ol[role="list"] { 39 - list-style: none; 40 } 41 42 /* Set core body defaults */ 43 body { 44 - min-height: 100vh; 45 - line-height: 1.5; 46 - -webkit-font-smoothing: antialiased; 47 } 48 49 /* Set shorter line heights on headings and interactive elements */ ··· 54 button, 55 input, 56 label { 57 - line-height: 1.1; 58 } 59 60 /* Balance text wrapping on headings */ ··· 62 h2, 63 h3, 64 h4 { 65 - text-wrap: balance; 66 } 67 68 p, ··· 72 h4, 73 h5, 74 h6 { 75 - overflow-wrap: break-word; 76 } 77 78 /* A elements that don't have a class get default styles */ 79 a:not([class]) { 80 - text-decoration-skip-ink: auto; 81 } 82 83 /* Make images easier to work with */ ··· 86 video, 87 canvas, 88 svg { 89 - max-width: 100%; 90 - display: block; 91 } 92 93 /* Inherit fonts for inputs and buttons */ ··· 96 textarea, 97 select, 98 progress { 99 - appearance: none; 100 - -webkit-appearance: none; 101 - -moz-appearance: none; 102 - font: inherit; 103 } 104 105 /* Make sure textareas without a rows attribute are not tiny */ 106 textarea:not([rows]) { 107 - min-height: 10em; 108 } 109 110 /* Anything that has been anchored to should have extra scroll margin */ 111 :target { 112 - scroll-margin-block: 5ex; 113 } 114 115 #root, 116 #__next { 117 - isolation: isolate; 118 }
··· 2 *, 3 *::before, 4 *::after { 5 + box-sizing: border-box; 6 + -webkit-box-sizing: border-box; 7 } 8 9 * { 10 + margin: 0; 11 } 12 13 /* Prevent font size inflation */ 14 html { 15 + -moz-text-size-adjust: none; 16 + -webkit-text-size-adjust: none; 17 + text-size-adjust: none; 18 } 19 20 /* Remove default margin in favour of better control in authored CSS */ ··· 28 blockquote, 29 dl, 30 dd { 31 + margin-block-end: 0; 32 } 33 34 /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ ··· 36 ol, 37 ul[role="list"], 38 ol[role="list"] { 39 + list-style: none; 40 } 41 42 /* Set core body defaults */ 43 body { 44 + min-height: 100vh; 45 + line-height: 1.5; 46 + -webkit-font-smoothing: antialiased; 47 } 48 49 /* Set shorter line heights on headings and interactive elements */ ··· 54 button, 55 input, 56 label { 57 + line-height: 1.1; 58 } 59 60 /* Balance text wrapping on headings */ ··· 62 h2, 63 h3, 64 h4 { 65 + text-wrap: balance; 66 } 67 68 p, ··· 72 h4, 73 h5, 74 h6 { 75 + overflow-wrap: break-word; 76 } 77 78 /* A elements that don't have a class get default styles */ 79 a:not([class]) { 80 + text-decoration-skip-ink: auto; 81 } 82 83 /* Make images easier to work with */ ··· 86 video, 87 canvas, 88 svg { 89 + max-width: 100%; 90 + display: block; 91 } 92 93 /* Inherit fonts for inputs and buttons */ ··· 96 textarea, 97 select, 98 progress { 99 + appearance: none; 100 + -webkit-appearance: none; 101 + -moz-appearance: none; 102 + font: inherit; 103 } 104 105 /* Make sure textareas without a rows attribute are not tiny */ 106 textarea:not([rows]) { 107 + min-height: 10em; 108 } 109 110 /* Anything that has been anchored to should have extra scroll margin */ 111 :target { 112 + scroll-margin-block: 5ex; 113 } 114 115 #root, 116 #__next { 117 + isolation: isolate; 118 }
+320 -321
sass/css/suCSS.css
··· 1 :root, 2 ::backdrop { 3 - /* set sans-serif & mono fonts */ 4 - --sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, 5 - "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, 6 - "Helvetica Neue", sans-serif; 7 - --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 8 - --standard-border-radius: 5px; 9 10 - /* default colors */ 11 - --bg: #eeeeee; 12 - --bg-light: #cbcdcd; 13 - --text: #41474e; 14 - --text-light: #686764; 15 - --accent: #58310ac5; 16 - --accent-light: #e08f67; 17 - --accent-text: var(--bg); 18 - --border: #646868; 19 - --link: #573819c5; 20 } 21 22 /* theme media queries */ 23 @media (prefers-color-scheme: dark) { 24 - :root, 25 - ::backdrop { 26 - color-scheme: dark; 27 - --bg: #222529; 28 - --bg-light: #464949; 29 - --text: #d6d6d6; 30 - --text-light: #c5c0b7; 31 - --accent: #78b6ad; 32 - --accent-light: #87c9e5; 33 - --accent-text: var(--bg); 34 - --border: #dbd5bc; 35 - --link: #e2c8a2; 36 - } 37 - img, 38 - video { 39 - opacity: 0.8; 40 - } 41 } 42 43 @media (prefers-color-scheme: light) { 44 - :root, 45 - ::backdrop { 46 - color-scheme: light; 47 - --bg: #eeeeee; 48 - --bg-light: #cbcdcd; 49 - --text: #41474e; 50 - --text-light: #686764; 51 - --accent: #58310ac5; 52 - --accent-light: #e08f67; 53 - --accent-text: var(--bg); 54 - --border: #646868; 55 - --link: #573819c5; 56 - } 57 } 58 59 [data-theme="light"] { 60 - /* default (light) theme */ 61 - color-scheme: light; 62 - --bg: #eeeeee; 63 - --bg-light: #cbcdcd; 64 - --text: #41474e; 65 - --text-light: #686764; 66 - --accent: #58310ac5; 67 - --accent-light: #56412bc5; 68 - --accent-text: var(--bg); 69 - --border: #646868; 70 - --link: #573819c5; 71 } 72 73 [data-theme="dark"] { 74 - color-scheme: dark; 75 - --bg: #222529; 76 - --bg-light: #464949; 77 - --text: #d6d6d6; 78 - --text-light: #c5c0b7; 79 - --accent: #78b4b6e3; 80 - --accent-light: #c5edefe6; 81 - --accent-text: var(--bg); 82 - --border: #dbd5bc; 83 - --link: #e2c8a2; 84 } 85 86 ::selection, 87 ::-moz-selection { 88 - color: var(--bg); 89 - background: var(--accent); 90 } 91 92 /* chromium scrollbars */ 93 ::-webkit-scrollbar { 94 - width: 8px; 95 - height: 8px; 96 - overflow: visible; 97 } 98 ::-webkit-scrollbar-thumb { 99 - background: var(--accent); 100 - width: 12px; 101 } 102 ::-webkit-scrollbar-track { 103 - background: var(--bg-light); 104 } 105 106 /* firefox scrollbars */ 107 * { 108 - scrollbar-color: var(--accent) var(--bg-light); 109 - scrollbar-width: thin; 110 - scrollbar-height: thin; 111 } 112 113 html { 114 - color-scheme: light dark; 115 - font-family: var(--mono-font); 116 - scroll-behavior: smooth; 117 } 118 119 body { 120 - min-height: 100svh; 121 - color: var(--text); 122 - background-color: var(--bg); 123 - font-size: 1rem; 124 - display: grid; 125 - grid-template-columns: 1fr min(45rem, 90%) 1fr; 126 - grid-template-rows: auto 1fr auto; 127 - grid-row-gap: 0.625rem; 128 } 129 body > * { 130 - grid-column: 2; 131 } 132 133 body > footer { 134 - color: var(--text-light); 135 - font-size: 0.875; 136 } 137 138 /* Format headers */ 139 h1 { 140 - font-size: 2rem; 141 } 142 h2 { 143 - font-size: 1.75rem; 144 } 145 h3 { 146 - font-size: 1.5rem; 147 } 148 h4 { 149 - font-size: 1.25rem; 150 } 151 h5 { 152 - font-size: 1rem; 153 } 154 h6 { 155 - font-size: 0.75rem; 156 } 157 158 h1, ··· 161 h4, 162 h5, 163 h6 { 164 - margin: 0.5em 0 0.5em 0; 165 } 166 167 /* Fix line height when title wraps */ 168 h1, 169 h2, 170 h3 { 171 - line-height: 1.1; 172 } 173 174 h1::before, ··· 177 h4::before, 178 h5::before, 179 h6::before { 180 - color: var(--accent); 181 - content: "# "; 182 } 183 184 @media only screen and (max-width: 720px) { 185 - h1 { 186 - font-size: 1.5rem; 187 - } 188 - h2 { 189 - font-size: 1.25rem; 190 - } 191 - h3 { 192 - font-size: 1rem; 193 - } 194 - h4 { 195 - font-size: 0.75rem; 196 - } 197 - h5 { 198 - font-size: 0.5rem; 199 - } 200 - h6 { 201 - font-size: 0.25rem; 202 - } 203 } 204 205 p { 206 - margin: 1rem 0; 207 } 208 209 /* format links */ 210 a, 211 a:visited { 212 - text-decoration: none; 213 - font-weight: bold; 214 - font-style: italic; 215 - border-radius: 0.125rem; 216 - color: var(--link); 217 } 218 219 a:hover { 220 - background-color: var(--link); 221 - color: var(--bg); 222 } 223 224 /* format lists */ 225 ul { 226 - list-style: none; 227 - margin-top: 0.25rem; 228 - margin-bottom: 0.25rem; 229 } 230 231 ol { 232 - list-style-type: decimal; 233 - margin-top: 0.25rem; 234 - margin-bottom: 0.25rem; 235 } 236 237 li { 238 - margin-bottom: 0.125rem; 239 } 240 241 ul li::marker { 242 - content: "» "; 243 - color: var(--accent); 244 } 245 246 ul li:hover::marker { 247 - content: "# "; 248 - font-weight: 700; 249 - color: var(--link); 250 } 251 252 ol li::marker { 253 - color: var(--accent); 254 } 255 256 ol li:hover::marker { 257 - font-weight: 700; 258 - color: var(--link); 259 } 260 261 /* Use flexbox to allow items to wrap, as needed */ 262 header > nav ul, 263 header > nav ol { 264 - display: flex; 265 - flex-direction: row; 266 - flex-wrap: wrap; 267 - align-content: space-around; 268 - justify-content: right; 269 - list-style-type: none; 270 - margin: 0.5rem 0 0 0; 271 - padding: 0; 272 - gap: 1rem; 273 } 274 275 /* List items are inline elements, make them behave more like blocks */ 276 header > nav ul li, 277 header > nav ol li { 278 - display: inline-block; 279 } 280 281 /* Consolidate box styling */ 282 aside, 283 details, 284 progress { 285 - background-color: var(--bg-light); 286 - border-radius: var(--standard-border-radius); 287 } 288 289 aside { 290 - font-size: 1rem; 291 - width: 35%; 292 - padding: 0 10px; 293 - margin-inline-start: 10px; 294 - float: right; 295 } 296 *[dir="rtl"] aside { 297 - float: left; 298 } 299 300 /* make aside full-width on mobile */ 301 @media only screen and (max-width: 720px) { 302 - aside { 303 - width: 100%; 304 - float: none; 305 - margin-inline-start: 0; 306 - } 307 } 308 309 details { 310 - padding: 0.5rem; 311 } 312 313 summary { 314 - cursor: pointer; 315 - font-weight: bold; 316 - word-break: break-all; 317 } 318 319 details[open] > summary + * { 320 - margin-top: 0; 321 } 322 323 details[open] > summary { 324 - margin-bottom: 0.5rem; 325 } 326 327 details[open] > :last-child { 328 - margin-bottom: 0; 329 } 330 331 /* Format tables */ 332 table { 333 - border-collapse: collapse; 334 - margin: 1.5rem 0; 335 - display: block; 336 - overflow-x: auto; 337 - white-space: nowrap; 338 } 339 340 td, 341 th { 342 - border: 1px solid var(--border); 343 - text-align: start; 344 - padding: 0.5rem; 345 } 346 347 th { 348 - background-color: var(--bg-light); 349 - font-weight: bold; 350 } 351 352 tr:nth-child(even) { 353 - background-color: var(--bg-light); 354 } 355 356 table caption { 357 - text-align: left; 358 - font-weight: bold; 359 - margin: 0 0 0.4rem 1rem; 360 } 361 362 /* format forms */ 363 fieldset { 364 - border: 1px dashed var(--accent); 365 - border-radius: var(--standard-border-radius); 366 } 367 368 fieldset > legend { 369 - color: var(--accent); 370 } 371 372 textarea, ··· 374 input, 375 button, 376 .button { 377 - font-size: inherit; 378 - font-family: inherit; 379 - padding: 0.25rem; 380 - border-radius: var(--standard-border-radius); 381 - box-shadow: none; 382 - max-width: 100%; 383 - display: inline-block; 384 } 385 386 textarea, 387 select, 388 input { 389 - color: var(--text); 390 - background-color: var(--bg); 391 - border: 1px dashed var(--border); 392 } 393 394 label { 395 - display: block; 396 } 397 398 fieldset label { 399 - margin: 0 0 0.3rem 0; 400 } 401 402 textarea { 403 - max-width: 43.5rem; 404 - resize: both; 405 } 406 407 textarea:not([cols]) { 408 - width: 100%; 409 } 410 411 @media only screen and (max-width: 720px) { 412 - textarea, 413 - select, 414 - input { 415 - width: 100%; 416 - } 417 } 418 419 /* format buttons */ ··· 424 input[type="reset"], 425 input[type="button"], 426 label[type="button"] { 427 - border: 1px solid var(--accent); 428 - background-color: var(--accent); 429 - color: var(--accent-text); 430 - padding: 0.5rem 0.9rem; 431 - text-decoration: none; 432 - line-height: normal; 433 } 434 435 .button[aria-disabled="true"], ··· 437 textarea:disabled, 438 select:disabled, 439 button[disabled] { 440 - cursor: not-allowed; 441 - background-color: var(--bg-light); 442 - border-color: var(--bg-light); 443 - color: var(--text-light); 444 } 445 446 input[type="range"] { 447 - padding: 0; 448 - color: var(--accent); 449 } 450 451 abbr[title] { 452 - cursor: help; 453 - text-decoration-line: underline; 454 - text-decoration-style: dotted; 455 } 456 457 button:enabled:hover, ··· 460 input[type="reset"]:enabled:hover, 461 input[type="button"]:enabled:hover, 462 label[type="button"]:hover { 463 - background-color: var(--accent-light); 464 - border-color: var(--accent-light); 465 - cursor: pointer; 466 } 467 468 .button:focus-visible, 469 button:focus-visible:where(:enabled), 470 input:enabled:focus-visible:where( 471 - [type="submit"], 472 - [type="reset"], 473 - [type="button"] 474 - ) { 475 - outline: 2px solid var(--accent); 476 - outline-offset: 1px; 477 } 478 479 /* checkbox and radio button style */ 480 input[type="checkbox"], 481 input[type="radio"] { 482 - vertical-align: middle; 483 - position: relative; 484 - width: min-content; 485 - width: 14px; 486 - height: 14px; 487 } 488 489 input[type="checkbox"] + label, 490 input[type="radio"] + label { 491 - display: inline-block; 492 } 493 494 input[type="radio"] { 495 - border-radius: 100%; 496 } 497 498 input[type="checkbox"]:checked, 499 input[type="radio"]:checked { 500 - background-color: var(--accent); 501 } 502 503 @media only screen and (max-width: 720px) { 504 - textarea, 505 - select, 506 - input { 507 - width: 100%; 508 - } 509 } 510 511 input[type="color"] { 512 - height: 2.5rem; 513 - padding: 0.2rem; 514 } 515 516 input[type="file"] { 517 - border: 0; 518 } 519 520 /* misc body elements */ 521 hr { 522 - border: 1px dashed var(--accent); 523 - margin: 0.5rem 0 0.5rem 0; 524 } 525 526 mark { 527 - padding: 0 0.25em 0 0.25em; 528 - border-radius: var(--standard-border-radius); 529 - background-color: var(--accent); 530 - color: var(--bg); 531 } 532 533 mark a { 534 - color: var(--link); 535 } 536 537 img, 538 video, 539 iframe[src^="https://www.youtube-nocookie.com"], 540 - iframe[src^="https://www.youtube.com"] 541 - { 542 - max-width: 90%; 543 - height: auto; 544 - padding: 0.125rem; 545 - border: dashed 2px var(--accent); 546 - border-radius: 15px; 547 } 548 549 figure { 550 - margin: 0; 551 - display: block; 552 - overflow-x: auto; 553 } 554 555 figcaption { 556 - text-align: left; 557 - font-size: 0.875rem; 558 - color: var(--text-light); 559 - margin: 0 0 1rem 1rem; 560 } 561 562 blockquote { 563 - margin: 0 0 0 1.25rem; 564 - padding: 0.5rem 0 0 0.5rem; 565 - border-inline-start: 0.375rem solid var(--accent); 566 - color: var(--text-light); 567 - font-style: italic; 568 } 569 570 p:has(cite) { 571 - text-align: right; 572 - font-size: 0.875rem; 573 - color: var(--text-light); 574 - font-weight: 600; 575 } 576 577 cite::before { 578 - content: "— "; 579 } 580 581 dt { 582 - color: var(--text-light); 583 } 584 585 code, ··· 587 pre span, 588 kbd, 589 samp { 590 - font-family: var(--mono-font); 591 } 592 593 pre { 594 - border: 1px solid var(--accent); 595 - max-height: 30rem; 596 - padding: 0.625rem; 597 - overflow-x: auto; 598 - font-style: monospace; 599 } 600 601 p code, 602 li code, 603 div code { 604 - padding: 0 0.125rem 0 0.125rem; 605 - border-radius: 3px; 606 - color: var(--bg); 607 - background-color: var(--text); 608 - transition: background-color 0.3s ease; 609 } 610 611 pre code { 612 - padding: 0; 613 - border-radius: 0; 614 - color: inherit; 615 - background-color: inherit; 616 } 617 618 iframe { 619 - max-width: 90%; 620 } 621 622 /* progress bars */ 623 progress { 624 - width: 100%; 625 } 626 627 progress:indeterminate { 628 - background-color: var(--bg-light); 629 } 630 631 progress::-webkit-progress-bar { 632 - border-radius: var(--standard-border-radius); 633 - background-color: var(--bg-light); 634 } 635 636 progress::-webkit-progress-value { 637 - border-radius: var(--standard-border-radius); 638 - background-color: var(--accent); 639 } 640 641 progress::-moz-progress-bar { 642 - border-radius: var(--standard-border-radius); 643 - background-color: var(--accent); 644 - transition-property: width; 645 - transition-duration: 0.3s; 646 } 647 648 progress:indeterminate::-moz-progress-bar { 649 - background-color: var(--bg-light); 650 } 651 652 dialog { 653 - max-width: 40rem; 654 - margin: auto; 655 } 656 657 dialog::backdrop { 658 - background-color: var(--bg); 659 - opacity: 0.8; 660 } 661 662 @media only screen and (max-width: 720px) { 663 - dialog { 664 - max-width: 100%; 665 - margin: auto 1em; 666 - } 667 } 668 669 /* superscript & subscript */ 670 /* prevent scripts from affecting line-height. */ 671 sup, 672 sub { 673 - vertical-align: baseline; 674 - position: relative; 675 } 676 677 sup { 678 - top: -0.4em; 679 } 680 681 sub { 682 - top: 0.3em; 683 }
··· 1 :root, 2 ::backdrop { 3 + /* set sans-serif & mono fonts */ 4 + --sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, 5 + "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, 6 + "Helvetica Neue", sans-serif; 7 + --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 8 + --standard-border-radius: 5px; 9 10 + /* default colors */ 11 + --bg: #eeeeee; 12 + --bg-light: #cbcdcd; 13 + --text: #41474e; 14 + --text-light: #686764; 15 + --accent: #58310ac5; 16 + --accent-light: #e08f67; 17 + --accent-text: var(--bg); 18 + --border: #646868; 19 + --link: #573819c5; 20 } 21 22 /* theme media queries */ 23 @media (prefers-color-scheme: dark) { 24 + :root, 25 + ::backdrop { 26 + color-scheme: dark; 27 + --bg: #222529; 28 + --bg-light: #464949; 29 + --text: #d6d6d6; 30 + --text-light: #c5c0b7; 31 + --accent: #78b6ad; 32 + --accent-light: #87c9e5; 33 + --accent-text: var(--bg); 34 + --border: #dbd5bc; 35 + --link: #e2c8a2; 36 + } 37 + img, 38 + video { 39 + opacity: 0.8; 40 + } 41 } 42 43 @media (prefers-color-scheme: light) { 44 + :root, 45 + ::backdrop { 46 + color-scheme: light; 47 + --bg: #eeeeee; 48 + --bg-light: #cbcdcd; 49 + --text: #41474e; 50 + --text-light: #686764; 51 + --accent: #58310ac5; 52 + --accent-light: #e08f67; 53 + --accent-text: var(--bg); 54 + --border: #646868; 55 + --link: #573819c5; 56 + } 57 } 58 59 [data-theme="light"] { 60 + /* default (light) theme */ 61 + color-scheme: light; 62 + --bg: #eeeeee; 63 + --bg-light: #cbcdcd; 64 + --text: #41474e; 65 + --text-light: #686764; 66 + --accent: #58310ac5; 67 + --accent-light: #56412bc5; 68 + --accent-text: var(--bg); 69 + --border: #646868; 70 + --link: #573819c5; 71 } 72 73 [data-theme="dark"] { 74 + color-scheme: dark; 75 + --bg: #222529; 76 + --bg-light: #464949; 77 + --text: #d6d6d6; 78 + --text-light: #c5c0b7; 79 + --accent: #78b4b6e3; 80 + --accent-light: #c5edefe6; 81 + --accent-text: var(--bg); 82 + --border: #dbd5bc; 83 + --link: #e2c8a2; 84 } 85 86 ::selection, 87 ::-moz-selection { 88 + color: var(--bg); 89 + background: var(--accent); 90 } 91 92 /* chromium scrollbars */ 93 ::-webkit-scrollbar { 94 + width: 8px; 95 + height: 8px; 96 + overflow: visible; 97 } 98 ::-webkit-scrollbar-thumb { 99 + background: var(--accent); 100 + width: 12px; 101 } 102 ::-webkit-scrollbar-track { 103 + background: var(--bg-light); 104 } 105 106 /* firefox scrollbars */ 107 * { 108 + scrollbar-color: var(--accent) var(--bg-light); 109 + scrollbar-width: thin; 110 + scrollbar-height: thin; 111 } 112 113 html { 114 + color-scheme: light dark; 115 + font-family: var(--mono-font); 116 + scroll-behavior: smooth; 117 } 118 119 body { 120 + min-height: 100svh; 121 + color: var(--text); 122 + background-color: var(--bg); 123 + font-size: 1rem; 124 + display: grid; 125 + grid-template-columns: 1fr min(45rem, 90%) 1fr; 126 + grid-template-rows: auto 1fr auto; 127 + grid-row-gap: 0.625rem; 128 } 129 body > * { 130 + grid-column: 2; 131 } 132 133 body > footer { 134 + color: var(--text-light); 135 + font-size: 0.875; 136 } 137 138 /* Format headers */ 139 h1 { 140 + font-size: 2rem; 141 } 142 h2 { 143 + font-size: 1.75rem; 144 } 145 h3 { 146 + font-size: 1.5rem; 147 } 148 h4 { 149 + font-size: 1.25rem; 150 } 151 h5 { 152 + font-size: 1rem; 153 } 154 h6 { 155 + font-size: 0.75rem; 156 } 157 158 h1, ··· 161 h4, 162 h5, 163 h6 { 164 + margin: 0.5em 0 0.5em 0; 165 } 166 167 /* Fix line height when title wraps */ 168 h1, 169 h2, 170 h3 { 171 + line-height: 1.1; 172 } 173 174 h1::before, ··· 177 h4::before, 178 h5::before, 179 h6::before { 180 + color: var(--accent); 181 + content: "# "; 182 } 183 184 @media only screen and (max-width: 720px) { 185 + h1 { 186 + font-size: 1.5rem; 187 + } 188 + h2 { 189 + font-size: 1.25rem; 190 + } 191 + h3 { 192 + font-size: 1rem; 193 + } 194 + h4 { 195 + font-size: 0.75rem; 196 + } 197 + h5 { 198 + font-size: 0.5rem; 199 + } 200 + h6 { 201 + font-size: 0.25rem; 202 + } 203 } 204 205 p { 206 + margin: 1rem 0; 207 } 208 209 /* format links */ 210 a, 211 a:visited { 212 + text-decoration: none; 213 + font-weight: bold; 214 + font-style: italic; 215 + border-radius: 0.125rem; 216 + color: var(--link); 217 } 218 219 a:hover { 220 + background-color: var(--link); 221 + color: var(--bg); 222 } 223 224 /* format lists */ 225 ul { 226 + list-style: none; 227 + margin-top: 0.25rem; 228 + margin-bottom: 0.25rem; 229 } 230 231 ol { 232 + list-style-type: decimal; 233 + margin-top: 0.25rem; 234 + margin-bottom: 0.25rem; 235 } 236 237 li { 238 + margin-bottom: 0.125rem; 239 } 240 241 ul li::marker { 242 + content: "» "; 243 + color: var(--accent); 244 } 245 246 ul li:hover::marker { 247 + content: "# "; 248 + font-weight: 700; 249 + color: var(--link); 250 } 251 252 ol li::marker { 253 + color: var(--accent); 254 } 255 256 ol li:hover::marker { 257 + font-weight: 700; 258 + color: var(--link); 259 } 260 261 /* Use flexbox to allow items to wrap, as needed */ 262 header > nav ul, 263 header > nav ol { 264 + display: flex; 265 + flex-direction: row; 266 + flex-wrap: wrap; 267 + align-content: space-around; 268 + justify-content: right; 269 + list-style-type: none; 270 + margin: 0.5rem 0 0 0; 271 + padding: 0; 272 + gap: 1rem; 273 } 274 275 /* List items are inline elements, make them behave more like blocks */ 276 header > nav ul li, 277 header > nav ol li { 278 + display: inline-block; 279 } 280 281 /* Consolidate box styling */ 282 aside, 283 details, 284 progress { 285 + background-color: var(--bg-light); 286 + border-radius: var(--standard-border-radius); 287 } 288 289 aside { 290 + font-size: 1rem; 291 + width: 35%; 292 + padding: 0 10px; 293 + margin-inline-start: 10px; 294 + float: right; 295 } 296 *[dir="rtl"] aside { 297 + float: left; 298 } 299 300 /* make aside full-width on mobile */ 301 @media only screen and (max-width: 720px) { 302 + aside { 303 + width: 100%; 304 + float: none; 305 + margin-inline-start: 0; 306 + } 307 } 308 309 details { 310 + padding: 0.5rem; 311 } 312 313 summary { 314 + cursor: pointer; 315 + font-weight: bold; 316 + word-break: break-all; 317 } 318 319 details[open] > summary + * { 320 + margin-top: 0; 321 } 322 323 details[open] > summary { 324 + margin-bottom: 0.5rem; 325 } 326 327 details[open] > :last-child { 328 + margin-bottom: 0; 329 } 330 331 /* Format tables */ 332 table { 333 + border-collapse: collapse; 334 + margin: 1.5rem 0; 335 + display: block; 336 + overflow-x: auto; 337 + white-space: nowrap; 338 } 339 340 td, 341 th { 342 + border: 1px solid var(--border); 343 + text-align: start; 344 + padding: 0.5rem; 345 } 346 347 th { 348 + background-color: var(--bg-light); 349 + font-weight: bold; 350 } 351 352 tr:nth-child(even) { 353 + background-color: var(--bg-light); 354 } 355 356 table caption { 357 + text-align: left; 358 + font-weight: bold; 359 + margin: 0 0 0.4rem 1rem; 360 } 361 362 /* format forms */ 363 fieldset { 364 + border: 1px dashed var(--accent); 365 + border-radius: var(--standard-border-radius); 366 } 367 368 fieldset > legend { 369 + color: var(--accent); 370 } 371 372 textarea, ··· 374 input, 375 button, 376 .button { 377 + font-size: inherit; 378 + font-family: inherit; 379 + padding: 0.25rem; 380 + border-radius: var(--standard-border-radius); 381 + box-shadow: none; 382 + max-width: 100%; 383 + display: inline-block; 384 } 385 386 textarea, 387 select, 388 input { 389 + color: var(--text); 390 + background-color: var(--bg); 391 + border: 1px dashed var(--border); 392 } 393 394 label { 395 + display: block; 396 } 397 398 fieldset label { 399 + margin: 0 0 0.3rem 0; 400 } 401 402 textarea { 403 + max-width: 43.5rem; 404 + resize: both; 405 } 406 407 textarea:not([cols]) { 408 + width: 100%; 409 } 410 411 @media only screen and (max-width: 720px) { 412 + textarea, 413 + select, 414 + input { 415 + width: 100%; 416 + } 417 } 418 419 /* format buttons */ ··· 424 input[type="reset"], 425 input[type="button"], 426 label[type="button"] { 427 + border: 1px solid var(--accent); 428 + background-color: var(--accent); 429 + color: var(--accent-text); 430 + padding: 0.5rem 0.9rem; 431 + text-decoration: none; 432 + line-height: normal; 433 } 434 435 .button[aria-disabled="true"], ··· 437 textarea:disabled, 438 select:disabled, 439 button[disabled] { 440 + cursor: not-allowed; 441 + background-color: var(--bg-light); 442 + border-color: var(--bg-light); 443 + color: var(--text-light); 444 } 445 446 input[type="range"] { 447 + padding: 0; 448 + color: var(--accent); 449 } 450 451 abbr[title] { 452 + cursor: help; 453 + text-decoration-line: underline; 454 + text-decoration-style: dotted; 455 } 456 457 button:enabled:hover, ··· 460 input[type="reset"]:enabled:hover, 461 input[type="button"]:enabled:hover, 462 label[type="button"]:hover { 463 + background-color: var(--accent-light); 464 + border-color: var(--accent-light); 465 + cursor: pointer; 466 } 467 468 .button:focus-visible, 469 button:focus-visible:where(:enabled), 470 input:enabled:focus-visible:where( 471 + [type="submit"], 472 + [type="reset"], 473 + [type="button"] 474 + ) { 475 + outline: 2px solid var(--accent); 476 + outline-offset: 1px; 477 } 478 479 /* checkbox and radio button style */ 480 input[type="checkbox"], 481 input[type="radio"] { 482 + vertical-align: middle; 483 + position: relative; 484 + width: min-content; 485 + width: 14px; 486 + height: 14px; 487 } 488 489 input[type="checkbox"] + label, 490 input[type="radio"] + label { 491 + display: inline-block; 492 } 493 494 input[type="radio"] { 495 + border-radius: 100%; 496 } 497 498 input[type="checkbox"]:checked, 499 input[type="radio"]:checked { 500 + background-color: var(--accent); 501 } 502 503 @media only screen and (max-width: 720px) { 504 + textarea, 505 + select, 506 + input { 507 + width: 100%; 508 + } 509 } 510 511 input[type="color"] { 512 + height: 2.5rem; 513 + padding: 0.2rem; 514 } 515 516 input[type="file"] { 517 + border: 0; 518 } 519 520 /* misc body elements */ 521 hr { 522 + border: 1px dashed var(--accent); 523 + margin: 0.5rem 0 0.5rem 0; 524 } 525 526 mark { 527 + padding: 0 0.25em 0 0.25em; 528 + border-radius: var(--standard-border-radius); 529 + background-color: var(--accent); 530 + color: var(--bg); 531 } 532 533 mark a { 534 + color: var(--link); 535 } 536 537 img, 538 video, 539 iframe[src^="https://www.youtube-nocookie.com"], 540 + iframe[src^="https://www.youtube.com"] { 541 + max-width: 90%; 542 + height: auto; 543 + padding: 0.125rem; 544 + border: dashed 2px var(--accent); 545 + border-radius: 15px; 546 } 547 548 figure { 549 + margin: 0; 550 + display: block; 551 + overflow-x: auto; 552 } 553 554 figcaption { 555 + text-align: left; 556 + font-size: 0.875rem; 557 + color: var(--text-light); 558 + margin: 0 0 1rem 1rem; 559 } 560 561 blockquote { 562 + margin: 0 0 0 1.25rem; 563 + padding: 0.5rem 0 0 0.5rem; 564 + border-inline-start: 0.375rem solid var(--accent); 565 + color: var(--text-light); 566 + font-style: italic; 567 } 568 569 p:has(cite) { 570 + text-align: right; 571 + font-size: 0.875rem; 572 + color: var(--text-light); 573 + font-weight: 600; 574 } 575 576 cite::before { 577 + content: "— "; 578 } 579 580 dt { 581 + color: var(--text-light); 582 } 583 584 code, ··· 586 pre span, 587 kbd, 588 samp { 589 + font-family: var(--mono-font); 590 } 591 592 pre { 593 + border: 1px solid var(--accent); 594 + max-height: 30rem; 595 + padding: 0.625rem; 596 + overflow-x: auto; 597 + font-style: monospace; 598 } 599 600 p code, 601 li code, 602 div code { 603 + padding: 0 0.125rem 0 0.125rem; 604 + border-radius: 3px; 605 + color: var(--bg); 606 + background-color: var(--text); 607 + transition: background-color 0.3s ease; 608 } 609 610 pre code { 611 + padding: 0; 612 + border-radius: 0; 613 + color: inherit; 614 + background-color: inherit; 615 } 616 617 iframe { 618 + max-width: 90%; 619 } 620 621 /* progress bars */ 622 progress { 623 + width: 100%; 624 } 625 626 progress:indeterminate { 627 + background-color: var(--bg-light); 628 } 629 630 progress::-webkit-progress-bar { 631 + border-radius: var(--standard-border-radius); 632 + background-color: var(--bg-light); 633 } 634 635 progress::-webkit-progress-value { 636 + border-radius: var(--standard-border-radius); 637 + background-color: var(--accent); 638 } 639 640 progress::-moz-progress-bar { 641 + border-radius: var(--standard-border-radius); 642 + background-color: var(--accent); 643 + transition-property: width; 644 + transition-duration: 0.3s; 645 } 646 647 progress:indeterminate::-moz-progress-bar { 648 + background-color: var(--bg-light); 649 } 650 651 dialog { 652 + max-width: 40rem; 653 + margin: auto; 654 } 655 656 dialog::backdrop { 657 + background-color: var(--bg); 658 + opacity: 0.8; 659 } 660 661 @media only screen and (max-width: 720px) { 662 + dialog { 663 + max-width: 100%; 664 + margin: auto 1em; 665 + } 666 } 667 668 /* superscript & subscript */ 669 /* prevent scripts from affecting line-height. */ 670 sup, 671 sub { 672 + vertical-align: baseline; 673 + position: relative; 674 } 675 676 sup { 677 + top: -0.4em; 678 } 679 680 sub { 681 + top: 0.3em; 682 }
+247 -247
sass/css/syntax-theme.css
··· 3 */ 4 5 @supports not (-moz-appearance: none) { 6 - .z-code { 7 - transition: background-color 0.3s ease; 8 - } 9 } 10 11 html[data-theme="light"] .z-code { 12 - color: #4c4f69; 13 - background-color: #f2efea; 14 } 15 16 html[data-theme="light"] .z-comment { 17 - color: #9ca0b0; 18 - font-style: italic; 19 } 20 html[data-theme="light"] .z-string { 21 - color: #40a02b; 22 } 23 html[data-theme="light"] .z-string.z-regexp { 24 - color: #fe640b; 25 } 26 html[data-theme="light"] .z-constant.z-numeric { 27 - color: #fe640b; 28 } 29 html[data-theme="light"] .z-constant.z-language.z-boolean { 30 - color: #fe640b; 31 - font-weight: bold; 32 - font-style: italic; 33 } 34 html[data-theme="light"] .z-constant.z-language { 35 - color: #7287fd; 36 - font-style: italic; 37 } 38 html[data-theme="light"] .z-support.z-function.z-builtin { 39 - color: #fe640b; 40 - font-style: italic; 41 } 42 html[data-theme="light"] .z-variable.z-other.z-constant { 43 - color: #fe640b; 44 } 45 html[data-theme="light"] .z-keyword { 46 - color: #d20f39; 47 - font-style: italic; 48 } 49 html[data-theme="light"] .z-keyword.z-control.z-loop, 50 html[data-theme="light"] .z-keyword.z-control.z-conditional, 51 html[data-theme="light"] .z-keyword.z-control.z-c\+\+ { 52 - color: #8839ef; 53 - font-weight: bold; 54 } 55 html[data-theme="light"] .z-keyword.z-control.z-return, 56 html[data-theme="light"] .z-keyword.z-control.z-flow.z-return { 57 - color: #ea76cb; 58 - font-weight: bold; 59 } 60 html[data-theme="light"] .z-support.z-type.z-exception { 61 - color: #fe640b; 62 - font-style: italic; 63 } 64 html[data-theme="light"] .z-keyword.z-operator, 65 html[data-theme="light"] .z-punctuation.z-accessor { 66 - color: #04a5e5; 67 - font-weight: bold; 68 } 69 html[data-theme="light"] .z-punctuation.z-separator { 70 - color: #179299; 71 } 72 html[data-theme="light"] .z-punctuation.z-terminator { 73 - color: #179299; 74 } 75 html[data-theme="light"] .z-punctuation.z-section { 76 - color: #7c7f93; 77 } 78 html[data-theme="light"] .z-keyword.z-control.z-import.z-include { 79 - color: #179299; 80 - font-style: italic; 81 } 82 html[data-theme="light"] .z-storage { 83 - color: #d20f39; 84 } 85 html[data-theme="light"] .z-storage.z-type { 86 - color: #df8e1d; 87 - font-style: italic; 88 } 89 html[data-theme="light"] .z-storage.z-modifier { 90 - color: #d20f39; 91 } 92 html[data-theme="light"] .z-entity.z-name.z-namespace, 93 html[data-theme="light"] .z-meta.z-path { 94 - color: #dc8a78; 95 - font-style: italic; 96 } 97 html[data-theme="light"] .z-storage.z-type.z-class { 98 - color: #dc8a78; 99 - font-style: italic; 100 } 101 html[data-theme="light"] .z-entity.z-name.z-label { 102 - color: #1e66f5; 103 } 104 html[data-theme="light"] .z-keyword.z-declaration.z-class { 105 - color: #d20f39; 106 - font-style: italic; 107 } 108 html[data-theme="light"] .z-entity.z-name.z-class, 109 html[data-theme="light"] .z-meta.z-toc-list.z-full-identifier { 110 - color: #04a5e5; 111 } 112 html[data-theme="light"] .z-entity.z-other.z-inherited-class { 113 - color: #04a5e5; 114 - font-style: italic; 115 } 116 html[data-theme="light"] .z-entity.z-name.z-function, 117 html[data-theme="light"] .z-variable.z-function { 118 - color: #1e66f5; 119 - font-style: italic; 120 } 121 html[data-theme="light"] .z-entity.z-name.z-function.z-preprocessor { 122 - color: #d20f39; 123 } 124 html[data-theme="light"] .z-keyword.z-control.z-import { 125 - color: #d20f39; 126 } 127 html[data-theme="light"] .z-entity.z-name.z-function.z-constructor, 128 html[data-theme="light"] .z-entity.z-name.z-function.z-destructor { 129 - color: #7287fd; 130 } 131 html[data-theme="light"] .z-variable.z-parameter.z-function { 132 - color: #dc8a78; 133 - font-style: italic; 134 } 135 html[data-theme="light"] .z-keyword.z-declaration.z-function { 136 - color: #e64553; 137 - font-style: italic; 138 } 139 html[data-theme="light"] .z-support.z-function { 140 - color: #04a5e5; 141 } 142 html[data-theme="light"] .z-support.z-constant { 143 - color: #1e66f5; 144 } 145 html[data-theme="light"] .z-support.z-type, 146 html[data-theme="light"] .z-support.z-class { 147 - color: #1e66f5; 148 - font-style: italic; 149 } 150 html[data-theme="light"] .z-variable.z-function { 151 - color: #1e66f5; 152 - font-style: italic; 153 } 154 html[data-theme="light"] .z-variable.z-parameter { 155 - color: #dc8a78; 156 - font-style: italic; 157 } 158 html[data-theme="light"] .z-variable.z-other { 159 - color: #4c4f69; 160 - font-style: italic; 161 } 162 html[data-theme="light"] .z-variable.z-other.z-member { 163 - color: #dc8a78; 164 } 165 html[data-theme="light"] .z-variable.z-language { 166 - color: #179299; 167 } 168 html[data-theme="light"] .z-entity.z-name.z-tag { 169 - color: #fe640b; 170 } 171 html[data-theme="light"] .z-entity.z-other.z-attribute-name { 172 - color: #8839ef; 173 - font-style: italic; 174 } 175 html[data-theme="light"] .z-punctuation.z-definition.z-tag { 176 - color: #e64553; 177 } 178 html[data-theme="light"] .z-markup.z-underline.z-link.z-markdown { 179 - color: #dc8a78; 180 - text-decoration: underline; 181 - font-style: italic; 182 } 183 html[data-theme="light"] .z-meta.z-link.z-inline.z-description { 184 - color: #7287fd; 185 - font-weight: bold; 186 } 187 html[data-theme="light"] .z-comment.z-block.z-markdown, 188 html[data-theme="light"] .z-meta.z-code-fence, 189 html[data-theme="light"] .z-markup.z-raw.z-code-fence, 190 html[data-theme="light"] .z-markup.z-raw.z-inline { 191 - color: #179299; 192 - font-style: italic; 193 } 194 html[data-theme="light"] .z-punctuation.z-definition.z-heading, 195 html[data-theme="light"] .z-entity.z-name.z-section { 196 - color: #1e66f5; 197 - font-weight: bold; 198 } 199 html[data-theme="light"] .z-markup.z-italic { 200 - color: #e64553; 201 - font-style: italic; 202 } 203 html[data-theme="light"] .z-markup.z-bold { 204 - color: #e64553; 205 - font-weight: bold; 206 } 207 html[data-theme="light"] .z-constant.z-character.z-escape { 208 - color: #ea76cb; 209 } 210 html[data-theme="light"] 211 - .z-source.z-shell.z-bash 212 - .z-meta.z-function.z-shell 213 - .z-meta.z-compound.z-shell 214 - .z-meta.z-function-call.z-identifier.z-shell { 215 - color: #ea76cb; 216 } 217 html[data-theme="light"] .z-variable.z-language.z-shell { 218 - color: #d20f39; 219 - font-style: italic; 220 } 221 html[data-theme="light"] 222 - .z-source.z-lua 223 - .z-meta.z-function.z-lua 224 - .z-meta.z-block.z-lua 225 - .z-meta.z-mapping.z-value.z-lua 226 - .z-meta.z-mapping.z-key.z-lua 227 - .z-string.z-unquoted.z-key.z-lua { 228 - color: #7287fd; 229 - font-style: italic; 230 } 231 html[data-theme="light"] 232 - .z-source.z-lua 233 - .z-meta.z-function.z-lua 234 - .z-meta.z-block.z-lua 235 - .z-meta.z-mapping.z-key.z-lua 236 - .z-string.z-unquoted.z-key.z-lua { 237 - color: #dd7878; 238 } 239 html[data-theme="light"] .z-entity.z-name.z-constant.z-java { 240 - color: #179299; 241 } 242 html[data-theme="light"] .z-support.z-type.z-property-name.z-css { 243 - color: #dd7878; 244 - font-style: italic; 245 } 246 html[data-theme="light"] .z-support.z-constant.z-property-value.z-css { 247 - color: #4c4f69; 248 } 249 html[data-theme="light"] .z-constant.z-numeric.z-suffix.z-css, 250 html[data-theme="light"] .z-keyword.z-other.z-unit.z-css { 251 - color: #179299; 252 - font-style: italic; 253 } 254 html[data-theme="light"] .z-variable.z-other.z-custom-property.z-name.z-css, 255 html[data-theme="light"] .z-support.z-type.z-custom-property.z-name.z-css, 256 html[data-theme="light"] .z-punctuation.z-definition.z-custom-property.z-css { 257 - color: #179299; 258 } 259 html[data-theme="light"] .z-entity.z-name.z-tag.z-css { 260 - color: #7287fd; 261 } 262 html[data-theme="light"] .z-variable.z-other.z-sass { 263 - color: #179299; 264 } 265 html[data-theme="light"] .z-invalid { 266 - color: #4c4f69; 267 - background-color: #d20f39; 268 } 269 html[data-theme="light"] .z-invalid.z-deprecated { 270 - color: #4c4f69; 271 - background-color: #8839ef; 272 } 273 html[data-theme="light"] .z-meta.z-diff, 274 html[data-theme="light"] .z-meta.z-diff.z-header { 275 - color: #9ca0b0; 276 } 277 html[data-theme="light"] .z-markup.z-deleted { 278 - color: #d20f39; 279 } 280 html[data-theme="light"] .z-markup.z-inserted { 281 - color: #40a02b; 282 } 283 html[data-theme="light"] .z-markup.z-changed { 284 - color: #df8e1d; 285 } 286 html[data-theme="light"] .z-message.z-error { 287 - color: #d20f39; 288 } 289 290 /* dark */ 291 292 html[data-theme="dark"] .z-code { 293 - color: #cad3f5; 294 - background-color: #2a2e35; 295 } 296 297 html[data-theme="dark"] .z-comment { 298 - color: #6e738d; 299 - font-style: italic; 300 } 301 html[data-theme="dark"] .z-string { 302 - color: #a6da95; 303 } 304 html[data-theme="dark"] .z-string.z-regexp { 305 - color: #f5a97f; 306 } 307 html[data-theme="dark"] .z-constant.z-numeric { 308 - color: #f5a97f; 309 } 310 html[data-theme="dark"] .z-constant.z-language.z-boolean { 311 - color: #f5a97f; 312 - font-weight: bold; 313 - font-style: italic; 314 } 315 html[data-theme="dark"] .z-constant.z-language { 316 - color: #b7bdf8; 317 - font-style: italic; 318 } 319 html[data-theme="dark"] .z-support.z-function.z-builtin { 320 - color: #f5a97f; 321 - font-style: italic; 322 } 323 html[data-theme="dark"] .z-variable.z-other.z-constant { 324 - color: #f5a97f; 325 } 326 html[data-theme="dark"] .z-keyword { 327 - color: #ed8796; 328 - font-style: italic; 329 } 330 html[data-theme="dark"] .z-keyword.z-control.z-loop, 331 html[data-theme="dark"] .z-keyword.z-control.z-conditional, 332 html[data-theme="dark"] .z-keyword.z-control.z-c\+\+ { 333 - color: #c6a0f6; 334 - font-weight: bold; 335 } 336 html[data-theme="dark"] .z-keyword.z-control.z-return, 337 html[data-theme="dark"] .z-keyword.z-control.z-flow.z-return { 338 - color: #f5bde6; 339 - font-weight: bold; 340 } 341 html[data-theme="dark"] .z-support.z-type.z-exception { 342 - color: #f5a97f; 343 - font-style: italic; 344 } 345 html[data-theme="dark"] .z-keyword.z-operator, 346 html[data-theme="dark"] .z-punctuation.z-accessor { 347 - color: #91d7e3; 348 - font-weight: bold; 349 } 350 html[data-theme="dark"] .z-punctuation.z-separator { 351 - color: #8bd5ca; 352 } 353 html[data-theme="dark"] .z-punctuation.z-terminator { 354 - color: #8bd5ca; 355 } 356 html[data-theme="dark"] .z-punctuation.z-section { 357 - color: #939ab7; 358 } 359 html[data-theme="dark"] .z-keyword.z-control.z-import.z-include { 360 - color: #8bd5ca; 361 - font-style: italic; 362 } 363 html[data-theme="dark"] .z-storage { 364 - color: #ed8796; 365 } 366 html[data-theme="dark"] .z-storage.z-type { 367 - color: #eed49f; 368 - font-style: italic; 369 } 370 html[data-theme="dark"] .z-storage.z-modifier { 371 - color: #ed8796; 372 } 373 html[data-theme="dark"] .z-entity.z-name.z-namespace, 374 html[data-theme="dark"] .z-meta.z-path { 375 - color: #f4dbd6; 376 - font-style: italic; 377 } 378 html[data-theme="dark"] .z-storage.z-type.z-class { 379 - color: #f4dbd6; 380 - font-style: italic; 381 } 382 html[data-theme="dark"] .z-entity.z-name.z-label { 383 - color: #8aadf4; 384 } 385 html[data-theme="dark"] .z-keyword.z-declaration.z-class { 386 - color: #ed8796; 387 - font-style: italic; 388 } 389 html[data-theme="dark"] .z-entity.z-name.z-class, 390 html[data-theme="dark"] .z-meta.z-toc-list.z-full-identifier { 391 - color: #91d7e3; 392 } 393 html[data-theme="dark"] .z-entity.z-other.z-inherited-class { 394 - color: #91d7e3; 395 - font-style: italic; 396 } 397 html[data-theme="dark"] .z-entity.z-name.z-function, 398 html[data-theme="dark"] .z-variable.z-function { 399 - color: #8aadf4; 400 - font-style: italic; 401 } 402 html[data-theme="dark"] .z-entity.z-name.z-function.z-preprocessor { 403 - color: #ed8796; 404 } 405 html[data-theme="dark"] .z-keyword.z-control.z-import { 406 - color: #ed8796; 407 } 408 html[data-theme="dark"] .z-entity.z-name.z-function.z-constructor, 409 html[data-theme="dark"] .z-entity.z-name.z-function.z-destructor { 410 - color: #b7bdf8; 411 } 412 html[data-theme="dark"] .z-variable.z-parameter.z-function { 413 - color: #f4dbd6; 414 - font-style: italic; 415 } 416 html[data-theme="dark"] .z-keyword.z-declaration.z-function { 417 - color: #ee99a0; 418 - font-style: italic; 419 } 420 html[data-theme="dark"] .z-support.z-function { 421 - color: #91d7e3; 422 } 423 html[data-theme="dark"] .z-support.z-constant { 424 - color: #8aadf4; 425 } 426 html[data-theme="dark"] .z-support.z-type, 427 html[data-theme="dark"] .z-support.z-class { 428 - color: #8aadf4; 429 - font-style: italic; 430 } 431 html[data-theme="dark"] .z-variable.z-function { 432 - color: #8aadf4; 433 - font-style: italic; 434 } 435 html[data-theme="dark"] .z-variable.z-parameter { 436 - color: #f4dbd6; 437 - font-style: italic; 438 } 439 html[data-theme="dark"] .z-variable.z-other { 440 - color: #cad3f5; 441 - font-style: italic; 442 } 443 html[data-theme="dark"] .z-variable.z-other.z-member { 444 - color: #f4dbd6; 445 } 446 html[data-theme="dark"] .z-variable.z-language { 447 - color: #8bd5ca; 448 } 449 html[data-theme="dark"] .z-entity.z-name.z-tag { 450 - color: #f5a97f; 451 } 452 html[data-theme="dark"] .z-entity.z-other.z-attribute-name { 453 - color: #c6a0f6; 454 - font-style: italic; 455 } 456 html[data-theme="dark"] .z-punctuation.z-definition.z-tag { 457 - color: #ee99a0; 458 } 459 html[data-theme="dark"] .z-markup.z-underline.z-link.z-markdown { 460 - color: #f4dbd6; 461 - text-decoration: underline; 462 - font-style: italic; 463 } 464 html[data-theme="dark"] .z-meta.z-link.z-inline.z-description { 465 - color: #b7bdf8; 466 - font-weight: bold; 467 } 468 html[data-theme="dark"] .z-comment.z-block.z-markdown, 469 html[data-theme="dark"] .z-meta.z-code-fence, 470 html[data-theme="dark"] .z-markup.z-raw.z-code-fence, 471 html[data-theme="dark"] .z-markup.z-raw.z-inline { 472 - color: #8bd5ca; 473 - font-style: italic; 474 } 475 html[data-theme="dark"] .z-punctuation.z-definition.z-heading, 476 html[data-theme="dark"] .z-entity.z-name.z-section { 477 - color: #8aadf4; 478 - font-weight: bold; 479 } 480 html[data-theme="dark"] .z-markup.z-italic { 481 - color: #ee99a0; 482 - font-style: italic; 483 } 484 html[data-theme="dark"] .z-markup.z-bold { 485 - color: #ee99a0; 486 - font-weight: bold; 487 } 488 html[data-theme="dark"] .z-constant.z-character.z-escape { 489 - color: #f5bde6; 490 } 491 html[data-theme="dark"] 492 - .z-source.z-shell.z-bash 493 - .z-meta.z-function.z-shell 494 - .z-meta.z-compound.z-shell 495 - .z-meta.z-function-call.z-identifier.z-shell { 496 - color: #f5bde6; 497 } 498 html[data-theme="dark"] .z-variable.z-language.z-shell { 499 - color: #ed8796; 500 - font-style: italic; 501 } 502 html[data-theme="dark"] 503 - .z-source.z-lua 504 - .z-meta.z-function.z-lua 505 - .z-meta.z-block.z-lua 506 - .z-meta.z-mapping.z-value.z-lua 507 - .z-meta.z-mapping.z-key.z-lua 508 - .z-string.z-unquoted.z-key.z-lua { 509 - color: #b7bdf8; 510 - font-style: italic; 511 } 512 html[data-theme="dark"] 513 - .z-source.z-lua 514 - .z-meta.z-function.z-lua 515 - .z-meta.z-block.z-lua 516 - .z-meta.z-mapping.z-key.z-lua 517 - .z-string.z-unquoted.z-key.z-lua { 518 - color: #f0c6c6; 519 } 520 html[data-theme="dark"] .z-entity.z-name.z-constant.z-java { 521 - color: #8bd5ca; 522 } 523 html[data-theme="dark"] .z-support.z-type.z-property-name.z-css { 524 - color: #f0c6c6; 525 - font-style: italic; 526 } 527 html[data-theme="dark"] .z-support.z-constant.z-property-value.z-css { 528 - color: #cad3f5; 529 } 530 html[data-theme="dark"] .z-constant.z-numeric.z-suffix.z-css, 531 html[data-theme="dark"] .z-keyword.z-other.z-unit.z-css { 532 - color: #8bd5ca; 533 - font-style: italic; 534 } 535 html[data-theme="dark"] .z-variable.z-other.z-custom-property.z-name.z-css, 536 html[data-theme="dark"] .z-support.z-type.z-custom-property.z-name.z-css, 537 html[data-theme="dark"] .z-punctuation.z-definition.z-custom-property.z-css { 538 - color: #8bd5ca; 539 } 540 html[data-theme="dark"] .z-entity.z-name.z-tag.z-css { 541 - color: #b7bdf8; 542 } 543 html[data-theme="dark"] .z-variable.z-other.z-sass { 544 - color: #8bd5ca; 545 } 546 html[data-theme="dark"] .z-invalid { 547 - color: #cad3f5; 548 - background-color: #ed8796; 549 } 550 html[data-theme="dark"] .z-invalid.z-deprecated { 551 - color: #cad3f5; 552 - background-color: #c6a0f6; 553 } 554 html[data-theme="dark"] .z-meta.z-diff, 555 html[data-theme="dark"] .z-meta.z-diff.z-header { 556 - color: #6e738d; 557 } 558 html[data-theme="dark"] .z-markup.z-deleted { 559 - color: #ed8796; 560 } 561 html[data-theme="dark"] .z-markup.z-inserted { 562 - color: #a6da95; 563 } 564 html[data-theme="dark"] .z-markup.z-changed { 565 - color: #eed49f; 566 } 567 html[data-theme="dark"] .z-message.z-error { 568 - color: #ed8796; 569 }
··· 3 */ 4 5 @supports not (-moz-appearance: none) { 6 + .z-code { 7 + transition: background-color 0.3s ease; 8 + } 9 } 10 11 html[data-theme="light"] .z-code { 12 + color: #4c4f69; 13 + background-color: #f2efea; 14 } 15 16 html[data-theme="light"] .z-comment { 17 + color: #9ca0b0; 18 + font-style: italic; 19 } 20 html[data-theme="light"] .z-string { 21 + color: #40a02b; 22 } 23 html[data-theme="light"] .z-string.z-regexp { 24 + color: #fe640b; 25 } 26 html[data-theme="light"] .z-constant.z-numeric { 27 + color: #fe640b; 28 } 29 html[data-theme="light"] .z-constant.z-language.z-boolean { 30 + color: #fe640b; 31 + font-weight: bold; 32 + font-style: italic; 33 } 34 html[data-theme="light"] .z-constant.z-language { 35 + color: #7287fd; 36 + font-style: italic; 37 } 38 html[data-theme="light"] .z-support.z-function.z-builtin { 39 + color: #fe640b; 40 + font-style: italic; 41 } 42 html[data-theme="light"] .z-variable.z-other.z-constant { 43 + color: #fe640b; 44 } 45 html[data-theme="light"] .z-keyword { 46 + color: #d20f39; 47 + font-style: italic; 48 } 49 html[data-theme="light"] .z-keyword.z-control.z-loop, 50 html[data-theme="light"] .z-keyword.z-control.z-conditional, 51 html[data-theme="light"] .z-keyword.z-control.z-c\+\+ { 52 + color: #8839ef; 53 + font-weight: bold; 54 } 55 html[data-theme="light"] .z-keyword.z-control.z-return, 56 html[data-theme="light"] .z-keyword.z-control.z-flow.z-return { 57 + color: #ea76cb; 58 + font-weight: bold; 59 } 60 html[data-theme="light"] .z-support.z-type.z-exception { 61 + color: #fe640b; 62 + font-style: italic; 63 } 64 html[data-theme="light"] .z-keyword.z-operator, 65 html[data-theme="light"] .z-punctuation.z-accessor { 66 + color: #04a5e5; 67 + font-weight: bold; 68 } 69 html[data-theme="light"] .z-punctuation.z-separator { 70 + color: #179299; 71 } 72 html[data-theme="light"] .z-punctuation.z-terminator { 73 + color: #179299; 74 } 75 html[data-theme="light"] .z-punctuation.z-section { 76 + color: #7c7f93; 77 } 78 html[data-theme="light"] .z-keyword.z-control.z-import.z-include { 79 + color: #179299; 80 + font-style: italic; 81 } 82 html[data-theme="light"] .z-storage { 83 + color: #d20f39; 84 } 85 html[data-theme="light"] .z-storage.z-type { 86 + color: #df8e1d; 87 + font-style: italic; 88 } 89 html[data-theme="light"] .z-storage.z-modifier { 90 + color: #d20f39; 91 } 92 html[data-theme="light"] .z-entity.z-name.z-namespace, 93 html[data-theme="light"] .z-meta.z-path { 94 + color: #dc8a78; 95 + font-style: italic; 96 } 97 html[data-theme="light"] .z-storage.z-type.z-class { 98 + color: #dc8a78; 99 + font-style: italic; 100 } 101 html[data-theme="light"] .z-entity.z-name.z-label { 102 + color: #1e66f5; 103 } 104 html[data-theme="light"] .z-keyword.z-declaration.z-class { 105 + color: #d20f39; 106 + font-style: italic; 107 } 108 html[data-theme="light"] .z-entity.z-name.z-class, 109 html[data-theme="light"] .z-meta.z-toc-list.z-full-identifier { 110 + color: #04a5e5; 111 } 112 html[data-theme="light"] .z-entity.z-other.z-inherited-class { 113 + color: #04a5e5; 114 + font-style: italic; 115 } 116 html[data-theme="light"] .z-entity.z-name.z-function, 117 html[data-theme="light"] .z-variable.z-function { 118 + color: #1e66f5; 119 + font-style: italic; 120 } 121 html[data-theme="light"] .z-entity.z-name.z-function.z-preprocessor { 122 + color: #d20f39; 123 } 124 html[data-theme="light"] .z-keyword.z-control.z-import { 125 + color: #d20f39; 126 } 127 html[data-theme="light"] .z-entity.z-name.z-function.z-constructor, 128 html[data-theme="light"] .z-entity.z-name.z-function.z-destructor { 129 + color: #7287fd; 130 } 131 html[data-theme="light"] .z-variable.z-parameter.z-function { 132 + color: #dc8a78; 133 + font-style: italic; 134 } 135 html[data-theme="light"] .z-keyword.z-declaration.z-function { 136 + color: #e64553; 137 + font-style: italic; 138 } 139 html[data-theme="light"] .z-support.z-function { 140 + color: #04a5e5; 141 } 142 html[data-theme="light"] .z-support.z-constant { 143 + color: #1e66f5; 144 } 145 html[data-theme="light"] .z-support.z-type, 146 html[data-theme="light"] .z-support.z-class { 147 + color: #1e66f5; 148 + font-style: italic; 149 } 150 html[data-theme="light"] .z-variable.z-function { 151 + color: #1e66f5; 152 + font-style: italic; 153 } 154 html[data-theme="light"] .z-variable.z-parameter { 155 + color: #dc8a78; 156 + font-style: italic; 157 } 158 html[data-theme="light"] .z-variable.z-other { 159 + color: #4c4f69; 160 + font-style: italic; 161 } 162 html[data-theme="light"] .z-variable.z-other.z-member { 163 + color: #dc8a78; 164 } 165 html[data-theme="light"] .z-variable.z-language { 166 + color: #179299; 167 } 168 html[data-theme="light"] .z-entity.z-name.z-tag { 169 + color: #fe640b; 170 } 171 html[data-theme="light"] .z-entity.z-other.z-attribute-name { 172 + color: #8839ef; 173 + font-style: italic; 174 } 175 html[data-theme="light"] .z-punctuation.z-definition.z-tag { 176 + color: #e64553; 177 } 178 html[data-theme="light"] .z-markup.z-underline.z-link.z-markdown { 179 + color: #dc8a78; 180 + text-decoration: underline; 181 + font-style: italic; 182 } 183 html[data-theme="light"] .z-meta.z-link.z-inline.z-description { 184 + color: #7287fd; 185 + font-weight: bold; 186 } 187 html[data-theme="light"] .z-comment.z-block.z-markdown, 188 html[data-theme="light"] .z-meta.z-code-fence, 189 html[data-theme="light"] .z-markup.z-raw.z-code-fence, 190 html[data-theme="light"] .z-markup.z-raw.z-inline { 191 + color: #179299; 192 + font-style: italic; 193 } 194 html[data-theme="light"] .z-punctuation.z-definition.z-heading, 195 html[data-theme="light"] .z-entity.z-name.z-section { 196 + color: #1e66f5; 197 + font-weight: bold; 198 } 199 html[data-theme="light"] .z-markup.z-italic { 200 + color: #e64553; 201 + font-style: italic; 202 } 203 html[data-theme="light"] .z-markup.z-bold { 204 + color: #e64553; 205 + font-weight: bold; 206 } 207 html[data-theme="light"] .z-constant.z-character.z-escape { 208 + color: #ea76cb; 209 } 210 html[data-theme="light"] 211 + .z-source.z-shell.z-bash 212 + .z-meta.z-function.z-shell 213 + .z-meta.z-compound.z-shell 214 + .z-meta.z-function-call.z-identifier.z-shell { 215 + color: #ea76cb; 216 } 217 html[data-theme="light"] .z-variable.z-language.z-shell { 218 + color: #d20f39; 219 + font-style: italic; 220 } 221 html[data-theme="light"] 222 + .z-source.z-lua 223 + .z-meta.z-function.z-lua 224 + .z-meta.z-block.z-lua 225 + .z-meta.z-mapping.z-value.z-lua 226 + .z-meta.z-mapping.z-key.z-lua 227 + .z-string.z-unquoted.z-key.z-lua { 228 + color: #7287fd; 229 + font-style: italic; 230 } 231 html[data-theme="light"] 232 + .z-source.z-lua 233 + .z-meta.z-function.z-lua 234 + .z-meta.z-block.z-lua 235 + .z-meta.z-mapping.z-key.z-lua 236 + .z-string.z-unquoted.z-key.z-lua { 237 + color: #dd7878; 238 } 239 html[data-theme="light"] .z-entity.z-name.z-constant.z-java { 240 + color: #179299; 241 } 242 html[data-theme="light"] .z-support.z-type.z-property-name.z-css { 243 + color: #dd7878; 244 + font-style: italic; 245 } 246 html[data-theme="light"] .z-support.z-constant.z-property-value.z-css { 247 + color: #4c4f69; 248 } 249 html[data-theme="light"] .z-constant.z-numeric.z-suffix.z-css, 250 html[data-theme="light"] .z-keyword.z-other.z-unit.z-css { 251 + color: #179299; 252 + font-style: italic; 253 } 254 html[data-theme="light"] .z-variable.z-other.z-custom-property.z-name.z-css, 255 html[data-theme="light"] .z-support.z-type.z-custom-property.z-name.z-css, 256 html[data-theme="light"] .z-punctuation.z-definition.z-custom-property.z-css { 257 + color: #179299; 258 } 259 html[data-theme="light"] .z-entity.z-name.z-tag.z-css { 260 + color: #7287fd; 261 } 262 html[data-theme="light"] .z-variable.z-other.z-sass { 263 + color: #179299; 264 } 265 html[data-theme="light"] .z-invalid { 266 + color: #4c4f69; 267 + background-color: #d20f39; 268 } 269 html[data-theme="light"] .z-invalid.z-deprecated { 270 + color: #4c4f69; 271 + background-color: #8839ef; 272 } 273 html[data-theme="light"] .z-meta.z-diff, 274 html[data-theme="light"] .z-meta.z-diff.z-header { 275 + color: #9ca0b0; 276 } 277 html[data-theme="light"] .z-markup.z-deleted { 278 + color: #d20f39; 279 } 280 html[data-theme="light"] .z-markup.z-inserted { 281 + color: #40a02b; 282 } 283 html[data-theme="light"] .z-markup.z-changed { 284 + color: #df8e1d; 285 } 286 html[data-theme="light"] .z-message.z-error { 287 + color: #d20f39; 288 } 289 290 /* dark */ 291 292 html[data-theme="dark"] .z-code { 293 + color: #cad3f5; 294 + background-color: #2a2e35; 295 } 296 297 html[data-theme="dark"] .z-comment { 298 + color: #6e738d; 299 + font-style: italic; 300 } 301 html[data-theme="dark"] .z-string { 302 + color: #a6da95; 303 } 304 html[data-theme="dark"] .z-string.z-regexp { 305 + color: #f5a97f; 306 } 307 html[data-theme="dark"] .z-constant.z-numeric { 308 + color: #f5a97f; 309 } 310 html[data-theme="dark"] .z-constant.z-language.z-boolean { 311 + color: #f5a97f; 312 + font-weight: bold; 313 + font-style: italic; 314 } 315 html[data-theme="dark"] .z-constant.z-language { 316 + color: #b7bdf8; 317 + font-style: italic; 318 } 319 html[data-theme="dark"] .z-support.z-function.z-builtin { 320 + color: #f5a97f; 321 + font-style: italic; 322 } 323 html[data-theme="dark"] .z-variable.z-other.z-constant { 324 + color: #f5a97f; 325 } 326 html[data-theme="dark"] .z-keyword { 327 + color: #ed8796; 328 + font-style: italic; 329 } 330 html[data-theme="dark"] .z-keyword.z-control.z-loop, 331 html[data-theme="dark"] .z-keyword.z-control.z-conditional, 332 html[data-theme="dark"] .z-keyword.z-control.z-c\+\+ { 333 + color: #c6a0f6; 334 + font-weight: bold; 335 } 336 html[data-theme="dark"] .z-keyword.z-control.z-return, 337 html[data-theme="dark"] .z-keyword.z-control.z-flow.z-return { 338 + color: #f5bde6; 339 + font-weight: bold; 340 } 341 html[data-theme="dark"] .z-support.z-type.z-exception { 342 + color: #f5a97f; 343 + font-style: italic; 344 } 345 html[data-theme="dark"] .z-keyword.z-operator, 346 html[data-theme="dark"] .z-punctuation.z-accessor { 347 + color: #91d7e3; 348 + font-weight: bold; 349 } 350 html[data-theme="dark"] .z-punctuation.z-separator { 351 + color: #8bd5ca; 352 } 353 html[data-theme="dark"] .z-punctuation.z-terminator { 354 + color: #8bd5ca; 355 } 356 html[data-theme="dark"] .z-punctuation.z-section { 357 + color: #939ab7; 358 } 359 html[data-theme="dark"] .z-keyword.z-control.z-import.z-include { 360 + color: #8bd5ca; 361 + font-style: italic; 362 } 363 html[data-theme="dark"] .z-storage { 364 + color: #ed8796; 365 } 366 html[data-theme="dark"] .z-storage.z-type { 367 + color: #eed49f; 368 + font-style: italic; 369 } 370 html[data-theme="dark"] .z-storage.z-modifier { 371 + color: #ed8796; 372 } 373 html[data-theme="dark"] .z-entity.z-name.z-namespace, 374 html[data-theme="dark"] .z-meta.z-path { 375 + color: #f4dbd6; 376 + font-style: italic; 377 } 378 html[data-theme="dark"] .z-storage.z-type.z-class { 379 + color: #f4dbd6; 380 + font-style: italic; 381 } 382 html[data-theme="dark"] .z-entity.z-name.z-label { 383 + color: #8aadf4; 384 } 385 html[data-theme="dark"] .z-keyword.z-declaration.z-class { 386 + color: #ed8796; 387 + font-style: italic; 388 } 389 html[data-theme="dark"] .z-entity.z-name.z-class, 390 html[data-theme="dark"] .z-meta.z-toc-list.z-full-identifier { 391 + color: #91d7e3; 392 } 393 html[data-theme="dark"] .z-entity.z-other.z-inherited-class { 394 + color: #91d7e3; 395 + font-style: italic; 396 } 397 html[data-theme="dark"] .z-entity.z-name.z-function, 398 html[data-theme="dark"] .z-variable.z-function { 399 + color: #8aadf4; 400 + font-style: italic; 401 } 402 html[data-theme="dark"] .z-entity.z-name.z-function.z-preprocessor { 403 + color: #ed8796; 404 } 405 html[data-theme="dark"] .z-keyword.z-control.z-import { 406 + color: #ed8796; 407 } 408 html[data-theme="dark"] .z-entity.z-name.z-function.z-constructor, 409 html[data-theme="dark"] .z-entity.z-name.z-function.z-destructor { 410 + color: #b7bdf8; 411 } 412 html[data-theme="dark"] .z-variable.z-parameter.z-function { 413 + color: #f4dbd6; 414 + font-style: italic; 415 } 416 html[data-theme="dark"] .z-keyword.z-declaration.z-function { 417 + color: #ee99a0; 418 + font-style: italic; 419 } 420 html[data-theme="dark"] .z-support.z-function { 421 + color: #91d7e3; 422 } 423 html[data-theme="dark"] .z-support.z-constant { 424 + color: #8aadf4; 425 } 426 html[data-theme="dark"] .z-support.z-type, 427 html[data-theme="dark"] .z-support.z-class { 428 + color: #8aadf4; 429 + font-style: italic; 430 } 431 html[data-theme="dark"] .z-variable.z-function { 432 + color: #8aadf4; 433 + font-style: italic; 434 } 435 html[data-theme="dark"] .z-variable.z-parameter { 436 + color: #f4dbd6; 437 + font-style: italic; 438 } 439 html[data-theme="dark"] .z-variable.z-other { 440 + color: #cad3f5; 441 + font-style: italic; 442 } 443 html[data-theme="dark"] .z-variable.z-other.z-member { 444 + color: #f4dbd6; 445 } 446 html[data-theme="dark"] .z-variable.z-language { 447 + color: #8bd5ca; 448 } 449 html[data-theme="dark"] .z-entity.z-name.z-tag { 450 + color: #f5a97f; 451 } 452 html[data-theme="dark"] .z-entity.z-other.z-attribute-name { 453 + color: #c6a0f6; 454 + font-style: italic; 455 } 456 html[data-theme="dark"] .z-punctuation.z-definition.z-tag { 457 + color: #ee99a0; 458 } 459 html[data-theme="dark"] .z-markup.z-underline.z-link.z-markdown { 460 + color: #f4dbd6; 461 + text-decoration: underline; 462 + font-style: italic; 463 } 464 html[data-theme="dark"] .z-meta.z-link.z-inline.z-description { 465 + color: #b7bdf8; 466 + font-weight: bold; 467 } 468 html[data-theme="dark"] .z-comment.z-block.z-markdown, 469 html[data-theme="dark"] .z-meta.z-code-fence, 470 html[data-theme="dark"] .z-markup.z-raw.z-code-fence, 471 html[data-theme="dark"] .z-markup.z-raw.z-inline { 472 + color: #8bd5ca; 473 + font-style: italic; 474 } 475 html[data-theme="dark"] .z-punctuation.z-definition.z-heading, 476 html[data-theme="dark"] .z-entity.z-name.z-section { 477 + color: #8aadf4; 478 + font-weight: bold; 479 } 480 html[data-theme="dark"] .z-markup.z-italic { 481 + color: #ee99a0; 482 + font-style: italic; 483 } 484 html[data-theme="dark"] .z-markup.z-bold { 485 + color: #ee99a0; 486 + font-weight: bold; 487 } 488 html[data-theme="dark"] .z-constant.z-character.z-escape { 489 + color: #f5bde6; 490 } 491 html[data-theme="dark"] 492 + .z-source.z-shell.z-bash 493 + .z-meta.z-function.z-shell 494 + .z-meta.z-compound.z-shell 495 + .z-meta.z-function-call.z-identifier.z-shell { 496 + color: #f5bde6; 497 } 498 html[data-theme="dark"] .z-variable.z-language.z-shell { 499 + color: #ed8796; 500 + font-style: italic; 501 } 502 html[data-theme="dark"] 503 + .z-source.z-lua 504 + .z-meta.z-function.z-lua 505 + .z-meta.z-block.z-lua 506 + .z-meta.z-mapping.z-value.z-lua 507 + .z-meta.z-mapping.z-key.z-lua 508 + .z-string.z-unquoted.z-key.z-lua { 509 + color: #b7bdf8; 510 + font-style: italic; 511 } 512 html[data-theme="dark"] 513 + .z-source.z-lua 514 + .z-meta.z-function.z-lua 515 + .z-meta.z-block.z-lua 516 + .z-meta.z-mapping.z-key.z-lua 517 + .z-string.z-unquoted.z-key.z-lua { 518 + color: #f0c6c6; 519 } 520 html[data-theme="dark"] .z-entity.z-name.z-constant.z-java { 521 + color: #8bd5ca; 522 } 523 html[data-theme="dark"] .z-support.z-type.z-property-name.z-css { 524 + color: #f0c6c6; 525 + font-style: italic; 526 } 527 html[data-theme="dark"] .z-support.z-constant.z-property-value.z-css { 528 + color: #cad3f5; 529 } 530 html[data-theme="dark"] .z-constant.z-numeric.z-suffix.z-css, 531 html[data-theme="dark"] .z-keyword.z-other.z-unit.z-css { 532 + color: #8bd5ca; 533 + font-style: italic; 534 } 535 html[data-theme="dark"] .z-variable.z-other.z-custom-property.z-name.z-css, 536 html[data-theme="dark"] .z-support.z-type.z-custom-property.z-name.z-css, 537 html[data-theme="dark"] .z-punctuation.z-definition.z-custom-property.z-css { 538 + color: #8bd5ca; 539 } 540 html[data-theme="dark"] .z-entity.z-name.z-tag.z-css { 541 + color: #b7bdf8; 542 } 543 html[data-theme="dark"] .z-variable.z-other.z-sass { 544 + color: #8bd5ca; 545 } 546 html[data-theme="dark"] .z-invalid { 547 + color: #cad3f5; 548 + background-color: #ed8796; 549 } 550 html[data-theme="dark"] .z-invalid.z-deprecated { 551 + color: #cad3f5; 552 + background-color: #c6a0f6; 553 } 554 html[data-theme="dark"] .z-meta.z-diff, 555 html[data-theme="dark"] .z-meta.z-diff.z-header { 556 + color: #6e738d; 557 } 558 html[data-theme="dark"] .z-markup.z-deleted { 559 + color: #ed8796; 560 } 561 html[data-theme="dark"] .z-markup.z-inserted { 562 + color: #a6da95; 563 } 564 html[data-theme="dark"] .z-markup.z-changed { 565 + color: #eed49f; 566 } 567 html[data-theme="dark"] .z-message.z-error { 568 + color: #ed8796; 569 }
+30 -25
static/js/script.js
··· 1 - const toggleButton = document.getElementById('theme-toggle'); 2 - const themeIcon = document.getElementById('theme-icon'); 3 - const themeSound = document.getElementById('theme-sound'); 4 5 // Function to update the theme icon based on the current theme 6 const updateThemeIcon = (isDarkMode) => { 7 - const themeMode = isDarkMode ? 'darkMode' : 'lightMode'; 8 - const iconPath = themeIcon.querySelector('use').getAttribute('href').replace(/#.*$/, `#${themeMode}`); 9 - themeIcon.querySelector('use').setAttribute('href', iconPath); 10 }; 11 12 // Function to update the theme based on the current mode 13 const updateTheme = (isDarkMode) => { 14 - const theme = isDarkMode ? 'dark' : 'light'; 15 - document.documentElement.setAttribute('data-theme', theme); 16 - updateThemeIcon(isDarkMode); 17 }; 18 19 // Function to toggle the theme 20 const toggleTheme = () => { 21 - const isDarkMode = toggleButton.checked; 22 - updateTheme(isDarkMode); 23 - themeSound.play(); 24 - localStorage.setItem('theme', isDarkMode ? 'dark' : 'light'); 25 26 - // Add transition class to body for smooth transition 27 - document.body.classList.add('theme-transition'); 28 - setTimeout(() => { 29 - document.body.classList.remove('theme-transition'); 30 - }, 300); 31 }; 32 33 // Event listener for theme toggle 34 - toggleButton.addEventListener('change', toggleTheme); 35 36 // Function to initialize the theme based on the stored preference 37 const initializeTheme = () => { 38 - const storedTheme = localStorage.getItem('theme'); 39 - const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; 40 - const isDarkMode = storedTheme === 'dark' || (!storedTheme && prefersDark); 41 - toggleButton.checked = isDarkMode; 42 - updateTheme(isDarkMode); 43 }; 44 45 // Initialize the theme 46 initializeTheme(); 47 48 // Listen for changes in system preference 49 - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', initializeTheme);
··· 1 + const toggleButton = document.getElementById("theme-toggle"); 2 + const themeIcon = document.getElementById("theme-icon"); 3 + const themeSound = document.getElementById("theme-sound"); 4 5 // Function to update the theme icon based on the current theme 6 const updateThemeIcon = (isDarkMode) => { 7 + const themeMode = isDarkMode ? "darkMode" : "lightMode"; 8 + const iconPath = themeIcon 9 + .querySelector("use") 10 + .getAttribute("href") 11 + .replace(/#.*$/, `#${themeMode}`); 12 + themeIcon.querySelector("use").setAttribute("href", iconPath); 13 }; 14 15 // Function to update the theme based on the current mode 16 const updateTheme = (isDarkMode) => { 17 + const theme = isDarkMode ? "dark" : "light"; 18 + document.documentElement.setAttribute("data-theme", theme); 19 + updateThemeIcon(isDarkMode); 20 }; 21 22 // Function to toggle the theme 23 const toggleTheme = () => { 24 + const isDarkMode = toggleButton.checked; 25 + updateTheme(isDarkMode); 26 + themeSound.play(); 27 + localStorage.setItem("theme", isDarkMode ? "dark" : "light"); 28 29 + // Add transition class to body for smooth transition 30 + document.body.classList.add("theme-transition"); 31 + setTimeout(() => { 32 + document.body.classList.remove("theme-transition"); 33 + }, 300); 34 }; 35 36 // Event listener for theme toggle 37 + toggleButton.addEventListener("change", toggleTheme); 38 39 // Function to initialize the theme based on the stored preference 40 const initializeTheme = () => { 41 + const storedTheme = localStorage.getItem("theme"); 42 + const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; 43 + const isDarkMode = storedTheme === "dark" || (!storedTheme && prefersDark); 44 + toggleButton.checked = isDarkMode; 45 + updateTheme(isDarkMode); 46 }; 47 48 // Initialize the theme 49 initializeTheme(); 50 51 // Listen for changes in system preference 52 + window 53 + .matchMedia("(prefers-color-scheme: dark)") 54 + .addEventListener("change", initializeTheme);
+19 -1
static/site.webmanifest
··· 1 - {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
··· 1 + { 2 + "name": "", 3 + "short_name": "", 4 + "icons": [ 5 + { 6 + "src": "/android-chrome-192x192.png", 7 + "sizes": "192x192", 8 + "type": "image/png" 9 + }, 10 + { 11 + "src": "/android-chrome-512x512.png", 12 + "sizes": "512x512", 13 + "type": "image/png" 14 + } 15 + ], 16 + "theme_color": "#ffffff", 17 + "background_color": "#ffffff", 18 + "display": "standalone" 19 + }
+13 -13
tools/package.json
··· 1 { 2 - "name": "zera", 3 - "module": "index.ts", 4 - "type": "module", 5 - "scripts": { 6 - "gen": "bun run tools/genOG.ts" 7 - }, 8 - "devDependencies": { 9 - "@types/bun": "latest", 10 - "puppeteer": "^23.6.0" 11 - }, 12 - "peerDependencies": { 13 - "typescript": "^5.0.0" 14 - } 15 }
··· 1 { 2 + "name": "zera", 3 + "module": "index.ts", 4 + "type": "module", 5 + "scripts": { 6 + "gen": "bun run tools/genOG.ts" 7 + }, 8 + "devDependencies": { 9 + "@types/bun": "latest", 10 + "puppeteer": "^23.6.0" 11 + }, 12 + "peerDependencies": { 13 + "typescript": "^5.0.0" 14 + } 15 }
+22 -22
tsconfig.json
··· 1 { 2 - "compilerOptions": { 3 - // Enable latest features 4 - "lib": ["ESNext", "DOM"], 5 - "target": "ESNext", 6 - "module": "ESNext", 7 - "moduleDetection": "force", 8 - "jsx": "react-jsx", 9 - "allowJs": true, 10 11 - // Bundler mode 12 - "moduleResolution": "bundler", 13 - "allowImportingTsExtensions": true, 14 - "verbatimModuleSyntax": true, 15 - "noEmit": true, 16 17 - // Best practices 18 - "strict": true, 19 - "skipLibCheck": true, 20 - "noFallthroughCasesInSwitch": true, 21 22 - // Some stricter flags (disabled by default) 23 - "noUnusedLocals": false, 24 - "noUnusedParameters": false, 25 - "noPropertyAccessFromIndexSignature": false 26 - } 27 }
··· 1 { 2 + "compilerOptions": { 3 + // Enable latest features 4 + "lib": ["ESNext", "DOM"], 5 + "target": "ESNext", 6 + "module": "ESNext", 7 + "moduleDetection": "force", 8 + "jsx": "react-jsx", 9 + "allowJs": true, 10 11 + // Bundler mode 12 + "moduleResolution": "bundler", 13 + "allowImportingTsExtensions": true, 14 + "verbatimModuleSyntax": true, 15 + "noEmit": true, 16 17 + // Best practices 18 + "strict": true, 19 + "skipLibCheck": true, 20 + "noFallthroughCasesInSwitch": true, 21 22 + // Some stricter flags (disabled by default) 23 + "noUnusedLocals": false, 24 + "noUnusedParameters": false, 25 + "noPropertyAccessFromIndexSignature": false 26 + } 27 }