/* bloo.app — Public releases mirrored from the commercial pack changelog. */
(function () {
const { Button, Badge, Card, Alert } = window.BlooAppDesignSystem_ab7292;
const { PRODUCT, Icons, S, trackEvent } = window.Site;
const { useT } = window.I18n;
const { IconArrow } = Icons;

const C = {
  hero: { background: 'linear-gradient(180deg, var(--blue-50) 0%, var(--surface-card) 100%)', paddingTop: 68, paddingBottom: 62 },
  inner: { display: 'flex', flexDirection: 'column', gap: 17, alignItems: 'flex-start', maxWidth: 760 },
  h1: { fontFamily: 'var(--font-display)', fontWeight: 500, fontSize: 46, lineHeight: 1.1, letterSpacing: '-.03em', color: 'var(--text-strong)', margin: 0 },
  lede: { fontSize: 18, lineHeight: 1.55, color: 'var(--text-body)', maxWidth: 650, margin: 0 },
  timeline: { display: 'flex', flexDirection: 'column', gap: 20, maxWidth: 900, margin: '0 auto' },
  head: { display: 'flex', gap: 12, alignItems: 'center', flexWrap: 'wrap', marginBottom: 14 },
  version: { fontFamily: 'var(--font-mono)', fontWeight: 700, color: 'var(--text-strong)' },
  date: { fontFamily: 'var(--font-mono)', fontSize: 12, color: 'var(--text-subtle)' },
  list: { margin: '14px 0 0', paddingLeft: 20, display: 'flex', flexDirection: 'column', gap: 9, color: 'var(--text-body)', fontSize: 14.5, lineHeight: 1.5 },
};

function Hero() {
  const { t } = useT();
  React.useEffect(() => { trackEvent('view_changelog'); }, []);
  return <section style={C.hero}><div style={{ ...S.container, ...C.inner }} className="site-container"><Badge tone="brand" dot>{t('Maintained, not static', 'Mantido, não estático')}</Badge><h1 style={C.h1} className="site-h1-hero">{t('What actually shipped, and what remains a preview.', 'O que realmente foi lançado e o que continua sendo preview.')}</h1><p style={C.lede}>{t('Entries mirror released pack versions. Planned work is not listed as shipped, and preview status remains visible until its release gates pass.', 'As entradas refletem versões realmente lançadas do pack. Trabalho planejado não aparece como lançado, e o status de preview continua visível até que os critérios de release sejam aprovados.')}</p><div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}><Button as="a" href="product-ai-code-review.html#cohort" trailingIcon={<IconArrow />}>{t('Join the beta cohort', 'Participar da coorte beta')}</Button><Button as="a" href="license.html" variant="secondary">{t('License & updates', 'Licença e atualizações')}</Button></div></div></section>;
}

function Timeline() {
  const { t } = useT();
  const entries = [
    {
      version: 'v1.1.0-beta.1', date: '2026-07-31', preview: true,
      summary: t('Adaptive, repository-aware preview. Automated structure and offline installation simulation pass; live-tool and real-PR gates remain open.', 'Preview adaptativo e consciente do repositório. A estrutura automatizada e a simulação offline de instalação foram aprovadas; os critérios em ferramentas reais e PRs reais continuam abertos.'),
      changes: [
        t('Added the neutral .bloo kernel and references shared by Claude, Cursor, and Copilot wrappers.', 'Adicionada a camada neutra .bloo de kernel e referências compartilhada pelos wrappers de Claude, Cursor e Copilot.'),
        t('Added generated repository profiles, ownership/source hashes, official-source allowlists, and scoped expiring waivers.', 'Adicionados perfis gerados do repositório, hashes de propriedade/fontes, listas de fontes oficiais permitidas e exceções limitadas com expiração.'),
        t('React and Flutter adapters now install only for confirmed packages.', 'Adaptadores de React e Flutter agora são instalados apenas em pacotes confirmados.'),
        t('Added automatic risk routing, evidence requirements, deduplication, /bloo-doctor, and manifest-aware updates.', 'Adicionados roteamento automático de risco, requisitos de evidência, deduplicação, /bloo-doctor e atualizações conscientes do manifesto.'),
        t('Added 25 defective fixtures, 10 clean fixtures, and 12 install/update scenarios.', 'Adicionados 25 fixtures com defeitos, 10 fixtures limpos e 12 cenários de instalação/atualização.'),
      ],
    },
    {
      version: 'v1.0.0', date: '2026-07-09',
      summary: t('First feature-complete fixed-catalog release. Structural paths and the synthetic smoke fixture were validated; live-tool and real-PR calibration remained pending.', 'Primeira versão com catálogo fixo e funcionalidades completas. Caminhos estruturais e o smoke test sintético foram validados; a calibração em ferramentas e PRs reais continuou pendente.'),
      changes: [
        t('Shipped skill-native references and lifecycle commands for all three supported tools.', 'Lançadas referências nativas de skills e comandos de ciclo de vida para as três ferramentas suportadas.'),
        t('Included large-PR chunking, monorepo guidance, architecture review, and review-quality calibration.', 'Incluídos chunking de PRs grandes, orientação para monorepos, revisão de arquitetura e calibração da qualidade da revisão.'),
      ],
    },
  ];
  return <section style={S.section}><div style={S.container} className="site-container"><div style={{ maxWidth: 900, margin: '0 auto 22px' }}><Alert tone="info" title={t('Current release status', 'Status da versão atual')}>{t(`${PRODUCT.version} is an adaptive preview, not a production-validated stable release. The benchmark page publishes the open gates.`, `${PRODUCT.version} é um preview adaptativo, não uma versão estável validada para produção. A página de benchmark publica os critérios pendentes.`)}</Alert></div><div style={C.timeline}>{entries.map((entry) => <Card key={entry.version} variant="raised" padding="lg"><div style={C.head}><span style={C.version}>{entry.version}</span><span style={C.date}>{entry.date}</span>{entry.preview && <Badge tone="brand" dot>{t('Adaptive preview', 'Preview adaptativo')}</Badge>}</div><p style={S.cardBody}>{entry.summary}</p><ul style={C.list}>{entry.changes.map((change) => <li key={change}>{change}</li>)}</ul></Card>)}</div></div></section>;
}

function ChangelogContent() { return <><Hero /><Timeline /></>; }
window.Pages = window.Pages || {};
window.Pages.changelog = { Content: ChangelogContent, label: 'Changelog' };
})();
