Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# Monthly redeploy (1st of each month, 06:00 UTC) so the live stats injected
# at build time (GitHub stars/forks/contributors, PyPI downloads) stay fresh
# without needing a push. Scheduled runs always execute on the default branch.
schedule:
- cron: "0 6 1 * *"

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
Expand Down Expand Up @@ -40,6 +46,12 @@ jobs:
run: npm ci
- name: Build site
run: npm run build
- name: Refresh live stats
run: npm run stats
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
continue-on-error: true
Comment on lines +49 to +53
timeout-minutes: 3
- name: Add .nojekyll
run: touch dist/.nojekyll
- name: Setup Pages
Expand Down
89 changes: 58 additions & 31 deletions about.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
/>

<link href="./css/main.css" rel="stylesheet" />
<link href="./css/nav.css" rel="stylesheet" />
<link href="./css/footer.css" rel="stylesheet" />
<link href="./css/about.css" rel="stylesheet" />
<link href="./css/font-awesome/css/fontawesome.min.css" rel="stylesheet" />
Expand All @@ -53,45 +54,55 @@
</head>

<body>
<a href="#main" class="skip-link">Skip to content</a>
<div class="page-wrapper">
<header class="top-bar">
<div class="brand-and-cta">
<a class="brand-link" href="./index.html" aria-label="RocketPy home">
<span class="brand-logo"></span>
</a>
</div>
<nav class="social-nav panel-bg" aria-label="Main navigation">
<a href="./about.html" class="icon-button" aria-label="About us"
><i class="fa-solid fa-users"></i
></a>
<header class="site-header" id="top">
<a class="brand-link" href="./index.html" aria-label="RocketPy home">
<span class="brand-logo"></span>
</a>
<nav class="nav-links" id="navLinks" aria-label="Primary">
<a class="nav-link" href="./index.html#features">Features</a>
<a class="nav-link" href="./index.html#showcase">Showcase</a>
<a class="nav-link" href="./index.html#ecosystem">Ecosystem</a>
<a
class="nav-link"
href="https://docs.rocketpy.org/en/latest/index.html"
class="icon-button"
aria-label="Documentation"
><i class="fa-solid fa-book"></i
></a>
>Docs</a
>
<a class="nav-link" href="./index.html#community">Community</a>
<a class="nav-link" href="./about.html" aria-current="page">About</a>
</nav>
<div class="nav-actions">
<a
class="star-badge"
href="https://github.com/RocketPy-Team/RocketPy"
class="icon-button"
aria-label="GitHub repository"
><i class="fa-brands fa-github"></i
></a>
<a
href="https://www.instagram.com/rocketpyteam"
class="icon-button"
aria-label="Instagram"
><i class="fa-brands fa-instagram"></i
></a>
aria-label="Star RocketPy on GitHub"
>
<i class="fa-brands fa-github" aria-hidden="true"></i>
<i class="fa-solid fa-star" aria-hidden="true"></i>
<span data-stat="stars">1,021</span>
</a>
<a
href="https://www.linkedin.com/company/rocketpy"
class="icon-button"
aria-label="LinkedIn"
><i class="fa-brands fa-linkedin"></i
></a>
</nav>
href="https://app.rocketpy.org/"
class="simulate-button nav-cta"
role="button"
>
<span class="simulate-icon"></span>
<span>Simulate</span>
</a>
<button
class="nav-toggle"
type="button"
aria-label="Toggle menu"
aria-expanded="false"
aria-controls="navLinks"
>
<i class="fa-solid fa-bars" aria-hidden="true"></i>
</button>
</div>
</header>

<main class="main-content">
<main class="main-content" id="main">
<!-- ============================ HERO ============================ -->
<section class="about-hero panel-bg">
<p class="about-eyebrow">Since 2018 &middot; Open Source</p>
Expand Down Expand Up @@ -1055,6 +1066,22 @@ <h3 class="featured-name">${p.name}</h3>
renderFeatured("coreGrid", "core");
renderContributors();
renderStats();

// Mobile nav toggle — mirrors the landing page's shared site-header.
const header = document.querySelector(".site-header");
const navToggle = document.querySelector(".nav-toggle");
if (header && navToggle) {
navToggle.addEventListener("click", () => {
const open = header.classList.toggle("nav-open");
navToggle.setAttribute("aria-expanded", open ? "true" : "false");
});
header.querySelectorAll(".nav-link").forEach((link) =>
link.addEventListener("click", () => {
header.classList.remove("nav-open");
navToggle.setAttribute("aria-expanded", "false");
}),
);
}
</script>
</body>
</html>
139 changes: 139 additions & 0 deletions css/footer.css
Original file line number Diff line number Diff line change
Expand Up @@ -191,3 +191,142 @@
margin-left: 0;
}
}

/* ==========================================================================
EXPANDED SITE FOOTER (landing page) — additive; the legacy
.footer-left/.footer-center/.footer-right rules above still drive the
About page footer unchanged.
========================================================================== */
.site-footer {
padding: clamp(2.5rem, 5vw, 3.5rem) clamp(1.25rem, 4vw, 3rem) 1.8rem;
text-align: left;
font:
normal 16px "Open Sans",
sans-serif;
}

.footer-top {
display: grid;
grid-template-columns: minmax(220px, 1fr) 2.2fr;
gap: clamp(2rem, 5vw, 4rem);
max-width: 1240px;
margin: 0 auto;
}

.footer-brand .footer-logo {
margin-bottom: 14px;
}

.footer-tagline {
font-family: "Open Sans", sans-serif;
font-size: 0.9rem;
line-height: 1.6;
color: rgba(255, 255, 255, 0.7);
max-width: 280px;
margin: 0;
}

.footer-social {
display: flex;
gap: 10px;
margin-top: 18px;
}

.footer-social a {
width: 38px;
height: 38px;
border-radius: 8px;
background: #33383b;
color: #ffffff;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 18px;
text-decoration: none;
transition:
background 0.2s ease,
transform 0.2s ease;
}

.footer-social a:hover,
.footer-social a:focus-visible {
background: #4a5568;
transform: translateY(-2px);
}

.footer-links-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
}

.footer-col h4 {
font-family: "Rubik", sans-serif;
font-size: 13px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: #ffffff;
margin: 0 0 12px;
}

.footer-col a {
display: block;
font-family: "Open Sans", sans-serif;
font-size: 0.9rem;
font-weight: 400;
color: rgba(255, 255, 255, 0.68);
text-decoration: none;
padding: 6px 0;
transition: color 0.2s ease;
}

.footer-col a:hover,
.footer-col a:focus-visible {
color: #ffffff;
}

.footer-bottom {
max-width: 1240px;
margin: clamp(2rem, 4vw, 2.6rem) auto 0;
padding-top: 20px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 10px;
}

.footer-bottom p {
font-family: "Open Sans", sans-serif;
font-size: 0.82rem;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}

.footer-bottom a {
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
}

.footer-bottom a:hover {
color: #ffffff;
}

@media (max-width: 880px) {
.footer-top {
grid-template-columns: 1fr;
}

.footer-bottom {
justify-content: center;
text-align: center;
}
}

@media (max-width: 620px) {
.footer-links-grid {
grid-template-columns: 1fr 1fr;
}
}
Loading