Sweep cap (#54)

* Added initial implementation of Sweep groups

* Added initial implementation of Sweep groups

* Added initial implementation of Sweep groups

* Added initial implementation of Sweep groups

* fixed issues when testing

* Intercept cap (#55)

* First intial WIP for intercept units

* First intial WIP for intercept units

* major updates

---------

Co-authored-by: ex61wi <tim.rorije@ing.com>
Co-authored-by: dutchie032 <dutchie032>

---------

Co-authored-by: ex61wi <tim.rorije@ing.com>
Co-authored-by: dutchie032 <dutchie032>
This commit is contained in:
2025-06-12 22:40:55 +02:00
committed by GitHub
co-authored by ex61wi dutchie032 <dutchie032>
parent bdf7154333
commit ef65f5a353
22 changed files with 1834 additions and 353 deletions
+8 -28
View File
@@ -5,46 +5,26 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spearhead</title>
<link rel="stylesheet" href="style/style.css">
<script src="js/site.js"></script>
<script type="module" src="js/components.js"></script>
</head>
<body>
<header>
<div class="header-box">
<a class="logo" href="index.html">Spearhead</a>
<div class="header-right">
<nav>
<a href="index.html">Home</a>
<a href="pages/tutorials.html">Tutorials</a>
<a href="pages/persistence.html">Persistence</a>
<a href="pages/reference.html">Reference</a>
<a href="pages/spearheadapi.html">API</a>
</nav>
<button id="theme-toggle" class="theme-toggle" title="Toggle light/dark theme">
<svg id="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"/>
</svg>
<svg id="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19H12.998V22H10.998zM10.998 2H12.998V5H10.998zM1.998 11H4.998V13H1.998zM18.998 11H21.998V13H18.998z"/>
<path transform="rotate(-45.017 5.986 18.01)" d="M4.986 17.01H6.986V19.01H4.986z"/>
<path transform="rotate(-45.001 18.008 5.99)" d="M17.008 4.99H19.008V6.99H17.008z"/>
<path transform="rotate(-134.983 5.988 5.99)" d="M4.988 4.99H6.988V6.99H4.988z"/>
<path transform="rotate(134.999 18.008 18.01)" d="M17.008 17.01H19.008V19.01H17.008z"/>
</svg>
</button>
</div>
</div>
<app-header></app-header>
</header>
<main>
<div class="reference-container">
<div class="side-nav">
<h4>Quick Links</h4>
<ul>
<li><a href="pages/tutorials.html" class="side-nav-h2">Tutorials</a></li>
<li><a href="pages/persistence.html" class="side-nav-h2">Persistence</a></li>
<li><a href="pages/reference.html" class="side-nav-h2">Reference</a></li>
<li><a href="pages/spearheadapi.html" class="side-nav-h2">API</a></li>
<li><a href="/pages/tutorials.html" class="side-nav-h2">Tutorials</a></li>
<li><a href="/pages/persistence.html" class="side-nav-h2">Persistence</a></li>
<li><a href="/pages/reference.html" class="side-nav-h2">Reference</a></li>
<li><a href="/pages/spearheadapi.html" class="side-nav-h2">API</a></li>
</ul>
</div>
<div class="content-wrapper">
-7
View File
@@ -1,7 +0,0 @@
<style>
.side-nav a.active {
font-weight: bold;
color: #4fc3f7;
}
</style>
<!-- Removed inline script: sidenav highlight now handled by site.js -->
+41 -67
View File
@@ -4,69 +4,36 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spearhead Persistence</title>
<link rel="stylesheet" href="../style/style.css">
<script src="../js/site.js"></script>
<title>Spearhead Persistence</title> <!-- Google Fonts -->
<link rel="stylesheet" href="/style/style.css">
<script src="/js/site.js"></script>
<style>
.side-nav a.active {
font-weight: bold;
color: #4fc3f7;
}
.side-nav a.active {
font-weight: bold;
color: #4fc3f7;
}
</style>
<script type="module" src="/js/components.js"></script>
</head>
<body>
<header>
<div class="header-box">
<a class="logo" href="../index.html">Spearhead</a>
<div class="header-right">
<nav>
<a href="../index.html">Home</a>
<a href="../pages/tutorials.html">Tutorials</a>
<a href="../pages/persistence.html">Persistence</a>
<a href="../pages/reference.html">Reference</a>
<a href="../pages/spearheadapi.html">API</a>
</nav>
<button id="theme-toggle" class="theme-toggle" title="Toggle light/dark theme">
<svg id="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"/>
</svg>
<svg id="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19H12.998V22H10.998zM10.998 2H12.998V5H10.998zM1.998 11H4.998V13H1.998zM18.998 11H21.998V13H18.998z"/>
<path transform="rotate(-45.017 5.986 18.01)" d="M4.986 17.01H6.986V19.01H4.986z"/>
<path transform="rotate(-45.001 18.008 5.99)" d="M17.008 4.99H19.008V6.99H17.008z"/>
<path transform="rotate(-134.983 5.988 5.99)" d="M4.988 4.99H6.988V6.99H4.988z"/>
<path transform="rotate(134.999 18.008 18.01)" d="M17.008 17.01H19.008V19.01H17.008z"/>
</svg>
</button>
</div>
</div>
</header>
<main>
<app-header></app-header>
</header> <main>
<div class="reference-container">
<div class="side-nav">
<h4 class="side-nav-title"></h4>
<ul>
<li><a href="#settings" class="side-nav-h2">Settings</a></li>
<li><a href="#feedback" class="side-nav-h2">Feedback</a></li>
<li><a href="#basic-behavior" class="side-nav-h2">Basic Behavior</a></li>
<li><a href="#misc-units" class="side-nav-h2">Misc Units</a></li>
<li><a href="#missions" class="side-nav-h2">Missions</a></li>
<li><a href="#blue-sams" class="side-nav-h2">Blue SAMs</a></li>
<li><a href="#airbases" class="side-nav-h2">Airbases</a></li>
<li><a href="#warehouses" class="side-nav-h2">Warehouses</a></li>
</ul>
</div>
<app-sidebar></app-sidebar>
<div class="content-wrapper">
<h1>Persistence</h1>
<p>
Spearhead comes with a custom Persistence option. <br/>
It will even save burned out vehicles to give players a consistent battlefield even after the restart. <br/>
Spearhead comes with a custom Persistence option. <br />
It will even save burned out vehicles to give players a consistent battlefield even after the
restart. <br />
</p>
<p>
Most is pretty straightforward, however, some zones are somewhat special. <br/>
Most is pretty straightforward, however, some zones are somewhat special. <br />
Underneath you'll see all special zones listed.
</p>
@@ -77,9 +44,10 @@
<h2 id="feedback">Feedback</h2>
<p>
Since this feature is still very much in development, please let any issues be known as soon as possible and as concise as possible so a fix can be made quickly. <br/>
Currently implemented is local file storage. <br/>
If enough interest is expressed, cloud-based persistence would be possible. <br/>
Since this feature is still very much in development, please let any issues be known as soon as
possible and as concise as possible so a fix can be made quickly. <br />
Currently implemented is local file storage. <br />
If enough interest is expressed, cloud-based persistence would be possible. <br />
</p>
<pre>
@@ -102,40 +70,46 @@
<h2 id="basic-behavior">Basic Behavior</h2>
<p>
While playing the mission, Spearhead is keeping track of all units killed. <br/>
These units are stored in memory internally and written to file. <br/>
This happens every 2 minutes AND during the "onMissionStop" event to make sure the mission is as up-to-date as possible without having to call IO methods on each event.<br/>
While playing the mission, Spearhead is keeping track of all units killed. <br />
These units are stored in memory internally and written to file. <br />
This happens every 2 minutes AND during the "onMissionStop" event to make sure the mission is as
up-to-date as possible without having to call IO methods on each event.<br />
</p>
<h2 id="misc-units">Misc Units</h2>
<p>
Miscellaneous units will follow basic behavior. <br/>
These are units that are part of a stage but are not in a mission or airbase. <br/>
These units will be replaced by a static "DEAD" unit after a mission restart at the location it was killed. <br/>
Due to blue units spawning afterwards, it's generally best to not have these units move through or over areas where BLUESAMS and Airbase units will spawn after a stage completion.
Miscellaneous units will follow basic behavior. <br />
These are units that are part of a stage but are not in a mission or airbase. <br />
These units will be replaced by a static "DEAD" unit after a mission restart at the location it was
killed. <br />
Due to blue units spawning afterwards, it's generally best to not have these units move through or
over areas where BLUESAMS and Airbase units will spawn after a stage completion.
</p>
<h2 id="missions">Missions</h2>
<p>
Missions follow the same logic as Misc Units. <br/>
Missions follow the same logic as Misc Units. <br />
</p>
<h2 id="blue-sams">Blue SAMs</h2>
<p>
For Blue SAMs, due to placements easily overlapping between red and blue units within a BLUESAM trigger zone, red units that overlap with blue units will be deleted. <br/>
This will ensure that the blue units are placed as needed. <br/>
For Blue SAMs, due to placements easily overlapping between red and blue units within a BLUESAM
trigger zone, red units that overlap with blue units will be deleted. <br />
This will ensure that the blue units are placed as needed. <br />
</p>
<h2 id="airbases">Airbases</h2>
<p>
Airbase units will also be checked for overlap. As the blue units will be spawned after the RED unit. <br/>
Units that were alive when the stage was completed will be removed. Units that died will have corpses spawned. <br/>
Airbase units will also be checked for overlap. As the blue units will be spawned after the RED
unit. <br />
Units that were alive when the stage was completed will be removed. Units that died will have
corpses spawned. <br />
</p>
<h2 id="warehouses">Warehouses</h2>
<p>
Currently, warehouses are not implemented and therefore warehouses are not persisted. <br/>
When supply missions and logistics get implemented, warehouses will be persisted as well. <br/>
Currently, warehouses are not implemented and therefore warehouses are not persisted. <br />
When supply missions and logistics get implemented, warehouses will be persisted as well. <br />
</p>
</div>
</div>
@@ -146,4 +120,4 @@
</body>
</html>
```
```
+7 -67
View File
@@ -4,7 +4,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spearhead Reference</title>
<title>Spearhead Reference</title> <!-- Google Fonts -->
<link rel="stylesheet" href="../style/style.css">
<script src="../js/site.js"></script>
<style>
@@ -12,78 +13,17 @@
font-weight: bold;
color: #4fc3f7;
}
</style>
</style>
<script type="module" src="../js/components.js"></script>
</head>
<body>
<header>
<div class="header-box">
<a class="logo" href="../index.html">Spearhead</a>
<div class="header-right">
<nav>
<a href="../index.html">Home</a>
<a href="../pages/tutorials.html">Tutorials</a>
<a href="../pages/persistence.html">Persistence</a>
<a href="../pages/reference.html">Reference</a>
<a href="../pages/spearheadapi.html">API</a>
</nav>
<button id="theme-toggle" class="theme-toggle" title="Toggle light/dark theme">
<svg id="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"/>
</svg>
<svg id="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19H12.998V22H10.998zM10.998 2H12.998V5H10.998zM1.998 11H4.998V13H1.998zM18.998 11H21.998V13H18.998z"/>
<path transform="rotate(-45.017 5.986 18.01)" d="M4.986 17.01H6.986V19.01H4.986z"/>
<path transform="rotate(-45.001 18.008 5.99)" d="M17.008 4.99H19.008V6.99H17.008z"/>
<path transform="rotate(-134.983 5.988 5.99)" d="M4.988 4.99H6.988V6.99H4.988z"/>
<path transform="rotate(134.999 18.008 18.01)" d="M17.008 17.01H19.008V19.01H17.008z"/>
</svg>
</button>
</div>
</div>
</header>
<app-header></app-header>
</header>
<main>
<div class="reference-container">
<div class="side-nav">
<h4 class="side-nav-title"></h4>
<ul>
<li><a href="#configuration" class="side-nav-h2">Configuration</a></li>
<li><a href="#general-naming-conventions" class="side-nav-h2">Naming Conventions</a>
<ul>
<li><a href="#stage-zones" class="side-nav-h3">Stage Zones</a></li>
<li><a href="#waiting-stages" class="side-nav-h3">Waiting Stages</a></li>
<li><a href="#mission-zones" class="side-nav-h3">Mission Zones</a></li>
<li><a href="#cap-routes" class="side-nav-h3">CAP Routes</a></li>
<li><a href="#farp-zones" class="side-nav-h3">FARP Zones</a></li>
</ul>
</li>
<li><a href="#mission-types" class="side-nav-h2">Mission Types</a>
<ul>
<li><a href="#sam" class="side-nav-h3">SAM</a></li>
<li><a href="#dead" class="side-nav-h3">DEAD</a></li>
<li><a href="#bai" class="side-nav-h3">BAI</a></li>
<li><a href="#cas" class="side-nav-h3">BAI</a></li>
<li><a href="#strike" class="side-nav-h3">STRIKE</a></li>
</ul>
</li>
<li><a href="#mission-briefings" class="side-nav-h2">Mission Briefings</a>
<ul>
<li><a href="#special-fields" class="side-nav-h3">Special Fields</a></li>
</ul>
</li>
<li><a href="#cap-configuration" class="side-nav-h2">CAP Configuration</a>
<ul>
<li><a href="#cap-group-naming" class="side-nav-h3">CAP Group Naming</a></li>
<li><a href="#cap-group-config" class="side-nav-h3">CAP Group Config</a></li>
<li><a href="#active-and-backup-cap" class="side-nav-h3">Active and Backup CAP</a></li>
</ul>
</li>
<li><a href="#randomization" class="side-nav-h2">Randomization</a></li>
<li><a href="#in-stage-dependencies" class="side-nav-h2">In stage dependencies</a></li>
<li><a href="#buildable" class="side-nav-h2">Buildables</a></li>
<li><a href="#runway-bombing" class="side-nav-h2">Runway Bombing</a></li>
</ul>
</div>
<app-sidebar></app-sidebar>
<div class="content-wrapper">
<h1>Reference</h1>
+6 -34
View File
@@ -5,46 +5,18 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spearhead API</title>
<link rel="stylesheet" href="../style/style.css">
<script src="../js/site.js"></script>
<script src="../js/site.js"></script>
<script type="module" src="../js/components.js"></script>
</head>
<body>
<header>
<div class="header-box">
<a class="logo" href="../index.html">Spearhead</a>
<div class="header-right">
<nav>
<a href="../index.html">Home</a>
<a href="../pages/tutorials.html">Tutorials</a>
<a href="../pages/persistence.html">Persistence</a>
<a href="../pages/reference.html">Reference</a>
<a href="../pages/spearheadapi.html">API</a>
</nav>
<button id="theme-toggle" class="theme-toggle" title="Toggle light/dark theme">
<svg id="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"/>
</svg>
<svg id="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19H12.998V22H10.998zM10.998 2H12.998V5H10.998zM1.998 11H4.998V13H1.998zM18.998 11H21.998V13H18.998z"/>
<path transform="rotate(-45.017 5.986 18.01)" d="M4.986 17.01H6.986V19.01H4.986z"/>
<path transform="rotate(-45.001 18.008 5.99)" d="M17.008 4.99H19.008V6.99H17.008z"/>
<path transform="rotate(-134.983 5.988 5.99)" d="M4.988 4.99H6.988V6.99H4.988z"/>
<path transform="rotate(134.999 18.008 18.01)" d="M17.008 17.01H19.008V19.01H17.008z"/>
</svg>
</button>
</div>
</div>
</header>
<main>
<app-header></app-header>
</header> <main>
<div class="reference-container">
<div class="side-nav">
<h4 class="side-nav-title"></h4>
<ul>
<li><a href="#introduction" class="side-nav-h2">Introduction</a></li>
<li><a href="#stages" class="side-nav-h2">Stages</a></li>
</ul>
</div>
<app-sidebar></app-sidebar>
<div class="content-wrapper">
<h1>Spearhead API</h1>
+6 -47
View File
@@ -5,65 +5,24 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spearhead Tutorials</title>
<link rel="stylesheet" href="../style/style.css">
<script src="../js/site.js"></script>
<style>
.side-nav a.active {
font-weight: bold;
color: #4fc3f7;
}
}
</style>
<script type="module" src="../js/components.js"></script>
</head>
<body>
<header>
<div class="header-box">
<a class="logo" href="../index.html">Spearhead</a>
<div class="header-right">
<nav>
<a href="../index.html">Home</a>
<a href="../pages/tutorials.html">Tutorials</a>
<a href="../pages/persistence.html">Persistence</a>
<a href="../pages/reference.html">Reference</a>
<a href="../pages/spearheadapi.html">API</a>
</nav>
<button id="theme-toggle" class="theme-toggle" title="Toggle light/dark theme">
<svg id="moon-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"/>
</svg>
<svg id="sun-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19H12.998V22H10.998zM10.998 2H12.998V5H10.998zM1.998 11H4.998V13H1.998zM18.998 11H21.998V13H18.998z"/>
<path transform="rotate(-45.017 5.986 18.01)" d="M4.986 17.01H6.986V19.01H4.986z"/>
<path transform="rotate(-45.001 18.008 5.99)" d="M17.008 4.99H19.008V6.99H17.008z"/>
<path transform="rotate(-134.983 5.988 5.99)" d="M4.988 4.99H6.988V6.99H4.988z"/>
<path transform="rotate(134.999 18.008 18.01)" d="M17.008 17.01H19.008V19.01H17.008z"/>
</svg>
</button>
</div>
</div>
</header>
<main>
<app-header></app-header>
</header> <main>
<div class="reference-container">
<div class="side-nav">
<h4 class="side-nav-title"></h4>
<ul>
<li><a href="#include-the-script" class="side-nav-h2">Include the Script</a></li>
<li><a href="#stages" class="side-nav-h2">Stages</a></li>
<li><a href="#setting-up-cap" class="side-nav-h2">Setting up CAP</a>
<ul>
<li><a href="#creating-cap-routes" class="side-nav-h3">Creating CAP Routes</a></li>
</ul>
</li>
<li><a href="#setting-up-the-missions" class="side-nav-h2">Setting up Missions</a>
<ul>
<li><a href="#mission-1-dead" class="side-nav-h3">Mission: DEAD</a></li>
<li><a href="#mission-2-strike" class="side-nav-h3">Mission: STRIKE</a></li>
<li><a href="#mission-cas" class="side-nav-h3">Mission: CAS</a></li>
</ul>
</li>
<li><a href="#mission-briefings" class="side-nav-h2">Mission Briefings</a></li>
</ul>
</div>
<app-sidebar></app-sidebar>
<div class="content-wrapper">
<h1>Tutorials</h1>
+99 -37
View File
@@ -1,16 +1,17 @@
:root {
/* Dark Theme (Default) - Slightly lighter */
--color-bg-primary: #0a0b10; /* Much darker primary background */
--color-bg-secondary: #13141a; /* Darker secondary background */
--color-bg-tertiary: #181a22; /* Darker tertiary */
--color-bg-header: #090a0f; /* Darker header */
--color-bg-primary: #1b1d27; /* Much darker primary background */
--color-bg-secondary: #2d303f; /* Darker secondary background */
--color-bg-tertiary: #2c3041; /* Darker tertiary */
--color-bg-header: #10121b; /* Darker header */
--color-bg-code: #10121a; /* Almost black code block background */
--color-bg-note: rgba(30, 32, 40, 0.85); /* Slightly darker note background */
--color-bg-hover: rgba(120, 140, 255, 0.12); /* More visible hover */
--color-bg-inline-lua: #181a22; /* Match code block background */
--color-bg-note-dark: rgba(40, 35, 30, 0.85); /* Slightly darker note box */
--color-text-primary: #f6f8fa; /* Brighter text */
--color-text-primary: #a5a5a5; /* Brighter text */
--color-text-secondary: #bfc8d8; /* Lighter secondary text */
--color-text-accent: #7ecbff; /* Brighter accent */
--color-text-light: #ffffff;
@@ -32,10 +33,11 @@
/* Shadow and transparency values - unchanged */
--shadow-small: 0 2px 5px rgba(0, 0, 0, 0.3);
--shadow-medium: 0 3px 8px rgba(0, 0, 0, 0.5);
--shadow-large: 0 4px 12px rgba(0, 0, 0, 0.6);
/* Common opacity values */
--opacity-sidenav: 0.85; /* Increased opacity for better contrast */
--shadow-large: 0 4px 12px rgba(0, 0, 0, 0.6); /* Common opacity values */
--opacity-sidenav: 0.85; /* Increased opacity for better contrast */ /* Font families with improved Inter setup */
--font-family-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-family-code: 'JetBrains Mono', 'Monaco', 'Cascadia Code', monospace;
--font-family-heading: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
/* Responsive margins - unchanged */
--margin-left: 20%;
@@ -58,17 +60,23 @@
--color-bg-header-accent: #2a2620;
--color-logo-gradient: linear-gradient(120deg, #5caaff, #a0e8ff, #ffffff);
--color-nav-underline: #b0a890;
--color-nav-underline-glow: rgba(176, 168, 144, 0.6);
--color-nav-hover-bg: var(--color-bg-hover);
--color-nav-underline-glow: rgba(176, 168, 144, 0.6); --color-nav-hover-bg: var(--color-bg-hover);
--color-nav-hover-text: #ffffff;
--color-nav-hover-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
/* Heading colors */
--color-heading-h1: #8fc6ff;
--color-heading-h2: #b3e0ff;
--color-heading-h3: #c9e6ff;
--color-heading-h1-border: #8fc6ff;
--color-heading-h2-border: #b3e0ff;
}
[data-theme="light"] {
--color-bg-primary: #f5f7ff;
--color-bg-secondary: #e8ecf7;
--color-bg-tertiary: #dce2f0;
--color-bg-header: #f0f2fa;
--color-bg-primary: #e0e0e0;
--color-bg-secondary: #b6b6b6;
--color-bg-tertiary: #b6b6b6;
--color-bg-header: #d3d3d3;
--color-bg-code: #e3e6eb; /* Medium-light gray for code block background */
--color-bg-note: rgba(215, 228, 245, 0.75);
--color-bg-hover: rgba(100, 120, 200, 0.1);
@@ -80,8 +88,8 @@
--color-text-accent: #3050b0;
--color-text-light: #2a2e40;
--color-border-primary: #a0a8b8;
--color-border-accent: #5c75d9;
--color-border-primary: #496cb3;
--color-border-accent: #1d46ee;
--color-link: #3050b0;
--color-link-hover: #4060c0;
@@ -117,10 +125,16 @@
--color-bg-header-accent: #f5e9d2;
--color-logo-gradient: linear-gradient(120deg, #225a9e, #3578c7, #70aaff);
--color-nav-underline: #e0cfa0;
--color-nav-underline-glow: rgba(224, 207, 160, 0.4);
--color-nav-hover-bg: var(--color-bg-hover);
--color-nav-underline-glow: rgba(224, 207, 160, 0.4); --color-nav-hover-bg: var(--color-bg-hover);
--color-nav-hover-text: var(--color-text-primary);
--color-nav-hover-shadow: 0 4px 8px rgba(48, 80, 176, 0.15);
/* Heading colors for light theme */
--color-heading-h1: #225a9e;
--color-heading-h2: #3578c7;
--color-heading-h3: #4a90e2;
--color-heading-h1-border: #225a9e;
--color-heading-h2-border: #3578c7;
}
html {
@@ -131,14 +145,17 @@ html {
body {
color: var(--color-text-primary);
font-family: Arial, sans-serif;
font-family: var(--font-family-primary);
margin: 0;
padding: 0;
height: 100%;
display: flex;
flex-direction: column;
font-size: 16px;
line-height: 1.6;
line-height: 1.65; /* Increased for better Inter readability */
font-weight: 500; /* Medium weight for substantial feel */
letter-spacing: 0.015em; /* Slightly more spacing for better readability */
font-feature-settings: "cv02", "cv03", "cv04", "cv11"; /* Better Inter alternates */
transition: background-color 0.3s ease, color 0.3s ease;
}
@@ -243,6 +260,35 @@ header nav a:hover::after {
width: 80%;
}
.dropdown {
position: relative;
display: flex;
flex-wrap: wrap;
flex-direction: column;
}
.dropdown-content {
display: flex;
flex-direction: column;
position: absolute;
overflow: hidden;
top: 100%; /* Position below the dropdown */
left: 0; /* Align left edge */
min-width: 160px;
background-color: var(--color-bg-secondary);
box-shadow: var(--shadow-medium);
z-index: 1;
border-radius: 8px;
max-height: 0px;
transition: all 1.5s ease;
}
.dropdown:hover .dropdown-content {
max-height: 200px;
}
header.collapsible {
cursor: pointer;
position: relative;
@@ -292,13 +338,13 @@ main {
/* Side navigation styles */
.reference-container {
display: flex;
align-items: flex-start;
display: block; /* Change from flex since sidebar is now fixed */
margin-top: 2em;
margin-left: var(--margin-left);
flex-direction: row;
gap: 2em;
position: relative;
/* Ensure the container doesn't interfere with sticky positioning */
overflow: visible;
height: auto;
}
.side-nav {
@@ -307,9 +353,14 @@ main {
padding-left: 0;
overflow-y: auto;
border-right: none;
position: sticky;
top: 2em;
align-self: flex-start;
position: fixed;
top: 7em; /* Account for header height (5em) + spacing (2em) */
left: var(--margin-left);
max-height: calc(100vh - 9em); /* Account for header + top spacing */
z-index: 10;
/* Ensure proper stacking context */
transform: translateZ(0);
will-change: transform;
}
.side-nav h4 {
@@ -366,7 +417,7 @@ main {
.content-wrapper {
flex: 1;
max-width: 70%;
margin-left: 0;
margin-left: 220px; /* Account for fixed sidebar width + gap */
border-left: 2px solid var(--color-border-accent);
padding-left: 1.5em;
padding-bottom: 20vh; /* Allow last section to scroll to top */
@@ -377,33 +428,34 @@ h1, h2, h3, h4, h5, h6 {
margin-top: 1.5em;
margin-bottom: 0.8em;
color: var(--color-text-secondary);
font-family: var(--font-family-heading);
font-weight: 600;
line-height: 1.3;
}
h1 {
font-size: 2.2em;
color: #8fc6ff;
color: var(--color-heading-h1);
font-weight: 700;
text-shadow: 0 1px 4px rgba(143,198,255,0.08);
letter-spacing: 0.01em;
border-bottom: 1.5px solid #8fc6ff;
border-bottom: 1.5px solid var(--color-heading-h1-border);
padding-bottom: 0.3em;
}
h2 {
font-size: 1.8em;
color: #b3e0ff;
color: var(--color-heading-h2);
font-weight: 600;
text-shadow: 0 1px 2px rgba(179,224,255,0.07);
letter-spacing: 0.005em;
border-bottom: 1px solid #b3e0ff;
border-bottom: 1px solid var(--color-heading-h2-border);
padding-bottom: 0.2em;
}
h3 {
font-size: 1.4em;
color: #c9e6ff;
color: var(--color-heading-h3);
font-weight: 600;
text-shadow: 0 1px 1px rgba(201,230,255,0.06);
letter-spacing: 0.005em;
@@ -455,7 +507,7 @@ th {
.inline-lua {
background-color: var(--color-bg-inline-lua);
border-radius: 3px;
font-family: 'Courier New', monospace;
font-family: var(--font-family-code);
white-space: nowrap;
padding: 0.1em 0.3em;
color: #23272e;
@@ -469,7 +521,7 @@ pre {
padding: 1.2em;
margin: 1.5em 0;
overflow-x: auto;
font-family: 'Courier New', monospace;
font-family: var(--font-family-code);
line-height: 1.4;
box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.08);
color: #23272e;
@@ -590,6 +642,10 @@ img {
}
.content-wrapper {
margin-left: 0;
max-width: 100%;
}
.reference-container {
margin-left: var(--margin-small);
}
}
@@ -605,6 +661,12 @@ img {
.content-wrapper {
width: 100%; /* Make content take full width */
margin-left: 0;
max-width: 100%;
}
.reference-container {
margin-left: 1em;
}
main {
@@ -667,4 +729,4 @@ img {
.theme-toggle:hover svg {
fill: var(--color-text-accent);
}
}