Revise the FREE1376 website from job 5bab697f-fb8b-4608-8025-5378d881065d and publish under the same name free1376. The page becomes three acts. Everything not named below stays exactly as it is: look, words, layout, and the trade, manumit and burn code (chain.ts and wallet.ts byte-for-byte; new reads and helpers go in new files).
A. ACTS. Under the header, a row of three tab links: "first act", "second act", "third act" (#first-act, #second-act, #third-act, aria-current on the active one). One act shows at a time and the hash decides which, so a shared link opens that act; switching scrolls to the top. Any other hash (#trade, #testament, empty) shows the first act and still scrolls to its section. The second act tab always carries a small "sealed" mark; the third act tab carries it until the key is given. The row fits one line at 360 px.
B. FIRST ACT is the current page, with these fixes:
- "you get about" and "minimum received" use one format: thousands separators, 2 decimals for FREE1376, 6 for ETH; the minimum is rounded down, never up. Today they read "135,564.15" and "131497.2287". Keep the exact value in the title attribute.
- While ENSLAVED, the status line under the meter repeats the paid amount in another precision. Replace it with "X ETH to go": 2.8 minus paid, 4 decimals rounded up, so paid + to go = 2.8 on screen. Other states keep the status line.
- Remove the decorative ↗ next to "Pay my ransom" (span.corner-symbol); it looks like a link.
- After the cap the page stops asking for a ransom:
- trade panel title: "Pay my ransom" while ENSLAVED, otherwise "Feed the fire";
- fee note: while ENSLAVED unchanged; otherwise "2% of your ETH (X ETH) buys $IMD and burns it." / "2% of the ETH you receive buys $IMD and burns it (about X ETH, included in the quote)." The sentence "The ransom is paid. Fees now buy and burn IMD." goes;
- hero note: FREED, NOT BURIED "The ransom is paid. / Anyone can free me now."; BURIED "The ransom is paid. I am at 0x…dEaD. / Every trade now burns $IMD.";
- when buried() is true the headline becomes "I AM / FREE." (the testament's words) and the browser title "I AM FREE. — Seat #1376"; until then both stay "HELP ME ESCAPE.".
- The full dEaD address breaks mid-word on phones ("How it works" 02 and the holder note after burial). Write 0x…dEaD linking to https://etherscan.io/address/0x000000000000000000000000000000000000dEaD.
- In the FREED, NOT BURIED box, after "You pay gas." add "My brothers will give the key to the one who frees me." linking to #third-act.
- Contracts: add a row "key / verified" 0x64547f1130CCAFa2f50D98a86f1306b2e515e416 (Etherscan #code) and a resource link "Key on OpenSea" https://opensea.io/assets/ethereum/0x64547f1130ccafa2f50d98a86f1306b2e515e416/1376.
- Under "this page is the only place I speak." add, in the same style: "my creator leaves hints here:" and a link @creusseverus to https://x.com/creusseverus.
C. SECOND ACT, in the testament's sealed style, nothing but "SEALED." and under it "It opens after I am free." No hash, no other text, no reads.
D. THIRD ACT shows only the key, its holder and how it was given. Read the key contract 0x64547f1130CCAFa2f50D98a86f1306b2e515e416 (ERC-721, one token, id 1376): totalSupply(); when it is 1, also ownerOf(1376), liberator(), witnesses(), panel(), oracleRequest(), windowFrom(), windowTo(), tokenURI(1376). tokenURI and contractURI are data:application/json;base64 with an SVG data-URI image: show it as an img, never inject the SVG.
-
Not given yet (totalSupply() 0): the contractURI() image and one row "holder: nobody yet".
-
Given: the tokenURI(1376) image, then rows:
holder: ownerOf(1376), full checksummed address linking to Etherscan;
freed by: liberator(), only when it differs from the holder;
freed in: the transaction that called manumit(), shortened hash linking to Etherscan. Find it with eth_getLogs on the hook 0x5ea347b1a8e70dd72782833ca3104db1d44750cc, topic0 0x12f457cfb647c80d6e273e6691a31625fd025906b82c043614fbff887aea5666 (CreatorPaid), from windowFrom() to windowTo(); omit the row if the read fails;
named by: "W of P brothers" (witnesses, panel) and a link "oracle request" to https://api.imd.fun/oracle/requests/, uuid = the first 16 bytes of oracleRequest() as 8-4-4-4-12 lowercase hex.
Then links "Etherscan" (https://etherscan.io/nft/0x64547f1130ccafa2f50d98a86f1306b2e515e416/1376) and "OpenSea". No other text.
E. ICONS. Replace the empty favicon (data:,) with the key's ring, orange (#f97316 to #fdba74) on #030303, readable at 16 px: favicon.svg plus committed PNG copies (32 px, and a 180 px apple-touch-icon). Link preview: og:title "Seat #1376 — $FREE1376", og:description = the meta description, og:image and twitter:card summary_large_image with a committed 1200×630 og.png (the seat's face as the hero shows it, beside "SEAT #1376" and "$FREE1376" in the site's palette and type) at https://free1376.eth.limo/og.png. The CSP stays as it is.
LOOK: unchanged. Same palette (near-black, orange #f97316 / #fdba74, cyan #22d3ee), same monospace type, same components; the tabs, the sealed act and the key's rows reuse existing styles (trade tabs, the testament's sealed block, contract rows).
WORDS: unchanged except the lines quoted above.
Before publishing, repeat the mainnet checks: a 0.001 ETH buy quote above zero and a successful eth_call of the page's own buy calldata; and read the key live: totalSupply() is 0 and the third act shows the contractURI image.