diff --git a/index.html b/index.html index eb6b9b3..d2fbe19 100644 --- a/index.html +++ b/index.html @@ -1,71 +1,77 @@ - - - FAForever Patchnotes - - + + + FAForever Patchnotes - Balance & Game Updates + + + + + + + + + + + + + + + + + + + - + + + - - - - - - + + + + + +
+
- - - - - - - - - + +
+

+ UEF Faction Logo + Cybran Faction Logo + FAForever Patchnotes + Aeon Faction Logo + Seraphim Faction Logo +

+

This site will be deprecated as of 2025. Please use this link.

+
- - - - - - -
-
- -
-

- UEF-Logo - Cybran-Logo - FAForever Patchnotes - Aeon-Logo - Seraphim-Logo -

-

This Site will be Deprecated as of 2025. Please use this.

-
- -
-

Balance

-
-
- -
-

Game

-
-

Older Patchnote are available here.

-

Game Patchnotes will be move to a new location soon.

-
- -
-

Upcoming Balance Changes

-

You can see the latest changes here.
This list of the current changes is on the FAF Develop game type and is subject to changes.

-
- -
-

Report Any Issues

-

If you see any issues report please submit a report here.

-
-
- + +
+

Balance

+
+
+ + +
+

Game

+
+

Older patchnotes are available here.

+

Game patchnotes will be moved to a new location soon.

+
+ + +
+

Upcoming Balance Changes

+

You can see the latest changes here.
This list of the current changes is on the FAF Develop game type and is subject to changes.

+
+ + +
+

Report Any Issues

+

If you see any issues, please submit a report here.

+
+
+ diff --git a/pages/balance/2013/3624.html b/pages/balance/2013/3624.html index 22d8678..b56c7dd 100644 --- a/pages/balance/2013/3624.html +++ b/pages/balance/2013/3624.html @@ -11,8 +11,8 @@
-

Patch 3624

-

Date: April 7th 2013

+

Patch 3624

+

Date: April 7th 2013

Added Stun & Teleport Effects to SCUs

-- The Balance Team

diff --git a/pages/balance/2013/3626.html b/pages/balance/2013/3626.html index 9150816..de9c138 100644 --- a/pages/balance/2013/3626.html +++ b/pages/balance/2013/3626.html @@ -11,8 +11,8 @@
-

Patch 3626

-

Date: July 25th 2013

+

Patch 3626

+

Date: July 25th 2013

-- The Balance Team


diff --git a/pages/balance/2014/3629.html b/pages/balance/2014/3629.html index 57d3dcb..a9f808f 100644 --- a/pages/balance/2014/3629.html +++ b/pages/balance/2014/3629.html @@ -11,8 +11,8 @@
-

Patch 3629

-

Date: February 2nd 2014

+

Patch 3629

+

Date: February 2nd 2014

-- The Balance Team


diff --git a/pages/balance/2014/3630.html b/pages/balance/2014/3630.html index ab2da92..344b5a9 100644 --- a/pages/balance/2014/3630.html +++ b/pages/balance/2014/3630.html @@ -11,8 +11,8 @@
-

Patch 3630

-

Date: March 1st 2014

+

Patch 3630

+

Date: March 1st 2014

-- The Balance Team


diff --git a/pages/balance/2015/3650.html b/pages/balance/2015/3650.html index 906b1b3..8e9f925 100644 --- a/pages/balance/2015/3650.html +++ b/pages/balance/2015/3650.html @@ -11,8 +11,8 @@
-

Patch 3650

-

Date: August 19th 2015

+

Patch 3650

+

Date: August 19th 2015

It's been a while since the last balance patch, but after the restructuring of FAF and the establishment of the new council of setons, a balance team is now finally in place. We wanted to release a patch that solves the biggest and most widely accepted problems as fast as possible to make sure you can already have more fun with the game while we are working on the next changes. Some of the problems are a fairly complex, and to completely solve them without delaying the patch or creating new problems was not possible, but we put some changes in place that should tone them down until we can solve them for good.

In addition we fixed a few of the more difficult remaining bugs as much as possible: Hitboxes for SCUs and the drop behavior of torpedo bombers.

diff --git a/pages/balance/2016/3655.html b/pages/balance/2016/3655.html index 16354c2..e796d58 100644 --- a/pages/balance/2016/3655.html +++ b/pages/balance/2016/3655.html @@ -13,8 +13,8 @@
-

Patch 3655

-

Date: August 30th 2016

+

Patch 3655

+

Date: August 30th 2016

We all had to wait very long for this patch, but the technical and organizational structure to deliver it is finally ready.

The changes have been in testing since May, first by the tester team and later in the public beta, and a lot of feedback was given and considered during this time. New changes got suggested and added, while others got removed or adjusted.

diff --git a/pages/balance/2016/3658.html b/pages/balance/2016/3658.html index 51e79ba..1725b81 100644 --- a/pages/balance/2016/3658.html +++ b/pages/balance/2016/3658.html @@ -13,8 +13,8 @@
-

Patch 3658

-

Date: August 30th 2016

+

Patch 3658

+

Date: August 30th 2016

This balance patch is merely a hotfix so nothing major happening here.

We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2016/3662.html b/pages/balance/2016/3662.html index 5f43aaf..2225f8e 100644 --- a/pages/balance/2016/3662.html +++ b/pages/balance/2016/3662.html @@ -13,8 +13,8 @@
-

Patch 3662

-

Date: November 9th 2016

+

Patch 3662

+

Date: November 9th 2016

These are the less controversial changes from the finished patch that will get released now. The more controversial changes will be decided after a community vote about the general direction and organization of balancing.

It contains a few bugfixes, some adjustments, additions and improvements to changes of the last patch and new things like the Janus that finally gets some real love.

diff --git a/pages/balance/2017/3674.html b/pages/balance/2017/3674.html index 75eaf4d..2f50e30 100644 --- a/pages/balance/2017/3674.html +++ b/pages/balance/2017/3674.html @@ -13,8 +13,8 @@
-

Patch 3674

-

Date: February 6th 2017

+

Patch 3674

+

Date: February 6th 2017

This patch contains the HP changes that have been in testing and discussion for a long time, and some Ythotha buffs on top. As always, you can post your feedback and opinion on the forums.

We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2017/3676.html b/pages/balance/2017/3676.html index 8054642..f1f17d3 100644 --- a/pages/balance/2017/3676.html +++ b/pages/balance/2017/3676.html @@ -14,8 +14,8 @@
-

