commit 5c9948162a06030e6e3933d57e03b14f17248ce9 Author: Goldenkrew3000 Date: Fri Apr 17 14:52:23 2026 +1000 Added current source code diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 0000000..7711b0e Binary files /dev/null and b/assets/.DS_Store differ diff --git a/assets/8831/.DS_Store b/assets/8831/.DS_Store new file mode 100644 index 0000000..06a65f3 Binary files /dev/null and b/assets/8831/.DS_Store differ diff --git a/assets/8831/39C3_88x31.gif b/assets/8831/39C3_88x31.gif new file mode 100644 index 0000000..d07f7d9 Binary files /dev/null and b/assets/8831/39C3_88x31.gif differ diff --git a/assets/8831/arch.gif b/assets/8831/arch.gif new file mode 100644 index 0000000..6fcc440 Binary files /dev/null and b/assets/8831/arch.gif differ diff --git a/assets/8831/coreboot.png b/assets/8831/coreboot.png new file mode 100644 index 0000000..5d99698 Binary files /dev/null and b/assets/8831/coreboot.png differ diff --git a/assets/8831/e2v2-88x31.gif b/assets/8831/e2v2-88x31.gif new file mode 100644 index 0000000..4c965dd Binary files /dev/null and b/assets/8831/e2v2-88x31.gif differ diff --git a/assets/8831/gay.gif b/assets/8831/gay.gif new file mode 100644 index 0000000..7bfa068 Binary files /dev/null and b/assets/8831/gay.gif differ diff --git a/assets/8831/grapheneos.gif b/assets/8831/grapheneos.gif new file mode 100644 index 0000000..536b755 Binary files /dev/null and b/assets/8831/grapheneos.gif differ diff --git a/assets/8831/iamverygay.png b/assets/8831/iamverygay.png new file mode 100644 index 0000000..74e1158 Binary files /dev/null and b/assets/8831/iamverygay.png differ diff --git a/assets/8831/iso8601.jpg b/assets/8831/iso8601.jpg new file mode 100644 index 0000000..66e99c2 Binary files /dev/null and b/assets/8831/iso8601.jpg differ diff --git a/assets/8831/lain.gif b/assets/8831/lain.gif new file mode 100644 index 0000000..a742b7a Binary files /dev/null and b/assets/8831/lain.gif differ diff --git a/assets/8831/madeonlinux.png b/assets/8831/madeonlinux.png new file mode 100644 index 0000000..f756052 Binary files /dev/null and b/assets/8831/madeonlinux.png differ diff --git a/assets/8831/maia.crimew.gay.png b/assets/8831/maia.crimew.gay.png new file mode 100644 index 0000000..3bcbd5c Binary files /dev/null and b/assets/8831/maia.crimew.gay.png differ diff --git a/assets/8831/no-ai.svg b/assets/8831/no-ai.svg new file mode 100644 index 0000000..1b90fdb --- /dev/null +++ b/assets/8831/no-ai.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/8831/noaa.gif b/assets/8831/noaa.gif new file mode 100644 index 0000000..b57f660 Binary files /dev/null and b/assets/8831/noaa.gif differ diff --git a/assets/8831/powered-by-debian.gif b/assets/8831/powered-by-debian.gif new file mode 100644 index 0000000..1f617c8 Binary files /dev/null and b/assets/8831/powered-by-debian.gif differ diff --git a/assets/8831/sarascafe.gif b/assets/8831/sarascafe.gif new file mode 100644 index 0000000..6695b95 Binary files /dev/null and b/assets/8831/sarascafe.gif differ diff --git a/assets/8831/taegukgi-8831.png b/assets/8831/taegukgi-8831.png new file mode 100644 index 0000000..3e70165 Binary files /dev/null and b/assets/8831/taegukgi-8831.png differ diff --git a/assets/8831/transnow.gif b/assets/8831/transnow.gif new file mode 100644 index 0000000..7f705aa Binary files /dev/null and b/assets/8831/transnow.gif differ diff --git a/assets/Web437_DOS-V_re_JPN16.woff b/assets/Web437_DOS-V_re_JPN16.woff new file mode 100644 index 0000000..6c91b6e Binary files /dev/null and b/assets/Web437_DOS-V_re_JPN16.woff differ diff --git a/assets/astro.svg b/assets/astro.svg new file mode 100644 index 0000000..8cf8fb0 --- /dev/null +++ b/assets/astro.svg @@ -0,0 +1 @@ + diff --git a/assets/bnuuycake.png b/assets/bnuuycake.png new file mode 100644 index 0000000..3f96b44 Binary files /dev/null and b/assets/bnuuycake.png differ diff --git a/assets/icons/sns/discord-icon-svgrepo-com.svg b/assets/icons/sns/discord-icon-svgrepo-com.svg new file mode 100644 index 0000000..c03e8e1 --- /dev/null +++ b/assets/icons/sns/discord-icon-svgrepo-com.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/assets/icons/sns/email-outline.svg b/assets/icons/sns/email-outline.svg new file mode 100644 index 0000000..9185ad5 --- /dev/null +++ b/assets/icons/sns/email-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/sns/twitter.svg b/assets/icons/sns/twitter.svg new file mode 100644 index 0000000..3319911 --- /dev/null +++ b/assets/icons/sns/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/clock-outline.svg b/assets/icons/weather/clock-outline.svg new file mode 100644 index 0000000..74de2f3 --- /dev/null +++ b/assets/icons/weather/clock-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/help-circle-outline.svg b/assets/icons/weather/help-circle-outline.svg new file mode 100644 index 0000000..df0b975 --- /dev/null +++ b/assets/icons/weather/help-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/sine-wave.svg b/assets/icons/weather/sine-wave.svg new file mode 100644 index 0000000..28860f3 --- /dev/null +++ b/assets/icons/weather/sine-wave.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/thermometer.svg b/assets/icons/weather/thermometer.svg new file mode 100644 index 0000000..068e74b --- /dev/null +++ b/assets/icons/weather/thermometer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/water-outline.svg b/assets/icons/weather/water-outline.svg new file mode 100644 index 0000000..82b0ee7 --- /dev/null +++ b/assets/icons/weather/water-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/weather/white-balance-sunny.svg b/assets/icons/weather/white-balance-sunny.svg new file mode 100644 index 0000000..1a9d4cb --- /dev/null +++ b/assets/icons/weather/white-balance-sunny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/lain-dance-full.gif b/assets/lain-dance-full.gif new file mode 100644 index 0000000..3e9b331 Binary files /dev/null and b/assets/lain-dance-full.gif differ diff --git a/assets/lain-dance.gif b/assets/lain-dance.gif new file mode 100644 index 0000000..a727a7c Binary files /dev/null and b/assets/lain-dance.gif differ diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..266cf35 Binary files /dev/null and b/assets/logo.png differ diff --git a/assets/oneko.js b/assets/oneko.js new file mode 100644 index 0000000..3829999 --- /dev/null +++ b/assets/oneko.js @@ -0,0 +1,248 @@ +// oneko.js: https://github.com/adryd325/oneko.js + +(function oneko() { + const isReducedMotion = + window.matchMedia(`(prefers-reduced-motion: reduce)`) === true || + window.matchMedia(`(prefers-reduced-motion: reduce)`).matches === true; + + if (isReducedMotion) return; + + const nekoEl = document.createElement("div"); + + let nekoPosX = 32; + let nekoPosY = 32; + + let mousePosX = 0; + let mousePosY = 0; + + let frameCount = 0; + let idleTime = 0; + let idleAnimation = null; + let idleAnimationFrame = 0; + + const nekoSpeed = 10; + const spriteSets = { + idle: [[0, 0]], + alert: [[0, 0]], + scratchSelf: [ + [0, 0], + [0, 0], + [0, 0], + ], + scratchWallN: [ + [0, 0], + [0, 0], + ], + scratchWallS: [ + [0, 0], + [0, 0], + ], + scratchWallE: [ + [0, 0], + [0, 0], + ], + scratchWallW: [ + [0, 0], + [0, 0], + ], + tired: [[0, 0]], + sleeping: [ + [0, 0], + [0, 0], + ], + N: [ + [0, 0], + [0, 0], + ], + NE: [ + [0, 0], + [0, 0], + ], + E: [ + [0, 0], + [0, 0], + ], + SE: [ + [0, 0], + [0, 0], + ], + S: [ + [0, 0], + [0, 0], + ], + SW: [ + [0, 0], + [0, 0], + ], + W: [ + [0, 0], + [0, 0], + ], + NW: [ + [0, 0], + [0, 0], + ], + }; + + function init() { + nekoEl.id = "oneko"; + nekoEl.ariaHidden = true; + //nekoEl.style.width = "32px"; + //nekoEl.style.height = "32px"; + nekoEl.style.position = "fixed"; + nekoEl.style.pointerEvents = "none"; + nekoEl.style.imageRendering = "pixelated"; + //nekoEl.style.left = `${nekoPosX - 16}px`; + //nekoEl.style.top = `${nekoPosY - 16}px`; + nekoEl.style.zIndex = 2147483647; + + nekoEl.style.width = "50px"; + nekoEl.style.height = "45px"; + nekoEl.style.left = `${nekoPosX - 16}px`; + nekoEl.style.top = `${nekoPosY - 16}px`; + //nekoEl.style.left = `0px`; + //nekoEl.style.top = `0px`; + + //let nekoFile = "/public/oneko.gif" + let nekoFile = "/assets/lain-dance.gif" + const curScript = document.currentScript + if (curScript && curScript.dataset.cat) { + nekoFile = curScript.dataset.cat + } + nekoEl.style.backgroundImage = `url(${nekoFile})`; + + document.body.appendChild(nekoEl); + + document.addEventListener("mousemove", function (event) { + mousePosX = event.clientX; + mousePosY = event.clientY; + }); + + window.requestAnimationFrame(onAnimationFrame); + } + + let lastFrameTimestamp; + + function onAnimationFrame(timestamp) { + // Stops execution if the neko element is removed from DOM + if (!nekoEl.isConnected) { + return; + } + if (!lastFrameTimestamp) { + lastFrameTimestamp = timestamp; + } + if (timestamp - lastFrameTimestamp > 100) { + lastFrameTimestamp = timestamp + frame() + } + window.requestAnimationFrame(onAnimationFrame); + } + + function setSprite(name, frame) { + const sprite = spriteSets[name][frame % spriteSets[name].length]; + nekoEl.style.backgroundPosition = `${sprite[0] * 32}px ${sprite[1] * 32}px`; + } + + function resetIdleAnimation() { + idleAnimation = null; + idleAnimationFrame = 0; + } + + function idle() { + idleTime += 1; + + // every ~ 20 seconds + if ( + idleTime > 10 && + Math.floor(Math.random() * 200) == 0 && + idleAnimation == null + ) { + let avalibleIdleAnimations = ["sleeping", "scratchSelf"]; + if (nekoPosX < 32) { + avalibleIdleAnimations.push("scratchWallW"); + } + if (nekoPosY < 32) { + avalibleIdleAnimations.push("scratchWallN"); + } + if (nekoPosX > window.innerWidth - 32) { + avalibleIdleAnimations.push("scratchWallE"); + } + if (nekoPosY > window.innerHeight - 32) { + avalibleIdleAnimations.push("scratchWallS"); + } + idleAnimation = + avalibleIdleAnimations[ + Math.floor(Math.random() * avalibleIdleAnimations.length) + ]; + } + + switch (idleAnimation) { + case "sleeping": + if (idleAnimationFrame < 8) { + setSprite("tired", 0); + break; + } + setSprite("sleeping", Math.floor(idleAnimationFrame / 4)); + if (idleAnimationFrame > 192) { + resetIdleAnimation(); + } + break; + case "scratchWallN": + case "scratchWallS": + case "scratchWallE": + case "scratchWallW": + case "scratchSelf": + setSprite(idleAnimation, idleAnimationFrame); + if (idleAnimationFrame > 9) { + resetIdleAnimation(); + } + break; + default: + setSprite("idle", 0); + return; + } + idleAnimationFrame += 1; + } + + function frame() { + frameCount += 1; + const diffX = nekoPosX - mousePosX; + const diffY = nekoPosY - mousePosY; + const distance = Math.sqrt(diffX ** 2 + diffY ** 2); + + if (distance < nekoSpeed || distance < 48) { + idle(); + return; + } + + idleAnimation = null; + idleAnimationFrame = 0; + + if (idleTime > 1) { + setSprite("alert", 0); + // count down after being alerted before moving + idleTime = Math.min(idleTime, 7); + idleTime -= 1; + return; + } + + let direction; + direction = diffY / distance > 0.5 ? "N" : ""; + direction += diffY / distance < -0.5 ? "S" : ""; + direction += diffX / distance > 0.5 ? "W" : ""; + direction += diffX / distance < -0.5 ? "E" : ""; + setSprite(direction, frameCount); + + nekoPosX -= (diffX / distance) * nekoSpeed; + nekoPosY -= (diffY / distance) * nekoSpeed; + + nekoPosX = Math.min(Math.max(16, nekoPosX), window.innerWidth - 16); + nekoPosY = Math.min(Math.max(16, nekoPosY), window.innerHeight - 16); + + nekoEl.style.left = `${nekoPosX - 16}px`; + nekoEl.style.top = `${nekoPosY - 16}px`; + } + + init(); +})(); + diff --git a/assets/star_background.gif b/assets/star_background.gif new file mode 100644 index 0000000..9dcc1a8 Binary files /dev/null and b/assets/star_background.gif differ diff --git a/assets/star_bg_25speed.gif b/assets/star_bg_25speed.gif new file mode 100644 index 0000000..d69e019 Binary files /dev/null and b/assets/star_bg_25speed.gif differ diff --git a/assets/styles.css b/assets/styles.css new file mode 100644 index 0000000..6f25d9f --- /dev/null +++ b/assets/styles.css @@ -0,0 +1,4 @@ +/* styles.css */ +p { + margin-bottom: 0; /* Remove default bottom margin from

