from pathlib import Path
import markdown
from bs4 import BeautifulSoup
import html
import sys
root=Path(__file__).resolve().parent
stem=sys.argv[1] if len(sys.argv)>1 else 'scan-interruption-audit'
source=root/(stem+'.md')
pakco=Path('/Users/jack/code/099-github/pakco-html')
template=(pakco/'templates/webpage.html').read_text()
base=(pakco/'assets/base.css').read_text()
theme=(pakco/'assets/themes/minimal-white.css').read_text()
soup=BeautifulSoup(template,'html.parser')
for link in soup.select('link[rel="stylesheet"]'): link.decompose()
soup.title.string='扫码识别中断｜SDK 与代码审计'
css='''
:root{--accent:#05635b;--accent-2:#0b746b;--text-3:#66747b;--bg-soft:#f3f6f5;--border:#dce4e1;--font-sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;--font-display:var(--font-sans)}
html{scroll-behavior:smooth;scroll-padding-top:30px}.webpage .page{max-width:1100px;padding-top:24px}.webpage .hero{padding:35px 0 22px;text-align:left}h1{font-size:clamp(30px,4vw,48px);line-height:1.25;letter-spacing:-.03em}h2{font-size:28px;line-height:1.4;margin:44px 0 22px;padding-top:22px;border-top:1px solid var(--border);color:var(--accent)}h3{font-size:21px;margin:28px 0 14px;line-height:1.5}h4{font-size:18px}p,li{line-height:1.9}p{margin:14px 0}li{margin:6px 0}strong{font-weight:650}article>blockquote:first-of-type{background:var(--bg-soft);border-left:4px solid var(--accent);padding:18px 24px;margin:24px 0;font-size:19px}blockquote{margin:20px 0;padding:8px 20px;border-left:3px solid var(--border);color:var(--text-2)}code{font-size:.88em;background:var(--surface-2);padding:2px 5px;border-radius:4px;overflow-wrap:anywhere}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bg-soft);border:1px solid var(--border);padding:20px;border-radius:var(--radius-sm);font-size:13px;line-height:1.75}pre code{padding:0;background:none}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-sm);margin:20px 0}table{border-collapse:collapse;width:100%;min-width:620px;font-size:14px}th{background:var(--bg-soft);font-weight:600;text-align:left;color:var(--accent)}td,th{padding:13px 16px;border-bottom:1px solid var(--border);vertical-align:top;line-height:1.8}tr:last-child td{border-bottom:0}td code{font-size:12px}nav{display:flex;gap:10px;flex-wrap:wrap;margin:15px 0 24px}nav a{border:1px solid var(--border);border-radius:30px;padding:6px 14px;font-size:13px;color:var(--accent)}.page-footer{text-align:left!important;color:var(--text-3)!important}article{overflow-wrap:anywhere}a:focus-visible{outline:3px solid var(--accent);outline-offset:4px}@media(max-width:768px){h2{font-size:24px}h3{font-size:19px}.webpage .page{padding:22px 18px}article>blockquote:first-of-type{font-size:17px;padding:12px 16px}table{font-size:13px}nav{gap:7px}}@media print{nav{display:none}.table-wrap{overflow:visible}table{min-width:0}h2{break-after:avoid}.page{width:100%!important}}
'''
style=soup.new_tag('style');style.string=base+'\n'+theme+'\n'+css;soup.head.append(style)
page=soup.select_one('.page');page.clear()
hero=soup.new_tag('section',attrs={'class':'hero'})
k=soup.new_tag('p',attrs={'class':'kicker'});k.string='410 型优卡特称重台 · 2026.09.09';hero.append(k)
page.append(hero)
body=BeautifulSoup(markdown.markdown(source.read_text(),extensions=['tables','fenced_code','toc']), 'html.parser')
h1=body.find('h1');soup.title.string=h1.get_text();hero.append(h1.extract())
nav=soup.new_tag('nav',attrs={'aria-label':'报告章节'})
for h in body.find_all('h2'):
 a=soup.new_tag('a',href='#'+h.get('id',''));a.string=h.get_text();nav.append(a)
page.append(nav)
article=soup.new_tag('article')
for node in list(body.contents):article.append(node.extract())
for table in list(article.find_all('table')):
 wrap=soup.new_tag('div',attrs={'class':'table-wrap','tabindex':'0'});table.wrap(wrap)
for a in article.find_all('a', href=True):
 href=a['href']
 if href.endswith('.md') and (root/href).is_file() and '/' not in href:
  a['href']=href[:-3]+'.html'
page.append(article)
footer=soup.new_tag('div',attrs={'class':'page-footer'});footer.string='审计报告 · Markdown 为内容真源 · 本页基于 pakco-html 网页模板 · 未修改业务代码，未验证现场 APK';page.append(footer)
(root/(stem+'.html')).write_text(str(soup))
print('Generated:', root/(stem+'.html'))