Patch 3676

-

Date: March 4th 2017

+

Patch 3676

+

Date: March 4th 2017

The focus of this patch is working on improving the implementation of the previous patch. Cybran regen is improved, Seraphim get a buff to their hps, as well as some smaller changes and fixes.

We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2017/3684.html b/pages/balance/2017/3684.html index 87294c0..ef5c3f6 100644 --- a/pages/balance/2017/3684.html +++ b/pages/balance/2017/3684.html @@ -13,8 +13,8 @@
-

Patch 3684

-

Date: May 27th 2017

+

Patch 3684

+

Date: May 27th 2017

Included in this patch are a veterancy overhaul, factory HP changes(yes, again), a sera second gun buff, reduced wreck reclaim rate and more.

Try out the new features and changes, and leave your feedback and replays on the balance forum. Thank you.

diff --git a/pages/balance/2017/3688.html b/pages/balance/2017/3688.html index f640531..4c6175e 100644 --- a/pages/balance/2017/3688.html +++ b/pages/balance/2017/3688.html @@ -13,8 +13,8 @@
-

Patch 3688

-

Date: September 24th 2017

+

Patch 3688

+

Date: September 24th 2017

This balance patch will be a small one. The main feature of this patch is the move to a mass-based veterancy system.
We have also scrapped changes to the shield spillover and overcharge for now since we want to do them either after or with the next patch. diff --git a/pages/balance/2018/3696.html b/pages/balance/2018/3696.html index 21226c3..5b9a5eb 100644 --- a/pages/balance/2018/3696.html +++ b/pages/balance/2018/3696.html @@ -12,8 +12,8 @@

-

Patch 3696

-

Date: May 26th 2018

+

Patch 3696

+

Date: May 26th 2018

There are four main portions to this balance patch. First is the nerf to direct fire T3 Land units. Second is the rebalance of ACU combat upgrades. Third is the increase in Experimental Unit build times and fourth is an diff --git a/pages/balance/2019/3704.html b/pages/balance/2019/3704.html index e168fee..f919c5a 100644 --- a/pages/balance/2019/3704.html +++ b/pages/balance/2019/3704.html @@ -11,8 +11,8 @@

-

Patch 3704

-

Date: June 18th 2019

+

Patch 3704

+

Date: June 18th 2019

The aim of the patch is to allow more unit and upgrade options while also improving the factional balance. A brief explanation of each change is found below.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2019/3709.html b/pages/balance/2019/3709.html index ddd1c83..42fcad9 100644 --- a/pages/balance/2019/3709.html +++ b/pages/balance/2019/3709.html @@ -13,8 +13,8 @@
-

Patch 3709

-

Date: December 16th 2019

+

Patch 3709

+

Date: December 16th 2019

The aim of the patch is to make some necessary adjustments before the end of year tournament. In the past few months one of the main requests has been the removal or nerfing of "snipemode" which allowed units to specifically target the ACU. This turned out to be a mechanic that was too punishing and ultimately detrimental to gameplay.
During the LotS qualifiers it also became clear that the mongoose and parashield combo was very strong and so we are addressing that here.
diff --git a/pages/balance/2020/3714.html b/pages/balance/2020/3714.html index 9cae715..c587644 100644 --- a/pages/balance/2020/3714.html +++ b/pages/balance/2020/3714.html @@ -13,8 +13,8 @@

-

Patch 3714

-

Date: May 3rd 2020

+

Patch 3714

+

Date: May 3rd 2020

This patch primarily aims to improve the land balance between factions and between different unit choices at the T2 and T3 stages.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2020/3718.html b/pages/balance/2020/3718.html index df3f539..06c801b 100644 --- a/pages/balance/2020/3718.html +++ b/pages/balance/2020/3718.html @@ -14,8 +14,8 @@
-

Patch 3718

-

Date: November 29th 2020

+

Patch 3718

+

Date: November 29th 2020

This patch aims to increase the power of early attacking options through buffs to tech 1 bombers and labs. It also aims to align the strength of tech one tanks more closely through adjustments to aurora and mantis.
Tech two mobile shields and range bots get a slight nerf. Overcharge now operates at a fixed energy cost per damage with a ratio of 1:4 damage to energy. A minimum of 5k energy is required.
diff --git a/pages/balance/2021/3720.html b/pages/balance/2021/3720.html index 993499b..cc07824 100644 --- a/pages/balance/2021/3720.html +++ b/pages/balance/2021/3720.html @@ -13,8 +13,8 @@

-

Patch 3720

-

Date: May 15th 2021

+

Patch 3720

+

Date: May 15th 2021

This patch is a combination of small fine-tuning and changes to game mechanics. It's a relatively small patch stabilizing the balance and getting things out of the way so that the focus can (hopefully) be shifted towards SCUs going forward.
Selen, Jester and Bombers are all getting small buffs as a follow-up to previous patch. Mantis icon is changed from a LAB icon to a tank icon as this became an apparent issue with the resurgence of LAB usage after their buff. Shard will now actually hit stuff. Mex build time and build power are reverted to pre-engymod values, making them more efficient to assist and making the choice between using engineers for reclaim and assist more meaningful. Target priorities have been fine-tuned from the last change. Overcharge now kills a mobile shield generator if it depletes its shield.
diff --git a/pages/balance/2021/3725.html b/pages/balance/2021/3725.html index b814170..4142ece 100644 --- a/pages/balance/2021/3725.html +++ b/pages/balance/2021/3725.html @@ -12,8 +12,8 @@

-

Patch 3725

-

Date: November 26th 2021

+

Patch 3725

+

Date: November 26th 2021

This patch touches various land, naval and air units as well as reworks a couple of ACU upgrades. Notably seraphim are receiving significant nerfs to Selen cloak and Zthuee build time efficiency while cybran are getting some buffs that will make their mid-game a lot more robust. Plus various QoL improvements and fixes to inconsistent unit behavior.

-- The Balance Team

diff --git a/pages/balance/2023/3750.html b/pages/balance/2023/3750.html index fb382f3..5498093 100644 --- a/pages/balance/2023/3750.html +++ b/pages/balance/2023/3750.html @@ -13,8 +13,8 @@
-

Patch 3750

-

Date: January 28th 2023

+

Patch 3750

+

Date: January 28th 2023