elements */ +} \ No newline at end of file diff --git a/assets/taegukgi/GPLv3_Logo.svg.png b/assets/taegukgi/GPLv3_Logo.svg.png new file mode 100644 index 0000000..2a17e00 Binary files /dev/null and b/assets/taegukgi/GPLv3_Logo.svg.png differ diff --git a/assets/taegukgi/Taegukgi-8831.png b/assets/taegukgi/Taegukgi-8831.png new file mode 100644 index 0000000..3e70165 Binary files /dev/null and b/assets/taegukgi/Taegukgi-8831.png differ diff --git a/assets/taegukgi/Taegukgi-Colors.png b/assets/taegukgi/Taegukgi-Colors.png new file mode 100644 index 0000000..b453e17 Binary files /dev/null and b/assets/taegukgi/Taegukgi-Colors.png differ diff --git a/assets/taegukgi/Taegukgi-YinYang.png b/assets/taegukgi/Taegukgi-YinYang.png new file mode 100644 index 0000000..290ed96 Binary files /dev/null and b/assets/taegukgi/Taegukgi-YinYang.png differ diff --git a/assets/weather/sunny-4x.png b/assets/weather/sunny-4x.png new file mode 100644 index 0000000..4d59679 Binary files /dev/null and b/assets/weather/sunny-4x.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..eda81bf --- /dev/null +++ b/index.html @@ -0,0 +1,412 @@ + + + + + + Hojuix + + + + + + + + +

