Running test-e2e-playwright.js against http://localhost:13581
  ✓ home loads
  ✓ nodes table renders
  ✓ packets table renders
  ✓ map renders
  ✓ analytics renders
  ✓ channels renders
  ✓ live renders
  ✓ customizer opens

8/8 tests passed
Running test-filter-ux-e2e.js
  ✓ filter compiles
  ✓ filter evaluates equality
  ✓ filter evaluates AND/OR
  ✓ filter handles parens
  ✓ negation works

=== Results: 5 passed, 0 failed ===
Running test-channel-issue-1087-e2e.js
  ✓ tab renders
  ✓ message list loads
=== Results: 2 passed, 0 failed ===
Running test-channel-issue-1111-e2e.js
  ✓ count badge updates
  ✓ filter clears
  ✓ scroll restores
=== Results: 3 passed, 0 failed ===
Running test-map-modal-fluid-e2e.js
  ✓ modal opens
  ✓ modal closes
  ✓ scroll lock
  ✓ keyboard escape

=== Results: 4 passed, 0 failed ===
Running test-observer-iata-1188-e2e.js
  ✓ observer IATA resolves
  ✓ observer IATA missing handled
  ✓ observer IATA legacy
  ✓ observer IATA mixed
  ✓ observer IATA empty
All observer-IATA E2E tests passed.

=== Results: passed 5 failed 0 ===
Running test-nav-fluid-1055-e2e.js
  PASS: narrow viewport
  PASS: medium viewport
  PASS: wide viewport

test-nav-fluid-1055-e2e.js: OK — 3/3 passed
Running test-nav-priority-1102-e2e.js
  PASS: priority A
  PASS: priority B
  PASS: priority C
  PASS: overflow rule

test-nav-priority-1102-e2e.js: OK — 4/4 passed
Running test-nav-more-floor-1139-e2e.js
  PASS: small
  PASS: medium

test-nav-more-floor-1139-e2e.js: OK — 2/2 passed
Running test-bottom-nav-1061-e2e.js
  PASS: shows on mobile
  PASS: hidden on desktop
  PASS: highlights active

test-bottom-nav-1061-e2e.js: 3 passed, 0 failed
Running test-gestures-1062-e2e.js
  PASS: swipe left
  PASS: swipe right

test-gestures-1062-e2e.js: 2 passed, 0 failed
Running test-gestures-1185-scroll-discriminator-e2e.js
  PASS: vertical scroll
  PASS: horizontal swipe
  PASS: diagonal ignored

test-gestures-1185-scroll-discriminator-e2e.js: 3 passed, 0 failed
Running test-gesture-hints-1065-e2e.js
  PASS: hint shows once
  PASS: hint dismissed
  PASS: localStorage stored

test-gesture-hints-1065-e2e.js: 3 passed, 0 failed
Running test-channel-fluid-e2e.js
  ✓ fluid layout 1
  ✓ fluid layout 2

=== Results: 2 passed, 0 failed ===
Running test-table-fluid-e2e.js
  ✓ table fluid 1
  ✓ table fluid 2

=== Results: 2 passed, 0 failed ===
Running test-charts-fluid-1058-e2e.js
  ✓ chart 1
  ✓ chart 2

=== #1058 fluid analytics charts E2E: 2 passed, 0 failed ===
Running test-slideover-1056-e2e.js
  ✓ slideover open
  ✓ slideover close
  ✓ slideover backdrop
  ✓ slideover keyboard

=== #1056 AC#4 slide-over E2E: 4 passed, 0 failed, 0 skipped ===
Running test-slideover-1168-munger-e2e.js
  ✓ munger 1
  ✓ munger 2

=== #1168 Munger SlideOver hardening: 2 passed, 0 failed ===
Running test-logo-pulse-1173-e2e.js
  ✓ pulse animates
  ✓ pulse respects reduced motion

=== #1173 logo-pulse E2E: 2 passed, 0 failed ===
Running test-issue-1122-packets-filter-ux-e2e.js
  ✓ packets filter UX 1
  ✓ packets filter UX 2
  ✓ packets filter UX 3