This patch aims to alleviate the most pressing imbalances that have arouse over the past 2 years.
Notably the dominance of Sniper bots and Titans/Loyalists during the T3 stage, Nukes being extremely oppressive, air T4s and T3 artilleries being rushed without any energy infrastructure and the power distribution in naval warfare being very asymmetric tech wise between factions.
diff --git a/pages/balance/2023/3757.html b/pages/balance/2023/3757.html index f62e95d..1241f5c 100644 --- a/pages/balance/2023/3757.html +++ b/pages/balance/2023/3757.html @@ -12,8 +12,8 @@

-

Patch 3757

-

Date: May 20th 2023

+

Patch 3757

+

Date: May 20th 2023

A balance patch has been released with a few important changes that have been planned for a while, but were delayed.
We hope you enjoy this new patch

diff --git a/pages/balance/2023/3761.html b/pages/balance/2023/3761.html index caf5c28..20fb38a 100644 --- a/pages/balance/2023/3761.html +++ b/pages/balance/2023/3761.html @@ -13,8 +13,8 @@
-

Patch 3761

-

Date: July 15th 2023

+

Patch 3761

+

Date: July 15th 2023

The main objective of this patch is to enhance the viability of a diverse range of strategies by boosting raiding capabilities, balancing overpowered units, and introducing novel ways to utilize existing units.

-- The Balance Team

diff --git a/pages/balance/2023/3774.html b/pages/balance/2023/3774.html index d4098fa..01ac66c 100644 --- a/pages/balance/2023/3774.html +++ b/pages/balance/2023/3774.html @@ -15,8 +15,8 @@
-

Patch 3774

-

Date: November 15th 2023

+

Patch 3774

+

Date: November 15th 2023

This patch contains the HP changes that have been in testing and discussion for a long time, and some Ythotha buffs on top. As always, you can post your feedback and opinion on the forums.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2023/3775.html b/pages/balance/2023/3775.html index 77274af..85a2701 100644 --- a/pages/balance/2023/3775.html +++ b/pages/balance/2023/3775.html @@ -13,8 +13,8 @@
-

Patch 3775

-

Date: November 19th 2023

+

Patch 3775

+

Date: November 19th 2023

This patch aims at tackling the main issues of competitive team games: snipers, Ahwassa, ASAF spam, and T2 Arty. We're also re-balancing the walls to go hand in hand with the changes made to the engine.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2023/3776.html b/pages/balance/2023/3776.html index 30ee089..37f42dc 100644 --- a/pages/balance/2023/3776.html +++ b/pages/balance/2023/3776.html @@ -13,8 +13,8 @@
-

Patch 3776

-

Date: December 1st 2023

+

Patch 3776

+

Date: December 1st 2023

The focus of this patch is working on improving the implementation of the previous patch. Cybran regen is improved, Seraphim get a buff to their hps, as well as some smaller changes and fixes.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2023/3777.html b/pages/balance/2023/3777.html index 2fd1d7e..b76867b 100644 --- a/pages/balance/2023/3777.html +++ b/pages/balance/2023/3777.html @@ -12,8 +12,8 @@
-

Patch 3777

-

Date: December 24th 2023

+

Patch 3777

+

Date: December 24th 2023

This is a Small patch that aims at fixes a few minor units and added the new Torrent Change as well as the ability to use billy nuke & teleport.
We wish you good luck and much fun playing with the new patch!

diff --git a/pages/balance/2023/3778.html b/pages/balance/2023/3778.html index 759ac62..77d9aed 100644 --- a/pages/balance/2023/3778.html +++ b/pages/balance/2023/3778.html @@ -14,8 +14,8 @@
-

Patch 3778

-

Date: December 31st 2023

+

Patch 3778

+

Date: December 31st 2023

Minor Changes with the revert of the UEF Teleport and Cybran TML Interaction with Aeon TMD.

-- Balance Team

diff --git a/pages/balance/2023/3779.html b/pages/balance/2023/3779.html index 2f6e86d..71efaed 100644 --- a/pages/balance/2023/3779.html +++ b/pages/balance/2023/3779.html @@ -12,8 +12,8 @@
-

Patch 3779

-

Date: January 22nd 2024

+

Patch 3779

+

Date: January 22nd 2024

This Patch The Loyalists can now redirect missiles and the ownership is switched to TMD can Intercept it as well as a handful of Mechanic changes.
Seraphim SCU also gets a Slight Eco Bonus

diff --git a/pages/balance/2024/3801.html b/pages/balance/2024/3801.html index 87a930d..b381a26 100644 --- a/pages/balance/2024/3801.html +++ b/pages/balance/2024/3801.html @@ -12,8 +12,8 @@
-

Patch 3801

-

Date: March 15 2024

+

Patch 3801

+

Date: March 15 2024

This balance update comprises numerous minor adjustments to certain units, providing them with backup capabilities at a distance. Additionally, there are a few significant changes, such as the introduction of the new Teleport mechanic, alongside some slight nerfs.

Balance Team

diff --git a/pages/balance/2024/3809.html b/pages/balance/2024/3809.html index 5d7366c..32fb532 100644 --- a/pages/balance/2024/3809.html +++ b/pages/balance/2024/3809.html @@ -12,8 +12,8 @@
-

Patch 3809

-

Date: April 20th 2024

+

Patch 3809

+

Date: April 20th 2024

Small Balance Change to Cybran TML.

Balance Team

diff --git a/pages/balance/2024/3810.html b/pages/balance/2024/3810.html index 360ac4c..414fb73 100644 --- a/pages/balance/2024/3810.html +++ b/pages/balance/2024/3810.html @@ -13,8 +13,8 @@
-

Patch 3810

-

Date: July 7th 2024

+

Patch 3810

+

Date: July 7th 2024

This balance update comprises numerous minor adjustments to certain units, providing them with backup capabilities at a distance. Additionally, there are a few significant changes, such as the introduction of the new Teleport mechanic, alongside some slight nerf's.

-- The Balance Team

diff --git a/pages/balance/2024/3811.html b/pages/balance/2024/3811.html index 46a8fdc..27681fd 100644 --- a/pages/balance/2024/3811.html +++ b/pages/balance/2024/3811.html @@ -1,79 +1,79 @@ - + - + - Patch 3811 + FAForever Patch 3811 - Balance Update - +
-
+
-

Patch 3811

-

Date: July 7th 2024

+

Patch 3811

+

Date: July 7th, 2024