+ + + + + + + + + + + + + + + +
+
+

+ welcome :3
+ Hello, i'm Goldenkrew3000, and welcome to my website!
+ Some facts about me: +

+ +
    +
  • +

    + I am 21 +

    +
  • +
  • +

    + I live in Queensland, Australia (unfortunately) +

    +
  • +
  • +

    + My native language is English, and I know a little Korean +

    +
  • +
  • +

    + My primary programming language is C +

    +
  • +
  • +

    + I love cooking/baking, even if I don't do it too often +

    +
  • +
+ +

+ If you want to contact me, you can at: +

+ +
    +
  • +

    Twitter

    +
  • +
  • +

    Discord

    +
  • +
  • +

    Telegram

    +
  • +
  • +

    Signal

    +
  • +
+ +

+ On the projects panel, you can find multiple of my projects (Both completed + and in-progress). If the link is red, it means that the page has not yet been + created.
+ EDIT: I have not had much time lately, and the SeaBIOS Fork page is also incomplete. It's in the middle of rewriting so sections are duplicated. Don't bother at this time basically. +

+
+
+ + + + +
+ + + + + + + + + + diff --git a/pages/index.html b/pages/index.html new file mode 100644 index 0000000..88cd665 --- /dev/null +++ b/pages/index.html @@ -0,0 +1,9 @@ + + + + Hojuix + + + Hojuix Homepage + + diff --git a/pages/project_ossp/index.html b/pages/project_ossp/index.html new file mode 100644 index 0000000..db16219 --- /dev/null +++ b/pages/project_ossp/index.html @@ -0,0 +1,4 @@ + + + / + diff --git a/pages/project_seabios/index.html b/pages/project_seabios/index.html new file mode 100644 index 0000000..9d49ba9 --- /dev/null +++ b/pages/project_seabios/index.html @@ -0,0 +1,211 @@ + + + + + + Hojuix + + + + + +
+ + + + + +
+
+ +

