mirror of
https://github.com/Egonex-AI/Understand-Anything.git
synced 2026-09-14 20:26:55 +08:00
feat(homepage): align Understand Anything brand experience
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 217 KiB |
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@ const youTubeUrl = `https://www.youtube.com/watch?v=${youTubeId}`;
|
||||
const embedUrl = `https://www.youtube.com/embed/${youTubeId}?si=IB3cjpjbq9wis5D7`;
|
||||
---
|
||||
|
||||
<section class="community-video">
|
||||
<section class="community-video" id="community">
|
||||
<span class="community-video-label reveal">Community</span>
|
||||
<h2 class="community-video-heading reveal">
|
||||
A walkthrough from the
|
||||
|
||||
@@ -33,7 +33,7 @@ const features = [
|
||||
];
|
||||
---
|
||||
|
||||
<section class="features">
|
||||
<section class="features" id="features">
|
||||
<div class="features-grid">
|
||||
{features.map((f, i) => (
|
||||
<div class={`feature-card reveal reveal-delay-${(i % 2) + 1}`}>
|
||||
|
||||
@@ -1,88 +1,250 @@
|
||||
---
|
||||
const githubUrl = 'https://github.com/Egonex-AI/Understand-Anything';
|
||||
const repositoryUrl = 'https://github.com/Egonex-AI/Understand-Anything';
|
||||
const githubUrl = 'https://github.com/Egonex-AI';
|
||||
const xUrl = 'https://x.com/EgonexAI';
|
||||
const egonexProductUrl = 'https://www.egonex.ai/';
|
||||
const privacyUrl = 'https://legal.egonex.ai/en/privacy';
|
||||
const termsUrl = 'https://legal.egonex.ai/en/terms';
|
||||
const configuredMotherSiteUrl = (import.meta.env.PUBLIC_MOTHER_SITE_URL ?? '')
|
||||
.trim()
|
||||
.replace(/\/+$/, '');
|
||||
const motherHomeUrl = configuredMotherSiteUrl
|
||||
? `${configuredMotherSiteUrl}/#top`
|
||||
: 'https://egonexai.com/#top';
|
||||
const currentYear = new Date().getFullYear();
|
||||
---
|
||||
|
||||
<footer class="footer">
|
||||
<div class="footer-inner">
|
||||
<span class="footer-logo">Understand Anything</span>
|
||||
<div class="footer-links">
|
||||
<a href={githubUrl} target="_blank" rel="noopener noreferrer">GitHub</a>
|
||||
<span class="footer-sep">·</span>
|
||||
<a href="/demo/">Live Demo</a>
|
||||
<span class="footer-sep">·</span>
|
||||
<a href={`${githubUrl}/blob/main/LICENSE`} target="_blank" rel="noopener noreferrer">MIT License</a>
|
||||
<footer class="brand-footer">
|
||||
<div class="brand-footer-inner">
|
||||
<div class="brand-footer-row">
|
||||
<a class="brand-footer-logo" href={motherHomeUrl} data-mother-site-link aria-label="EgonexAI home">
|
||||
<img
|
||||
src="/assets/egonexai/egonex-logo.png"
|
||||
width="28"
|
||||
height="28"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
<span>EgonexAI</span>
|
||||
</a>
|
||||
|
||||
<div class="brand-footer-links">
|
||||
<nav class="brand-footer-link-group" aria-label="EgonexAI products">
|
||||
<a href={egonexProductUrl}>Egonex</a>
|
||||
<a href="/" aria-current="page">Understand Anything</a>
|
||||
</nav>
|
||||
|
||||
<nav class="brand-footer-link-group" aria-label="Legal and project links">
|
||||
<a href={motherHomeUrl} data-mother-site-link>About Us</a>
|
||||
<a href="mailto:affiliate@egonex.ai">Contact Us</a>
|
||||
<a href={privacyUrl} target="_blank" rel="noopener noreferrer">Privacy</a>
|
||||
<a href={termsUrl} target="_blank" rel="noopener noreferrer">Terms</a>
|
||||
<a href={`${repositoryUrl}/blob/main/LICENSE`} target="_blank" rel="noopener noreferrer">MIT License</a>
|
||||
<a href={repositoryUrl} target="_blank" rel="noopener noreferrer">Source Code</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="brand-footer-social-links" aria-label="EgonexAI social links">
|
||||
<a href={xUrl} target="_blank" rel="noopener noreferrer" aria-label="EgonexAI on X">
|
||||
<svg viewBox="0 0 24 24" width="17" height="17" fill="currentColor" aria-hidden="true">
|
||||
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.657l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231Zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77Z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a href={githubUrl} target="_blank" rel="noopener noreferrer" aria-label="EgonexAI on GitHub">
|
||||
<svg viewBox="0 0 24 24" width="17" height="17" fill="currentColor" aria-hidden="true">
|
||||
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="brand-footer-bottom">
|
||||
<span>© {currentYear} Infinite Universe, Inc.</span>
|
||||
</div>
|
||||
<p class="footer-note">An open-source project from Egonex. Originally created by Lum1104.</p>
|
||||
<p class="footer-note">© 2026 Infinite Universe, Inc.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
.footer {
|
||||
padding: 4rem 2rem;
|
||||
border-top: 1px solid var(--border);
|
||||
text-align: center;
|
||||
.brand-footer {
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
overflow: hidden;
|
||||
padding: 30px 32px 22px;
|
||||
color: #1a0b54;
|
||||
background:
|
||||
radial-gradient(circle at 78% 0%, rgba(88, 43, 232, 0.08), transparent 38%),
|
||||
linear-gradient(180deg, #ffffff 0%, #f7f5ff 100%);
|
||||
font-family: var(--font-brand);
|
||||
}
|
||||
|
||||
.footer-inner {
|
||||
max-width: 1200px;
|
||||
.brand-footer,
|
||||
.brand-footer * {
|
||||
box-sizing: border-box;
|
||||
font-family: var(--font-brand);
|
||||
}
|
||||
|
||||
.brand-footer-inner {
|
||||
width: min(100%, 1152px);
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
.brand-footer-row {
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 28px;
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
.brand-footer-logo {
|
||||
display: inline-flex;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: #1a0b54;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-footer-logo:hover {
|
||||
color: #1a0b54;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-footer-logo img {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
flex: 0 0 auto;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.brand-footer-logo span {
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.brand-footer-links,
|
||||
.brand-footer-link-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.brand-footer-links {
|
||||
justify-content: center;
|
||||
min-width: 0;
|
||||
gap: 26px;
|
||||
}
|
||||
|
||||
.brand-footer-link-group {
|
||||
gap: 18px;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem 0.25rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.footer-logo {
|
||||
font-family: var(--font-heading);
|
||||
font-size: 1.15rem;
|
||||
color: var(--text);
|
||||
display: block;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: var(--text-muted);
|
||||
font-size: 0.85rem;
|
||||
.brand-footer-link-group a {
|
||||
color: #746c91;
|
||||
font-size: 13px;
|
||||
line-height: 1.25;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
white-space: nowrap;
|
||||
transition: color 180ms ease;
|
||||
}
|
||||
|
||||
.footer-links a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.footer-sep {
|
||||
color: var(--border);
|
||||
margin: 0 0.6rem;
|
||||
}
|
||||
|
||||
.footer-note {
|
||||
font-size: 0.8rem;
|
||||
color: var(--text-muted);
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
.footer-note a {
|
||||
color: var(--accent);
|
||||
.brand-footer-link-group a:hover,
|
||||
.brand-footer-link-group a[aria-current='page'] {
|
||||
color: #582be8;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer-note a:hover {
|
||||
text-decoration: underline;
|
||||
.brand-footer-social-links {
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.footer { padding: 3rem 1.25rem; }
|
||||
.footer-sep { display: none; }
|
||||
.footer-links { gap: 0.25rem 1rem; }
|
||||
.brand-footer-social-links a {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 11px;
|
||||
color: #582be8;
|
||||
background: #f4f2fb;
|
||||
text-decoration: none;
|
||||
transition: color 180ms ease, background-color 180ms ease, transform 180ms ease;
|
||||
}
|
||||
|
||||
.brand-footer-social-links a:hover {
|
||||
color: #ffffff;
|
||||
background: #582be8;
|
||||
text-decoration: none;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.brand-footer-bottom {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.35rem 1.5rem;
|
||||
margin-top: 18px;
|
||||
color: #817a96;
|
||||
font-size: 11px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.brand-footer a:focus-visible {
|
||||
outline: 3px solid rgba(88, 43, 232, 0.48);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
.brand-footer-row {
|
||||
grid-template-columns: 1fr auto;
|
||||
gap: 18px 24px;
|
||||
}
|
||||
|
||||
.brand-footer-links {
|
||||
grid-column: 1 / -1;
|
||||
grid-row: 2;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.brand-footer-social-links {
|
||||
margin-left: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 680px) {
|
||||
.brand-footer {
|
||||
padding: 26px 20px 22px;
|
||||
}
|
||||
|
||||
.brand-footer-links {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.brand-footer-link-group {
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
gap: 10px 16px;
|
||||
}
|
||||
|
||||
.brand-footer-bottom {
|
||||
justify-content: flex-start;
|
||||
gap: 0.4rem;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.brand-footer * {
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -3,7 +3,7 @@ const githubUrl = 'https://github.com/Egonex-AI/Understand-Anything';
|
||||
const egonexUrl = 'https://egonex.ai';
|
||||
---
|
||||
|
||||
<section class="hero">
|
||||
<section class="hero" id="top">
|
||||
<div class="hero-bg">
|
||||
<img src="/images/hero.jpg" alt="" class="hero-bg-img" loading="eager" />
|
||||
<div class="hero-overlay"></div>
|
||||
@@ -38,8 +38,8 @@ const egonexUrl = 'https://egonex.ai';
|
||||
</div>
|
||||
|
||||
<div class="hero-actions anim anim-6">
|
||||
<a href="#install" class="hero-cta">Get Started</a>
|
||||
<a href="/demo/" class="hero-demo">Live Demo →</a>
|
||||
<a href="#install" class="hero-cta"><span>Get Started</span></a>
|
||||
<a href="#live-demo" class="hero-demo">Live Demo →</a>
|
||||
<a href={githubUrl} target="_blank" rel="noopener noreferrer" class="hero-secondary">
|
||||
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:-2px;margin-right:4px;"><path d="M12 .587l3.668 7.568L24 9.306l-6 5.986 1.416 8.421L12 19.897l-7.416 3.816L6 15.292 0 9.306l8.332-1.151z"/></svg>
|
||||
Star on GitHub
|
||||
@@ -83,12 +83,6 @@ const egonexUrl = 'https://egonex.ai';
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href={egonexUrl} target="_blank" rel="noopener noreferrer" class="hero-company anim anim-6">
|
||||
<span class="hero-company-label">Company</span>
|
||||
<span class="hero-company-divider">·</span>
|
||||
<span class="hero-company-site">egonex.ai</span>
|
||||
<span class="hero-company-arrow">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -289,22 +283,34 @@ const egonexUrl = 'https://egonex.ai';
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
background: linear-gradient(135deg, var(--accent), var(--accent-3));
|
||||
background: var(--egonex-gradient-primary);
|
||||
color: #ffffff;
|
||||
padding: 0.85rem 2.5rem;
|
||||
padding: 1px;
|
||||
border-radius: 999px;
|
||||
font-weight: 600;
|
||||
font-size: 1.05rem;
|
||||
text-decoration: none;
|
||||
box-shadow: 0 16px 34px rgba(88, 43, 232, 0.22);
|
||||
transition: box-shadow 0.3s ease, transform 0.2s ease, filter 0.2s ease;
|
||||
box-shadow: none;
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
.hero-cta span {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0.85rem 2.5rem;
|
||||
border-radius: 999px;
|
||||
background: #582be8;
|
||||
transition: background 0.3s ease;
|
||||
}
|
||||
|
||||
.hero-cta:hover {
|
||||
text-decoration: none;
|
||||
box-shadow: 0 22px 44px rgba(88, 43, 232, 0.28);
|
||||
transform: translateY(-2px);
|
||||
filter: brightness(1.02);
|
||||
}
|
||||
|
||||
.hero-cta:hover span,
|
||||
.hero-cta:focus-visible span {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.hero-demo {
|
||||
@@ -321,11 +327,16 @@ const egonexUrl = 'https://egonex.ai';
|
||||
|
||||
.hero-demo:hover {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 16px 34px rgba(88, 43, 232, 0.12);
|
||||
box-shadow: 0 12px 28px rgba(88, 43, 232, 0.18);
|
||||
transform: translateY(-2px);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.hero-cta:active,
|
||||
.hero-demo:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.hero-secondary {
|
||||
color: var(--text-muted);
|
||||
font-size: 0.95rem;
|
||||
@@ -435,61 +446,6 @@ const egonexUrl = 'https://egonex.ai';
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.hero-company {
|
||||
margin-top: 1.25rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.55rem;
|
||||
padding: 0.45rem 1.1rem;
|
||||
border: 1px solid rgba(88, 43, 232, 0.18);
|
||||
border-radius: 100px;
|
||||
background: rgba(255, 255, 255, 0.68);
|
||||
box-shadow: var(--shadow-card);
|
||||
backdrop-filter: blur(18px) saturate(1.12);
|
||||
text-decoration: none;
|
||||
transition: border-color 0.25s ease, box-shadow 0.25s ease, transform 0.2s ease,
|
||||
background-color 0.25s ease;
|
||||
}
|
||||
|
||||
.hero-company:hover {
|
||||
border-color: rgba(88, 43, 232, 0.3);
|
||||
background: #ffffff;
|
||||
box-shadow: 0 18px 38px rgba(88, 43, 232, 0.14);
|
||||
transform: translateY(-1px);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.hero-company-label {
|
||||
font-family: var(--font-code);
|
||||
font-size: 0.7rem;
|
||||
letter-spacing: 0.14em;
|
||||
text-transform: uppercase;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.hero-company-divider {
|
||||
color: rgba(88, 43, 232, 0.36);
|
||||
font-size: 0.85rem;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.hero-company-site {
|
||||
font-family: var(--font-code);
|
||||
font-size: 0.82rem;
|
||||
color: var(--text-soft);
|
||||
}
|
||||
|
||||
.hero-company-arrow {
|
||||
color: var(--accent);
|
||||
font-size: 0.95rem;
|
||||
line-height: 1;
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
|
||||
.hero-company:hover .hero-company-arrow {
|
||||
transform: translateX(3px);
|
||||
}
|
||||
|
||||
/* Staggered entrance */
|
||||
@keyframes heroIn {
|
||||
from {
|
||||
@@ -576,16 +532,13 @@ const egonexUrl = 'https://egonex.ai';
|
||||
padding: 0.85rem 1.5rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.hero-cta span {
|
||||
width: 100%;
|
||||
padding: 0.85rem 1.5rem;
|
||||
}
|
||||
.hero-pillars { flex-direction: column; gap: 0.4rem; }
|
||||
.pillar-dot { display: none; }
|
||||
.hero-company {
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
padding: 0.6rem 1.25rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
.hero-company-divider { display: none; }
|
||||
.hero-company-site { font-size: 0.78rem; }
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
|
||||
@@ -1,133 +1,714 @@
|
||||
---
|
||||
const githubUrl = 'https://github.com/Egonex-AI/Understand-Anything';
|
||||
const egonexProductUrl = 'https://www.egonex.ai/';
|
||||
const configuredMotherSiteUrl = (import.meta.env.PUBLIC_MOTHER_SITE_URL ?? '')
|
||||
.trim()
|
||||
.replace(/\/+$/, '');
|
||||
|
||||
const motherHomeUrl = configuredMotherSiteUrl
|
||||
? `${configuredMotherSiteUrl}/#top`
|
||||
: 'https://egonexai.com/#top';
|
||||
|
||||
const navigation = {
|
||||
home: '#top',
|
||||
features: '#features',
|
||||
liveDemo: '#live-demo',
|
||||
community: '#community',
|
||||
getStarted: '#install',
|
||||
};
|
||||
---
|
||||
|
||||
<nav class="nav" id="nav">
|
||||
<div class="nav-inner">
|
||||
<a href="/" class="nav-logo">EgonexAI</a>
|
||||
<div class="nav-links">
|
||||
<a href={githubUrl} target="_blank" rel="noopener noreferrer" class="nav-github">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true">
|
||||
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/>
|
||||
<span class="brand-scroll-marker" id="brand-scroll-marker" aria-hidden="true"></span>
|
||||
|
||||
<header class="brand-header" id="brand-header">
|
||||
<nav class="brand-nav" aria-label="Primary navigation">
|
||||
<a class="brand-home" href={motherHomeUrl} data-mother-site-link aria-label="EgonexAI home">
|
||||
<img
|
||||
src="/assets/egonexai/egonex-logo.png"
|
||||
width="28"
|
||||
height="28"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
decoding="async"
|
||||
/>
|
||||
<span>EgonexAI</span>
|
||||
</a>
|
||||
|
||||
<div class="brand-desktop-nav" aria-label="EgonexAI navigation">
|
||||
<a href={navigation.home}>Home</a>
|
||||
|
||||
<details class="brand-products" id="brand-products">
|
||||
<summary aria-haspopup="menu">
|
||||
<span>Products</span>
|
||||
<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true">
|
||||
<path d="m4 6 4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</svg>
|
||||
</summary>
|
||||
<div class="brand-products-menu" role="menu" aria-label="Products">
|
||||
<a href={egonexProductUrl} role="menuitem">
|
||||
<strong>Egonex</strong>
|
||||
<span>Find the right people for real work</span>
|
||||
</a>
|
||||
<a href="/" role="menuitem" aria-current="page">
|
||||
<strong>Understand Anything</strong>
|
||||
<span>Understand codebases through guided context</span>
|
||||
</a>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<a href={navigation.features}>Features</a>
|
||||
<a href={navigation.liveDemo}>Live Demo</a>
|
||||
<a href={navigation.community}>Community</a>
|
||||
</div>
|
||||
|
||||
<div class="brand-desktop-actions">
|
||||
<a
|
||||
class="brand-github"
|
||||
href={githubUrl}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true">
|
||||
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"></path>
|
||||
</svg>
|
||||
<span>GitHub</span>
|
||||
</a>
|
||||
<a href="#install" class="nav-cta">Get Started</a>
|
||||
<a class="brand-cta" href={navigation.getStarted}><span>Get Started</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<button
|
||||
class="brand-menu-toggle"
|
||||
id="brand-menu-toggle"
|
||||
type="button"
|
||||
aria-expanded="false"
|
||||
aria-controls="brand-mobile-menu"
|
||||
aria-label="Open navigation menu"
|
||||
>
|
||||
<svg class="brand-menu-open-icon" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true">
|
||||
<path d="M4 7h16M4 12h16M4 17h16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<svg class="brand-menu-close-icon" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" hidden>
|
||||
<path d="m6 6 12 12M18 6 6 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<div class="brand-mobile-panel" id="brand-mobile-menu" hidden>
|
||||
<a href={navigation.home}>Home</a>
|
||||
|
||||
<div class="brand-mobile-products">
|
||||
<span class="brand-mobile-label">Products</span>
|
||||
<a href={egonexProductUrl}>
|
||||
<strong>Egonex</strong>
|
||||
<span>Find the right people for real work</span>
|
||||
</a>
|
||||
<a href="/" aria-current="page">
|
||||
<strong>Understand Anything</strong>
|
||||
<span>Understand codebases through guided context</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<a href={navigation.features}>Features</a>
|
||||
<a href={navigation.liveDemo}>Live Demo</a>
|
||||
<a href={navigation.community}>Community</a>
|
||||
|
||||
<div class="brand-mobile-actions">
|
||||
<a
|
||||
class="brand-github"
|
||||
href={githubUrl}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true">
|
||||
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"></path>
|
||||
</svg>
|
||||
<span>GitHub</span>
|
||||
</a>
|
||||
<a class="brand-cta" href={navigation.getStarted}><span>Get Started</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<script>
|
||||
const nav = document.getElementById('nav');
|
||||
if (nav) {
|
||||
window.addEventListener('scroll', () => {
|
||||
nav.classList.toggle('scrolled', window.scrollY > 50);
|
||||
const header = document.getElementById('brand-header');
|
||||
const scrollMarker = document.getElementById('brand-scroll-marker');
|
||||
const products = document.getElementById('brand-products');
|
||||
const productsSummary = products?.querySelector('summary');
|
||||
const productItems = products?.querySelectorAll<HTMLElement>('[role="menuitem"]');
|
||||
const menuToggle = document.getElementById('brand-menu-toggle');
|
||||
const mobileMenu = document.getElementById('brand-mobile-menu');
|
||||
const menuOpenIcon = menuToggle?.querySelector<SVGElement>('.brand-menu-open-icon');
|
||||
const menuCloseIcon = menuToggle?.querySelector<SVGElement>('.brand-menu-close-icon');
|
||||
|
||||
if (['127.0.0.1', 'localhost', '::1', '[::1]'].includes(window.location.hostname)) {
|
||||
document.querySelectorAll<HTMLAnchorElement>('[data-mother-site-link]').forEach((link) => {
|
||||
link.href = 'http://127.0.0.1:4174/#top';
|
||||
});
|
||||
}
|
||||
|
||||
if (header && scrollMarker && 'IntersectionObserver' in window) {
|
||||
const observer = new IntersectionObserver(
|
||||
([entry]) => header.classList.toggle('is-compact', !entry.isIntersecting),
|
||||
{ threshold: 0 }
|
||||
);
|
||||
|
||||
observer.observe(scrollMarker);
|
||||
}
|
||||
|
||||
const closeProducts = (restoreFocus = false) => {
|
||||
if (!(products instanceof HTMLDetailsElement) || !products.open) return;
|
||||
products.open = false;
|
||||
if (restoreFocus && productsSummary instanceof HTMLElement) productsSummary.focus();
|
||||
};
|
||||
|
||||
const setMobileMenu = (open: boolean, restoreFocus = false) => {
|
||||
if (!(menuToggle instanceof HTMLButtonElement) || !(mobileMenu instanceof HTMLElement)) return;
|
||||
|
||||
menuToggle.setAttribute('aria-expanded', String(open));
|
||||
menuToggle.setAttribute('aria-label', open ? 'Close navigation menu' : 'Open navigation menu');
|
||||
mobileMenu.hidden = !open;
|
||||
menuOpenIcon?.toggleAttribute('hidden', open);
|
||||
menuCloseIcon?.toggleAttribute('hidden', !open);
|
||||
document.documentElement.classList.toggle('brand-menu-is-open', open);
|
||||
|
||||
if (restoreFocus) menuToggle.focus();
|
||||
};
|
||||
|
||||
productsSummary?.addEventListener('keydown', (event) => {
|
||||
if (!(products instanceof HTMLDetailsElement) || !productItems?.length) return;
|
||||
|
||||
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
||||
event.preventDefault();
|
||||
products.open = true;
|
||||
const item = event.key === 'ArrowDown' ? productItems[0] : productItems[productItems.length - 1];
|
||||
item?.focus();
|
||||
}
|
||||
});
|
||||
|
||||
productItems?.forEach((item, index) => {
|
||||
item.addEventListener('keydown', (event) => {
|
||||
if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;
|
||||
event.preventDefault();
|
||||
const direction = event.key === 'ArrowDown' ? 1 : -1;
|
||||
const nextIndex = (index + direction + productItems.length) % productItems.length;
|
||||
productItems[nextIndex]?.focus();
|
||||
});
|
||||
});
|
||||
|
||||
menuToggle?.addEventListener('click', () => {
|
||||
const isOpen = menuToggle.getAttribute('aria-expanded') === 'true';
|
||||
setMobileMenu(!isOpen);
|
||||
closeProducts();
|
||||
});
|
||||
|
||||
mobileMenu?.querySelectorAll('a').forEach((link) => {
|
||||
link.addEventListener('click', () => setMobileMenu(false));
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if (event.key !== 'Escape') return;
|
||||
closeProducts(true);
|
||||
if (menuToggle?.getAttribute('aria-expanded') === 'true') setMobileMenu(false, true);
|
||||
});
|
||||
|
||||
document.addEventListener('click', (event) => {
|
||||
const target = event.target;
|
||||
if (!(target instanceof Node)) return;
|
||||
|
||||
if (products && !products.contains(target)) closeProducts();
|
||||
if (header && !header.contains(target)) setMobileMenu(false);
|
||||
});
|
||||
|
||||
const desktopQuery = window.matchMedia('(min-width: 1100px)');
|
||||
|
||||
products?.addEventListener('pointerenter', () => {
|
||||
if (desktopQuery.matches && products instanceof HTMLDetailsElement) products.open = true;
|
||||
});
|
||||
|
||||
products?.addEventListener('pointerleave', () => {
|
||||
if (desktopQuery.matches) closeProducts();
|
||||
});
|
||||
|
||||
products?.addEventListener('focusin', () => {
|
||||
if (desktopQuery.matches && products instanceof HTMLDetailsElement) products.open = true;
|
||||
});
|
||||
|
||||
products?.addEventListener('focusout', (event) => {
|
||||
if (!desktopQuery.matches || !(products instanceof HTMLDetailsElement)) return;
|
||||
const nextTarget = event.relatedTarget;
|
||||
if (!(nextTarget instanceof Node) || !products.contains(nextTarget)) closeProducts();
|
||||
});
|
||||
|
||||
desktopQuery.addEventListener('change', (event) => {
|
||||
if (event.matches) setMobileMenu(false);
|
||||
else closeProducts();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.nav {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
.brand-scroll-marker {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.brand-header {
|
||||
position: fixed;
|
||||
top: 1rem;
|
||||
left: 50%;
|
||||
z-index: 100;
|
||||
padding: 1rem 2rem;
|
||||
transition: background-color 0.3s ease, backdrop-filter 0.3s ease;
|
||||
width: min(calc(100% - 2rem), 1152px);
|
||||
transform: translateX(-50%);
|
||||
color: #1a0b54;
|
||||
font-family: var(--font-brand);
|
||||
transition: width 500ms ease-in-out;
|
||||
}
|
||||
|
||||
.nav.scrolled {
|
||||
background-color: rgba(255, 255, 255, 0.82);
|
||||
backdrop-filter: blur(12px);
|
||||
border-bottom: 1px solid var(--border);
|
||||
.brand-header.is-compact {
|
||||
width: min(calc(100% - 2rem), 1024px);
|
||||
}
|
||||
|
||||
.nav.scrolled .nav-logo {
|
||||
color: var(--text);
|
||||
.brand-header,
|
||||
.brand-header * {
|
||||
box-sizing: border-box;
|
||||
font-family: var(--font-brand);
|
||||
}
|
||||
|
||||
.nav.scrolled .nav-github {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.nav.scrolled .nav-github:hover {
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.nav-inner {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
.brand-nav {
|
||||
position: relative;
|
||||
min-height: 54px;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(180px, 1fr) auto minmax(180px, 1fr);
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: 6px 8px 6px 20px;
|
||||
border-radius: 16px;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
||||
transition: padding 500ms ease-in-out, box-shadow 500ms ease-in-out;
|
||||
}
|
||||
|
||||
.nav-logo {
|
||||
font-family: var(--font-heading);
|
||||
font-size: 1.25rem;
|
||||
color: var(--text);
|
||||
text-decoration: none;
|
||||
.brand-header.is-compact .brand-nav {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.brand-home {
|
||||
grid-column: 1;
|
||||
justify-self: start;
|
||||
display: inline-flex;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.nav-logo:hover {
|
||||
color: #1a0b54;
|
||||
text-decoration: none;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
.brand-home:hover {
|
||||
color: #1a0b54;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-home img {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
flex: 0 0 auto;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.brand-home span {
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
letter-spacing: -0.02em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.brand-desktop-nav {
|
||||
grid-column: 2;
|
||||
justify-self: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1.5rem;
|
||||
justify-content: center;
|
||||
gap: 4px;
|
||||
transition: gap 500ms ease-in-out;
|
||||
}
|
||||
|
||||
.nav-github {
|
||||
display: flex;
|
||||
.brand-header.is-compact .brand-desktop-nav {
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.brand-desktop-nav > a,
|
||||
.brand-products > summary {
|
||||
min-height: 40px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
color: var(--text-muted);
|
||||
font-size: 0.9rem;
|
||||
justify-content: center;
|
||||
gap: 4px;
|
||||
padding: 0 16px;
|
||||
border: 0;
|
||||
border-radius: 12px;
|
||||
color: #1a0b54;
|
||||
background: transparent;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 1;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
transition: background-color 180ms ease, color 180ms ease, padding 500ms ease-in-out, transform 180ms ease;
|
||||
}
|
||||
|
||||
.nav-github:hover {
|
||||
color: var(--text);
|
||||
.brand-header.is-compact .brand-desktop-nav > a,
|
||||
.brand-header.is-compact .brand-products > summary {
|
||||
padding-right: 8px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.brand-desktop-nav > a:hover,
|
||||
.brand-products > summary:hover,
|
||||
.brand-products[open] > summary {
|
||||
color: #1a0b54;
|
||||
background: #f4f2fb;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.nav-cta {
|
||||
background: var(--accent);
|
||||
.brand-desktop-nav > a:active,
|
||||
.brand-products > summary:active,
|
||||
.brand-github:active,
|
||||
.brand-cta:active,
|
||||
.brand-menu-toggle:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.brand-products {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.brand-products::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.brand-products > summary {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.brand-products > summary::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.brand-products > summary svg {
|
||||
transition: transform 180ms ease;
|
||||
}
|
||||
|
||||
.brand-products[open] > summary svg {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.brand-products-menu {
|
||||
position: absolute;
|
||||
top: calc(100% + 12px);
|
||||
left: 50%;
|
||||
width: 330px;
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
padding: 8px;
|
||||
border: 1px solid rgba(88, 43, 232, 0.12);
|
||||
border-radius: 16px;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 20px 48px rgba(26, 11, 84, 0.16);
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.brand-products-menu a {
|
||||
position: relative;
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
padding: 12px;
|
||||
border-radius: 12px;
|
||||
color: #1a0b54;
|
||||
text-decoration: none;
|
||||
transition: background-color 180ms ease;
|
||||
}
|
||||
|
||||
.brand-products-menu a:hover,
|
||||
.brand-products-menu a:focus-visible,
|
||||
.brand-products-menu a[aria-current='page'] {
|
||||
background: #f4f1ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-products-menu a[aria-current='page'] {
|
||||
color: #582be8;
|
||||
}
|
||||
|
||||
.brand-products-menu a[aria-current='page']::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
bottom: 10px;
|
||||
left: 5px;
|
||||
width: 3px;
|
||||
border-radius: 999px;
|
||||
background: #582be8;
|
||||
}
|
||||
|
||||
.brand-products-menu strong {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.brand-products-menu span {
|
||||
color: #746c91;
|
||||
font-size: 12px;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.brand-desktop-actions {
|
||||
grid-column: 3;
|
||||
justify-self: end;
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.brand-github {
|
||||
min-height: 42px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 7px;
|
||||
padding: 0 12px;
|
||||
border-radius: 12px;
|
||||
color: #1a0b54;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 1;
|
||||
text-decoration: none;
|
||||
transition: background-color 180ms ease, transform 180ms ease;
|
||||
}
|
||||
|
||||
.brand-github:hover {
|
||||
color: #1a0b54;
|
||||
background: #f4f2fb;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-cta {
|
||||
min-height: 42px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1px;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
color: #ffffff;
|
||||
padding: 0.5rem 1.25rem;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
font-size: 0.9rem;
|
||||
background: var(--egonex-gradient-primary);
|
||||
box-shadow: none;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
text-decoration: none;
|
||||
transition: box-shadow 0.3s ease;
|
||||
white-space: nowrap;
|
||||
transition: transform 180ms ease;
|
||||
}
|
||||
|
||||
.nav-cta:hover {
|
||||
.brand-cta > span {
|
||||
min-height: 40px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 19px;
|
||||
border-radius: 11px;
|
||||
background: #582be8;
|
||||
transition: background 300ms ease;
|
||||
}
|
||||
|
||||
.brand-cta:hover {
|
||||
color: #ffffff;
|
||||
background: var(--egonex-gradient-primary);
|
||||
text-decoration: none;
|
||||
box-shadow: 0 0 20px var(--accent-glow);
|
||||
}
|
||||
|
||||
.brand-cta:hover > span,
|
||||
.brand-cta:focus-visible > span {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.brand-menu-toggle,
|
||||
.brand-mobile-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.brand-menu-open-icon[hidden],
|
||||
.brand-menu-close-icon[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:global(.brand-menu-is-open) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media (max-width: 1099px) {
|
||||
.brand-nav {
|
||||
grid-template-columns: minmax(0, 1fr) auto;
|
||||
}
|
||||
|
||||
.brand-desktop-nav,
|
||||
.brand-desktop-actions {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.brand-menu-toggle {
|
||||
grid-column: 2;
|
||||
justify-self: end;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: inline-flex;
|
||||
flex: 0 0 auto;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-left: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border-radius: 12px;
|
||||
color: #1a0b54;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
transition: background-color 180ms ease, transform 180ms ease;
|
||||
}
|
||||
|
||||
.brand-menu-toggle:hover {
|
||||
background: #f4f2fb;
|
||||
}
|
||||
|
||||
.brand-mobile-panel {
|
||||
position: absolute;
|
||||
top: calc(100% + 8px);
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
padding: 10px;
|
||||
border: 1px solid rgba(88, 43, 232, 0.1);
|
||||
border-radius: 16px;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 20px 48px rgba(26, 11, 84, 0.16);
|
||||
}
|
||||
|
||||
.brand-mobile-panel[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.brand-mobile-panel > a,
|
||||
.brand-mobile-products > a {
|
||||
min-height: 42px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 14px;
|
||||
border-radius: 12px;
|
||||
color: #1a0b54;
|
||||
font-size: 14px;
|
||||
text-decoration: none;
|
||||
transition: background-color 180ms ease;
|
||||
}
|
||||
|
||||
.brand-mobile-panel > a:hover,
|
||||
.brand-mobile-products > a:hover,
|
||||
.brand-mobile-products > a[aria-current='page'] {
|
||||
background: #f4f1ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.brand-mobile-products {
|
||||
display: grid;
|
||||
gap: 2px;
|
||||
padding: 6px;
|
||||
border-radius: 12px;
|
||||
background: #f8f7fc;
|
||||
}
|
||||
|
||||
.brand-mobile-label {
|
||||
padding: 6px 8px 4px;
|
||||
color: #746c91;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.brand-mobile-products > a {
|
||||
min-height: 0;
|
||||
display: grid;
|
||||
align-items: start;
|
||||
gap: 3px;
|
||||
padding: 10px 12px;
|
||||
}
|
||||
|
||||
.brand-mobile-products > a strong {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.brand-mobile-products > a span {
|
||||
color: #746c91;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.brand-mobile-actions {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
|
||||
gap: 8px;
|
||||
padding-top: 6px;
|
||||
border-top: 1px solid #ece9f5;
|
||||
}
|
||||
|
||||
.brand-mobile-actions .brand-github,
|
||||
.brand-mobile-actions .brand-cta {
|
||||
min-height: 44px;
|
||||
}
|
||||
|
||||
.brand-mobile-actions .brand-cta > span {
|
||||
min-height: 42px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.nav { padding: 0.75rem 1rem; }
|
||||
.nav-github span { display: none; }
|
||||
.brand-header {
|
||||
top: 12px;
|
||||
width: calc(100% - 24px);
|
||||
}
|
||||
|
||||
.brand-header.is-compact {
|
||||
width: calc(100% - 24px);
|
||||
}
|
||||
|
||||
.brand-nav {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.brand-home span {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 540px) {
|
||||
.nav { padding: 0.75rem 1rem; }
|
||||
.nav-logo { font-size: 1.05rem; }
|
||||
.nav-links { gap: 0.85rem; }
|
||||
.nav-github span { display: none; }
|
||||
.nav-cta {
|
||||
padding: 0.48rem 0.85rem;
|
||||
font-size: 0.82rem;
|
||||
white-space: nowrap;
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.brand-header,
|
||||
.brand-header * {
|
||||
scroll-behavior: auto !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<section class="problem">
|
||||
<section class="problem" id="what-we-build">
|
||||
<h2 class="problem-heading reveal">
|
||||
Most code graphs show you <span class="grad">structure</span>.<br />
|
||||
Files, functions, edges. A map with no legend.
|
||||
|
||||
@@ -4,15 +4,15 @@ const demoUrl = `${base.endsWith('/') ? base : base + '/'}demo/index.html`;
|
||||
---
|
||||
|
||||
<!-- Live Demo -->
|
||||
<section class="showcase showcase--demo">
|
||||
<section class="showcase showcase--demo" id="live-demo">
|
||||
<span class="showcase-label showcase-label--accent reveal">Live Demo</span>
|
||||
<h2 class="showcase-heading reveal">
|
||||
See what your code is <span class="grad">really</span> doing
|
||||
</h2>
|
||||
<p class="showcase-desc showcase-desc--wide reveal">
|
||||
Explore every file, function, and dependency — or switch to <span class="grad">business
|
||||
knowledge</span> mode and watch your code transform into authentication flows,
|
||||
payment pipelines, and user lifecycles. Not just a map.
|
||||
knowledge</span> mode and watch your code<span class="showcase-desc-break"><br /></span>
|
||||
transform into authentication flows, payment pipelines, and user lifecycles. Not just a map.<span class="showcase-desc-break"><br /></span>
|
||||
<strong>The story behind your codebase, fully interactive.</strong>
|
||||
</p>
|
||||
<div class="showcase-frame showcase-frame--featured reveal reveal-delay-1">
|
||||
@@ -98,7 +98,11 @@ const demoUrl = `${base.endsWith('/') ? base : base + '/'}demo/index.html`;
|
||||
}
|
||||
|
||||
.showcase-desc--wide {
|
||||
max-width: 700px;
|
||||
max-width: 960px;
|
||||
}
|
||||
|
||||
.showcase-desc-break {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.showcase-desc strong {
|
||||
@@ -205,5 +209,6 @@ const demoUrl = `${base.endsWith('/') ? base : base + '/'}demo/index.html`;
|
||||
.showcase-features { gap: 0.5rem; }
|
||||
.showcase-pill { font-size: 0.7rem; padding: 0.25rem 0.65rem; }
|
||||
.showcase-iframe-wrap { aspect-ratio: 4 / 3; }
|
||||
.showcase-desc-break { display: none; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -12,6 +12,9 @@ const { title } = Astro.props;
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="Turn any codebase into an interactive knowledge graph you can explore, search, and learn from." />
|
||||
<link rel="preload" href="/fonts/MazzardH-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous" />
|
||||
<link rel="preload" href="/fonts/MazzardH-Medium.woff2" as="font" type="font/woff2" crossorigin="anonymous" />
|
||||
<link rel="preload" href="/assets/egonexai/egonex-logo.png" as="image" type="image/png" />
|
||||
<link rel="icon" type="image/png" href="/favicon.png" />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
|
||||
@@ -1,4 +1,20 @@
|
||||
/* Font declarations — self-hosted, no external CDN dependency */
|
||||
@font-face {
|
||||
font-family: 'Mazzard H';
|
||||
src: url('/fonts/MazzardH-Regular.woff2') format('woff2');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Mazzard H';
|
||||
src: url('/fonts/MazzardH-Medium.woff2') format('woff2');
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Geist Variable';
|
||||
src: url('/fonts/GeistVariable.woff2') format('woff2');
|
||||
@@ -55,10 +71,19 @@
|
||||
--surface-dark: #10131d;
|
||||
--border: #e8e1ff;
|
||||
--border-soft: #eceef4;
|
||||
--egonex-violet-deep: #35138f;
|
||||
--egonex-violet: #582be8;
|
||||
--egonex-violet-bright: #744bef;
|
||||
--egonex-violet-light: #a996ff;
|
||||
--egonex-violet-mist: #c2b6ff;
|
||||
--egonex-gradient-primary: linear-gradient(90deg, #35138f 0%, #582be8 52%, #744bef 100%);
|
||||
--egonex-gradient-on-dark: linear-gradient(90deg, #a996ff 0%, #8064f4 45%, #c2b6ff 100%);
|
||||
--egonex-button-glow: 0 12px 28px rgba(88, 43, 232, 0.24);
|
||||
--egonex-button-glow-hover: 0 16px 36px rgba(88, 43, 232, 0.34);
|
||||
--accent: #582be8;
|
||||
--accent-2: #6236ff;
|
||||
--accent-3: #8b5cf6;
|
||||
--accent-deep: #4520c8;
|
||||
--accent-2: #582be8;
|
||||
--accent-3: #744bef;
|
||||
--accent-deep: #35138f;
|
||||
--accent-soft: #f1ecff;
|
||||
--accent-glow: rgba(88, 43, 232, 0.18);
|
||||
--text: #0f1020;
|
||||
@@ -69,15 +94,16 @@
|
||||
--shadow-soft: 0 30px 80px rgba(88, 43, 232, 0.12), 0 10px 30px rgba(15, 16, 32, 0.08);
|
||||
--shadow-card: 0 18px 42px rgba(80, 70, 120, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.86);
|
||||
|
||||
/* Egonex sweep: violet -> purple */
|
||||
--grad-cool: #8b5cf6;
|
||||
--grad-mid: #6236ff;
|
||||
--grad-warm: #582be8;
|
||||
--gradient: linear-gradient(135deg, var(--grad-cool), var(--grad-mid), var(--grad-warm));
|
||||
/* Egonex sweep: deep violet -> brand violet -> bright violet */
|
||||
--grad-cool: #35138f;
|
||||
--grad-mid: #582be8;
|
||||
--grad-warm: #744bef;
|
||||
--gradient: var(--egonex-gradient-primary);
|
||||
|
||||
--font-heading: 'Geist Variable', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
--font-body: 'Geist Variable', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
--font-code: 'Geist Mono Variable', 'JetBrains Mono', 'SF Mono', 'Cascadia Code', 'Fira Code', monospace;
|
||||
--font-heading: 'Mazzard H', sans-serif;
|
||||
--font-body: 'Mazzard H', sans-serif;
|
||||
--font-code: 'Mazzard H', sans-serif;
|
||||
--font-brand: 'Mazzard H', sans-serif;
|
||||
}
|
||||
|
||||
/* Reset & base */
|
||||
@@ -91,6 +117,19 @@ html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
html,
|
||||
body,
|
||||
button,
|
||||
input,
|
||||
textarea,
|
||||
select {
|
||||
font-family: 'Mazzard H', sans-serif;
|
||||
}
|
||||
|
||||
section[id] {
|
||||
scroll-margin-top: 6rem;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-body);
|
||||
background:
|
||||
@@ -157,3 +196,18 @@ a {
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
html {
|
||||
scroll-behavior: auto;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
scroll-behavior: auto !important;
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user