-

This balance update comprises of minor adjustments to certain units & fatboy changes.

+

This balance update comprises minor adjustments to certain units, including changes to the T4 Fatboy.

-- The Balance Team


-
- -

Land

-
-
-

T4 Fatboy

+ -

In general the Fatboy has been in an awkward position for a while now. With these changes we try to mitigate some of the perceived issues while preserving the identity of the Fatboy.

+
+

Land Units

+
+

T4 Fatboy Unit T4 Fatboy

+

The Fatboy has been in an awkward position for some time. These changes aim to address the issues while preserving its identity.

  • Shield:
      -
    • RechargeTime: 120 75
    • -
    • RegenRate: 100 200
    • +
    • Recharge Time: 120 75/s
    • +
    • Regeneration Rate: 100 200/s
  • -
  • AA-Guns: +
  • Anti-Air Guns:
    • Range: 45 55
    • Damage: 20 40
  • -
  • CollisionSize: +
  • Collision Size:
      -
    • UniformScale: 2.22 2.15
    • -
    • ShieldSize: 25 24
    • -
    • SizeX: 5.5 5.2
    • -
    • SizeY: 1.5 1.4
    • -
    • SizeZ: 8 7.5
    • +
    • Uniform Scale: 2.22 2.15
    • +
    • Shield Size: 25 24
    • +
    • Size X: 5.5 5.2
    • +
    • Size Y: 1.5 1.4
    • +
    • Size Z: 8 7.5
-
-
- + +
- +
+ + - - \ No newline at end of file + diff --git a/pages/balanceChanges.html b/pages/balanceChanges.html index f6dc5e3..906e695 100644 --- a/pages/balanceChanges.html +++ b/pages/balanceChanges.html @@ -13,7 +13,7 @@
-

FAF Balance Testing

+

FAF Balance Testing

Date Updated: 09/07/2024

diff --git a/pages/game/2023/3778.html b/pages/game/2023/3778.html index d7f0bd6..79a2747 100644 --- a/pages/game/2023/3778.html +++ b/pages/game/2023/3778.html @@ -12,8 +12,8 @@
-

Patch 3778

-

Date: Dec 31 2023

+

Patch 3778

+

Date: Dec 31 2023

A hotfix addressing lingering issues of the year 2023.

With gratitude to all those who took the time to report issues.