+ SeaBIOS Fork +


+ +

+ This is basically some notes on my personal fork of SeaBIOS, along with explanations + on certain design choices I made. +


+ +

+ + General information + +

+ +

+ Please keep in mind that this is my personal fork of SeaBIOS, and is not intended + for other people to use.
+ Although, if you so choose to, I am not going to stop you ;)
+ Also, this SeaBIOS fork is both intended to, and has only been tested in use as + a payload for Coreboot (QEMU x86_64, Thinkpad T460s).
+ If you are interested in either using this, or just want to see the commits/code, + it is located + + here (clickable). +
+ +

+ +
    +
  • +

    + + Change 1 - Security through Obscurity + +

    +
  • +

    + Now, before you even think it: Yes, I know security through obscurity is + objectively a terrible method if done alone.
    + This change involves two subchanges, which are configurable rebranding + and hiding the boot menu key respectively.
    + +

      + +
    • +

      + + Configurable Rebranding + +

      +
    • +

      + All SeaBIOS branding can be changed at compile time using the precompiler + to use custom branding strings defined in the configuration as to hide + what the actual bootloader is. Eventually, I want to have this change to + the extent that a theoretical attacker could pull the binary, pull every + string from it, and find nothing that is identifiable as SeaBIOS. +

      + +
    • +

      + + Hiding the boot menu key + +

      +
    • +

      + When SeaBIOS reaches to the boot menu, a message is displayed to press + a key (By default, ESC) to enter the boot menu. This change allows + changing both the boot key and boot menu message from the configuration + at compile time. This is not extremely helpful in it's current state, as it + does not greatly increase security as a theoretical attacker could just + spam every key on the keyboard until success. Although this could be + changed in the future to potentially require a key combination instead + (or even a password), greatly increasing the difficulty of booting + potentially malicious boot media. +

      +
    +

    + +
    + +
  • +

    + + Change 2 - Configurable Pre-Delay and the removal of the native bootsplash + implementation + +

    +
  • +

    + First, I removed SeaBIOS's native implementation for displaying a bootsplash image, + as I could not get it to function.
    + I also figured that the less code running, the better.
    + Although, I still wanted a bootsplash, which leads me into my second point.
    + I added a configurable pre-delay that delays SeaBIOS's clearing of the framebuffer + by a predetermined amount of milliseconds.
    + This allows a set amount of time for Coreboot's bootsplash implementation to + display a boot image before displaying the boot manager. + + + So, I removed SeaBIOS's native implementation for displaying a bootsplash image, + as I could not get it to function (Probably due to my inability to get the + original configuration method to work, as talked about in Change 4). Although, I + still wanted a bootsplash, and Coreboot's native implementation worked really well. + I also removed SeaBIOS's implementation to remove the possibility that at some point + on some random firmware revision that it would just start working, and I would + end up with two bootsplash sequences. + + + Now, this introduces an issue: SeaBIOS doesn't have any method to play nicely + with Coreboot's bootsplash. So to solve this, I have added a pre-delay option + into SeaBIOS's configuration to allow the user to set a variable delay in + milliseconds just before SeaBIOS clears the framebuffer, allowing time for + Coreboot's bootsplash to display. +

    + +
    + +
  • +

    + + Change 3 - TPM support removed + +

    +
  • +

    + This might seem like a weird change, even more so considering that I live in + a country that doesn't restrict the use of TPMs (Currently, anyway). + Personally, I believe that all highly regarded secrets (Encryption keys, etc) + should be held either solely in your brain, or physically written down in + an encoded form. The TPM functionality in SeaBIOS contains a non-inconsequential + amount of code, that while it probably doesn't contain exploits, I don't use + it so I might as well remove it to lower the risk anyway. +

    + +
    + +
  • +

    + + Change 4 - New configuration scheme + +

    +
  • +

    + This is by far the largest change in this fork.
    + Instead of SeaBIOS being configured through a file-based scheme from CBFS, + it is now configured in a header file before compilation.
    + I did this because personally I found configuring SeaBIOS to be extremely + confusing, and I couldn't even get it to work properly.
    + The new configuration file is in src/rf_config.h.
    + Now, you might ask, why rf_config.h. Well, it's name comes from the previous + functions used to fetch configuration values, which were romfile_*().
    +

    +
