{"id":3583,"date":"2026-05-14T15:41:07","date_gmt":"2026-05-14T15:41:07","guid":{"rendered":"https:\/\/www.passionnementtennis.com\/?page_id=3583"},"modified":"2026-05-14T15:47:12","modified_gmt":"2026-05-14T15:47:12","slug":"pricing","status":"publish","type":"page","link":"https:\/\/www.passionnementtennis.com\/fr\/pricing\/","title":{"rendered":"pricing"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"3583\" class=\"elementor elementor-3583\">\n\t\t\t\t<div class=\"elementor-element elementor-element-699d934 e-flex e-con-boxed e-con e-parent\" data-id=\"699d934\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-21c9d4a elementor-widget elementor-widget-html\" data-id=\"21c9d4a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\nSEO title: Tennis Stringing Prices London | Racket Restringing Costs\nMeta description: Tennis stringing prices in London from \u00a320. Clear costs for own-string restringing, Tier 1, Tier 2 and Tier 3 strings, fast turnaround and add-ons.\nPrimary keyword: tennis stringing prices\nSuggested slug: \/tennis-stringing-prices\n-->\n<div id=\"pt-stringing-page\" style=\"font-family:Georgia,'Times New Roman',serif;color:#173629;background:#f7f5ef;\">\n  <style>\n    #pt-stringing-page *{box-sizing:border-box}\n    #pt-stringing-page .pt-wrap{max-width:1180px;margin:0 auto;padding:0 20px}\n    #pt-stringing-page .pt-btn{display:inline-block;padding:14px 24px;border-radius:999px;text-decoration:none;font-weight:700;transition:all .2s ease;margin:6px 8px 6px 0;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page .pt-btn-primary{background:#173629;color:#fff}\n    #pt-stringing-page .pt-btn-secondary{background:#d8b36a;color:#173629}\n    #pt-stringing-page .pt-btn:hover{transform:translateY(-1px);opacity:.95}\n    #pt-stringing-page .pt-hero{background:linear-gradient(135deg,rgba(0,0,0,.68),rgba(12,30,22,.78)),url('https:\/\/newyorktennismagazine.com\/wp-content\/uploads\/2017\/09\/03_1-1024x683.jpg') center\/cover no-repeat;color:#fff;padding:92px 0 78px}\n    #pt-stringing-page h1,#pt-stringing-page h2,#pt-stringing-page h3,#pt-stringing-page h4{margin:0 0 14px;line-height:1.1}\n    #pt-stringing-page h1{font-size:56px;color:#fff!important;text-shadow:0 2px 18px rgba(0,0,0,.6)}\n    #pt-stringing-page h2{font-size:38px}\n    #pt-stringing-page h3{font-size:24px}\n    #pt-stringing-page p{margin:0 0 16px;line-height:1.7;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page .pt-sub{font-size:20px;max-width:820px;color:#fff!important;text-shadow:0 2px 14px rgba(0,0,0,.55)}\n    #pt-stringing-page .pt-section{padding:68px 0}\n    #pt-stringing-page .pt-grid-2{display:grid;grid-template-columns:1.1fr .9fr;gap:28px}\n    #pt-stringing-page .pt-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}\n    #pt-stringing-page .pt-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}\n    #pt-stringing-page .pt-card{background:#fff;border:1px solid rgba(23,54,41,.08);border-radius:18px;padding:26px;box-shadow:0 8px 30px rgba(0,0,0,.05)}\n    #pt-stringing-page .pt-dark{background:#173629;color:#fff}\n    #pt-stringing-page .pt-dark *{color:#fff!important}\n    #pt-stringing-page .pt-price-card{text-align:center;padding:28px 20px}\n    #pt-stringing-page .pt-price-card h3{font-size:40px;color:#173629}\n    #pt-stringing-page .pt-highlight{border:2px solid #d8b36a;transform:translateY(-4px)}\n    #pt-stringing-page .pt-badge{display:inline-block;background:#d8b36a;color:#173629;padding:7px 12px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page .pt-list{padding-left:18px;margin:0;font-family:Arial,Helvetica,sans-serif;line-height:1.8}\n    #pt-stringing-page .pt-list li{margin-bottom:6px}\n    #pt-stringing-page .pt-photo{width:100%;height:100%;min-height:320px;object-fit:cover;border-radius:18px;box-shadow:0 10px 30px rgba(0,0,0,.08)}\n    #pt-stringing-page .pt-note{font-family:Arial,Helvetica,sans-serif;background:#efe7d4;border-left:4px solid #d8b36a;padding:16px 18px;border-radius:10px;color:#31443b}\n    #pt-stringing-page .pt-calc label{display:flex;justify-content:space-between;align-items:center;font-family:Arial,Helvetica,sans-serif;font-weight:700;margin:0 0 8px}\n    #pt-stringing-page .pt-calc input[type=range]{width:100%;margin:0 0 20px;accent-color:#173629}\n    #pt-stringing-page .pt-mini-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:14px}\n    #pt-stringing-page .pt-stat{background:rgba(255,255,255,.10);border-radius:16px;padding:14px;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page .pt-stat span{display:block;font-size:12px;color:rgba(255,255,255,.82)!important;text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}\n    #pt-stringing-page .pt-stat strong{font-size:24px;color:#fff!important}\n    #pt-stringing-page table{width:100%;border-collapse:collapse;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page th{background:#173629;color:#fff;padding:14px;text-align:left}\n    #pt-stringing-page td{padding:12px 14px;border-bottom:1px solid #eee}\n    #pt-stringing-page iframe{width:100%;border:0;border-radius:18px;min-height:360px}\n    #pt-stringing-page .pt-links{display:flex;flex-wrap:wrap;gap:10px;font-family:Arial,Helvetica,sans-serif}\n    #pt-stringing-page .pt-links a{background:#fff;color:#173629;text-decoration:none;border:1px solid rgba(23,54,41,.12);border-radius:999px;padding:10px 14px}\n    #pt-stringing-page .pt-cta-band{background:#173629;color:#fff;text-align:center;padding:50px 0}\n    @media(max-width:900px){#pt-stringing-page h1{font-size:38px}#pt-stringing-page h2{font-size:30px}#pt-stringing-page .pt-grid-2,#pt-stringing-page .pt-grid-3,#pt-stringing-page .pt-grid-4{grid-template-columns:1fr}#pt-stringing-page .pt-hero{padding:70px 0 60px}}\n  <\/style>\n\n  <script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"LocalBusiness\",\"name\":\"Passionnement Tennis\",\"description\":\"Tennis stringing prices in London from \u00a320. Clear costs for own-string restringing, Tier 1, Tier 2 and Tier 3 strings, fast turnaround and add-ons.\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Distillery Building, 11 Hart Yard\",\"postalCode\":\"E3 2AL\",\"addressLocality\":\"London\",\"addressCountry\":\"GB\"},\"areaServed\":[\"London\",\"East London\",\"Bow\",\"Mile End\",\"Victoria Park\",\"Hackney Wick\",\"Hackney\",\"Stratford\",\"Tower Hamlets\",\"Canary Wharf\"],\"makesOffer\":[{\"@type\":\"Offer\",\"name\":\"Tennis racket stringing with own string\",\"price\":\"20\",\"priceCurrency\":\"GBP\"},{\"@type\":\"Offer\",\"name\":\"Tennis racket stringing with Tier 3 string\",\"price\":\"25\",\"priceCurrency\":\"GBP\"},{\"@type\":\"Offer\",\"name\":\"Tennis racket stringing with Tier 2 string\",\"price\":\"30\",\"priceCurrency\":\"GBP\"},{\"@type\":\"Offer\",\"name\":\"Tennis racket stringing with Tier 1 string\",\"price\":\"40\",\"priceCurrency\":\"GBP\"},{\"@type\":\"Offer\",\"name\":\"Fast turnaround\",\"price\":\"2\",\"priceCurrency\":\"GBP\"},{\"@type\":\"Offer\",\"name\":\"Urgent 24-hour turnaround\",\"price\":\"6\",\"priceCurrency\":\"GBP\"}]}<\/script>\n\n  <section class=\"pt-hero\">\n    <div class=\"pt-wrap\">\n      <span class=\"pt-badge\">Clear Stringing Prices<\/span>\n      <h1>Tennis Stringing Prices London<\/h1>\n      <p class=\"pt-sub\">Clear tennis racket stringing prices for London players. Bring your own string for \u00a320, choose an included string from \u00a325 to \u00a340, and add faster turnaround or small extras only if you need them.<\/p>\n      <div style=\"margin-top:24px\">\n        <a class=\"pt-btn pt-btn-secondary\" href=\"#book\">Book a Time for Dropoff<\/a>\n        <a class=\"pt-btn pt-btn-primary\" href=\"https:\/\/wa.me\/447467911129\" target=\"_blank\" rel=\"noopener\">Contact us on WhatsApp<\/a>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:32px\">\n        <span class=\"pt-badge\">Price Summary<\/span>\n        <h2>Tennis racket stringing costs at a glance<\/h2>\n        <p>These are the current prices for drop-off at Distillery Building, 11 Hart Yard, E3 2AL, London.<\/p>\n      <\/div>\n      <div class=\"pt-grid-4\">\n        <div class=\"pt-card pt-price-card\"><h3>\u00a320<\/h3><p><strong>Bring your own string<\/strong><br>Labour-only restringing.<\/p><\/div>\n        <div class=\"pt-card pt-price-card\"><h3>\u00a325<\/h3><p><strong>Tier 3 string included<\/strong><br>Value comfort and all-round options.<\/p><\/div>\n        <div class=\"pt-card pt-price-card\"><h3>\u00a330<\/h3><p><strong>Tier 2 string included<\/strong><br>Most popular co-polyester options.<\/p><\/div>\n        <div class=\"pt-card pt-price-card pt-highlight\"><div class=\"pt-badge\" style=\"margin-bottom:10px\">Premium<\/div><h3>\u00a340<\/h3><p><strong>Tier 1 string included<\/strong><br>Premium control, spin and comfort strings.<\/p><\/div>\n      <\/div>\n      <div class=\"pt-grid-3\" style=\"margin-top:18px\">\n        <div class=\"pt-card\"><h3>Standard<\/h3><p>Included in the price. Collection is usually within 7 days.<\/p><\/div>\n        <div class=\"pt-card\"><h3>Fast +\u00a32<\/h3><p>Useful when you need the racket back within 4 days.<\/p><\/div>\n        <div class=\"pt-card\"><h3>Urgent +\u00a36<\/h3><p>24-hour turnaround when available before matches, coaching or league play.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" id=\"book\" style=\"background:#f7f5ef;padding:44px 0 64px;\">\n<div id=\"pt-booking-stepper\" style=\"font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif;color:#173629;background:#f7f5ef;\">\n  <style>\n    #pt-booking-stepper * { box-sizing:border-box; }\n    #pt-booking-stepper .ptb-wrap { max-width:1120px; margin:0 auto; padding:24px 16px; }\n    #pt-booking-stepper .ptb-shell { display:grid; grid-template-columns:minmax(0,1fr) 330px; gap:20px; align-items:start; }\n    #pt-booking-stepper .ptb-title { margin:0 0 6px; font-size:34px; line-height:1.08; letter-spacing:0; font-family:Georgia,'Times New Roman',serif; }\n    #pt-booking-stepper .ptb-sub { margin:0 0 22px; color:#4a5d54; line-height:1.55; }\n    #pt-booking-stepper .ptb-step {\n      background:#fff; border:1px solid rgba(23,54,41,.10); border-radius:18px; margin-bottom:12px;\n      box-shadow:0 8px 30px rgba(0,0,0,.045); overflow:hidden;\n    }\n    #pt-booking-stepper .ptb-step-head {\n      width:100%; border:0; background:#fff; color:#173629; display:flex; align-items:center; gap:12px;\n      padding:18px; text-align:left; cursor:pointer;\n    }\n    #pt-booking-stepper .ptb-num {\n      width:34px; height:34px; border-radius:50%; background:#173629; color:#fff; display:flex;\n      align-items:center; justify-content:center; font-weight:800; flex:0 0 auto;\n    }\n    #pt-booking-stepper .ptb-head-main { flex:1; min-width:0; }\n    #pt-booking-stepper .ptb-head-main strong { display:block; font-size:17px; }\n    #pt-booking-stepper .ptb-head-main span { display:block; color:#617168; font-size:13px; margin-top:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n    #pt-booking-stepper .ptb-edit { font-weight:800; color:#173629; font-size:13px; }\n    #pt-booking-stepper .ptb-body { padding:0 18px 18px; }\n    #pt-booking-stepper .ptb-step:not(.is-active) .ptb-body { display:none; }\n    #pt-booking-stepper .ptb-step.is-complete:not(.is-active) .ptb-num { background:#d8b36a; color:#173629; }\n    #pt-booking-stepper label { display:block; font-weight:800; font-size:13px; margin:0 0 7px; }\n    #pt-booking-stepper input[type=\"text\"],\n    #pt-booking-stepper input[type=\"tel\"],\n    #pt-booking-stepper input[type=\"date\"],\n    #pt-booking-stepper input[type=\"time\"] {\n      width:100%; border:1px solid rgba(23,54,41,.16); border-radius:12px; padding:13px 12px;\n      font:inherit; background:#fbfaf6; color:#173629; min-height:46px;\n    }\n    #pt-booking-stepper input[type=\"range\"] { width:100%; accent-color:#173629; }\n    #pt-booking-stepper .ptb-fields { display:grid; grid-template-columns:1fr 1fr; gap:12px; }\n    #pt-booking-stepper .ptb-options { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }\n    #pt-booking-stepper .ptb-option {\n      border:1px solid rgba(23,54,41,.14); background:#fbfaf6; border-radius:16px; padding:14px;\n      cursor:pointer; min-height:92px; display:flex; gap:12px; align-items:flex-start; position:relative;\n    }\n    #pt-booking-stepper .ptb-option input { position:absolute; opacity:0; pointer-events:none; }\n    #pt-booking-stepper .ptb-option.is-selected { border-color:#d8b36a; box-shadow:0 0 0 2px rgba(216,179,106,.26); background:#fff; }\n    #pt-booking-stepper .ptb-option-main { flex:1; min-width:0; }\n    #pt-booking-stepper .ptb-option strong { display:block; font-size:15px; }\n    #pt-booking-stepper .ptb-option small { display:block; margin-top:4px; color:#617168; line-height:1.35; }\n    #pt-booking-stepper .ptb-price { font-weight:900; white-space:nowrap; color:#173629; }\n    #pt-booking-stepper .ptb-pack {\n      width:44px; height:58px; border-radius:9px; flex:0 0 auto; box-shadow:inset 0 0 0 1px rgba(255,255,255,.28), 0 7px 16px rgba(0,0,0,.12);\n      display:flex; align-items:center; justify-content:center; color:#fff; font-size:10px; font-weight:900; text-align:center; padding:4px; line-height:1.05;\n    }\n    #pt-booking-stepper .ptb-pack.light { color:#173629; }\n    #pt-booking-stepper .ptb-string-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; max-height:520px; overflow:auto; padding-right:3px; }\n    #pt-booking-stepper .ptb-slider-box { background:#fbfaf6; border:1px solid rgba(23,54,41,.10); border-radius:16px; padding:14px; margin-bottom:12px; }\n    #pt-booking-stepper .ptb-slider-row { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:8px; }\n    #pt-booking-stepper .ptb-slider-row strong { font-size:22px; }\n    #pt-booking-stepper .ptb-actions { display:flex; justify-content:flex-end; gap:10px; margin-top:16px; flex-wrap:wrap; }\n    #pt-booking-stepper .ptb-btn {\n      border:0; border-radius:999px; padding:13px 18px; font-weight:900; cursor:pointer; font:inherit;\n      min-height:46px; text-decoration:none; display:inline-flex; align-items:center; justify-content:center;\n    }\n    #pt-booking-stepper .ptb-btn-primary { background:#173629; color:#fff; }\n    #pt-booking-stepper .ptb-btn-secondary { background:#d8b36a; color:#173629; }\n    #pt-booking-stepper .ptb-btn-plain { background:#efe7d4; color:#173629; }\n    #pt-booking-stepper .ptb-summary {\n      position:sticky; top:14px; background:#173629; color:#fff; border-radius:20px; padding:18px;\n      box-shadow:0 12px 36px rgba(0,0,0,.12);\n    }\n    #pt-booking-stepper .ptb-summary h3 { margin:0 0 12px; font-size:18px; color:#fff; }\n    #pt-booking-stepper .ptb-total { font-size:42px; font-weight:950; line-height:1; margin:0 0 12px; color:#fff; }\n    #pt-booking-stepper .ptb-line { display:flex; justify-content:space-between; gap:12px; padding:9px 0; border-top:1px solid rgba(255,255,255,.14); font-size:14px; }\n    #pt-booking-stepper .ptb-line span:first-child { color:rgba(255,255,255,.78); }\n    #pt-booking-stepper .ptb-note { margin:12px 0 0; color:rgba(255,255,255,.78); font-size:13px; line-height:1.45; }\n    #pt-booking-stepper .ptb-review {\n      background:#fbfaf6; border:1px solid rgba(23,54,41,.10); border-radius:16px; padding:14px; line-height:1.55;\n    }\n    #pt-booking-stepper .ptb-success {\n      display:none; background:#173629; color:#fff; border-radius:18px; padding:18px; margin-top:14px;\n    }\n    #pt-booking-stepper .ptb-success h3 { margin:0 0 8px; color:#fff; }\n    #pt-booking-stepper .ptb-success p { color:rgba(255,255,255,.86); }\n    #pt-booking-stepper .ptb-error { display:none; color:#9a2a1f; font-weight:800; margin-top:10px; }\n    #pt-booking-stepper .ptb-send-note { display:none; margin:10px 0 0; color:#617168; font-weight:800; font-size:13px; }\n    @media (max-width: 920px) {\n      #pt-booking-stepper .ptb-shell { grid-template-columns:1fr; }\n      #pt-booking-stepper .ptb-summary { position:sticky; top:0; z-index:5; border-radius:0 0 20px 20px; margin:-24px -16px 18px; }\n      #pt-booking-stepper .ptb-fields, #pt-booking-stepper .ptb-options, #pt-booking-stepper .ptb-string-grid { grid-template-columns:1fr; }\n      #pt-booking-stepper .ptb-title { font-size:28px; }\n      #pt-booking-stepper .ptb-total { font-size:36px; }\n    }\n  <\/style>\n\n  <div class=\"ptb-wrap\">\n    <h2 class=\"ptb-title\">Book Tennis Racket Stringing<\/h2>\n    <p class=\"ptb-sub\">Choose your drop-off, string, tension and turnaround. The price updates as you build your setup.<\/p>\n\n    <div class=\"ptb-shell\">\n      <div class=\"ptb-flow\">\n        <section class=\"ptb-step is-active\" data-step=\"1\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"1\">\n            <span class=\"ptb-num\">1<\/span>\n            <span class=\"ptb-head-main\"><strong>Drop-off date and time<\/strong><span data-summary=\"dropoff\">Choose a drop-off slot<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-fields\">\n              <div>\n                <label for=\"ptb-date\">Drop-off date<\/label>\n                <input id=\"ptb-date\" type=\"date\" required>\n              <\/div>\n              <div>\n                <label for=\"ptb-time\">Drop-off time<\/label>\n                <input id=\"ptb-time\" type=\"time\" value=\"18:00\" required>\n              <\/div>\n            <\/div>\n            <div class=\"ptb-actions\"><button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"2\">Continue<\/button><\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"2\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"2\">\n            <span class=\"ptb-num\">2<\/span>\n            <span class=\"ptb-head-main\"><strong>Choose string<\/strong><span data-summary=\"string\">Bring your own string or choose from stock<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-string-grid\" id=\"ptb-string-options\"><\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"1\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"3\">Continue<\/button>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"3\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"3\">\n            <span class=\"ptb-num\">3<\/span>\n            <span class=\"ptb-head-main\"><strong>Choose tension<\/strong><span data-summary=\"tension\">Mains 52 lbs \/ crosses 52 lbs<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-slider-box\">\n              <div class=\"ptb-slider-row\"><label for=\"ptb-mains\">Mains tension<\/label><strong><span id=\"ptb-mains-val\">52<\/span> lbs<\/strong><\/div>\n              <input id=\"ptb-mains\" type=\"range\" min=\"40\" max=\"65\" value=\"52\">\n            <\/div>\n            <div class=\"ptb-slider-box\">\n              <div class=\"ptb-slider-row\"><label for=\"ptb-crosses\">Crosses tension<\/label><strong><span id=\"ptb-crosses-val\">52<\/span> lbs<\/strong><\/div>\n              <input id=\"ptb-crosses\" type=\"range\" min=\"40\" max=\"65\" value=\"52\">\n            <\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"2\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"4\">Continue<\/button>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"4\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"4\">\n            <span class=\"ptb-num\">4<\/span>\n            <span class=\"ptb-head-main\"><strong>Collection speed<\/strong><span data-summary=\"speed\">Standard collection within 7 days<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-options\" id=\"ptb-speed-options\">\n              <label class=\"ptb-option\"><input type=\"radio\" name=\"speed\" value=\"standard\" data-label=\"Standard\" data-days=\"7\" data-price=\"0\" checked><span class=\"ptb-option-main\"><strong>Standard<\/strong><small>Ready within 7 days<\/small><\/span><span class=\"ptb-price\">+\u00a30<\/span><\/label>\n              <label class=\"ptb-option\"><input type=\"radio\" name=\"speed\" value=\"fast\" data-label=\"Fast\" data-days=\"4\" data-price=\"2\"><span class=\"ptb-option-main\"><strong>Fast<\/strong><small>Ready within 4 days<\/small><\/span><span class=\"ptb-price\">+\u00a32<\/span><\/label>\n              <label class=\"ptb-option\"><input type=\"radio\" name=\"speed\" value=\"urgent\" data-label=\"Urgent\" data-days=\"1\" data-price=\"6\"><span class=\"ptb-option-main\"><strong>Urgent<\/strong><small>Ready within 24 hours<\/small><\/span><span class=\"ptb-price\">+\u00a36<\/span><\/label>\n            <\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"3\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"5\">Continue<\/button>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"5\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"5\">\n            <span class=\"ptb-num\">5<\/span>\n            <span class=\"ptb-head-main\"><strong>Additional services<\/strong><span data-summary=\"addons\">No extras selected<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-options\">\n              <label class=\"ptb-option\"><input type=\"checkbox\" name=\"addon\" value=\"overgrip\" data-label=\"Overgrip\" data-price=\"3\"><span class=\"ptb-option-main\"><strong>Overgrip<\/strong><small>Fresh overgrip fitted before collection<\/small><\/span><span class=\"ptb-price\">+\u00a33<\/span><\/label>\n              <label class=\"ptb-option\"><input type=\"checkbox\" name=\"addon\" value=\"dampener\" data-label=\"Dampener\" data-price=\"2\"><span class=\"ptb-option-main\"><strong>Dampener<\/strong><small>Add a vibration dampener<\/small><\/span><span class=\"ptb-price\">+\u00a32<\/span><\/label>\n            <\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"4\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"6\">Continue<\/button>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"6\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"6\">\n            <span class=\"ptb-num\">6<\/span>\n            <span class=\"ptb-head-main\"><strong>Your details<\/strong><span data-summary=\"details\">Name and phone number required<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-fields\">\n              <div>\n                <label for=\"ptb-name\">Name<\/label>\n                <input id=\"ptb-name\" type=\"text\" autocomplete=\"name\" required>\n              <\/div>\n              <div>\n                <label for=\"ptb-phone\">Phone number<\/label>\n                <input id=\"ptb-phone\" type=\"tel\" autocomplete=\"tel\" required>\n              <\/div>\n            <\/div>\n            <div class=\"ptb-error\" id=\"ptb-details-error\">Please enter your name and phone number.<\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"5\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-primary\" type=\"button\" data-next=\"7\">Review<\/button>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section class=\"ptb-step\" data-step=\"7\">\n          <button class=\"ptb-step-head\" type=\"button\" data-open-step=\"7\">\n            <span class=\"ptb-num\">7<\/span>\n            <span class=\"ptb-head-main\"><strong>Review and confirm<\/strong><span data-summary=\"review\">Check everything before confirming<\/span><\/span>\n            <span class=\"ptb-edit\">Edit<\/span>\n          <\/button>\n          <div class=\"ptb-body\">\n            <div class=\"ptb-review\" id=\"ptb-review\"><\/div>\n            <div class=\"ptb-actions\">\n              <button class=\"ptb-btn ptb-btn-plain\" type=\"button\" data-next=\"6\">Back<\/button>\n              <button class=\"ptb-btn ptb-btn-secondary\" type=\"button\" id=\"ptb-confirm\">Confirm request<\/button>\n            <\/div>\n            <div class=\"ptb-send-note\" id=\"ptb-send-note\">Sending request...<\/div>\n            <div class=\"ptb-success\" id=\"ptb-success\">\n              <h3>Request received<\/h3>\n              <p>We will reach out to confirm your drop-off and collection. You can also message us directly on WhatsApp.<\/p>\n              <a class=\"ptb-btn ptb-btn-secondary\" id=\"ptb-whatsapp\" href=\"https:\/\/wa.me\/447467911129\" target=\"_blank\" rel=\"noopener\">Message on WhatsApp<\/a>\n            <\/div>\n          <\/div>\n        <\/section>\n      <\/div>\n\n      <aside class=\"ptb-summary\">\n        <h3>Current total<\/h3>\n        <div class=\"ptb-total\" id=\"ptb-total\">\u00a320<\/div>\n        <div class=\"ptb-line\"><span>Base stringing<\/span><strong>\u00a320<\/strong><\/div>\n        <div class=\"ptb-line\"><span id=\"ptb-string-label\">String<\/span><strong id=\"ptb-string-price\">+\u00a30<\/strong><\/div>\n        <div class=\"ptb-line\"><span id=\"ptb-speed-label\">Turnaround<\/span><strong id=\"ptb-speed-price\">+\u00a30<\/strong><\/div>\n        <div class=\"ptb-line\"><span id=\"ptb-addon-label\">Extras<\/span><strong id=\"ptb-addon-price\">+\u00a30<\/strong><\/div>\n        <p class=\"ptb-note\" id=\"ptb-collection-note\">Standard collection is within 7 days.<\/p>\n      <\/aside>\n    <\/div>\n  <\/div>\n\n  <script>\n    (function(){\n      const webhookUrl = 'https:\/\/hooks.zapier.com\/hooks\/catch\/2101830\/4ye4ugf\/';\n      const basePrice = 20;\n      const strings = [\n        {name:\"Bring own string\", tier:\"Own string\", gauge:\"\", colour:\"\", type:\"\", profile:\"Use your own set\", price:0, swatch:\"linear-gradient(135deg,#f7f5ef,#e4ddcb)\", light:true},\n        {name:\"Solinco Confidential\", tier:\"Tier 1\", gauge:\"16\", colour:\"Grey\", type:\"Co-polyester\", profile:\"Control poly\", price:20, swatch:\"linear-gradient(135deg,#3e4447,#aeb4b8)\"},\n        {name:\"Babolat RPM Blast Rough\", tier:\"Tier 1\", gauge:\"17\", colour:\"Grey\", type:\"Textured co-polyester\", profile:\"Rough spin poly\", price:20, swatch:\"linear-gradient(135deg,#555,#b7b7b7)\"},\n        {name:\"Babolat RPM Blast\", tier:\"Tier 1\", gauge:\"17\", colour:\"Black\", type:\"Co-polyester\", profile:\"Shaped spin poly\", price:20, swatch:\"linear-gradient(135deg,#050505,#4b4b4b)\"},\n        {name:\"Luxilon ALU Power\", tier:\"Tier 1\", gauge:\"17\", colour:\"Grey\", type:\"Co-polyester\", profile:\"Premium control poly\", price:20, swatch:\"linear-gradient(135deg,#c8c8c8,#111)\"},\n        {name:\"Solinco Hyper-G\", tier:\"Tier 1\", gauge:\"17\", colour:\"Green\", type:\"Shaped co-polyester\", profile:\"Spin\/control poly\", price:20, swatch:\"linear-gradient(135deg,#78c850,#1f7a3a)\"},\n        {name:\"Luxilon Element\", tier:\"Tier 1\", gauge:\"17\", colour:\"Bronze\", type:\"Soft co-polyester\", profile:\"Comfort poly\", price:20, swatch:\"linear-gradient(135deg,#b57a42,#f2c27b)\"},\n        {name:\"Luxilon 4G\", tier:\"Tier 1\", gauge:\"17\", colour:\"Yellow\", type:\"Co-polyester\", profile:\"Tension stability poly\", price:20, swatch:\"linear-gradient(135deg,#f3df38,#837319)\", light:true},\n        {name:\"Yonex Poly Tour Fire\", tier:\"Tier 2\", gauge:\"17\", colour:\"Red\", type:\"Co-polyester\", profile:\"Round performance poly\", price:10, swatch:\"linear-gradient(135deg,#d71920,#7a0b0e)\"},\n        {name:\"TRU PRO Ghost Wire\", tier:\"Tier 2\", gauge:\"18\", colour:\"White\", type:\"Co-polyester\", profile:\"Round soft poly\", price:10, swatch:\"linear-gradient(135deg,#fff,#dadde2)\", light:true},\n        {name:\"Head Lynx Tour\", tier:\"Tier 2\", gauge:\"17\", colour:\"Black\", type:\"Co-polyester\", profile:\"Shaped poly\", price:10, swatch:\"linear-gradient(135deg,#111,#3d3d3d)\"},\n        {name:\"Wilson Revolve\", tier:\"Tier 2\", gauge:\"16\", colour:\"Black\/Grey\", type:\"Co-polyester\", profile:\"Spin poly\", price:10, swatch:\"linear-gradient(135deg,#111,#8f98a0)\"},\n        {name:\"Solinco Mach 10\", tier:\"Tier 2\", gauge:\"18\", colour:\"Blue\", type:\"Co-polyester\", profile:\"Modern spin\/control poly\", price:10, swatch:\"linear-gradient(135deg,#0d5bd7,#0a2f77)\"},\n        {name:\"Dunlop Explosive Speed\", tier:\"Tier 2\", gauge:\"16\", colour:\"Black\", type:\"Co-polyester\", profile:\"Power\/control poly\", price:10, swatch:\"linear-gradient(135deg,#050505,#3c3c3c)\"},\n        {name:\"Gamma Ocho\", tier:\"Tier 2\", gauge:\"16\", colour:\"White\", type:\"Co-polyester\", profile:\"Shaped poly\", price:10, swatch:\"linear-gradient(135deg,#fff,#d9d9d9)\", light:true},\n        {name:\"Wilson Sensation Plus\", tier:\"Tier 3\", gauge:\"17\", colour:\"Black\", type:\"Multifilament\", profile:\"Comfort string\", price:5, swatch:\"linear-gradient(135deg,#111,#535b66)\"},\n        {name:\"Babolat Synthetic Gut\", tier:\"Tier 3\", gauge:\"16\", colour:\"Clear\/White\", type:\"Synthetic gut\", profile:\"Value all-round string\", price:5, swatch:\"linear-gradient(135deg,#fff,#e6e1d7)\", light:true}\n      ];\n\n      const root = document.getElementById('pt-booking-stepper');\n      const stringWrap = root.querySelector('#ptb-string-options');\n      const currency = value => '\u00a3' + value;\n\n      strings.forEach((item, index) => {\n        const id = 'ptb-string-' + index;\n        const label = document.createElement('label');\n        label.className = 'ptb-option';\n        label.innerHTML = '<input type=\"radio\" name=\"string\" id=\"' + id + '\" value=\"' + index + '\" ' + (index === 0 ? 'checked' : '') + '>' +\n          '<span class=\"ptb-pack ' + (item.light ? 'light' : '') + '\" style=\"background:' + item.swatch + '\">' + (item.tier === 'Own string' ? 'OWN' : item.name.split(' ')[0]) + '<\/span>' +\n          '<span class=\"ptb-option-main\"><strong>' + item.name + '<\/strong><small>' + item.tier + (item.gauge ? ' \u00b7 ' + item.gauge + 'g \u00b7 ' + item.profile : ' \u00b7 no string charge') + '<\/small><\/span>' +\n          '<span class=\"ptb-price\">+' + currency(item.price) + '<\/span>';\n        stringWrap.appendChild(label);\n      });\n\n      const state = {\n        step: 1,\n        stringIndex: 0,\n        mains: 52,\n        crosses: 52,\n        speed: 'standard',\n        addons: [],\n        name: '',\n        phone: ''\n      };\n\n      const els = {\n        total: root.querySelector('#ptb-total'),\n        stringLabel: root.querySelector('#ptb-string-label'),\n        stringPrice: root.querySelector('#ptb-string-price'),\n        speedLabel: root.querySelector('#ptb-speed-label'),\n        speedPrice: root.querySelector('#ptb-speed-price'),\n        addonLabel: root.querySelector('#ptb-addon-label'),\n        addonPrice: root.querySelector('#ptb-addon-price'),\n        collectionNote: root.querySelector('#ptb-collection-note'),\n        date: root.querySelector('#ptb-date'),\n        time: root.querySelector('#ptb-time'),\n        mains: root.querySelector('#ptb-mains'),\n        crosses: root.querySelector('#ptb-crosses'),\n        mainsVal: root.querySelector('#ptb-mains-val'),\n        crossesVal: root.querySelector('#ptb-crosses-val'),\n        name: root.querySelector('#ptb-name'),\n        phone: root.querySelector('#ptb-phone'),\n        review: root.querySelector('#ptb-review'),\n        error: root.querySelector('#ptb-details-error'),\n        success: root.querySelector('#ptb-success'),\n        whatsapp: root.querySelector('#ptb-whatsapp'),\n        sendNote: root.querySelector('#ptb-send-note'),\n        confirm: root.querySelector('#ptb-confirm')\n      };\n\n      const tomorrow = new Date();\n      tomorrow.setDate(tomorrow.getDate() + 1);\n      const yyyyMmDd = date => date.toISOString().slice(0, 10);\n      els.date.min = yyyyMmDd(new Date());\n      els.date.value = yyyyMmDd(tomorrow);\n\n      function selectedString(){ return strings[Number(root.querySelector('input[name=\"string\"]:checked').value)]; }\n      function selectedSpeed(){ return root.querySelector('input[name=\"speed\"]:checked'); }\n      function selectedAddons(){ return Array.from(root.querySelectorAll('input[name=\"addon\"]:checked')); }\n      function totalPrice(){\n        const speed = selectedSpeed();\n        return basePrice + selectedString().price + Number(speed.dataset.price) + selectedAddons().reduce((sum, item) => sum + Number(item.dataset.price), 0);\n      }\n      function collectionDateText(){\n        const speed = selectedSpeed();\n        const date = els.date.value ? new Date(els.date.value + 'T12:00:00') : new Date();\n        date.setDate(date.getDate() + Number(speed.dataset.days));\n        return date.toLocaleDateString('en-GB', { weekday:'short', day:'numeric', month:'short' });\n      }\n      function markSelected(){\n        root.querySelectorAll('.ptb-option').forEach(option => {\n          const input = option.querySelector('input');\n          option.classList.toggle('is-selected', input.checked);\n        });\n      }\n      function setStep(step){\n        state.step = Number(step);\n        root.querySelectorAll('.ptb-step').forEach(card => {\n          const cardStep = Number(card.dataset.step);\n          card.classList.toggle('is-active', cardStep === state.step);\n          card.classList.toggle('is-complete', cardStep < state.step);\n        });\n        update();\n      }\n      function validateDetails(){\n        state.name = els.name.value.trim();\n        state.phone = els.phone.value.trim();\n        const ok = Boolean(state.name && state.phone);\n        els.error.style.display = ok ? 'none' : 'block';\n        return ok;\n      }\n      function updateReview(){\n        const string = selectedString();\n        const speed = selectedSpeed();\n        const addons = selectedAddons();\n        const addonText = addons.length ? addons.map(item => item.dataset.label).join(', ') : 'None';\n        const lines = [\n          '<strong>Drop-off:<\/strong> ' + (els.date.value || 'Not selected') + ' at ' + (els.time.value || 'Not selected'),\n          '<strong>String:<\/strong> ' + string.name + ' (' + string.tier + ')',\n          '<strong>Tension:<\/strong> mains ' + els.mains.value + ' lbs \/ crosses ' + els.crosses.value + ' lbs',\n          '<strong>Turnaround:<\/strong> ' + speed.dataset.label + ' \u00b7 estimated collection ' + collectionDateText(),\n          '<strong>Extras:<\/strong> ' + addonText,\n          '<strong>Name:<\/strong> ' + (els.name.value || '-'),\n          '<strong>Phone:<\/strong> ' + (els.phone.value || '-'),\n          '<strong>Total:<\/strong> ' + currency(totalPrice())\n        ];\n        els.review.innerHTML = lines.join('<br>');\n        const message = 'Tennis stringing request\\n' + lines.map(line => line.replace(\/<[^>]+>\/g, '')).join('\\n');\n        els.whatsapp.href = 'https:\/\/wa.me\/447467911129?text=' + encodeURIComponent(message);\n      }\n      function bookingPayload(){\n        const string = selectedString();\n        const speed = selectedSpeed();\n        const addons = selectedAddons();\n        return {\n          source: 'tennis-stringing-stepper-form',\n          submitted_at: new Date().toISOString(),\n          name: els.name.value.trim(),\n          phone: els.phone.value.trim(),\n          dropoff_date: els.date.value,\n          dropoff_time: els.time.value,\n          string_name: string.name,\n          string_tier: string.tier,\n          string_gauge: string.gauge,\n          string_colour: string.colour,\n          string_type: string.type,\n          string_price_addon: string.price,\n          mains_tension_lbs: Number(els.mains.value),\n          crosses_tension_lbs: Number(els.crosses.value),\n          turnaround: speed.dataset.label,\n          turnaround_days: Number(speed.dataset.days),\n          turnaround_price_addon: Number(speed.dataset.price),\n          estimated_collection: collectionDateText(),\n          addons: addons.map(item => ({\n            name: item.dataset.label,\n            price: Number(item.dataset.price)\n          })),\n          addons_total: addons.reduce((sum, item) => sum + Number(item.dataset.price), 0),\n          base_price: basePrice,\n          total_price: totalPrice()\n        };\n      }\n      function bookingFormData(){\n        const payload = bookingPayload();\n        const formData = new FormData();\n        Object.keys(payload).forEach(key => {\n          const value = payload[key];\n          formData.append(key, typeof value === 'object' ? JSON.stringify(value) : String(value));\n        });\n        return formData;\n      }\n      function update(){\n        const string = selectedString();\n        const speed = selectedSpeed();\n        const addons = selectedAddons();\n        const addonTotal = addons.reduce((sum, item) => sum + Number(item.dataset.price), 0);\n        const addonLabels = addons.map(item => item.dataset.label);\n        els.mainsVal.textContent = els.mains.value;\n        els.crossesVal.textContent = els.crosses.value;\n        els.total.textContent = currency(totalPrice());\n        els.stringLabel.textContent = string.name;\n        els.stringPrice.textContent = '+' + currency(string.price);\n        els.speedLabel.textContent = speed.dataset.label + ' turnaround';\n        els.speedPrice.textContent = '+' + currency(Number(speed.dataset.price));\n        els.addonLabel.textContent = addonLabels.length ? addonLabels.join(', ') : 'Extras';\n        els.addonPrice.textContent = '+' + currency(addonTotal);\n        els.collectionNote.textContent = speed.dataset.label + ' collection estimate: ' + collectionDateText() + '.';\n        root.querySelector('[data-summary=\"dropoff\"]').textContent = (els.date.value || 'Choose date') + ' at ' + (els.time.value || 'choose time') + ' \u00b7 base \u00a320';\n        root.querySelector('[data-summary=\"string\"]').textContent = string.name + ' \u00b7 ' + (string.price ? '+' + currency(string.price) : 'no string charge');\n        root.querySelector('[data-summary=\"tension\"]').textContent = 'Mains ' + els.mains.value + ' lbs \/ crosses ' + els.crosses.value + ' lbs';\n        root.querySelector('[data-summary=\"speed\"]').textContent = speed.dataset.label + ' \u00b7 collection estimate ' + collectionDateText();\n        root.querySelector('[data-summary=\"addons\"]').textContent = addonLabels.length ? addonLabels.join(', ') : 'No extras selected';\n        root.querySelector('[data-summary=\"details\"]').textContent = els.name.value && els.phone.value ? els.name.value + ' \u00b7 ' + els.phone.value : 'Name and phone number required';\n        updateReview();\n        markSelected();\n      }\n\n      root.addEventListener('click', event => {\n        const open = event.target.closest('[data-open-step]');\n        const next = event.target.closest('[data-next]');\n        if (open) setStep(open.dataset.openStep);\n        if (next) {\n          if (next.dataset.next === '7' && !validateDetails()) return;\n          setStep(next.dataset.next);\n        }\n      });\n      root.addEventListener('input', update);\n      root.addEventListener('change', update);\n      root.querySelector('#ptb-confirm').addEventListener('click', async () => {\n        if (!validateDetails()) {\n          setStep(6);\n          return;\n        }\n        updateReview();\n        els.confirm.disabled = true;\n        els.confirm.textContent = 'Sending...';\n        els.sendNote.style.display = 'block';\n        try {\n          await fetch(webhookUrl, {\n            method: 'POST',\n            mode: 'no-cors',\n            body: bookingFormData()\n          });\n          els.sendNote.textContent = 'Request sent.';\n        } catch (error) {\n          els.sendNote.textContent = 'Could not send automatically. Please message us on WhatsApp.';\n        }\n        els.success.style.display = 'block';\n        els.confirm.style.display = 'none';\n      });\n      update();\n    })();\n  <\/script>\n<\/div>\n\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <div class=\"pt-grid-2\">\n        <div>\n          <h2>What is included in the stringing price?<\/h2>\n          <p>Every tennis stringing price includes fitting the string, setting your requested tension and getting the racket ready for collection. If you are not sure what to choose, we can recommend a sensible setup based on your racket, level and playing style.<\/p>\n          <p>The main price difference is the string itself. You can bring your own string for \u00a320, choose a value Tier 3 option for \u00a325, a Tier 2 option for \u00a330, or a premium Tier 1 string for \u00a340.<\/p>\n          <p>Players across London usually choose based on feel: more spin, better comfort, improved durability or tighter match-day control. The aim is simple: a racket that feels reliable again without unclear extras.<\/p>\n          <div class=\"pt-note\"><strong>Drop-off:<\/strong> Distillery Building, 11 Hart Yard, E3 2AL, London, convenient for Bow, Mile End, Victoria Park, Hackney Wick, Hackney, Stratford, Tower Hamlets and Canary Wharf.<\/div>\n          <div style=\"margin-top:22px\">\n            <a class=\"pt-btn pt-btn-secondary\" href=\"#book\">Book a Time for Dropoff<\/a>\n            <a class=\"pt-btn pt-btn-primary\" href=\"https:\/\/wa.me\/447467911129\" target=\"_blank\" rel=\"noopener\">Contact us on WhatsApp<\/a>\n          <\/div>\n        <\/div>\n        <div><img decoding=\"async\" class=\"pt-photo\" src=\"https:\/\/i.ytimg.com\/vi\/_5E5OaDWsoA\/hq720.jpg?sqp=-oaymwE7CK4FEIIDSFryq4qpAy0IARUAAAAAGAElAADIQj0AgKJD8AEB-AH-CYAC0AWKAgwIABABGGUgWyhPMA8=&rs=AOn4CLCX3kw4v-WyI2sBrUVTPT4auAOcGg\" alt=\"tennis stringing London at Passionnement Tennis\"><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div class=\"pt-grid-3\">\n        <div class=\"pt-card\"><span class=\"pt-badge\">No hidden labour fee<\/span><h3>One clear restring price<\/h3><p>The listed tier price already includes stringing labour and the selected string.<\/p><\/div>\n        <div class=\"pt-card\"><span class=\"pt-badge\">Advice<\/span><h3>Choose by feel<\/h3><p>Tell us how you play and we will help you choose between spin, control, comfort, power and durability.<\/p><\/div>\n        <div class=\"pt-card\"><span class=\"pt-badge\">Optional extras<\/span><h3>Only add what you need<\/h3><p>Fast turnaround, urgent turnaround, overgrip and dampener are optional add-ons.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:32px\">\n        <span class=\"pt-badge\">Pricing<\/span>\n        <h2>Full tennis stringing price list<\/h2>\n        <p>Simple pricing for tennis stringing in London, with online booking and E3 drop-off.<\/p>\n      <\/div>\n      <div class=\"pt-grid-4\">\n        <div class=\"pt-card pt-price-card\"><h3>\u00a320<\/h3><p><strong>Bring your own strings<\/strong><\/p><\/div>\n        <div class=\"pt-card pt-price-card\"><h3>\u00a325<\/h3><p><strong>With Tier 3 strings<\/strong><\/p><\/div>\n        <div class=\"pt-card pt-price-card\"><h3>\u00a330<\/h3><p><strong>With Tier 2 strings<\/strong><\/p><\/div>\n        <div class=\"pt-card pt-price-card pt-highlight\"><div class=\"pt-badge\" style=\"margin-bottom:10px\">Premium<\/div><h3>\u00a340<\/h3><p><strong>With Tier 1 strings<\/strong><\/p><\/div>\n      <\/div>\n      <div class=\"pt-grid-2\" style=\"margin-top:18px\">\n        <div class=\"pt-card\">\n          <h3>Turnaround options<\/h3>\n          <ul class=\"pt-list\">\n            <li><strong>Standard:<\/strong> included, collection within 7 days.<\/li>\n            <li><strong>Fast:<\/strong> +\u00a32, collection within 4 days.<\/li>\n            <li><strong>Urgent:<\/strong> +\u00a36, collection within 24 hours when available.<\/li>\n          <\/ul>\n        <\/div>\n        <div class=\"pt-card\">\n          <h3>Additional services<\/h3>\n          <ul class=\"pt-list\">\n            <li><strong>Overgrip:<\/strong> +\u00a33.<\/li>\n            <li><strong>Dampener:<\/strong> +\u00a32.<\/li>\n            <li><strong>String advice:<\/strong> included before you book.<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:28px;\">\n        <span class=\"pt-badge\">String Tiers<\/span>\n        <h2>Available strings by tier<\/h2>\n        <p>Choose a tier based on string type, performance, feel and budget.<\/p>\n      <\/div>\n\n      <div class=\"pt-card\" style=\"overflow-x:auto;\">\n        <table>\n          <thead>\n            <tr>\n              <th>String<\/th>\n              <th>Gauge<\/th>\n              <th>Colour<\/th>\n              <th>Type<\/th>\n              <th>Profile<\/th>\n              <th>Best For<\/th>\n              <th>Feel<\/th>\n              <th>Tier<\/th>\n            <\/tr>\n          <\/thead>\n          <tbody>\n            <tr><td>Solinco Confidential<\/td><td>16<\/td><td>Grey<\/td><td>Co-polyester<\/td><td>Control poly<\/td><td>Durability, control, lower launch<\/td><td>Firm \/ precise<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Babolat RPM Blast Rough<\/td><td>17<\/td><td>Grey<\/td><td>Textured co-polyester<\/td><td>Rough spin poly<\/td><td>Heavy spin, bite, aggressive baseliners<\/td><td>Firm \/ textured<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Babolat RPM Blast<\/td><td>17<\/td><td>Black<\/td><td>Co-polyester<\/td><td>Shaped spin poly<\/td><td>Heavy topspin, control, fast swings<\/td><td>Firm \/ low-powered<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Luxilon ALU Power<\/td><td>17<\/td><td>Grey<\/td><td>Co-polyester<\/td><td>Premium control poly<\/td><td>Control, response, match-day feel<\/td><td>Crisp \/ direct<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Solinco Hyper-G<\/td><td>17<\/td><td>Green<\/td><td>Shaped co-polyester<\/td><td>Spin\/control poly<\/td><td>Spin, control, modern baseline play<\/td><td>Firm \/ controlled<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Luxilon Element<\/td><td>17<\/td><td>Bronze<\/td><td>Soft co-polyester<\/td><td>Comfort poly<\/td><td>Comfort, feel, easier depth<\/td><td>Softer \/ lively<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Luxilon 4G<\/td><td>17<\/td><td>Yellow<\/td><td>Co-polyester<\/td><td>Control\/tension stability poly<\/td><td>Control, durability, tension hold<\/td><td>Firm \/ stable<\/td><td>Tier 1<\/td><\/tr>\n            <tr><td>Yonex Poly Tour Fire<\/td><td>17<\/td><td>Red<\/td><td>Co-polyester<\/td><td>Round performance poly<\/td><td>Spin, control, controlled power<\/td><td>Crisp \/ lively<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>TRU PRO Ghost Wire<\/td><td>18<\/td><td>White<\/td><td>Co-polyester<\/td><td>Round soft poly<\/td><td>Comfort, control, hybrid setups<\/td><td>Soft \/ controlled<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Head Lynx Tour<\/td><td>17<\/td><td>Black<\/td><td>Co-polyester<\/td><td>Shaped poly<\/td><td>Spin, control, all-court play<\/td><td>Firm \/ responsive<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Wilson Revolve<\/td><td>16<\/td><td>Black\/Grey<\/td><td>Co-polyester<\/td><td>Spin poly<\/td><td>Spin, snapback, baseline play<\/td><td>Medium-firm<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Solinco Mach 10<\/td><td>18<\/td><td>Blue<\/td><td>Co-polyester<\/td><td>Modern spin\/control poly<\/td><td>Spin, feel, fast swings<\/td><td>Crisp \/ responsive<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Dunlop Explosive Speed<\/td><td>16<\/td><td>Black<\/td><td>Co-polyester<\/td><td>Power\/control poly<\/td><td>Durability, control, pace<\/td><td>Firm \/ lively<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Gamma Ocho<\/td><td>16<\/td><td>White<\/td><td>Co-polyester<\/td><td>Shaped poly<\/td><td>Spin, bite, durability<\/td><td>Firm \/ grippy<\/td><td>Tier 2<\/td><\/tr>\n            <tr><td>Wilson Sensation Plus<\/td><td>17<\/td><td>Black<\/td><td>Multifilament<\/td><td>Comfort string<\/td><td>Comfort, power, arm-friendliness<\/td><td>Soft \/ powerful<\/td><td>Tier 3<\/td><\/tr>\n            <tr><td>Babolat Synthetic Gut<\/td><td>16<\/td><td>Clear\/White<\/td><td>Synthetic gut<\/td><td>Value all-round string<\/td><td>Beginners, value, easy power<\/td><td>Medium \/ classic<\/td><td>Tier 3<\/td><\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:34px\">\n        <span class=\"pt-badge\">How It Works<\/span>\n        <h2>Book, drop off, collect ready to play.<\/h2>\n      <\/div>\n      <div class=\"pt-grid-4\">\n        <div class=\"pt-card\"><div class=\"pt-badge\">1<\/div><h3>Choose service<\/h3><p>Use your own string or pick one of the included string tiers.<\/p><\/div>\n        <div class=\"pt-card\"><div class=\"pt-badge\">2<\/div><h3>Pick setup<\/h3><p>Choose a tension or ask for a recommendation based on your game.<\/p><\/div>\n        <div class=\"pt-card\"><div class=\"pt-badge\">3<\/div><h3>Drop off<\/h3><p>Bring the racket to Distillery Building, 11 Hart Yard, E3 2AL, London.<\/p><\/div>\n        <div class=\"pt-card\"><div class=\"pt-badge\">4<\/div><h3>Collect fresh<\/h3><p>Collect your freshly strung racket and get back on court.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <div class=\"pt-grid-2 pt-calc\">\n        <div class=\"pt-card\">\n          <span class=\"pt-badge\">String + Tension Calculator<\/span>\n          <h2>Find a setup for your game<\/h2>\n          <p>Use this as a starting point before booking and choosing a price tier.<\/p>\n          <label for=\"pt-spin\"><span>Spin<\/span><strong id=\"pt-spin-val\">7<\/strong><\/label><input type=\"range\" id=\"pt-spin\" min=\"1\" max=\"10\" value=\"7\">\n          <label for=\"pt-stiffness\"><span>Firm feel<\/span><strong id=\"pt-stiffness-val\">6<\/strong><\/label><input type=\"range\" id=\"pt-stiffness\" min=\"1\" max=\"10\" value=\"6\">\n          <label for=\"pt-durability\"><span>Durability<\/span><strong id=\"pt-durability-val\">7<\/strong><\/label><input type=\"range\" id=\"pt-durability\" min=\"1\" max=\"10\" value=\"7\">\n          <label for=\"pt-power\"><span>Power<\/span><strong id=\"pt-power-val\">5<\/strong><\/label><input type=\"range\" id=\"pt-power\" min=\"1\" max=\"10\" value=\"5\">\n          <a href=\"javascript:void(0)\" onclick=\"ptRecommendSetup()\" class=\"pt-btn pt-btn-primary\">Recommend My Setup<\/a>\n        <\/div>\n        <div class=\"pt-card pt-dark\">\n          <div style=\"opacity:.8;text-transform:uppercase;letter-spacing:.08em;font-family:Arial,Helvetica,sans-serif;font-size:13px\">Your best-fit setup<\/div>\n          <h3 id=\"pt-best-name\" style=\"font-size:34px;margin-top:10px;color:#fff!important\">Solinco Hyper-G<\/h3>\n          <p id=\"pt-best-blurb\">Spin-friendly, controlled and durable.<\/p>\n          <div class=\"pt-mini-grid\" id=\"pt-score-grid\"><\/div>\n          <div class=\"pt-card\" style=\"margin-top:18px;background:rgba(255,255,255,.08);color:#fff;border:none\">\n            <div style=\"font-family:Arial,Helvetica,sans-serif;font-size:13px;text-transform:uppercase;letter-spacing:.08em;opacity:.82\">Recommended starting tension<\/div>\n            <div id=\"pt-tension\" style=\"font-size:34px;font-weight:800;font-family:Arial,Helvetica,sans-serif;margin-top:6px\">52 lbs<\/div>\n            <p id=\"pt-tension-note\" style=\"margin:8px 0 0\">Balanced starting point for control, comfort and consistency.<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div class=\"pt-grid-2\">\n        <div><img decoding=\"async\" class=\"pt-photo\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0271\/1345\/5703\/files\/Velociti_Edit_COLOR.00_00_00_00.Still001-2_1024x1024.jpg?v=1686089246\" alt=\"Tennis strings for London racket restringing\"><\/div>\n        <div class=\"pt-card\">\n          <span class=\"pt-badge\">Choosing Strings<\/span>\n          <h2>Strings for spin, comfort, power and control.<\/h2>\n          <p>If you play mostly from the baseline at London parks, local clubs and indoor courts across East London, a shaped poly may help with spin and control. If comfort is the priority, a multifilament or synthetic gut can make the racket easier on the arm.<\/p>\n          <ul class=\"pt-list\">\n            <li><strong>Polyester:<\/strong> control, spin and durability for faster swings.<\/li>\n            <li><strong>Multifilament:<\/strong> comfort, power and feel.<\/li>\n            <li><strong>Synthetic gut:<\/strong> good value and a balanced response.<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  \n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div class=\"pt-grid-2\">\n        <div>\n          <span class=\"pt-badge\">Restring Guide<\/span>\n          <h2>When should London players restring?<\/h2>\n          <p>Strings lose tension and feel gradually. If you wait until they snap, you may spend weeks playing with a dead or inconsistent setup.<\/p>\n          <p>A useful rule is to restring roughly as many times per year as you play per week, then adjust for string type, hitting style and match schedule.<\/p>\n        <\/div>\n        <div class=\"pt-card\">\n          <h3>You probably need a restring if:<\/h3>\n          <ul class=\"pt-list\">\n            <li>Your shots are flying long more often than usual.<\/li>\n            <li>The racket feels dead, harsh or unpredictable.<\/li>\n            <li>You have lost spin, bite or directional control.<\/li>\n            <li>The strings are notching, moving around or fraying.<\/li>\n            <li>You have a match, tournament or coaching block coming up.<\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:28px\">\n        <span class=\"pt-badge\">FAQ<\/span>\n        <h2>Tennis stringing prices FAQs<\/h2>\n      <\/div>\n      <div class=\"pt-grid-2\">\n        <div class=\"pt-card\"><h3>What is the cheapest tennis stringing option?<\/h3><p>The cheapest option is \u00a320 when you bring your own string. That covers the labour to restring the racket.<\/p><\/div>\n        <div class=\"pt-card\"><h3>How much is stringing with strings included?<\/h3><p>Stringing with strings included is \u00a325 with Tier 3 strings, \u00a330 with Tier 2 strings and \u00a340 with Tier 1 strings.<\/p><\/div>\n        <div class=\"pt-card\"><h3>What is the difference between the string tiers?<\/h3><p>Tier 1 strings are premium performance strings. Tier 2 strings are strong everyday performance choices. Tier 3 strings are value-focused comfort and all-round options.<\/p><\/div>\n        <div class=\"pt-card\"><h3>Do you charge extra for tension advice?<\/h3><p>No. String and tension advice is included. Tell us how you play and what you want to improve, and we will suggest a sensible setup.<\/p><\/div>\n        <div class=\"pt-card\"><h3>How much is urgent turnaround?<\/h3><p>Standard turnaround is included. Fast turnaround within 4 days is +\u00a32, and urgent 24-hour turnaround is +\u00a36 when available.<\/p><\/div>\n        <div class=\"pt-card\"><h3>Where do I drop off my racket?<\/h3><p>Drop-off is at Distillery Building, 11 Hart Yard, E3 2AL, London, convenient for Bow, Mile End, Victoria Park, Hackney Wick, Hackney, Stratford, Tower Hamlets and Canary Wharf.<\/p><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\" style=\"background:#fbfaf6\">\n    <div class=\"pt-wrap\">\n      <div style=\"text-align:center;margin-bottom:28px\">\n        <span class=\"pt-badge\">Location<\/span>\n        <h2>Find us for London tennis stringing<\/h2>\n        <p>Drop-off at Distillery Building, 11 Hart Yard, E3 2AL, London<\/p>\n      <\/div>\n      <iframe loading=\"lazy\" allowfullscreen referrerpolicy=\"no-referrer-when-downgrade\" src=\"https:\/\/www.google.com\/maps\/embed?pb=!1m18!1m12!1m3!1d79430.9156992449!2d-0.1497308672122703!3d51.52759583977197!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x48761de9821d11c3%3A0x52301fb7d4bb1a03!2sPT%20-%20Tennis%20Stringing!5e0!3m2!1sen!2suk!4v1778165469399!5m2!1sen!2suk\"><\/iframe>\n      <div style=\"text-align:center;margin-top:22px\">\n        <a class=\"pt-btn pt-btn-secondary\" href=\"https:\/\/share.google\/tT65wELOTwyJpbWOD\" target=\"_blank\" rel=\"noopener\">Open in Google Maps<\/a>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-section\">\n    <div class=\"pt-wrap\">\n      <span class=\"pt-badge\">Nearby Pages<\/span>\n      <h2>Other local tennis stringing pages<\/h2>\n      <div class=\"pt-links\"><a href=\"https:\/\/www.passionnementtennis.com\/fr\/tennis-stringing-bow\/\">Tennis Stringing in Bow<\/a><a href=\"\/fr\/racket-stringing-bow\/\">Racket Stringing in Bow<\/a><a href=\"\/fr\/tennis-stringing-mile-end\/\">Tennis Stringing in Mile End<\/a><a href=\"\/fr\/tennis-stringing-victoria-park\/\">Tennis Stringing near Victoria Park<\/a><a href=\"https:\/\/www.passionnementtennis.com\/fr\/tennis-stringing-hackney-wick\/\">Tennis Stringing in Hackney Wick<\/a><a href=\"https:\/\/www.passionnementtennis.com\/fr\/tennis-stringing-hackney\/\">Tennis Stringing in Hackney<\/a><a href=\"\/fr\/tennis-stringing-stratford\/\">Tennis Stringing in Stratford<\/a><a href=\"\/fr\/tennis-stringing-tower-hamlets\/\">Tennis Stringing in Tower Hamlets<\/a><a href=\"\/fr\/tennis-stringing-canary-wharf\/\">Tennis Stringing near Canary Wharf<\/a><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"pt-cta-band\">\n    <div class=\"pt-wrap\">\n      <h2 style=\"color:#fff\">Ready to book at these prices?<\/h2>\n      <p style=\"color:rgba(255,255,255,.88);max-width:760px;margin:0 auto 18px\">Book your drop-off slot or message on WhatsApp and we will help you choose the right string and tension for your game.<\/p>\n      <a class=\"pt-btn pt-btn-secondary\" href=\"#book\">Book a Time for Dropoff<\/a>\n      <a class=\"pt-btn pt-btn-primary\" href=\"https:\/\/wa.me\/447467911129\" target=\"_blank\" rel=\"noopener\">Contact us on WhatsApp<\/a>\n    <\/div>\n  <\/section>\n\n  <script>\n    const PT_STRINGS = [\n      {\n            \"name\": \"Solinco Confidential\",\n            \"spin\": 8,\n            \"stiffness\": 8,\n            \"durability\": 9,\n            \"power\": 4,\n            \"family\": \"Tier 1\",\n            \"type\": \"16g Co-polyester\",\n            \"blurb\": \"Low-powered, durable and precise for players who want a controlled launch.\"\n      },\n      {\n            \"name\": \"Babolat RPM Blast Rough\",\n            \"spin\": 10,\n            \"stiffness\": 8,\n            \"durability\": 7,\n            \"power\": 4,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Textured co-polyester\",\n            \"blurb\": \"Textured, spin-heavy poly for aggressive baseliners who want extra bite.\"\n      },\n      {\n            \"name\": \"Babolat RPM Blast\",\n            \"spin\": 9,\n            \"stiffness\": 8,\n            \"durability\": 7,\n            \"power\": 4,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Co-polyester\",\n            \"blurb\": \"Classic spin and control poly for fast swings and heavy topspin.\"\n      },\n      {\n            \"name\": \"Luxilon ALU Power\",\n            \"spin\": 7,\n            \"stiffness\": 7,\n            \"durability\": 6,\n            \"power\": 6,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Co-polyester\",\n            \"blurb\": \"Crisp and direct premium poly with a famous match-day response.\"\n      },\n      {\n            \"name\": \"Solinco Hyper-G\",\n            \"spin\": 9,\n            \"stiffness\": 7,\n            \"durability\": 8,\n            \"power\": 5,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Shaped co-polyester\",\n            \"blurb\": \"Spin-friendly, controlled and durable for modern baseline play.\"\n      },\n      {\n            \"name\": \"Luxilon Element\",\n            \"spin\": 5,\n            \"stiffness\": 4,\n            \"durability\": 6,\n            \"power\": 7,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Soft co-polyester\",\n            \"blurb\": \"Comfort-focused poly with easier depth and a softer response than firmer control strings.\"\n      },\n      {\n            \"name\": \"Luxilon 4G\",\n            \"spin\": 6,\n            \"stiffness\": 9,\n            \"durability\": 9,\n            \"power\": 3,\n            \"family\": \"Tier 1\",\n            \"type\": \"17g Co-polyester\",\n            \"blurb\": \"Firm, stable and durable poly known for control and tension maintenance.\"\n      },\n      {\n            \"name\": \"Yonex Poly Tour Fire\",\n            \"spin\": 8,\n            \"stiffness\": 7,\n            \"durability\": 7,\n            \"power\": 6,\n            \"family\": \"Tier 2\",\n            \"type\": \"17g Co-polyester\",\n            \"blurb\": \"Crisp, lively co-polyester with good spin access and controlled power for confident hitters.\"\n      },\n      {\n            \"name\": \"TRU PRO Ghost Wire\",\n            \"spin\": 6,\n            \"stiffness\": 4,\n            \"durability\": 6,\n            \"power\": 6,\n            \"family\": \"Tier 2\",\n            \"type\": \"18g Co-polyester\",\n            \"blurb\": \"A softer control poly that works well for comfort-focused players and hybrid setups.\"\n      },\n      {\n            \"name\": \"Head Lynx Tour\",\n            \"spin\": 8,\n            \"stiffness\": 7,\n            \"durability\": 8,\n            \"power\": 5,\n            \"family\": \"Tier 2\",\n            \"type\": \"17g Co-polyester\",\n            \"blurb\": \"Responsive shaped poly with strong spin and all-court control.\"\n      },\n      {\n            \"name\": \"Wilson Revolve\",\n            \"spin\": 8,\n            \"stiffness\": 6,\n            \"durability\": 7,\n            \"power\": 5,\n            \"family\": \"Tier 2\",\n            \"type\": \"16g Co-polyester\",\n            \"blurb\": \"Spin-friendly co-poly with useful snapback and a more accessible response.\"\n      },\n      {\n            \"name\": \"Solinco Mach 10\",\n            \"spin\": 8,\n            \"stiffness\": 6,\n            \"durability\": 6,\n            \"power\": 6,\n            \"family\": \"Tier 2\",\n            \"type\": \"18g Co-polyester\",\n            \"blurb\": \"Responsive modern co-poly with spin and feel for players who swing freely.\"\n      },\n      {\n            \"name\": \"Dunlop Explosive Speed\",\n            \"spin\": 6,\n            \"stiffness\": 7,\n            \"durability\": 8,\n            \"power\": 6,\n            \"family\": \"Tier 2\",\n            \"type\": \"16g Co-polyester\",\n            \"blurb\": \"Durable, lively poly for players who want controlled pace from the baseline.\"\n      },\n      {\n            \"name\": \"Gamma Ocho\",\n            \"spin\": 9,\n            \"stiffness\": 7,\n            \"durability\": 8,\n            \"power\": 4,\n            \"family\": \"Tier 2\",\n            \"type\": \"16g Co-polyester\",\n            \"blurb\": \"Shaped poly with bite and durability for players chasing extra rotation.\"\n      },\n      {\n            \"name\": \"Wilson Sensation Plus\",\n            \"spin\": 4,\n            \"stiffness\": 2,\n            \"durability\": 4,\n            \"power\": 9,\n            \"family\": \"Tier 3\",\n            \"type\": \"17g Multifilament\",\n            \"blurb\": \"Soft multifilament option for comfort, easy depth and arm-friendliness.\"\n      },\n      {\n            \"name\": \"Babolat Synthetic Gut\",\n            \"spin\": 4,\n            \"stiffness\": 5,\n            \"durability\": 6,\n            \"power\": 7,\n            \"family\": \"Tier 3\",\n            \"type\": \"16g Synthetic gut\",\n            \"blurb\": \"Classic value string with balanced comfort, power and playability.\"\n      }\n];\n    function ptBindSlider(id){const slider=document.getElementById(id);const out=document.getElementById(id+\"-val\");if(!slider||!out)return;slider.addEventListener(\"input\",function(){out.textContent=slider.value})}\n    [\"pt-spin\",\"pt-stiffness\",\"pt-durability\",\"pt-power\"].forEach(ptBindSlider);\n    function ptDistance(s,p){return Math.abs(s.spin-p.spin)*1.25+Math.abs(s.stiffness-p.stiffness)*1.05+Math.abs(s.durability-p.durability)*1.15+Math.abs(s.power-p.power)*1.2}\n    function ptStartingTension(match,prefs){let tension=52;if(match.type.toLowerCase().includes(\"multi\")||match.type.toLowerCase().includes(\"synthetic\"))tension+=2;if(match.type.toLowerCase().includes(\"poly\"))tension-=1;if(prefs.power>=8)tension+=3;else if(prefs.power>=6)tension+=1;if(prefs.spin>=8)tension-=1;if(prefs.stiffness>=8)tension-=2;else if(prefs.stiffness<=3)tension+=2;if(tension<44)tension=44;if(tension>58)tension=58;let note=\"Balanced starting point for control, comfort and consistency.\";if(tension<=47)note=\"Lower tension for easier depth, pocketing and comfort.\";else if(tension>=56)note=\"Higher tension for a firmer feel and tighter directional control.\";else if(match.type.toLowerCase().includes(\"poly\"))note=\"Solid middle-ground starting point for a polyester setup.\";return{value:tension,note}}\n    function ptStat(label,value){return '<div class=\"pt-stat\"><span>'+label+'<\/span><strong>'+value+\"\/10<\/strong><\/div>\"}\n    function ptRecommendSetup(){const prefs={spin:Number(document.getElementById(\"pt-spin\").value),stiffness:Number(document.getElementById(\"pt-stiffness\").value),durability:Number(document.getElementById(\"pt-durability\").value),power:Number(document.getElementById(\"pt-power\").value)};const ranked=PT_STRINGS.map(function(s){return Object.assign({},s,{fit:ptDistance(s,prefs)})}).sort(function(a,b){return a.fit-b.fit});const best=ranked[0];const tension=ptStartingTension(best,prefs);document.getElementById(\"pt-best-name\").textContent=best.name+\" \u00b7 \"+best.family;document.getElementById(\"pt-best-blurb\").textContent=best.blurb;document.getElementById(\"pt-score-grid\").innerHTML=ptStat(\"Spin\",best.spin)+ptStat(\"Stiffness\",best.stiffness)+ptStat(\"Durability\",best.durability)+ptStat(\"Power\",best.power);document.getElementById(\"pt-tension\").textContent=tension.value+\" lbs\";document.getElementById(\"pt-tension-note\").textContent=tension.note}\n    document.addEventListener(\"DOMContentLoaded\",ptRecommendSetup);setTimeout(ptRecommendSetup,300);\n  <\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"Clear Stringing Prices Tennis Stringing Prices London Clear tennis racket stringing prices for London players. Bring your own&hellip;","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_gspb_post_css":"","csco_display_header_overlay":false,"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","csco_post_video_location":[],"csco_post_video_location_hash":"","csco_post_video_url":"","csco_post_video_bg_start_time":0,"csco_post_video_bg_end_time":0,"footnotes":""},"class_list":{"0":"post-3583","1":"page","2":"type-page","3":"status-publish","5":"cs-entry","6":"cs-video-wrap"},"_links":{"self":[{"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/pages\/3583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/comments?post=3583"}],"version-history":[{"count":4,"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/pages\/3583\/revisions"}],"predecessor-version":[{"id":3587,"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/pages\/3583\/revisions\/3587"}],"wp:attachment":[{"href":"https:\/\/www.passionnementtennis.com\/fr\/wp-json\/wp\/v2\/media?parent=3583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}