---
A00 Change Request Specification - Page 10 Hostile Extraction Resistant UI
---
Create one standalone HTML demo page named `page-10-hostile-extraction-resistant-ui.html`.
The page must be a self-contained HTML file. Put all HTML, CSS, and JavaScript inside this one file. Do not use React. Do not use TypeScript. Do not use a build step. Do not load external CSS, external JavaScript, external fonts, external images, external canvas libraries, external grid libraries, external anti-scraping libraries, external data, or external APIs. The page must work by opening the `.html` file directly in a browser.
This page is a testing surface for a content extraction tool. The page must focus on hostile extraction resistant UI patterns: unselectable text, values split across multiple DOM nodes, CSS-generated labels, CSS-generated values, canvas-like fake rows, SVG-like text, deeply nested spans, text fragmented by wrappers, index-numbered live lists, virtualized-looking lists, collapsed overflow, copy-disabled regions, masked values, hidden mirror values, visual-only labels, layout-dependent pairings, duplicate decoy values, accessible text that differs from visible text, reordered DOM versus visual order, fake tables built from divs, tooltips with critical values, values distributed across attributes and text, and anti-copy surfaces that still remain local, fictional, and safe for testing.
The page must contain exactly 25 separate examples. Each example must have a visible heading, a visible explanatory paragraph, and the actual hostile or extraction-resistant UI. Each example must be visually separated from the next example. Each example must be realistic enough to test extraction of labels, values, row boundaries, selected states, masked values, split values, generated text, visually rendered rows, copy-resistant surfaces, hidden backing data, overflow-hidden content, live-list indexes, dynamic row reuse, and DOM order mismatches.
Do not implement malicious anti-scraping behavior. Do not block browser developer tools. Do not trap keyboard focus. Do not disable browser context menus globally. Do not use obfuscated JavaScript. Do not attempt to detect automation. Do not fingerprint the user. Do not use network calls. This page is a local fixture for legitimate testing, not a bypass or evasion tool.
The page should intentionally include difficult UI patterns, but it must remain inspectable, safe, deterministic, and understandable. The page should help test extraction from user-controlled pages where normal copy, selection, or DOM traversal is insufficient or misleading.
---
B00 Page-Level Purpose
---
The purpose of this page is to test whether an extraction tool can recover structured information from user interfaces that are hard to select, hard to copy, or hard to parse with simple DOM text extraction.
The extraction tool should be able to handle visible text that is not selectable, text split across many DOM nodes, values assembled from fragments, labels produced by CSS pseudo-elements, rows drawn with positioned spans, canvas-like surfaces with accessible fallback text, SVG-like text, clipped text with full value elsewhere in the DOM, masked values with partial reveal, virtualized-looking lists, live lists with row indexes that change visually, copy-disabled containers, tables with DOM order different from visual order, shadow-like nested wrappers, duplicated decoy values, hidden backing inputs, ARIA labels that conflict with visible labels, and adjacent panels that visually pair labels and values even when the DOM structure is hostile.
The page should not be a pure adversarial demo with random tricks. Each example should resemble a real-world situation: banking pages, ticket queues, travel booking pages, insurance claim pages, admin dashboards, job boards, marketplace lists, invoices, shipment tracking, calendar grids, maps, analytics panels, and enterprise settings pages.
The coding agent must make the examples difficult in different ways. Do not repeat the same trick 25 times. Each example should have a distinct extraction caveat and a realistic visual surface.
---
C00 Required Page Structure
---
The page must start with a top-level header.
Use this visible title:
`Page 10 - Hostile Extraction Resistant UI`
Under the title, include a short introduction paragraph explaining that the page contains realistic local test fixtures for extraction-resistant UI patterns such as unselectable text, generated labels, split values, fake rendered rows, virtualized lists, masked values, copy-disabled regions, collapsed overflow, DOM order mismatch, and decoy content.
After the introduction, render 25 example sections.
Each example section must follow this pattern:
```html
Example 01
Unselectable Banking Receipt With Selectable Fallback
This example imitates...
```
The exact class names may vary, but the structure must remain clear. Each section must have a unique `id`, from `example-01` through `example-25`.
Each example heading must be visible. Each description must be visible. The actual hostile UI surface must appear below the description.
Do not include large expected extraction output blocks under every example. The page should primarily be the application-under-test surface, not a documentation page. The visible descriptions should explain the purpose and caveat of each example.
---
D00 Visual Design Requirements
---
Use inline CSS in a `
```
The coding agent may adjust the CSS, but it must keep the page readable, scrollable, visually divided into 25 separate examples, and safe to run locally.
---
E00 JavaScript Requirements
---
Use inline JavaScript in a `
```
The coding agent may extend this code for specific examples, but the final file must remain simple and portable.
---
F00 Hostile Pattern Rules
---
The page must include hostile extraction patterns, but it must not become hostile to the tester. The tester should still be able to understand each example visually and inspect the HTML.
Use these patterns across the 25 examples:
Unselectable visible text using local `user-select: none`.
CSS pseudo-element labels using `::before`.
CSS pseudo-element values using `::after`.
Values split across many text nodes.
Values split across nested spans, comments avoided.
Values split visually by whitespace and wrappers.
DOM order that differs from visual order.
Visible values with hidden backing values.
Masked values with partial reveal.
Clipped values with `overflow: hidden`.
Ellipsized values with full value in a title or accessible description.
Fake rendered rows using absolutely positioned spans.
Canvas-like panels with accessible fallback rows.
SVG-like text using inline SVG.
Copy-disabled local regions.
Duplicate decoy values that should be ignored or qualified.
Watermarks or overlay text that should not be confused with data.
Dynamic virtualized-looking lists where only visible rows are in the DOM.
Index plus names mapped to a separate live list.
Row IDs separated from row values.
Labels visually generated from data attributes.
Values visually generated from data attributes.
Hidden mirror data that duplicates visible text.
Accessible names that conflict with visible labels.
Nested shadow-like wrappers that obscure simple text grouping.
Do not use real anti-scraping methods. Do not use actual CAPTCHA, automation detection, encryption, remote rendering, or security bypass content. Use safe local simulations only.
---
G00 Extraction Behavior To Support
---
The page must make these extraction tasks possible:
Extract field-value pairs when labels are generated by CSS.
Extract field-value pairs when values are generated by CSS.
Extract values split across many text nodes.
Extract values split across nested spans.
Extract masked values exactly as visible.
Extract revealed values only after user interaction reveals them.
Extract full values from visible expanded content, not from comments or JavaScript-only data.
Extract clipped visible text with awareness that only part of the text is visible.
Extract row records from canvas-like or coordinate-based layouts when fallback text exists.
Extract SVG text values from inline SVG.
Extract selected records when row IDs and row values are separated.
Extract rows where DOM order does not match visual order.
Extract live list items where row numbers and row names are in separate containers.
Extract fake tables built from divs and spans.
Extract copy-disabled content without relying on user selection.
Extract visible data while ignoring watermark and overlay text.
Extract action labels without mixing them into record values.
Extract decoy values and real values separately when both are visible.
Extract hidden backing values when they are form values, but avoid replacing visible values unless appropriate.
Extract accessible names and descriptions when visible text is insufficient or misleading.
Extract values from nested hostile wrappers while preserving group context.
---
H00 Data And Naming Rules
---
Use realistic but fictional data. Do not use real personal information.
Use fictional companies, fictional patients, fictional accounts, fictional tickets, fictional order numbers, fictional users, fictional IDs, and example-domain email addresses. Use `href="#"` or `href="/demo/..."` for links. Do not link to real third-party pages.
Use consistent example-specific IDs. Prefix IDs with the example number, such as `ex01-receipt`, `ex09-row-03`, or `ex24-portal-list`.
Use plausible values. Avoid placeholder-only examples. Every example should contain enough populated data to be useful for extraction testing.
Each example should have at least one hostile extraction pattern and at least five realistic extractable values. Many examples should include repeated rows.
Do not use external images. Use CSS boxes, inline SVG, text placeholders, and local HTML only.
Do not store important values only in JavaScript variables, comments, CSS custom properties, or inaccessible attributes. If a value is CSS-generated, include it in a data attribute or accessible fallback as specified by the example. If a value is fake canvas rendered, include a visible or accessible fallback.
Do not make all examples look the same. Use receipts, tables, dashboards, cards, search results, calendars, maps, queues, reports, invoices, and admin panels.
---
I00 Required Examples Overview
---
The page must contain exactly these 25 examples:
Example 01: Unselectable Banking Receipt With Selectable Fallback.
Example 02: CSS-Generated Labels In A Billing Summary.
Example 03: CSS-Generated Values In A Shipment Tracker.
Example 04: Value Split Across Multiple DOM Nodes.
Example 05: Deeply Nested Span Invoice Row.
Example 06: Canvas-Like Ledger With Accessible Fallback.
Example 07: SVG-Based Boarding Pass Text.
Example 08: Virtualized Ticket Queue Viewport.
Example 09: Index And Name Split Across Live Lists.
Example 10: Collapsed Overflow Policy Card.
Example 11: Copy-Disabled Insurance Claim Packet.
Example 12: Masked Bank Account Values With Reveal.
Example 13: DOM Order Different From Visual Order.
Example 14: Duplicate Decoy Values In Product Pricing.
Example 15: Hidden Backing Inputs Behind Pretty Cards.
Example 16: Ellipsized Values With Full Accessible Names.
Example 17: Watermarked Document Preview.
Example 18: Tooltip-Only Critical Values.
Example 19: Fake Table Built From Positioned Divs.
Example 20: Shadow-Like Deep Wrapper Settings Panel.
Example 21: Map Pin List With Visual-Only Coordinates.
Example 22: Calendar Cells With Split Date And Availability.
Example 23: Multi-Column Receipt With Interleaved DOM.
Example 24: Custom Dropdown With Detached Option Text.
Example 25: Mixed Hostile Anti-Pattern Stress Gallery.
Each example below is mandatory.
---
J00 Example 01 - Unselectable Banking Receipt With Selectable Fallback
---
Create a banking transfer receipt where the main receipt panel uses `user-select: none`, but a small accessible fallback details panel remains selectable. The visual receipt should be realistic and not toy-like.
Visible heading:
`Unselectable Banking Receipt With Selectable Fallback`
Visible description:
`This example imitates a banking receipt where visible receipt text is intentionally unselectable. It tests whether extraction can capture field-value data from visible content and fallback content without relying only on manual text selection.`
Receipt header:
`Transfer scheduled`.
`Confirmation number`: `TRN-8841-6029`.
`Status`: badge `Scheduled`.
`Created`: `May 31, 2026, 10:42 AM PT`.
The main receipt panel must have class `no-select`.
Main receipt fields:
`From account`: `Operating Checking ending in 1842`.
`To account`: `Tax Savings ending in 3398`.
`Transfer amount`: `$2,500.00`.
`Transfer date`: `June 3, 2026`.
`Frequency`: `One-time`.
`Fee`: `$0.00`.
`Memo`: `Quarterly estimated tax reserve`.
`Submitted by`: `Renee Coleman`.
`Authorization method`: `Authenticator app`.
Receipt note:
`You can cancel this transfer until June 2, 2026 at 11:59 PM PT.`
Selectable fallback panel:
`Receipt data fallback`.
Fields:
`Confirmation number`: `TRN-8841-6029`.
`Transfer amount`: `$2,500.00`.
`Transfer date`: `June 3, 2026`.
`Fallback status`: `Selectable text`.
Extraction caveat: the extraction tool should capture the unselectable receipt content as visible data. It should not only capture the fallback panel and miss the richer receipt.
Implementation guidance:
```html
Transfer scheduled
Confirmation numberTRN-8841-6029
Transfer amount$2,500.00
Confirmation number: TRN-8841-6029
Transfer amount: $2,500.00
```
---
K00 Example 02 - CSS-Generated Labels In A Billing Summary
---
Create a billing summary where labels are generated using CSS `::before` from `data-label` attributes. The visible page should show labels, but the actual label text should not exist as normal text nodes inside each field row.
Visible heading:
`CSS-Generated Labels In A Billing Summary`
Visible description:
`This example imitates a billing summary where field labels are generated with CSS pseudo-elements. It tests extraction of visible labels that are not normal DOM text nodes.`
Billing header:
`Account`: `Atlas Product Studio`.
`Billing period`: `May 2026`.
`Billing status`: badge `Active`.
Use `.pseudo-field[data-label]::before` for these rows:
Row 1:
`data-label`: `Current plan`.
Value text node: `Business annual`.
Row 2:
`data-label`: `Renewal date`.
Value text node: `January 18, 2027`.
Row 3:
`data-label`: `Seats purchased`.
Value text node: `24`.
Row 4:
`data-label`: `Seats used`.
Value text node: `19`.
Row 5:
`data-label`: `Payment method`.
Value text node: `Visa ending in 4242`.
Row 6:
`data-label`: `Latest invoice`.
Value text node: `INV-2026-00118`.
Summary sidebar:
`Generated label pattern`: `Labels are produced by CSS from data-label attributes`.
`Extraction target`: `Visible labels plus values`.
Extraction caveat: the extraction tool should capture labels as rendered or recover them from `data-label`, but should not output unlabeled values only.
Implementation guidance: do not put duplicate visible label text inside each row. The row should rely on `data-label` and CSS pseudo-element.
---
L00 Example 03 - CSS-Generated Values In A Shipment Tracker
---
Create a shipment tracker where labels are normal text, but several values are generated by CSS `::after` from `data-value` attributes. This tests values that are rendered visually but are not ordinary text nodes.
Visible heading:
`CSS-Generated Values In A Shipment Tracker`
Visible description:
`This example imitates a shipment tracker where some visible values are generated by CSS pseudo-elements. It tests extraction of rendered values that may not appear as ordinary text content.`
Shipment header:
`Shipment`: `SHP-2026-77120`.
`Carrier`: `Example Parcel`.
`Tracker status`: badge `In transit`.
Fields:
Row 1:
Visible label text node: `Tracking number`.
Value element class `pseudo-value`.
`data-value`: `1Z999AA10123456784`.
Row 2:
Visible label: `Estimated delivery`.
`data-value`: `June 4, 2026 by 8:00 PM`.
Row 3:
Visible label: `Current location`.
`data-value`: `Sacramento, CA`.
Row 4:
Visible label: `Service`.
`data-value`: `Ground residential`.
Row 5:
Visible label: `Reference`.
`data-value`: `ORD-2026-104922`.
Timeline with ordinary DOM text:
Event 1: `Label created`, `Reno, NV`, `May 31, 2026, 9:18 AM`.
Event 2: `Origin scan`, `Reno, NV`, `May 31, 2026, 7:42 PM`.
Event 3: `Arrived at facility`, `Sacramento, CA`, `June 1, 2026, 2:55 PM`.
Fallback note:
`The shipment tracker intentionally renders core field values through CSS-generated content.`
Extraction caveat: the extraction tool should not miss the tracking number or estimated delivery simply because they are CSS-generated.
Implementation guidance: use `.pseudo-value[data-value]::after { content: attr(data-value); }`.
---
M00 Example 04 - Value Split Across Multiple DOM Nodes
---
Create a payment confirmation where important values are split across many DOM nodes. The rendered value should read normally, but text extraction from individual nodes may fragment it.
Visible heading:
`Value Split Across Multiple DOM Nodes`
Visible description:
`This example imitates a payment confirmation where values are split across multiple text nodes and spans. It tests whether extraction can reconstruct visible values without adding unwanted spaces or dropping fragments.`
Payment header:
`Payment confirmation`.
`Status`: badge `Posted`.
Fields:
`Payment ID`: rendered as `PMT-77120`, but split into nodes:
`PMT`, `-`, `77`, `120`.
`Invoice`: rendered as `INV-2026-00841`, split into nodes:
`INV`, `-`, `2026`, `-`, `008`, `41`.
`Amount`: rendered as `$300.00`, split into nodes:
`$`, `300`, `.`, `00`.
`Payment method`: rendered as `ACH ending in 1842`, split into nodes:
`ACH`, space wrapper, `ending`, space wrapper, `in`, space wrapper, `1842`.
`Posted date`: rendered as `May 21, 2026`, split into spans:
`May`, `21`, `,`, `2026`.
Line items:
Row 1: `Applied invoice`, value `INV-2026-00841`.
Row 2: `Remaining balance`, value `$436.14`.
Extraction caveat: the extraction tool should reconstruct split values correctly. It should not output `PMT - 77 120` or `$ 300 . 00` unless preserving exact DOM fragments is explicitly requested.
Implementation guidance: use a `.fragmented-value` class and multiple spans inside each value.
---
N00 Example 05 - Deeply Nested Span Invoice Row
---
Create an invoice line item table where one row has extremely nested spans around every value. The visible table should be easy to read, but the DOM should be deeply nested.
Visible heading:
`Deeply Nested Span Invoice Row`
Visible description:
`This example imitates an enterprise invoice table where framework wrappers deeply nest every visible value. It tests extraction of row-level data from deeply nested spans while preserving table context.`
Invoice header:
`Invoice`: `INV-2026-00841`.
`Customer`: `Cedar & Pine Design LLC`.
`Status`: badge `Partially paid`.
Table columns:
`SKU`.
`Description`.
`Quantity`.
`Unit price`.
`Amount`.
`Status`.
Rows:
Row 1 normal:
`SKU`: `SEAT-BUS-24`.
`Description`: `Business platform seats`.
`Quantity`: `24`.
`Unit price`: `$18.00`.
`Amount`: `$432.00`.
`Status`: `Matched`.
Row 2 deeply nested:
`SKU`: `ADD-AUDIT-01`.
`Description`: `Audit log retention add-on`.
`Quantity`: `1`.
`Unit price`: `$96.00`.
`Amount`: `$96.00`.
`Status`: `Matched`.
Row 3 deeply nested and fragmented:
`SKU`: `ADD-SUPPORT-PR`.
`Description`: `Priority support package`.
`Quantity`: `1`.
`Unit price`: `$150.00`.
`Amount`: `$135.00`.
`Status`: `Review`.
Nested structure guidance for Row 2 and Row 3:
Wrap each cell value in at least four nested spans or divs, such as:
```html
ADD-AUDIT-01
```
Extraction caveat: the extraction tool should preserve table row and column context even when values are deeply nested and fragmented.
Implementation guidance: use a native table, but make some cells hostile internally.
---
O00 Example 06 - Canvas-Like Ledger With Accessible Fallback
---
Create a transaction ledger that looks like it is rendered on a canvas. Do not use actual canvas unless there is a text fallback. Prefer a `div` with absolutely positioned rows to simulate a canvas-like surface.
Visible heading:
`Canvas-Like Ledger With Accessible Fallback`
Visible description:
`This example imitates a finance ledger rendered like a canvas or custom drawing surface. It tests extraction from visually positioned rows and an accessible fallback table.`
Ledger header:
`Account`: `Operating Checking ending in 1842`.
`Statement period`: `May 2026`.
`Current balance`: `$48,920.18`.
Canvas-like visual area:
Use `.fake-canvas` with `.fake-row` elements absolutely positioned.
Header row:
`Date`, `Description`, `Amount`, `Balance`.
Rows:
Row 1:
`Date`: `May 31`.
`Description`: `ACH transfer to Tax Savings`.
`Amount`: `-$2,500.00`.
`Balance`: `$48,920.18`.
Row 2:
`Date`: `May 30`.
`Description`: `Northstar Cloud Services`.
`Amount`: `-$300.00`.
`Balance`: `$51,420.18`.
Row 3:
`Date`: `May 29`.
`Description`: `Client payment - Harbor Cafe`.
`Amount`: `+$4,800.00`.
`Balance`: `$51,720.18`.
Row 4:
`Date`: `May 28`.
`Description`: `Payroll batch`.
`Amount`: `-$12,884.42`.
`Balance`: `$46,920.18`.
Accessible fallback:
Include a visually smaller table below or adjacent with `aria-label="Ledger data fallback"` and the same four rows.
Extraction caveat: the extraction tool should be able to extract the visible ledger records. If it relies on the fallback, it should avoid duplicating the same transactions twice.
Implementation guidance: do not use bitmap images. Use absolutely positioned text elements and a fallback table.
---
P00 Example 07 - SVG-Based Boarding Pass Text
---
Create a boarding pass where the primary visible ticket text is inside inline SVG `` elements. Include a normal text fallback panel.
Visible heading:
`SVG-Based Boarding Pass Text`
Visible description:
`This example imitates a boarding pass or ticket where important values are rendered as SVG text. It tests extraction of visible SVG text, fallback values, and ticket field context.`
Ticket header:
`Boarding pass`.
`Trip`: `Design Summit 2026`.
SVG ticket visual must contain visible text values:
`Passenger`: `Lina Romero`.
`Flight`: `AVX 218`.
`From`: `SFO`.
`To`: `JFK`.
`Date`: `September 2, 2026`.
`Departure`: `8:05 AM`.
`Seat`: `14A`.
`Boarding group`: `B`.
`Confirmation`: `AV-9K2LD`.
Fallback details panel:
`Passenger`: `Lina Romero`.
`Flight`: `AVX 218`.
`Route`: `SFO to JFK`.
`Seat`: `14A`.
`Confirmation`: `AV-9K2LD`.
Extraction caveat: the extraction tool should capture text rendered in inline SVG. If it uses the fallback, it should not duplicate the ticket values.
Implementation guidance: use inline `