{"title":"Alchemist Archive","description":"\u003cp\u003eTransmutation circles, flame seals and equivalent exchange. Alchemy-inspired vintage tees for those who know the first law.\u003c\/p\u003e","products":[{"product_id":"full-metal-alchemists","title":"FMA Full Metal Anime T-Shirt","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n  \u003ctitle\u003eProduct + Size Chart — Minimal\u003c\/title\u003e\n  \u003cstyle\u003e\n    :root{\n      --bg:#ffffff;\n      --ink:#0b0c0f;\n      --muted:#6b7280;\n      --line:#eceef1;\n      --accent:#111827;\n      --radius:18px;\n      --radius-sm:10px;\n      --shadow:0 6px 24px rgba(0,0,0,.05);\n      --shadow-soft:0 3px 12px rgba(0,0,0,.05);\n    }\n\n    html,body{height:100%}\n    html{color-scheme:light}\n    body{\n      margin:0;\n      background:var(--bg);\n      color:var(--ink);\n      font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Inter, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n      -webkit-font-smoothing:antialiased;\n      font-size:15px;\n      line-height:1.75;\n      font-weight:300;\n      letter-spacing:.15px;\n    }\n\n    \/* Narrow, minimal container *\/\n    .wrap{\n      max-width: 640px;\n      margin: 56px auto;\n      padding: 0 18px;\n      position: relative;\n    }\n\n    \/* Minimal card *\/\n    .card{\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      padding: 28px 26px;\n    }\n\n    .title{\n      margin: 0 0 10px;\n      font-size: clamp(20px, 4.4vw, 26px);\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    .lead{\n      margin: 0;\n      color:#1f2937;\n      max-width: 60ch;\n    }\n\n    .features{\n      list-style: none;\n      padding: 0;\n      margin: 16px 0 0;\n      display: grid;\n      gap: 10px;\n    }\n    .features li{\n      font-weight: 400;\n      display: inline-flex;\n      align-items: baseline;\n      gap: 8px;\n    }\n    .features li::before{\n      content: \"—\";\n      color: var(--accent);\n      opacity:.55;\n      font-weight: 600;\n    }\n\n    \/* Ghost trigger button *\/\n    .size-chart-button-container{ text-align:center; margin: 16px 0 0; }\n    .size-chart-open-button{\n      background:#fff;\n      color:var(--ink);\n      padding: 9px 16px;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing:.25px;\n      border-radius: 999px;\n      border: 1px solid var(--ink);\n      cursor: pointer;\n      text-transform: uppercase;\n      transition: transform .15s ease, box-shadow .2s ease, background .2s ease;\n      box-shadow: var(--shadow-soft);\n    }\n    .size-chart-open-button:hover,\n    .size-chart-open-button:focus-visible{\n      transform: translateY(-1px);\n      outline: none;\n      background: #fafafa;\n      box-shadow: 0 10px 26px rgba(0,0,0,.08);\n    }\n\n    \/* Collapse *\/\n    .size-chart-collapse{\n      width: 100%;\n      max-width: 560px;\n      margin: 18px auto 40px;\n      padding: 16px;\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-sm);\n      box-shadow: var(--shadow-soft);\n    }\n    .hidden{ display:none; }\n\n    \/* Tabs: minimalist underline *\/\n    .size-chart-tabs{\n      display:flex;\n      justify-content:center;\n      gap: 18px;\n      margin-bottom: 12px;\n      border-bottom: 1px solid var(--line);\n      padding-bottom: 2px;\n    }\n    .tab-button{\n      appearance:none;\n      background:transparent;\n      color:var(--muted);\n      padding: 6px 2px;\n      font-size:12px;\n      font-weight:700;\n      letter-spacing:.3px;\n      border:none;\n      border-radius:0;\n      cursor:pointer;\n      position:relative;\n      transition: color .2s ease;\n    }\n    .tab-button:hover,\n    .tab-button:focus-visible{\n      color:var(--ink);\n      outline:none;\n    }\n    .tab-button[aria-selected=\"true\"]{\n      color:var(--ink);\n    }\n    .tab-button[aria-selected=\"true\"]::after{\n      content:\"\";\n      position:absolute;\n      left:0; right:0; bottom:-3px;\n      height: 2px;\n      background: var(--accent);\n      border-radius: 2px;\n    }\n\n    \/* Table: soft row dividers only *\/\n    .size-chart-table{\n      width:100%;\n      border-collapse: collapse;\n      background:#fff;\n    }\n    .size-chart-table th,\n    .size-chart-table td{\n      text-align:center;\n      padding: 10px 6px;\n      font-size:12px;\n      color:var(--ink);\n      border: none;\n      border-bottom: 1px solid var(--line);\n    }\n    .size-chart-table th{\n      font-weight: 700;\n      background: #fbfcfd;\n    }\n    .size-chart-table td:first-child,\n    .size-chart-table th:first-child{\n      text-align:left;\n      padding-left: 6px;\n      font-weight: 600;\n    }\n    .size-chart-table tbody tr:last-child td{\n      border-bottom: none;\n    }\n\n    .size-chart-note{\n      margin-top: 10px;\n      font-size: 11.5px;\n      color: var(--muted);\n      text-align: center;\n    }\n\n    @media (max-width:660px){\n      .wrap{ margin:44px auto; padding:0 14px; }\n      .card{ padding: 24px 20px; }\n      .size-chart-collapse{ max-width: 100%; }\n    }\n  \u003c\/style\u003e\n\n\n  \u003cmain class=\"wrap\" aria-labelledby=\"product-heading\"\u003e\n    \u003csection class=\"card\" aria-describedby=\"product-desc\"\u003e\n      \u003ch1 class=\"title\" id=\"product-heading\"\u003eBuilt for the Long Term\u003c\/h1\u003e\n      \u003cp class=\"lead\" id=\"product-desc\"\u003e\n        We make pieces to last. Cut from ultra-smooth 100% polyester mesh for cool comfort and durability, then\n        finished with professional-grade printing that resists cracking and fading. Everyday-ready, season after season.\n      \u003c\/p\u003e\n      \u003cul class=\"features\" role=\"list\"\u003e\n        \u003cli\u003e100% Polyester Mesh\u003c\/li\u003e\n        \u003cli\u003eWith pockets\u003c\/li\u003e\n        \u003cli\u003eHigh-quality printing\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- Trigger --\u003e\n    \u003cdiv class=\"size-chart-button-container\"\u003e\n      \u003cbutton id=\"sizeChartToggle\" class=\"size-chart-open-button\" aria-expanded=\"false\" aria-controls=\"sizeChartPanel\"\u003e\n        Size Chart For Shirt\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Collapsible size chart --\u003e\n    \u003csection id=\"sizeChartPanel\" class=\"size-chart-collapse hidden\" aria-hidden=\"true\"\u003e\n      \u003c!-- Tabs --\u003e\n      \u003cdiv class=\"size-chart-tabs\" role=\"tablist\" aria-label=\"Size chart units\"\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-cm\" aria-selected=\"true\" aria-controls=\"tab-cm\" tabindex=\"0\" data-unit=\"cm\"\u003eCM\u003c\/button\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-in\" aria-selected=\"false\" aria-controls=\"tab-in\" tabindex=\"-1\" data-unit=\"in\"\u003eInches\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- CM table --\u003e\n      \u003cdiv id=\"tab-cm\" role=\"tabpanel\" aria-labelledby=\"tab-btn-cm\"\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-cm\" aria-label=\"Shirt size chart in centimeters\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Inches table --\u003e\n      \u003cdiv id=\"tab-in\" role=\"tabpanel\" aria-labelledby=\"tab-btn-in\" hidden\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-in\" aria-label=\"Shirt size chart in inches\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003cp class=\"size-chart-note\"\u003e\n        Measurements are garment dimensions. Compare with a tee you own for best fit.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003cnoscript\u003e\n      \u003cp style=\"text-align:center;font:14px\/1.4 ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;color:#555;\"\u003e\n        Enable JavaScript to view the interactive size chart.\n      \u003c\/p\u003e\n    \u003c\/noscript\u003e\n  \u003c\/main\u003e\n\n  \u003cscript\u003e\n    \/* ===== Data (single source of truth in CM) ===== *\/\n    const SIZE_DATA_CM = [\n      { size: \"S\",   length: 72, chest: 112, shoulder: 54,   sleeve: 24 },\n      { size: \"M\",   length: 74, chest: 116, shoulder: 55.5, sleeve: 25 },\n      { size: \"L\",   length: 76, chest: 120, shoulder: 57,   sleeve: 26 },\n      { size: \"XL\",  length: 78, chest: 124, shoulder: 58.5, sleeve: 27 },\n      { size: \"XXL\", length: 80, chest: 128, shoulder: 60,   sleeve: 28 },\n      { size: \"XXXL\",length: 82, chest: 132, shoulder: 61.5, sleeve: 29 }\n    ];\n\n    const COLUMNS = [\n      { key: \"size\",     label: \"Size\" },\n      { key: \"length\",   label: \"Length\" },\n      { key: \"chest\",    label: \"Chest\" },\n      { key: \"shoulder\", label: \"Shoulder\" },\n      { key: \"sleeve\",   label: \"Sleeve\" }\n    ];\n\n    \/\/ CM -\u003e inches (rounded to nearest 0.5\")\n    const cmToIn = cm =\u003e Math.round((cm \/ 2.54) * 2) \/ 2;\n\n    function renderTable(target, data, unit){\n      const thead = document.createElement(\"thead\");\n      const trh = document.createElement(\"tr\");\n\n      COLUMNS.forEach(col =\u003e {\n        const th = document.createElement(\"th\");\n        th.scope = \"col\";\n        th.textContent = col.key === \"size\" ? col.label : `${col.label} (${unit === \"cm\" ? \"cm\" : \"in\"})`;\n        trh.appendChild(th);\n      });\n      thead.appendChild(trh);\n\n      const tbody = document.createElement(\"tbody\");\n      data.forEach(row =\u003e {\n        const tr = document.createElement(\"tr\");\n        COLUMNS.forEach(col =\u003e {\n          const td = document.createElement(\"td\");\n          if(col.key === \"size\"){\n            td.textContent = row.size;\n            td.style.fontWeight = 600;\n          } else {\n            const val = unit === \"cm\" ? row[col.key] : cmToIn(row[col.key]);\n            td.textContent = Number.isInteger(val) ? String(val) : val.toFixed(1);\n          }\n          tr.appendChild(td);\n        });\n        tbody.appendChild(tr);\n      });\n\n      target.innerHTML = \"\";\n      target.appendChild(thead);\n      target.appendChild(tbody);\n    }\n\n    \/\/ Initial render\n    const tableCM = document.getElementById(\"table-cm\");\n    const tableIN = document.getElementById(\"table-in\");\n    renderTable(tableCM, SIZE_DATA_CM, \"cm\");\n    renderTable(tableIN, SIZE_DATA_CM, \"in\");\n\n    \/\/ Collapsible behavior\n    const toggleBtn = document.getElementById(\"sizeChartToggle\");\n    const panel = document.getElementById(\"sizeChartPanel\");\n\n    function setPanel(open){\n      panel.classList.toggle(\"hidden\", !open);\n      panel.setAttribute(\"aria-hidden\", String(!open));\n      toggleBtn.setAttribute(\"aria-expanded\", String(!!open));\n      if(open){ document.getElementById(\"tab-btn-cm\").focus(); }\n    }\n    toggleBtn.addEventListener(\"click\", () =\u003e {\n      const isOpen = toggleBtn.getAttribute(\"aria-expanded\") === \"true\";\n      setPanel(!isOpen);\n    });\n\n    \/\/ Tabs: click + arrow keys + roving tabindex\n    const tabs = Array.from(document.querySelectorAll('[role=\"tab\"]'));\n    const tabMap = {\n      cm: { btn: document.getElementById(\"tab-btn-cm\"), panel: document.getElementById(\"tab-cm\") },\n      in: { btn: document.getElementById(\"tab-btn-in\"), panel: document.getElementById(\"tab-in\") }\n    };\n\n    function activateTab(key){\n      for(const k in tabMap){\n        const { btn, panel } = tabMap[k];\n        const selected = k === key;\n        btn.setAttribute(\"aria-selected\", String(selected));\n        btn.tabIndex = selected ? 0 : -1;\n        panel.hidden = !selected;\n      }\n      tabMap[key].btn.focus();\n    }\n\n    tabs.forEach(btn =\u003e {\n      btn.addEventListener(\"click\", () =\u003e activateTab(btn.dataset.unit));\n      btn.addEventListener(\"keydown\", (e) =\u003e {\n        const idx = tabs.indexOf(btn);\n        if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){\n          e.preventDefault();\n          const next = tabs[(idx + 1) % tabs.length];\n          activateTab(next.dataset.unit);\n        } else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){\n          e.preventDefault();\n          const prev = tabs[(idx - 1 + tabs.length) % tabs.length];\n          activateTab(prev.dataset.unit);\n        } else if(e.key === 'Home'){\n          e.preventDefault();\n          activateTab(tabs[0].dataset.unit);\n        } else if(e.key === 'End'){\n          e.preventDefault();\n          activateTab(tabs[tabs.length - 1].dataset.unit);\n        }\n      });\n    });\n\n    \/\/ Default active tab\n    activateTab('cm');\n  \u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Washed Warrior","offers":[{"title":"S","offer_id":50609756897627,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true},{"title":"M","offer_id":50609756930395,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true},{"title":"L","offer_id":50609756963163,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true},{"title":"XL","offer_id":50609756995931,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true},{"title":"2XL","offer_id":50609757028699,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true},{"title":"3XL","offer_id":50609757061467,"sku":"","price":22.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0924\/6054\/8443\/files\/variant-image-3_684be973-4c32-478b-a757-e57c4be4ca4d.jpg?v=1747759469"},{"product_id":"sinister-eyes-horror-manga-tee-copy","title":"Anime Flame Alchemist-Inspired Oversized T-Shirt","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n  \u003ctitle\u003eProduct + Size Chart — Minimal\u003c\/title\u003e\n  \u003cstyle\u003e\n    :root{\n      --bg:#ffffff;\n      --ink:#0b0c0f;\n      --muted:#6b7280;\n      --line:#eceef1;\n      --accent:#111827;\n      --radius:18px;\n      --radius-sm:10px;\n      --shadow:0 6px 24px rgba(0,0,0,.05);\n      --shadow-soft:0 3px 12px rgba(0,0,0,.05);\n    }\n\n    html,body{height:100%}\n    html{color-scheme:light}\n    body{\n      margin:0;\n      background:var(--bg);\n      color:var(--ink);\n      font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Inter, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n      -webkit-font-smoothing:antialiased;\n      font-size:15px;\n      line-height:1.75;\n      font-weight:300;\n      letter-spacing:.15px;\n    }\n\n    \/* Narrow, minimal container *\/\n    .wrap{\n      max-width: 640px;\n      margin: 56px auto;\n      padding: 0 18px;\n      position: relative;\n    }\n\n    \/* Minimal card *\/\n    .card{\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      padding: 28px 26px;\n    }\n\n    .title{\n      margin: 0 0 10px;\n      font-size: clamp(20px, 4.4vw, 26px);\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    .lead{\n      margin: 0;\n      color:#1f2937;\n      max-width: 60ch;\n    }\n\n    .features{\n      list-style: none;\n      padding: 0;\n      margin: 16px 0 0;\n      display: grid;\n      gap: 10px;\n    }\n    .features li{\n      font-weight: 400;\n      display: inline-flex;\n      align-items: baseline;\n      gap: 8px;\n    }\n    .features li::before{\n      content: \"—\";\n      color: var(--accent);\n      opacity:.55;\n      font-weight: 600;\n    }\n\n    \/* Ghost trigger button *\/\n    .size-chart-button-container{ text-align:center; margin: 16px 0 0; }\n    .size-chart-open-button{\n      background:#fff;\n      color:var(--ink);\n      padding: 9px 16px;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing:.25px;\n      border-radius: 999px;\n      border: 1px solid var(--ink);\n      cursor: pointer;\n      text-transform: uppercase;\n      transition: transform .15s ease, box-shadow .2s ease, background .2s ease;\n      box-shadow: var(--shadow-soft);\n    }\n    .size-chart-open-button:hover,\n    .size-chart-open-button:focus-visible{\n      transform: translateY(-1px);\n      outline: none;\n      background: #fafafa;\n      box-shadow: 0 10px 26px rgba(0,0,0,.08);\n    }\n\n    \/* Collapse *\/\n    .size-chart-collapse{\n      width: 100%;\n      max-width: 560px;\n      margin: 18px auto 40px;\n      padding: 16px;\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-sm);\n      box-shadow: var(--shadow-soft);\n    }\n    .hidden{ display:none; }\n\n    \/* Tabs: minimalist underline *\/\n    .size-chart-tabs{\n      display:flex;\n      justify-content:center;\n      gap: 18px;\n      margin-bottom: 12px;\n      border-bottom: 1px solid var(--line);\n      padding-bottom: 2px;\n    }\n    .tab-button{\n      appearance:none;\n      background:transparent;\n      color:var(--muted);\n      padding: 6px 2px;\n      font-size:12px;\n      font-weight:700;\n      letter-spacing:.3px;\n      border:none;\n      border-radius:0;\n      cursor:pointer;\n      position:relative;\n      transition: color .2s ease;\n    }\n    .tab-button:hover,\n    .tab-button:focus-visible{\n      color:var(--ink);\n      outline:none;\n    }\n    .tab-button[aria-selected=\"true\"]{\n      color:var(--ink);\n    }\n    .tab-button[aria-selected=\"true\"]::after{\n      content:\"\";\n      position:absolute;\n      left:0; right:0; bottom:-3px;\n      height: 2px;\n      background: var(--accent);\n      border-radius: 2px;\n    }\n\n    \/* Table: soft row dividers only *\/\n    .size-chart-table{\n      width:100%;\n      border-collapse: collapse;\n      background:#fff;\n    }\n    .size-chart-table th,\n    .size-chart-table td{\n      text-align:center;\n      padding: 10px 6px;\n      font-size:12px;\n      color:var(--ink);\n      border: none;\n      border-bottom: 1px solid var(--line);\n    }\n    .size-chart-table th{\n      font-weight: 700;\n      background: #fbfcfd;\n    }\n    .size-chart-table td:first-child,\n    .size-chart-table th:first-child{\n      text-align:left;\n      padding-left: 6px;\n      font-weight: 600;\n    }\n    .size-chart-table tbody tr:last-child td{\n      border-bottom: none;\n    }\n\n    .size-chart-note{\n      margin-top: 10px;\n      font-size: 11.5px;\n      color: var(--muted);\n      text-align: center;\n    }\n\n    @media (max-width:660px){\n      .wrap{ margin:44px auto; padding:0 14px; }\n      .card{ padding: 24px 20px; }\n      .size-chart-collapse{ max-width: 100%; }\n    }\n  \u003c\/style\u003e\n\n\n  \u003cmain class=\"wrap\" aria-labelledby=\"product-heading\"\u003e\n    \u003csection class=\"card\" aria-describedby=\"product-desc\"\u003e\n      \u003ch1 class=\"title\" id=\"product-heading\"\u003eBuilt for the Long Term\u003c\/h1\u003e\n      \u003cp class=\"lead\" id=\"product-desc\"\u003e\n        We make pieces to last. Cut from ultra-smooth 100% polyester mesh for cool comfort and durability, then\n        finished with professional-grade printing that resists cracking and fading. Everyday-ready, season after season.\n      \u003c\/p\u003e\n      \u003cul class=\"features\" role=\"list\"\u003e\n        \u003cli\u003e100% Polyester Mesh\u003c\/li\u003e\n        \u003cli\u003eWith pockets\u003c\/li\u003e\n        \u003cli\u003eHigh-quality printing\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- Trigger --\u003e\n    \u003cdiv class=\"size-chart-button-container\"\u003e\n      \u003cbutton id=\"sizeChartToggle\" class=\"size-chart-open-button\" aria-expanded=\"false\" aria-controls=\"sizeChartPanel\"\u003e\n        Size Chart For Shirt\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Collapsible size chart --\u003e\n    \u003csection id=\"sizeChartPanel\" class=\"size-chart-collapse hidden\" aria-hidden=\"true\"\u003e\n      \u003c!-- Tabs --\u003e\n      \u003cdiv class=\"size-chart-tabs\" role=\"tablist\" aria-label=\"Size chart units\"\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-cm\" aria-selected=\"true\" aria-controls=\"tab-cm\" tabindex=\"0\" data-unit=\"cm\"\u003eCM\u003c\/button\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-in\" aria-selected=\"false\" aria-controls=\"tab-in\" tabindex=\"-1\" data-unit=\"in\"\u003eInches\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- CM table --\u003e\n      \u003cdiv id=\"tab-cm\" role=\"tabpanel\" aria-labelledby=\"tab-btn-cm\"\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-cm\" aria-label=\"Shirt size chart in centimeters\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Inches table --\u003e\n      \u003cdiv id=\"tab-in\" role=\"tabpanel\" aria-labelledby=\"tab-btn-in\" hidden\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-in\" aria-label=\"Shirt size chart in inches\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003cp class=\"size-chart-note\"\u003e\n        Measurements are garment dimensions. Compare with a tee you own for best fit.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003cnoscript\u003e\n      \u003cp style=\"text-align:center;font:14px\/1.4 ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;color:#555;\"\u003e\n        Enable JavaScript to view the interactive size chart.\n      \u003c\/p\u003e\n    \u003c\/noscript\u003e\n  \u003c\/main\u003e\n\n  \u003cscript\u003e\n    \/* ===== Data (single source of truth in CM) ===== *\/\n    const SIZE_DATA_CM = [\n      { size: \"S\",   length: 72, chest: 112, shoulder: 54,   sleeve: 24 },\n      { size: \"M\",   length: 74, chest: 116, shoulder: 55.5, sleeve: 25 },\n      { size: \"L\",   length: 76, chest: 120, shoulder: 57,   sleeve: 26 },\n      { size: \"XL\",  length: 78, chest: 124, shoulder: 58.5, sleeve: 27 },\n      { size: \"XXL\", length: 80, chest: 128, shoulder: 60,   sleeve: 28 },\n      { size: \"XXXL\",length: 82, chest: 132, shoulder: 61.5, sleeve: 29 }\n    ];\n\n    const COLUMNS = [\n      { key: \"size\",     label: \"Size\" },\n      { key: \"length\",   label: \"Length\" },\n      { key: \"chest\",    label: \"Chest\" },\n      { key: \"shoulder\", label: \"Shoulder\" },\n      { key: \"sleeve\",   label: \"Sleeve\" }\n    ];\n\n    \/\/ CM -\u003e inches (rounded to nearest 0.5\")\n    const cmToIn = cm =\u003e Math.round((cm \/ 2.54) * 2) \/ 2;\n\n    function renderTable(target, data, unit){\n      const thead = document.createElement(\"thead\");\n      const trh = document.createElement(\"tr\");\n\n      COLUMNS.forEach(col =\u003e {\n        const th = document.createElement(\"th\");\n        th.scope = \"col\";\n        th.textContent = col.key === \"size\" ? col.label : `${col.label} (${unit === \"cm\" ? \"cm\" : \"in\"})`;\n        trh.appendChild(th);\n      });\n      thead.appendChild(trh);\n\n      const tbody = document.createElement(\"tbody\");\n      data.forEach(row =\u003e {\n        const tr = document.createElement(\"tr\");\n        COLUMNS.forEach(col =\u003e {\n          const td = document.createElement(\"td\");\n          if(col.key === \"size\"){\n            td.textContent = row.size;\n            td.style.fontWeight = 600;\n          } else {\n            const val = unit === \"cm\" ? row[col.key] : cmToIn(row[col.key]);\n            td.textContent = Number.isInteger(val) ? String(val) : val.toFixed(1);\n          }\n          tr.appendChild(td);\n        });\n        tbody.appendChild(tr);\n      });\n\n      target.innerHTML = \"\";\n      target.appendChild(thead);\n      target.appendChild(tbody);\n    }\n\n    \/\/ Initial render\n    const tableCM = document.getElementById(\"table-cm\");\n    const tableIN = document.getElementById(\"table-in\");\n    renderTable(tableCM, SIZE_DATA_CM, \"cm\");\n    renderTable(tableIN, SIZE_DATA_CM, \"in\");\n\n    \/\/ Collapsible behavior\n    const toggleBtn = document.getElementById(\"sizeChartToggle\");\n    const panel = document.getElementById(\"sizeChartPanel\");\n\n    function setPanel(open){\n      panel.classList.toggle(\"hidden\", !open);\n      panel.setAttribute(\"aria-hidden\", String(!open));\n      toggleBtn.setAttribute(\"aria-expanded\", String(!!open));\n      if(open){ document.getElementById(\"tab-btn-cm\").focus(); }\n    }\n    toggleBtn.addEventListener(\"click\", () =\u003e {\n      const isOpen = toggleBtn.getAttribute(\"aria-expanded\") === \"true\";\n      setPanel(!isOpen);\n    });\n\n    \/\/ Tabs: click + arrow keys + roving tabindex\n    const tabs = Array.from(document.querySelectorAll('[role=\"tab\"]'));\n    const tabMap = {\n      cm: { btn: document.getElementById(\"tab-btn-cm\"), panel: document.getElementById(\"tab-cm\") },\n      in: { btn: document.getElementById(\"tab-btn-in\"), panel: document.getElementById(\"tab-in\") }\n    };\n\n    function activateTab(key){\n      for(const k in tabMap){\n        const { btn, panel } = tabMap[k];\n        const selected = k === key;\n        btn.setAttribute(\"aria-selected\", String(selected));\n        btn.tabIndex = selected ? 0 : -1;\n        panel.hidden = !selected;\n      }\n      tabMap[key].btn.focus();\n    }\n\n    tabs.forEach(btn =\u003e {\n      btn.addEventListener(\"click\", () =\u003e activateTab(btn.dataset.unit));\n      btn.addEventListener(\"keydown\", (e) =\u003e {\n        const idx = tabs.indexOf(btn);\n        if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){\n          e.preventDefault();\n          const next = tabs[(idx + 1) % tabs.length];\n          activateTab(next.dataset.unit);\n        } else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){\n          e.preventDefault();\n          const prev = tabs[(idx - 1 + tabs.length) % tabs.length];\n          activateTab(prev.dataset.unit);\n        } else if(e.key === 'Home'){\n          e.preventDefault();\n          activateTab(tabs[0].dataset.unit);\n        } else if(e.key === 'End'){\n          e.preventDefault();\n          activateTab(tabs[tabs.length - 1].dataset.unit);\n        }\n      });\n    });\n\n    \/\/ Default active tab\n    activateTab('cm');\n  \u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Washed Warrior","offers":[{"title":"S","offer_id":50610740429147,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"M","offer_id":50610740461915,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"L","offer_id":50610740494683,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"XL","offer_id":50610740527451,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"2XL","offer_id":50610740560219,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"3XL","offer_id":50610740592987,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0924\/6054\/8443\/files\/variant-image-6_61f232fa-0939-4c29-8815-5b8079729978.jpg?v=1747777532"},{"product_id":"anime-flame-alchemist-inspired-oversized-t-shirt-copy","title":"Fire Burst Alchemy Seal Vintage Graphic Tee","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n  \u003ctitle\u003eProduct + Size Chart — Minimal\u003c\/title\u003e\n  \u003cstyle\u003e\n    :root{\n      --bg:#ffffff;\n      --ink:#0b0c0f;\n      --muted:#6b7280;\n      --line:#eceef1;\n      --accent:#111827;\n      --radius:18px;\n      --radius-sm:10px;\n      --shadow:0 6px 24px rgba(0,0,0,.05);\n      --shadow-soft:0 3px 12px rgba(0,0,0,.05);\n    }\n\n    html,body{height:100%}\n    html{color-scheme:light}\n    body{\n      margin:0;\n      background:var(--bg);\n      color:var(--ink);\n      font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Inter, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n      -webkit-font-smoothing:antialiased;\n      font-size:15px;\n      line-height:1.75;\n      font-weight:300;\n      letter-spacing:.15px;\n    }\n\n    \/* Narrow, minimal container *\/\n    .wrap{\n      max-width: 640px;\n      margin: 56px auto;\n      padding: 0 18px;\n      position: relative;\n    }\n\n    \/* Minimal card *\/\n    .card{\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      padding: 28px 26px;\n    }\n\n    .title{\n      margin: 0 0 10px;\n      font-size: clamp(20px, 4.4vw, 26px);\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    .lead{\n      margin: 0;\n      color:#1f2937;\n      max-width: 60ch;\n    }\n\n    .features{\n      list-style: none;\n      padding: 0;\n      margin: 16px 0 0;\n      display: grid;\n      gap: 10px;\n    }\n    .features li{\n      font-weight: 400;\n      display: inline-flex;\n      align-items: baseline;\n      gap: 8px;\n    }\n    .features li::before{\n      content: \"—\";\n      color: var(--accent);\n      opacity:.55;\n      font-weight: 600;\n    }\n\n    \/* Ghost trigger button *\/\n    .size-chart-button-container{ text-align:center; margin: 16px 0 0; }\n    .size-chart-open-button{\n      background:#fff;\n      color:var(--ink);\n      padding: 9px 16px;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing:.25px;\n      border-radius: 999px;\n      border: 1px solid var(--ink);\n      cursor: pointer;\n      text-transform: uppercase;\n      transition: transform .15s ease, box-shadow .2s ease, background .2s ease;\n      box-shadow: var(--shadow-soft);\n    }\n    .size-chart-open-button:hover,\n    .size-chart-open-button:focus-visible{\n      transform: translateY(-1px);\n      outline: none;\n      background: #fafafa;\n      box-shadow: 0 10px 26px rgba(0,0,0,.08);\n    }\n\n    \/* Collapse *\/\n    .size-chart-collapse{\n      width: 100%;\n      max-width: 560px;\n      margin: 18px auto 40px;\n      padding: 16px;\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-sm);\n      box-shadow: var(--shadow-soft);\n    }\n    .hidden{ display:none; }\n\n    \/* Tabs: minimalist underline *\/\n    .size-chart-tabs{\n      display:flex;\n      justify-content:center;\n      gap: 18px;\n      margin-bottom: 12px;\n      border-bottom: 1px solid var(--line);\n      padding-bottom: 2px;\n    }\n    .tab-button{\n      appearance:none;\n      background:transparent;\n      color:var(--muted);\n      padding: 6px 2px;\n      font-size:12px;\n      font-weight:700;\n      letter-spacing:.3px;\n      border:none;\n      border-radius:0;\n      cursor:pointer;\n      position:relative;\n      transition: color .2s ease;\n    }\n    .tab-button:hover,\n    .tab-button:focus-visible{\n      color:var(--ink);\n      outline:none;\n    }\n    .tab-button[aria-selected=\"true\"]{\n      color:var(--ink);\n    }\n    .tab-button[aria-selected=\"true\"]::after{\n      content:\"\";\n      position:absolute;\n      left:0; right:0; bottom:-3px;\n      height: 2px;\n      background: var(--accent);\n      border-radius: 2px;\n    }\n\n    \/* Table: soft row dividers only *\/\n    .size-chart-table{\n      width:100%;\n      border-collapse: collapse;\n      background:#fff;\n    }\n    .size-chart-table th,\n    .size-chart-table td{\n      text-align:center;\n      padding: 10px 6px;\n      font-size:12px;\n      color:var(--ink);\n      border: none;\n      border-bottom: 1px solid var(--line);\n    }\n    .size-chart-table th{\n      font-weight: 700;\n      background: #fbfcfd;\n    }\n    .size-chart-table td:first-child,\n    .size-chart-table th:first-child{\n      text-align:left;\n      padding-left: 6px;\n      font-weight: 600;\n    }\n    .size-chart-table tbody tr:last-child td{\n      border-bottom: none;\n    }\n\n    .size-chart-note{\n      margin-top: 10px;\n      font-size: 11.5px;\n      color: var(--muted);\n      text-align: center;\n    }\n\n    @media (max-width:660px){\n      .wrap{ margin:44px auto; padding:0 14px; }\n      .card{ padding: 24px 20px; }\n      .size-chart-collapse{ max-width: 100%; }\n    }\n  \u003c\/style\u003e\n\n\n  \u003cmain class=\"wrap\" aria-labelledby=\"product-heading\"\u003e\n    \u003csection class=\"card\" aria-describedby=\"product-desc\"\u003e\n      \u003ch1 class=\"title\" id=\"product-heading\"\u003eBuilt for the Long Term\u003c\/h1\u003e\n      \u003cp class=\"lead\" id=\"product-desc\"\u003e\n        We make pieces to last. Cut from ultra-smooth 100% polyester mesh for cool comfort and durability, then\n        finished with professional-grade printing that resists cracking and fading. Everyday-ready, season after season.\n      \u003c\/p\u003e\n      \u003cul class=\"features\" role=\"list\"\u003e\n        \u003cli\u003e100% Polyester Mesh\u003c\/li\u003e\n        \u003cli\u003eWith pockets\u003c\/li\u003e\n        \u003cli\u003eHigh-quality printing\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- Trigger --\u003e\n    \u003cdiv class=\"size-chart-button-container\"\u003e\n      \u003cbutton id=\"sizeChartToggle\" class=\"size-chart-open-button\" aria-expanded=\"false\" aria-controls=\"sizeChartPanel\"\u003e\n        Size Chart For Shirt\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Collapsible size chart --\u003e\n    \u003csection id=\"sizeChartPanel\" class=\"size-chart-collapse hidden\" aria-hidden=\"true\"\u003e\n      \u003c!-- Tabs --\u003e\n      \u003cdiv class=\"size-chart-tabs\" role=\"tablist\" aria-label=\"Size chart units\"\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-cm\" aria-selected=\"true\" aria-controls=\"tab-cm\" tabindex=\"0\" data-unit=\"cm\"\u003eCM\u003c\/button\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-in\" aria-selected=\"false\" aria-controls=\"tab-in\" tabindex=\"-1\" data-unit=\"in\"\u003eInches\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- CM table --\u003e\n      \u003cdiv id=\"tab-cm\" role=\"tabpanel\" aria-labelledby=\"tab-btn-cm\"\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-cm\" aria-label=\"Shirt size chart in centimeters\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Inches table --\u003e\n      \u003cdiv id=\"tab-in\" role=\"tabpanel\" aria-labelledby=\"tab-btn-in\" hidden\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-in\" aria-label=\"Shirt size chart in inches\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003cp class=\"size-chart-note\"\u003e\n        Measurements are garment dimensions. Compare with a tee you own for best fit.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003cnoscript\u003e\n      \u003cp style=\"text-align:center;font:14px\/1.4 ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;color:#555;\"\u003e\n        Enable JavaScript to view the interactive size chart.\n      \u003c\/p\u003e\n    \u003c\/noscript\u003e\n  \u003c\/main\u003e\n\n  \u003cscript\u003e\n    \/* ===== Data (single source of truth in CM) ===== *\/\n    const SIZE_DATA_CM = [\n      { size: \"S\",   length: 72, chest: 112, shoulder: 54,   sleeve: 24 },\n      { size: \"M\",   length: 74, chest: 116, shoulder: 55.5, sleeve: 25 },\n      { size: \"L\",   length: 76, chest: 120, shoulder: 57,   sleeve: 26 },\n      { size: \"XL\",  length: 78, chest: 124, shoulder: 58.5, sleeve: 27 },\n      { size: \"XXL\", length: 80, chest: 128, shoulder: 60,   sleeve: 28 },\n      { size: \"XXXL\",length: 82, chest: 132, shoulder: 61.5, sleeve: 29 }\n    ];\n\n    const COLUMNS = [\n      { key: \"size\",     label: \"Size\" },\n      { key: \"length\",   label: \"Length\" },\n      { key: \"chest\",    label: \"Chest\" },\n      { key: \"shoulder\", label: \"Shoulder\" },\n      { key: \"sleeve\",   label: \"Sleeve\" }\n    ];\n\n    \/\/ CM -\u003e inches (rounded to nearest 0.5\")\n    const cmToIn = cm =\u003e Math.round((cm \/ 2.54) * 2) \/ 2;\n\n    function renderTable(target, data, unit){\n      const thead = document.createElement(\"thead\");\n      const trh = document.createElement(\"tr\");\n\n      COLUMNS.forEach(col =\u003e {\n        const th = document.createElement(\"th\");\n        th.scope = \"col\";\n        th.textContent = col.key === \"size\" ? col.label : `${col.label} (${unit === \"cm\" ? \"cm\" : \"in\"})`;\n        trh.appendChild(th);\n      });\n      thead.appendChild(trh);\n\n      const tbody = document.createElement(\"tbody\");\n      data.forEach(row =\u003e {\n        const tr = document.createElement(\"tr\");\n        COLUMNS.forEach(col =\u003e {\n          const td = document.createElement(\"td\");\n          if(col.key === \"size\"){\n            td.textContent = row.size;\n            td.style.fontWeight = 600;\n          } else {\n            const val = unit === \"cm\" ? row[col.key] : cmToIn(row[col.key]);\n            td.textContent = Number.isInteger(val) ? String(val) : val.toFixed(1);\n          }\n          tr.appendChild(td);\n        });\n        tbody.appendChild(tr);\n      });\n\n      target.innerHTML = \"\";\n      target.appendChild(thead);\n      target.appendChild(tbody);\n    }\n\n    \/\/ Initial render\n    const tableCM = document.getElementById(\"table-cm\");\n    const tableIN = document.getElementById(\"table-in\");\n    renderTable(tableCM, SIZE_DATA_CM, \"cm\");\n    renderTable(tableIN, SIZE_DATA_CM, \"in\");\n\n    \/\/ Collapsible behavior\n    const toggleBtn = document.getElementById(\"sizeChartToggle\");\n    const panel = document.getElementById(\"sizeChartPanel\");\n\n    function setPanel(open){\n      panel.classList.toggle(\"hidden\", !open);\n      panel.setAttribute(\"aria-hidden\", String(!open));\n      toggleBtn.setAttribute(\"aria-expanded\", String(!!open));\n      if(open){ document.getElementById(\"tab-btn-cm\").focus(); }\n    }\n    toggleBtn.addEventListener(\"click\", () =\u003e {\n      const isOpen = toggleBtn.getAttribute(\"aria-expanded\") === \"true\";\n      setPanel(!isOpen);\n    });\n\n    \/\/ Tabs: click + arrow keys + roving tabindex\n    const tabs = Array.from(document.querySelectorAll('[role=\"tab\"]'));\n    const tabMap = {\n      cm: { btn: document.getElementById(\"tab-btn-cm\"), panel: document.getElementById(\"tab-cm\") },\n      in: { btn: document.getElementById(\"tab-btn-in\"), panel: document.getElementById(\"tab-in\") }\n    };\n\n    function activateTab(key){\n      for(const k in tabMap){\n        const { btn, panel } = tabMap[k];\n        const selected = k === key;\n        btn.setAttribute(\"aria-selected\", String(selected));\n        btn.tabIndex = selected ? 0 : -1;\n        panel.hidden = !selected;\n      }\n      tabMap[key].btn.focus();\n    }\n\n    tabs.forEach(btn =\u003e {\n      btn.addEventListener(\"click\", () =\u003e activateTab(btn.dataset.unit));\n      btn.addEventListener(\"keydown\", (e) =\u003e {\n        const idx = tabs.indexOf(btn);\n        if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){\n          e.preventDefault();\n          const next = tabs[(idx + 1) % tabs.length];\n          activateTab(next.dataset.unit);\n        } else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){\n          e.preventDefault();\n          const prev = tabs[(idx - 1 + tabs.length) % tabs.length];\n          activateTab(prev.dataset.unit);\n        } else if(e.key === 'Home'){\n          e.preventDefault();\n          activateTab(tabs[0].dataset.unit);\n        } else if(e.key === 'End'){\n          e.preventDefault();\n          activateTab(tabs[tabs.length - 1].dataset.unit);\n        }\n      });\n    });\n\n    \/\/ Default active tab\n    activateTab('cm');\n  \u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Washed Warrior","offers":[{"title":"S","offer_id":50610789417307,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"M","offer_id":50610789450075,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"L","offer_id":50610789482843,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"XL","offer_id":50610789515611,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"2XL","offer_id":50610789548379,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"3XL","offer_id":50610789581147,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0924\/6054\/8443\/files\/variant-image-7_e64df39f-2af6-43a6-8aad-db2361abb803.jpg?v=1747777742"},{"product_id":"fire-burst-alchemy-seal-vintage-graphic-tee-copy","title":"Red Eye Alchemist Anime-Inspired Vintage Tee","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"utf-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n  \u003ctitle\u003eProduct + Size Chart — Minimal\u003c\/title\u003e\n  \u003cstyle\u003e\n    :root{\n      --bg:#ffffff;\n      --ink:#0b0c0f;\n      --muted:#6b7280;\n      --line:#eceef1;\n      --accent:#111827;\n      --radius:18px;\n      --radius-sm:10px;\n      --shadow:0 6px 24px rgba(0,0,0,.05);\n      --shadow-soft:0 3px 12px rgba(0,0,0,.05);\n    }\n\n    html,body{height:100%}\n    html{color-scheme:light}\n    body{\n      margin:0;\n      background:var(--bg);\n      color:var(--ink);\n      font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Inter, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;\n      -webkit-font-smoothing:antialiased;\n      font-size:15px;\n      line-height:1.75;\n      font-weight:300;\n      letter-spacing:.15px;\n    }\n\n    \/* Narrow, minimal container *\/\n    .wrap{\n      max-width: 640px;\n      margin: 56px auto;\n      padding: 0 18px;\n      position: relative;\n    }\n\n    \/* Minimal card *\/\n    .card{\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      padding: 28px 26px;\n    }\n\n    .title{\n      margin: 0 0 10px;\n      font-size: clamp(20px, 4.4vw, 26px);\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    .lead{\n      margin: 0;\n      color:#1f2937;\n      max-width: 60ch;\n    }\n\n    .features{\n      list-style: none;\n      padding: 0;\n      margin: 16px 0 0;\n      display: grid;\n      gap: 10px;\n    }\n    .features li{\n      font-weight: 400;\n      display: inline-flex;\n      align-items: baseline;\n      gap: 8px;\n    }\n    .features li::before{\n      content: \"—\";\n      color: var(--accent);\n      opacity:.55;\n      font-weight: 600;\n    }\n\n    \/* Ghost trigger button *\/\n    .size-chart-button-container{ text-align:center; margin: 16px 0 0; }\n    .size-chart-open-button{\n      background:#fff;\n      color:var(--ink);\n      padding: 9px 16px;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing:.25px;\n      border-radius: 999px;\n      border: 1px solid var(--ink);\n      cursor: pointer;\n      text-transform: uppercase;\n      transition: transform .15s ease, box-shadow .2s ease, background .2s ease;\n      box-shadow: var(--shadow-soft);\n    }\n    .size-chart-open-button:hover,\n    .size-chart-open-button:focus-visible{\n      transform: translateY(-1px);\n      outline: none;\n      background: #fafafa;\n      box-shadow: 0 10px 26px rgba(0,0,0,.08);\n    }\n\n    \/* Collapse *\/\n    .size-chart-collapse{\n      width: 100%;\n      max-width: 560px;\n      margin: 18px auto 40px;\n      padding: 16px;\n      background:#fff;\n      border: 1px solid var(--line);\n      border-radius: var(--radius-sm);\n      box-shadow: var(--shadow-soft);\n    }\n    .hidden{ display:none; }\n\n    \/* Tabs: minimalist underline *\/\n    .size-chart-tabs{\n      display:flex;\n      justify-content:center;\n      gap: 18px;\n      margin-bottom: 12px;\n      border-bottom: 1px solid var(--line);\n      padding-bottom: 2px;\n    }\n    .tab-button{\n      appearance:none;\n      background:transparent;\n      color:var(--muted);\n      padding: 6px 2px;\n      font-size:12px;\n      font-weight:700;\n      letter-spacing:.3px;\n      border:none;\n      border-radius:0;\n      cursor:pointer;\n      position:relative;\n      transition: color .2s ease;\n    }\n    .tab-button:hover,\n    .tab-button:focus-visible{\n      color:var(--ink);\n      outline:none;\n    }\n    .tab-button[aria-selected=\"true\"]{\n      color:var(--ink);\n    }\n    .tab-button[aria-selected=\"true\"]::after{\n      content:\"\";\n      position:absolute;\n      left:0; right:0; bottom:-3px;\n      height: 2px;\n      background: var(--accent);\n      border-radius: 2px;\n    }\n\n    \/* Table: soft row dividers only *\/\n    .size-chart-table{\n      width:100%;\n      border-collapse: collapse;\n      background:#fff;\n    }\n    .size-chart-table th,\n    .size-chart-table td{\n      text-align:center;\n      padding: 10px 6px;\n      font-size:12px;\n      color:var(--ink);\n      border: none;\n      border-bottom: 1px solid var(--line);\n    }\n    .size-chart-table th{\n      font-weight: 700;\n      background: #fbfcfd;\n    }\n    .size-chart-table td:first-child,\n    .size-chart-table th:first-child{\n      text-align:left;\n      padding-left: 6px;\n      font-weight: 600;\n    }\n    .size-chart-table tbody tr:last-child td{\n      border-bottom: none;\n    }\n\n    .size-chart-note{\n      margin-top: 10px;\n      font-size: 11.5px;\n      color: var(--muted);\n      text-align: center;\n    }\n\n    @media (max-width:660px){\n      .wrap{ margin:44px auto; padding:0 14px; }\n      .card{ padding: 24px 20px; }\n      .size-chart-collapse{ max-width: 100%; }\n    }\n  \u003c\/style\u003e\n\n\n  \u003cmain class=\"wrap\" aria-labelledby=\"product-heading\"\u003e\n    \u003csection class=\"card\" aria-describedby=\"product-desc\"\u003e\n      \u003ch1 class=\"title\" id=\"product-heading\"\u003eBuilt for the Long Term\u003c\/h1\u003e\n      \u003cp class=\"lead\" id=\"product-desc\"\u003e\n        We make pieces to last. Cut from ultra-smooth 100% polyester mesh for cool comfort and durability, then\n        finished with professional-grade printing that resists cracking and fading. Everyday-ready, season after season.\n      \u003c\/p\u003e\n      \u003cul class=\"features\" role=\"list\"\u003e\n        \u003cli\u003e100% Polyester Mesh\u003c\/li\u003e\n        \u003cli\u003eWith pockets\u003c\/li\u003e\n        \u003cli\u003eHigh-quality printing\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- Trigger --\u003e\n    \u003cdiv class=\"size-chart-button-container\"\u003e\n      \u003cbutton id=\"sizeChartToggle\" class=\"size-chart-open-button\" aria-expanded=\"false\" aria-controls=\"sizeChartPanel\"\u003e\n        Size Chart For Shirt\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- Collapsible size chart --\u003e\n    \u003csection id=\"sizeChartPanel\" class=\"size-chart-collapse hidden\" aria-hidden=\"true\"\u003e\n      \u003c!-- Tabs --\u003e\n      \u003cdiv class=\"size-chart-tabs\" role=\"tablist\" aria-label=\"Size chart units\"\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-cm\" aria-selected=\"true\" aria-controls=\"tab-cm\" tabindex=\"0\" data-unit=\"cm\"\u003eCM\u003c\/button\u003e\n        \u003cbutton class=\"tab-button\" role=\"tab\" id=\"tab-btn-in\" aria-selected=\"false\" aria-controls=\"tab-in\" tabindex=\"-1\" data-unit=\"in\"\u003eInches\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- CM table --\u003e\n      \u003cdiv id=\"tab-cm\" role=\"tabpanel\" aria-labelledby=\"tab-btn-cm\"\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-cm\" aria-label=\"Shirt size chart in centimeters\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Inches table --\u003e\n      \u003cdiv id=\"tab-in\" role=\"tabpanel\" aria-labelledby=\"tab-btn-in\" hidden\u003e\n        \u003ctable class=\"size-chart-table\" id=\"table-in\" aria-label=\"Shirt size chart in inches\"\u003e\u003c\/table\u003e\n      \u003c\/div\u003e\n\n      \u003cp class=\"size-chart-note\"\u003e\n        Measurements are garment dimensions. Compare with a tee you own for best fit.\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003cnoscript\u003e\n      \u003cp style=\"text-align:center;font:14px\/1.4 ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;color:#555;\"\u003e\n        Enable JavaScript to view the interactive size chart.\n      \u003c\/p\u003e\n    \u003c\/noscript\u003e\n  \u003c\/main\u003e\n\n  \u003cscript\u003e\n    \/* ===== Data (single source of truth in CM) ===== *\/\n    const SIZE_DATA_CM = [\n      { size: \"S\",   length: 72, chest: 112, shoulder: 54,   sleeve: 24 },\n      { size: \"M\",   length: 74, chest: 116, shoulder: 55.5, sleeve: 25 },\n      { size: \"L\",   length: 76, chest: 120, shoulder: 57,   sleeve: 26 },\n      { size: \"XL\",  length: 78, chest: 124, shoulder: 58.5, sleeve: 27 },\n      { size: \"XXL\", length: 80, chest: 128, shoulder: 60,   sleeve: 28 },\n      { size: \"XXXL\",length: 82, chest: 132, shoulder: 61.5, sleeve: 29 }\n    ];\n\n    const COLUMNS = [\n      { key: \"size\",     label: \"Size\" },\n      { key: \"length\",   label: \"Length\" },\n      { key: \"chest\",    label: \"Chest\" },\n      { key: \"shoulder\", label: \"Shoulder\" },\n      { key: \"sleeve\",   label: \"Sleeve\" }\n    ];\n\n    \/\/ CM -\u003e inches (rounded to nearest 0.5\")\n    const cmToIn = cm =\u003e Math.round((cm \/ 2.54) * 2) \/ 2;\n\n    function renderTable(target, data, unit){\n      const thead = document.createElement(\"thead\");\n      const trh = document.createElement(\"tr\");\n\n      COLUMNS.forEach(col =\u003e {\n        const th = document.createElement(\"th\");\n        th.scope = \"col\";\n        th.textContent = col.key === \"size\" ? col.label : `${col.label} (${unit === \"cm\" ? \"cm\" : \"in\"})`;\n        trh.appendChild(th);\n      });\n      thead.appendChild(trh);\n\n      const tbody = document.createElement(\"tbody\");\n      data.forEach(row =\u003e {\n        const tr = document.createElement(\"tr\");\n        COLUMNS.forEach(col =\u003e {\n          const td = document.createElement(\"td\");\n          if(col.key === \"size\"){\n            td.textContent = row.size;\n            td.style.fontWeight = 600;\n          } else {\n            const val = unit === \"cm\" ? row[col.key] : cmToIn(row[col.key]);\n            td.textContent = Number.isInteger(val) ? String(val) : val.toFixed(1);\n          }\n          tr.appendChild(td);\n        });\n        tbody.appendChild(tr);\n      });\n\n      target.innerHTML = \"\";\n      target.appendChild(thead);\n      target.appendChild(tbody);\n    }\n\n    \/\/ Initial render\n    const tableCM = document.getElementById(\"table-cm\");\n    const tableIN = document.getElementById(\"table-in\");\n    renderTable(tableCM, SIZE_DATA_CM, \"cm\");\n    renderTable(tableIN, SIZE_DATA_CM, \"in\");\n\n    \/\/ Collapsible behavior\n    const toggleBtn = document.getElementById(\"sizeChartToggle\");\n    const panel = document.getElementById(\"sizeChartPanel\");\n\n    function setPanel(open){\n      panel.classList.toggle(\"hidden\", !open);\n      panel.setAttribute(\"aria-hidden\", String(!open));\n      toggleBtn.setAttribute(\"aria-expanded\", String(!!open));\n      if(open){ document.getElementById(\"tab-btn-cm\").focus(); }\n    }\n    toggleBtn.addEventListener(\"click\", () =\u003e {\n      const isOpen = toggleBtn.getAttribute(\"aria-expanded\") === \"true\";\n      setPanel(!isOpen);\n    });\n\n    \/\/ Tabs: click + arrow keys + roving tabindex\n    const tabs = Array.from(document.querySelectorAll('[role=\"tab\"]'));\n    const tabMap = {\n      cm: { btn: document.getElementById(\"tab-btn-cm\"), panel: document.getElementById(\"tab-cm\") },\n      in: { btn: document.getElementById(\"tab-btn-in\"), panel: document.getElementById(\"tab-in\") }\n    };\n\n    function activateTab(key){\n      for(const k in tabMap){\n        const { btn, panel } = tabMap[k];\n        const selected = k === key;\n        btn.setAttribute(\"aria-selected\", String(selected));\n        btn.tabIndex = selected ? 0 : -1;\n        panel.hidden = !selected;\n      }\n      tabMap[key].btn.focus();\n    }\n\n    tabs.forEach(btn =\u003e {\n      btn.addEventListener(\"click\", () =\u003e activateTab(btn.dataset.unit));\n      btn.addEventListener(\"keydown\", (e) =\u003e {\n        const idx = tabs.indexOf(btn);\n        if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){\n          e.preventDefault();\n          const next = tabs[(idx + 1) % tabs.length];\n          activateTab(next.dataset.unit);\n        } else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){\n          e.preventDefault();\n          const prev = tabs[(idx - 1 + tabs.length) % tabs.length];\n          activateTab(prev.dataset.unit);\n        } else if(e.key === 'Home'){\n          e.preventDefault();\n          activateTab(tabs[0].dataset.unit);\n        } else if(e.key === 'End'){\n          e.preventDefault();\n          activateTab(tabs[tabs.length - 1].dataset.unit);\n        }\n      });\n    });\n\n    \/\/ Default active tab\n    activateTab('cm');\n  \u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Washed Warrior","offers":[{"title":"S","offer_id":50610829689179,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"M","offer_id":50610829721947,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"L","offer_id":50610829754715,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"XL","offer_id":50610829787483,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"2XL","offer_id":50610829820251,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true},{"title":"3XL","offer_id":50610829853019,"sku":null,"price":22.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0924\/6054\/8443\/files\/variant-image-8_adcb8f64-4f27-4152-b3f4-dd10d94af869.jpg?v=1747778020"}],"url":"https:\/\/washedwarrior.com\/collections\/alchemist-archive.oembed","provider":"Washed Warrior","version":"1.0","type":"link"}