{"product_id":"italian-porcelain-tiles-beige","title":"Italian Porcelain Tiles - Beige | 600x300x10mm | £15\/m²","description":"\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003eBrand new, top-quality Italian porcelain tiles in a natural stone effect. Grey and beige tones that look great together or on their own - perfect for patios, bathrooms, kitchens, hallways or external wall cladding.\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003e✅ Brand new \/ unused\u003cbr\u003e✅ Hard-wearing 10mm porcelain\u003cbr\u003e✅ Suitable indoor \u0026amp; outdoor\u003cbr\u003e✅ Size: 600 x 300 x 10mm\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003e💷 £3 per tile or £15\/m²\u003cbr\u003e📦 In stock now: Beige 77m² · Grey 52m²\u003cbr\u003e🏷️ Multi-buy \u0026amp; job-lot discounts - the more you take, the better the price\u003c\/p\u003e\n\u003cp class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"\u003eCollection from Leicester LE6. Message or call for your best price and to arrange a viewing. \u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eCall: \u003cspan class=\"atc-button--text\"\u003e \u003ca href=\"tel:+447872600280\"\u003e07872 600280\u003c\/a\u003e \u003c\/span\u003e for further information\u003c\/p\u003e\n\u003cdiv class=\"gbtc\" aria-label=\"Tile cost calculator\"\u003e\n  \u003cdiv class=\"gbtc-sheet\"\u003e\n\n    \u003cheader class=\"gbtc-masthead\"\u003e\n      \u003cdiv class=\"gbtc-eyebrow\"\u003ePorcelain · Natural stone effect · 600 × 300 × 10 mm\u003c\/div\u003e\n      \u003ch1\u003eCost calculator\u003c\/h1\u003e\n      \u003cdiv class=\"gbtc-rates\" aria-hidden=\"true\"\u003e\n        \u003cspan\u003e£15 \u003cb\u003e\/ m²\u003c\/b\u003e\u003c\/span\u003e\n        \u003cspan\u003e£3 \u003cb\u003e\/ tile\u003c\/b\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/header\u003e\n\n    \u003csection class=\"gbtc-controls\"\u003e\n      \u003cdiv class=\"gbtc-ctl\"\u003e\n        \u003cspan class=\"gbtc-lbl\"\u003eColour \u0026amp; stock\u003c\/span\u003e\n        \u003cdiv class=\"gbtc-seg gbtc-seg-colour\" role=\"group\" aria-label=\"Choose colour\"\u003e\n          \u003cbutton type=\"button\" data-colour=\"beige\" class=\"active\" aria-pressed=\"true\"\u003eBeige · 77 m²\u003c\/button\u003e\n         \n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"gbtc-ctl\"\u003e\n        \u003cspan class=\"gbtc-lbl\"\u003eWork it out\u003c\/span\u003e\n        \u003cdiv class=\"gbtc-seg gbtc-seg-mode\" role=\"group\" aria-label=\"Choose calculation mode\"\u003e\n          \u003cbutton type=\"button\" data-mode=\"area\" class=\"active\" aria-pressed=\"true\"\u003eBy area (m²)\u003c\/button\u003e\n          \u003cbutton type=\"button\" data-mode=\"tiles\" aria-pressed=\"false\"\u003eBy tile count\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"gbtc-io\"\u003e\n      \u003cdiv class=\"gbtc-input-col\"\u003e\n        \u003clabel class=\"gbtc-field-lbl\" data-r=\"fieldLbl\"\u003eArea to cover\u003c\/label\u003e\n        \u003cdiv class=\"gbtc-field\" data-r=\"field\"\u003e\n          \u003cinput data-r=\"input\" type=\"number\" min=\"0\" step=\"0.1\" inputmode=\"decimal\" placeholder=\"0\" value=\"10\" aria-label=\"Area to cover in square metres\"\u003e\n          \u003cspan class=\"gbtc-unit\" data-r=\"unit\"\u003em²\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003clabel class=\"gbtc-waste\" data-r=\"wasteWrap\"\u003e\n          \u003cinput data-r=\"waste\" type=\"checkbox\"\u003e Add 10% for cuts \u0026amp; breakages\n        \u003c\/label\u003e\n        \u003cp class=\"gbtc-hint\" data-r=\"fieldHint\"\u003e5 tiles per m² · £15 per m² (£3 per tile).\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"gbtc-results\"\u003e\n      \u003cdiv class=\"gbtc-headline\"\u003e\n        \u003cspan class=\"gbtc-cap\" data-r=\"headlineCap\"\u003eTotal cost\u003c\/span\u003e\n        \u003cspan class=\"gbtc-big\" data-r=\"headlinePrice\"\u003e£150.00\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"gbtc-grid\"\u003e\n        \u003cdiv class=\"gbtc-cell\"\u003e\n\u003cdiv class=\"gbtc-k\"\u003eTiles needed\u003c\/div\u003e\n\u003cdiv class=\"gbtc-v\" data-r=\"cTiles\"\u003e50 \u003csmall\u003etiles\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"gbtc-cell\"\u003e\n\u003cdiv class=\"gbtc-k\"\u003eArea covered\u003c\/div\u003e\n\u003cdiv class=\"gbtc-v\" data-r=\"cArea\"\u003e10.00 \u003csmall\u003em²\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"gbtc-cell\"\u003e\n\u003cdiv class=\"gbtc-k\"\u003eStock left after\u003c\/div\u003e\n\u003cdiv class=\"gbtc-v\" data-r=\"cStock\"\u003e67.0 \u003csmall\u003em² beige\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"gbtc-note\" data-r=\"note\" style=\"border-left: 3px solid rgb(75, 122, 82); background: rgb(237, 243, 237); color: rgb(37, 74, 44);\"\u003e50 tiles cover 10.00 m² at £3.00 each — \u003cb\u003e£150.00\u003c\/b\u003e total (£15.00\/m²). In stock: 67.0 m² of beige would remain.\u003c\/div\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"gbtc-foot\"\u003e\n    Rates: £15\/m² and £3\/tile · 5 tiles per m² · Tile 600 × 300 × 10 mm · Stock: Beige 77 m², Grey 52 m².\u003cbr\u003e\n    A guide only — confirm quantities, wastage and final price before purchase.\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026family=JetBrains+Mono:wght@400;500;700\u0026display=swap');\n\n  .gbtc{\n    --card:#FBFAF7; --ink:#26251F; --muted:#726F66; --line:#DAD7CF; --line-strong:#C7C3B8;\n    --beige-dark:#A98F6C; --grey-dark:#767879; --accent:var(--beige-dark);\n    box-sizing:border-box; width:100%; max-width:760px; margin:24px auto;\n    font-family:'Archivo',system-ui,sans-serif; color:var(--ink); line-height:1.45;\n    -webkit-font-smoothing:antialiased; -webkit-text-size-adjust:100%;\n  }\n  .gbtc *{box-sizing:border-box;}\n  .gbtc *,.gbtc *::before,.gbtc *::after{min-width:0;}\n\n  .gbtc .gbtc-sheet{\n    width:100%; background:var(--card); border:1px solid var(--line-strong);\n    box-shadow:0 1px 0 #fff inset, 0 18px 40px -28px rgba(38,37,31,.5);\n  }\n\n  \/* Masthead *\/\n  .gbtc .gbtc-masthead{padding:clamp(22px,5vw,30px) clamp(18px,5vw,32px) clamp(20px,5vw,26px);border-bottom:1px solid var(--line);}\n  .gbtc .gbtc-eyebrow{font-size:clamp(10px,2.8vw,11px);letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:600;line-height:1.5;}\n  .gbtc h1{font-size:clamp(24px,7vw,42px);line-height:1.04;letter-spacing:-.02em;font-weight:800;margin:12px 0 0;color:var(--ink);overflow-wrap:break-word;}\n  .gbtc .gbtc-rates{display:flex;flex-wrap:wrap;margin-top:20px;border:1px solid var(--line-strong);width:fit-content;max-width:100%;}\n  .gbtc .gbtc-rates span{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:500;padding:8px 16px;color:var(--ink);}\n  .gbtc .gbtc-rates span:first-child{border-right:1px solid var(--line-strong);}\n  .gbtc .gbtc-rates b{color:var(--muted);font-weight:400;}\n\n  \/* Controls *\/\n  .gbtc .gbtc-controls{display:flex;flex-wrap:wrap;gap:18px 22px;padding:clamp(18px,4vw,24px) clamp(18px,5vw,32px) 4px;}\n  .gbtc .gbtc-ctl{flex:1 1 220px;}\n  .gbtc .gbtc-lbl{display:block;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-weight:600;margin-bottom:9px;}\n  .gbtc .gbtc-seg{display:flex;border:1px solid var(--line-strong);}\n  .gbtc .gbtc-seg button{\n    flex:1;min-height:46px;font-family:inherit;font-size:13px;font-weight:500;padding:11px 8px;\n    background:transparent;border:0;color:var(--muted);cursor:pointer;\n    transition:background .18s ease,color .18s ease;\n  }\n  .gbtc .gbtc-seg button + button{border-left:1px solid var(--line-strong);}\n  .gbtc .gbtc-seg button:hover{color:var(--ink);}\n  .gbtc .gbtc-seg button.active{background:var(--accent);color:#fff;}\n  .gbtc .gbtc-seg button.active:hover{color:#fff;}\n  .gbtc .gbtc-seg button:focus-visible{outline:2px solid var(--ink);outline-offset:2px;}\n\n  \/* Input *\/\n  .gbtc .gbtc-io{display:flex;flex-wrap:wrap;gap:26px;padding:clamp(20px,4vw,26px) clamp(18px,5vw,32px) 8px;}\n  .gbtc .gbtc-input-col{flex:1 1 240px;}\n  .gbtc .gbtc-field-lbl{display:block;font-size:14px;font-weight:600;margin-bottom:10px;}\n  .gbtc .gbtc-field{display:flex;align-items:stretch;border:1.5px solid var(--line-strong);background:#fff;transition:border-color .18s ease;}\n  .gbtc .gbtc-field:focus-within{border-color:var(--ink);}\n  .gbtc .gbtc-field input{\n    flex:1;min-width:0;border:0;outline:0;background:transparent;\n    font-family:'JetBrains Mono',monospace;font-size:clamp(22px,5.5vw,26px);font-weight:500;\n    padding:12px 14px;color:var(--ink);\n  }\n  .gbtc .gbtc-unit{display:flex;align-items:center;padding:0 clamp(12px,3vw,16px);font-family:'JetBrains Mono',monospace;font-size:15px;color:var(--muted);background:#F1EEE8;border-left:1px solid var(--line);white-space:nowrap;}\n  .gbtc .gbtc-waste{display:flex;align-items:center;gap:9px;margin-top:14px;font-size:13.5px;color:var(--ink);cursor:pointer;user-select:none;}\n  .gbtc .gbtc-waste input{width:18px;height:18px;accent-color:var(--accent);cursor:pointer;flex:none;}\n  .gbtc .gbtc-hint{font-size:12.5px;color:var(--muted);margin-top:6px;overflow-wrap:break-word;}\n\n  \/* Results *\/\n  .gbtc .gbtc-results{padding:clamp(16px,4vw,20px) clamp(18px,5vw,32px) clamp(26px,6vw,34px);}\n  .gbtc .gbtc-headline{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:6px 18px;padding:22px 0 20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);}\n  .gbtc .gbtc-cap{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-weight:600;}\n  .gbtc .gbtc-big{font-family:'JetBrains Mono',monospace;font-size:clamp(34px,10vw,56px);font-weight:700;line-height:1;letter-spacing:-.02em;overflow-wrap:anywhere;}\n  .gbtc .gbtc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-top:22px;}\n  .gbtc .gbtc-cell{padding:16px;border:1px solid var(--line);}\n  .gbtc .gbtc-k{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;}\n  .gbtc .gbtc-v{font-family:'JetBrains Mono',monospace;font-size:20px;font-weight:500;margin-top:6px;overflow-wrap:anywhere;}\n  .gbtc .gbtc-v small{font-size:12px;color:var(--muted);font-weight:400;}\n\n  .gbtc .gbtc-note{margin-top:18px;padding:13px 16px;font-size:13.5px;border-left:3px solid var(--accent);background:#F3F0E9;overflow-wrap:break-word;}\n  .gbtc .gbtc-note b{font-weight:700;}\n\n  .gbtc .gbtc-foot{max-width:760px;margin:16px auto 0;padding:0 clamp(4px,4vw,0px);font-size:11.5px;color:var(--muted);text-align:center;line-height:1.6;overflow-wrap:break-word;}\n\n  \/* Phones: stack the two control groups, tighten spacing *\/\n  @media (max-width:560px){\n    .gbtc{margin:16px auto;}\n    .gbtc .gbtc-ctl{flex:1 1 100%;}\n    .gbtc .gbtc-headline{padding:18px 0 16px;}\n    .gbtc .gbtc-grid{gap:8px;}\n    .gbtc .gbtc-cell{padding:14px;}\n  }\n  \/* Very small screens: single-column stats *\/\n  @media (max-width:380px){\n    .gbtc .gbtc-grid{grid-template-columns:1fr;}\n  }\n  @media (prefers-reduced-motion:reduce){\n    .gbtc *{transition:none !important;}\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function(){\n  function init(root){\n    if(root.__gbtcReady) return;      \/\/ in-memory flag (never saved into the page)\n    root.__gbtcReady = true;\n\n    var TILES_PER_M2 = 5, PRICE_M2 = 15, PRICE_TILE = 3;   \/\/ 5 tiles = 1 m²  -\u003e  £3×5 = £15\/m²\n    var STOCK = { beige: 77, grey: 52 };\n    var mode = 'area', colour = 'beige';\n\n    var r = function(n){ return root.querySelector('[data-r=\"'+n+'\"]'); };\n    var input = r('input');\n    var gbp = function(n){ return n.toLocaleString('en-GB',{style:'currency',currency:'GBP'}); };\n    var num = function(n,d){ return n.toLocaleString('en-GB',{minimumFractionDigits:d||0,maximumFractionDigits:d||0}); };\n\n    var colourBtns = root.querySelectorAll('.gbtc-seg-colour button');\n    var modeBtns   = root.querySelectorAll('.gbtc-seg-mode button');\n\n    function setColour(c){\n      colour = c;\n      colourBtns.forEach(function(b){\n        var on = b.dataset.colour===c;\n        b.classList.toggle('active',on);\n        b.setAttribute('aria-pressed', on?'true':'false');\n      });\n      root.style.setProperty('--accent', c==='beige' ? 'var(--beige-dark)' : 'var(--grey-dark)');\n      render();\n    }\n\n    function setMode(m){\n      mode = m;\n      modeBtns.forEach(function(b){\n        var on = b.dataset.mode===m;\n        b.classList.toggle('active',on);\n        b.setAttribute('aria-pressed', on?'true':'false');\n      });\n      if(m==='area'){\n        r('fieldLbl').textContent='Area to cover';\n        r('unit').textContent='m²';\n        r('wasteWrap').style.display='flex';\n        r('fieldHint').textContent='5 tiles per m² · £15 per m² (£3 per tile).';\n        input.step='0.1'; input.value='10';\n        input.setAttribute('aria-label','Area to cover in square metres');\n      } else {\n        r('fieldLbl').textContent='Number of tiles';\n        r('unit').textContent='tiles';\n        r('wasteWrap').style.display='none';\n        r('fieldHint').textContent='£3 per tile · 5 tiles per m² (£15 per m²).';\n        input.step='1'; input.value='50';\n        input.setAttribute('aria-label','Number of tiles');\n      }\n      render();\n    }\n\n    function render(){\n      var raw = parseFloat(input.value);\n      if(!isFinite(raw) || raw\u003c0) raw = 0;\n\n      var area, tiles;\n      if(mode==='area'){\n        area = raw;\n        if(r('waste').checked) area = area * 1.10;\n        tiles = Math.ceil(area * TILES_PER_M2);\n      } else {\n        tiles = Math.floor(raw);\n        area = tiles \/ TILES_PER_M2;\n      }\n\n      var cost = tiles * PRICE_TILE;   \/\/ = area * PRICE_M2 (same basis)\n\n      r('headlinePrice').textContent = raw\u003e0 ? gbp(cost) : '£0.00';\n      r('cTiles').innerHTML = raw\u003e0 ? num(tiles)+' \u003csmall\u003etiles\u003c\/small\u003e' : '—';\n      r('cArea').innerHTML  = raw\u003e0 ? num(area,2)+' \u003csmall\u003em²\u003c\/small\u003e' : '—';\n\n      var stockM2 = STOCK[colour];\n      var leftM2 = stockM2 - area;\n      r('cStock').innerHTML = raw\u003e0\n        ? num(Math.max(0,leftM2),1)+' \u003csmall\u003em² '+colour+'\u003c\/small\u003e'\n        : num(stockM2,0)+' \u003csmall\u003em²\u003c\/small\u003e';\n\n      var note = r('note');\n      note.style.borderLeftWidth='3px'; note.style.borderLeftStyle='solid';\n      if(raw\u003c=0){\n        note.style.borderLeftColor='var(--accent)'; note.style.background='#F3F0E9'; note.style.color='';\n        note.textContent = 'Enter a value to see the price.';\n      } else if(area \u003e stockM2){\n        var over = area - stockM2;\n        note.style.borderLeftColor='#B5442E'; note.style.background='#F7EAE6'; note.style.color='#5c2318';\n        note.innerHTML = '\u003cb\u003eOver available stock.\u003c\/b\u003e This needs '+num(area,2)+'\\u00A0m² but only '+num(stockM2)+'\\u00A0m² of '+colour+' is in stock — '+num(over,2)+'\\u00A0m² short. Mix colours or ask about restock.';\n      } else {\n        note.style.borderLeftColor='#4B7A52'; note.style.background='#EDF3ED'; note.style.color='#254a2c';\n        note.innerHTML = num(tiles)+' tiles cover '+num(area,2)+'\\u00A0m² at '+gbp(PRICE_TILE)+' each — \u003cb\u003e'+gbp(cost)+'\u003c\/b\u003e total ('+gbp(PRICE_M2)+'\/m²). In stock: '+num(leftM2,1)+'\\u00A0m² of '+colour+' would remain.';\n      }\n    }\n\n    colourBtns.forEach(function(b){ b.addEventListener('click', function(){ setColour(b.dataset.colour); }); });\n    modeBtns.forEach(function(b){ b.addEventListener('click', function(){ setMode(b.dataset.mode); }); });\n    input.addEventListener('input', render);\n    r('waste').addEventListener('change', render);\n\n    render();\n  }\n\n  function boot(){ document.querySelectorAll('.gbtc').forEach(init); }\n  if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', boot); }\n  else { boot(); }\n})();\n\u003c\/script\u003e","brand":"GS Supplies","offers":[{"title":"Default Title","offer_id":57763509305726,"sku":null,"price":15.0,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0017\/6521\/2272\/files\/WhatsAppImage2026-07-29at10.51.47_4.jpg?v=1785319509","url":"https:\/\/gardensense.online\/products\/italian-porcelain-tiles-beige","provider":"GS Supplies","version":"1.0","type":"link"}