{"product_id":"symphonia-concerts-27-september","title":"Symphonia Concerts 27 September","description":"\u003cstyle\u003e\n.fm-concert{max-width:760px;margin:0 auto;padding:32px 20px;color:#1a1a1a;background:#fff;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",sans-serif;line-height:1.65}\n.fm-concert *{box-sizing:border-box}.fm-concert h2,.fm-concert h3{font-family:\"Iowan Old Style\",Baskerville,Georgia,serif;font-weight:400;letter-spacing:-.5px;color:#111}\n.fm-concert h2{font-size:36px;line-height:1.15;margin:0 0 12px}.fm-concert h3{font-size:25px;margin:0 0 14px}.fm-concert .fm-meta{color:#555;margin:0 0 24px}.fm-concert .fm-section{border-top:1px solid #e5e5e5;padding:24px 0}.fm-concert ul{padding-left:20px}.fm-concert a{color:#111;text-decoration:underline;text-underline-offset:4px}.fm-concert summary{cursor:pointer;font-weight:600;padding:8px 0}.fm-concert p{margin:0 0 16px}.fm-concert .fm-prices{display:flex;flex-wrap:wrap;gap:12px 24px}.fm-concert .fm-bio{padding-top:16px}@media(max-width:520px){.fm-concert{padding:24px 18px}.fm-concert h2{font-size:30px}.fm-concert h3{font-size:24px}}\n\u003c\/style\u003e\n\u003cdiv class=\"fm-concert\"\u003e\n\u003ch2\u003eFragments of Memory\u003c\/h2\u003e\n\u003cp\u003e\u003cstrong\u003eTrío de las Antípodas\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"fm-meta\"\u003eSunday 27 September 2026 · 3:00 PM\u003cbr\u003eSymphonia Music\u003cbr\u003e59 Wellington Street, Freemans Bay, Auckland\u003c\/p\u003e\n\u003cp\u003eTrío de las Antípodas presents works by Joaquín Turina, Christos Hatzis, Franz Schubert and more.\u003c\/p\u003e\n\u003csection class=\"fm-section\"\u003e\u003ch3\u003ePerformers\u003c\/h3\u003e\n\u003cp\u003eYanghe Yu · Violin\u003cbr\u003ePaul Mitchell · Cello\u003cbr\u003eJustin Bird · Piano\u003c\/p\u003e\u003c\/section\u003e\n\u003csection class=\"fm-section\"\u003e\u003ch3\u003eWorks by\u003c\/h3\u003e\n\u003cp\u003eJoaquín Turina\u003cbr\u003eChristos Hatzis\u003cbr\u003eFranz Schubert\u003cbr\u003eand more\u003c\/p\u003e\u003c\/section\u003e\n\u003cstyle\u003e.fm-concert .fm-artist-bio{border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;margin:24px 0}.fm-concert .fm-artist-bio summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:18px 0;font-weight:600}.fm-artist-bio summary::-webkit-details-marker{display:none}.fm-artist-bio summary::after{content:\"+\";font-size:22px;font-weight:400}.fm-artist-bio[open] summary::after{content:\"−\"}.fm-artist-bio__text{padding:0 0 16px;font-size:15px;line-height:1.7}.fm-artist-bio summary:focus-visible{outline:2px solid #111;outline-offset:4px}\u003c\/style\u003e\n\u003cdetails class=\"fm-artist-bio\"\u003e\u003csummary\u003eAbout Trío de las Antípodas\u003c\/summary\u003e\u003cdiv class=\"fm-artist-bio__text\"\u003e\n\u003cp\u003eTrío de las Antípodas was founded in 2025 by renowned New Zealand cellist Paul Mitchell, together with acclaimed New Zealand pianist Justin Bird and violinist Yanghe Yu.\u003c\/p\u003e\n\u003cp\u003eThe ensemble’s name, Trío de las Antípodas, draws inspiration from the distinctive geographical relationship between Spain and New Zealand—two countries situated near opposite sides of the globe. The name also reflects the trio’s commitment to creating musical connections across cultures and continents.\u003c\/p\u003e\n\u003cp\u003eIn December 2025, the trio was invited to present a special concert in Wellington for the Ambassador of Spain and representatives of several Spanish-speaking countries. The programme featured an entire evening of Spanish chamber music and was met with an exceptionally warm and enthusiastic response from the distinguished audience.\u003c\/p\u003e\n\u003cp\u003eThe success of this concert established a strong foundation for the ensemble’s continuing exploration of chamber music inspired by the rich musical traditions of Spain and the wider Spanish-speaking world.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n  .fm-selector {\n    background: rgb(var(--color-background));\n    color: rgb(var(--color-foreground));\n  }\n\n\n\n  .fm-selector__inner {\n    margin: 0 auto;\n    max-width: 880px;\n    padding: 64px 24px 72px;\n  }\n\n  .fm-selector__intro {\n    border-bottom: 1px solid rgba(var(--color-foreground), 0.14);\n    padding-bottom: 36px;\n  }\n\n  .fm-selector__kicker {\n    font-size: 1.1rem;\n    font-weight: 600;\n    letter-spacing: 0.32em;\n    margin: 0 0 14px;\n    opacity: 0.62;\n    text-transform: uppercase;\n  }\n\n  .fm-selector h1,\n  .fm-selector h2 {\n    font-size: clamp(3.6rem, 6vw, 5.6rem);\n    font-weight: 400;\n    line-height: 1.05;\n    margin: 0;\n  }\n\n  .fm-selector__copy {\n    font-size: 1.6rem;\n    line-height: 1.65;\n    margin-top: 18px;\n    max-width: 640px;\n    opacity: 0.7;\n  }\n\n  .fm-selector__concerts {\n    border-bottom: 1px solid rgba(var(--color-foreground), 0.14);\n    display: flex;\n    flex-direction: column;\n  }\n\n  .fm-selector__concert {\n    border-top: 1px solid rgba(var(--color-foreground), 0.14);\n    order: 1;\n  }\n\n  .fm-selector__concert:first-child {\n    border-top: 0;\n  }\n\n  .fm-selector__concert.is-focused {\n    order: 0;\n  }\n\n  .fm-selector__concert summary {\n    align-items: center;\n    cursor: pointer;\n    display: flex;\n    gap: 20px;\n    justify-content: space-between;\n    list-style: none;\n    padding: 24px 0;\n  }\n\n  .fm-selector__concert summary::-webkit-details-marker {\n    display: none;\n  }\n\n  .fm-selector__concert summary strong {\n    display: block;\n    font-size: 2.1rem;\n    font-weight: 400;\n  }\n\n  .fm-selector__concert summary small {\n    display: block;\n    font-size: 1.2rem;\n    margin-top: 5px;\n    opacity: 0.62;\n  }\n\n  .fm-selector__choose,\n  .fm-selector__details {\n    font-size: 1.2rem;\n  }\n\n  .fm-selector__choose {\n    opacity: 0.62;\n    white-space: nowrap;\n  }\n\n  .fm-selector__body {\n    padding-bottom: 28px;\n  }\n\n  .fm-selector__details {\n    color: inherit;\n    display: inline-block;\n    margin-bottom: 16px;\n    text-decoration: underline;\n    text-underline-offset: 4px;\n  }\n\n  .fm-selector__tickets {\n    display: grid;\n    gap: 8px;\n  }\n\n  .fm-selector__ticket {\n    align-items: center;\n    border: 1px solid rgba(var(--color-foreground), 0.14);\n    display: flex;\n    gap: 18px;\n    justify-content: space-between;\n    min-height: 66px;\n    padding: 10px 12px 10px 18px;\n  }\n\n  .fm-selector__ticket.is-selected {\n    border-color: rgb(var(--color-foreground));\n  }\n\n  .fm-selector__ticket.is-unavailable {\n    opacity: 0.55;\n  }\n\n  .fm-selector__ticket-name strong,\n  .fm-selector__ticket-name span,\n  .fm-selector__ticket-name small {\n    display: block;\n  }\n\n  .fm-selector__ticket-name strong {\n    font-size: 1.4rem;\n  }\n\n  .fm-selector__ticket-name span,\n  .fm-selector__ticket-name small {\n    font-size: 1.2rem;\n    margin-top: 3px;\n    opacity: 0.62;\n  }\n\n  .fm-selector__quantity {\n    align-items: center;\n    border: 1px solid rgba(var(--color-foreground), 0.3);\n    display: grid;\n    flex: 0 0 auto;\n    grid-template-columns: 38px 42px 38px;\n    height: 42px;\n  }\n\n  .fm-selector__quantity button {\n    background: transparent;\n    border: 0;\n    color: inherit;\n    cursor: pointer;\n    font-size: 1.9rem;\n    height: 100%;\n  }\n\n  .fm-selector__quantity button:disabled {\n    cursor: default;\n    opacity: 0.35;\n  }\n\n  .fm-selector__quantity output {\n    font-size: 1.4rem;\n    text-align: center;\n  }\n\n  .fm-selector__summary {\n    align-items: center;\n    display: grid;\n    gap: 22px;\n    grid-template-columns: auto minmax(220px, 1fr);\n    padding-top: 26px;\n  }\n\n  .fm-selector__summary span,\n  .fm-selector__summary strong {\n    display: block;\n  }\n\n  .fm-selector__summary span {\n    font-size: 1.2rem;\n    opacity: 0.62;\n  }\n\n  .fm-selector__summary strong {\n    font-size: 2.2rem;\n    font-weight: 400;\n    margin-top: 3px;\n  }\n\n  .fm-selector__summary .button {\n    align-items: center;\n    appearance: none;\n    background: #111;\n    border: 1px solid #111;\n    border-radius: 100px;\n    box-shadow: none;\n    color: #fff;\n    cursor: pointer;\n    display: inline-flex;\n    font-family: inherit;\n    font-size: 14px;\n    font-weight: 500;\n    justify-content: center;\n    justify-self: end;\n    letter-spacing: 0.5px;\n    line-height: 1.2;\n    min-height: 56px;\n    padding: 16px 32px;\n    text-align: center;\n    transition: opacity 180ms ease;\n    width: min(100%, 360px);\n  }\n\n  .fm-selector__summary .button::before,\n  .fm-selector__summary .button::after {\n    display: none;\n  }\n\n  .fm-selector__summary .button:hover:not(:disabled) {\n    opacity: 0.85;\n  }\n\n  .fm-selector__summary .button:focus-visible {\n    outline: 2px solid #111;\n    outline-offset: 3px;\n  }\n\n  .fm-selector__summary .button:disabled {\n    background: #e5e5e5;\n    border-color: #e5e5e5;\n    color: #6b6b6b;\n    cursor: default;\n    opacity: 1;\n  }\n\n  .fm-selector__status,\n  .fm-selector__notice {\n    font-size: 1.3rem;\n    margin: 16px 0 0;\n  }\n\n  .fm-selector__more {\n    margin-top: 28px;\n    text-align: center;\n  }\n\n  .fm-selector__more a {\n    color: inherit;\n    text-decoration: underline;\n    text-underline-offset: 4px;\n  }\n\n  .fm-selector__status.is-error {\n    color: rgb(var(--color-error, 180, 0, 0));\n  }\n\n  @media screen and (max-width: 749px) {\n    .fm-selector__inner {\n      padding: 36px 18px 46px;\n    }\n\n    .fm-selector__intro {\n      padding-bottom: 26px;\n    }\n\n    .fm-selector__kicker {\n      font-size: 10px;\n      letter-spacing: 3px;\n      margin-bottom: 10px;\n    }\n\n    .fm-selector h1,\n    .fm-selector h2 {\n      font-size: 34px;\n      line-height: 1.08;\n    }\n\n    .fm-selector__copy {\n      font-size: 16px;\n      line-height: 1.55;\n      margin-top: 12px;\n    }\n\n    .fm-selector__concert summary {\n      align-items: flex-start;\n      gap: 14px;\n      padding: 18px 0;\n    }\n\n    .fm-selector__concert summary::after {\n      display: none;\n    }\n\n    .fm-selector__concert summary \u003e span:first-child {\n      flex: 1 1 auto;\n      min-width: 0;\n    }\n\n    .fm-selector__concert summary strong {\n      font-size: 21px;\n      line-height: 1.2;\n    }\n\n    .fm-selector__concert summary small {\n      font-size: 14px;\n      line-height: 1.4;\n      margin-top: 4px;\n    }\n\n    .fm-selector__choose,\n    .fm-selector__details {\n      font-size: 14px;\n      line-height: 1.3;\n    }\n\n    .fm-selector__choose {\n      flex: 0 0 auto;\n      padding-top: 2px;\n    }\n\n    .fm-selector__body {\n      padding-bottom: 22px;\n    }\n\n    .fm-selector__tickets {\n      gap: 7px;\n    }\n\n    .fm-selector__ticket {\n      gap: 12px;\n      min-height: 60px;\n      padding: 9px 10px 9px 14px;\n    }\n\n    .fm-selector__ticket-name strong {\n      font-size: 16px;\n      line-height: 1.25;\n    }\n\n    .fm-selector__ticket-name span,\n    .fm-selector__ticket-name small {\n      font-size: 14px;\n      line-height: 1.3;\n    }\n\n    .fm-selector__quantity button {\n      font-size: 22px;\n    }\n\n    .fm-selector__quantity output {\n      font-size: 16px;\n    }\n\n    .fm-selector__summary {\n      align-items: stretch;\n      gap: 16px;\n      grid-template-columns: 1fr;\n      padding-top: 22px;\n    }\n\n    .fm-selector__summary span {\n      font-size: 14px;\n    }\n\n    .fm-selector__summary strong {\n      font-size: 26px;\n      line-height: 1.15;\n    }\n\n    .fm-selector__summary .button {\n      justify-self: stretch;\n      width: 100%;\n    }\n\n    .fm-selector__status,\n    .fm-selector__notice {\n      font-size: 14px;\n    }\n\n    .fm-selector__more {\n      margin-top: 22px;\n    }\n\n    .fm-selector__more a {\n      font-size: 15px;\n    }\n  }\n\u003c\/style\u003e\n\u003csection class=\"fm-selector\" id=\"ConcertTicketSelector-Sept27\" style=\"--color-foreground:17,17,17;--color-background:255,255,255\"\u003e\u003cdiv class=\"fm-selector__inner\"\u003e\n\u003cheader class=\"fm-selector__intro\"\u003e\u003cp class=\"fm-selector__kicker\"\u003eSYMPHONIA CONCERT SERIES\u003c\/p\u003e\n\u003ch2\u003eChoose your tickets\u003c\/h2\u003e\n\u003cdiv class=\"fm-selector__copy rte\"\u003e\u003cp\u003eSelect your ticket quantities, then add them to your cart.\u003c\/p\u003e\u003c\/div\u003e\u003c\/header\u003e\u003cdiv class=\"fm-selector__concerts\"\u003e\u003cdetails class=\"fm-selector__concert is-focused\" open\u003e\u003csummary\u003e\u003cspan\u003e\u003cstrong\u003eFragments of Memory\u003c\/strong\u003e\u003csmall\u003eSunday 27 September 2026 · 3:00 PM\u003c\/small\u003e\u003c\/span\u003e\u003cspan class=\"fm-selector__choose\"\u003eChoose tickets\u003c\/span\u003e\u003c\/summary\u003e\u003cdiv class=\"fm-selector__body\"\u003e\u003cdiv class=\"fm-selector__tickets\"\u003e\n\u003cdiv class=\"fm-selector__ticket\" data-ticket-row data-price=\"3500\" data-variant-id=\"51331380969639\"\u003e\n\u003cdiv class=\"fm-selector__ticket-name\"\u003e\n\u003cstrong\u003eGeneral Admission\u003c\/strong\u003e\u003cspan\u003e$35.00\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__quantity\" aria-label=\"General Admission — Fragments of Memory\"\u003e\n\u003cbutton type=\"button\" data-quantity-change=\"-1\" aria-label=\"Decrease quantity for General Admission\" disabled\u003e−\u003c\/button\u003e\u003coutput data-quantity aria-live=\"polite\"\u003e0\u003c\/output\u003e\u003cbutton type=\"button\" data-quantity-change=\"1\" aria-label=\"Increase quantity for General Admission\" data-max=\"60\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__ticket\" data-ticket-row data-price=\"3000\" data-variant-id=\"51331381002407\"\u003e\n\u003cdiv class=\"fm-selector__ticket-name\"\u003e\n\u003cstrong\u003eSenior\u003c\/strong\u003e\u003cspan\u003e$30.00\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__quantity\" aria-label=\"Senior — Fragments of Memory\"\u003e\n\u003cbutton type=\"button\" data-quantity-change=\"-1\" aria-label=\"Decrease quantity for Senior\" disabled\u003e−\u003c\/button\u003e\u003coutput data-quantity aria-live=\"polite\"\u003e0\u003c\/output\u003e\u003cbutton type=\"button\" data-quantity-change=\"1\" aria-label=\"Increase quantity for Senior\" data-max=\"20\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__ticket\" data-ticket-row data-price=\"2000\" data-variant-id=\"51331381035175\"\u003e\n\u003cdiv class=\"fm-selector__ticket-name\"\u003e\n\u003cstrong\u003eStudent\u003c\/strong\u003e\u003cspan\u003e$20.00\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__quantity\" aria-label=\"Student — Fragments of Memory\"\u003e\n\u003cbutton type=\"button\" data-quantity-change=\"-1\" aria-label=\"Decrease quantity for Student\" disabled\u003e−\u003c\/button\u003e\u003coutput data-quantity aria-live=\"polite\"\u003e0\u003c\/output\u003e\u003cbutton type=\"button\" data-quantity-change=\"1\" aria-label=\"Increase quantity for Student\" data-max=\"20\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\u003c\/details\u003e\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__summary\"\u003e\n\u003cdiv\u003e\n\u003cspan data-summary-count\u003e0 tickets\u003c\/span\u003e\u003cstrong data-summary-total\u003e$0.00\u003c\/strong\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"button\" type=\"button\" data-add-selected disabled\u003eChoose at least one ticket\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"fm-selector__more\"\u003e\u003ca href=\"\/collections\/symphonia-events\"\u003eMore concerts\u003c\/a\u003e\u003c\/div\u003e\n\u003cp class=\"fm-selector__status\" data-status role=\"status\" hidden\u003e\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/section\u003e\n\u003cscript\u003e\n  (() =\u003e {\n    const root = document.getElementById('ConcertTicketSelector-Sept27');\n    if (!root || root.dataset.initialised === 'true') return;\n    root.dataset.initialised = 'true';\n\n    const rows = Array.from(root.querySelectorAll('[data-ticket-row]'));\n    const countElement = root.querySelector('[data-summary-count]');\n    const totalElement = root.querySelector('[data-summary-total]');\n    const addButton = root.querySelector('[data-add-selected]');\n    const statusElement = root.querySelector('[data-status]');\n    const moneyFormat = new Intl.NumberFormat('en-NZ', {\n      style: 'currency',\n      currency: 'NZD'\n    });\n\n    function quantityFor(row) {\n      return Number(row.querySelector('[data-quantity]').textContent) || 0;\n    }\n\n    function refresh() {\n      let count = 0;\n      let total = 0;\n\n      rows.forEach((row) =\u003e {\n        const quantity = quantityFor(row);\n        count += quantity;\n        total += quantity * Number(row.dataset.price || 0);\n        row.classList.toggle('is-selected', quantity \u003e 0);\n\n        const decrease = row.querySelector('[data-quantity-change=\"-1\"]');\n        const increase = row.querySelector('[data-quantity-change=\"1\"]');\n        const max = Number(increase.dataset.max || 0);\n        decrease.disabled = quantity === 0;\n        if (increase.dataset.max) increase.disabled = quantity \u003e= max;\n      });\n\n      countElement.textContent = `${count} ${count === 1 ? 'ticket' : 'tickets'}`;\n      totalElement.textContent = moneyFormat.format(total \/ 100);\n      addButton.disabled = count === 0;\n      addButton.textContent = count === 0\n        ? 'Choose at least one ticket'\n        : 'Add selected tickets to cart';\n    }\n\n    root.addEventListener('click', (event) =\u003e {\n      const control = event.target.closest('[data-quantity-change]');\n      if (!control) return;\n\n      const row = control.closest('[data-ticket-row]');\n      const output = row.querySelector('[data-quantity]');\n      const current = quantityFor(row);\n      const change = Number(control.dataset.quantityChange);\n      const max = Number(row.querySelector('[data-quantity-change=\"1\"]').dataset.max || 0);\n      const next = Math.max(0, current + change);\n\n      if (next \u003e max || control.disabled) return;\n      output.textContent = String(next);\n      statusElement.hidden = true;\n      refresh();\n    });\n\n    addButton.addEventListener('click', async () =\u003e {\n      const items = rows\n        .map((row) =\u003e ({\n          id: Number(row.dataset.variantId),\n          quantity: quantityFor(row)\n        }))\n        .filter((item) =\u003e item.quantity \u003e 0);\n\n      if (!items.length) return;\n\n      addButton.disabled = true;\n      addButton.textContent = 'Adding tickets…';\n      statusElement.hidden = true;\n      statusElement.classList.remove('is-error');\n\n      try {\n        const response = await fetch(`${window.Shopify.routes.root}cart\/add.js`, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application\/json',\n            Accept: 'application\/json'\n          },\n          body: JSON.stringify({ items })\n        });\n\n        if (!response.ok) {\n          const error = await response.json();\n          throw new Error(error.description || 'These tickets could not be added. Please review the quantities and try again.');\n        }\n\n        window.location.assign(`${window.Shopify.routes.root}cart`);\n      } catch (error) {\n        statusElement.textContent = error.message || 'These tickets could not be added. Please review the quantities and try again.';\n        statusElement.classList.add('is-error');\n        statusElement.hidden = false;\n        refresh();\n      }\n    });\n\n    refresh();\n  })();\n\u003c\/script\u003e","brand":"Symphonia Music","offers":[{"title":"Default Title","offer_id":51331380576423,"sku":null,"price":35.0,"currency_code":"NZD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0633\/2432\/4007\/files\/fragments-of-memory-27-september-2026.png?v=1789198723","url":"https:\/\/symphoniamusic.co.nz\/products\/symphonia-concerts-27-september","provider":"Symphonia Music","version":"1.0","type":"link"}