Skip to product information
1 of 1

Washed Warrior

Regular price £29.99 GBP
Regular price £59.99 GBP Sale price £29.99 GBP
Sale Sold out
Taxes included. Shipping calculated at checkout.
Size

<body>   <meta charset="utf-8">   <meta name="viewport" content="width=device-width, initial-scale=1">   <title>Product + Size Chart — Minimal</title>   <style>     :root{       --bg:#ffffff;       --ink:#0b0c0f;       --muted:#6b7280;       --line:#eceef1;       --accent:#111827;       --radius:18px;       --radius-sm:10px;       --shadow:0 6px 24px rgba(0,0,0,.05);       --shadow-soft:0 3px 12px rgba(0,0,0,.05);     }     html,body{height:100%}     html{color-scheme:light}     body{       margin:0;       background:var(--bg);       color:var(--ink);       font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Inter, "Helvetica Neue", Arial, "Noto Sans", sans-serif;       -webkit-font-smoothing:antialiased;       font-size:15px;       line-height:1.75;       font-weight:300;       letter-spacing:.15px;     }     /* Narrow, minimal container */     .wrap{       max-width: 640px;       margin: 56px auto;       padding: 0 18px;       position: relative;     }     /* Minimal card */     .card{       background:#fff;       border: 1px solid var(--line);       border-radius: var(--radius);       box-shadow: var(--shadow);       padding: 28px 26px;     }     .title{       margin: 0 0 10px;       font-size: clamp(20px, 4.4vw, 26px);       font-weight: 700;       letter-spacing: -0.015em;     }     .lead{       margin: 0;       color:#1f2937;       max-width: 60ch;     }     .features{       list-style: none;       padding: 0;       margin: 16px 0 0;       display: grid;       gap: 10px;     }     .features li{       font-weight: 400;       display: inline-flex;       align-items: baseline;       gap: 8px;     }     .features li::before{       content: "—";       color: var(--accent);       opacity:.55;       font-weight: 600;     }     /* Ghost trigger button */     .size-chart-button-container{ text-align:center; margin: 16px 0 0; }     .size-chart-open-button{       background:#fff;       color:var(--ink);       padding: 9px 16px;       font-size: 12px;       font-weight: 700;       letter-spacing:.25px;       border-radius: 999px;       border: 1px solid var(--ink);       cursor: pointer;       text-transform: uppercase;       transition: transform .15s ease, box-shadow .2s ease, background .2s ease;       box-shadow: var(--shadow-soft);     }     .size-chart-open-button:hover,     .size-chart-open-button:focus-visible{       transform: translateY(-1px);       outline: none;       background: #fafafa;       box-shadow: 0 10px 26px rgba(0,0,0,.08);     }     /* Collapse */     .size-chart-collapse{       width: 100%;       max-width: 560px;       margin: 18px auto 40px;       padding: 16px;       background:#fff;       border: 1px solid var(--line);       border-radius: var(--radius-sm);       box-shadow: var(--shadow-soft);     }     .hidden{ display:none; }     /* Tabs: minimalist underline */     .size-chart-tabs{       display:flex;       justify-content:center;       gap: 18px;       margin-bottom: 12px;       border-bottom: 1px solid var(--line);       padding-bottom: 2px;     }     .tab-button{       appearance:none;       background:transparent;       color:var(--muted);       padding: 6px 2px;       font-size:12px;       font-weight:700;       letter-spacing:.3px;       border:none;       border-radius:0;       cursor:pointer;       position:relative;       transition: color .2s ease;     }     .tab-button:hover,     .tab-button:focus-visible{       color:var(--ink);       outline:none;     }     .tab-button[aria-selected="true"]{       color:var(--ink);     }     .tab-button[aria-selected="true"]::after{       content:"";       position:absolute;       left:0; right:0; bottom:-3px;       height: 2px;       background: var(--accent);       border-radius: 2px;     }     /* Table: soft row dividers only */     .size-chart-table{       width:100%;       border-collapse: collapse;       background:#fff;     }     .size-chart-table th,     .size-chart-table td{       text-align:center;       padding: 10px 6px;       font-size:12px;       color:var(--ink);       border: none;       border-bottom: 1px solid var(--line);     }     .size-chart-table th{       font-weight: 700;       background: #fbfcfd;     }     .size-chart-table td:first-child,     .size-chart-table th:first-child{       text-align:left;       padding-left: 6px;       font-weight: 600;     }     .size-chart-table tbody tr:last-child td{       border-bottom: none;     }     .size-chart-note{       margin-top: 10px;       font-size: 11.5px;       color: var(--muted);       text-align: center;     }     @media (max-width:660px){       .wrap{ margin:44px auto; padding:0 14px; }       .card{ padding: 24px 20px; }       .size-chart-collapse{ max-width: 100%; }     }   </style>   <main class="wrap" aria-labelledby="product-heading">     <section class="card" aria-describedby="product-desc">       <h1 class="title" id="product-heading">Built for the Long Term</h1>       <p class="lead" id="product-desc">         We make pieces to last. Cut from ultra-smooth 100% polyester mesh for cool comfort and durability, then         finished with professional-grade printing that resists cracking and fading. Everyday-ready, season after season.       </p>       <ul class="features" role="list">         <li>100% Polyester Mesh</li>         <li>With pockets</li>         <li>High-quality printing</li>       </ul>     </section>     <!-- Trigger -->     <div class="size-chart-button-container">       <button id="sizeChartToggle" class="size-chart-open-button" aria-expanded="false" aria-controls="sizeChartPanel">         Size Chart For Shirt       </button>     </div>     <!-- Collapsible size chart -->     <section id="sizeChartPanel" class="size-chart-collapse hidden" aria-hidden="true">       <!-- Tabs -->       <div class="size-chart-tabs" role="tablist" aria-label="Size chart units">         <button class="tab-button" role="tab" id="tab-btn-cm" aria-selected="true" aria-controls="tab-cm" tabindex="0" data-unit="cm">CM</button>         <button class="tab-button" role="tab" id="tab-btn-in" aria-selected="false" aria-controls="tab-in" tabindex="-1" data-unit="in">Inches</button>       </div>       <!-- CM table -->       <div id="tab-cm" role="tabpanel" aria-labelledby="tab-btn-cm">         <table class="size-chart-table" id="table-cm" aria-label="Shirt size chart in centimeters"></table>       </div>       <!-- Inches table -->       <div id="tab-in" role="tabpanel" aria-labelledby="tab-btn-in" hidden>         <table class="size-chart-table" id="table-in" aria-label="Shirt size chart in inches"></table>       </div>       <p class="size-chart-note">         Measurements are garment dimensions. Compare with a tee you own for best fit.       </p>     </section>     <noscript>       <p style="text-align:center;font:14px/1.4 ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;color:#555;">         Enable JavaScript to view the interactive size chart.       </p>     </noscript>   </main>   <script>     /* ===== Data (single source of truth in CM) ===== */     const SIZE_DATA_CM = [       { size: "S",   length: 72, chest: 112, shoulder: 54,   sleeve: 24 },       { size: "M",   length: 74, chest: 116, shoulder: 55.5, sleeve: 25 },       { size: "L",   length: 76, chest: 120, shoulder: 57,   sleeve: 26 },       { size: "XL",  length: 78, chest: 124, shoulder: 58.5, sleeve: 27 },       { size: "XXL", length: 80, chest: 128, shoulder: 60,   sleeve: 28 },       { size: "XXXL",length: 82, chest: 132, shoulder: 61.5, sleeve: 29 }     ];     const COLUMNS = [       { key: "size",     label: "Size" },       { key: "length",   label: "Length" },       { key: "chest",    label: "Chest" },       { key: "shoulder", label: "Shoulder" },       { key: "sleeve",   label: "Sleeve" }     ];     // CM -> inches (rounded to nearest 0.5")     const cmToIn = cm => Math.round((cm / 2.54) * 2) / 2;     function renderTable(target, data, unit){       const thead = document.createElement("thead");       const trh = document.createElement("tr");       COLUMNS.forEach(col => {         const th = document.createElement("th");         th.scope = "col";         th.textContent = col.key === "size" ? col.label : `${col.label} (${unit === "cm" ? "cm" : "in"})`;         trh.appendChild(th);       });       thead.appendChild(trh);       const tbody = document.createElement("tbody");       data.forEach(row => {         const tr = document.createElement("tr");         COLUMNS.forEach(col => {           const td = document.createElement("td");           if(col.key === "size"){             td.textContent = row.size;             td.style.fontWeight = 600;           } else {             const val = unit === "cm" ? row[col.key] : cmToIn(row[col.key]);             td.textContent = Number.isInteger(val) ? String(val) : val.toFixed(1);           }           tr.appendChild(td);         });         tbody.appendChild(tr);       });       target.innerHTML = "";       target.appendChild(thead);       target.appendChild(tbody);     }     // Initial render     const tableCM = document.getElementById("table-cm");     const tableIN = document.getElementById("table-in");     renderTable(tableCM, SIZE_DATA_CM, "cm");     renderTable(tableIN, SIZE_DATA_CM, "in");     // Collapsible behavior     const toggleBtn = document.getElementById("sizeChartToggle");     const panel = document.getElementById("sizeChartPanel");     function setPanel(open){       panel.classList.toggle("hidden", !open);       panel.setAttribute("aria-hidden", String(!open));       toggleBtn.setAttribute("aria-expanded", String(!!open));       if(open){ document.getElementById("tab-btn-cm").focus(); }     }     toggleBtn.addEventListener("click", () => {       const isOpen = toggleBtn.getAttribute("aria-expanded") === "true";       setPanel(!isOpen);     });     // Tabs: click + arrow keys + roving tabindex     const tabs = Array.from(document.querySelectorAll('[role="tab"]'));     const tabMap = {       cm: { btn: document.getElementById("tab-btn-cm"), panel: document.getElementById("tab-cm") },       in: { btn: document.getElementById("tab-btn-in"), panel: document.getElementById("tab-in") }     };     function activateTab(key){       for(const k in tabMap){         const { btn, panel } = tabMap[k];         const selected = k === key;         btn.setAttribute("aria-selected", String(selected));         btn.tabIndex = selected ? 0 : -1;         panel.hidden = !selected;       }       tabMap[key].btn.focus();     }     tabs.forEach(btn => {       btn.addEventListener("click", () => activateTab(btn.dataset.unit));       btn.addEventListener("keydown", (e) => {         const idx = tabs.indexOf(btn);         if(e.key === 'ArrowRight' || e.key === 'ArrowDown'){           e.preventDefault();           const next = tabs[(idx + 1) % tabs.length];           activateTab(next.dataset.unit);         } else if(e.key === 'ArrowLeft' || e.key === 'ArrowUp'){           e.preventDefault();           const prev = tabs[(idx - 1 + tabs.length) % tabs.length];           activateTab(prev.dataset.unit);         } else if(e.key === 'Home'){           e.preventDefault();           activateTab(tabs[0].dataset.unit);         } else if(e.key === 'End'){           e.preventDefault();           activateTab(tabs[tabs.length - 1].dataset.unit);         }       });     });     // Default active tab     activateTab('cm');   </script> </body>

View full details

Customer Reviews

0.0
(0 reviews)

Free Shipping

Available on popular items. Tracked upgrades at checkout.

30-Day Free Returns

Change of mind friendly—prepaid label, easy process.

Fast Dispatch

Most orders ship within 24–48 hours, packed with care.

Secure Checkout

Encrypted payments. Major cards & PayPal accepted.