1 Commits

Author SHA1 Message Date
BlackSnufkin ff4f2ca2e2 Redesign UI on terminal/IDE shell with per-tool scanner modules and Tailwind v4
Full visual redesign onto a dense terminal/IDE layout: breadcrumb titlebar,
iconed sidebar, optional tab row, IDE-style status bar, JetBrains Mono
throughout, semantic severity palette, and a calm-red rule that reserves
bright red for severity tags, destructive buttons, and the brand dot.

Splits the 1,598-line tools.js into a 66-line registry plus one module per
scanner under app/static/js/results/tools/ (yara, checkplz, stringnalyzer,
pe_sieve, moneta, patriot, hsb, rededr, summary), with shared rendering
helpers in tools/_shared.js. Each module exports
{id, elementId, statsElementId?, render(results, ctx)}, and the registry
does lazy DOM lookups so a module loaded on a page that doesn't have its
tab silently no-ops.

Switches Tailwind from the precompiled v2.2.19 file (~2.8MB) to a v4 build
generated locally by the standalone CLI binary (~284KB). End-user setup is
unchanged: the committed tailwind.min.css ships ready to use; only the
maintainer needs the binary, which lives outside the repo.

Fixes:
- ModalHandler crash on dynamic results pages (null-deref against the old
  .bg-gray-900 selector)
- AnalysisCore.updateStageToComplete null-deref against removed
  stage-indicator markup
- summary.render silently skipped because elementId pointed at the
  removed summaryWrapper div — points at scannerResultsBody now
- Per-tool render failures no longer suppress the rest of the rendering
- Drag-and-drop highlight no longer null-derefs against the removed
  .upload-icon selector
- Upload "Unsupported file type" false positive — extensions now sourced
  from window.serverConfig instead of DOM scraping
- XSS hardening at user-data interpolation sites in results renderers
2026-04-28 02:42:12 -07:00