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.

-
- Go Version - License: MIT - 100% Offline -
+
- - ⚡ 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