From 068e5fc397b2dc2a5c77687577e0c29c97b4a422 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sat, 10 Oct 2026 02:41:26 +0300 Subject: Saving before stuff goes bad --- ...2026-02-02-hytale-modding-my-honest-concerns.md | 156 ++ blogs/hytale-modding-my-honest-concerns.md | 158 -- go.mod | 10 +- go.sum | 26 + public/footnotes.js | 58 +- public/main.css | 72 - public/style.css | 96 +- public/styles/fonts/Inter/Inter-Black.woff2 | Bin 0 -> 111668 bytes public/styles/fonts/Inter/Inter-BlackItalic.woff2 | Bin 0 -> 118420 bytes public/styles/fonts/Inter/Inter-Bold.woff2 | Bin 0 -> 114840 bytes public/styles/fonts/Inter/Inter-BoldItalic.woff2 | Bin 0 -> 121500 bytes public/styles/fonts/Inter/Inter-ExtraBold.woff2 | Bin 0 -> 114856 bytes .../styles/fonts/Inter/Inter-ExtraBoldItalic.woff2 | Bin 0 -> 121516 bytes public/styles/fonts/Inter/Inter-ExtraLight.woff2 | Bin 0 -> 112728 bytes .../fonts/Inter/Inter-ExtraLightItalic.woff2 | Bin 0 -> 119320 bytes public/styles/fonts/Inter/Inter-Italic.woff2 | Bin 0 -> 117700 bytes public/styles/fonts/Inter/Inter-Light.woff2 | Bin 0 -> 112592 bytes public/styles/fonts/Inter/Inter-LightItalic.woff2 | Bin 0 -> 119608 bytes public/styles/fonts/Inter/Inter-Medium.woff2 | Bin 0 -> 114348 bytes public/styles/fonts/Inter/Inter-MediumItalic.woff2 | Bin 0 -> 120784 bytes public/styles/fonts/Inter/Inter-Regular.woff2 | Bin 0 -> 111268 bytes public/styles/fonts/Inter/Inter-SemiBold.woff2 | Bin 0 -> 114812 bytes .../styles/fonts/Inter/Inter-SemiBoldItalic.woff2 | Bin 0 -> 121416 bytes public/styles/fonts/Inter/Inter-Thin.woff2 | Bin 0 -> 109548 bytes public/styles/fonts/Inter/Inter-ThinItalic.woff2 | Bin 0 -> 116880 bytes public/styles/fonts/Inter/InterDisplay-Black.woff2 | Bin 0 -> 110308 bytes .../fonts/Inter/InterDisplay-BlackItalic.woff2 | Bin 0 -> 116820 bytes public/styles/fonts/Inter/InterDisplay-Bold.woff2 | Bin 0 -> 113556 bytes .../fonts/Inter/InterDisplay-BoldItalic.woff2 | Bin 0 -> 120432 bytes .../fonts/Inter/InterDisplay-ExtraBold.woff2 | Bin 0 -> 113636 bytes .../fonts/Inter/InterDisplay-ExtraBoldItalic.woff2 | Bin 0 -> 120712 bytes .../fonts/Inter/InterDisplay-ExtraLight.woff2 | Bin 0 -> 113108 bytes .../Inter/InterDisplay-ExtraLightItalic.woff2 | Bin 0 -> 120124 bytes .../styles/fonts/Inter/InterDisplay-Italic.woff2 | Bin 0 -> 116988 bytes public/styles/fonts/Inter/InterDisplay-Light.woff2 | Bin 0 -> 112976 bytes .../fonts/Inter/InterDisplay-LightItalic.woff2 | Bin 0 -> 119692 bytes .../styles/fonts/Inter/InterDisplay-Medium.woff2 | Bin 0 -> 113476 bytes .../fonts/Inter/InterDisplay-MediumItalic.woff2 | Bin 0 -> 120560 bytes .../styles/fonts/Inter/InterDisplay-Regular.woff2 | Bin 0 -> 108948 bytes .../styles/fonts/Inter/InterDisplay-SemiBold.woff2 | Bin 0 -> 113772 bytes .../fonts/Inter/InterDisplay-SemiBoldItalic.woff2 | Bin 0 -> 120468 bytes public/styles/fonts/Inter/InterDisplay-Thin.woff2 | Bin 0 -> 108820 bytes .../fonts/Inter/InterDisplay-ThinItalic.woff2 | Bin 0 -> 116040 bytes .../styles/fonts/Inter/InterVariable-Italic.woff2 | Bin 0 -> 387976 bytes public/styles/fonts/Inter/InterVariable.woff2 | Bin 0 -> 352240 bytes public/styles/fonts/Inter/inter.css | 148 ++ public/styles/fonts/JetBrainsMono.css | 36 +- public/styles/fonts/Monocraft.css | 36 +- public/styles/main.css | 262 ++ public/styles/style.css | 2668 ++++++++++++++++++++ public/styles/terminal.css | 71 - run.sh | 2 +- website.go | 61 +- website.templ | 24 +- website_templ.go | 1172 ++++----- 55 files changed, 4034 insertions(+), 1022 deletions(-) create mode 100644 blogs/2026-02-02-hytale-modding-my-honest-concerns.md delete mode 100644 blogs/hytale-modding-my-honest-concerns.md delete mode 100644 public/main.css create mode 100644 public/styles/fonts/Inter/Inter-Black.woff2 create mode 100644 public/styles/fonts/Inter/Inter-BlackItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Bold.woff2 create mode 100644 public/styles/fonts/Inter/Inter-BoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-ExtraBold.woff2 create mode 100644 public/styles/fonts/Inter/Inter-ExtraBoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-ExtraLight.woff2 create mode 100644 public/styles/fonts/Inter/Inter-ExtraLightItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Italic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Light.woff2 create mode 100644 public/styles/fonts/Inter/Inter-LightItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Medium.woff2 create mode 100644 public/styles/fonts/Inter/Inter-MediumItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Regular.woff2 create mode 100644 public/styles/fonts/Inter/Inter-SemiBold.woff2 create mode 100644 public/styles/fonts/Inter/Inter-SemiBoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/Inter-Thin.woff2 create mode 100644 public/styles/fonts/Inter/Inter-ThinItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Black.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-BlackItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Bold.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-BoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-ExtraBold.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-ExtraBoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-ExtraLight.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-ExtraLightItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Italic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Light.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-LightItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Medium.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-MediumItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Regular.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-SemiBold.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-SemiBoldItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-Thin.woff2 create mode 100644 public/styles/fonts/Inter/InterDisplay-ThinItalic.woff2 create mode 100644 public/styles/fonts/Inter/InterVariable-Italic.woff2 create mode 100644 public/styles/fonts/Inter/InterVariable.woff2 create mode 100644 public/styles/fonts/Inter/inter.css create mode 100644 public/styles/main.css create mode 100644 public/styles/style.css delete mode 100644 public/styles/terminal.css diff --git a/blogs/2026-02-02-hytale-modding-my-honest-concerns.md b/blogs/2026-02-02-hytale-modding-my-honest-concerns.md new file mode 100644 index 0000000..65c0895 --- /dev/null +++ b/blogs/2026-02-02-hytale-modding-my-honest-concerns.md @@ -0,0 +1,156 @@ +--- +title: Hytale Modding - My honest concerns +description: Hytale finally released, promising modding, but iz it true? +date: 2026-02-02 +--- + +For those who don't know, [Hytale](https://hytale.com) is a video game created by Hypixel Studios (the people behind Minecraft's largest server: Hypixel), which has been in development for over 7 years, and has finally been released in public beta on January 13th 2026. + +Minecraft was a big part of childhood, and was what pushed me into becoming a programmer, I started by making Minecraft mods and plugins using Java. +So you can imagine how excited I was for this new game to release, especially because of the promises around great modding support. + +Unfortunately, now that the game has released, and we can see how the game and it's modding support works, I have came to realize a few major problems with the way it's been designed, and unless these problems are addressed and fixed, I am unable to imagine a thriving modding community at the level Minecraft has. + +## The good + +First, to not be all that negative, I have to give credit to Hypixel Studios for the things they did get right when designing the game and the way modding works. + +### The Entity Component System + +An Entity Component System (ECS) is a somewhat old concept that has only recently became popular in the game development world, it's a way to architecture the game by composing entities out of various components, and then running systems to update components efficiently. +This is opposed to the more common approach (that Minecraft uses) which is Object-oriented programming (OOP) which creates hierarchies of entities, leading to less modularity and horrible performance. + +Although Hytale's ECS is written in Java, which prevents most performance optimizations, it's still way better than OOP, both in terms of performance and in terms of developer experience. + +### Official modding + +Unlike Minecraft which has multiple 3rd-party providers for modding (Forge, Fabric, Spigot, and more), Hytale has a single official API. + +This leads to 2 main benefits: users don't have to choose which provider to use (limiting them to only mods written for that provider) and developers don't have to port their mods to multiple providers to be more widely available. + +## The bad + +I do hope Hytale succeeds, and it is a beta after all so things aren't perfect, but my concern is their next plans for modding seem to focus on less relevant things rather than solving the major issues. + +### No client modding + +Hytale modding is completely server-side, similar to Minecraft plugins or server-side mods. + +This means that a mod's code is run solely on the server and not on the client's computer, while assets such as textures, models, sounds and configs are sent to the client to be used. + +I think the logic behind this is to allow Hytale to release the original unobfuscated server source code (which Minecraft only recently done), but disallowing in their ToS any client-side modifications and reverse engineering, to still keep half of their game "private". + +### Only one version + +Hytale forces the client to always use the latest version, unlike Minecraft which allows going back to older versions. + +Their logic is that server owners and modders only need to take into consideration the latest version of the client, which saves time. + +## The ugly + +At first glance, these decisions seem good and beneficial, but upon further consideration, they are actually detrimental to a thriving modding community. + +### High latency lag + +The largest issue with everything being on the server, is every time the client wants to do something, it must do a roundtrip by sending a request to the server and awaiting for a response, this is what ping is, how long it takes for a roundtrip. + +My average ping on Minecraft is 200-300ms, that's 1/4 of a second or equivalent to 4fps, imagine how annoying it'd be to have to wait that long between pressing a button to move, to actually moving on the screen, it'd be unplayable. + +Luckily there is a solution for this -- prediction (of movement), the client AND the server both calculate the location, then, the client moves there on the screen immediately, without waiting for the server. +Then once the server responds, the client checks if the results are too much out of sync, in which case it uses the server position. + +Fortunately both Minecraft and Hytale implement this (if you ever got "lag backed", this is why). + +But unlike Minecraft which does it for movement, blocks, chests, and more, Hytale does it to a more limited set of hardcoded things like movement, but not blocks and UIs. + +Usually this wouldn't be an issue, mod creators can fix this by creating their own mod that runs on both the client and server, where the client version does the prediction, making it feel instant, unfortunately this is impossible with Hytale, this means that mods like Refined Storage will have a 1/4 of a second delay each time you try to put/take a block from the inventory, very annoying. + +Another limitation of no client side modding support is the inability of adding things like custom key bindings, this can be added by Hytale, but again, with a delay due to server roundtrip latency. + +### Per-clieant customizations + +Minecraft has plenty of client-side mods which allow customizing the client in a way that doesn't effect the server, this is most often used for visual effects using resource packs, shaders or additional HUD elements. + +This is unfortunately impossible in Hytale beyond the few hardcoded settings that exist, due to mods being server side only, it means that at best servers can control a single global texture pack for all players that play it, but there is no individual personalized resource packs, and shaders are completely impossible. + +Even community-made client-side mods by reverse engineering the client can't exist because Hytale explicitly prohibited it in their ToS and made it illegal to do. + +### Version chasing + +In practice, rather than helping players and modders save time, targeting only one client version causes a huge problem. + +Players can't play servers that don't support the latest version of the client, If there is a breaking change to the client-server protocol, which will almost certainly happen every large version update, then players won't be able to play. + +In practice this means that Hytale not only forces clients to not play older versions, they also force server owners to always run and update to the latest server version, which forces modders to update their mods to the latest version. + +This is a huge problem for a bunch of reasons: + +Minecraft mods/modpacks usually target every other major version, this gives mods more time to improve their mods before immediately having to work on porting to the new versions. + +Mods that were abandoned and not updated to newer versions will not be playable, which is a huge issue considering the most played Minecraft modpacks (SkyFactory, GregTech, FTB) use older Minecraft versions, and have not been updated to the latest one. + +Having access to older versions means that if Hytale ever makes a change the community dislikes, they can still go back and play older versions they enjoy more, similar to how some Minecraft players still play 1.8 because they prefer that PvP style. + +### Lack of Big mods & modpacks + +All the previous issues will likely lead to this problem, there won't be many competent developers willing to invest massive amounts of time to make high quality mods for the community. + +And I don't blame them, why would you spend so much time if you have to constantly update your mods to newer versions instead of improving them, have your mods feel laggy due to high latency and have players forget them if you ever stop updating them to the latest version, and all of that, for free. +You may as well take that effort and put it into Minecraft modding. + +There will certainly be attempts to replicate mods like RS/AE2, Create, Mekanism, +Botania and others, but they will be made by less experienced beginners and will probably be inefficient and worse than their Minecraft equivalents. + +### No content for players + +Hytale is still in beta, and doesn't have much content yet, it only took me a few days (20-30 hours of playtime) to explore about 75% of the content (on my first and casual playthrough). + +Usually this isn't a problem, except that Hytale's Community are mostly Minecraft players, the same people who expect endless content for a $20 game. + +There is a reason I was able to play Minecraft almost daily for an entire decade without getting bored, and that reason is mods. + +The base game eventually gets boring, there are only so many things you can do, and Hytale knows it, which is why they advertise their "Great modding capabilities" so much, they are counting on modders creating content for them for players to play. + +If there are no competent modders to create popular high quality mods, then there is no content, if there is no content, players will eventually get bored and move on to other games, no players, means the game will die. + +I really hope this doesn't happen, but at the current state of things, I can't see how it won't happen. + +## Solutions + +Let's end this on a more positive note -- what can Hytale do to fix these issues and convince modders it's worth their time? + +### Multiple versions + +Let's start with the easy problem - only one version, the fix is extremely simple, just add a dropdown in the launcher to select previous client versions. +Of course, I don't expect Hytale to support all these versions, by neither does Minecraft, just have them available to download, and even add a "Unsupported" text next to them. +An even nicer option would be to allow separate game profiles which contain both versions, world and settings, but this can be left as a responsibility for 3rd-party launchers (like Modrinth, and Prism in Minecraft). + +### Client-side modding + +For the other problem of client side modding, it's a bit more complicated and technical but still doable. + +Hytale seems to have 2 main requirements that prevented it from doing client-side modding like Minecraft: security and copyright/IP. + +Minecraft client mods are inherently insecure, they have access to the client's computer, allowing malicious mods like rats, ransomware and otherwise to effect your system. + +So how do we allow code execution, without opening ourselves to security, while also not exposing any details about the client code to avoid copyright/IP issues? + +It's simple! Just copy what websites do! +Websites also run code on a User's computer, and yet if you go to a malicious website, they can't hack you, the solution is by running a sandboxed programming language and then only allowing it to access an API, which decides what it is or isn't allowed to do. +In the web world, this is done using JavaScript and web APIs. + +JavaScript is terribly designed, so Hytale can use something else like Lua, then Hytale needs to write a comprehensive API allowing lua code to access all game related values on the client (player position, entities, chunks UIs, assets, etc). + +This solves the security issues, lua is sandboxed and thus any malicious code can't do anything harmful, and because they only expose things via an API, Hytale doesn't have to share the client's source code. + +Then, to fix both server-side latency and client-side customization: Lua scripts can be sent to the client the same way assets like textures are currently sent, this allows server-side mods to write their own client-side predictions avoiding latency, or alternatively, players can install scripts locally to only modify their client without effecting the server. + +And when Hytale was owned by Riot games (before Hytale was purchased back by it's original founder Simon), they were planning on using Lua for what seemed like a very similar system to what I was proposing. + +But unfortunately instead of working on that, Hytale seem to want to focus on a very complex visual scripting system for client side modding, which not only will take significantly longer to implement than what I proposed, it'd also be significantly limited and most programmers are more productive and prefer writing code in text rather than a visual scripting system. + +## Conclusions + +Hytale seems like a very promising game that can finally give a new fresh take on the Minecraft genre, but in its current state it has major flaws in terms of modding ability, but I believe it can be resolved by implementing my suggested solutions. + +And as always, if you wish to talk to me about this topic, programming or anything else, you can contact me on discord at Kyren223 or email `contact @ kyren dot codes`. diff --git a/blogs/hytale-modding-my-honest-concerns.md b/blogs/hytale-modding-my-honest-concerns.md deleted file mode 100644 index bf74ab9..0000000 --- a/blogs/hytale-modding-my-honest-concerns.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: Hytale Modding - My honest concerns -description: Hytale finally released, promising modding, but iz it true? -date: 2026-02-02 ---- - -## Hytale - -For those who don't know, [Hytale](https://hytale.com) is a video game created by Hypixel Studios (the people behind Minecraft's largest server: Hypixel), which has been in development for over 7 years, and has finally been released in public beta on January 13th 2026. - -Minecraft was a big part of childhood, and was what pushed me into becoming a programmer, I started by making Minecraft mods and plugins using Java. -So you can imagine how excited I was for this new game to release, especially because of the promises around great modding support. - -Unfortunately, now that the game has released, and we can see how the game and it's modding support works, I have came to realize a few major problems with the way it's been designed, and unless these problems are addressed and fixed, I am unable to imagine a thriving modding community at the level Minecraft has. - -## The good - -First, to not be all that negative, I have to give credit to Hypixel Studios for the things they did get right when designing the game and the way modding works. - -### The Entity Component System - -An Entity Component System (ECS) is a somewhat old concept that has only recently became popular in the game development world, it's a way to architecture the game by composing entities out of various components, and then running systems to update components efficiently. -This is opposed to the more common approach (that Minecraft uses) which is Object-oriented programming (OOP) which creates hierarchies of entities, leading to less modularity and horrible performance. - -Although Hytale's ECS is written in Java, which prevents most performance optimizations, it's still way better than OOP, both in terms of performance and in terms of developer experience. - -### Official modding - -Unlike Minecraft which has multiple 3rd-party providers for modding (Forge, Fabric, Spigot, and more), Hytale has a single official API. - -This leads to 2 main benefits: users don't have to choose which provider to use (limiting them to only mods written for that provider) and developers don't have to port their mods to multiple providers to be more widely available. - -## The bad - -I do hope Hytale succeeds, and it is a beta after all so things aren't perfect, but my concern is their next plans for modding seem to focus on less relevant things rather than solving the major issues. - -### No client modding - -Hytale modding is completely server-side, similar to Minecraft plugins or server-side mods. - -This means that a mod's code is run solely on the server and not on the client's computer, while assets such as textures, models, sounds and configs are sent to the client to be used. - -I think the logic behind this is to allow Hytale to release the original unobfuscated server source code (which Minecraft only recently done), but disallowing in their ToS any client-side modifications and reverse engineering, to still keep half of their game "private". - -### Only one version - -Hytale forces the client to always use the latest version, unlike Minecraft which allows going back to older versions. - -Their logic is that server owners and modders only need to take into consideration the latest version of the client, which saves time. - -## The ugly - -At first glance, these decisions seem good and beneficial, but upon further consideration, they are actually detrimental to a thriving modding community. - -### High latency lag - -The largest issue with everything being on the server, is every time the client wants to do something, it must do a roundtrip by sending a request to the server and awaiting for a response, this is what ping is, how long it takes for a roundtrip. - -My average ping on Minecraft is 200-300ms, that's 1/4 of a second or equivalent to 4fps, imagine how annoying it'd be to have to wait that long between pressing a button to move, to actually moving on the screen, it'd be unplayable. - -Luckily there is a solution for this -- prediction (of movement), the client AND the server both calculate the location, then, the client moves there on the screen immediately, without waiting for the server. -Then once the server responds, the client checks if the results are too much out of sync, in which case it uses the server position. - -Fortunately both Minecraft and Hytale implement this (if you ever got "lag backed", this is why). - -But unlike Minecraft which does it for movement, blocks, chests, and more, Hytale does it to a more limited set of hardcoded things like movement, but not blocks and UIs. - -Usually this wouldn't be an issue, mod creators can fix this by creating their own mod that runs on both the client and server, where the client version does the prediction, making it feel instant, unfortunately this is impossible with Hytale, this means that mods like Refined Storage will have a 1/4 of a second delay each time you try to put/take a block from the inventory, very annoying. - -Another limitation of no client side modding support is the inability of adding things like custom key bindings, this can be added by Hytale, but again, with a delay due to server roundtrip latency. - -### Per-clieant customizations - -Minecraft has plenty of client-side mods which allow customizing the client in a way that doesn't effect the server, this is most often used for visual effects using resource packs, shaders or additional HUD elements. - -This is unfortunately impossible in Hytale beyond the few hardcoded settings that exist, due to mods being server side only, it means that at best servers can control a single global texture pack for all players that play it, but there is no individual personalized resource packs, and shaders are completely impossible. - -Even community-made client-side mods by reverse engineering the client can't exist because Hytale explicitly prohibited it in their ToS and made it illegal to do. - -### Version chasing - -In practice, rather than helping players and modders save time, targeting only one client version causes a huge problem. - -Players can't play servers that don't support the latest version of the client, If there is a breaking change to the client-server protocol, which will almost certainly happen every large version update, then players won't be able to play. - -In practice this means that Hytale not only forces clients to not play older versions, they also force server owners to always run and update to the latest server version, which forces modders to update their mods to the latest version. - -This is a huge problem for a bunch of reasons: - -Minecraft mods/modpacks usually target every other major version, this gives mods more time to improve their mods before immediately having to work on porting to the new versions. - -Mods that were abandoned and not updated to newer versions will not be playable, which is a huge issue considering the most played Minecraft modpacks (SkyFactory, GregTech, FTB) use older Minecraft versions, and have not been updated to the latest one. - -Having access to older versions means that if Hytale ever makes a change the community dislikes, they can still go back and play older versions they enjoy more, similar to how some Minecraft players still play 1.8 because they prefer that PvP style. - -### Lack of Big mods & modpacks - -All the previous issues will likely lead to this problem, there won't be many competent developers willing to invest massive amounts of time to make high quality mods for the community. - -And I don't blame them, why would you spend so much time if you have to constantly update your mods to newer versions instead of improving them, have your mods feel laggy due to high latency and have players forget them if you ever stop updating them to the latest version, and all of that, for free. -You may as well take that effort and put it into Minecraft modding. - -There will certainly be attempts to replicate mods like RS/AE2, Create, Mekanism, -Botania and others, but they will be made by less experienced beginners and will probably be inefficient and worse than their Minecraft equivalents. - -### No content for players - -Hytale is still in beta, and doesn't have much content yet, it only took me a few days (20-30 hours of playtime) to explore about 75% of the content (on my first and casual playthrough). - -Usually this isn't a problem, except that Hytale's Community are mostly Minecraft players, the same people who expect endless content for a $20 game. - -There is a reason I was able to play Minecraft almost daily for an entire decade without getting bored, and that reason is mods. - -The base game eventually gets boring, there are only so many things you can do, and Hytale knows it, which is why they advertise their "Great modding capabilities" so much, they are counting on modders creating content for them for players to play. - -If there are no competent modders to create popular high quality mods, then there is no content, if there is no content, players will eventually get bored and move on to other games, no players, means the game will die. - -I really hope this doesn't happen, but at the current state of things, I can't see how it won't happen. - -## Solutions - -Let's end this on a more positive note -- what can Hytale do to fix these issues and convince modders it's worth their time? - -### Multiple versions - -Let's start with the easy problem - only one version, the fix is extremely simple, just add a dropdown in the launcher to select previous client versions. -Of course, I don't expect Hytale to support all these versions, by neither does Minecraft, just have them available to download, and even add a "Unsupported" text next to them. -An even nicer option would be to allow separate game profiles which contain both versions, world and settings, but this can be left as a responsibility for 3rd-party launchers (like Modrinth, and Prism in Minecraft). - -### Client-side modding - -For the other problem of client side modding, it's a bit more complicated and technical but still doable. - -Hytale seems to have 2 main requirements that prevented it from doing client-side modding like Minecraft: security and copyright/IP. - -Minecraft client mods are inherently insecure, they have access to the client's computer, allowing malicious mods like rats, ransomware and otherwise to effect your system. - -So how do we allow code execution, without opening ourselves to security, while also not exposing any details about the client code to avoid copyright/IP issues? - -It's simple! Just copy what websites do! -Websites also run code on a User's computer, and yet if you go to a malicious website, they can't hack you, the solution is by running a sandboxed programming language and then only allowing it to access an API, which decides what it is or isn't allowed to do. -In the web world, this is done using JavaScript and web APIs. - -JavaScript is terribly designed, so Hytale can use something else like Lua, then Hytale needs to write a comprehensive API allowing lua code to access all game related values on the client (player position, entities, chunks UIs, assets, etc). - -This solves the security issues, lua is sandboxed and thus any malicious code can't do anything harmful, and because they only expose things via an API, Hytale doesn't have to share the client's source code. - -Then, to fix both server-side latency and client-side customization: Lua scripts can be sent to the client the same way assets like textures are currently sent, this allows server-side mods to write their own client-side predictions avoiding latency, or alternatively, players can install scripts locally to only modify their client without effecting the server. - -And when Hytale was owned by Riot games (before Hytale was purchased back by it's original founder Simon), they were planning on using Lua for what seemed like a very similar system to what I was proposing. - -But unfortunately instead of working on that, Hytale seem to want to focus on a very complex visual scripting system for client side modding, which not only will take significantly longer to implement than what I proposed, it'd also be significantly limited and most programmers are more productive and prefer writing code in text rather than a visual scripting system. - -## Conclusions - -Hytale seems like a very promising game that can finally give a new fresh take on the Minecraft genre, but in its current state it has major flaws in terms of modding ability, but I believe it can be resolved by implementing my suggested solutions. - -And as always, if you wish to talk to me about this topic, programming or anything else, you can contact me on discord at Kyren223 or email `contact @ kyren dot codes`. diff --git a/go.mod b/go.mod index 56abdd0..59e7f0e 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,11 @@ module website go 1.26.8 require ( - github.com/a-h/templ v0.3.1070 // indirect - github.com/yuin/goldmark v1.8.6 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect + github.com/a-h/templ v0.3.1070 + github.com/alecthomas/chroma/v2 v2.27.0 + github.com/yuin/goldmark v1.8.6 + github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc + gopkg.in/yaml.v3 v3.0.1 ) + +require github.com/dlclark/regexp2/v2 v2.2.1 // indirect diff --git a/go.sum b/go.sum index 2e0d041..4ae7c52 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,33 @@ github.com/a-h/templ v0.3.1070 h1:3iCOXHXqFXa99OQzgkUOLJbNzv/QjFGLwKZkBAg+ADA= github.com/a-h/templ v0.3.1070/go.mod h1:iIqB3g2RHBe/WlnPwa+Bvhh1TKXHWLRnBD9NWHOLm78= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs= +github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs= +github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8= +github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= +github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0= +github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.8.6 h1:d0VcaP1sx9GkFVkoW+KtggpGi2KZ965i14b0+bDQST4= github.com/yuin/goldmark v1.8.6/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ= +github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/public/footnotes.js b/public/footnotes.js index 50f709e..57ded98 100644 --- a/public/footnotes.js +++ b/public/footnotes.js @@ -1,27 +1,45 @@ +document.documentElement.classList.add("js"); + +const SIDENOTES = { + inside: true, // true: notes inside the frame, right of the post. false: outside, in the margin + insideShare: 0.21, // share of the post area given to the notes when inside (0.3 = 70/30) + border: false, // border around each note + // readingWidth: "70ch", // max width of the post text, null = no cap + readingWidth: null, // max width of the post text, null = no cap +}; + document.addEventListener("DOMContentLoaded", () => { const area = document.querySelector("[data-scroll-area]"); + const article = area?.querySelector("article"); + if (!area || !article) return; + + article.style.maxWidth = SIDENOTES.readingWidth ?? "none"; + if (SIDENOTES.inside) + article.style.marginRight = `${SIDENOTES.insideShare * 100}%`; + const refs = [...document.querySelectorAll("a.footnote-ref")]; - if (!area || refs.length === 0) return; + if (refs.length === 0) return; const panel = document.createElement("div"); - panel.className = "sidenotes"; + panel.className = "sidenotes" + (SIDENOTES.border ? " bordered" : ""); document.body.append(panel); const items = refs.map((ref) => { ref.addEventListener("click", (e) => e.preventDefault()); const note = document.getElementById(ref.getAttribute("href").slice(1)); - const num = document.createElement("span"); - num.className = "sidenote-num"; - num.textContent = ref.textContent; - const body = document.createElement("div"); body.append(...note.cloneNode(true).childNodes); body.querySelector(".footnote-backref")?.remove(); + const num = document.createElement("sup"); + num.className = "sidenote-num"; + num.textContent = ref.textContent; + (body.querySelector("p") ?? body).prepend(num); + const el = document.createElement("div"); el.className = "sidenote"; - el.append(num, body); + el.append(body); panel.append(el); return { ref, el }; }); @@ -31,22 +49,34 @@ document.addEventListener("DOMContentLoaded", () => { const layout = () => { queued = false; - const rect = area.getBoundingClientRect(); - const frame = document.querySelector(".terminal").getBoundingClientRect(); const rem = parseFloat(getComputedStyle(document.documentElement).fontSize); - const left = frame.right + rem; + const top0 = area.getBoundingClientRect().top + area.clientTop; + + let left, right; + if (SIDENOTES.inside) { + const r = area.getBoundingClientRect(); + left = article.getBoundingClientRect().right + rem; + right = + r.left + + area.clientLeft + + area.clientWidth - + parseFloat(getComputedStyle(area).paddingRight); + } else { + left = area.closest("main").getBoundingClientRect().right + rem; + right = window.innerWidth - rem; + } Object.assign(panel.style, { left: `${left}px`, - top: `${rect.top}px`, - width: `${window.innerWidth - left - rem}px`, - height: `${rect.height}px`, + top: `${top0}px`, + width: `${Math.max(0, right - left)}px`, + height: `${area.clientHeight}px`, }); let bottom = -Infinity; for (const { ref, el } of items) { const top = Math.max( - ref.getBoundingClientRect().top - rect.top, + ref.getBoundingClientRect().top - top0, bottom + gap, ); el.style.top = `${top}px`; diff --git a/public/main.css b/public/main.css deleted file mode 100644 index 8f9bb7d..0000000 --- a/public/main.css +++ /dev/null @@ -1,72 +0,0 @@ -@layer theme, base, components, utilities; -@import "tailwindcss/theme.css" layer(theme); -@import "tailwindcss/preflight.css" layer(base); -@import "tailwindcss/utilities.css" layer(utilities); - -@source "../**/*.go"; -@source "../**/*.templ"; - -@keyframes pop { - 50% { - transform: scale(1.3); - } -} -[data-copied] svg { - animation: pop 0.25s; -} - -@keyframes bump { - 50% { - transform: scale(1.03); - } -} - -@plugin "@tailwindcss/typography"; - -.prose { - --tw-prose-body: var(--text); - --tw-prose-headings: var(--primary); - --tw-prose-links: var(--secondary); - --tw-prose-bold: var(--text); - --tw-prose-bullets: var(--alt); - --tw-prose-counters: var(--alt); - --tw-prose-hr: var(--alt); - --tw-prose-quotes: var(--text); - --tw-prose-quote-borders: var(--alt); - --tw-prose-captions: var(--alt); - --tw-prose-code: var(--extra); - --tw-prose-pre-code: var(--text); - --tw-prose-pre-bg: rgb(0 0 0 / 0.3); - --tw-prose-th-borders: var(--alt); - --tw-prose-td-borders: var(--alt); -} - -.js .footnotes { - display: none; -} - -.sidenotes { - position: fixed; - overflow: hidden; - pointer-events: none; -} - -.sidenote { - position: absolute; - left: 0; - right: 0; - display: flex; - gap: 1ch; - padding: 0.4rem 0.6rem; - border: 0.1rem solid var(--alt); - background: var(--background); - font-family: var(--font-normal); - font-size: 14px; - line-height: 1.4; - pointer-events: auto; -} - -.sidenote-num { - flex-shrink: 0; - color: var(--secondary); -} diff --git a/public/style.css b/public/style.css index f2d0a22..b5497de 100644 --- a/public/style.css +++ b/public/style.css @@ -203,9 +203,6 @@ .top-\[0\.6rem\] { top: 0.6rem; } - .top-\[calc\(50\%-20rem\)\] { - top: calc(50% - 20rem); - } .right-\[0\.6rem\] { right: 0.6rem; } @@ -227,9 +224,6 @@ .left-\[0\.625rem\] { left: 0.625rem; } - .left-\[calc\(50\%\+38\.5rem\)\] { - left: calc(50% + 38.5rem); - } .z-10 { z-index: 10; } @@ -795,9 +789,6 @@ .h-full { height: 100%; } - .max-h-\[40rem\] { - max-height: 40rem; - } .max-h-\[80svh\] { max-height: 80svh; } @@ -810,9 +801,6 @@ .w-8 { width: calc(var(--spacing) * 8); } - .w-\[10\.5rem\] { - width: 10.5rem; - } .w-\[30\%\] { width: 30%; } @@ -904,9 +892,6 @@ .justify-between { justify-content: space-between; } - .justify-end { - justify-content: flex-end; - } .gap-4 { gap: calc(var(--spacing) * 4); } @@ -1247,11 +1232,8 @@ .text-\[5vw\] { font-size: 5vw; } - .text-\[14px\] { - font-size: 14px; - } - .text-\[18px\] { - font-size: 18px; + .text-\[17\.6px\] { + font-size: 17.6px; } .text-\[60\%\] { font-size: 60%; @@ -1734,6 +1716,24 @@ --tw-prose-th-borders: var(--alt); --tw-prose-td-borders: var(--alt); } +.prose a.footnote-ref, .prose a.footnote-ref:hover { + text-decoration: none; +} +.prose code::before, .prose code::after { + content: none; +} +.prose :not(pre) > code { + padding: 0.1em 0.4em; + border-radius: 0.3em; + background: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + background: color-mix(in srgb, var(--alt) 25%, transparent); + } + font-size: 0.9em; +} +.prose pre, .prose code { + font-family: var(--font-mono); +} .js .footnotes { display: none; } @@ -1746,20 +1746,64 @@ position: absolute; left: 0; right: 0; - display: flex; - gap: 1ch; - padding: 0.4rem 0.6rem; - border: 0.1rem solid var(--alt); background: var(--background); font-family: var(--font-normal); - font-size: 14px; + font-size: 16px; line-height: 1.4; pointer-events: auto; } +.sidenotes.bordered .sidenote { + border: 0.1rem solid var(--alt); + padding: 0.4rem 0.6rem; +} .sidenote-num { - flex-shrink: 0; + font-size: 70%; + color: var(--secondary); + margin-right: 0.15em; +} +.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .kt { color: var(--secondary); } +.chroma .nf, .chroma .nc, .chroma .nb { + color: var(--primary); +} +.chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .sd, .chroma .s2, .chroma .se, .chroma .sh, .chroma .si, .chroma .sx, .chroma .sr, .chroma .s1, .chroma .ss { + color: var(--extra); +} +.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo { + color: var(--primary); +} +.chroma .c, .chroma .ch, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .cp, .chroma .cpf { + color: var(--alt); + font-style: italic; +} +.codeblock { + margin: 1.2em 0; + border: 0.1rem solid var(--alt); + border-radius: 0.4rem; + background: rgb(0 0 0 / 0.3); + overflow: hidden; +} +.codeblock::before { + content: attr(data-lang); + display: block; + padding: 0.2em 0.8em; + border-bottom: 0.1rem solid var(--alt); + font-size: 0.75em; + color: var(--alt); +} +.codeblock[data-lang=""]::before { + display: none; +} +.codeblock pre { + margin: 0; + padding: 0.8em 1em; + background: transparent; + border-radius: 0; + overflow-x: auto; + font-size: 0.85em; + line-height: 1.5; +} @property --tw-translate-x { syntax: "*"; inherits: false; diff --git a/public/styles/fonts/Inter/Inter-Black.woff2 b/public/styles/fonts/Inter/Inter-Black.woff2 new file mode 100644 index 0000000..2e73dce Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Black.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-BlackItalic.woff2 b/public/styles/fonts/Inter/Inter-BlackItalic.woff2 new file mode 100644 index 0000000..d85db93 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-BlackItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Bold.woff2 b/public/styles/fonts/Inter/Inter-Bold.woff2 new file mode 100644 index 0000000..b9e3cb3 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Bold.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-BoldItalic.woff2 b/public/styles/fonts/Inter/Inter-BoldItalic.woff2 new file mode 100644 index 0000000..31cd052 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-BoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-ExtraBold.woff2 b/public/styles/fonts/Inter/Inter-ExtraBold.woff2 new file mode 100644 index 0000000..bbd0006 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-ExtraBold.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-ExtraBoldItalic.woff2 b/public/styles/fonts/Inter/Inter-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..288f2de Binary files /dev/null and b/public/styles/fonts/Inter/Inter-ExtraBoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-ExtraLight.woff2 b/public/styles/fonts/Inter/Inter-ExtraLight.woff2 new file mode 100644 index 0000000..f691003 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-ExtraLight.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-ExtraLightItalic.woff2 b/public/styles/fonts/Inter/Inter-ExtraLightItalic.woff2 new file mode 100644 index 0000000..3e3934d Binary files /dev/null and b/public/styles/fonts/Inter/Inter-ExtraLightItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Italic.woff2 b/public/styles/fonts/Inter/Inter-Italic.woff2 new file mode 100644 index 0000000..9a1ad21 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Italic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Light.woff2 b/public/styles/fonts/Inter/Inter-Light.woff2 new file mode 100644 index 0000000..f3e012a Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Light.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-LightItalic.woff2 b/public/styles/fonts/Inter/Inter-LightItalic.woff2 new file mode 100644 index 0000000..2f37009 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-LightItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Medium.woff2 b/public/styles/fonts/Inter/Inter-Medium.woff2 new file mode 100644 index 0000000..fdfdcc6 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Medium.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-MediumItalic.woff2 b/public/styles/fonts/Inter/Inter-MediumItalic.woff2 new file mode 100644 index 0000000..0dc5a30 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-MediumItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Regular.woff2 b/public/styles/fonts/Inter/Inter-Regular.woff2 new file mode 100644 index 0000000..2bcd222 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Regular.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-SemiBold.woff2 b/public/styles/fonts/Inter/Inter-SemiBold.woff2 new file mode 100644 index 0000000..fbae113 Binary files /dev/null and b/public/styles/fonts/Inter/Inter-SemiBold.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-SemiBoldItalic.woff2 b/public/styles/fonts/Inter/Inter-SemiBoldItalic.woff2 new file mode 100644 index 0000000..d67d01c Binary files /dev/null and b/public/styles/fonts/Inter/Inter-SemiBoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-Thin.woff2 b/public/styles/fonts/Inter/Inter-Thin.woff2 new file mode 100644 index 0000000..83bf54b Binary files /dev/null and b/public/styles/fonts/Inter/Inter-Thin.woff2 differ diff --git a/public/styles/fonts/Inter/Inter-ThinItalic.woff2 b/public/styles/fonts/Inter/Inter-ThinItalic.woff2 new file mode 100644 index 0000000..928da4b Binary files /dev/null and b/public/styles/fonts/Inter/Inter-ThinItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Black.woff2 b/public/styles/fonts/Inter/InterDisplay-Black.woff2 new file mode 100644 index 0000000..72532b2 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Black.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-BlackItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-BlackItalic.woff2 new file mode 100644 index 0000000..de02111 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-BlackItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Bold.woff2 b/public/styles/fonts/Inter/InterDisplay-Bold.woff2 new file mode 100644 index 0000000..304c31d Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Bold.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-BoldItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-BoldItalic.woff2 new file mode 100644 index 0000000..89d5c5a Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-BoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-ExtraBold.woff2 b/public/styles/fonts/Inter/InterDisplay-ExtraBold.woff2 new file mode 100644 index 0000000..4250fa0 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-ExtraBold.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-ExtraBoldItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..d68a400 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-ExtraBoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-ExtraLight.woff2 b/public/styles/fonts/Inter/InterDisplay-ExtraLight.woff2 new file mode 100644 index 0000000..7d376e2 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-ExtraLight.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-ExtraLightItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-ExtraLightItalic.woff2 new file mode 100644 index 0000000..1f1ca72 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-ExtraLightItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Italic.woff2 b/public/styles/fonts/Inter/InterDisplay-Italic.woff2 new file mode 100644 index 0000000..4475f7c Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Italic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Light.woff2 b/public/styles/fonts/Inter/InterDisplay-Light.woff2 new file mode 100644 index 0000000..ef7dbbf Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Light.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-LightItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-LightItalic.woff2 new file mode 100644 index 0000000..a57c48b Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-LightItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Medium.woff2 b/public/styles/fonts/Inter/InterDisplay-Medium.woff2 new file mode 100644 index 0000000..f6157fa Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Medium.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-MediumItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-MediumItalic.woff2 new file mode 100644 index 0000000..8b2f1c2 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-MediumItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Regular.woff2 b/public/styles/fonts/Inter/InterDisplay-Regular.woff2 new file mode 100644 index 0000000..b5a45e8 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Regular.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-SemiBold.woff2 b/public/styles/fonts/Inter/InterDisplay-SemiBold.woff2 new file mode 100644 index 0000000..6e04091 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-SemiBold.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-SemiBoldItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-SemiBoldItalic.woff2 new file mode 100644 index 0000000..72b4743 Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-SemiBoldItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-Thin.woff2 b/public/styles/fonts/Inter/InterDisplay-Thin.woff2 new file mode 100644 index 0000000..893595a Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-Thin.woff2 differ diff --git a/public/styles/fonts/Inter/InterDisplay-ThinItalic.woff2 b/public/styles/fonts/Inter/InterDisplay-ThinItalic.woff2 new file mode 100644 index 0000000..46e1b5a Binary files /dev/null and b/public/styles/fonts/Inter/InterDisplay-ThinItalic.woff2 differ diff --git a/public/styles/fonts/Inter/InterVariable-Italic.woff2 b/public/styles/fonts/Inter/InterVariable-Italic.woff2 new file mode 100644 index 0000000..b3530f3 Binary files /dev/null and b/public/styles/fonts/Inter/InterVariable-Italic.woff2 differ diff --git a/public/styles/fonts/Inter/InterVariable.woff2 b/public/styles/fonts/Inter/InterVariable.woff2 new file mode 100644 index 0000000..5a8d3e7 Binary files /dev/null and b/public/styles/fonts/Inter/InterVariable.woff2 differ diff --git a/public/styles/fonts/Inter/inter.css b/public/styles/fonts/Inter/inter.css new file mode 100644 index 0000000..6144065 --- /dev/null +++ b/public/styles/fonts/Inter/inter.css @@ -0,0 +1,148 @@ +/* Variable fonts usage: +:root { font-family: "Inter", sans-serif; } +@supports (font-variation-settings: normal) { + :root { font-family: "InterVariable", sans-serif; font-optical-sizing: auto; } +} */ +@font-face { + font-family: InterVariable; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("InterVariable.woff2") format("woff2"); +} +@font-face { + font-family: InterVariable; + font-style: italic; + font-weight: 100 900; + font-display: swap; + src: url("InterVariable-Italic.woff2") format("woff2"); +} + +/* static fonts */ +@font-face { font-family: "Inter"; font-style: normal; font-weight: 100; font-display: swap; src: url("Inter-Thin.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 100; font-display: swap; src: url("Inter-ThinItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 200; font-display: swap; src: url("Inter-ExtraLight.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 200; font-display: swap; src: url("Inter-ExtraLightItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 300; font-display: swap; src: url("Inter-Light.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 300; font-display: swap; src: url("Inter-LightItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap; src: url("Inter-Regular.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 400; font-display: swap; src: url("Inter-Italic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap; src: url("Inter-Medium.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 500; font-display: swap; src: url("Inter-MediumItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap; src: url("Inter-SemiBold.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 600; font-display: swap; src: url("Inter-SemiBoldItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 700; font-display: swap; src: url("Inter-Bold.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 700; font-display: swap; src: url("Inter-BoldItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 800; font-display: swap; src: url("Inter-ExtraBold.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 800; font-display: swap; src: url("Inter-ExtraBoldItalic.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: normal; font-weight: 900; font-display: swap; src: url("Inter-Black.woff2") format("woff2"); } +@font-face { font-family: "Inter"; font-style: italic; font-weight: 900; font-display: swap; src: url("Inter-BlackItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 100; font-display: swap; src: url("InterDisplay-Thin.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 100; font-display: swap; src: url("InterDisplay-ThinItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLight.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 200; font-display: swap; src: url("InterDisplay-ExtraLightItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 300; font-display: swap; src: url("InterDisplay-Light.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 300; font-display: swap; src: url("InterDisplay-LightItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 400; font-display: swap; src: url("InterDisplay-Regular.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 400; font-display: swap; src: url("InterDisplay-Italic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 500; font-display: swap; src: url("InterDisplay-Medium.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 500; font-display: swap; src: url("InterDisplay-MediumItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBold.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 600; font-display: swap; src: url("InterDisplay-SemiBoldItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 700; font-display: swap; src: url("InterDisplay-Bold.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 700; font-display: swap; src: url("InterDisplay-BoldItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBold.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 800; font-display: swap; src: url("InterDisplay-ExtraBoldItalic.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: normal; font-weight: 900; font-display: swap; src: url("InterDisplay-Black.woff2") format("woff2"); } +@font-face { font-family: "InterDisplay"; font-style: italic; font-weight: 900; font-display: swap; src: url("InterDisplay-BlackItalic.woff2") format("woff2"); } + +@font-feature-values InterVariable { + @character-variant { + cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8; + cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13; + alt-1: 1; /* Alternate one */ + alt-3: 9; /* Flat-top three */ + open-4: 2; /* Open four */ + open-6: 3; /* Open six */ + open-9: 4; /* Open nine */ + lc-l-with-tail: 5; /* Lower-case L with tail */ + simplified-u: 6; /* Simplified u */ + alt-double-s: 7; /* Alternate German double s */ + uc-i-with-serif: 8; /* Upper-case i with serif */ + uc-g-with-spur: 10; /* Capital G with spur */ + single-story-a: 11; /* Single-story a */ + compact-lc-f: 12; /* Compact f */ + compact-lc-t: 13; /* Compact t */ + } + @styleset { + ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8; + open-digits: 1; /* Open digits */ + disambiguation: 2; /* Disambiguation (with zero) */ + disambiguation-except-zero: 4; /* Disambiguation (no zero) */ + round-quotes-and-commas: 3; /* Round quotes & commas */ + square-punctuation: 7; /* Square punctuation */ + square-quotes: 8; /* Square quotes */ + circled-characters: 5; /* Circled characters */ + squared-characters: 6; /* Squared characters */ + } +} +@font-feature-values Inter { + @character-variant { + cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8; + cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13; + alt-1: 1; /* Alternate one */ + alt-3: 9; /* Flat-top three */ + open-4: 2; /* Open four */ + open-6: 3; /* Open six */ + open-9: 4; /* Open nine */ + lc-l-with-tail: 5; /* Lower-case L with tail */ + simplified-u: 6; /* Simplified u */ + alt-double-s: 7; /* Alternate German double s */ + uc-i-with-serif: 8; /* Upper-case i with serif */ + uc-g-with-spur: 10; /* Capital G with spur */ + single-story-a: 11; /* Single-story a */ + compact-lc-f: 12; /* Compact f */ + compact-lc-t: 13; /* Compact t */ + } + @styleset { + ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8; + open-digits: 1; /* Open digits */ + disambiguation: 2; /* Disambiguation (with zero) */ + disambiguation-except-zero: 4; /* Disambiguation (no zero) */ + round-quotes-and-commas: 3; /* Round quotes & commas */ + square-punctuation: 7; /* Square punctuation */ + square-quotes: 8; /* Square quotes */ + circled-characters: 5; /* Circled characters */ + squared-characters: 6; /* Squared characters */ + } +} +@font-feature-values InterDisplay { + @character-variant { + cv01: 1; cv02: 2; cv03: 3; cv04: 4; cv05: 5; cv06: 6; cv07: 7; cv08: 8; + cv09: 9; cv10: 10; cv11: 11; cv12: 12; cv13: 13; + alt-1: 1; /* Alternate one */ + alt-3: 9; /* Flat-top three */ + open-4: 2; /* Open four */ + open-6: 3; /* Open six */ + open-9: 4; /* Open nine */ + lc-l-with-tail: 5; /* Lower-case L with tail */ + simplified-u: 6; /* Simplified u */ + alt-double-s: 7; /* Alternate German double s */ + uc-i-with-serif: 8; /* Upper-case i with serif */ + uc-g-with-spur: 10; /* Capital G with spur */ + single-story-a: 11; /* Single-story a */ + compact-lc-f: 12; /* Compact f */ + compact-lc-t: 13; /* Compact t */ + } + @styleset { + ss01: 1; ss02: 2; ss03: 3; ss04: 4; ss05: 5; ss06: 6; ss07: 7; ss08: 8; + open-digits: 1; /* Open digits */ + disambiguation: 2; /* Disambiguation (with zero) */ + disambiguation-except-zero: 4; /* Disambiguation (no zero) */ + round-quotes-and-commas: 3; /* Round quotes & commas */ + square-punctuation: 7; /* Square punctuation */ + square-quotes: 8; /* Square quotes */ + circled-characters: 5; /* Circled characters */ + squared-characters: 6; /* Squared characters */ + } +} diff --git a/public/styles/fonts/JetBrainsMono.css b/public/styles/fonts/JetBrainsMono.css index 807fe1f..fc0183e 100644 --- a/public/styles/fonts/JetBrainsMono.css +++ b/public/styles/fonts/JetBrainsMono.css @@ -1,108 +1,108 @@ @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Thin.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Thin.woff2") format("woff2"); font-weight: 100; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ThinItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ThinItalic.woff2") format("woff2"); font-weight: 100; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraLight.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraLight.woff2") format("woff2"); font-weight: 200; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraLightItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraLightItalic.woff2") format("woff2"); font-weight: 200; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Light.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Light.woff2") format("woff2"); font-weight: 300; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-LightItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-LightItalic.woff2") format("woff2"); font-weight: 300; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Regular.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Italic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Italic.woff2") format("woff2"); font-weight: 400; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Medium.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Medium.woff2") format("woff2"); font-weight: 500; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-MediumItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-MediumItalic.woff2") format("woff2"); font-weight: 500; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-SemiBold.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-SemiBold.woff2") format("woff2"); font-weight: 600; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-SemiBoldItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-SemiBoldItalic.woff2") format("woff2"); font-weight: 600; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-Bold.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-BoldItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-BoldItalic.woff2") format("woff2"); font-weight: 700; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); font-weight: 800; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); font-weight: 800; font-style: italic; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); font-weight: 900; font-style: normal; } @font-face { font-family: "Jetbrains Mono"; - src: url("/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); + src: url("/public/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); font-weight: 900; font-style: italic; } diff --git a/public/styles/fonts/Monocraft.css b/public/styles/fonts/Monocraft.css index 34fd24a..df2874e 100644 --- a/public/styles/fonts/Monocraft.css +++ b/public/styles/fonts/Monocraft.css @@ -1,108 +1,108 @@ @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-ExtraLight.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype"); font-weight: 100; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); font-weight: 100; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-ExtraLight.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype"); font-weight: 200; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); font-weight: 200; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Light.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Light.ttf") format("truetype"); font-weight: 300; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Light-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Light-Italic.ttf") format("truetype"); font-weight: 300; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft.ttf") format("truetype"); + src: url("/public/fonts/Monocraft.ttf") format("truetype"); font-weight: 400; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype"); font-weight: 400; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft.ttf") format("truetype"); + src: url("/public/fonts/Monocraft.ttf") format("truetype"); font-weight: 500; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype"); font-weight: 500; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-SemiBold.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-SemiBold.ttf") format("truetype"); font-weight: 600; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-SemiBold-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-SemiBold-Italic.ttf") format("truetype"); font-weight: 600; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Bold.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Bold.ttf") format("truetype"); font-weight: 700; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Bold-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Bold-Italic.ttf") format("truetype"); font-weight: 700; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Black.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Black.ttf") format("truetype"); font-weight: 800; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Black-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype"); font-weight: 800; font-style: italic; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Black.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Black.ttf") format("truetype"); font-weight: 900; font-style: normal; } @font-face { font-family: "Monocraft"; - src: url("/fonts/Monocraft-Black-Italic.ttf") format("truetype"); + src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype"); font-weight: 900; font-style: italic; } diff --git a/public/styles/main.css b/public/styles/main.css new file mode 100644 index 0000000..2c44266 --- /dev/null +++ b/public/styles/main.css @@ -0,0 +1,262 @@ +@import "./fonts/Inter/inter.css"; +@import "./fonts/JetBrainsMono.css"; +@import "./fonts/Monocraft.css"; + +@layer theme, base, components, utilities; +@import "tailwindcss/theme.css" layer(theme); +@import "tailwindcss/preflight.css" layer(base); +@import "tailwindcss/utilities.css" layer(utilities); + +@source "../**/*.go"; +@source "../**/*.templ"; + +:root { + --primary: #54d7a9; + --secondary: #9b7eca; + --accent: #7ed4fb; + --extra: #8fcc75; + --text: #ffffff; + --alt: #999999; + --background: #000000; + --font-mono: "Jetbrains Mono", monospace; + --font-normal: "Inter", system-ui, sans-serif; +} + +html { + background-color: var(--background); + color: var(--text); + font-family: var(--font-mono); + user-select: none; + + font-size: 1vw; +} + +body { + min-height: 100vh; + display: grid; + place-items: center; + /* font-family: var(--font-mono); */ +} + +@layer base { + a { + font-weight: 300; + text-decoration: none; + color: var(--secondary); + transition-duration: 0.2s; + transition-property: color, text-decoration; + } + a:hover { + text-decoration: underline; + color: var(--accent); + } +} + +.scrollbox::-webkit-scrollbar { + width: 1.5rem; +} +.scrollbox::-webkit-scrollbar-track { + background: transparent; + border-left: 0.1rem solid var(--alt); +} +.scrollbox::-webkit-scrollbar-thumb { + background: var(--primary); + border: 0.3rem solid transparent; + background-clip: padding-box; + border-radius: 0; +} +.scrollbox::-webkit-scrollbar-thumb:hover { + background: var(--accent); +} + +@supports not selector(::-webkit-scrollbar) { + .scrollbox { + scrollbar-color: var(--primary) transparent; + } +} + +@plugin "@tailwindcss/typography"; + +.prose { + --tw-prose-body: var(--text); + --tw-prose-headings: var(--primary); + --tw-prose-links: var(--secondary); + --tw-prose-bold: var(--text); + --tw-prose-bullets: var(--alt); + --tw-prose-counters: var(--alt); + --tw-prose-hr: var(--alt); + --tw-prose-quotes: var(--text); + --tw-prose-quote-borders: var(--alt); + --tw-prose-captions: var(--alt); + --tw-prose-code: var(--extra); + --tw-prose-pre-code: var(--text); + --tw-prose-pre-bg: rgb(0 0 0 / 0.3); + --tw-prose-th-borders: var(--alt); + --tw-prose-td-borders: var(--alt); +} + +/* .prose a[target="_blank"]::after { content: " ↗"; font-size: 0.8em; } */ + +/* headings: color, size, spacing above/below */ +/* .prose h1 { color: var(--accent); font-size: 1.9em; margin: 1.6em 0 0.6em; } */ +/* .prose h2 { color: var(--primary); font-size: 1.5em; margin: 1.6em 0 0.5em; } */ +/* .prose h3 { color: var(--primary); font-size: 1.2em; margin: 1.4em 0 0.4em; } */ + +/* paragraph and list spacing */ +/* .prose p, .prose ul, .prose ol { margin: 1em 0; } */ +/* .prose li { margin: 0.3em 0; } */ + +/* links, with no underline on footnote refs */ +/* .prose a { text-decoration: none; } */ +/* .prose a:hover { text-decoration: underline; } */ +.prose a.footnote-ref, +.prose a.footnote-ref:hover { + text-decoration: none; +} + +/* quotes: drop the plugin's quote marks */ +/* .prose blockquote { border-left: 0.2em solid var(--alt); padding-left: 1em; font-style: normal; } */ +/* .prose blockquote p::before, .prose blockquote p::after { content: none; } */ + +/* inline code: drop the plugin's backticks, add a tag-like background */ +.prose code::before, +.prose code::after { + content: none; +} +.prose :not(pre) > code { + padding: 0.1em 0.4em; + border-radius: 0.3em; + background: color-mix(in srgb, var(--alt) 25%, transparent); + font-size: 0.9em; +} + +/* the article uses the proportional font, so code needs the mono one back */ +.prose pre, +.prose code { + font-family: var(--font-mono); +} + +.js .footnotes { + display: none; +} + +.sidenotes { + position: fixed; + overflow: hidden; + pointer-events: none; +} + +.sidenote { + position: absolute; + left: 0; + right: 0; + background: var(--background); + font-family: var(--font-normal); + font-size: 16px; + line-height: 1.4; + pointer-events: auto; +} + +.sidenotes.bordered .sidenote { + border: 0.1rem solid var(--alt); + padding: 0.4rem 0.6rem; +} + +.sidenote-num { + font-size: 70%; + color: var(--secondary); + margin-right: 0.15em; +} + +.chroma .k, +.chroma .kc, +.chroma .kd, +.chroma .kn, +.chroma .kp, +.chroma .kr, +.chroma .kt { + color: var(--secondary); +} +.chroma .nf, +.chroma .nc, +.chroma .nb { + color: var(--primary); +} +.chroma .s, +.chroma .sa, +.chroma .sb, +.chroma .sc, +.chroma .dl, +.chroma .sd, +.chroma .s2, +.chroma .se, +.chroma .sh, +.chroma .si, +.chroma .sx, +.chroma .sr, +.chroma .s1, +.chroma .ss { + color: var(--extra); +} +.chroma .m, +.chroma .mb, +.chroma .mf, +.chroma .mh, +.chroma .mi, +.chroma .il, +.chroma .mo { + color: var(--primary); +} +.chroma .c, +.chroma .ch, +.chroma .cm, +.chroma .c1, +.chroma .cs, +.chroma .cp, +.chroma .cpf { + color: var(--alt); + font-style: italic; +} + +.codeblock { + margin: 1.2em 0; + border: 0.1rem solid var(--alt); + border-radius: 0.4rem; + background: rgb(0 0 0 / 0.3); + overflow: hidden; +} +.codeblock::before { + content: attr(data-lang); + display: block; + padding: 0.2em 0.8em; + border-bottom: 0.1rem solid var(--alt); + font-size: 0.75em; + color: var(--alt); +} +.codeblock[data-lang=""]::before { + display: none; +} +.codeblock pre { + margin: 0; + padding: 0.8em 1em; + background: transparent; + border-radius: 0; + overflow-x: auto; + font-size: 0.85em; + line-height: 1.5; +} + +@keyframes pop { + 50% { + transform: scale(1.3); + } +} +[data-copied] svg { + animation: pop 0.25s; +} + +@keyframes bump { + 50% { + transform: scale(1.03); + } +} diff --git a/public/styles/style.css b/public/styles/style.css new file mode 100644 index 0000000..4aff75b --- /dev/null +++ b/public/styles/style.css @@ -0,0 +1,2668 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ +@layer properties; +@font-face { + font-family: InterVariable; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("InterVariable.woff2") format("woff2"); +} +@font-face { + font-family: InterVariable; + font-style: italic; + font-weight: 100 900; + font-display: swap; + src: url("InterVariable-Italic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url("Inter-Thin.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 100; + font-display: swap; + src: url("Inter-ThinItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLight.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLightItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url("Inter-Light.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url("Inter-LightItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("Inter-Regular.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("Inter-Italic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("Inter-Medium.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 500; + font-display: swap; + src: url("Inter-MediumItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBold.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("Inter-Bold.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url("Inter-BoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBold.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("Inter-Black.woff2") format("woff2"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 900; + font-display: swap; + src: url("Inter-BlackItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url("InterDisplay-Thin.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 100; + font-display: swap; + src: url("InterDisplay-ThinItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url("InterDisplay-ExtraLight.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 200; + font-display: swap; + src: url("InterDisplay-ExtraLightItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url("InterDisplay-Light.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url("InterDisplay-LightItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("InterDisplay-Regular.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("InterDisplay-Italic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("InterDisplay-Medium.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 500; + font-display: swap; + src: url("InterDisplay-MediumItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("InterDisplay-SemiBold.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 600; + font-display: swap; + src: url("InterDisplay-SemiBoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("InterDisplay-Bold.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url("InterDisplay-BoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url("InterDisplay-ExtraBold.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 800; + font-display: swap; + src: url("InterDisplay-ExtraBoldItalic.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("InterDisplay-Black.woff2") format("woff2"); +} +@font-face { + font-family: "InterDisplay"; + font-style: italic; + font-weight: 900; + font-display: swap; + src: url("InterDisplay-BlackItalic.woff2") format("woff2"); +} +@font-feature-values InterVariable { + @character-variant { + cv01: 1; + cv02: 2; + cv03: 3; + cv04: 4; + cv05: 5; + cv06: 6; + cv07: 7; + cv08: 8; + cv09: 9; + cv10: 10; + cv11: 11; + cv12: 12; + cv13: 13; + alt-1: 1; + alt-3: 9; + open-4: 2; + open-6: 3; + open-9: 4; + lc-l-with-tail: 5; + simplified-u: 6; + alt-double-s: 7; + uc-i-with-serif: 8; + uc-g-with-spur: 10; + single-story-a: 11; + compact-lc-f: 12; + compact-lc-t: 13; + } + @styleset { + ss01: 1; + ss02: 2; + ss03: 3; + ss04: 4; + ss05: 5; + ss06: 6; + ss07: 7; + ss08: 8; + open-digits: 1; + disambiguation: 2; + disambiguation-except-zero: 4; + round-quotes-and-commas: 3; + square-punctuation: 7; + square-quotes: 8; + circled-characters: 5; + squared-characters: 6; + } +} +@font-feature-values Inter { + @character-variant { + cv01: 1; + cv02: 2; + cv03: 3; + cv04: 4; + cv05: 5; + cv06: 6; + cv07: 7; + cv08: 8; + cv09: 9; + cv10: 10; + cv11: 11; + cv12: 12; + cv13: 13; + alt-1: 1; + alt-3: 9; + open-4: 2; + open-6: 3; + open-9: 4; + lc-l-with-tail: 5; + simplified-u: 6; + alt-double-s: 7; + uc-i-with-serif: 8; + uc-g-with-spur: 10; + single-story-a: 11; + compact-lc-f: 12; + compact-lc-t: 13; + } + @styleset { + ss01: 1; + ss02: 2; + ss03: 3; + ss04: 4; + ss05: 5; + ss06: 6; + ss07: 7; + ss08: 8; + open-digits: 1; + disambiguation: 2; + disambiguation-except-zero: 4; + round-quotes-and-commas: 3; + square-punctuation: 7; + square-quotes: 8; + circled-characters: 5; + squared-characters: 6; + } +} +@font-feature-values InterDisplay { + @character-variant { + cv01: 1; + cv02: 2; + cv03: 3; + cv04: 4; + cv05: 5; + cv06: 6; + cv07: 7; + cv08: 8; + cv09: 9; + cv10: 10; + cv11: 11; + cv12: 12; + cv13: 13; + alt-1: 1; + alt-3: 9; + open-4: 2; + open-6: 3; + open-9: 4; + lc-l-with-tail: 5; + simplified-u: 6; + alt-double-s: 7; + uc-i-with-serif: 8; + uc-g-with-spur: 10; + single-story-a: 11; + compact-lc-f: 12; + compact-lc-t: 13; + } + @styleset { + ss01: 1; + ss02: 2; + ss03: 3; + ss04: 4; + ss05: 5; + ss06: 6; + ss07: 7; + ss08: 8; + open-digits: 1; + disambiguation: 2; + disambiguation-except-zero: 4; + round-quotes-and-commas: 3; + square-punctuation: 7; + square-quotes: 8; + circled-characters: 5; + squared-characters: 6; + } +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Thin.woff2") format("woff2"); + font-weight: 100; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ThinItalic.woff2") format("woff2"); + font-weight: 100; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraLight.woff2") format("woff2"); + font-weight: 200; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraLightItalic.woff2") format("woff2"); + font-weight: 200; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Light.woff2") format("woff2"); + font-weight: 300; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-LightItalic.woff2") format("woff2"); + font-weight: 300; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Regular.woff2") format("woff2"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Italic.woff2") format("woff2"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Medium.woff2") format("woff2"); + font-weight: 500; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-MediumItalic.woff2") format("woff2"); + font-weight: 500; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-SemiBold.woff2") format("woff2"); + font-weight: 600; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-SemiBoldItalic.woff2") format("woff2"); + font-weight: 600; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-Bold.woff2") format("woff2"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-BoldItalic.woff2") format("woff2"); + font-weight: 700; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); + font-weight: 800; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); + font-weight: 800; + font-style: italic; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraBold.woff2") format("woff2"); + font-weight: 900; + font-style: normal; +} +@font-face { + font-family: "Jetbrains Mono"; + src: url("/public/fonts/JetBrainsMono-ExtraBoldItalic.woff2") format("woff2"); + font-weight: 900; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype"); + font-weight: 100; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); + font-weight: 100; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype"); + font-weight: 200; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype"); + font-weight: 200; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Light.ttf") format("truetype"); + font-weight: 300; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Light-Italic.ttf") format("truetype"); + font-weight: 300; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft.ttf") format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft.ttf") format("truetype"); + font-weight: 500; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype"); + font-weight: 500; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-SemiBold.ttf") format("truetype"); + font-weight: 600; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-SemiBold-Italic.ttf") format("truetype"); + font-weight: 600; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Bold.ttf") format("truetype"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Bold-Italic.ttf") format("truetype"); + font-weight: 700; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Black.ttf") format("truetype"); + font-weight: 800; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype"); + font-weight: 800; + font-style: italic; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Black.ttf") format("truetype"); + font-weight: 900; + font-style: normal; +} +@font-face { + font-family: "Monocraft"; + src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype"); + font-weight: 900; + font-style: italic; +} +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', + monospace; + --color-gray-700: oklch(37.3% 0.034 259.733); + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --container-3xl: 48rem; + --font-weight-normal: 400; + --font-weight-bold: 700; + --leading-relaxed: 1.625; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring:where(:not(iframe)) { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + ::-webkit-calendar-picker-indicator { + line-height: 1; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden='until-found'])) { + display: none !important; + } +} +@layer utilities { + .invisible { + visibility: hidden; + } + .visible { + visibility: visible; + } + .absolute { + position: absolute; + } + .fixed { + position: fixed; + } + .relative { + position: relative; + } + .static { + position: static; + } + .inset-x-\[0\.3rem\] { + inset-inline: 0.3rem; + } + .top-1\/2 { + top: calc(1 / 2 * 100%); + } + .top-\[-0\.7em\] { + top: -0.7em; + } + .top-\[-0\.75rem\] { + top: -0.75rem; + } + .top-\[0\.6rem\] { + top: 0.6rem; + } + .right-\[0\.6rem\] { + right: 0.6rem; + } + .right-full { + right: 100%; + } + .bottom-\[-0\.7em\] { + bottom: -0.7em; + } + .bottom-\[-0\.55rem\] { + bottom: -0.55rem; + } + .bottom-\[-0\.75rem\] { + bottom: -0.75rem; + } + .left-\[0\.5em\] { + left: 0.5em; + } + .left-\[0\.625rem\] { + left: 0.625rem; + } + .z-10 { + z-index: 10; + } + .col-span-2 { + grid-column: span 2 / span 2; + } + .-m-\[0\.4rem\] { + margin: calc(0.4rem * -1); + } + .m-0 { + margin: 0px; + } + .m-\[-0\.1vw\] { + margin: -0.1vw; + } + .m-auto { + margin: auto; + } + .mx-\[0\.2vw\] { + margin-inline: 0.2vw; + } + .mx-\[1vw\] { + margin-inline: 1vw; + } + .my-\[-0\.15rem\] { + margin-block: -0.15rem; + } + .my-\[0\.625vw\] { + margin-block: 0.625vw; + } + .my-\[2\.5vw\] { + margin-block: 2.5vw; + } + .my-\[3vw\] { + margin-block: 3vw; + } + .my-\[5vw\] { + margin-block: 5vw; + } + .prose { + color: var(--tw-prose-body); + max-width: 65ch; + :where(p):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + :where([class~="lead"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-lead); + font-size: 1.25em; + line-height: 1.6; + margin-top: 1.2em; + margin-bottom: 1.2em; + } + :where(a):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-links); + text-decoration: underline; + font-weight: 500; + } + :where(strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-bold); + font-weight: 600; + } + :where(a strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(blockquote strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(thead th strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: decimal; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; + } + :where(ol[type="A"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + :where(ol[type="a"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + :where(ol[type="A" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: upper-alpha; + } + :where(ol[type="a" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: lower-alpha; + } + :where(ol[type="I"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: upper-roman; + } + :where(ol[type="i"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: lower-roman; + } + :where(ol[type="I" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: upper-roman; + } + :where(ol[type="i" s]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: lower-roman; + } + :where(ol[type="1"]):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: decimal; + } + :where(ul):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + list-style-type: disc; + margin-top: 1.25em; + margin-bottom: 1.25em; + padding-inline-start: 1.625em; + } + :where(ol > li):not(:where([class~="not-prose"], [class~="not-prose"] *))::marker { + font-weight: 400; + color: var(--tw-prose-counters); + } + :where(ul > li):not(:where([class~="not-prose"], [class~="not-prose"] *))::marker { + color: var(--tw-prose-bullets); + } + :where(dt):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.25em; + } + :where(hr):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + border-color: var(--tw-prose-hr); + border-top-width: 1px; + margin-top: 3em; + margin-bottom: 3em; + } + :where(blockquote):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 500; + font-style: italic; + color: var(--tw-prose-quotes); + border-inline-start-width: 0.25rem; + border-inline-start-color: var(--tw-prose-quote-borders); + quotes: "\201C""\201D""\2018""\2019"; + margin-top: 1.6em; + margin-bottom: 1.6em; + padding-inline-start: 1em; + } + :where(blockquote p:first-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::before { + content: open-quote; + } + :where(blockquote p:last-of-type):not(:where([class~="not-prose"], [class~="not-prose"] *))::after { + content: close-quote; + } + :where(h1):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 800; + font-size: 2.25em; + margin-top: 0; + margin-bottom: 0.8888889em; + line-height: 1.1111111; + } + :where(h1 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 900; + color: inherit; + } + :where(h2):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 700; + font-size: 1.5em; + margin-top: 2em; + margin-bottom: 1em; + line-height: 1.3333333; + } + :where(h2 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 800; + color: inherit; + } + :where(h3):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + font-size: 1.25em; + margin-top: 1.6em; + margin-bottom: 0.6em; + line-height: 1.6; + } + :where(h3 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + :where(h4):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + margin-top: 1.5em; + margin-bottom: 0.5em; + line-height: 1.5; + } + :where(h4 strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 700; + color: inherit; + } + :where(img):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(picture):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + display: block; + margin-top: 2em; + margin-bottom: 2em; + } + :where(video):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(kbd):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + font-weight: 500; + font-family: inherit; + color: var(--tw-prose-kbd); + box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows); + font-size: 0.875em; + border-radius: 0.3125rem; + padding-top: 0.1875em; + padding-inline-end: 0.375em; + padding-bottom: 0.1875em; + padding-inline-start: 0.375em; + } + :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-code); + font-weight: 600; + font-size: 0.875em; + } + :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *))::before { + content: "`"; + } + :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *))::after { + content: "`"; + } + :where(a code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(h1 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(h2 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + font-size: 0.875em; + } + :where(h3 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + font-size: 0.9em; + } + :where(h4 code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(blockquote code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(thead th code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: inherit; + } + :where(pre):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-pre-code); + background-color: var(--tw-prose-pre-bg); + overflow-x: auto; + font-weight: 400; + font-size: 0.875em; + line-height: 1.7142857; + margin-top: 1.7142857em; + margin-bottom: 1.7142857em; + border-radius: 0.375rem; + padding-top: 0.8571429em; + padding-inline-end: 1.1428571em; + padding-bottom: 0.8571429em; + padding-inline-start: 1.1428571em; + } + :where(pre code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + background-color: transparent; + border-width: 0; + border-radius: 0; + padding: 0; + font-weight: inherit; + color: inherit; + font-size: inherit; + font-family: inherit; + line-height: inherit; + } + :where(pre code):not(:where([class~="not-prose"], [class~="not-prose"] *))::before { + content: none; + } + :where(pre code):not(:where([class~="not-prose"], [class~="not-prose"] *))::after { + content: none; + } + :where(table):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + width: 100%; + table-layout: auto; + margin-top: 2em; + margin-bottom: 2em; + font-size: 0.875em; + line-height: 1.7142857; + } + :where(thead):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-th-borders); + } + :where(thead th):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-headings); + font-weight: 600; + vertical-align: bottom; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; + } + :where(tbody tr):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + border-bottom-width: 1px; + border-bottom-color: var(--tw-prose-td-borders); + } + :where(tbody tr:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + border-bottom-width: 0; + } + :where(tbody td):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + vertical-align: baseline; + } + :where(tfoot):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + border-top-width: 1px; + border-top-color: var(--tw-prose-th-borders); + } + :where(tfoot td):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + vertical-align: top; + } + :where(th, td):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + text-align: start; + } + :where(figure > *):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + :where(figcaption):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + color: var(--tw-prose-captions); + font-size: 0.875em; + line-height: 1.4285714; + margin-top: 0.8571429em; + } + --tw-prose-body: oklch(37.3% 0.034 259.733); + --tw-prose-headings: oklch(21% 0.034 264.665); + --tw-prose-lead: oklch(44.6% 0.03 256.802); + --tw-prose-links: oklch(21% 0.034 264.665); + --tw-prose-bold: oklch(21% 0.034 264.665); + --tw-prose-counters: oklch(55.1% 0.027 264.364); + --tw-prose-bullets: oklch(87.2% 0.01 258.338); + --tw-prose-hr: oklch(92.8% 0.006 264.531); + --tw-prose-quotes: oklch(21% 0.034 264.665); + --tw-prose-quote-borders: oklch(92.8% 0.006 264.531); + --tw-prose-captions: oklch(55.1% 0.027 264.364); + --tw-prose-kbd: oklch(21% 0.034 264.665); + --tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent); + --tw-prose-code: oklch(21% 0.034 264.665); + --tw-prose-pre-code: oklch(92.8% 0.006 264.531); + --tw-prose-pre-bg: oklch(27.8% 0.033 256.848); + --tw-prose-th-borders: oklch(87.2% 0.01 258.338); + --tw-prose-td-borders: oklch(92.8% 0.006 264.531); + --tw-prose-invert-body: oklch(87.2% 0.01 258.338); + --tw-prose-invert-headings: #fff; + --tw-prose-invert-lead: oklch(70.7% 0.022 261.325); + --tw-prose-invert-links: #fff; + --tw-prose-invert-bold: #fff; + --tw-prose-invert-counters: oklch(70.7% 0.022 261.325); + --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802); + --tw-prose-invert-hr: oklch(37.3% 0.034 259.733); + --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542); + --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733); + --tw-prose-invert-captions: oklch(70.7% 0.022 261.325); + --tw-prose-invert-kbd: #fff; + --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%); + --tw-prose-invert-code: #fff; + --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338); + --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); + --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802); + --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733); + font-size: 1rem; + line-height: 1.75; + :where(picture > img):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + margin-bottom: 0; + } + :where(li):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0.5em; + margin-bottom: 0.5em; + } + :where(ol > li):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + :where(ul > li):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-start: 0.375em; + } + :where(.prose > ul > li p):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; + } + :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 1.25em; + } + :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 1.25em; + } + :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-bottom: 1.25em; + } + :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0.75em; + margin-bottom: 0.75em; + } + :where(dl):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 1.25em; + margin-bottom: 1.25em; + } + :where(dd):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0.5em; + padding-inline-start: 1.625em; + } + :where(hr + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + } + :where(h2 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + } + :where(h3 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + } + :where(h4 + *):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + } + :where(thead th:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-start: 0; + } + :where(thead th:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-end: 0; + } + :where(tbody td, tfoot td):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-top: 0.5714286em; + padding-inline-end: 0.5714286em; + padding-bottom: 0.5714286em; + padding-inline-start: 0.5714286em; + } + :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-start: 0; + } + :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-inline-end: 0; + } + :where(figure):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 2em; + margin-bottom: 2em; + } + :where(.prose > :first-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-top: 0; + } + :where(.prose > :last-child):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + margin-bottom: 0; + } + } + .mt-\[0\.5rem\] { + margin-top: 0.5rem; + } + .mt-\[0\.625vw\] { + margin-top: 0.625vw; + } + .mt-\[1rem\] { + margin-top: 1rem; + } + .mt-\[1vw\] { + margin-top: 1vw; + } + .mt-\[8vw\] { + margin-top: 8vw; + } + .mt-\[10vw\] { + margin-top: 10vw; + } + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + .mr-\[0\.1vw\] { + margin-right: 0.1vw; + } + .mr-\[2\.5vh\] { + margin-right: 2.5vh; + } + .mb-0 { + margin-bottom: 0px; + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .mb-\[0\.30rem\] { + margin-bottom: 0.30rem; + } + .mb-\[1\.5rem\] { + margin-bottom: 1.5rem; + } + .mb-\[1\.5625vw\] { + margin-bottom: 1.5625vw; + } + .mb-\[1rem\] { + margin-bottom: 1rem; + } + .mb-\[5vw\] { + margin-bottom: 5vw; + } + .mb-\[7vw\] { + margin-bottom: 7vw; + } + .-ml-\[0\.1rem\] { + margin-left: calc(0.1rem * -1); + } + .ml-\[-4vw\] { + margin-left: -4vw; + } + .ml-auto { + margin-left: auto; + } + .block { + display: block; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline-block { + display: inline-block; + } + .inline-flex { + display: inline-flex; + } + .table { + display: table; + } + .h-0 { + height: 0px; + } + .h-38 { + height: calc(var(--spacing) * 38); + } + .h-\[9\.5vw\] { + height: 9.5vw; + } + .h-\[40rem\] { + height: 40rem; + } + .h-\[62\%\] { + height: 62%; + } + .h-\[80svh\] { + height: 80svh; + } + .h-\[85svh\] { + height: 85svh; + } + .h-\[97vh\] { + height: 97vh; + } + .h-\[100\%\] { + height: 100%; + } + .h-full { + height: 100%; + } + .max-h-\[80svh\] { + max-height: 80svh; + } + .min-h-0 { + min-height: 0px; + } + .w-0 { + width: 0px; + } + .w-8 { + width: calc(var(--spacing) * 8); + } + .w-\[30\%\] { + width: 30%; + } + .w-\[67\%\] { + width: 67%; + } + .w-\[70\%\] { + width: 70%; + } + .w-\[75rem\] { + width: 75rem; + } + .w-\[95vw\] { + width: 95vw; + } + .w-\[100\%\] { + width: 100%; + } + .w-\[334\%\] { + width: 334%; + } + .w-full { + width: 100%; + } + .max-w-3xl { + max-width: var(--container-3xl); + } + .min-w-0 { + min-width: 0px; + } + .flex-1 { + flex: 1; + } + .shrink-0 { + flex-shrink: 0; + } + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .scale-150 { + --tw-scale-x: 150%; + --tw-scale-y: 150%; + --tw-scale-z: 150%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .cursor-grab { + cursor: grab; + } + .cursor-pointer { + cursor: pointer; + } + .touch-none { + touch-action: none; + } + .resize { + resize: both; + } + .\[scrollbar-width\:none\] { + scrollbar-width: none; + } + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + .grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + .grid-cols-\[29\%_1fr\] { + grid-template-columns: 29% 1fr; + } + .flex-col { + flex-direction: column; + } + .flex-wrap { + flex-wrap: wrap; + } + .items-baseline { + align-items: baseline; + } + .items-center { + align-items: center; + } + .justify-between { + justify-content: space-between; + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .gap-8 { + gap: calc(var(--spacing) * 8); + } + .gap-10 { + gap: calc(var(--spacing) * 10); + } + .gap-16 { + gap: calc(var(--spacing) * 16); + } + .gap-\[0\.5rem\] { + gap: 0.5rem; + } + .gap-\[0\.0625rem\] { + gap: 0.0625rem; + } + .gap-\[1\.25vw\] { + gap: 1.25vw; + } + .gap-\[1ch\] { + gap: 1ch; + } + .gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } + .gap-x-8 { + column-gap: calc(var(--spacing) * 8); + } + .gap-x-\[1ch\] { + column-gap: 1ch; + } + .gap-x-\[1rem\] { + column-gap: 1rem; + } + .gap-x-\[2rem\] { + column-gap: 2rem; + } + .gap-x-\[5vw\] { + column-gap: 5vw; + } + :where(.space-x-\[1\.25vw\] > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(1.25vw * var(--tw-space-x-reverse)); + margin-inline-end: calc(1.25vw * calc(1 - var(--tw-space-x-reverse))); + } + .gap-y-2 { + row-gap: calc(var(--spacing) * 2); + } + .gap-y-4 { + row-gap: calc(var(--spacing) * 4); + } + .gap-y-\[0\.4rem\] { + row-gap: 0.4rem; + } + .self-center { + align-self: center; + } + .self-start { + align-self: flex-start; + } + .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .overflow-auto { + overflow: auto; + } + .overflow-hidden { + overflow: hidden; + } + .overflow-x-hidden { + overflow-x: hidden; + } + .overflow-y-auto { + overflow-y: auto; + } + .rounded-\[0\.3rem\] { + border-radius: 0.3rem; + } + .rounded-\[0\.4rem\] { + border-radius: 0.4rem; + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-\[0\.01rem\] { + border-style: var(--tw-border-style); + border-width: 0.01rem; + } + .border-\[0\.1rem\] { + border-style: var(--tw-border-style); + border-width: 0.1rem; + } + .border-\[0\.1vw\] { + border-style: var(--tw-border-style); + border-width: 0.1vw; + } + .border-\[0\.2rem\] { + border-style: var(--tw-border-style); + border-width: 0.2rem; + } + .border-\[0\.05rem\] { + border-style: var(--tw-border-style); + border-width: 0.05rem; + } + .border-\[0\.25vh\] { + border-style: var(--tw-border-style); + border-width: 0.25vh; + } + .border-\[0\.125rem\] { + border-style: var(--tw-border-style); + border-width: 0.125rem; + } + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + .border-\(--accent\)\! { + border-color: var(--accent) !important; + } + .border-\(--alt\) { + border-color: var(--alt); + } + .border-\(--alt\)\/30 { + border-color: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--alt) 30%, transparent); + } + } + .border-\(--secondary\)\/60 { + border-color: var(--secondary); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--secondary) 60%, transparent); + } + } + .border-\(--text\) { + border-color: var(--text); + } + .border-\[color\:var\(--alt\)\] { + border-color: var(--alt); + } + .border-\[var\(--alt\)\] { + border-color: var(--alt); + } + .bg-\(--alt\)\/25 { + background-color: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--alt) 25%, transparent); + } + } + .bg-\(--background\) { + background-color: var(--background); + } + .bg-\(--extra\)\/70 { + background-color: var(--extra); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--extra) 70%, transparent); + } + } + .bg-\(--secondary\) { + background-color: var(--secondary); + } + .bg-\[var\(--background\)\] { + background-color: var(--background); + } + .bg-\[var\(--text\)\] { + background-color: var(--text); + } + .bg-black\/20 { + background-color: color-mix(in srgb, #000 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent); + } + } + .bg-black\/30 { + background-color: color-mix(in srgb, #000 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 30%, transparent); + } + } + .bg-white\/2 { + background-color: color-mix(in srgb, #fff 2%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 2%, transparent); + } + } + .bg-white\/\[0\.03\] { + background-color: color-mix(in srgb, #fff 3%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 3%, transparent); + } + } + .bg-\[linear-gradient\(to_bottom\,\#181825\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,#181825,var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--background\)\,var\(--cmp-bg\,transparent\)\)\] { + background-image: linear-gradient(to bottom,var(--background),var(--cmp-bg,transparent)); + } + .fill-\[\#7ed4fb\]\/50 { + fill: color-mix(in oklab, #7ed4fb 50%, transparent); + } + .stroke-\[var\(--alt\)\] { + stroke: var(--alt); + } + .stroke-\[var\(--primary\)\] { + stroke: var(--primary); + } + .object-cover { + object-fit: cover; + } + .p-0 { + padding: 0px; + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-8 { + padding: calc(var(--spacing) * 8); + } + .p-\[0\.2rem\] { + padding: 0.2rem; + } + .p-\[0\.4rem\] { + padding: 0.4rem; + } + .p-\[0\.8em\] { + padding: 0.8em; + } + .p-\[1rem\] { + padding: 1rem; + } + .p-\[2\.2svh\] { + padding: 2.2svh; + } + .p-\[3vw\] { + padding: 3vw; + } + .px-3\.5 { + padding-inline: calc(var(--spacing) * 3.5); + } + .px-\[0\.1vw\] { + padding-inline: 0.1vw; + } + .px-\[0\.4rem\] { + padding-inline: 0.4rem; + } + .px-\[0\.5em\] { + padding-inline: 0.5em; + } + .px-\[0\.6rem\] { + padding-inline: 0.6rem; + } + .px-\[0\.625rem\] { + padding-inline: 0.625rem; + } + .py-\(--ypad\) { + padding-block: var(--ypad); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .py-16 { + padding-block: calc(var(--spacing) * 16); + } + .py-\[0\.1rem\] { + padding-block: 0.1rem; + } + .py-\[0\.625vw\] { + padding-block: 0.625vw; + } + .pt-3 { + padding-top: calc(var(--spacing) * 3); + } + .pt-\[1\.0625em\] { + padding-top: 1.0625em; + } + .pt-\[1vw\] { + padding-top: 1vw; + } + .pt-\[5vw\] { + padding-top: 5vw; + } + .pt-\[calc\(var\(--ypad\)\+0\.0625rem\)\] { + padding-top: calc(var(--ypad) + 0.0625rem); + } + .pr-\[1\.25vw\] { + padding-right: 1.25vw; + } + .text-left { + text-align: left; + } + .text-right { + text-align: right; + } + .font-\(family-name\:--font-normal\) { + font-family: var(--font-normal); + } + .font-\[\'JetBrains_Mono\'\] { + font-family: 'JetBrains Mono'; + } + .font-mono { + font-family: var(--font-mono); + } + .text-\[0\.6rem\] { + font-size: 0.6rem; + } + .text-\[0\.8rem\] { + font-size: 0.8rem; + } + .text-\[0\.96vw\] { + font-size: 0.96vw; + } + .text-\[0\.675rem\] { + font-size: 0.675rem; + } + .text-\[1\.125rem\] { + font-size: 1.125rem; + } + .text-\[1\.375rem\] { + font-size: 1.375rem; + } + .text-\[1rem\] { + font-size: 1rem; + } + .text-\[2\.5vw\] { + font-size: 2.5vw; + } + .text-\[3\.5vw\] { + font-size: 3.5vw; + } + .text-\[3vw\] { + font-size: 3vw; + } + .text-\[5vw\] { + font-size: 5vw; + } + .text-\[17\.6px\] { + font-size: 17.6px; + } + .text-\[60\%\] { + font-size: 60%; + } + .text-\[75\%\] { + font-size: 75%; + } + .text-\[80\%\] { + font-size: 80%; + } + .text-\[85\%\] { + font-size: 85%; + } + .text-\[90\%\] { + font-size: 90%; + } + .text-\[95\%\] { + font-size: 95%; + } + .text-\[110\%\] { + font-size: 110%; + } + .text-\[130\%\] { + font-size: 130%; + } + .text-\[170\%\] { + font-size: 170%; + } + .leading-\[1\.7\] { + --tw-leading: 1.7; + line-height: 1.7; + } + .leading-\[normal\] { + --tw-leading: normal; + line-height: normal; + } + .leading-relaxed { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + .wrap-anywhere { + overflow-wrap: anywhere; + } + .whitespace-nowrap { + white-space: nowrap; + } + .text-\(--accent\) { + color: var(--accent); + } + .text-\(--alt\) { + color: var(--alt); + } + .text-\(--alt\)\/80 { + color: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--alt) 80%, transparent); + } + } + .text-\(--background\) { + color: var(--background); + } + .text-\(--primary\) { + color: var(--primary); + } + .text-\(--secondary\) { + color: var(--secondary); + } + .text-\[\#00ADD7\] { + color: #00ADD7; + } + .text-\[\#00f1ff\] { + color: #00f1ff; + } + .text-\[\#5C6CC1\] { + color: #5C6CC1; + } + .text-\[\#46d46c\] { + color: #46d46c; + } + .text-\[\#54D7A9\] { + color: #54D7A9; + } + .text-\[\#739ebb\] { + color: #739ebb; + } + .text-\[\#897ccb\] { + color: #897ccb; + } + .text-\[\#5874FF\] { + color: #5874FF; + } + .text-\[\#BDC3C7\] { + color: #BDC3C7; + } + .text-\[\#C7727F\] { + color: #C7727F; + } + .text-\[\#D8C44B\] { + color: #D8C44B; + } + .text-\[\#D27D9B\] { + color: #D27D9B; + } + .text-\[\#ED532D\] { + color: #ED532D; + } + .text-\[\#F5A670\] { + color: #F5A670; + } + .text-\[\#F9B010\] { + color: #F9B010; + } + .text-\[\#F16265\] { + color: #F16265; + } + .text-\[\#FF8019\] { + color: #FF8019; + } + .text-\[\#FFFFFF\] { + color: #FFFFFF; + } + .text-\[\#a34eeb\] { + color: #a34eeb; + } + .text-\[\%v\] { + color: %v; + } + .text-\[color\:var\(--alt\)\] { + color: var(--alt); + } + .text-\[var\(--accent\)\] { + color: var(--accent); + } + .text-\[var\(--secondary\)\] { + color: var(--secondary); + } + .no-underline { + text-decoration-line: none; + } + .opacity-0 { + opacity: 0%; + } + .shadow-\[0_0_1\.5rem_color-mix\(in_srgb\,var\(--accent\)_25\%\,transparent\)\] { + --tw-shadow: 0 0 1.5rem var(--tw-shadow-color, var(--accent)); + @supports (color: color-mix(in lab, red, red)) { + --tw-shadow: 0 0 1.5rem var(--tw-shadow-color, color-mix(in srgb,var(--accent) 25%,transparent)); + } + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-150 { + --tw-duration: 150ms; + transition-duration: 150ms; + } + .select-text { + -webkit-user-select: text; + user-select: text; + } + .\[--border-py\:0\.5rem\] { + --border-py: 0.5rem; + } + .\[--border-py\:0\.25rem\] { + --border-py: 0.25rem; + } + .\[--border-py\:0\.75rem\] { + --border-py: 0.75rem; + } + .\[--border-py\:0\.875rem\] { + --border-py: 0.875rem; + } + .\[--border-py\:1\.25rem\] { + --border-py: 1.25rem; + } + .\[--ypad\:var\(--border-py\,0\.875rem\)\] { + --ypad: var(--border-py,0.875rem); + } + @media (hover: hover) { + .group-hover\:text-\[var\(--alt\)\]:is(:where(.group):hover *) { + color: var(--alt); + } + .group-hover\:text-gray-700:is(:where(.group):hover *) { + color: var(--color-gray-700); + } + .group-hover\:underline:is(:where(.group):hover *) { + text-decoration-line: underline; + } + } + .group-data-copied\:block:is(:where(.group)[data-copied] *) { + display: block; + } + .group-data-copied\/copy\:block:is(:where(.group\/copy)[data-copied] *) { + display: block; + } + .group-data-copied\/copy\:bg-\(--primary\)\/25\!:is(:where(.group\/copy)[data-copied] *) { + background-color: var(--primary) !important; + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--primary) 25%, transparent) !important; + } + } + .after\:absolute::after { + content: var(--tw-content); + position: absolute; + } + .after\:inset-0::after { + content: var(--tw-content); + inset: 0px; + } + .after\:z-0::after { + content: var(--tw-content); + z-index: 0; + } + @media (hover: hover) { + .hover\:bg-\(--alt\)\/25:hover { + background-color: var(--alt); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-\(--alt\)\/25:hover { + background-color: color-mix(in oklab, var(--alt) 25%, transparent); + } + } + .hover\:bg-\(--secondary\)\/15:hover { + background-color: var(--secondary); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-\(--secondary\)\/15:hover { + background-color: color-mix(in oklab, var(--secondary) 15%, transparent); + } + } + .hover\:bg-white\/5:hover { + background-color: color-mix(in srgb, #fff 5%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/5:hover { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } + .hover\:bg-white\/10:hover { + background-color: color-mix(in srgb, #fff 10%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/10:hover { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + .hover\:text-\(--accent\):hover { + color: var(--accent); + } + .hover\:text-\[var\(--alt\)\]:hover { + color: var(--alt); + } + .hover\:text-\[var\(--secondary\)\]:hover { + color: var(--secondary); + } + .hover\:text-gray-700:hover { + color: var(--color-gray-700); + } + .hover\:no-underline:hover { + text-decoration-line: none; + } + .hover\:underline:hover { + text-decoration-line: underline; + } + } + .data-copied\:animate-\[bump_0\.25s\][data-copied] { + animation: bump 0.25s; + } + .data-copied\:bg-\(--primary\)\/25\![data-copied] { + background-color: var(--primary) !important; + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--primary) 25%, transparent) !important; + } + } + @media (width >= 40rem) { + .sm\:invisible { + visibility: hidden; + } + .sm\:visible { + visibility: visible; + } + .sm\:top-\[-0\.75vw\] { + top: -0.75vw; + } + .sm\:bottom-\[-0\.75vw\] { + bottom: -0.75vw; + } + .sm\:left-\[0\.625vw\] { + left: 0.625vw; + } + .sm\:col-span-2 { + grid-column: span 2 / span 2; + } + .sm\:m-0 { + margin: 0px; + } + .sm\:my-\[0\.625vw\] { + margin-block: 0.625vw; + } + .sm\:my-\[2\.5vw\] { + margin-block: 2.5vw; + } + .sm\:my-\[2\.25vw\] { + margin-block: 2.25vw; + } + .sm\:mt-\[0\.625vw\] { + margin-top: 0.625vw; + } + .sm\:mt-\[0vw\] { + margin-top: 0vw; + } + .sm\:mr-0 { + margin-right: 0px; + } + .sm\:mr-\[2\.5vw\] { + margin-right: 2.5vw; + } + .sm\:mb-\[1\.5625vw\] { + margin-bottom: 1.5625vw; + } + .sm\:mb-\[2vw\] { + margin-bottom: 2vw; + } + .sm\:contents { + display: contents; + } + .sm\:flex { + display: flex; + } + .sm\:grid { + display: grid; + } + .sm\:h-0 { + height: 0px; + } + .sm\:h-\[30vw\] { + height: 30vw; + } + .sm\:h-\[35vw\] { + height: 35vw; + } + .sm\:h-\[38vw\] { + height: 38vw; + } + .sm\:h-full { + height: 100%; + } + .sm\:max-h-\[24vw\] { + max-height: 24vw; + } + .sm\:w-0 { + width: 0px; + } + .sm\:w-\[40\%\] { + width: 40%; + } + .sm\:w-\[60\%\] { + width: 60%; + } + .sm\:w-\[68\.75vw\] { + width: 68.75vw; + } + .sm\:w-full { + width: 100%; + } + .sm\:grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + .sm\:grid-cols-\[1fr_1fr_1fr\] { + grid-template-columns: 1fr 1fr 1fr; + } + .sm\:grid-cols-\[2fr_3fr\] { + grid-template-columns: 2fr 3fr; + } + .sm\:gap-\[1\.25vw\] { + gap: 1.25vw; + } + .sm\:gap-x-\[0\.625vw\] { + column-gap: 0.625vw; + } + .sm\:overflow-visible { + overflow: visible; + } + .sm\:border-\[0\.1vw\] { + border-style: var(--tw-border-style); + border-width: 0.1vw; + } + .sm\:border-\[0\.2vw\] { + border-style: var(--tw-border-style); + border-width: 0.2vw; + } + .sm\:border-\[0\.125vw\] { + border-style: var(--tw-border-style); + border-width: 0.125vw; + } + .sm\:border-solid { + --tw-border-style: solid; + border-style: solid; + } + .sm\:p-\[1vw\] { + padding: 1vw; + } + .sm\:p-\[2\.2vw\] { + padding: 2.2vw; + } + .sm\:px-\[0\.625vw\] { + padding-inline: 0.625vw; + } + .sm\:pt-0 { + padding-top: 0px; + } + .sm\:pt-\[1\.0625vw\] { + padding-top: 1.0625vw; + } + .sm\:pl-\[1\.25vw\] { + padding-left: 1.25vw; + } + .sm\:text-\[1\.125vw\] { + font-size: 1.125vw; + } + .sm\:text-\[1\.375vw\] { + font-size: 1.375vw; + } + .sm\:text-\[1vw\] { + font-size: 1vw; + } + .sm\:text-\[100\%\] { + font-size: 100%; + } + } + @media (width >= 48rem) { + .md\:grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + } + .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar { + display: none; + } + .\[\&\>\*\+\*\]\:mt-\[-0\.1rem\] > * + * { + margin-top: -0.1rem; + } +} +:root { + --primary: #54d7a9; + --secondary: #9b7eca; + --accent: #7ed4fb; + --extra: #8fcc75; + --text: #ffffff; + --alt: #999999; + --background: #000000; + --font-mono: "Jetbrains Mono", monospace; + --font-normal: "Inter", system-ui, sans-serif; +} +html { + background-color: var(--background); + color: var(--text); + font-family: var(--font-mono); + user-select: none; + font-size: 1vw; +} +body { + min-height: 100vh; + display: grid; + place-items: center; +} +@layer base { + a { + font-weight: 300; + text-decoration: none; + color: var(--secondary); + transition-duration: 0.2s; + transition-property: color, text-decoration; + } + a:hover { + text-decoration: underline; + color: var(--accent); + } +} +.scrollbox::-webkit-scrollbar { + width: 1.5rem; +} +.scrollbox::-webkit-scrollbar-track { + background: transparent; + border-left: 0.1rem solid var(--alt); +} +.scrollbox::-webkit-scrollbar-thumb { + background: var(--primary); + border: 0.3rem solid transparent; + background-clip: padding-box; + border-radius: 0; +} +.scrollbox::-webkit-scrollbar-thumb:hover { + background: var(--accent); +} +@supports not selector(::-webkit-scrollbar) { + .scrollbox { + scrollbar-color: var(--primary) transparent; + } +} +.prose { + --tw-prose-body: var(--text); + --tw-prose-headings: var(--primary); + --tw-prose-links: var(--secondary); + --tw-prose-bold: var(--text); + --tw-prose-bullets: var(--alt); + --tw-prose-counters: var(--alt); + --tw-prose-hr: var(--alt); + --tw-prose-quotes: var(--text); + --tw-prose-quote-borders: var(--alt); + --tw-prose-captions: var(--alt); + --tw-prose-code: var(--extra); + --tw-prose-pre-code: var(--text); + --tw-prose-pre-bg: rgb(0 0 0 / 0.3); + --tw-prose-th-borders: var(--alt); + --tw-prose-td-borders: var(--alt); +} +.prose a.footnote-ref, .prose a.footnote-ref:hover { + text-decoration: none; +} +.prose code::before, .prose code::after { + content: none; +} +.prose :not(pre) > code { + padding: 0.1em 0.4em; + border-radius: 0.3em; + background: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + background: color-mix(in srgb, var(--alt) 25%, transparent); + } + font-size: 0.9em; +} +.prose pre, .prose code { + font-family: var(--font-mono); +} +.js .footnotes { + display: none; +} +.sidenotes { + position: fixed; + overflow: hidden; + pointer-events: none; +} +.sidenote { + position: absolute; + left: 0; + right: 0; + background: var(--background); + font-family: var(--font-normal); + font-size: 16px; + line-height: 1.4; + pointer-events: auto; +} +.sidenotes.bordered .sidenote { + border: 0.1rem solid var(--alt); + padding: 0.4rem 0.6rem; +} +.sidenote-num { + font-size: 70%; + color: var(--secondary); + margin-right: 0.15em; +} +.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .kt { + color: var(--secondary); +} +.chroma .nf, .chroma .nc, .chroma .nb { + color: var(--primary); +} +.chroma .s, .chroma .sa, .chroma .sb, .chroma .sc, .chroma .dl, .chroma .sd, .chroma .s2, .chroma .se, .chroma .sh, .chroma .si, .chroma .sx, .chroma .sr, .chroma .s1, .chroma .ss { + color: var(--extra); +} +.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .il, .chroma .mo { + color: var(--primary); +} +.chroma .c, .chroma .ch, .chroma .cm, .chroma .c1, .chroma .cs, .chroma .cp, .chroma .cpf { + color: var(--alt); + font-style: italic; +} +.codeblock { + margin: 1.2em 0; + border: 0.1rem solid var(--alt); + border-radius: 0.4rem; + background: rgb(0 0 0 / 0.3); + overflow: hidden; +} +.codeblock::before { + content: attr(data-lang); + display: block; + padding: 0.2em 0.8em; + border-bottom: 0.1rem solid var(--alt); + font-size: 0.75em; + color: var(--alt); +} +.codeblock[data-lang=""]::before { + display: none; +} +.codeblock pre { + margin: 0; + padding: 0.8em 1em; + background: transparent; + border-radius: 0; + overflow-x: auto; + font-size: 0.85em; + line-height: 1.5; +} +@keyframes pop { + 50% { + transform: scale(1.3); + } +} +[data-copied] svg { + animation: pop 0.25s; +} +@keyframes bump { + 50% { + transform: scale(1.03); + } +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-space-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-leading { + syntax: "*"; + inherits: false; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-content { + syntax: "*"; + initial-value: ""; + inherits: false; +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-x-reverse: 0; + --tw-border-style: solid; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-duration: initial; + --tw-content: ""; + } + } +} diff --git a/public/styles/terminal.css b/public/styles/terminal.css deleted file mode 100644 index e272b9c..0000000 --- a/public/styles/terminal.css +++ /dev/null @@ -1,71 +0,0 @@ -@import url("@styles/fonts/JetBrainsMono.css"); - -@font-face { - font-family: "Monocraft"; - src: url("/fonts/Monocraft.ttf") format("truetype"); - font-display: swap; -} - -:root { - --primary: #54d7a9; - --secondary: #9b7eca; - --accent: #7ed4fb; - --extra: #8fcc75; - --text: #ffffff; - --alt: #999999; - --background: #000000; - --font-mono: "Jetbrains Mono", monospace; - --font-normal: "Jetbrains Mono"; -} - -html { - background-color: var(--background); - color: var(--text); - font-family: var(--font-mono); - user-select: none; - - font-size: 1vw; -} - -body { - min-height: 100vh; - display: grid; - place-items: center; -} - -@layer base { - a { - font-weight: 300; - text-decoration: none; - color: var(--secondary); - transition-duration: 0.2s; - transition-property: color, text-decoration; - } - a:hover { - text-decoration: underline; - color: var(--accent); - } -} - -.scrollbox::-webkit-scrollbar { - width: 1.5rem; -} -.scrollbox::-webkit-scrollbar-track { - background: transparent; - border-left: 0.1rem solid var(--alt); -} -.scrollbox::-webkit-scrollbar-thumb { - background: var(--primary); - border: 0.3rem solid transparent; - background-clip: padding-box; - border-radius: 0; -} -.scrollbox::-webkit-scrollbar-thumb:hover { - background: var(--accent); -} - -@supports not selector(::-webkit-scrollbar) { - .scrollbox { - scrollbar-color: var(--primary) transparent; - } -} diff --git a/run.sh b/run.sh index 578be5e..8e53a9b 100755 --- a/run.sh +++ b/run.sh @@ -11,7 +11,7 @@ trap cleanup SIGINT SIGTERM EXIT templ generate --watch --proxy="http://localhost:8080" --cmd="DEV=1 go run ." --watch-pattern='(.+\.go$)|(.+\.templ$)|(.+_templ\.txt$)|(.+\.css$)|(.+\.js$)|(.+\.md$)|(.+\.svg$)|(.+\.json$)|(.+\.html$)|(.+\.txt$)|(.+\.ttf$)|(.+\.woff2?$)|(.+\.png$)|(.+\.jpg$)|(.+\.webp$)' & TEMPL_PID=$! -tail -f /dev/null | tailwindcss -i ./public/main.css -o ./public/style.css --watch & +tail -f /dev/null | tailwindcss -i ./public/styles/main.css -o ./public/styles/style.css --watch & TAILWIND_PID=$! echo "[dev] Watching Templ (PID $TEMPL_PID) and Tailwind (PID $TAILWIND_PID)..." diff --git a/website.go b/website.go index 47b4051..b54030c 100644 --- a/website.go +++ b/website.go @@ -7,6 +7,7 @@ import ( "encoding/json" "errors" "fmt" + "html/template" "io/fs" "log" "net/http" @@ -18,9 +19,15 @@ import ( "time" "github.com/a-h/templ" + chromahtml "github.com/alecthomas/chroma/v2/formatters/html" "github.com/yuin/goldmark" + highlighting "github.com/yuin/goldmark-highlighting/v2" + "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/renderer/html" + "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" "gopkg.in/yaml.v3" ) @@ -167,8 +174,25 @@ type Blog struct { } var md = goldmark.New( - goldmark.WithExtensions(extension.GFM, extension.Footnote), + goldmark.WithExtensions( + extension.GFM, + extension.Footnote, + highlighting.NewHighlighting( + highlighting.WithFormatOptions(chromahtml.WithClasses(true)), + highlighting.WithWrapperRenderer(func(w util.BufWriter, ctx highlighting.CodeBlockContext, entering bool) { + if entering { + lang, _ := ctx.Language() + fmt.Fprintf(w, `
`, template.HTMLEscapeString(string(lang))) + } else { + w.WriteString(`
`) + } + }), + ), + ), goldmark.WithRendererOptions(html.WithUnsafe()), + goldmark.WithParserOptions( + parser.WithASTTransformers(util.Prioritized(externalLinks{}, 100)), + ), ) type frontmatter struct { @@ -295,6 +319,33 @@ func latestBlog(blogs []Blog) *Blog { return &blogs[0] } +type externalLinks struct{} + +func openInNewTab(n ast.Node) { + n.SetAttributeString("target", []byte("_blank")) + n.SetAttributeString("rel", []byte("noopener noreferrer")) +} + +func (externalLinks) Transform(doc *ast.Document, reader text.Reader, pc parser.Context) { + src := reader.Source() + ast.Walk(doc, func(n ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering { + return ast.WalkContinue, nil + } + switch link := n.(type) { + case *ast.Link: + if bytes.HasPrefix(link.Destination, []byte("http")) { + openInNewTab(link) + } + case *ast.AutoLink: + if link.AutoLinkType == ast.AutoLinkURL && bytes.HasPrefix(link.URL(src), []byte("http")) { + openInNewTab(link) + } + } + return ast.WalkContinue, nil + }) +} + var projects = []Project{ { Slug: "krypton", @@ -545,13 +596,13 @@ func main() { } jetbrains := FontPack{ - Monospace: "JetBrains Mono", - Normal: `system-ui, sans-serif`, + Monospace: `JetBrains Mono, monospace`, + Normal: `Inter, system-ui, sans-serif`, } minecraft := FontPack{ - Monospace: `"Monocraft", "JetBrains Mono", monospace`, - Normal: `"Monocraft", system-ui, sans-serif`, + Monospace: `Monocraft, JetBrains Mono, monospace`, + Normal: `Monocraft, Inter, system-ui, sans-serif`, } SetTheme("carbonight-cat", carbonightCat) diff --git a/website.templ b/website.templ index 454568c..94242ad 100644 --- a/website.templ +++ b/website.templ @@ -24,7 +24,7 @@ templ HeadComponent(title string, description string) { - + { children... } } @@ -152,9 +152,7 @@ templ Nav(path string) { templ TerminalLayout(style Style, path string) { - @HeadComponent(path, "My personal website") { - - } + @HeadComponent(path, "My personal website")
@Nav(path) @@ -756,7 +754,7 @@ templ BlogPage(style Style, blog Blog, prev *Blog, next *Blog) { @TerminalLayout(style, blog.Title) { @ScrollBox("") { @BlogItem("", blog, "mb-[1rem]") -
+
@templ.Raw(blog.HTML)
@@ -768,17 +766,11 @@ templ BlogPage(style Style, blog Blog, prev *Blog, next *Blog) { } templ BlogNav(label string, blog *Blog, extra string) { - @TerminalBorder(label, "", extra) { - if blog != nil { - vim ~/blogs/{ blog.Slug } + if blog != nil { + @TerminalBorder(label, "", "min-w-0 "+extra) { + vim ~/blogs/{ blog.Slug } } + } else { +
} } - -templ FootnotePanel() { - -} diff --git a/website_templ.go b/website_templ.go index 62d81a4..0af20ab 100644 --- a/website_templ.go +++ b/website_templ.go @@ -81,7 +81,7 @@ func HeadComponent(title string, description string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\">") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -882,29 +882,11 @@ func TerminalLayout(style Style, path string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var44 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) - templ_7745c5c3_Err = HeadComponent(path, "My personal website").Render(templ.WithChildren(ctx, templ_7745c5c3_Var44), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = HeadComponent(path, "My personal website").Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -916,7 +898,7 @@ func TerminalLayout(style Style, path string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -953,12 +935,12 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var45 := templ.GetChildren(ctx) - if templ_7745c5c3_Var45 == nil { - templ_7745c5c3_Var45 = templ.NopComponent + templ_7745c5c3_Var44 := templ.GetChildren(ctx) + if templ_7745c5c3_Var44 == nil { + templ_7745c5c3_Var44 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var46 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var45 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -970,29 +952,29 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var47 = []any{"grid grid-cols-[29%_1fr] gap-x-8 flex-1 min-h-0", templ.KV("gap-y-4", !false)} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var47...) + var templ_7745c5c3_Var46 = []any{"grid grid-cols-[29%_1fr] gap-x-8 flex-1 min-h-0", templ.KV("gap-y-4", !false)} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var46...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\">
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var49 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var48 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1004,7 +986,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var50 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var49 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1016,11 +998,11 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "
\"picture\"") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "
\"picture\"") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var51 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var50 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1032,32 +1014,32 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var52 string - templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(fingerprint) + var templ_7745c5c3_Var51 string + templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(fingerprint) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 189, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 187, Col: 21} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var51), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var50), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Profile", "", "[--border-py:0.875rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var50), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Profile", "", "[--border-py:0.875rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var49), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var53 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var52 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1069,17 +1051,17 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "contact@kyren.codes") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "contact@kyren.codes") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorderWithCopy("Email", "", "", "contact@kyren.codes", "mailto:contact@kyren.codes", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var53), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorderWithCopy("Email", "", "", "contact@kyren.codes", "mailto:contact@kyren.codes", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var52), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var54 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var53 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1091,7 +1073,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var55 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var54 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1103,23 +1085,23 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "git.kyren.codes") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "git.kyren.codes") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("https://git.kyren.codes", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var55), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("https://git.kyren.codes", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var54), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Git Repos (main)", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var54), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Git Repos (main)", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var53), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var56 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var55 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1131,7 +1113,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var57 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var56 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1143,23 +1125,23 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "github.com/Kyren223") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "github.com/Kyren223") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("https://github.com/kyren223", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var57), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("https://github.com/kyren223", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var56), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("GitHub (secondary)", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var56), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("GitHub (secondary)", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var55), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var58 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var57 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1171,7 +1153,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var59 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var58 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1183,33 +1165,33 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "Kyren223") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "Kyren223") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("https://discord.com/users/481884415090229258", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var59), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("https://discord.com/users/481884415090229258", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var58), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Discord", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var58), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Discord", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var57), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var49), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var48), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var60 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var59 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1221,11 +1203,11 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "
Working on ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "
Working on ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var61 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var60 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1237,27 +1219,27 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "Krypton") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "Krypton") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("/projects/krypton", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var61), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("/projects/krypton", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var60), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, " | Learning Langdev & Compiler Design | Available for hire
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "
| Learning Langdev & Compiler Design | Available for hire
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Status", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var60), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Status", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var59), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var62 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var61 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1269,13 +1251,13 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "Hi! I'm Kyren, a softwarea engineer and game developer. I love working with low level languages and learning things deeply. I am also a terminal nerd and Linux enthusiast who uses NVIM btw. And when I am not coding, I am most likely playing video games, watching Anime, or solving Rubik's cubes fast.") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "Hi! I'm Kyren, a softwarea engineer and game developer. I love working with low level languages and learning things deeply. I am also a terminal nerd and Linux enthusiast who uses NVIM btw. And when I am not coding, I am most likely playing video games, watching Anime, or solving Rubik's cubes fast.") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("About Me", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("About Me", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var61), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1283,11 +1265,11 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var63 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var62 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1299,28 +1281,28 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var64 string - templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(sshKey) + var templ_7745c5c3_Var63 string + templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(sshKey) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 238, Col: 12} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 236, Col: 12} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorderWithCopy("SSH Key", "", footerClass(false), sshKey, "", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var63), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorderWithCopy("SSH Key", "", footerClass(false), sshKey, "", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/").Render(templ.WithChildren(ctx, templ_7745c5c3_Var46), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/").Render(templ.WithChildren(ctx, templ_7745c5c3_Var45), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1352,12 +1334,12 @@ func InfoPage(style Style) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var65 := templ.GetChildren(ctx) - if templ_7745c5c3_Var65 == nil { - templ_7745c5c3_Var65 = templ.NopComponent + templ_7745c5c3_Var64 := templ.GetChildren(ctx) + if templ_7745c5c3_Var64 == nil { + templ_7745c5c3_Var64 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var66 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var65 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1369,7 +1351,7 @@ func InfoPage(style Style) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var67 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var66 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1381,7 +1363,7 @@ func InfoPage(style Style) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var68 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var67 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1393,7 +1375,7 @@ func InfoPage(style Style) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "$ fastfetch") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "$ fastfetch") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1401,25 +1383,25 @@ func InfoPage(style Style) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Info", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var68), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Info", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var67), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalStack(false, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var67), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(false, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var66), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/info.md").Render(templ.WithChildren(ctx, templ_7745c5c3_Var66), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/info.md").Render(templ.WithChildren(ctx, templ_7745c5c3_Var65), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1488,12 +1470,12 @@ func FlagshipProject(project Project, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var69 := templ.GetChildren(ctx) - if templ_7745c5c3_Var69 == nil { - templ_7745c5c3_Var69 = templ.NopComponent + templ_7745c5c3_Var68 := templ.GetChildren(ctx) + if templ_7745c5c3_Var68 == nil { + templ_7745c5c3_Var68 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var70 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var69 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1505,7 +1487,7 @@ func FlagshipProject(project Project, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1513,92 +1495,92 @@ func FlagshipProject(project Project, extra string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "\" class=\"no-underline text-[170%] font-bold text-(--accent) after:absolute after:inset-0 after:z-0\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var72 string - templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) + var templ_7745c5c3_Var71 string + templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 316, Col: 173} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 314, Col: 173} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var73 string - templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) + var templ_7745c5c3_Var72 string + templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 317, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 315, Col: 65} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, tag := range project.Tags { - var templ_7745c5c3_Var74 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var74...) + var templ_7745c5c3_Var73 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var73...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var76 string - templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) + var templ_7745c5c3_Var75 string + templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 319, Col: 136} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 317, Col: 136} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, link := range project.Links { - templ_7745c5c3_Var77 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var76 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1616,30 +1598,30 @@ func FlagshipProject(project Project, extra string) templ.Component { } return nil }) - templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var77), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var76), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var78 string - templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) + var templ_7745c5c3_Var77 string + templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 329, Col: 55} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 327, Col: 55} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if len(flagship.Downloads) > 0 || flagship.Version != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1661,63 +1643,63 @@ func FlagshipProject(project Project, extra string) templ.Component { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } if len(flagship.Stats) > 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, stat := range flagship.Stats { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var79 string - templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Value) + var templ_7745c5c3_Var78 string + templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Value) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 347, Col: 61} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 345, Col: 61} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var80 string - templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Label) + var templ_7745c5c3_Var79 string + templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 348, Col: 47} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 346, Col: 47} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if flagship.Snippet != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "
example") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "
example") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var81 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var80 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1729,33 +1711,33 @@ func FlagshipProject(project Project, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var82 string - templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Snippet) + var templ_7745c5c3_Var81 string + templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Snippet) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 358, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 356, Col: 24} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = CopyPre(flagship.Snippet, "text-[80%] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var81), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = CopyPre(flagship.Snippet, "text-[80%] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var80), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("", "", flagshipClasses+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var70), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("", "", flagshipClasses+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var69), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1779,26 +1761,26 @@ func VersionTag(project Project) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var83 := templ.GetChildren(ctx) - if templ_7745c5c3_Var83 == nil { - templ_7745c5c3_Var83 = templ.NopComponent + templ_7745c5c3_Var82 := templ.GetChildren(ctx) + if templ_7745c5c3_Var82 == nil { + templ_7745c5c3_Var82 = templ.NopComponent } ctx = templ.ClearChildren(ctx) if flagship.Version != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var84 string - templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Version) + var templ_7745c5c3_Var83 string + templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Version) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 369, Col: 50} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 367, Col: 50} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1823,56 +1805,56 @@ func DownloadButton(download Download) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var85 := templ.GetChildren(ctx) - if templ_7745c5c3_Var85 == nil { - templ_7745c5c3_Var85 = templ.NopComponent + templ_7745c5c3_Var84 := templ.GetChildren(ctx) + if templ_7745c5c3_Var84 == nil { + templ_7745c5c3_Var84 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var86 = []any{"no-underline inline-flex items-center gap-[1ch] px-[0.6rem] py-[0.1rem] rounded-[0.4rem] border-[0.1rem] border-solid text-[85%] transition-colors", + var templ_7745c5c3_Var85 = []any{"no-underline inline-flex items-center gap-[1ch] px-[0.6rem] py-[0.1rem] rounded-[0.4rem] border-[0.1rem] border-solid text-[85%] transition-colors", templ.KV("border-(--secondary)/60 text-(--secondary) hover:bg-(--secondary)/15", download.Enabled), templ.KV("border-(--alt)/30 text-(--alt)/80 bg-white/2", !download.Enabled), } - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var86...) + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var85...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1887,43 +1869,43 @@ func DownloadButton(download Download) templ.Component { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var89 string - templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(download.Label) + var templ_7745c5c3_Var88 string + templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(download.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 391, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 389, Col: 24} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if download.Size != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var90 string - templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinStringErrs(download.Size) + var templ_7745c5c3_Var89 string + templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(download.Size) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 393, Col: 45} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 391, Col: 45} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1947,12 +1929,12 @@ func IconArchive(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var91 := templ.GetChildren(ctx) - if templ_7745c5c3_Var91 == nil { - templ_7745c5c3_Var91 = templ.NopComponent + templ_7745c5c3_Var90 := templ.GetChildren(ctx) + if templ_7745c5c3_Var90 == nil { + templ_7745c5c3_Var90 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var92 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var91 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -1964,13 +1946,13 @@ func IconArchive(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var92), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var91), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1994,77 +1976,77 @@ func IconLink(href string, label string, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var93 := templ.GetChildren(ctx) - if templ_7745c5c3_Var93 == nil { - templ_7745c5c3_Var93 = templ.NopComponent + templ_7745c5c3_Var92 := templ.GetChildren(ctx) + if templ_7745c5c3_Var92 == nil { + templ_7745c5c3_Var92 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var94 = []any{"text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var94...) + var templ_7745c5c3_Var93 = []any{"text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var93...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var93.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templ_7745c5c3_Var92.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2088,12 +2070,12 @@ func IconGit(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var99 := templ.GetChildren(ctx) - if templ_7745c5c3_Var99 == nil { - templ_7745c5c3_Var99 = templ.NopComponent + templ_7745c5c3_Var98 := templ.GetChildren(ctx) + if templ_7745c5c3_Var98 == nil { + templ_7745c5c3_Var98 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var100 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var99 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2105,13 +2087,13 @@ func IconGit(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var100), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var99), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2135,12 +2117,12 @@ func IconGithub(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var101 := templ.GetChildren(ctx) - if templ_7745c5c3_Var101 == nil { - templ_7745c5c3_Var101 = templ.NopComponent + templ_7745c5c3_Var100 := templ.GetChildren(ctx) + if templ_7745c5c3_Var100 == nil { + templ_7745c5c3_Var100 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var102 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var101 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2152,13 +2134,13 @@ func IconGithub(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var102), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var101), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2182,12 +2164,12 @@ func IconExternal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var103 := templ.GetChildren(ctx) - if templ_7745c5c3_Var103 == nil { - templ_7745c5c3_Var103 = templ.NopComponent + templ_7745c5c3_Var102 := templ.GetChildren(ctx) + if templ_7745c5c3_Var102 == nil { + templ_7745c5c3_Var102 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var104 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var103 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2199,13 +2181,13 @@ func IconExternal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var104), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var103), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2229,12 +2211,12 @@ func IconKrypton() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var105 := templ.GetChildren(ctx) - if templ_7745c5c3_Var105 == nil { - templ_7745c5c3_Var105 = templ.NopComponent + templ_7745c5c3_Var104 := templ.GetChildren(ctx) + if templ_7745c5c3_Var104 == nil { + templ_7745c5c3_Var104 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var106 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var105 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2246,13 +2228,13 @@ func IconKrypton() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon("text-[#00f1ff] scale-150").Render(templ.WithChildren(ctx, templ_7745c5c3_Var106), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon("text-[#00f1ff] scale-150").Render(templ.WithChildren(ctx, templ_7745c5c3_Var105), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2283,16 +2265,16 @@ func ProjectItem(project Project, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var107 := templ.GetChildren(ctx) - if templ_7745c5c3_Var107 == nil { - templ_7745c5c3_Var107 = templ.NopComponent + templ_7745c5c3_Var106 := templ.GetChildren(ctx) + if templ_7745c5c3_Var106 == nil { + templ_7745c5c3_Var106 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var108 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var107 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2304,7 +2286,7 @@ func ProjectItem(project Project, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2312,102 +2294,102 @@ func ProjectItem(project Project, extra string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, " class=\"text-[130%] font-bold text-(--accent) after:absolute after:inset-0 after:z-0\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var110 string - templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) + var templ_7745c5c3_Var109 string + templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 468, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 466, Col: 21} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var111 string - templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) + var templ_7745c5c3_Var110 string + templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 469, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 467, Col: 65} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, tag := range project.Tags { - var templ_7745c5c3_Var112 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var112...) + var templ_7745c5c3_Var111 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var111...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var114 string - templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) + var templ_7745c5c3_Var113 string + templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 471, Col: 136} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 469, Col: 136} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, link := range project.Links { - templ_7745c5c3_Var115 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var114 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2425,35 +2407,35 @@ func ProjectItem(project Project, extra string) templ.Component { } return nil }) - templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var115), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var114), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var116 string - templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) + var templ_7745c5c3_Var115 string + templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 484, Col: 40} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 482, Col: 40} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var108), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var107), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2482,12 +2464,12 @@ func ProjectsPage(style Style, projects []Project, pinned int) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var117 := templ.GetChildren(ctx) - if templ_7745c5c3_Var117 == nil { - templ_7745c5c3_Var117 = templ.NopComponent + templ_7745c5c3_Var116 := templ.GetChildren(ctx) + if templ_7745c5c3_Var116 == nil { + templ_7745c5c3_Var116 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var118 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var117 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2503,7 +2485,7 @@ func ProjectsPage(style Style, projects []Project, pinned int) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var119 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var118 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2515,7 +2497,7 @@ func ProjectsPage(style Style, projects []Project, pinned int) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var120 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var119 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2544,19 +2526,19 @@ func ProjectsPage(style Style, projects []Project, pinned int) templ.Component { } return nil }) - templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var120), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var119), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var119), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var118), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var118), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var117), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2580,12 +2562,12 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var121 := templ.GetChildren(ctx) - if templ_7745c5c3_Var121 == nil { - templ_7745c5c3_Var121 = templ.NopComponent + templ_7745c5c3_Var120 := templ.GetChildren(ctx) + if templ_7745c5c3_Var120 == nil { + templ_7745c5c3_Var120 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var122 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var121 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2597,7 +2579,7 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var123 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var122 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2609,7 +2591,7 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var124 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var123 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2621,43 +2603,43 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "

$ cd ~") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "

$ cd ~") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var125 string - templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(path) + var templ_7745c5c3_Var124 string + templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(path) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 519, Col: 20} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 517, Col: 20} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "

\"") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "

\"") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var126 string - templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:]) + var templ_7745c5c3_Var125 string + templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:]) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 520, Col: 32} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 518, Col: 32} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "\": No such file or directory (os error 2)

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\": No such file or directory (os error 2)

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var124), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var123), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var127 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var126 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2669,24 +2651,24 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var128 string - templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(">") + var templ_7745c5c3_Var127 string + templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(">") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 526, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 524, Col: 17} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var129 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var128 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2698,39 +2680,39 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var130 string - templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.JoinStringErrs("cd -") + var templ_7745c5c3_Var129 string + templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs("cd -") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 529, Col: 16} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 527, Col: 16} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var130)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("javascript:history.back()", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var129), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("javascript:history.back()", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var128), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, " # Previous page
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, " # Previous page
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var131 string - templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(">") + var templ_7745c5c3_Var130 string + templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.JoinStringErrs(">") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 537, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 535, Col: 17} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var130)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var132 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var131 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2742,40 +2724,40 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var133 string - templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME") + var templ_7745c5c3_Var132 string + templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 540, Col: 20} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 538, Col: 20} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var133)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var132), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var131), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var127), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var126), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var123), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var122), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, path).Render(templ.WithChildren(ctx, templ_7745c5c3_Var122), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, path).Render(templ.WithChildren(ctx, templ_7745c5c3_Var121), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2799,38 +2781,38 @@ func ScrollBox(extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var134 := templ.GetChildren(ctx) - if templ_7745c5c3_Var134 == nil { - templ_7745c5c3_Var134 = templ.NopComponent + templ_7745c5c3_Var133 := templ.GetChildren(ctx) + if templ_7745c5c3_Var133 == nil { + templ_7745c5c3_Var133 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var135 = []any{"flex flex-1 min-h-0", extra} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var135...) + var templ_7745c5c3_Var134 = []any{"flex flex-1 min-h-0", extra} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var134...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\">
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var134.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templ_7745c5c3_Var133.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2854,12 +2836,12 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var137 := templ.GetChildren(ctx) - if templ_7745c5c3_Var137 == nil { - templ_7745c5c3_Var137 = templ.NopComponent + templ_7745c5c3_Var136 := templ.GetChildren(ctx) + if templ_7745c5c3_Var136 == nil { + templ_7745c5c3_Var136 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var138 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var137 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2871,7 +2853,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var139 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var138 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2883,17 +2865,17 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "$ ls -lh ~/blogs") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "$ ls -lh ~/blogs") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var139), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var138), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var140 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var139 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2905,7 +2887,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var141 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var140 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2927,19 +2909,19 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { } return nil }) - templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var141), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var140), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var140), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var139), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var138), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var137), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2970,12 +2952,12 @@ func IconMonitor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var142 := templ.GetChildren(ctx) - if templ_7745c5c3_Var142 == nil { - templ_7745c5c3_Var142 = templ.NopComponent + templ_7745c5c3_Var141 := templ.GetChildren(ctx) + if templ_7745c5c3_Var141 == nil { + templ_7745c5c3_Var141 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var143 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var142 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -2987,13 +2969,13 @@ func IconMonitor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var143), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var142), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3017,12 +2999,12 @@ func IconTerminal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var144 := templ.GetChildren(ctx) - if templ_7745c5c3_Var144 == nil { - templ_7745c5c3_Var144 = templ.NopComponent + templ_7745c5c3_Var143 := templ.GetChildren(ctx) + if templ_7745c5c3_Var143 == nil { + templ_7745c5c3_Var143 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var145 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var144 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3034,13 +3016,13 @@ func IconTerminal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var145), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var144), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3064,12 +3046,12 @@ func IconCode(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var146 := templ.GetChildren(ctx) - if templ_7745c5c3_Var146 == nil { - templ_7745c5c3_Var146 = templ.NopComponent + templ_7745c5c3_Var145 := templ.GetChildren(ctx) + if templ_7745c5c3_Var145 == nil { + templ_7745c5c3_Var145 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var147 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var146 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3081,13 +3063,13 @@ func IconCode(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var147), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var146), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3111,12 +3093,12 @@ func IconCpu(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var148 := templ.GetChildren(ctx) - if templ_7745c5c3_Var148 == nil { - templ_7745c5c3_Var148 = templ.NopComponent + templ_7745c5c3_Var147 := templ.GetChildren(ctx) + if templ_7745c5c3_Var147 == nil { + templ_7745c5c3_Var147 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var149 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var148 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3128,13 +3110,13 @@ func IconCpu(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var149), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var148), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3158,12 +3140,12 @@ func IconScriptLang(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var150 := templ.GetChildren(ctx) - if templ_7745c5c3_Var150 == nil { - templ_7745c5c3_Var150 = templ.NopComponent + templ_7745c5c3_Var149 := templ.GetChildren(ctx) + if templ_7745c5c3_Var149 == nil { + templ_7745c5c3_Var149 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var151 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var150 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3175,13 +3157,13 @@ func IconScriptLang(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var151), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var150), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3205,12 +3187,12 @@ func IconEditor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var152 := templ.GetChildren(ctx) - if templ_7745c5c3_Var152 == nil { - templ_7745c5c3_Var152 = templ.NopComponent + templ_7745c5c3_Var151 := templ.GetChildren(ctx) + if templ_7745c5c3_Var151 == nil { + templ_7745c5c3_Var151 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var153 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var152 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3222,13 +3204,13 @@ func IconEditor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var153), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var152), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3252,12 +3234,12 @@ func IconDebugger(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var154 := templ.GetChildren(ctx) - if templ_7745c5c3_Var154 == nil { - templ_7745c5c3_Var154 = templ.NopComponent + templ_7745c5c3_Var153 := templ.GetChildren(ctx) + if templ_7745c5c3_Var153 == nil { + templ_7745c5c3_Var153 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var155 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var154 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3269,13 +3251,13 @@ func IconDebugger(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var155), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var154), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3299,12 +3281,12 @@ func IconKeyboard(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var156 := templ.GetChildren(ctx) - if templ_7745c5c3_Var156 == nil { - templ_7745c5c3_Var156 = templ.NopComponent + templ_7745c5c3_Var155 := templ.GetChildren(ctx) + if templ_7745c5c3_Var155 == nil { + templ_7745c5c3_Var155 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var157 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var156 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3316,13 +3298,13 @@ func IconKeyboard(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var157), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var156), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3346,12 +3328,12 @@ func IconUptime(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var158 := templ.GetChildren(ctx) - if templ_7745c5c3_Var158 == nil { - templ_7745c5c3_Var158 = templ.NopComponent + templ_7745c5c3_Var157 := templ.GetChildren(ctx) + if templ_7745c5c3_Var157 == nil { + templ_7745c5c3_Var157 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var159 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var158 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3363,13 +3345,13 @@ func IconUptime(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var159), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var158), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3393,12 +3375,12 @@ func IconEko(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var160 := templ.GetChildren(ctx) - if templ_7745c5c3_Var160 == nil { - templ_7745c5c3_Var160 = templ.NopComponent + templ_7745c5c3_Var159 := templ.GetChildren(ctx) + if templ_7745c5c3_Var159 == nil { + templ_7745c5c3_Var159 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var161 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var160 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3410,13 +3392,13 @@ func IconEko(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var161), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var160), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3440,12 +3422,12 @@ func IconTrident(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var162 := templ.GetChildren(ctx) - if templ_7745c5c3_Var162 == nil { - templ_7745c5c3_Var162 = templ.NopComponent + templ_7745c5c3_Var161 := templ.GetChildren(ctx) + if templ_7745c5c3_Var161 == nil { + templ_7745c5c3_Var161 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var163 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var162 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3457,13 +3439,13 @@ func IconTrident(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var163), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var162), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3487,12 +3469,12 @@ func IconDotfiles(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var164 := templ.GetChildren(ctx) - if templ_7745c5c3_Var164 == nil { - templ_7745c5c3_Var164 = templ.NopComponent + templ_7745c5c3_Var163 := templ.GetChildren(ctx) + if templ_7745c5c3_Var163 == nil { + templ_7745c5c3_Var163 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var165 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var164 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3504,13 +3486,13 @@ func IconDotfiles(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var165), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var164), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3534,12 +3516,12 @@ func IconVideo(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var166 := templ.GetChildren(ctx) - if templ_7745c5c3_Var166 == nil { - templ_7745c5c3_Var166 = templ.NopComponent + templ_7745c5c3_Var165 := templ.GetChildren(ctx) + if templ_7745c5c3_Var165 == nil { + templ_7745c5c3_Var165 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var167 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var166 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3551,13 +3533,13 @@ func IconVideo(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var167), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var166), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3581,12 +3563,12 @@ func IconJetbrains(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var168 := templ.GetChildren(ctx) - if templ_7745c5c3_Var168 == nil { - templ_7745c5c3_Var168 = templ.NopComponent + templ_7745c5c3_Var167 := templ.GetChildren(ctx) + if templ_7745c5c3_Var167 == nil { + templ_7745c5c3_Var167 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var169 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var168 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3598,13 +3580,13 @@ func IconJetbrains(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var169), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var168), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3628,12 +3610,12 @@ func IconDocs(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var170 := templ.GetChildren(ctx) - if templ_7745c5c3_Var170 == nil { - templ_7745c5c3_Var170 = templ.NopComponent + templ_7745c5c3_Var169 := templ.GetChildren(ctx) + if templ_7745c5c3_Var169 == nil { + templ_7745c5c3_Var169 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var171 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var170 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3645,13 +3627,13 @@ func IconDocs(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var171), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var170), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3675,12 +3657,12 @@ func IconReleases(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var172 := templ.GetChildren(ctx) - if templ_7745c5c3_Var172 == nil { - templ_7745c5c3_Var172 = templ.NopComponent + templ_7745c5c3_Var171 := templ.GetChildren(ctx) + if templ_7745c5c3_Var171 == nil { + templ_7745c5c3_Var171 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var173 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var172 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3692,13 +3674,13 @@ func IconReleases(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var173), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var172), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3750,30 +3732,30 @@ func Fastfetch(rows []FetchRow) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var174 := templ.GetChildren(ctx) - if templ_7745c5c3_Var174 == nil { - templ_7745c5c3_Var174 = templ.NopComponent + templ_7745c5c3_Var173 := templ.GetChildren(ctx) + if templ_7745c5c3_Var173 == nil { + templ_7745c5c3_Var173 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for i, row := range rows { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var175 string - templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows))) + var templ_7745c5c3_Var174 string + templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows))) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 741, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 739, Col: 52} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3781,69 +3763,69 @@ func Fastfetch(rows []FetchRow) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var176 = []any{row.Color, "font-bold"} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var176...) + var templ_7745c5c3_Var175 = []any{row.Color, "font-bold"} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var175...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var178 string - templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label) + var templ_7745c5c3_Var177 string + templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 743, Col: 53} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 741, Col: 53} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var180 string - templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value) + var templ_7745c5c3_Var179 string + templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 744, Col: 37} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 742, Col: 37} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3867,38 +3849,38 @@ func Icon(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var181 := templ.GetChildren(ctx) - if templ_7745c5c3_Var181 == nil { - templ_7745c5c3_Var181 = templ.NopComponent + templ_7745c5c3_Var180 := templ.GetChildren(ctx) + if templ_7745c5c3_Var180 == nil { + templ_7745c5c3_Var180 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var182 = []any{"shrink-0", Color(color), "self-center"} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var182...) + var templ_7745c5c3_Var181 = []any{"shrink-0", Color(color), "self-center"} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var181...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var181.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templ_7745c5c3_Var180.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3922,12 +3904,12 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var184 := templ.GetChildren(ctx) - if templ_7745c5c3_Var184 == nil { - templ_7745c5c3_Var184 = templ.NopComponent + templ_7745c5c3_Var183 := templ.GetChildren(ctx) + if templ_7745c5c3_Var183 == nil { + templ_7745c5c3_Var183 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var185 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var184 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3939,7 +3921,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var186 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var185 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -3955,7 +3937,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3963,7 +3945,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -3975,19 +3957,19 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var186), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var185), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, blog.Title).Render(templ.WithChildren(ctx, templ_7745c5c3_Var185), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, blog.Title).Render(templ.WithChildren(ctx, templ_7745c5c3_Var184), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -4011,115 +3993,65 @@ func BlogNav(label string, blog *Blog, extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var187 := templ.GetChildren(ctx) - if templ_7745c5c3_Var187 == nil { - templ_7745c5c3_Var187 = templ.NopComponent + templ_7745c5c3_Var186 := templ.GetChildren(ctx) + if templ_7745c5c3_Var186 == nil { + templ_7745c5c3_Var186 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var188 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - if blog != nil { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "vim ~/blogs/") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "\" class=\"block min-w-0 truncate\">vim ~/blogs/") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var190 string - templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(blog.Slug) + var templ_7745c5c3_Var189 string + templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(blog.Slug) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 773, Col: 75} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 771, Col: 106} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } + return nil + }) + templ_7745c5c3_Err = TerminalBorder(label, "", "min-w-0 "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var187), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err } - return nil - }) - templ_7745c5c3_Err = TerminalBorder(label, "", extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var188), templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func FootnotePanel() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var191 := templ.GetChildren(ctx) - if templ_7745c5c3_Var191 == nil { - templ_7745c5c3_Var191 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err } return nil }) -- cgit v1.3.1