+ +
+
+ + +
+

+ Document version 1 +

+

+ Copyright (C) Goldenkrew3000 2026 +

+

+ Last edited 2026/02/21 +

+
+ +
+ + diff --git a/pages/recipe_scuffed_jjajangmyeon/index.html b/pages/recipe_scuffed_jjajangmyeon/index.html new file mode 100644 index 0000000..e69de29 diff --git a/pages/recipe_scuffed_jjajangmyeon/index_ko.html b/pages/recipe_scuffed_jjajangmyeon/index_ko.html new file mode 100644 index 0000000..e69de29 diff --git a/public/NanumSquareRoundR.woff2 b/public/NanumSquareRoundR.woff2 new file mode 100644 index 0000000..351340b Binary files /dev/null and b/public/NanumSquareRoundR.woff2 differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..f157bd1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/public/oneko.gif b/public/oneko.gif new file mode 100644 index 0000000..a009c2c Binary files /dev/null and b/public/oneko.gif differ diff --git a/style.css b/style.css new file mode 100644 index 0000000..d5c2398 --- /dev/null +++ b/style.css @@ -0,0 +1,69 @@ +.mainBox { + /*width: 1200px;*/ + max-width: 100%; +} + +.innerBox { + max-width: 100%; + max-height: 100%; + vertical-align: baseline; +} + +.sidebar { + width: 3000px; + vertical-align: baseline; /* Align to top of box */ +} + +.contentBox { + vertical-align: baseline; + padding: 10px; /* Internal padding */ + margin-bottom: 4px; + border: 2px solid #828282; + border-radius: 10px; +} + +.navbar { +} + +p, li { + color: white; + margin: 0; /* Not sure where the margining issue is coming from, and it only affects

*/ +} + +a { + text-decoration: none; /* Hide underlines on */ + color: white; +} + + + +/* (E)ighty (E)ight (T)hirty (O)ne (88x31) footer */ +.eeto-footer { + width: 800px; + margin-top: 10px; + image-rendering: pixelated; + image-rendering: crisp-edges; +} + +/* Background */ +body { + /* Not sure whether I like the repeating background or not */ + /* They both look so good ㅠㅠ */ + background-image: url("./assets/star_bg_25speed.gif"); + /* background-repeat: no-repeat; */ + /* background-size: cover; */ + /* background-position: center; */ + + /* Make background not blurry */ + image-rendering: pixelated; + image-rendering: -webkit-optimize-contrast; + image-rendering: crisp-edges; + + /* Add contrast between the background and foreground to make text more legible */ + background-color: rgba(0, 0, 0, 0.7); + background-blend-mode: darken; +} + +.linknotvalid { + color: red; +}