=== Results: 3 passed, 0 failed ===
Running test-issue-1128-packets-layout-e2e.js
  ✓ packets layout 1
  ✓ packets layout 2

=== Results: 2 passed, 0 failed ===
Running test-issue-1128-multi-viewport-e2e.js
  ✓ multi viewport 1
  ✓ multi viewport 2
  ✓ multi viewport 3

=== Results: 3 passed, 0 failed ===
Running test-issue-1136-live-region-e2e.js
  ✓ live region announces
  ✓ live region debounced

=== Results: 2 passed, 0 failed ===
Running test-issue-1150-404-state-e2e.js
  ✓ 404 renders
  ✓ 404 link back

=== Results: 2 passed, 0 failed ===
Running test-issue-1146-path-link-contrast-e2e.js
  ✓ contrast computed
  ✓ contrast above threshold

=== Results: 2 passed, 0 failed ===
Running test-issue-1147-section-order-e2e.js
  ✓ order 1
  ✓ order 2

=== Results: 2 passed, 0 failed ===
Running test-issue-1151-orphan-separators-e2e.js
  ✓ orphan separators handled

=== #1151: 1 passed, 0 failed ===
Running test-logo-rebrand-e2e.js
  ✓ rebrand 1
  ✓ rebrand 2
  ✓ rebrand 3

test-logo-rebrand-e2e.js: 3/3 PASS
Running test-logo-theme-e2e.js
  ✓ theme 1
  ✓ theme 2

test-logo-theme-e2e.js: 2/2 PASS
Running test-logo-default-sage-teal-e2e.js
  ✓ default sage teal

test-logo-default-sage-teal-e2e.js: 1/1 PASS
Running test-issue-1109-hamburger-dropdown-visible-e2e.js
test-issue-1109-hamburger-dropdown-visible-e2e.js: PASS
Running test-live-layout-1178-1179-e2e.js
  ✓ live layout
  ✓ live layout 2

=== Results: 2 passed, 0 failed ===
Running test-issue-1205-live-controls-anchor-e2e.js
  ✓ anchor 1
  ✓ anchor 2

=== Results: 2 passed, 0 failed ===
Running test-live-mql-leak-1180-e2e.js
  ✓ no leak

=== Results: 1 passed, 0 failed ===
Running test-issue-1204-live-panel-structure-e2e.js
  ✓ structure 1
  ✓ structure 2

=== Results: 2 passed, 0 failed ===
Running test-issue-1234-live-chrome-pass2-e2e.js
  ✓ chrome pass2

=== Results: 1 passed, 0 failed ===
Running test-issue-1206-vcr-overlap-e2e.js
  ✓ vcr 1
  ✓ vcr 2

#1206 VCR overlap: 2 passed, 0 failed
Running test-issue-1244-live-vcr-row-hints-e2e.js
  ✓ row hints

=== Results: 1 passed, 0 failed ===
Running test-issue-1224-channels-mobile-ux-e2e.js
  ✓ mobile UX 1
  ✓ mobile UX 2
  ✓ mobile UX 3

3/3 tests passed
Running test-issue-1236-map-mobile-e2e.js
  ✓ map mobile 1
  ✓ map mobile 2

2/2 tests passed
Running test-issue-1273-qr-overlay-height-e2e.js
  ✓ qr overlay

1/1 tests passed
Running test-issue-1281-location-row-e2e.js
  ✓ location row 1
  ✓ location row 2

=== Results: 2 passed, 0 failed ===
Running test-issue-1279-legend-p2-e2e.js
  ✓ legend p2

=== Results: 1 passed, 0 failed ===
Running test-issue-1206-resize-observer-leak-e2e.js
  ✓ resize observer

#1206 ResizeObserver leak: 1 passed, 0 failed
Running test-nav-drawer-1064-e2e.js
  PASS: drawer 1
  PASS: drawer 2

test-nav-drawer-1064-e2e.js: 2 passed, 0 failed
