diff --git a/website/sidebars.ts b/website/sidebars.ts
index 6e715a9..00a0b9c 100644
--- a/website/sidebars.ts
+++ b/website/sidebars.ts
@@ -4,19 +4,19 @@ const sidebars: SidebarsConfig = {
docsSidebar: [
{
type: 'category',
- label: '🚀 Primeiros Passos',
+ label: 'Primeiros Passos',
collapsed: false,
items: ['intro', 'installation', 'quickstart'],
},
{
type: 'category',
- label: '🛡️ Conceitos & Segurança',
+ label: 'Conceitos & Segurança',
collapsed: false,
items: ['severity-levels'],
},
{
type: 'category',
- label: '💻 Comandos da CLI',
+ label: 'Comandos da CLI',
collapsed: false,
items: [
'commands/scan',
@@ -29,19 +29,19 @@ const sidebars: SidebarsConfig = {
},
{
type: 'category',
- label: '⚙️ Configuração',
+ label: 'Configuração',
collapsed: false,
items: ['configuration'],
},
{
type: 'category',
- label: '🔄 Automação & CI/CD',
+ label: 'Automação & CI/CD',
collapsed: false,
items: ['cicd-integration'],
},
{
type: 'category',
- label: '🤝 Comunidade',
+ label: 'Comunidade',
collapsed: true,
items: ['contributing'],
},
diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx
index f4415e9..8f780d1 100644
--- a/website/src/components/HomepageFeatures/index.tsx
+++ b/website/src/components/HomepageFeatures/index.tsx
@@ -3,96 +3,57 @@ import clsx from 'clsx';
import Heading from '@theme/Heading';
import styles from './styles.module.css';
-type FeatureItem = {
- icon: string;
- badge?: string;
+type PillarItem = {
+ tag: string;
title: string;
description: ReactNode;
};
-const FeatureList: FeatureItem[] = [
+const PillarList: PillarItem[] = [
{
- icon: '🛡️',
- badge: 'Detecção Ativa',
- title: 'Git-Aware & Inteligente',
+ tag: 'Detecção Git-Native',
+ title: 'Consciência da Árvore Git',
description: (
<>
- O envguard analisa a árvore de trabalho do Git e diferencia se arquivos{' '}
- .env estão comitados (tracked ), preparados (staged ) ou
- desprotegidos pelo .gitignore.
+ Diferencia com precisão se arquivos de ambiente estão comitados no histórico (
+ tracked ), preparados para o próximo commit (staged ) ou desprotegidos
+ contra regras do .gitignore.
>
),
},
{
- icon: '⚡',
- badge: 'Zero Telemetria',
- title: 'Ultrarrápido & 100% Local',
+ tag: 'Segurança & Velocidade',
+ title: '100% Local & Determinístico',
description: (
<>
- Construído em Go nativo, executa instantaneamente e 100% offline. Nunca envia dados para
- servidores remotos e jamais expõe o conteúdo dos seus segredos.
+ Desenvolvido em Go nativo, executa instantaneamente em pipelines e máquinas locais sem
+ qualquer telemetria. Valores de variáveis e credenciais nunca são impressos em terminal ou
+ logs.
>
),
},
{
- icon: '🤖',
- badge: 'Pre-Commit & CI',
- title: 'Pronto para CI/CD & Hooks',
+ tag: 'Automação Contínua',
+ title: 'Pre-Commit & Autocorreção',
description: (
<>
- Instale pre-commit hooks nativos com envguard hook install e utilize saídas
- JSON determinísticas para automação no GitHub Actions e pipelines.
- >
- ),
- },
- {
- icon: '🛠️',
- badge: 'Autocorreção',
- title: 'Remediação com 1 Comando',
- description: (
- <>
- Com o comando envguard fix, você remove arquivos sensíveis do cache do Git e
- adiciona as regras necessárias no .gitignore automaticamente.
- >
- ),
- },
- {
- icon: '📊',
- badge: 'Diagnóstico Claro',
- title: 'Níveis de Severidade',
- description: (
- <>
- Classificação precisa dos alertas em CRITICAL , WARNING e{' '}
- INFO , com suporte a flags como --fail-on para bloquear builds
- arriscados.
- >
- ),
- },
- {
- icon: '⚙️',
- badge: 'Flexível',
- title: 'Configuração Simplificada',
- description: (
- <>
- Personalize padrões de busca, exceções de templates e regras customizadas através do arquivo
- central .envguard.yaml gerado via envguard init.
+ Instale pre-commit hooks nativos com envguard hook install e execute correções
+ automáticas no
+ .gitignore e no cache do Git através de envguard fix.
>
),
},
];
-function Feature({ icon, badge, title, description }: FeatureItem) {
+function PillarCard({ tag, title, description }: PillarItem) {
return (
-
-
-
- {icon}
- {badge && {badge} }
-
-
+
+
+
{tag}
+
{title}
-
{description}
+
{description}
);
@@ -104,16 +65,16 @@ export default function HomepageFeatures(): ReactNode {
- Recursos projetados para proteger seu fluxo de trabalho
+ Construído para engenharia e segurança
- Simplicidade, velocidade e segurança máxima sem atrapalhar a produtividade do time de
- engenharia.
+ Prevenção ativa contra vazamento de segredos sem adicionar atrito ou dependências
+ lentas.
- {FeatureList.map((props, idx) => (
-
+ {PillarList.map((props, idx) => (
+
))}
diff --git a/website/src/components/HomepageFeatures/styles.module.css b/website/src/components/HomepageFeatures/styles.module.css
index 90c6178..e9ca367 100644
--- a/website/src/components/HomepageFeatures/styles.module.css
+++ b/website/src/components/HomepageFeatures/styles.module.css
@@ -1,94 +1,98 @@
.featuresSection {
- padding: 5rem 0;
+ padding: 4.5rem 0;
width: 100%;
- position: relative;
+ background-color: var(--ifm-background-color);
+ border-top: 1px solid var(--border-subtle);
}
.sectionHeader {
text-align: center;
- margin-bottom: 3.5rem;
+ margin-bottom: 3rem;
}
.sectionTitle {
- font-size: 2.25rem;
+ font-size: 2rem;
font-weight: 800;
- letter-spacing: -0.5px;
- margin-bottom: 0.75rem;
+ letter-spacing: -0.03em;
+ margin-bottom: 0.5rem;
+ color: var(--nordic-indigo);
+}
+
+[data-theme='dark'] .sectionTitle {
+ color: #f8fafc;
}
.sectionSubtitle {
- font-size: 1.15rem;
- color: var(--ifm-color-emphasis-700);
- max-width: 680px;
+ font-size: 1.05rem;
+ color: #64748b;
+ max-width: 580px;
margin: 0 auto;
}
-.featureCol {
- margin-bottom: 2rem;
+[data-theme='dark'] .sectionSubtitle {
+ color: #94a3b8;
+}
+
+.pillarCol {
+ margin-bottom: 1.5rem;
display: flex;
}
-.featureCard {
+.pillarCard {
width: 100%;
- padding: 2rem;
- border-radius: 16px;
- background: var(--brand-card-bg);
- border: 1px solid var(--brand-card-border);
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
+ padding: 1.75rem;
+ border-radius: 8px;
+ background-color: var(--card-bg);
+ border: 1px solid var(--border-subtle);
+ transition:
+ border-color 0.15s ease,
+ transform 0.15s ease;
display: flex;
flex-direction: column;
}
-.featureCard:hover {
- transform: translateY(-5px);
- border-color: var(--brand-purple-neon);
- box-shadow: var(--brand-glow);
+.pillarCard:hover {
+ border-color: var(--nordic-indigo);
+ transform: translateY(-2px);
}
-.featureHeader {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 1.25rem;
+.pillarTag {
+ font-size: 0.72rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ color: var(--nordic-indigo);
+ background-color: var(--vanilla-cream);
+ padding: 0.2rem 0.5rem;
+ border-radius: 4px;
+ align-self: flex-start;
+ margin-bottom: 1rem;
}
-.featureIcon {
- font-size: 2rem;
- line-height: 1;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 48px;
- height: 48px;
- border-radius: 12px;
- background: rgba(139, 93, 255, 0.12);
- border: 1px solid rgba(139, 93, 255, 0.2);
+[data-theme='dark'] .pillarTag {
+ background-color: rgba(255, 244, 212, 0.12);
+ color: var(--vanilla-cream);
}
-.featureBadge {
- font-size: 0.75rem;
+.pillarTitle {
+ font-size: 1.18rem;
font-weight: 700;
- text-transform: uppercase;
- letter-spacing: 0.5px;
- padding: 0.25rem 0.65rem;
- border-radius: 999px;
- background: rgba(139, 93, 255, 0.15);
- color: var(--brand-purple-neon);
- border: 1px solid rgba(139, 93, 255, 0.25);
+ letter-spacing: -0.02em;
+ margin-bottom: 0.6rem;
+ color: #0f172a;
}
-.featureTitle {
- font-size: 1.25rem;
- font-weight: 700;
- margin-bottom: 0.75rem;
+[data-theme='dark'] .pillarTitle {
+ color: #f1f5f9;
}
-.featureDescription {
- font-size: 0.95rem;
+.pillarDescription {
+ font-size: 0.9rem;
line-height: 1.6;
- color: var(--ifm-color-emphasis-700);
+ color: #64748b;
margin-bottom: 0;
}
+
+[data-theme='dark'] .pillarDescription {
+ color: #94a3b8;
+}
diff --git a/website/src/css/custom.css b/website/src/css/custom.css
index b4b1283..36da690 100644
--- a/website/src/css/custom.css
+++ b/website/src/css/custom.css
@@ -1,10 +1,10 @@
/**
- * envguard Custom Design System & Theme
+ * envguard Design System
* Palette:
- * - #FFF7D1 (Cream / Glow Accent)
- * - #8B5DFF (Electric Purple)
- * - #6A42C2 (Royal Purple)
- * - #563A9C (Deep Purple)
+ * - Nordic Indigo: #263BAA (Primary Brand)
+ * - Vanilla Cream: #FFF4D4 (Warm Accent & High-Contrast Cards)
+ * - Nordic Indigo Deep: #1B2A7A
+ * - Nordic Indigo Dark: #0A0D1D
*/
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
@@ -13,89 +13,87 @@
--ifm-font-family-base:
'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
Cantarell, sans-serif;
- --ifm-font-family-monospace: 'JetBrains Mono', 'Fira Code', Menlo, Monaco, Consolas, monospace;
- --ifm-code-font-size: 90%;
+ --ifm-font-family-monospace: 'JetBrains Mono', Menlo, Monaco, Consolas, monospace;
+ --ifm-code-font-size: 88%;
--ifm-heading-font-weight: 700;
- --ifm-line-height-base: 1.65;
-
- /* Brand Palette - Light Mode */
- --ifm-color-primary: #6a42c2;
- --ifm-color-primary-dark: #563a9c;
- --ifm-color-primary-darker: #462e82;
- --ifm-color-primary-darkest: #322060;
- --ifm-color-primary-light: #8b5dff;
- --ifm-color-primary-lighter: #9e75ff;
- --ifm-color-primary-lightest: #be9eff;
-
- --brand-cream: #fff7d1;
- --brand-purple-neon: #8b5dff;
- --brand-purple-royal: #6a42c2;
- --brand-purple-deep: #563a9c;
-
- --ifm-background-color: #fcfbfe;
+ --ifm-line-height-base: 1.6;
+
+ /* Nordic Indigo & Vanilla Cream Tokens */
+ --nordic-indigo: #263baa;
+ --nordic-indigo-deep: #1b2a7a;
+ --nordic-indigo-dark: #0a0d1d;
+ --nordic-indigo-surface: #11162e;
+ --vanilla-cream: #fff4d4;
+ --vanilla-cream-warm: #fffdf7;
+ --vanilla-cream-surface: #fff9e6;
+
+ /* Light Theme */
+ --ifm-color-primary: #263baa;
+ --ifm-color-primary-dark: #1f308f;
+ --ifm-color-primary-darker: #1b2a7a;
+ --ifm-color-primary-darkest: #121d54;
+ --ifm-color-primary-light: #3a4ec0;
+ --ifm-color-primary-lighter: #4c60cd;
+ --ifm-color-primary-lightest: #7686dc;
+
+ --ifm-background-color: #fffdf7;
--ifm-background-surface-color: #ffffff;
- --ifm-navbar-background-color: rgba(255, 255, 255, 0.85);
- --ifm-footer-background-color: #1a162b;
+ --ifm-navbar-background-color: rgba(255, 253, 247, 0.92);
+ --ifm-footer-background-color: #0a0d1d;
- --brand-hero-bg: radial-gradient(circle at 50% 0%, #20173d 0%, #0f0a1c 100%);
- --brand-card-bg: rgba(255, 255, 255, 0.9);
- --brand-card-border: rgba(106, 66, 194, 0.15);
- --brand-card-hover-border: #8b5dff;
- --brand-glow: 0 8px 32px 0 rgba(106, 66, 194, 0.15);
-
- --docusaurus-highlighted-code-line-bg: rgba(106, 66, 194, 0.1);
+ --border-subtle: #e2e8f0;
+ --card-bg: #ffffff;
+ --card-border: rgba(38, 59, 170, 0.1);
+ --hero-bg: #fffdf7;
}
[data-theme='dark'] {
- /* Brand Palette - Dark Mode */
- --ifm-color-primary: #8b5dff;
- --ifm-color-primary-dark: #6a42c2;
- --ifm-color-primary-darker: #563a9c;
- --ifm-color-primary-darkest: #3e2675;
- --ifm-color-primary-light: #a37dff;
- --ifm-color-primary-lighter: #b89bff;
- --ifm-color-primary-lightest: #dcd0ff;
-
- --ifm-background-color: #0b0914;
- --ifm-background-surface-color: #120e21;
- --ifm-navbar-background-color: rgba(11, 9, 20, 0.82);
- --ifm-footer-background-color: #08060f;
-
- --brand-hero-bg:
- radial-gradient(ellipse 80% 50% at 50% -20%, rgba(139, 93, 255, 0.25), transparent), #0b0914;
- --brand-card-bg: rgba(18, 14, 33, 0.7);
- --brand-card-border: rgba(139, 93, 255, 0.18);
- --brand-card-hover-border: #8b5dff;
- --brand-glow: 0 8px 32px 0 rgba(139, 93, 255, 0.18);
-
- --docusaurus-highlighted-code-line-bg: rgba(139, 93, 255, 0.2);
+ /* Dark Theme */
+ --ifm-color-primary: #6c80ea;
+ --ifm-color-primary-dark: #556ce6;
+ --ifm-color-primary-darker: #4a62e4;
+ --ifm-color-primary-darkest: #2a45db;
+ --ifm-color-primary-light: #8394ee;
+ --ifm-color-primary-lighter: #8f9ff0;
+ --ifm-color-primary-lightest: #b3bef6;
+
+ --ifm-background-color: #0a0d1d;
+ --ifm-background-surface-color: #11162e;
+ --ifm-navbar-background-color: rgba(10, 13, 29, 0.92);
+ --ifm-footer-background-color: #060814;
+
+ --border-subtle: rgba(255, 255, 255, 0.08);
+ --card-bg: #11162e;
+ --card-border: rgba(108, 128, 234, 0.16);
+ --hero-bg: #0a0d1d;
}
/* =========================================
- Glassmorphism Navbar
+ Clean Editorial Navbar
========================================= */
.navbar {
- backdrop-filter: blur(14px);
- -webkit-backdrop-filter: blur(14px);
- border-bottom: 1px solid var(--brand-card-border);
- box-shadow: 0 4px 20px -2px rgba(0, 0, 0, 0.1);
- transition: all 0.3s ease;
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border-subtle);
+ box-shadow: none;
+ height: 64px;
}
.navbar__title {
font-weight: 800;
- letter-spacing: -0.5px;
- background: linear-gradient(135deg, #8b5dff 0%, #6a42c2 100%);
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- font-size: 1.35rem;
+ letter-spacing: -0.03em;
+ color: var(--nordic-indigo);
+ font-size: 1.25rem;
+}
+
+[data-theme='dark'] .navbar__title {
+ color: #ffffff;
}
.navbar__link {
font-weight: 600;
- transition:
- color 0.2s ease,
- transform 0.2s ease;
+ font-size: 0.92rem;
+ transition: color 0.15s ease;
}
.navbar__link:hover,
@@ -104,142 +102,150 @@
}
/* =========================================
- Search Bar Customization
+ Search Bar
========================================= */
.navbar__search-input {
- border-radius: 9999px !important;
- border: 1px solid var(--brand-card-border) !important;
+ border-radius: 8px !important;
+ border: 1px solid var(--border-subtle) !important;
background-color: var(--ifm-background-surface-color) !important;
- padding-left: 2.2rem !important;
- transition: all 0.25s ease !important;
+ font-size: 0.85rem !important;
+ padding: 0.4rem 0.8rem 0.4rem 2rem !important;
+ transition:
+ border-color 0.15s ease,
+ box-shadow 0.15s ease !important;
}
.navbar__search-input:focus {
- border-color: var(--brand-purple-neon) !important;
- box-shadow: 0 0 0 3px rgba(139, 93, 255, 0.25) !important;
- width: 240px !important;
+ border-color: var(--ifm-color-primary) !important;
+ box-shadow: 0 0 0 2px rgba(38, 59, 170, 0.15) !important;
}
/* =========================================
- Modern Buttons
+ Buttons
========================================= */
.button {
- font-weight: 700;
- border-radius: 12px;
- padding: 0.75rem 1.6rem;
- transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
+ font-weight: 600;
+ border-radius: 8px;
+ padding: 0.65rem 1.35rem;
+ font-size: 0.95rem;
+ transition: all 0.15s ease;
+ letter-spacing: -0.01em;
}
.button--primary {
- background: linear-gradient(135deg, #8b5dff 0%, #6a42c2 100%);
- border: none;
+ background-color: var(--nordic-indigo);
+ border: 1px solid var(--nordic-indigo);
color: #ffffff !important;
- box-shadow: 0 4px 15px rgba(106, 66, 194, 0.35);
}
.button--primary:hover {
- background: linear-gradient(135deg, #9b74ff 0%, #7c52d8 100%);
- transform: translateY(-2px);
- box-shadow: 0 6px 20px rgba(139, 93, 255, 0.45);
+ background-color: var(--nordic-indigo-deep);
+ border-color: var(--nordic-indigo-deep);
+ transform: translateY(-1px);
+}
+
+[data-theme='dark'] .button--primary {
+ background-color: #3b52d4;
+ border-color: #3b52d4;
+ color: #ffffff !important;
+}
+
+[data-theme='dark'] .button--primary:hover {
+ background-color: #263baa;
+ border-color: #263baa;
}
.button--secondary {
- background: rgba(139, 93, 255, 0.12);
+ background-color: transparent;
color: var(--ifm-color-primary) !important;
- border: 1px solid var(--brand-card-border);
- backdrop-filter: blur(8px);
+ border: 1px solid var(--border-subtle);
}
.button--secondary:hover {
- background: rgba(139, 93, 255, 0.2);
- border-color: var(--brand-purple-neon);
- transform: translateY(-2px);
+ background-color: var(--vanilla-cream-surface);
+ border-color: var(--nordic-indigo);
+ transform: translateY(-1px);
+}
+
+[data-theme='dark'] .button--secondary {
+ color: #e2e8f0 !important;
+ border-color: var(--border-subtle);
+}
+
+[data-theme='dark'] .button--secondary:hover {
+ background-color: rgba(255, 255, 255, 0.05);
+ border-color: var(--ifm-color-primary);
}
/* =========================================
- Documentation Sidebar & Content
+ Documentation Sidebar
========================================= */
.theme-doc-sidebar-container {
- border-right: 1px solid var(--brand-card-border) !important;
+ border-right: 1px solid var(--border-subtle) !important;
}
.menu__link {
- border-radius: 8px;
+ border-radius: 6px;
font-weight: 500;
- margin: 2px 0;
- transition: all 0.2s ease;
+ font-size: 0.9rem;
+ margin: 1px 0;
+ padding: 0.4rem 0.75rem;
+ transition:
+ background-color 0.15s ease,
+ color 0.15s ease;
}
.menu__link--active:not(.menu__link--sublist) {
- background: linear-gradient(
- 90deg,
- rgba(139, 93, 255, 0.18) 0%,
- rgba(106, 66, 194, 0.08) 100%
- ) !important;
- color: var(--ifm-color-primary) !important;
+ background-color: rgba(38, 59, 170, 0.08) !important;
+ color: var(--nordic-indigo) !important;
font-weight: 700;
- border-left: 3px solid var(--brand-purple-neon);
}
-.menu__link:hover:not(.menu__link--active) {
- background-color: rgba(139, 93, 255, 0.08);
- color: var(--ifm-color-primary);
+[data-theme='dark'] .menu__link--active:not(.menu__link--sublist) {
+ background-color: rgba(108, 128, 234, 0.12) !important;
+ color: #8394ee !important;
+}
+
+.menu__list-item-collapsible {
+ font-weight: 600;
+ font-size: 0.92rem;
}
/* =========================================
- Modern Code Blocks & Admonitions
+ Code Blocks & Admonitions
========================================= */
div[class^='codeBlockContainer_'] {
- border-radius: 12px;
- border: 1px solid var(--brand-card-border);
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
- overflow: hidden;
+ border-radius: 10px;
+ border: 1px solid var(--border-subtle);
+ box-shadow: none;
}
.alert {
- border-radius: 12px;
+ border-radius: 8px;
border-width: 1px;
- border-left-width: 5px;
- backdrop-filter: blur(8px);
+ border-left-width: 4px;
}
.alert--info {
- --ifm-alert-background-color: rgba(139, 93, 255, 0.08);
- --ifm-alert-border-color: #8b5dff;
+ background-color: rgba(38, 59, 170, 0.05);
+ border-color: var(--nordic-indigo);
}
-.alert--success {
- --ifm-alert-background-color: rgba(16, 185, 129, 0.08);
- --ifm-alert-border-color: #10b981;
+.alert--warning {
+ background-color: rgba(255, 244, 212, 0.7);
+ border-color: #eab308;
+ color: #713f12;
}
-.alert--warning {
- --ifm-alert-background-color: rgba(255, 193, 7, 0.08);
- --ifm-alert-border-color: #f59e0b;
+[data-theme='dark'] .alert--warning {
+ background-color: rgba(234, 179, 8, 0.1);
+ color: #fef08a;
}
/* =========================================
- Custom Scrollbar & Highlights
+ Selection
========================================= */
-::-webkit-scrollbar {
- width: 8px;
- height: 8px;
-}
-
-::-webkit-scrollbar-track {
- background: transparent;
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(106, 66, 194, 0.3);
- border-radius: 999px;
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: var(--brand-purple-neon);
-}
-
::selection {
- background: #8b5dff;
+ background: var(--nordic-indigo);
color: #ffffff;
}
diff --git a/website/src/pages/index.module.css b/website/src/pages/index.module.css
index 02c19eb..98e9ce6 100644
--- a/website/src/pages/index.module.css
+++ b/website/src/pages/index.module.css
@@ -1,9 +1,7 @@
.heroBanner {
- padding: 5.5rem 0 4.5rem;
- position: relative;
- overflow: hidden;
- background: var(--brand-hero-bg);
- border-bottom: 1px solid var(--brand-card-border);
+ padding: 4.5rem 0 3.5rem;
+ background-color: var(--hero-bg);
+ border-bottom: 1px solid var(--border-subtle);
}
.heroContent {
@@ -11,181 +9,211 @@
flex-direction: column;
align-items: center;
text-align: center;
- position: relative;
- z-index: 2;
}
.versionBadge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
- padding: 0.35rem 1rem;
- border-radius: 9999px;
- background: rgba(139, 93, 255, 0.15);
- border: 1px solid rgba(139, 93, 255, 0.35);
- color: var(--brand-purple-neon);
- font-size: 0.88rem;
- font-weight: 600;
- margin-bottom: 1.5rem;
- backdrop-filter: blur(8px);
-}
-
-.badgeGlowDot {
- width: 8px;
- height: 8px;
- border-radius: 50%;
- background-color: var(--brand-cream);
- box-shadow: 0 0 10px var(--brand-cream);
- animation: pulseDot 2s infinite ease-in-out;
+ padding: 0.25rem 0.75rem;
+ border-radius: 6px;
+ background-color: var(--vanilla-cream);
+ color: var(--nordic-indigo);
+ font-size: 0.82rem;
+ font-weight: 700;
+ margin-bottom: 1.25rem;
+ letter-spacing: -0.01em;
}
-@keyframes pulseDot {
- 0%,
- 100% {
- transform: scale(1);
- opacity: 0.8;
- }
- 50% {
- transform: scale(1.3);
- opacity: 1;
- }
+[data-theme='dark'] .versionBadge {
+ background-color: rgba(255, 244, 212, 0.15);
+ color: var(--vanilla-cream);
}
.heroTitle {
- font-size: 3.5rem;
+ font-size: 3.25rem;
font-weight: 800;
- letter-spacing: -1.5px;
+ letter-spacing: -0.03em;
line-height: 1.15;
- margin-bottom: 1.25rem;
- max-width: 900px;
+ margin-bottom: 1rem;
+ max-width: 780px;
+ color: var(--nordic-indigo);
+}
+
+[data-theme='dark'] .heroTitle {
+ color: #f8fafc;
}
-.gradientText {
- background: linear-gradient(135deg, #ffffff 30%, #8b5dff 100%);
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
+.heroSubtitle {
+ font-size: 1.15rem;
+ max-width: 580px;
+ margin: 0 auto 1.75rem;
+ color: #475569;
+ line-height: 1.55;
+ letter-spacing: -0.01em;
}
-[data-theme='light'] .gradientText {
- background: linear-gradient(135deg, #20173d 20%, #6a42c2 100%);
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
+[data-theme='dark'] .heroSubtitle {
+ color: #94a3b8;
}
-.heroSubtitle {
- font-size: 1.25rem;
- max-width: 720px;
- margin: 0 auto 2rem;
- color: var(--ifm-color-emphasis-700);
- line-height: 1.6;
+.installPill {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.75rem;
+ background-color: var(--card-bg);
+ border: 1px solid var(--border-subtle);
+ border-radius: 8px;
+ padding: 0.45rem 0.85rem;
+ font-family: var(--ifm-font-family-monospace);
+ font-size: 0.85rem;
+ color: var(--nordic-indigo);
+ margin-bottom: 1.75rem;
+ cursor: pointer;
+ transition:
+ border-color 0.15s ease,
+ background-color 0.15s ease;
+ user-select: all;
+}
+
+[data-theme='dark'] .installPill {
+ color: #cbd5e1;
+}
+
+.installPill:hover {
+ border-color: var(--nordic-indigo);
+ background-color: var(--vanilla-cream-surface);
+}
+
+.copyIcon {
+ font-size: 0.75rem;
+ opacity: 0.6;
+ font-family: var(--ifm-font-family-base);
+ font-weight: 600;
+ text-transform: uppercase;
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
- gap: 1rem;
- margin-bottom: 3rem;
- flex-wrap: wrap;
+ gap: 0.75rem;
+ margin-bottom: 3.5rem;
}
/* =========================================
- Terminal Showcase Component
+ Git Inspection Matrix Showcase
========================================= */
-.terminalWrapper {
+.inspectionCard {
width: 100%;
- max-width: 820px;
- border-radius: 14px;
- background: #0d0b17;
- border: 1px solid rgba(139, 93, 255, 0.3);
- box-shadow:
- 0 20px 50px rgba(0, 0, 0, 0.5),
- 0 0 40px rgba(106, 66, 194, 0.2);
+ max-width: 760px;
+ background-color: var(--card-bg);
+ border: 1px solid var(--border-subtle);
+ border-radius: 10px;
overflow: hidden;
text-align: left;
}
-.terminalHeader {
- background: #171328;
- padding: 0.75rem 1rem;
+.inspectionHeader {
+ background-color: var(--nordic-indigo);
+ color: #ffffff;
+ padding: 0.65rem 1rem;
display: flex;
align-items: center;
- border-bottom: 1px solid rgba(139, 93, 255, 0.15);
+ justify-content: space-between;
+ font-size: 0.82rem;
+ font-weight: 600;
}
-.terminalDots {
- display: flex;
- gap: 6px;
+[data-theme='dark'] .inspectionHeader {
+ background-color: #161c38;
+ border-bottom: 1px solid var(--border-subtle);
}
-.dot {
- width: 11px;
- height: 11px;
- border-radius: 50%;
+.headerTitle {
+ font-family: var(--ifm-font-family-monospace);
+ letter-spacing: -0.01em;
}
-.dotRed {
- background-color: #ff5f56;
+.headerStatus {
+ background-color: var(--vanilla-cream);
+ color: var(--nordic-indigo);
+ font-size: 0.72rem;
+ font-weight: 700;
+ padding: 0.15rem 0.5rem;
+ border-radius: 4px;
}
-.dotYellow {
- background-color: #ffbd2e;
+.inspectionBody {
+ padding: 0.5rem;
}
-.dotGreen {
- background-color: #27c93f;
+.fileRow {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0.65rem 0.85rem;
+ border-radius: 6px;
+ font-size: 0.86rem;
+ transition: background-color 0.1s ease;
}
-.terminalTitle {
- margin-left: auto;
- margin-right: auto;
- font-size: 0.82rem;
- color: #a49fc4;
- font-family: var(--ifm-font-family-monospace);
- font-weight: 500;
+.fileRow:not(:last-child) {
+ border-bottom: 1px solid var(--border-subtle);
}
-.terminalBody {
- padding: 1.5rem;
- font-family: var(--ifm-font-family-monospace);
- font-size: 0.92rem;
- line-height: 1.7;
- color: #e2e0ed;
- overflow-x: auto;
+.fileRow:hover {
+ background-color: var(--vanilla-cream-surface);
}
-.termPrompt {
- color: var(--brand-purple-neon);
- font-weight: 700;
+[data-theme='dark'] .fileRow:hover {
+ background-color: rgba(255, 255, 255, 0.03);
}
-.termCmd {
- color: #ffffff;
+.fileName {
+ font-family: var(--ifm-font-family-monospace);
font-weight: 600;
+ color: #0f172a;
}
-.termComment {
- color: #7b749d;
+[data-theme='dark'] .fileName {
+ color: #f1f5f9;
}
-.termCrit {
- color: #ff5577;
- font-weight: 700;
+.fileContext {
+ color: #64748b;
+ font-size: 0.8rem;
+ margin-left: 0.5rem;
}
-.termWarn {
- color: #ffb84d;
+.tagCritical {
+ background-color: #fee2e2;
+ color: #991b1b;
+ font-size: 0.72rem;
font-weight: 700;
+ padding: 0.2rem 0.5rem;
+ border-radius: 4px;
+ font-family: var(--ifm-font-family-monospace);
}
-.termInfo {
- color: #a3e635;
+.tagWarning {
+ background-color: var(--vanilla-cream);
+ color: #854d0e;
+ font-size: 0.72rem;
font-weight: 700;
+ padding: 0.2rem 0.5rem;
+ border-radius: 4px;
+ font-family: var(--ifm-font-family-monospace);
}
-.termOk {
- color: #4ade80;
+.tagInfo {
+ background-color: #e2e8f0;
+ color: #334155;
+ font-size: 0.72rem;
font-weight: 700;
+ padding: 0.2rem 0.5rem;
+ border-radius: 4px;
+ font-family: var(--ifm-font-family-monospace);
}
@media screen and (max-width: 768px) {
@@ -195,11 +223,16 @@
.heroTitle {
font-size: 2.25rem;
}
- .heroSubtitle {
- font-size: 1.05rem;
+ .buttons {
+ flex-direction: column;
+ width: 100%;
+ }
+ .buttons .button {
+ width: 100%;
}
- .terminalBody {
- padding: 1rem;
- font-size: 0.8rem;
+ .fileRow {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0.4rem;
}
}
diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx
index 65c47cd..a959c73 100644
--- a/website/src/pages/index.tsx
+++ b/website/src/pages/index.tsx
@@ -1,118 +1,93 @@
-import type { ReactNode } from 'react';
-import clsx from 'clsx';
+import { useState, type ReactNode } from 'react';
import Link from '@docusaurus/Link';
-import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
import HomepageFeatures from '@site/src/components/HomepageFeatures';
import Heading from '@theme/Heading';
import styles from './index.module.css';
-function TerminalPreview() {
+function GitInspectionShowcase() {
return (
-
-
-
-
-
-
-
-
envguard terminal • zsh / powershell
+
+
+ envguard scan --format text
+ Git Inspection
-
-
- $
- envguard scan
-
-
- [envguard] Varrendo repositório em busca de arquivos de ambiente sensíveis...
-
-
-
- ✗ .env {' '}
- {' '}
- CRITICAL Arquivo rastreado no Git
- (commitado)
-
-
- ⚠ .env.production {' '}
- WARNING Não ignorado no .gitignore
-
-
-
✓ .env.example {' '}
-
INFO {' '}
- Template padrão identificado
+
+
+
+ .env
+ • Tracked in Git commit history
+
+
CRITICAL
-
-
-
[ERRO] Encontrado 1 problema CRITICAL e 1
- WARNING.
+
+
+ .env.production
+ • Not ignored in .gitignore
+
+
WARNING
-
-
- Dica: execute `envguard fix` para adicionar ao .gitignore e remover do cache Git.
-
+
+
+ .env.example
+ • Allowlisted sample template
+
+
SAFE (INFO)
);
}
+function InstallCommand() {
+ const [copied, setCopied] = useState(false);
+ const cmd = 'go install github.com/joaooncode/envguard/cmd/envguard@latest';
+
+ const handleCopy = () => {
+ navigator.clipboard.writeText(cmd);
+ setCopied(true);
+ setTimeout(() => setCopied(false), 2000);
+ };
+
+ return (
+
+ $ {cmd}
+ {copied ? 'COPIADO ✓' : 'COPIAR'}
+
+ );
+}
+
function HomepageHeader() {
- const { siteConfig } = useDocusaurusContext();
return (
-
- v0.2.0 • Proteção Git-Aware para Segredos
+ envguard v0.2.0
- Segurança de .env
-
- com Consciência do Git
+ Proteção de segredos .env com inteligência do Git
-
- Evite que arquivos .env e credenciais de ambiente vazem ou cheguem ao
- histórico de versionamento do Git.
+
+ Detecte, alerte e impeça que arquivos de variáveis de ambiente e credenciais cheguem ao
+ histórico do Git.
-
+
-
- ⚡ Início Rápido (3 min)
+
+ Início Rápido
-
- 📖 Explorar Documentação
+
+ Documentação
-
+
diff --git a/website/static/img/logo.svg b/website/static/img/logo.svg
index 53f8633..51d25d7 100644
--- a/website/static/img/logo.svg
+++ b/website/static/img/logo.svg
@@ -1,37 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
+
+
-
-
+
+
+
\ No newline at end of file