diff --git a/scripts/backgroundRandom.js b/scripts/backgroundRandom.js index fb0f041..69d234a 100644 --- a/scripts/backgroundRandom.js +++ b/scripts/backgroundRandom.js @@ -1,27 +1,49 @@ function setBackground(mediaQuery) { const htmlElement = document.documentElement; const imgs = [ - "../assets/images/backgrounds/1.jpg", - "../assets/images/backgrounds/2.jpg", - "../assets/images/backgrounds/3.jpg", - "../assets/images/backgrounds/4.jpg", - "../assets/images/backgrounds/5.jpg", - "../assets/images/backgrounds/6.jpg", + '../assets/images/backgrounds/1.jpg', + '../assets/images/backgrounds/2.jpg', + '../assets/images/backgrounds/3.jpg', + '../assets/images/backgrounds/4.jpg', + '../assets/images/backgrounds/5.jpg', + '../assets/images/backgrounds/6.jpg', ]; + // Preload images for better UX and avoid flickering + imgs.forEach((img) => { + const image = new Image(); + image.src = img; + }); + if (mediaQuery.matches) { - htmlElement.style.backgroundColor = "var(--Background)"; - htmlElement.style.backgroundImage = "none"; + htmlElement.style.backgroundColor = 'var(--Background)'; + htmlElement.style.backgroundImage = 'none'; } else { const randomImg = imgs[Math.floor(Math.random() * imgs.length)]; htmlElement.style.backgroundImage = `url(${randomImg})`; - htmlElement.style.backgroundColor = "transparent"; + htmlElement.style.backgroundColor = 'transparent'; } } -const mediaQuery = window.matchMedia("(max-width: 420px)"); +const mediaQuery = window.matchMedia('(max-width: 420px)'); + +function handleMediaChange(event) { + setBackground(event); +} -const handleMediaChange = (event) => setBackground(event); +// Debouncing media query changes to optimize performance +let debounceTimeout; +function debounce(func, delay) { + return function (...args) { + clearTimeout(debounceTimeout); + debounceTimeout = setTimeout(() => func.apply(this, args), delay); + }; +} setBackground(mediaQuery); -mediaQuery.addEventListener("change", handleMediaChange); +mediaQuery.addEventListener('change', debounce(handleMediaChange, 100)); + +// Cleanup: remove event listener if no longer needed +function removeListener() { + mediaQuery.removeEventListener('change', debounce(handleMediaChange, 100)); +} diff --git a/scripts/populateOldGamePatches.js b/scripts/populateOldGamePatches.js index 835ca6b..315fd01 100644 --- a/scripts/populateOldGamePatches.js +++ b/scripts/populateOldGamePatches.js @@ -1,50 +1,77 @@ async function populate() { - const requestURL = "../assets/data/oldgamepatches.json"; + const requestURL = '../assets/data/oldgamepatches.json'; try { - const response = await fetch(requestURL, { cache: "no-cache" }); + // Fetching the patches data + const response = await fetch(requestURL, { cache: 'no-cache' }); if (!response.ok) { throw new Error(`Network response was not ok: ${response.statusText}`); } - const patches = await response.json(); + let patches; - if (!patches || !patches.game) { - throw new Error("Invalid data format: Missing game data"); + try { + patches = await response.json(); // Safely parse JSON + } catch (jsonError) { + throw new Error('Failed to parse JSON data'); } - renderPatchList(patches.game, ".gameList"); + // Ensure game data exists + if (!patches || !Array.isArray(patches.game)) { + throw new Error('Invalid data format: Missing or malformed game data'); + } + + // Render the patches if available + renderPatchList(patches.game, '.gameList'); } catch (error) { - console.error("There has been a problem with your fetch operation:", error); + console.error('There has been a problem with your fetch operation:', error); + renderError('.gameList', 'Failed to load game patches'); } } function renderPatchList(patchList, containerSelector) { const container = document.querySelector(containerSelector); + if (!container) { - console.error(`Container with selector ${containerSelector} not found`); + console.error(`Container with selector "${containerSelector}" not found.`); return; } - const list = document.createElement("ul"); + const fragment = document.createDocumentFragment(); // Use fragment for better performance + + patchList.forEach( + ({ patch = 'Unknown Patch', link = '#', date = 'Unknown Date' }) => { + const listItem = document.createElement('li'); + + const linkElement = document.createElement('a'); + linkElement.textContent = patch; + linkElement.href = link; + linkElement.target = '_blank'; - patchList.forEach(({ patch, link, date }) => { - const listItem = document.createElement("li"); + const dateElement = document.createElement('span'); + dateElement.textContent = date; - const linkElement = document.createElement("a"); - linkElement.textContent = patch; - linkElement.href = link; - linkElement.target = "_blank"; + listItem.append(linkElement, dateElement); + fragment.appendChild(listItem); + } + ); - const dateElement = document.createElement("span"); - dateElement.textContent = date; + container.innerHTML = ''; // Clear existing content + container.appendChild(fragment); // Append all items at once for better performance +} - listItem.append(linkElement, dateElement); - list.appendChild(listItem); - }); +function renderError(containerSelector, message) { + const container = document.querySelector(containerSelector); - container.innerHTML = ""; - container.appendChild(list); + if (container) { + container.innerHTML = `

${message}

`; + } else { + console.error(`Container with selector "${containerSelector}" not found.`); + } } -document.addEventListener("DOMContentLoaded", populate); + +// Load the patches on DOMContentLoaded +document.addEventListener('DOMContentLoaded', async () => { + await populate(); // Use async function for potential future enhancements +}); diff --git a/scripts/populatePatches.js b/scripts/populatePatches.js index b932eeb..408fb54 100644 --- a/scripts/populatePatches.js +++ b/scripts/populatePatches.js @@ -1,24 +1,34 @@ async function populate() { - const requestURL = "../assets/data/patches.json"; + const requestURL = '../assets/data/patches.json'; try { - const response = await fetch(requestURL, { cache: "no-cache" }); + const response = await fetch(requestURL, { cache: 'no-cache' }); if (!response.ok) { throw new Error(`Network response was not ok: ${response.statusText}`); } const patches = await response.json(); - const { balance, game } = patches; + const { balance = [], game = [] } = patches; // Provide empty arrays as fallback - if (!balance || !game) { - throw new Error("Invalid data format: Missing Balance or Game Data"); + if (balance.length === 0 && game.length === 0) { + throw new Error('Invalid data format: Missing Balance or Game data.'); } - renderPatchList(balance, ".BalanceJSONList"); - renderPatchList(game, ".GameJSONList"); + // Render only if data exists + if (balance.length > 0) { + renderPatchList(balance, '.BalanceJSONList'); + } else { + console.warn('No balance data available.'); + } + + if (game.length > 0) { + renderPatchList(game, '.GameJSONList'); + } else { + console.warn('No game data available.'); + } } catch (error) { - console.error("There has been a problem with your fetch operation:", error); + console.error('There has been a problem with your fetch operation:', error); } } @@ -26,28 +36,31 @@ function renderPatchList(patchList, containerSelector) { const container = document.querySelector(containerSelector); if (!container) { - console.error(`Container with selector ${containerSelector} not found`); + console.error(`Container with selector "${containerSelector}" not found.`); return; } - const list = document.createElement("ul"); + const fragment = document.createDocumentFragment(); // Use DocumentFragment for better performance - patchList.forEach(({ patch, link, date }) => { - const listItem = document.createElement("li"); + patchList.forEach( + ({ patch = 'Unknown Patch', link = '#', date = 'Unknown Date' }) => { + const listItem = document.createElement('li'); - const linkElement = document.createElement("a"); - linkElement.textContent = patch; - linkElement.href = link; - linkElement.target = "_blank"; + const linkElement = document.createElement('a'); + linkElement.textContent = patch; + linkElement.href = link; + linkElement.target = '_blank'; - const dateElement = document.createElement("span"); - dateElement.textContent = date; + const dateElement = document.createElement('span'); + dateElement.textContent = date; + + listItem.append(linkElement, dateElement); + fragment.appendChild(listItem); + } + ); - listItem.append(linkElement, dateElement); - list.appendChild(listItem); - }); - container.innerHTML = ""; - container.appendChild(list); + container.innerHTML = ''; // Clear any existing content + container.appendChild(fragment); // Append all at once for better performance } -document.addEventListener("DOMContentLoaded", populate); +document.addEventListener('DOMContentLoaded', populate); diff --git a/scripts/themeSwitch.js b/scripts/themeSwitch.js index 2462ac0..df4dd1b 100644 --- a/scripts/themeSwitch.js +++ b/scripts/themeSwitch.js @@ -1,23 +1,40 @@ +const THEME_KEY = 'theme'; +const LIGHT_MODE_CLASS = 'light-mode'; + function toggleTheme() { const htmlElement = document.documentElement; - const currentTheme = htmlElement.classList.toggle("light-mode") - ? "light" - : "dark"; - localStorage.setItem("theme", currentTheme); + const isLightMode = htmlElement.classList.toggle(LIGHT_MODE_CLASS); + const newTheme = isLightMode ? 'light' : 'dark'; + try { + localStorage.setItem(THEME_KEY, newTheme); + } catch (e) { + console.warn('Unable to access localStorage. Theme will reset on reload.'); + } } -// Load theme on page load -document.addEventListener("DOMContentLoaded", () => { - const savedTheme = localStorage.getItem("theme"); - if (savedTheme) { - document.documentElement.classList.toggle( - "light-mode", - savedTheme === "light" - ); +function loadTheme() { + const htmlElement = document.documentElement; + let savedTheme; + + try { + savedTheme = localStorage.getItem(THEME_KEY); + } catch (e) { + console.warn('Unable to access localStorage. Using default theme.'); } - const themeToggleButton = document.querySelector("#themeToggleButton"); + if (savedTheme === 'light') { + htmlElement.classList.add(LIGHT_MODE_CLASS); + } else { + htmlElement.classList.remove(LIGHT_MODE_CLASS); + } +} + +document.addEventListener('DOMContentLoaded', () => { + // Load the saved theme on page load + loadTheme(); + + const themeToggleButton = document.querySelector('#themeToggleButton'); if (themeToggleButton) { - themeToggleButton.addEventListener("click", toggleTheme); + themeToggleButton.addEventListener('click', toggleTheme); } }); diff --git a/style/balance.css b/style/balance.css index 10e32f6..1517ce9 100644 --- a/style/balance.css +++ b/style/balance.css @@ -1,8 +1,8 @@ -@import "../style/root.css"; -@import "../style/components/card.css"; -@import "../style/components/images.css"; -@import "../style/components/video.css"; -@import "../style/components/button.css"; +@import '../style/root.css'; +@import '../style/components/card.css'; +@import '../style/components/images.css'; +@import '../style/components/video.css'; +@import '../style/components/button.css'; h1, h2, @@ -10,7 +10,7 @@ h3, h4, h5, h6 { - font-family: "Ubuntu", sans-serif; + font-family: 'Ubuntu', sans-serif; font-style: normal; font-weight: normal; margin: 10px 0; diff --git a/style/components/button.css b/style/components/button.css index 3e3977f..fc5a2ad 100644 --- a/style/components/button.css +++ b/style/components/button.css @@ -4,13 +4,16 @@ button { background: var(--ButtonBackground); color: var(--ButtonText); border: none; - text-decoration: none; font-size: 16px; cursor: pointer; - transition: background 0.3s ease, color 0.3 ease; display: inline-flex; align-items: center; justify-content: center; + transition: background 0.3s ease, color 0.3s ease, transform 0.2s ease; + text-align: center; + min-width: 100px; /* Ensures a minimum button width */ + min-height: 40px; + white-space: nowrap; /* Prevents text wrapping */ } button a { @@ -18,38 +21,52 @@ button a { text-decoration: none; } -/* Hover and active states */ button:hover { - background: var( - --ButtonHoverBackground, - darken(var(--ButtonBackground), 10%) - ); + filter: brightness(0.9); /* Darkens the background without needing darken() */ } button:active { - background: var( - --ButtonActiveBackground, - darken(var(--ButtonBackground), 20%) - ); + filter: brightness(0.8); + transform: scale(0.98); /* Subtle press effect */ } /* Focus styles for accessibility */ button:focus { - outline: 2px solid var(--ButtonFocusOutline, #000); - outline-offset: 2px; + outline: 3px solid var(--ButtonFocusOutline, #0056b3); /* More visible focus color */ + outline-offset: 3px; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); /* Add inner glow for better focus effect */ +} + +/* Disabled state */ +button:disabled { + background: var(--ButtonDisabledBackground, #ccc); /* Light gray background */ + color: var(--ButtonDisabledText, #777); /* Muted text color */ + cursor: not-allowed; + filter: none; +} + +/* Small and large button classes for flexibility */ +button.small { + font-size: 12px; + padding: 8px 12px; +} + +button.large { + font-size: 18px; + padding: 16px 24px; } /* Responsive design */ @media (max-width: 768px) { button { - font-size: 14px; /* Adjust font size for medium screens */ - padding: 10px 14px; /* Adjust padding for medium screens */ + font-size: 14px; + padding: 10px 14px; } } @media (max-width: 420px) { button { - font-size: 12px; /* Adjust font size for small screens */ - padding: 8px 12px; /* Adjust padding for small screens */ + font-size: 12px; + padding: 8px 12px; } } diff --git a/style/components/card.css b/style/components/card.css index e184840..77ba4f8 100644 --- a/style/components/card.css +++ b/style/components/card.css @@ -1,40 +1,99 @@ -@import "../root.css"; +@import '../root.css'; +/* Main Card Styles */ .Card { background: var(--Card); border-radius: 1em; - padding: 10px 20px; + padding: 16px 24px; margin: 20px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06); /* Softer layered shadow */ color: var(--Text); display: flex; flex-direction: column; + transition: transform 0.2s ease, box-shadow 0.2s ease; } +/* Card Hover for Interaction */ +.Card:hover { + transform: translateY(-5px); /* Slight lift effect */ + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15), 0 4px 8px rgba(0, 0, 0, 0.1); /* Stronger shadow on hover */ +} + +/* Image Styling */ .Card img { margin-bottom: 15px; max-width: 100%; height: auto; border-radius: 0.5em; + object-fit: cover; /* Ensure consistent image aspect ratio */ + transition: transform 0.2s ease; +} + +.Card img:hover { + transform: scale(1.05); /* Slight zoom effect on hover */ +} + +/* Optional Clickable Card */ +.Card.Clickable { + cursor: pointer; +} + +/* Default Spacing for Card Elements */ +.Card h3, +.Card h4, +.Card p, +.Card a { + margin: 10px 0; +} + +.Card h3, +.Card h4 { + font-size: 1.25rem; } -/* Responsive design */ +.Card p { + line-height: 1.6; + color: var(--Text); +} + +/* Button inside the Card */ +.Card a { + display: inline-block; + padding: 10px 15px; + background: var(--ButtonBackground); + color: var(--ButtonText); + border-radius: 5px; + text-decoration: none; + margin-top: auto; + transition: background 0.3s ease; +} + +.Card a:hover { + background: var(--ButtonHoverBackground); +} + +/* Responsive Design */ @media (max-width: 768px) { .Card { - padding: 8px 16px; /* Adjust padding for medium screens */ - margin: 15px; /* Adjust margin for medium screens */ - box-shadow: 0 0 8px rgba(0, 0, 0, 0.4); /* Slightly lighter shadow */ + padding: 12px 20px; + margin: 15px; + box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1), 0 2px 3px rgba(0, 0, 0, 0.06); } } @media (max-width: 420px) { .Card { - padding: 6px 12px; /* Adjust padding for small screens */ - margin: 10px; /* Adjust margin for small screens */ - box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); /* Lighter shadow for smaller screens */ + padding: 8px 16px; + margin: 10px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.05); } .Card img { - margin-bottom: 10px; /* Adjust spacing below the image */ + margin-bottom: 10px; + } + + .Card h3, + .Card h4 { + font-size: 1.1rem; } } diff --git a/style/components/images.css b/style/components/images.css index 5ed9a2c..3ef35b6 100644 --- a/style/components/images.css +++ b/style/components/images.css @@ -16,20 +16,28 @@ overflow: hidden; resize: horizontal; z-index: 1; + transition: width 0.3s ease; /* Smooth transition when resizing */ } .ImageSlider > div:before { - content: ""; + content: ''; position: absolute; right: 0; bottom: 0; - width: 16px; - height: 16px; + width: 20px; + height: 20px; padding: 5px; background: linear-gradient(-45deg, white 50%, transparent 0); background-clip: content-box; cursor: ew-resize; - filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.6)); + filter: drop-shadow( + 0 0 6px rgba(0, 0, 0, 0.4) + ); /* Softer shadow for better aesthetics */ + transition: transform 0.2s ease; /* Smooth interaction when clicked */ +} + +.ImageSlider > div:hover:before { + transform: scale(1.1); /* Slightly enlarge the handle on hover */ } .ImageSlider img { @@ -38,8 +46,12 @@ user-select: none; width: 100%; height: auto; + object-fit: cover; + transition: opacity 0.3s ease; /* Smooth fade effect when switching images */ + loading: lazy; /* Lazy load for performance optimization */ } +/* Image Showcase Styles */ .ImageShowcase { width: 100%; height: auto; @@ -47,25 +59,35 @@ border-radius: 15px; } -/* Responsive design */ +/* Handle responsiveness for mobile devices */ @media (max-width: 768px) { .ImageSlider > div { - width: 25px; /* Smaller handle for medium screens */ + width: 25px; /* Smaller handle */ } .ImageSlider > div:before { - width: 14px; /* Adjusted handle size */ - height: 14px; /* Adjusted handle size */ + width: 16px; /* Adjust handle size for medium screens */ + height: 16px; } } @media (max-width: 420px) { .ImageSlider > div { - width: 20px; /* Smaller handle for small screens */ + width: 20px; /* Even smaller handle for mobile */ } .ImageSlider > div:before { - width: 12px; /* Adjusted handle size */ - height: 12px; /* Adjusted handle size */ + width: 12px; /* Adjust handle size for small screens */ + height: 12px; } } + +/* ARIA and accessibility improvements */ +.ImageSlider[aria-valuenow] { + outline: none; +} + +.ImageSlider[aria-valuenow]:focus-visible > div:before { + outline: 2px solid var(--ButtonFocusOutline, #000); /* Focus outline for keyboard users */ + outline-offset: 2px; +} diff --git a/style/index.css b/style/index.css index d04da2d..04f6fb7 100644 --- a/style/index.css +++ b/style/index.css @@ -2,173 +2,193 @@ /* Tags */ html { - background-size: cover; - background-repeat: no-repeat; - min-height: 100%; + background-size: cover; + background-repeat: no-repeat; + min-height: 100%; + background-color: #222831; /* Fallback background color */ } -body { - background: none; +body { + background: none; } -h1, h2, h3, h4 { - font-family: 'Ubuntu', sans-serif; - font-style: normal; - font-weight: normal; - text-align: center; +h1, +h2, +h3, +h4 { + font-family: 'Ubuntu', sans-serif; + font-style: normal; + font-weight: normal; + text-align: center; + margin: 0; } -li { list-style-type: none; } +li { + list-style-type: none; +} -ul { - columns: 3; +ul { + columns: 3; + column-gap: 20px; /* Add spacing between columns */ } a { - color: var(--Link-Unvisited); - text-decoration: none; + color: var(--Link-Unvisited); + text-decoration: none; +} +a:visited { + color: var(--Link-Visited); +} +a:hover { + color: var(--Link-Hover); +} +a:active { + color: var(--Link-Active); } -a:visited { color: var(--Link-Visited); } -a:hover { color: var(--Link-Hover); } -a:active { color: var(--Link-Active); } -/* Classes */ +/* Grid and Layout */ .GridContainer { - display: grid; - padding: 10px; - grid-template-columns: 0.25fr 2.5fr 2.5fr 0.25fr; - grid-gap: 20px; - margin: 10px; + display: grid; + padding: 10px; + grid-template-columns: 0.25fr 2.5fr 2.5fr 0.25fr; + grid-gap: 20px; + margin: 10px; } .GridItemBackground { - position: relative; - background: var(--IndexGridBackground); - border-radius: 15px; - overflow: hidden; + position: relative; + background: var(--IndexGridBackground); + border-radius: 15px; + overflow: hidden; } .GridItemBackground::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: inherit; - filter: blur(25px); - z-index: -1; -} - -.Space, .Title, .BalanceContainer, .GameContainer, .BalanceDev, .Support, .BalanceJSONList, .GameJSONList { - padding: 10px; - text-align: center; -} - -.Space { - grid-row: 1; - grid-column: 2 / span 2; + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: inherit; + filter: blur(25px); + z-index: -1; +} + +.Space, +.Title, +.BalanceContainer, +.GameContainer, +.BalanceDev, +.Support, +.BalanceJSONList, +.GameJSONList { + padding: 10px; + text-align: center; } .Title { - grid-row: 2; - grid-column: 2 / span 2; + grid-row: 2; + grid-column: 2 / span 2; } .Title h1 { - font-size: 40px; - padding: 10px 0 10px 0; + font-size: 40px; + padding: 10px 0; } .Title p { - font-size: 16px; - color: var(--Text); + font-size: 16px; + color: var(--Text); } .BalanceContainer { - grid-column: 2; - grid-row: 3; + grid-column: 2; + grid-row: 3; } .GameContainer { - grid-column: 3; - grid-row: 3; + grid-column: 3; + grid-row: 3; } .GameContainer p { - text-align: center; + text-align: center; } .BalanceDev { - grid-row: 4; - grid-column: 2 / span 1; + grid-row: 4; + grid-column: 2 / span 1; } .Support { - grid-row: 4; - grid-column: 3 / span 1; + grid-row: 4; + grid-column: 3 / span 1; } -.BalanceDev p, .Support p { - padding: 10px 0 10px 0; +.BalanceDev p, +.Support p { + padding: 10px 0; } -.BalanceJSONList, .GameJSONList { - grid-row: 3; - text-align: left; +.BalanceJSONList, +.GameJSONList { + grid-row: 3; + text-align: left; } /* Media Queries */ @media only screen and (min-width: 1400px) { - /* Custom styles for desktops if any */ + /* Custom styles for desktops if any */ } @media only screen and (min-width: 992px) and (max-width: 1399px) { - ul { - columns: 2; - } + ul { + columns: 2; + column-gap: 20px; /* Maintain column spacing */ + } } @media only screen and (min-width: 768px) and (max-width: 991px) { - ul { - columns: 1; - } + ul { + columns: 1; + column-gap: 20px; /* Maintain column spacing */ + } } @media only screen and (max-width: 767px) { - ul { - columns: 1; - } - .Grid { - grid-template-columns: 1fr; - grid-template-rows: auto; - } - .Title { - grid-row: 1; - grid-column: 1 / span 3; - } - .BalanceContainer { - grid-row: 2; - grid-column: 1 / span 2; - } - .GameContainer { - grid-row: 3; - grid-column: 1 / span 2; - } - .BalanceDev { - grid-row: 4; - grid-column: 1 / span 2; - } - .Support { - grid-row: 5; - grid-column: 1 / span 2; - } + ul { + columns: 1; + } + .GridContainer { + grid-template-columns: 1fr; + grid-template-rows: auto; + } + .Title { + grid-row: 1; + grid-column: 1 / span 1; + } + .BalanceContainer { + grid-row: 2; + grid-column: 1 / span 1; + } + .GameContainer { + grid-row: 3; + grid-column: 1 / span 1; + } + .BalanceDev { + grid-row: 4; + grid-column: 1 / span 1; + } + .Support { + grid-row: 5; + grid-column: 1 / span 1; + } } @media screen and (max-width: 500px) { - ul { - columns: 1; - } - .Title h1 { - font-size: 40px; - line-height: normal; - } -} \ No newline at end of file + ul { + columns: 1; + } + .Title h1 { + font-size: 32px; /* Adjusted for smaller screens */ + line-height: normal; + } +} diff --git a/style/root.css b/style/root.css index 31615f9..0406caf 100644 --- a/style/root.css +++ b/style/root.css @@ -2,19 +2,26 @@ @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&family=Ubuntu&display=swap'); @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css'); -/* Declaring Default Color */ +/* Reset Box-sizing */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Declaring Default Colors */ :root { - /* Background Color */ + /* Background Colors */ --Background: #222831; --FooterBackground: #393e46; --IndexGridBackground: rgba(57, 62, 70, 0.85); --IconGridBackground: #393e46; - /* Text Color */ + /* Text Colors */ --Text: #eee; --Top: #000; - /* Card Color */ + /* Card Colors */ --Card: #393e46; /* Tags */ @@ -24,7 +31,7 @@ --removed: rgba(190, 92, 0, 0.6); --added: rgba(31, 52, 172, 0.7); - /* Link Color */ + /* Link Colors */ --Link: #eee; --Link-Card: #000; --Link-Unvisited: #87cefa; @@ -41,55 +48,49 @@ } :root.light-mode { - /* Background Color */ - --Background: #f2f2f2; /* Light gray for the background */ - --FooterBackground: #e0e0e0; /* Slightly darker gray for the footer */ - --IndexGridBackground: rgba( - 240, - 240, - 240, - 0.85 - ); /* Light with slight transparency */ - --IconGridBackground: #e0e0e0; /* Same as footer for consistency */ - - /* Text Color */ - --Text: #222831; /* Dark gray for the text, matching the original dark mode background */ - --Top: #000; /* Kept black for high contrast */ - - /* Card Color */ - --Card: #ffffff; /* White card for a clean, light look */ + /* Background Colors */ + --Background: #f2f2f2; + --FooterBackground: #e0e0e0; + --IndexGridBackground: rgba(240, 240, 240, 0.85); + --IconGridBackground: #e0e0e0; + + /* Text Colors */ + --Text: #222831; + --Top: #000; + + /* Card Colors */ + --Card: #ffffff; /* Tags */ - --buff: rgba(76, 142, 34, 0.8); /* Muted green, still vibrant but softer */ - --nerf: rgba(150, 40, 40, 0.75); /* Less intense red for light backgrounds */ - --stats: rgba(0, 0, 0, 0.4); /* Lighter black to match the new scheme */ - --removed: rgba(185, 80, 20, 0.7); /* Softer orange-brown */ - --added: rgba(50, 90, 200, 0.75); /* Brighter blue for readability */ - - /* Link Color */ - --Link: #0056b3; /* Deep blue for links */ - --Link-Card: #ffffff; /* White for link on card background */ - --Link-Unvisited: #0047ab; /* Stronger blue for unvisited links */ - --Link-Visited: #8b0000; /* Darker red for visited links */ - --Link-Hover: #d4a020; /* Warm gold hover effect */ + --buff: rgba(76, 142, 34, 0.8); + --nerf: rgba(150, 40, 40, 0.75); + --stats: rgba(0, 0, 0, 0.4); + --removed: rgba(185, 80, 20, 0.7); + --added: rgba(50, 90, 200, 0.75); + + /* Link Colors */ + --Link: #0056b3; + --Link-Card: #ffffff; + --Link-Unvisited: #0047ab; + --Link-Visited: #8b0000; + --Link-Hover: #d4a020; /* Other */ - --Strike: #666; /* Medium gray for strikethroughs */ - --Line: #bbb; /* Light gray for lines */ - --LM-HR: #aaa; /* Slightly darker line for HRs */ - --ButtonBackground: #4474c1; /* Kept the same button blue for consistency */ - --ButtonText: #fff; /* White text for buttons */ - --IconGlow: rgba(0, 0, 0, 0.2); /* Soft shadow for light mode */ + --Strike: #666; + --Line: #bbb; + --LM-HR: #aaa; + --ButtonBackground: #4474c1; + --ButtonText: #fff; + --IconGlow: rgba(0, 0, 0, 0.2); } /* Base Elements */ body { background: var(--Background); - font-family: sans-serif; - font-size: 16px; - line-height: 22px; + font-family: 'Open Sans', 'Ubuntu', sans-serif; + font-size: 1rem; + line-height: 1.5; color: var(--Text); - box-sizing: border-box; margin: 0; padding: 0; } @@ -107,13 +108,13 @@ footer { } h1 { - font-size: 30px; + font-size: 1.875rem; /* 30px */ } h2 { - font-size: 25px; + font-size: 1.5625rem; /* 25px */ } h3 { - font-size: 20px; + font-size: 1.25rem; /* 20px */ } s { @@ -127,13 +128,14 @@ img { } video { - width: 900px; - height: 100%; + width: 100%; /* Make it responsive */ + max-width: 900px; + height: auto; } footer { text-align: center; - font-size: 16px; + font-size: 1rem; background: var(--FooterBackground); padding: 10px 0 5px; } @@ -172,10 +174,10 @@ footer { display: flex; } -.FlexGrow1 { +.FlexGrow-1 { flex-grow: 1; } -.FlexGrow4 { +.FlexGrow-4 { flex-grow: 4; }