
"<!DOCTYPE html>\n<html lang=\"en\"><head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<script src=\"c24b4296-7127-4276-adbe-038924a4907c\"><\u002Fscript>\n<\u002Fhead>\n<body>\n\n<x-dc>\n<helmet>\n<style>/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"4bb0450d-4550-44a6-a886-17c3f71006d2\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"f8176a9c-e90e-49e5-bac1-7bd19f126735\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"7b9e3485-fa31-4895-9d5b-6f65a737c5e9\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"4bb0450d-4550-44a6-a886-17c3f71006d2\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"f8176a9c-e90e-49e5-bac1-7bd19f126735\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"7b9e3485-fa31-4895-9d5b-6f65a737c5e9\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"55a81937-f75a-42cc-b61f-8df6a3eef4fe\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"095c7499-4144-4a82-831d-f8fb4a838e16\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"d5686d39-80d0-45f7-92b4-b9a010a7bbdf\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"55a81937-f75a-42cc-b61f-8df6a3eef4fe\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"095c7499-4144-4a82-831d-f8fb4a838e16\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"d5686d39-80d0-45f7-92b4-b9a010a7bbdf\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"55a81937-f75a-42cc-b61f-8df6a3eef4fe\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"095c7499-4144-4a82-831d-f8fb4a838e16\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"d5686d39-80d0-45f7-92b4-b9a010a7bbdf\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"55a81937-f75a-42cc-b61f-8df6a3eef4fe\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"095c7499-4144-4a82-831d-f8fb4a838e16\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"d5686d39-80d0-45f7-92b4-b9a010a7bbdf\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"55a81937-f75a-42cc-b61f-8df6a3eef4fe\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"095c7499-4144-4a82-831d-f8fb4a838e16\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Jost';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"d5686d39-80d0-45f7-92b4-b9a010a7bbdf\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"47e80e1a-38fb-40df-b733-e737c7d88151\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"3ef30453-1ce4-4981-864a-a99d31dd4008\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"b4e02686-763a-4949-8d3b-d5924c86df1e\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"ab3d3acf-ebea-4786-a251-694420023de4\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Mulish';\n  font-style: normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"2223ac36-8d6c-47de-b420-3400ea2a8150\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"7d6f27fb-b972-470c-bfbf-0cca3cfa54cd\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"0730673a-fe81-43ec-8021-656d57d4fbf6\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"6cfdc43c-ea12-4894-992c-87ad8e0c01e6\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"86f4b6f0-789b-4da7-8e0b-e59f94669c6b\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"c402980b-c939-4d89-8a0e-c5abdc56cdfa\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"ee7ed2ee-6695-4434-aff9-bca1b0930b0d\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"94e517a9-275f-4e01-8948-de33cd5007cf\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"fa346ac3-0857-44b9-8c2d-318e7fd88cda\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"2b1248dc-67a8-4e3a-8f8a-102df1061bd7\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Spectral';\n  font-style: italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"c0f1aeb9-2a1e-42c9-ae4b-62ec166d9c84\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"a8076497-15ba-4fdd-a23a-28cfa01cf0d4\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"f16c87ed-8ff5-47c6-ae16-ca7472576467\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"4998ec44-427e-477c-9c2a-ec2657074c96\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"2bb395ad-e077-4d68-bc38-a568342d36c2\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"0ee15416-744a-4d8b-bc76-5a69d4b7d8ce\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"6351727d-5951-48ce-a877-27ec7bd61bd0\") format('woff2');\n  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"b3bd2a76-1486-4a5e-9861-568fd4a565fa\") format('woff2');\n  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"97706f61-ac95-474e-a2c4-24773c56b90a\") format('woff2');\n  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"a1245b5c-f399-4f56-b377-787dc361ad7e\") format('woff2');\n  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Spectral';\n  font-style: normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"d71beb25-60a3-4d21-9a8d-cdbf32dcbb84\") format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n<\u002Fstyle>\n<style>\n  /* The raw template is in the DOM before the runtime boots; without this it\n     paints every section and modal at once for a frame. */\n  x-dc{display:none!important;}\n  *{box-sizing:border-box;}\n  html,body{margin:0;}\n  body{background:#eceae4;overflow-x:hidden;font-family:'Mulish',system-ui,sans-serif;color:#1a1a1a;-webkit-font-smoothing:antialiased;}\n  a{color:#a85a08;text-decoration:none;}\n  a:hover{color:#8f4c06;}\n  img{max-width:100%;display:block;}\n  input{font-family:inherit;}\n  ::selection{background:#f6c17d;}\n  @keyframes drift{from{transform:translate3d(-135vw,-135vh,0);}to{transform:translate3d(135vw,135vh,0);}}\n  @keyframes spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}\n  @keyframes rotatehint{0%,22%{transform:rotate(0deg);}45%,72%{transform:rotate(-90deg);}95%,100%{transform:rotate(0deg);}}\n  @keyframes fadein{from{opacity:0;}to{opacity:1;}}\n  @keyframes popin{from{opacity:0;transform:translateY(14px) scale(.97);}to{opacity:1;transform:none;}}\n<\u002Fstyle>\n<\u002Fhelmet>\n<div style=\"position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;\">{{ foilField }}<\u002Fdiv>\n<div style=\"position:relative;max-width:1440px;width:{{ shellWidth }};margin:{{ shellMargin }} auto 0;padding-bottom:{{ shellMargin }};opacity:{{ revealOpacity }};transform:{{ revealShift }};transition:opacity 1.05s ease,transform 1.15s cubic-bezier(.16,.84,.32,1);will-change:{{ revealWillChange }};\">\n  <div style=\"position:relative;z-index:1;background:#fff;border:1.5px solid #111;border-radius:{{ cardRadius }};overflow:hidden;\" data-comment-anchor=\"239a34cbce-div\">\n\n  <!-- HEADER -->\n  <dc-import name=\"Header\" nav=\"{{ nav }}\" on-logo=\"{{ goHome }}\" home-href=\"{{ hrefHome }}\" hint-size=\"100%,110px\" style=\"display:block;\"><\u002Fdc-import>\n\n  <!-- ================= HOME ================= -->\n  <sc-if value=\"{{ isHome }}\" hint-placeholder-val=\"{{ true }}\">\n  <div>\n    <div ref=\"{{ setHeroRef }}\" style=\"position:relative;height:{{ heroHomeHeight }};border-bottom:1.5px solid #111;overflow:hidden;background:#0d0d0d;\">{{ heroHome }}<\u002Fdiv>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.5px;background:#111;\">\n      <div style=\"background:#fff;display:flex;flex-direction:column;\">\n        <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px) clamp(30px,4vw,44px);\">\n          <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(38px,5.4vw,54px);line-height:.94;letter-spacing:-.02em;color:#111;text-wrap:balance;\">{{ hpHeadingLine1 }}<br><span style=\"color:#a85a08;\">{{ hpHeadingLine2 }}<\u002Fspan><\u002Fdiv>\n        <\u002Fdiv>\n        <div style=\"padding:0 clamp(18px,4.3vw,60px) clamp(28px,5vw,56px);\">\n          <blockquote style=\"margin:0;\">\n            <div style=\"font-family:'Spectral',serif;font-style:italic;font-size:clamp(24px,3.4vw,32px);line-height:1.28;color:#111;text-wrap:pretty;\">“{{ pressText }}”<\u002Fdiv>\n            <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:#6a655c;margin-top:14px;\">{{ pressCredit }}<\u002Fdiv>\n          <\u002Fblockquote>\n          <blockquote style=\"margin:clamp(26px,3.4vw,34px) 0 0;padding-top:clamp(22px,3vw,28px);border-top:1px solid rgba(17,17,17,.14);\">\n            <div style=\"font-family:'Spectral',serif;font-style:italic;font-size:clamp(17px,2.1vw,20px);line-height:1.42;color:#2a2a2a;text-wrap:pretty;\">“{{ pressTextNext }}”<\u002Fdiv>\n            <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;color:#6a655c;margin-top:12px;\">{{ pressCreditNext }}<\u002Fdiv>\n          <\u002Fblockquote>\n        <\u002Fdiv>\n      <\u002Fdiv>\n      <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4vw,46px);background:#111;color:#fff;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:13px;letter-spacing:.14em;color:#f6c17d;\">{{ featuredKicker }}<\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(44px,7vw,64px);line-height:.95;margin:14px 0 4px;\">ZONAR<\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-size:15px;letter-spacing:.02em;color:#cfccc6;\">2026 · Happy Seal Records · LP<\u002Fdiv>\n        <div style=\"position:relative;overflow:hidden;margin:22px 0;height:220px;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;letter-spacing:.06em;overflow:hidden;\">\n          {{ featuredCoverEl }}\n          <sc-if value=\"{{ noFeaturedHero }}\" hint-placeholder-val=\"{{ true }}\"><span>album cover art<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n        <p style=\"font-size:15px;line-height:1.6;color:#d8d5cf;\">{{ featuredDesc }}<\u002Fp>\n        <div style=\"display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:8px;\">\n          <button sc-camel-on-click=\"{{ goZonar }}\" style-hover=\"background:#8f4c06\" style=\"background:#a85a08;color:#fff;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;padding:12px 22px;border:none;cursor:pointer;transition:background .15s;\" data-comment-anchor=\"7c2ea9cd85-button\">Go to album →<\u002Fbutton>\n          <sc-if value=\"{{ hasFeaturedLink }}\" hint-placeholder-val=\"{{ false }}\"><button sc-camel-on-click=\"{{ openFeaturedLink }}\" style-hover=\"background:#fff;color:#111\" style=\"background:transparent;color:#fff;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;padding:12px 22px;border:1.5px solid #fff;cursor:pointer;transition:.15s;\">{{ featuredLinkLabel }} ↗<\u002Fbutton><\u002Fsc-if>\n        <\u002Fdiv>\n      <\u002Fdiv>\n    <\u002Fdiv>\n\n    <!-- LATEST NEWS / WATCH -->\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr));border-top:1.5px solid #111;gap:1.5px;background:#111;\">\n      <div style=\"padding:clamp(26px,5vw,52px) clamp(18px,4.3vw,60px);background:#fff;\">\n        <div style=\"display:flex;align-items:baseline;justify-content:space-between;margin-bottom:30px;\">\n          <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(28px,4.5vw,36px);\">Latest news<\u002Fdiv>\n          <a href=\"{{ hrefNews }}\" sc-camel-on-click=\"{{ goNews }}\" style=\"cursor:pointer;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;\">All news →<\u002Fa>\n        <\u002Fdiv>\n        <div style=\"display:flex;flex-direction:column;gap:26px;\">\n          <sc-for list=\"{{ homeNews }}\" as=\"n\" hint-placeholder-count=\"3\">\n            <a href=\"{{ n.href }}\" sc-camel-on-click=\"{{ n.onClick }}\" style-hover=\"opacity:.66\" style=\"display:block;color:inherit;text-decoration:none;cursor:pointer;transition:opacity .15s;border-top:3px solid #111;padding-top:16px;\">\n              <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;letter-spacing:.04em;color:#6a655c;\">{{ n.day }} {{ n.mon }} {{ n.year }}<\u002Fdiv>\n              <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:clamp(16px,3.4vw,21px);line-height:1.2;margin-top:8px;\">{{ n.title }}<\u002Fdiv>\n            <\u002Fa>\n          <\u002Fsc-for>\n        <\u002Fdiv>\n      <\u002Fdiv>\n      <div style=\"padding:clamp(26px,5vw,52px) clamp(18px,4vw,46px);background:#fff;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(28px,4.5vw,36px);margin-bottom:22px;\">Watch<\u002Fdiv>\n        <a href=\"{{ homeWatch.href }}\" sc-camel-on-click=\"{{ homeWatch.onClick }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"opacity:.92\" style=\"display:block;aspect-ratio:16/9;background:#111;position:relative;overflow:hidden;cursor:pointer;transition:opacity .2s ease;\">\n          {{ homeWatch.posterEl }}\n          <sc-if value=\"{{ homeWatch.hasPoster }}\" hint-placeholder-val=\"{{ false }}\">\n            <div style=\"position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.55) 0%,rgba(0,0,0,.12) 40%,rgba(0,0,0,.5) 100%);\"><\u002Fdiv>\n          <\u002Fsc-if>\n          <div style=\"position:absolute;top:16px;left:18px;right:18px;color:#fff;font-family:'Mulish',sans-serif;font-weight:700;font-size:17px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">{{ homeWatch.title }}<div style=\"font-weight:400;font-size:13px;color:#e6e3dd;margin-top:2px;\">{{ homeWatch.channel }}<\u002Fdiv><\u002Fdiv>\n          <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\" data-comment-anchor=\"392718e33b-div\"><div style=\"width:72px;height:50px;background:#e30000;border-radius:11px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.35);\"><div style=\"width:0;height:0;border-left:17px solid #fff;border-top:11px solid transparent;border-bottom:11px solid transparent;margin-left:4px;\"><\u002Fdiv><\u002Fdiv><\u002Fdiv>\n          <div style=\"position:absolute;bottom:13px;right:15px;color:#fff;font-family:monospace;font-size:11px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">Watch<\u002Fdiv>\n        <\u002Fa>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= BIO ================= -->\n  <sc-if value=\"{{ isBio }}\" hint-placeholder-val=\"{{ false }}\">\n  <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px);\">\n    <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,54px);line-height:1;letter-spacing:-.01em;margin-bottom:34px;\">{{ bioHeading }}<\u002Fdiv>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr));gap:clamp(24px,4vw,52px);align-items:stretch;\" data-comment-anchor=\"e68506630a-div\">\n      <div data-comment-anchor=\"75fbdabacd-blockquote\">\n        <p style=\"font-size:18px;line-height:1.64;color:#2a2a2a;margin-top:0;\">{{ bioLead }}<\u002Fp>\n        <sc-for list=\"{{ bioQuotes }}\" as=\"bq\" hint-placeholder-count=\"3\">\n          <blockquote style=\"margin:26px 0;padding-left:22px;border-left:3px solid #e5871a;font-family:'Spectral',serif;font-style:italic;font-size:21px;line-height:1.4;color:#1a1a1a;\">“{{ bq.text }}”<span style=\"display:block;font-style:normal;font-family:'Jost',sans-serif;font-size:14px;letter-spacing:.04em;color:#6a655c;margin-top:10px;\">— {{ bq.attr }}<\u002Fspan><\u002Fblockquote>\n        <\u002Fsc-for>\n        <p style=\"font-size:18px;line-height:1.64;color:#2a2a2a;\">{{ bioPara1 }}<\u002Fp>\n      <\u002Fdiv>\n      <div style=\"position:relative;overflow:hidden;background:#0d0d0d;min-height:520px;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:12px;text-transform:uppercase;letter-spacing:.06em;text-align:center;padding:16px;\">\n        {{ bioPortraitEl }}\n        <sc-if value=\"{{ noBioPortrait }}\" hint-placeholder-val=\"{{ true }}\"><span>black-and-white quartet portrait on the beach<\u002Fspan><\u002Fsc-if>\n      <\u002Fdiv>\n    <\u002Fdiv>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr));gap:clamp(24px,4vw,52px);margin-top:44px;\">\n      <p style=\"font-size:18px;line-height:1.64;color:#2a2a2a;margin:0;\">{{ bioPara2 }}<\u002Fp>\n      <p style=\"font-size:18px;line-height:1.64;color:#2a2a2a;margin:0;\">{{ bioPara3 }}<\u002Fp>\n    <\u002Fdiv>\n    <div ref=\"{{ setBioRef }}\" style=\"position: relative; transition: height .55s cubic-bezier(.4,0,.2,1); height: {{ containerHeight }}; margin-top: 30px; margin-bottom: 0px\">\n      <div style=\"position:absolute;z-index:5;font-family:'Jost',sans-serif;font-weight:800;font-size:30px;line-height:1;transition:left .55s cubic-bezier(.4,0,.2,1),top .55s cubic-bezier(.4,0,.2,1),transform .55s cubic-bezier(.4,0,.2,1);left:{{ headGeo.left }};top:{{ headGeo.top }};transform:{{ headGeo.transform }};\">The NSSQ<\u002Fdiv>\n      <sc-for list=\"{{ members }}\" as=\"m\" hint-placeholder-count=\"4\">\n        <div sc-camel-on-click=\"{{ m.onClick }}\" style=\"position:absolute;overflow:hidden;cursor:pointer;background:#0d0d0d;transition:left .55s cubic-bezier(.4,0,.2,1),top .55s cubic-bezier(.4,0,.2,1),width .55s cubic-bezier(.4,0,.2,1),height .55s cubic-bezier(.4,0,.2,1);left:{{ m.geo.left }};top:{{ m.geo.top }};width:{{ m.geo.width }};height:{{ m.geo.height }};z-index:{{ m.geo.z }};\">\n          {{ m.photoEl }}\n          <sc-if value=\"{{ m.noPhoto }}\" hint-placeholder-val=\"{{ true }}\"><div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:10px;\">{{ m.ph }}<\u002Fdiv><\u002Fsc-if>\n          <div style-hover=\"opacity:1\" style=\"position:absolute;inset:0;opacity:0;transition:opacity .28s ease;background:linear-gradient(to top,rgba(17,17,17,.86) 0%,rgba(17,17,17,.15) 55%,transparent 100%);display:flex;flex-direction:column;justify-content:flex-end;padding:16px;color:#fff;\">\n            <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:18px;line-height:1.05;\">{{ m.name }}<\u002Fdiv>\n            <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#f6c17d;margin-top:3px;\">{{ m.role }}<\u002Fdiv>\n          <\u002Fdiv>\n        <\u002Fdiv>\n      <\u002Fsc-for>\n      <div style=\"position:absolute;overflow:auto;padding-right:4px;transition:opacity .4s ease .12s;left:{{ panelGeo.left }};top:{{ panelGeo.top }};width:{{ panelGeo.width }};height:{{ panelGeo.height }};opacity:{{ bioStyle.opacity }};pointer-events:{{ bioStyle.pointerEvents }};\">\n        <button sc-camel-on-click=\"{{ closeMember }}\" title=\"Close\" style-hover=\"background:#111;color:#fff\" style=\"position:absolute;top:0;right:0;width:34px;height:34px;border:1.5px solid #111;background:#fff;font-size:17px;line-height:1;cursor:pointer;transition:.15s;\">×<\u002Fbutton>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:26px;line-height:1.02;padding-right:44px;\">{{ activeMember.name }}<\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:#a85a08;margin:5px 0 14px;\">{{ activeMember.role }}<\u002Fdiv>\n        <p style=\"font-size:18px;line-height:1.64;color:#2a2a2a;margin:0;\" data-comment-anchor=\"0dc461529c-p\">{{ activeMember.bio }}<\u002Fp>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= MUSIC LIST ================= -->\n  <sc-if value=\"{{ isMusicList }}\" hint-placeholder-val=\"{{ false }}\">\n  <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px);\" data-comment-anchor=\"a9736b2461-div\">\n    <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,54px);line-height:1;letter-spacing:-.01em;margin-bottom:40px;\">Discography<\u002Fdiv>\n    <div sc-camel-on-click=\"{{ goZonar }}\" style-hover=\"opacity:.94\" style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:0;border:1.5px solid #111;margin-bottom:48px;cursor:pointer;transition:opacity .15s;background:#111;\">\n      <div style=\"position:relative;overflow:hidden;aspect-ratio:1/1;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:16px;overflow:hidden;\">\n        {{ featuredCoverEl }}\n        <sc-if value=\"{{ noFeaturedHero }}\" hint-placeholder-val=\"{{ true }}\"><span>{{ featuredTitleLabel }}<\u002Fspan><\u002Fsc-if>\n      <\u002Fdiv>\n      <div style=\"padding:48px 46px;color:#fff;display:flex;flex-direction:column;justify-content:center;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:12px;letter-spacing:.16em;color:#f6c17d;\">FEATURED · NEW RELEASE<\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:62px;line-height:.95;margin:10px 0 6px;\">ZONAR<\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-size:16px;color:#cfccc6;\">2026 · Happy Seal Records · LP<\u002Fdiv>\n        <p style=\"font-size:15px;line-height:1.6;color:#d8d5cf;max-width:44ch;\">The acoustic string quartet immersed in the sonic worlds of electronic music — EDM, ambient and experimental textures, entirely without electronics.<\u002Fp>\n        <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:15px;color:#e5871a;\">View album →<\u002Fspan>\n      <\u002Fdiv>\n    <\u002Fdiv>\n    <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:26px;margin-bottom:24px;\">All recordings<\u002Fdiv>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:30px;\">\n      <sc-for list=\"{{ albums }}\" as=\"a\" hint-placeholder-count=\"5\">\n        <a href=\"{{ a.href }}\" sc-camel-on-click=\"{{ a.onClick }}\" style-hover=\"transform:translateY(-6px)\" style=\"display:block;color:inherit;text-decoration:none;cursor:pointer;transition:transform .32s cubic-bezier(.2,.8,.3,1);\">\n          <div style=\"position:relative;aspect-ratio:1/1;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:12px;border:1.5px solid #111;overflow:hidden;\">\n            {{ a.coverEl }}\n            <sc-if value=\"{{ a.noHero }}\" hint-placeholder-val=\"{{ true }}\"><span>{{ a.title }} cover<\u002Fspan><\u002Fsc-if>\n            <div style-hover=\"opacity:1\" style=\"position:absolute;inset:0;opacity:0;transition:opacity .3s ease;background:linear-gradient(to top,rgba(17,17,17,.82) 0%,rgba(17,17,17,.1) 60%,transparent 100%);display:flex;align-items:flex-end;padding:16px;\">\n              <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;letter-spacing:.04em;color:#f6c17d;\">View album →<\u002Fspan>\n            <\u002Fdiv>\n          <\u002Fdiv>\n          <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:21px;margin-top:14px;\">{{ a.title }}<\u002Fdiv>\n          <div style=\"font-size:14px;color:#6a655c;margin-top:2px;\">{{ a.meta }}<\u002Fdiv>\n        <\u002Fa>\n      <\u002Fsc-for>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= ALBUM DETAIL (any release from WordPress) ================= -->\n  <sc-if value=\"{{ isAlbumDetail }}\" hint-placeholder-val=\"{{ false }}\">\n  <div>\n    <div style=\"border-bottom:1.5px solid #111;padding:clamp(22px,4vw,34px) clamp(18px,4.3vw,60px);display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:14px;\">\n      <a href=\"{{ hrefMusic }}\" sc-camel-on-click=\"{{ backToMusic }}\" style=\"cursor:pointer;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;\">← Music<\u002Fa>\n      <span style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#6a655c;\">Release<\u002Fspan>\n    <\u002Fdiv>\n\n    <div style=\"display:flex;flex-wrap:wrap;align-items:stretch;\">\n      <!-- Black data rail: artwork, specs, store, listen -->\n      <div style=\"flex:1 1 320px;max-width:460px;background:#111;color:#fff;padding:24px;display:flex;flex-direction:column;gap:18px;\">\n        <div style=\"position:relative;aspect-ratio:1/1;border:1.5px solid #2a2a2a;overflow:hidden;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#a9a49a;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:16px;\">\n          {{ albumCoverEl }}\n          <sc-if value=\"{{ albumNoCover }}\" hint-placeholder-val=\"{{ true }}\"><span>{{ albumTitle }} cover<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n        <sc-if value=\"{{ albumHasSpecs }}\" hint-placeholder-val=\"{{ true }}\">\n        <div style=\"display:flex;flex-direction:column;gap:9px;\">\n          <sc-for list=\"{{ albumSpecs }}\" as=\"sp\" hint-placeholder-count=\"3\">\n            <div style=\"display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid #2a2a2a;padding-bottom:7px;\"><span style=\"font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#a9a49a;\">{{ sp.label }}<\u002Fspan><span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;text-align:right;\">{{ sp.value }}<\u002Fspan><\u002Fdiv>\n          <\u002Fsc-for>\n        <\u002Fdiv>\n        <\u002Fsc-if>\n        <sc-if value=\"{{ albumStoreOn }}\" hint-placeholder-val=\"{{ true }}\">\n        <div style=\"border:1.5px solid #3a3a3a;\">\n          <div style=\"display:flex;align-items:center;gap:8px;padding:9px 14px;border-bottom:1.5px solid #3a3a3a;background:#1a1a1a;\">\n            <img src=\"eb210893-02a4-4c48-81fc-cf3100e12ca2\" alt=\"\" aria-hidden=\"true\" loading=\"lazy\" decoding=\"async\" style=\"width:14px;height:14px;\">\n            <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#e5871a;\">Available in Bandcamp store<\u002Fspan>\n          <\u002Fdiv>\n          <div style=\"padding:14px;display:flex;flex-direction:column;gap:8px;\">\n            <sc-for list=\"{{ albumStoreItems }}\" as=\"si\" hint-placeholder-count=\"3\">\n              <span style=\"font-size:13.5px;color:#e6e3dd;\">✓ {{ si.title }}<\u002Fspan>\n            <\u002Fsc-for>\n            <a href=\"{{ albumBuyUrl }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#8f4c06\" style=\"background:#a85a08;color:#fff;text-align:center;font-family:'Jost',sans-serif;font-weight:700;font-size:14.5px;padding:13px;margin-top:4px;text-decoration:none;transition:background .15s;\">Buy {{ albumTitle }} →<\u002Fa>\n            <sc-if value=\"{{ albumHasMerch }}\" hint-placeholder-val=\"{{ true }}\"><a href=\"{{ albumMerchUrl }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#fff;color:#111\" style=\"border:1.5px solid #fff;color:#fff;text-align:center;font-family:'Jost',sans-serif;font-weight:600;font-size:13.5px;padding:11px;text-decoration:none;transition:.15s;\">Browse merch<\u002Fa><\u002Fsc-if>\n            <span style=\"font-size:11.5px;line-height:1.45;color:#a9a49a;\">Ordering via Bandcamp supports the quartet.<\u002Fspan>\n          <\u002Fdiv>\n        <\u002Fdiv>\n        <\u002Fsc-if>\n        <div style=\"border:1.5px solid #3a3a3a;\">\n          <div style=\"padding:9px 14px;border-bottom:1.5px solid #3a3a3a;background:#1a1a1a;\">\n            <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#a9a49a;\">Listen on<\u002Fspan>\n          <\u002Fdiv>\n          <div style=\"padding:14px;display:flex;gap:11px;\">\n            <a href=\"{{ albumBuyUrl }}\" target=\"_blank\" rel=\"noopener\" title=\"Bandcamp\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;text-decoration:none;\"><img src=\"eb210893-02a4-4c48-81fc-cf3100e12ca2\" alt=\"Bandcamp\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fa>\n            <button sc-camel-on-click=\"{{ openStream }}\" title=\"Spotify\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;opacity:.55;\"><img src=\"1b8ff169-561a-468a-af59-2837355d6972\" alt=\"Spotify\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fbutton>\n            <button sc-camel-on-click=\"{{ openStream }}\" title=\"Apple Music\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;border:none;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;opacity:.55;\"><img src=\"94c4e87e-aea0-44ae-827b-a1553575ca09\" alt=\"Apple Music\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fbutton>\n          <\u002Fdiv>\n        <\u002Fdiv>\n      <\u002Fdiv>\n\n      <!-- Reading column -->\n      <div style=\"flex:10 1 min(480px,100%);padding:clamp(24px,4vw,38px) clamp(18px,4.3vw,60px) clamp(28px,5vw,48px);min-width:0;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(32px,5.4vw,50px);line-height:1;letter-spacing:-.01em;\">{{ albumTitle }}<\u002Fdiv>\n        <div style=\"width:64px;height:5px;background:#a85a08;margin:14px 0 12px;\"><\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:clamp(15px,2.2vw,18px);color:#6a655c;margin-bottom:18px;\">{{ albumMeta }}<\u002Fdiv>\n        <sc-for list=\"{{ albumParas }}\" as=\"para\" hint-placeholder-count=\"2\">\n          <p style=\"font-size:16px;line-height:1.62;max-width:62ch;color:#2a2a2a;text-wrap:pretty;\">{{ para }}<\u002Fp>\n        <\u002Fsc-for>\n        <sc-if value=\"{{ albumHasVideos }}\" hint-placeholder-val=\"{{ false }}\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:24px;margin:30px 0 14px;\">Watch<\u002Fdiv>\n        <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:16px;max-width:760px;\">\n          <sc-for list=\"{{ albumVideos }}\" as=\"v\" hint-placeholder-count=\"2\">\n            <a href=\"{{ v.href }}\" sc-camel-on-click=\"{{ v.onClick }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"opacity:.92\" style=\"display:block;position:relative;overflow:hidden;aspect-ratio:16/9;background:#111;border:1.5px solid #111;cursor:pointer;transition:opacity .2s ease;text-decoration:none;\">\n              {{ v.posterEl }}\n              <sc-if value=\"{{ v.hasPoster }}\" hint-placeholder-val=\"{{ false }}\">\n                <div style=\"position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.55) 0%,rgba(0,0,0,.12) 40%,rgba(0,0,0,.5) 100%);\"><\u002Fdiv>\n              <\u002Fsc-if>\n              <div style=\"position:absolute;top:16px;left:18px;right:18px;color:#fff;font-family:'Jost',sans-serif;font-weight:700;font-size:17px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">{{ v.title }}<\u002Fdiv>\n              <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\"><div style=\"width:60px;height:42px;background:#e30000;border-radius:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.35);\"><div style=\"width:0;height:0;border-left:15px solid #fff;border-top:10px solid transparent;border-bottom:10px solid transparent;margin-left:4px;\"><\u002Fdiv><\u002Fdiv><\u002Fdiv>\n              <div style=\"position:absolute;bottom:12px;right:14px;color:#fff;font-family:monospace;font-size:11px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">Watch<\u002Fdiv>\n            <\u002Fa>\n          <\u002Fsc-for>\n        <\u002Fdiv>\n        <\u002Fsc-if>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= ZONAR DETAIL ================= -->\n  <sc-if value=\"{{ isZonar }}\" hint-placeholder-val=\"{{ false }}\">\n  <div>\n    <div style=\"border-bottom:1.5px solid #111;padding:clamp(22px,4vw,34px) clamp(18px,4.3vw,60px);display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:14px;\">\n      <a href=\"{{ hrefMusic }}\" sc-camel-on-click=\"{{ backToMusic }}\" style=\"cursor:pointer;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;\">← Music<\u002Fa>\n      <span style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#a85a08;\">Featured release<\u002Fspan>\n    <\u002Fdiv>\n\n    <div style=\"display:flex;flex-wrap:wrap;align-items:stretch;\">\n      <!-- Black data rail: artwork, specs, store, listen -->\n      <div style=\"flex:1 1 320px;max-width:460px;background:#111;color:#fff;padding:24px;display:flex;flex-direction:column;gap:18px;\">\n        <div style=\"position:relative;aspect-ratio:1/1;border:1.5px solid #2a2a2a;overflow:hidden;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#a9a49a;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:16px;\">\n          {{ zonarArtEl }}\n          <sc-if value=\"{{ zonarNoArt }}\" hint-placeholder-val=\"{{ true }}\"><span>ZONAR — album artwork<\u002Fspan><\u002Fsc-if>\n          <span style=\"position:absolute;top:0;left:0;background:#a85a08;color:#fff;font-family:'Jost',sans-serif;font-weight:700;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;padding:7px 12px;\">New<\u002Fspan>\n        <\u002Fdiv>\n        <div style=\"display:flex;flex-direction:column;gap:9px;\">\n          <div style=\"display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid #2a2a2a;padding-bottom:7px;\"><span style=\"font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#a9a49a;\">Year<\u002Fspan><span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;\">2026<\u002Fspan><\u002Fdiv>\n          <div style=\"display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid #2a2a2a;padding-bottom:7px;\"><span style=\"font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#a9a49a;\">Label<\u002Fspan><span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;\">Happy Seal Records<\u002Fspan><\u002Fdiv>\n          <div style=\"display:flex;justify-content:space-between;gap:10px;border-bottom:1px solid #2a2a2a;padding-bottom:7px;\"><span style=\"font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#a9a49a;\">Format<\u002Fspan><span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;\">LP<\u002Fspan><\u002Fdiv>\n          <div style=\"display:flex;justify-content:space-between;gap:10px;\"><span style=\"font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#a9a49a;\">Release<\u002Fspan><span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;\">01.03.2026<\u002Fspan><\u002Fdiv>\n        <\u002Fdiv>\n        <sc-if value=\"{{ zonarStoreOn }}\" hint-placeholder-val=\"{{ true }}\">\n        <div style=\"border:1.5px solid #3a3a3a;\">\n          <div style=\"display:flex;align-items:center;gap:8px;padding:9px 14px;border-bottom:1.5px solid #3a3a3a;background:#1a1a1a;\">\n            <img src=\"eb210893-02a4-4c48-81fc-cf3100e12ca2\" alt=\"\" aria-hidden=\"true\" loading=\"lazy\" decoding=\"async\" style=\"width:14px;height:14px;\">\n            <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#e5871a;\">Available in Bandcamp store<\u002Fspan>\n          <\u002Fdiv>\n          <div style=\"padding:14px;display:flex;flex-direction:column;gap:8px;\">\n            <sc-for list=\"{{ zonarStoreItems }}\" as=\"si\" hint-placeholder-count=\"3\">\n              <span style=\"font-size:13.5px;color:#e6e3dd;\">✓ {{ si.title }}<\u002Fspan>\n            <\u002Fsc-for>\n            <sc-if value=\"{{ zonarHasMerch }}\" hint-placeholder-val=\"{{ true }}\">\n            <div style=\"border-top:1px solid #2a2a2a;padding-top:12px;margin-top:4px;display:flex;flex-direction:column;gap:9px;\">\n              <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:9px;\">\n                <img src=\"https://www.northseaquartet.com/wp-content/uploads/2026/07/zonar-tshirt-deepblue.avif\" alt=\"ZONAR t-shirt in deep blue\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;aspect-ratio:1/1;object-fit:cover;border:1px solid #2a2a2a;\">\n                <img src=\"https://www.northseaquartet.com/wp-content/uploads/2026/07/zonar-tshirt-coconut.avif\" alt=\"ZONAR t-shirt in coconut milk\" loading=\"lazy\" decoding=\"async\" style=\"width:100%;aspect-ratio:1/1;object-fit:cover;border:1px solid #2a2a2a;\">\n              <\u002Fdiv>\n              <span style=\"font-size:12px;line-height:1.5;color:#a9a49a;\">ZONAR t-shirt · premium bio cotton in deep blue or coconut milk, screen-printed design by Lucas Rozenboom · women's &amp; men's fits · €30<\u002Fspan>\n            <\u002Fdiv>\n            <\u002Fsc-if>\n            <a href=\"{{ zonarBuyUrl }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#8f4c06\" style=\"background:#a85a08;color:#fff;text-align:center;font-family:'Jost',sans-serif;font-weight:700;font-size:14.5px;padding:13px;margin-top:4px;text-decoration:none;transition:background .15s;\">Buy ZONAR →<\u002Fa>\n            <sc-if value=\"{{ zonarHasMerch }}\" hint-placeholder-val=\"{{ true }}\"><a href=\"{{ zonarMerchUrl }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#fff;color:#111\" style=\"border:1.5px solid #fff;color:#fff;text-align:center;font-family:'Jost',sans-serif;font-weight:600;font-size:13.5px;padding:11px;text-decoration:none;transition:.15s;\">Browse merch<\u002Fa><\u002Fsc-if>\n            <span style=\"font-size:11.5px;line-height:1.45;color:#a9a49a;\">Ordering via Bandcamp supports the quartet.<\u002Fspan>\n          <\u002Fdiv>\n        <\u002Fdiv>\n        <\u002Fsc-if>\n        <div style=\"border:1.5px solid #3a3a3a;\">\n          <div style=\"padding:9px 14px;border-bottom:1.5px solid #3a3a3a;background:#1a1a1a;\">\n            <span style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#a9a49a;\">Listen on<\u002Fspan>\n          <\u002Fdiv>\n          <div style=\"padding:14px;display:flex;flex-direction:column;gap:10px;\">\n            <div style=\"display:flex;gap:11px;\" data-comment-anchor=\"ca1de4ee06-div\">\n              <a href=\"https://northseastringquartet.bandcamp.com\" target=\"_blank\" rel=\"noopener\" title=\"Bandcamp\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;text-decoration:none;\"><img src=\"eb210893-02a4-4c48-81fc-cf3100e12ca2\" alt=\"Bandcamp\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fa>\n              <a href=\"https:\/\/open.spotify.com\/search\/ZONAR%20North%20Sea%20String%20Quartet\" target=\"_blank\" rel=\"noopener\" title=\"Spotify\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;text-decoration:none;\"><img src=\"1b8ff169-561a-468a-af59-2837355d6972\" alt=\"Spotify\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fa>\n              <a href=\"https:\/\/music.apple.com\/nl\/artist\/north-sea-string-quartet\/1579242940?l=en-GB\" target=\"_blank\" rel=\"noopener\" title=\"Apple Music\" style-hover=\"opacity:.8\" style=\"width:46px;height:46px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;text-decoration:none;\"><img src=\"94c4e87e-aea0-44ae-827b-a1553575ca09\" alt=\"Apple Music\" style=\"width:20px;height:20px;filter:invert(1);\"><\u002Fa>\n            <\u002Fdiv>\n            <span style=\"font-size:11.5px;line-height:1.45;color:#a9a49a;\">Streaming everywhere now \u2014 but ordering on Bandcamp supports us most.<\u002Fspan>\n          <\u002Fdiv>\n        <\u002Fdiv>\n      <\u002Fdiv>\n\n      <!-- Reading column -->\n      <div style=\"flex:10 1 min(480px,100%);padding:clamp(24px,4vw,38px) clamp(18px,4.3vw,60px) clamp(28px,5vw,48px);min-width:0;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,52px);line-height:1;letter-spacing:-.01em;\">ZONAR<\u002Fdiv>\n        <div style=\"width:64px;height:5px;background:#a85a08;margin:14px 0 12px;\"><\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:clamp(15px,2.2vw,18px);color:#6a655c;margin-bottom:18px;\" data-comment-anchor=\"d2eb1719f2-div\">2026 · Happy Seal Records · LP · Available 01.03.2026<\u002Fdiv>\n        <p style=\"font-size:16px;line-height:1.62;max-width:62ch;margin-top:0;\">The North Sea String Quartet is one of the most adventurous string quartets of the moment. Their newest project, <strong>ZONAR<\u002Fstrong> (2026, Happy Seal Records), takes their sound a step further by immersing the acoustic string quartet into the sonic worlds of electronic music. Through unconventional techniques, prepared instruments and collective composition, they explore the textures of EDM, ambient, and experimental music – all without using electronics. With ZONAR, the NSSQ creates immersive, contemporary music that speaks to both the body and the imagination.<\u002Fp>\n        <p style=\"font-size:16px;line-height:1.62;max-width:62ch;\">The album is already available for order on <a href=\"https://northseastringquartet.bandcamp.com\" target=\"_blank\" rel=\"noopener\">Bandcamp<\u002Fa>—an artist-friendly platform that supports musicians more fairly—and will be released on 01 March 2026. The album will further be available on streaming platforms beginning of September.<\u002Fp>\n        <p style=\"font-size:16px;line-height:1.62;max-width:62ch;\">The official album release concert – featuring an innovative stage design by Roelof Pothuys – will take place on 01 March 2026 at Amare, Den Haag. We would love to see you there. Please check our agenda for all ZONAR tour dates, with more dates to follow.<\u002Fp>\n        <p style=\"font-size:15px;line-height:1.6;max-width:62ch;color:#6a655c;\">The development of ZONAR is generously supported by Het Kersjes Fonds, Fonds Podiumkunsten, Het Cultuurfonds, and Sena Muziekproductiefonds.<\u002Fp>\n\n        <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:24px;margin:30px 0 14px;\">Watch<\u002Fdiv>\n        <a href=\"{{ zonarWatch.href }}\" sc-camel-on-click=\"{{ zonarWatch.onClick }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"opacity:.92\" style=\"display:block;position:relative;overflow:hidden;aspect-ratio:16/9;max-width:760px;background:#111;border:1.5px solid #111;cursor:pointer;transition:opacity .2s ease;\" data-comment-anchor=\"f2085b03d5-div\">\n          {{ zonarWatch.posterEl }}\n          <sc-if value=\"{{ zonarWatch.hasPoster }}\" hint-placeholder-val=\"{{ false }}\">\n            <div style=\"position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.55) 0%,rgba(0,0,0,.12) 40%,rgba(0,0,0,.5) 100%);\"><\u002Fdiv>\n          <\u002Fsc-if>\n          <div style=\"position:absolute;top:20px;left:24px;right:24px;color:#fff;font-family:'Jost',sans-serif;font-weight:700;font-size:20px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">{{ zonarWatch.title }}<div style=\"font-weight:400;font-size:14px;color:#e6e3dd;margin-top:2px;\">{{ zonarWatch.channel }}<\u002Fdiv><\u002Fdiv>\n          <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\" data-comment-anchor=\"18cded6484-div\"><div style=\"width:84px;height:58px;background:#e30000;border-radius:13px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.35);\"><div style=\"width:0;height:0;border-left:20px solid #fff;border-top:13px solid transparent;border-bottom:13px solid transparent;margin-left:5px;\"><\u002Fdiv><\u002Fdiv><\u002Fdiv>\n          <div style=\"position:absolute;bottom:16px;right:20px;color:#fff;font-family:monospace;font-size:12px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">Watch<\u002Fdiv>\n        <\u002Fa>\n        <sc-if value=\"{{ zonarHasMoreVideos }}\" hint-placeholder-val=\"{{ false }}\">\n        <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:16px;max-width:760px;margin-top:16px;\">\n          <sc-for list=\"{{ zonarMoreVideos }}\" as=\"v\" hint-placeholder-count=\"1\">\n            <a href=\"{{ v.href }}\" sc-camel-on-click=\"{{ v.onClick }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"opacity:.92\" style=\"display:block;position:relative;overflow:hidden;aspect-ratio:16/9;background:#111;border:1.5px solid #111;cursor:pointer;transition:opacity .2s ease;\">\n              {{ v.posterEl }}\n              <sc-if value=\"{{ v.hasPoster }}\" hint-placeholder-val=\"{{ false }}\">\n                <div style=\"position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.55) 0%,rgba(0,0,0,.12) 40%,rgba(0,0,0,.5) 100%);\"><\u002Fdiv>\n              <\u002Fsc-if>\n              <div style=\"position:absolute;top:16px;left:18px;right:18px;color:#fff;font-family:'Jost',sans-serif;font-weight:700;font-size:17px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">{{ v.title }}<\u002Fdiv>\n              <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\"><div style=\"width:60px;height:42px;background:#e30000;border-radius:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.35);\"><div style=\"width:0;height:0;border-left:15px solid #fff;border-top:10px solid transparent;border-bottom:10px solid transparent;margin-left:4px;\"><\u002Fdiv><\u002Fdiv><\u002Fdiv>\n              <div style=\"position:absolute;bottom:12px;right:14px;color:#fff;font-family:monospace;font-size:11px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">Watch<\u002Fdiv>\n            <\u002Fa>\n          <\u002Fsc-for>\n        <\u002Fdiv>\n        <\u002Fsc-if>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <sc-if value=\"{{ streamOpen }}\" hint-placeholder-val=\"{{ false }}\">\n  <div sc-camel-on-click=\"{{ closeStream }}\" style=\"position:fixed;inset:0;z-index:70;background:rgba(17,17,17,.66);display:flex;align-items:center;justify-content:center;padding:32px;animation:fadein .22s ease;\">\n    <div sc-camel-on-click=\"{{ stop }}\" style=\"max-width:460px;width:100%;background:#fff;border:1.5px solid #111;padding:38px 34px;position:relative;animation:popin .3s cubic-bezier(.2,.8,.3,1);\">\n      <button sc-camel-on-click=\"{{ closeStream }}\" title=\"Close\" style-hover=\"background:#111;color:#fff\" style=\"position:absolute;top:16px;right:16px;width:34px;height:34px;border:1.5px solid #111;background:#fff;font-size:17px;line-height:1;cursor:pointer;transition:.15s;\">×<\u002Fbutton>\n      <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:26px;line-height:1.05;padding-right:40px;\">Streaming comes later<\u002Fdiv>\n      <p style=\"font-size:16px;line-height:1.62;color:#2a2a2a;margin:16px 0 0;\">ZONAR is available on Bandcamp first, with Spotify and Apple Music following in September.<\u002Fp>\n      <sc-if value=\"{{ bandcampNoticeOn }}\" hint-placeholder-val=\"{{ true }}\"><p style=\"font-size:16px;line-height:1.62;color:#2a2a2a;margin:14px 0 0;\">{{ bandcampNoticeText }}<\u002Fp><\u002Fsc-if>\n      <a href=\"https://northseastringquartet.bandcamp.com\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#8f4c06\" style=\"display:inline-flex;align-items:center;gap:10px;margin-top:22px;background:#a85a08;color:#fff;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;padding:12px 22px;text-decoration:none;transition:background .15s;\"><img src=\"f866d60a-99b2-4503-8eca-3686c9551bd8\" alt=\"\" style=\"width:18px;height:18px;\">Listen on Bandcamp<\u002Fa>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n  <\u002Fsc-if>\n\n  <!-- ================= AGENDA ================= -->\n  <sc-if value=\"{{ isAgenda }}\" hint-placeholder-val=\"{{ false }}\">\n  <div>\n    <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px) 0;\">\n      <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,54px);line-height:1;letter-spacing:-.01em;\">On stage<\u002Fdiv>\n    <\u002Fdiv>\n    <div style=\"padding:clamp(16px,4vw,26px) clamp(18px,4.3vw,60px);\">\n    <div style=\"padding:14px;background:#111;\" data-comment-anchor=\"daecc769db-div\">\n      <div style=\"position:relative;overflow:hidden;height:{{ heroAgendaHeight }};background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:12px;text-transform:uppercase;letter-spacing:.06em;\">{{ heroAgenda }}<\u002Fdiv>\n    <\u002Fdiv>\n    <\u002Fdiv>\n    <div style=\"display:flex;justify-content:center;gap:12px;margin:8px 0 34px;\">\n      <button sc-camel-on-click=\"{{ setUpcoming }}\" style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:17px;padding:10px 26px;cursor:pointer;border:1.5px solid #111;transition:.15s;color:{{ upFg }};background:{{ upBg }};\">Upcoming<\u002Fbutton>\n      <button sc-camel-on-click=\"{{ setPast }}\" style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:17px;padding:10px 26px;cursor:pointer;border:1.5px solid #111;transition:.15s;color:{{ pastFg }};background:{{ pastBg }};\" data-comment-anchor=\"9b990f7233-button\">Past<\u002Fbutton>\n    <\u002Fdiv>\n    <sc-if value=\"{{ agIsPast }}\" hint-placeholder-val=\"{{ false }}\">\n    <div style=\"padding:0 clamp(18px,4.3vw,60px) 40px;\">\n      <sc-for list=\"{{ pastGroups }}\" as=\"g\" hint-placeholder-count=\"1\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(24px,3.4vw,32px);line-height:1;letter-spacing:.01em;margin:{{ g.mt }} 0 4px;border-bottom:1.5px solid #111;padding-bottom:12px;\">{{ g.year }}<\u002Fdiv>\n      <sc-for list=\"{{ g.events }}\" as=\"e\" hint-placeholder-count=\"6\">\n        <div style=\"display:grid;grid-template-columns:{{ pastCols }};gap:14px;align-items:baseline;padding:11px 0;border-bottom:1px solid #e0ddd5;\">\n          <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:15px;letter-spacing:.04em;color:#6a655c;white-space:nowrap;\">{{ e.dateLabel }}<\u002Fdiv>\n          <div style=\"font-family:'Jost',sans-serif;font-size:17.5px;line-height:1.35;min-width:0;text-wrap:pretty;\"><span style=\"font-weight:700;\">{{ e.title }}<\u002Fspan><span style=\"color:#8a857b;\"> — {{ e.venue }}<\u002Fspan>\n            <sc-if value=\"{{ pastPlaceInline }}\" hint-placeholder-val=\"{{ false }}\"><span style=\"color:#a8a396;font-size:15px;\"> · {{ e.placeLabel }}<\u002Fspan><\u002Fsc-if>\n          <\u002Fdiv>\n          <sc-if value=\"{{ pastPlaceCol }}\" hint-placeholder-val=\"{{ true }}\">\n            <div style=\"font-family:'Jost',sans-serif;font-size:15.5px;color:#8a857b;text-align:right;white-space:nowrap;\">{{ e.placeLabel }}<\u002Fdiv>\n          <\u002Fsc-if>\n        <\u002Fdiv>\n      <\u002Fsc-for>\n      <\u002Fsc-for>\n      <sc-if value=\"{{ pastHasMore }}\" hint-placeholder-val=\"{{ false }}\">\n        <div style=\"display:flex;justify-content:center;margin-top:26px;\">\n          <button sc-camel-on-click=\"{{ loadMorePast }}\" style-hover=\"background:#111;color:#fff\" style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:15px;padding:10px 26px;cursor:pointer;border:1.5px solid #111;background:#fff;color:#1a1a1a;transition:.15s;\">Load more<\u002Fbutton>\n        <\u002Fdiv>\n      <\u002Fsc-if>\n    <\u002Fdiv>\n    <\u002Fsc-if>\n    <sc-if value=\"{{ agIsUpcoming }}\" hint-placeholder-val=\"{{ true }}\">\n    <div style=\"padding:0 clamp(18px,4.3vw,60px) 40px;\">\n      <sc-for list=\"{{ upcomingGroups }}\" as=\"g\" hint-placeholder-count=\"1\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(24px,3.4vw,32px);line-height:1;letter-spacing:.01em;margin:{{ g.mt }} 0 4px;border-bottom:1.5px solid #111;padding-bottom:12px;\">{{ g.year }}<\u002Fdiv>\n      <sc-for list=\"{{ g.events }}\" as=\"e\" hint-placeholder-count=\"4\">\n        <div style=\"display:grid;grid-template-columns:{{ agCols }};gap:{{ agGap }};align-items:center;padding:{{ agPad }};border-bottom:1px solid #d9d6ce;\">\n          <div style=\"align-self:center;display:flex;flex-direction:{{ agDateDir }};align-items:{{ agDateAlign }};justify-content:{{ agDateJustify }};gap:{{ agDateGap }};font-family:'Jost',sans-serif;line-height:1;\">\n            <div style=\"font-size:{{ agDaySize }};font-weight:800;\">{{ e.day }}<\u002Fdiv>\n            <div style=\"font-size:{{ agMonSize }};font-weight:600;letter-spacing:.18em;text-transform:uppercase;\">{{ e.mon }}<\u002Fdiv>\n          <\u002Fdiv>\n          <sc-if value=\"{{ agShowRule }}\" hint-placeholder-val=\"{{ true }}\">\n            <div style=\"width:1.5px;align-self:stretch;background:#111;\"><\u002Fdiv>\n          <\u002Fsc-if>\n          <div style=\"display:flex;flex-direction:column;gap:{{ agTextGap }};min-width:0;\">\n            <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:{{ agVenueSize }};line-height:1.12;letter-spacing:-.005em;text-wrap:pretty;\">{{ e.venue }}<\u002Fdiv>\n            <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:{{ agProgSize }};line-height:1.3;color:#2a2a2a;text-wrap:pretty;\">{{ e.title }}<\u002Fdiv>\n            <sc-if value=\"{{ e.note }}\" hint-placeholder-val=\"{{ false }}\">\n              <div style=\"font-size:13.5px;font-style:italic;line-height:1.45;color:#8a857b;text-wrap:pretty;\">{{ e.noteEl }}<\u002Fdiv>\n            <\u002Fsc-if>\n          <\u002Fdiv>\n          <div style=\"font-family:'Jost',sans-serif;line-height:1.25;text-align:{{ agPlaceAlign }};\">\n            <div style=\"font-weight:600;font-size:{{ agCitySize }};color:#1a1a1a;\">{{ e.city }}<\u002Fdiv>\n            <sc-if value=\"{{ e.country }}\" hint-placeholder-val=\"{{ false }}\">\n              <div style=\"font-weight:400;font-size:{{ agCountrySize }};color:#8a857b;margin-top:2px;\">{{ e.country }}<\u002Fdiv>\n            <\u002Fsc-if>\n          <\u002Fdiv>\n          <div style=\"display:flex;justify-content:{{ agBtnJustify }};\">\n            <sc-if value=\"{{ e.cta }}\" hint-placeholder-val=\"{{ false }}\">\n              <a href=\"{{ e.url }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#8f4c06\" style=\"display:inline-block;box-sizing:border-box;text-align:center;text-decoration:none;width:{{ agBtnWidth }};background:#a85a08;color:#fff;font-family:'Jost',sans-serif;font-weight:600;font-size:14.5px;letter-spacing:.02em;padding:11px 18px;border:none;cursor:pointer;white-space:nowrap;transition:background .15s;\">{{ e.cta }}<\u002Fa>\n            <\u002Fsc-if>\n          <\u002Fdiv>\n        <\u002Fdiv>\n      <\u002Fsc-for>\n      <\u002Fsc-for>\n    <\u002Fdiv>\n    <\u002Fsc-if>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= MEDIA ================= -->\n  <sc-if value=\"{{ isMedia }}\" hint-placeholder-val=\"{{ false }}\">\n  <div style=\"padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px);\">\n    <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,54px);line-height:1;margin-bottom:34px;\">VIDEOS<\u002Fdiv>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:24px;\">\n      <sc-for list=\"{{ videos }}\" as=\"v\" hint-placeholder-count=\"6\">\n        <a href=\"{{ v.href }}\" sc-camel-on-click=\"{{ v.onClick }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"opacity:.92\" style=\"display:flex;aspect-ratio:16/9;background:#111;position:relative;overflow:hidden;align-items:center;justify-content:center;text-decoration:none;cursor:pointer;transition:opacity .2s ease;\">\n          {{ v.posterEl }}\n          <sc-if value=\"{{ v.hasPoster }}\" hint-placeholder-val=\"{{ false }}\">\n            <div style=\"position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,.55) 0%,rgba(0,0,0,.12) 40%,rgba(0,0,0,.5) 100%);\"><\u002Fdiv>\n          <\u002Fsc-if>\n          <div style=\"position:absolute;top:14px;left:16px;right:16px;color:#fff;font-family:'Mulish',sans-serif;font-weight:700;font-size:16px;line-height:1.2;text-shadow:0 1px 3px rgba(0,0,0,.5);\">{{ v.title }}<div style=\"font-weight:400;font-size:12px;color:#e6e3dd;margin-top:2px;\">{{ v.channel }}<\u002Fdiv><\u002Fdiv>\n          <div style=\"position:relative;width:66px;height:46px;background:#e30000;border-radius:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px rgba(0,0,0,.35);\"><div style=\"width:0;height:0;border-left:16px solid #fff;border-top:10px solid transparent;border-bottom:10px solid transparent;margin-left:4px;\"><\u002Fdiv><\u002Fdiv>\n          <div style=\"position:absolute;bottom:12px;right:14px;color:#fff;font-family:monospace;font-size:11px;text-shadow:0 1px 3px rgba(0,0,0,.5);\">Watch<\u002Fdiv>\n        <\u002Fa>\n      <\u002Fsc-for>\n    <\u002Fdiv>\n    <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(36px,6vw,54px);line-height:1;margin:64px 0 30px;\">PHOTOS<\u002Fdiv>\n    <div style=\"column-width:210px;column-gap:16px;\">\n      <sc-for list=\"{{ photos }}\" as=\"p\" hint-placeholder-count=\"12\">\n        <div sc-camel-on-click=\"{{ p.onClick }}\" style-hover=\"opacity:.88\" style=\"position:relative;overflow:hidden;break-inside:avoid;margin-bottom:16px;height:{{ p.h }};background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:10px;cursor:{{ p.cursor }};transition:opacity .2s ease;\">\n          {{ p.el }}\n          <sc-if value=\"{{ p.noImg }}\" hint-placeholder-val=\"{{ true }}\"><span>{{ p.l }}<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n      <\u002Fsc-for>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <sc-if value=\"{{ lightboxOpen }}\" hint-placeholder-val=\"{{ false }}\">\n  <div sc-camel-on-click=\"{{ closeLightbox }}\" style=\"position:fixed;inset:0;z-index:80;background:rgba(17,17,17,.92);display:flex;align-items:center;justify-content:center;padding:clamp(12px,4vw,48px);animation:fadein .2s ease;cursor:zoom-out;\">\n    <button sc-camel-on-click=\"{{ closeLightbox }}\" title=\"Close\" style-hover=\"background:#fff;color:#111\" style=\"position:absolute;top:clamp(12px,3vw,26px);right:clamp(12px,3vw,26px);width:44px;height:44px;border:1.5px solid #fff;background:transparent;color:#fff;font-size:22px;line-height:1;cursor:pointer;transition:.15s;\">×<\u002Fbutton>\n    <button sc-camel-on-click=\"{{ prevPhoto }}\" title=\"Previous\" style-hover=\"background:#fff;color:#111\" style=\"position:absolute;left:clamp(8px,2vw,22px);top:50%;transform:translateY(-50%);width:48px;height:48px;border:1.5px solid #fff;background:transparent;color:#fff;font-size:22px;line-height:1;cursor:pointer;transition:.15s;\">‹<\u002Fbutton>\n    <button sc-camel-on-click=\"{{ nextPhoto }}\" title=\"Next\" style-hover=\"background:#fff;color:#111\" style=\"position:absolute;right:clamp(8px,2vw,22px);top:50%;transform:translateY(-50%);width:48px;height:48px;border:1.5px solid #fff;background:transparent;color:#fff;font-size:22px;line-height:1;cursor:pointer;transition:.15s;\">›<\u002Fbutton>\n    <div sc-camel-on-click=\"{{ stop }}\" style=\"max-width:min(1100px,92vw);max-height:86vh;display:flex;flex-direction:column;align-items:center;gap:14px;animation:popin .28s cubic-bezier(.2,.8,.3,1);cursor:default;\">\n      {{ lightboxEl }}\n      <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:13px;letter-spacing:.08em;color:#cfccc6;\">{{ lightboxCounter }}<\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n  <\u002Fsc-if>\n\n  <!-- ================= EDUCATION ================= -->\n  <sc-if value=\"{{ isEducation }}\" hint-placeholder-val=\"{{ false }}\">\n  <div>\n    <div style=\"position:relative;height:{{ heroEduHeight }};overflow:hidden;background:#0d0d0d;clip-path:polygon(0 0,100% 0,100% 78%,0 100%);border-bottom:1.5px solid #111;\">{{ heroEdu }}<\u002Fdiv>\n    <div style=\"padding:clamp(26px,5vw,52px) clamp(18px,4.3vw,60px);\">\n      <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:clamp(24px,4vw,48px);align-items:center;\">\n        <div style=\"position:relative;overflow:hidden;height:clamp(240px,45vw,360px);background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:12px;\">\n          {{ eduAcademyImgEl }}\n          <sc-if value=\"{{ noEduAcademyImg }}\" hint-placeholder-val=\"{{ true }}\"><span>academy workshop, players in a circle<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n        <div>\n          <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(30px,5vw,46px);line-height:1.02;\">{{ eduAcademyTitle }}<\u002Fdiv>\n          <p style=\"font-size:17px;line-height:1.6;color:#2a2a2a;max-width:48ch;\">{{ eduAcademyBody }}<\u002Fp>\n          <a href=\"{{ eduAcademyLinkUrl }}\" target=\"_blank\" rel=\"noopener\" style-hover=\"background:#8f4c06\" style=\"display:inline-block;margin-top:8px;background:#a85a08;color:#fff;font-family:'Jost',sans-serif;font-weight:600;font-size:15px;padding:12px 22px;transition:background .15s;\">{{ eduAcademyLinkLabel }}<\u002Fa>\n        <\u002Fdiv>\n      <\u002Fdiv>\n      <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:clamp(24px,4vw,48px);align-items:center;margin-top:56px;\">\n        <div style=\"position:relative;overflow:hidden;height:clamp(220px,42vw,320px);background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:12px;\">\n          {{ eduWorkshopsImgEl }}\n          <sc-if value=\"{{ noEduWorkshopsImg }}\" hint-placeholder-val=\"{{ true }}\"><span>teaching “chopping” to a whole orchestra<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n        <div>\n          <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(30px,5vw,46px);line-height:1.02;\">{{ eduWorkshopsTitle }}<\u002Fdiv>\n          <p style=\"font-size:17px;line-height:1.6;color:#2a2a2a;\">{{ eduWorkshopsBody1 }}<\u002Fp>\n          <p style=\"font-size:17px;line-height:1.6;color:#2a2a2a;\">{{ eduWorkshopsBody2 }}<\u002Fp>\n        <\u002Fdiv>\n      <\u002Fdiv>\n      <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:clamp(24px,4vw,48px);align-items:center;margin-top:56px;\">\n        <div style=\"position:relative;overflow:hidden;height:clamp(260px,45vw,420px);background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#a9c1ba;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:12px;\">\n          {{ eduConcertImgEl }}\n          <sc-if value=\"{{ noEduConcertImg }}\" hint-placeholder-val=\"{{ true }}\"><span>quartet portrait on teal backdrop<\u002Fspan><\u002Fsc-if>\n        <\u002Fdiv>\n        <div>\n          <div style=\"font-family:'Jost',sans-serif;font-weight:800;font-size:clamp(30px,5vw,46px);line-height:1.02;\">{{ eduConcertTitle }}<\u002Fdiv>\n          <p style=\"font-size:16px;line-height:1.55;color:#2a2a2a;white-space:pre-line;\">{{ eduConcertBody1 }}<\u002Fp>\n          <p style=\"font-size:16px;line-height:1.6;color:#2a2a2a;\">{{ eduConcertBody2 }}<\u002Fp>\n          <p style=\"font-size:16px;line-height:1.6;color:#2a2a2a;\">The young audience is encouraged to actively participate — clapping and singing along to rhythms and harmonies, engaging in conversation with the quartet, and asking questions during a Q&amp;A session following the exhilarating conclusion of a fast Brazilian samba tune.<\u002Fp>\n        <\u002Fdiv>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= NEWS ================= -->\n  <sc-if value=\"{{ isNews }}\" hint-placeholder-val=\"{{ false }}\">\n  <div style=\"padding:clamp(24px,4.5vw,48px) clamp(18px,4.3vw,60px);\" data-comment-anchor=\"940c3776bc-div\">\n    <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:clamp(30px,4.6vw,42px);line-height:1.04;letter-spacing:-.005em;margin-bottom:{{ newsHeadGap }};\">Latest news<\u002Fdiv>\n    <sc-for list=\"{{ newsPageItems }}\" as=\"n\" hint-placeholder-count=\"5\">\n      <sc-if value=\"{{ showNewsBar }}\" hint-placeholder-val=\"{{ true }}\">\n      <div style=\"height:10px;background:#2b2b2b;margin-bottom:26px;\"><\u002Fdiv>\n      <\u002Fsc-if>\n      <div style=\"display:grid;grid-template-columns:{{ newsRowCols }};gap:{{ newsRowGap }};margin-bottom:{{ newsRowSpace }};\">\n        <div style=\"padding-right:{{ newsColPad }};border-right:{{ newsColRule }};padding-bottom:{{ newsDatePadB }};border-bottom:{{ newsDateRule }};\">\n          <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:20px;line-height:1;\">{{ n.day }} {{ n.mon }}<\u002Fdiv>\n          <div style=\"font-family:'Jost',sans-serif;font-weight:500;font-size:14px;color:#6a655c;margin-top:3px;\">{{ n.year }}<\u002Fdiv>\n        <\u002Fdiv>\n        <div style=\"padding:{{ newsTitlePad }};font-family:'Jost',sans-serif;font-weight:600;font-size:{{ newsTitleSize }};line-height:1.22;letter-spacing:-.005em;text-align:{{ newsTitleAlign }};text-wrap:pretty;\">{{ n.title }}<\u002Fdiv>\n        <div style=\"padding-left:{{ newsBodyPad }};\">\n          <sc-for list=\"{{ n.paras }}\" as=\"para\" hint-placeholder-count=\"2\">\n            <p style=\"font-size:16px;line-height:1.62;margin:0 0 14px;color:#2a2a2a;text-wrap:pretty;\">{{ para }}<\u002Fp>\n          <\u002Fsc-for>\n        <\u002Fdiv>\n      <\u002Fdiv>\n    <\u002Fsc-for>\n    <sc-if value=\"{{ hasNewsPages }}\" hint-placeholder-val=\"{{ false }}\">\n      <div style=\"display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:28px;border-top:1.5px solid #111;\">\n        <button sc-camel-on-click=\"{{ newsPrev }}\" style-hover=\"background:#f4f2ec\" style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;letter-spacing:.04em;padding:10px 18px;border:1.5px solid #111;background:#fff;cursor:{{ newsPrevCursor }};opacity:{{ newsPrevOpacity }};transition:.15s;\">← Newer<\u002Fbutton>\n        <sc-for list=\"{{ newsPages }}\" as=\"pg\" hint-placeholder-count=\"2\">\n          <button sc-camel-on-click=\"{{ pg.onClick }}\" style-hover=\"opacity:.8\" style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;min-width:42px;padding:10px 12px;border:1.5px solid #111;cursor:pointer;transition:.15s;color:{{ pg.fg }};background:{{ pg.bg }};\">{{ pg.label }}<\u002Fbutton>\n        <\u002Fsc-for>\n        <button sc-camel-on-click=\"{{ newsNext }}\" style-hover=\"background:#f4f2ec\" style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:14px;letter-spacing:.04em;padding:10px 18px;border:1.5px solid #111;background:#fff;cursor:{{ newsNextCursor }};opacity:{{ newsNextOpacity }};transition:.15s;\">Older →<\u002Fbutton>\n      <\u002Fdiv>\n    <\u002Fsc-if>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= CONTACT ================= -->\n  <sc-if value=\"{{ isContact }}\" hint-placeholder-val=\"{{ false }}\">\n  <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(360px,100%),1fr));\">\n    <div style=\"position:relative;padding:clamp(28px,5vw,56px) clamp(18px,4.3vw,60px);overflow:hidden;\">\n      <div style=\"text-align:right;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:clamp(26px,4vw,34px);\">General<\u002Fdiv>\n        <p style=\"font-size:16px;line-height:1.6;color:#2a2a2a;\">Do you want to get in touch with us?<br>Please write to us at <a href=\"mailto:info@northseaquartet.com\">info@northseaquartet.com<\u002Fa><\u002Fp>\n        <p style=\"font-size:16px;line-height:1.6;color:#2a2a2a;\">We will get back to you as soon as possible.<\u002Fp>\n      <\u002Fdiv>\n      \n      <div style=\"text-align:right;margin-top:120px;\">\n        <div style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:clamp(26px,4vw,34px);\">Bookings<\u002Fdiv>\n        <p style=\"font-size:16px;line-height:1.7;color:#2a2a2a;margin-bottom:6px;\">The Netherlands<br><strong>Yanna Pelser<\u002Fstrong><br>Email: <a href=\"mailto:info@northseaquartet.com\">info@northseaquartet.com<\u002Fa><\u002Fp>\n        <p style=\"font-size:16px;line-height:1.7;color:#2a2a2a;\">Worldwide<br><strong>Agentur Wolkenstein<\u002Fstrong><br>Phone: +49 941 504 7767<br>Email: <a href=\"mailto:mail@agentur-wolkenstein.de\">mail@agentur-wolkenstein.de<\u002Fa><\u002Fp>\n        <p style=\"font-size:15px;line-height:1.6;color:#2a2a2a;margin-top:36px;\">North Sea String Quartet is supported by<br><span style=\"font-family:'Jost',sans-serif;font-weight:700;font-size:22px;\">Stichting North Sea Strings<\u002Fspan><br>KvK: 87521806<\u002Fp>\n        <p style=\"font-size:15px;line-height:1.7;color:#2a2a2a;\"><strong>Board of Directors:<\u002Fstrong><br>Carolyn Muntz<br>Remco Menting<br>Andrea Voets<\u002Fp>\n      <\u002Fdiv>\n    <\u002Fdiv>\n    <div style=\"background:#111;display:flex;align-items:center;justify-content:center;padding:clamp(20px,4vw,40px);\">\n      <div style=\"position:relative;overflow:hidden;width:100%;max-width:560px;aspect-ratio:1/1;border-radius:50%;background:#0d0d0d;display:flex;align-items:center;justify-content:center;color:#9a9486;font-family:monospace;font-size:11px;text-transform:uppercase;text-align:center;padding:20px;\">\n        {{ contactPhotoEl }}\n        <sc-if value=\"{{ noContactPhoto }}\" hint-placeholder-val=\"{{ true }}\"><span>circular photo — quartet operating on a cello<\u002Fspan><\u002Fsc-if>\n      <\u002Fdiv>\n    <\u002Fdiv>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- Video player: top level, so it works from any page (home, albums, media). -->\n  <sc-if value=\"{{ videoOpen }}\" hint-placeholder-val=\"{{ false }}\">\n  <div sc-camel-on-click=\"{{ closeVideo }}\" style=\"position:fixed;inset:0;z-index:85;background:rgba(17,17,17,.93);display:flex;align-items:center;justify-content:center;padding:{{ vidPad }};animation:fadein .2s ease;\">\n    <button sc-camel-on-click=\"{{ closeVideo }}\" title=\"Close\" style-hover=\"background:#fff;color:#111\" style=\"position:absolute;top:{{ vidClose }};right:{{ vidClose }};z-index:2;width:44px;height:44px;border:1.5px solid #fff;background:rgba(17,17,17,.5);color:#fff;font-size:22px;line-height:1;cursor:pointer;transition:.15s;\">×<\u002Fbutton>\n    <div sc-camel-on-click=\"{{ stop }}\" style=\"position:relative;width:{{ vidW }};max-width:{{ vidMaxW }};aspect-ratio:16/9;background:#000;border:1.5px solid #fff;animation:popin .28s cubic-bezier(.2,.8,.3,1);\">\n      {{ videoEmbedEl }}\n    <\u002Fdiv>\n    <sc-if value=\"{{ askRotate }}\" hint-placeholder-val=\"{{ false }}\">\n      <div style=\"position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;background:rgba(17,17,17,.94);pointer-events:none;\">\n        <div style=\"width:54px;height:88px;border:2.5px solid #fff;border-radius:9px;animation:rotatehint 2.4s ease-in-out infinite;transform-origin:50% 50%;\"><\u002Fdiv>\n        <div style=\"font-family:'Jost',sans-serif;font-weight:600;font-size:15px;letter-spacing:.12em;text-transform:uppercase;color:#fff;text-align:center;\">Rotate your device<br><span style=\"font-weight:400;letter-spacing:.04em;text-transform:none;font-size:14px;color:#bdb8ae;\">for full-screen video<\u002Fspan><\u002Fdiv>\n      <\u002Fdiv>\n    <\u002Fsc-if>\n  <\u002Fdiv>\n  <\u002Fsc-if>\n\n  <!-- ================= FOOTER ================= -->\n  <dc-import name=\"Footer\" socials=\"{{ socials }}\" press-text=\"{{ footerPressText }}\" press-author=\"{{ pressAuthor }}\" press-source=\"{{ pressSource }}\" on-agenda=\"{{ goAgenda }}\" next-event=\"{{ nextEvent }}\" label-logo=\"{{ labelLogo }}\" label-name=\"{{ labelName }}\" hint-size=\"100%,320px\" style=\"display:block;\"><\u002Fdc-import>\n\n  <\u002Fdiv>\n<\u002Fdiv>\n<\u002Fx-dc>\n<script type=\"text/x-dc\" data-dc-script=\"\" data-props=\"{&quot;foilDensity&quot;:{&quot;editor&quot;:&quot;range&quot;,&quot;default&quot;:42,&quot;min&quot;:0,&quot;max&quot;:90,&quot;step&quot;:1,&quot;unit&quot;:&quot; pieces&quot;,&quot;section&quot;:&quot;Aluminium foil&quot;},&quot;foilSpeed&quot;:{&quot;editor&quot;:&quot;range&quot;,&quot;default&quot;:1,&quot;min&quot;:0.2,&quot;max&quot;:4,&quot;step&quot;:0.1,&quot;unit&quot;:&quot;×&quot;,&quot;section&quot;:&quot;Aluminium foil&quot;}}\">\nclass Component extends DCLogic {\n  // Routing only applies when served by WordPress; in the editor preview the\n  // document lives at an unrelated serve path that must not be overwritten.\n  static routingEnabled(){\n    try{ return !!(window.NSSQ_CONTENT || window.NSSQ_ROUTE); }catch(e){ return false; }\n  }\n  static routeFromPath(){\n    let path='/';\n    try{ path=(window.location.pathname||'/'); }catch(e){}\n    const seg=path.replace(/^\\/+|\\/+$/g,'').split('/').filter(Boolean);\n    const known={bio:1,music:1,agenda:1,media:1,education:1,news:1,contact:1};\n    if(!seg.length) return {page:'home',sub:null};\n    if(!known[seg[0]]){\n      // WordPress permalink (gig / news post / album): open the matching section.\n      let r=null; try{ r=window.NSSQ_ROUTE; }catch(e){}\n      if(r&&r.type==='gig') return {page:'agenda',sub:null};\n      if(r&&r.type==='post') return {page:'news',sub:null};\n      if(r&&r.type==='program') return {page:'music',sub:r.slug||null};\n      return null;\n    }\n    return {page:seg[0], sub:seg[1]?decodeURIComponent(seg[1]):null};\n  }\n  // Every in-app link ships a real href so crawlers (and cmd-click) see the route;\n  // a plain left click is intercepted and handled by the client router instead.\n  navGo(page,sub){ return (e)=>{ if(e&&(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button===1)) return; if(e&&e.preventDefault) e.preventDefault(); this.go(page,sub); }; }\n  navLink(page,sub){ return { href:Component.pathFor(page,sub), onClick:this.navGo(page,sub) }; }\n  static pathFor(page,sub){\n    if(!page||page==='home') return '/';\n    return '/'+page+(sub?'/'+encodeURIComponent(sub):'')+'/';\n  }\n  state = { ...((Component.routingEnabled()&&Component.routeFromPath())||{page:'home',sub:null}), tab:'upcoming', press:0, openMember:null, openStream:false, lightbox:null, video:null, newsPage:0, portrait:(typeof window!=='undefined'&&window.innerHeight>window.innerWidth), vw:(typeof window!=='undefined'?window.innerWidth:1200), bioW:(typeof window!=='undefined'?Math.min(window.innerWidth-46,1360):900) };\n  // Root-relative under WordPress: a bare \"uploads/...\" resolves against the\n  // current route, so on /agenda/ it would hit the SPA catch-all instead of the\n  // PNG. In the editor the document is served from an unrelated path, so the\n  // relative form is the correct one there.\n  static foilBase(){ return Component.routingEnabled() ? \"/uploads/\" : \"uploads/\"; }\n  foilPool = (()=>{ const b=Component.foilBase(); const r=(a,b2)=>a+Math.random()*(b2-a); const out=[]; for(let i=0;i<90;i++){ out.push({ src: b+(Math.random()<0.5?\"foil1.png\":\"foil2.png\"), w: r(70,300).toFixed(0)+\"px\", top: r(-15,100).toFixed(1)+\"%\", left: r(-15,100).toFixed(1)+\"%\", rot: r(0,360).toFixed(0)+\"deg\", fx: Math.random()<0.5?-1:1, fy: Math.random()<0.5?-1:1, durBase: r(34,64), phase: Math.random(), pick: Math.random(), sz: Math.random(), op: r(0.45,0.9).toFixed(2) }); } return out; })();\n  // Hold the white body back so the foil is the first thing seen. Plays on every\n  // load: a once-per-session gate made repeat visits skip the intro entirely,\n  // which read as the foil and the content arriving together.\n  static MOBILE_MAX = 1024;\n  revealDelay(){ return 2000; }\n  componentDidMount(){ const d=this.revealDelay();\n    if(!d){ this.setState({revealed:true,settled:true}); }\n    else {\n      // Don't start counting until a foil tile can actually paint, or the hold\n      // is spent staring at an empty background. Capped so a slow/failed image\n      // can never strand the content off screen.\n      // Once the slide-up has finished, drop will-change: it makes the shell a\n      // containing block, which would anchor the fixed video/lightbox overlays\n      // to the card instead of the viewport.\n      const begin=()=>{ this._reveal=setTimeout(()=>{ this.setState({revealed:true}); this._settle=setTimeout(()=>this.setState({settled:true}),1300); },d); };\n      let started=false; const once=()=>{ if(started) return; started=true; begin(); };\n      const probe=new Image();\n      probe.onload=once; probe.onerror=once;\n      probe.src=Component.foilBase()+'foil2.png';\n      if(probe.complete) once(); else this._foilWait=setTimeout(once,1200);\n    }\n    this._t=setInterval(()=>this.setState(s=>({press:(s.press+1)%this.quotes().length})),11000); this._vw=()=>this.setState({vw:window.innerWidth, portrait:window.innerHeight>window.innerWidth}); window.addEventListener('resize',this._vw); window.addEventListener('orientationchange',this._vw); this._st=()=>{ this.__pub=undefined; this.forceUpdate(); }; window.addEventListener('storage',this._st); window.addEventListener('focus',this._st);\n    this._key=(e)=>{ if(e.key==='Escape'&&this.state.video) this.setState({video:null});\n      if(this.state.lightbox==null) return;\n      if(e.key==='Escape') this.setState({lightbox:null});\n      else if(e.key==='ArrowRight'||e.key==='ArrowLeft'){ e.preventDefault(); this._nudge&&this._nudge(e.key==='ArrowRight'?1:-1); } };\n    window.addEventListener('keydown',this._key);\n    if(Component.routingEnabled()){\n      // Always resolve to a state: an unrecognised path is the home view.\n      this._pop=()=>{ const r=Component.routeFromPath()||{page:'home',sub:null}; this.setState({page:r.page,sub:r.sub}); };\n      window.addEventListener('popstate',this._pop);\n      try{ window.history.replaceState({page:this.state.page,sub:this.state.sub},'',window.location.href); }catch(e){}\n    }\n  }\n  componentWillUnmount(){ if(this._vw) window.removeEventListener('orientationchange',this._vw); clearInterval(this._t); clearTimeout(this._reveal); clearTimeout(this._settle); clearTimeout(this._foilWait); if(this._bioRO) this._bioRO.disconnect(); if(this._heroRO) this._heroRO.disconnect(); if(this._heroScroll) window.removeEventListener('scroll',this._heroScroll); window.removeEventListener('resize',this._vw); window.removeEventListener('storage',this._st); window.removeEventListener('focus',this._st); window.removeEventListener('keydown',this._key); if(this._pop) window.removeEventListener('popstate',this._pop); }\n  _pub(){ if(this.__pub!==undefined) return this.__pub; try{ if(typeof window!=='undefined' && window.NSSQ_CONTENT){ this.__pub=window.NSSQ_CONTENT; return this.__pub; } }catch(e){} try{ const d=localStorage.getItem('nssq_published'); this.__pub=d?JSON.parse(d):null; }catch(e){ this.__pub=null; } return this.__pub; }\n  bindHero(el){\n    if(!el||el===this._heroEl) return; this._heroEl=el;\n    if(this._heroRO) this._heroRO.disconnect();\n    const measure=()=>{ const r=el.getBoundingClientRect(); const wide=r.width>r.height;\n      // Cache the hero's document position so the scroll handler can derive\n      // its viewport offset from scrollY alone - reading layout on every\n      // scroll event forced a reflow (the parallax transform dirties styles).\n      this._heroDocTop=r.top+(window.scrollY||window.pageYOffset||0); this._heroHpx=r.height;\n      const top=(window.innerHeight||0)-r.bottom; // 0 when its bottom hits the fold\n      if(wide!==this.state.heroWide||Math.round(r.height)!==this.state.heroH) this.setState({heroWide:wide,heroH:Math.round(r.height)});\n      if(Math.abs((this.state.heroTop||0)-top)>1) this.setState({heroTop:top}); };\n    if(typeof ResizeObserver!=='undefined'){ this._heroRO=new ResizeObserver(measure); this._heroRO.observe(el); }\n    if(!this._heroScroll){ this._heroScroll=()=>{ const now=Date.now(); if(now-(this._heroT||0)<16) return; this._heroT=now;\n      if(!this._heroEl||this._heroDocTop==null) return;\n      // Pure arithmetic - no layout reads, no forced reflow.\n      const bottom=this._heroDocTop+this._heroHpx-(window.scrollY||window.pageYOffset||0);\n      const top=(window.innerHeight||0)-bottom;\n      if(Math.abs((this.state.heroTop||0)-top)>1) this.setState({heroTop:top}); };\n      window.addEventListener('scroll',this._heroScroll,{passive:true}); }\n    measure();\n  }\n  bindBio(el){ if(!el||el===this._bioEl) return; this._bioEl=el; if(this._bioRO) this._bioRO.disconnect(); if(typeof ResizeObserver!=='undefined'){ this._bioRO=new ResizeObserver(()=>{ const w=Math.round(el.clientWidth); if(w && w!==this.state.bioW) this.setState({bioW:w}); }); this._bioRO.observe(el); } }\n  go(page,sub=null){\n    this.setState({page,sub});\n    try{\n      const next=Component.pathFor(page,sub);\n      if(Component.routingEnabled()&&window.history&&window.history.pushState&&window.location.pathname!==next){\n        window.history.pushState({page,sub},'',next+window.location.search+window.location.hash);\n      }\n    }catch(e){}\n    try{ window.scrollTo(0,0); }catch(e){}\n  }\n  quotes(){ const p=this._pub(); if(p&&Array.isArray(p.quotes)&&p.quotes.length) return p.quotes.map(q=>({t:q.text,a:q.author,s:q.source})); return [\n    {t:\"This group grooves exceptionally well – no string quartet can match that.\",a:\"Dennis Weijers\",s:\"De Volkskrant (NL)\"},\n    {t:\"A remarkable ensemble, stylistically indescribable as references to jazz, folk and contemporary music appear interwoven.\",a:\"Christophe Charpenel\",s:\"citizenjazz.com (FR)\"},\n    {t:\"Needless to say, the North Sea String Quartet sounds like no other.\",a:\"\",s:\"Jazzenzo (NL)\"},\n  ]; }\n  // Every <img> in the app goes through this: it starts transparent over the\n  // black placeholder and fades up on load, so a slow image reads as a deliberate\n  // reveal instead of a grey gap. Cached images resolve before mount, so the ref\n  // shows them immediately rather than waiting for an onLoad that never fires.\n  fadeImg(props){\n    const show=(el)=>{ if(el) el.style.opacity='1'; };\n    const prevLoad=props.onLoad, prevErr=props.onError;\n    return Object.assign({}, props, {\n      style: Object.assign({}, props.style, {opacity:0, transition:'opacity .5s ease'}),\n      ref:(el)=>{ if(el && el.complete && el.naturalWidth) show(el); },\n      onLoad:(e)=>{ show(e.target); if(prevLoad) prevLoad(e); },\n      onError:(e)=>{ if(prevErr) prevErr(e); else show(e.target); }\n    });\n  }\n  // Notes are plain text in the studio; any URL or e-mail typed there becomes a\n  // real link here. Built as elements because a template hole renders text only.\n  _linkify(txt){\n    const s=String(txt||''); if(!s) return null;\n    const re=/((?:https?:\\/\\/|www\\.)[^\\s<>()]+[^\\s<>().,;:!?])|([^\\s<>()]+@[^\\s<>()]+\\.[a-z]{2,})/gi;\n    const out=[]; let last=0, m, k=0;\n    while((m=re.exec(s))){\n      if(m.index>last) out.push(s.slice(last,m.index));\n      const raw=m[0];\n      const href=m[2]?('mailto:'+raw):(/^https?:/i.test(raw)?raw:'https://'+raw);\n      out.push(React.createElement('a',{key:'l'+(k++),href,target:'_blank',rel:'noopener noreferrer',\n        style:{color:'inherit',textDecoration:'underline',textUnderlineOffset:'2px',textDecorationThickness:'1px'}},\n        m[2]?raw:raw.replace(/^https?:\\/\\//i,'').replace(/\\/$/,'')));\n      last=m.index+raw.length;\n    }\n    if(!out.length) return s;\n    if(last<s.length) out.push(s.slice(last));\n    return out;\n  }\n  renderVals(){\n    const page=this.state.page, sub=this.state.sub, tab=this.state.tab;\n    const fade=(p)=>this.fadeImg(p);\n    const heroVM=(key,placeholder,par)=>{ const p=this._pub(); let h=p&&p.heroes&&p.heroes[key]; if(h&&this.state.vw<Component.MOBILE_MAX&&h.mobile&&h.mobile.src){ h=h.mobile; } const src=h&&(typeof h==='object'?h.src:h); const x=(h&&h.x!=null?h.x:50), y=(h&&h.y!=null?h.y:50), z=(h&&h.zoom!=null?h.zoom:1), fit=(h&&h.fit)||'cover'; if(typeof src==='string'&&(src.indexOf('data:')===0||src.indexOf('http')===0||src.indexOf('//')===0)){\n      // Parallax only on landscape-ish heroes: the image is grown past the frame\n      // so it has room to drift vertically as the page scrolls.\n      const parOn=!!(par&&par.on), shift=parOn?par.shift:0;\n      const tr=[]; if(fit==='cover'&&z!==1) tr.push('scale('+z+')'); if(parOn) tr.push('translate3d(0,'+shift.toFixed(1)+'px,0)');\n      const img=React.createElement('img',fade({src,alt:(placeholder||''),fetchPriority:'high',decoding:'async',style:{position:'absolute',left:0,right:0,top:parOn?'-9%':0,bottom:parOn?'auto':0,width:'100%',height:parOn?'118%':'100%',objectFit:fit,objectPosition:x+'% '+y+'%',transform:tr.length?tr.join(' '):'none',transformOrigin:x+'% '+y+'%',willChange:parOn?'transform':'auto',display:'block'}})); if(fit==='contain'){ return React.createElement(React.Fragment,null, React.createElement('div',{style:{position:'absolute',inset:0,background:'#141210'}}), img); } return img; } return React.createElement('div',{style:{position:'absolute',inset:0,display:'flex',alignItems:'center',justifyContent:'center',color:'#9a9486',fontFamily:'monospace',fontSize:'12px',letterSpacing:'.06em',textTransform:'uppercase',textAlign:'center',padding:'0 20px'}}, placeholder); };\n    // Drift is proportional to how far the hero has scrolled through the viewport.\n    const heroPar=(()=>{ const el=this._heroEl; if(!el||!this.state.heroWide) return {on:false,shift:0};\n      const h=this.state.heroH||0; if(h<=0) return {on:false,shift:0};\n      const max=h*0.085; const prog=Math.max(-1,Math.min(1,(this.state.heroTop||0)/Math.max(1,h)));\n      return {on:true, shift: -prog*max}; })();\n    const heroHeight=(key,def)=>{ const p=this._pub(); const h=p&&p.heroes&&p.heroes[key];\n      if(mob){ const mh=h&&Number(h.mobileHeight); if(mh&&mh>0) return mh+'px'; }\n      const hh=h&&Number(h.height); return (hh&&hh>0)?(hh+'px'):def; };\n    const navDefs=[[\"bio\",\"BIO\"],[\"music\",\"MUSIC\"],[\"agenda\",\"AGENDA\"],[\"media\",\"MEDIA\"],[\"education\",\"EDUCATION\"],[\"news\",\"NEWS\"],[\"contact\",\"CONTACT\"]];\n    const nav=navDefs.map(([id,label])=>{ const boxed=page===id; return {id,label,...this.navLink(id),target:null,rel:null,fg:boxed?\"#fff\":\"#1a1a1a\",bg:boxed?\"#111\":\"transparent\",bd:\"none\"}; });\n    const storeUrl=(()=>{ const p=this._pub(); return (p&&p.storeUrl)||\"https://northseastringquartet.bandcamp.com\"; })();\n    nav.push({id:\"store\",label:\"STORE ↗\",href:storeUrl,target:\"_blank\",rel:\"noopener\",onClick:null,fg:\"#1a1a1a\",bg:\"transparent\",bd:\"1.5px solid #111\"});\n\n    let members=[\n      {name:\"George Dumitriu\",role:\"Violin · Viola\",ph:\"portrait — George Dumitriu\",bio:\"A versatile musician with Romanian roots, now based in Amsterdam. Classically trained, he won more than fifteen national and international prizes as a violinist, studying at the National University of Music Bucharest before continuing as a jazz guitarist in Groningen (on a Huygens Scholarship), New York and the Conservatorium van Amsterdam, where he worked intensively with live electronics. His work moves between composition, improvisation and sound research. With his trio DUMItRIO he released Future Nostalgia (2014) and Proverbe (2017, TryTone), and the group is currently developing the video series soFar soNear with guest artists; his solo project Monk on Viola offers an experimental chamber-music perspective on Thelonious Monk. Internationally he is a sought-after ensemble player — with Sanem Kalfa, the Kaja Draksler Octet, Eve Risser and the Blink String Quartet, among others — and has taught at the Conservatorium van Amsterdam and the Utrecht Conservatoire. He is also co-founder of Romanian Jazz International.\"},\n      {name:\"Pablo Rodríguez\",role:\"Violin\",ph:\"portrait — Pablo Rodríguez\",bio:\"Born on La Palma in the Canary Islands, Pablo began the violin at six. A recording of Stéphane Grappelli — a gift from his sister — sparked his love of improvisation and jazz, and he has developed his own violin language ever since, shaped by jazz but also by flamenco, folk and Latin-American music. Alongside classical training in Madrid with Alfredo García Serrano, he took a Master's in Latin Jazz at Codarts Rotterdam. His playing has taken him to stages including the Mercat de la Música Viva de Vic, the Amsterdam Music Festival, the Ateneo de Madrid, the Auditorio de Tenerife and the Escola Tom Jobim in Brazil. A versatile, sought-after collaborator, his music lives between tradition and experiment — always in search of personal expression in dialogue with other cultures and genres.\"},\n      {name:\"Yanna Pelser\",role:\"Viola · Voice\",ph:\"portrait — Yanna Pelser\",bio:\"Born in Delft, Yanna's love of music began at five, on hearing Handel's 'Arrival of the Queen of Sheba'. As a young violinist she played in youth orchestras and major European concert halls, growing into a seasoned orchestral and chamber musician. At fourteen she swapped the violin for the viola, drawn to its warm, deep sound, and during classical viola studies in Rotterdam, Tilburg and Detmold she discovered that her voice blended beautifully with the instrument — becoming a singing violist, the focus of her forthcoming debut album. Equally at home in jazz, pop and world music, she is a member of the jazz sextet Ikarai and the Brainteaser Orchestra and has worked with Duncan Laurence, Karsu and Celine Cairo, with studio credits including recordings for David Guetta and Céline Dion.\"},\n      {name:\"Thomas van Geelen\",role:\"Cello\",ph:\"portrait — Thomas van Geelen\",bio:\"Born in Tilburg, Thomas took up the cello at ten and, still at school, fell for other styles — progressive rock above all — learning guitar, playing in bands and accompanying singer-songwriters. While studying journalism he resolved to make music his profession. He studied classical cello in Tilburg, took master classes with leading cellists and won chamber-music and band prizes, growing ever more drawn to jazz; after his Master's he continued at the Rotterdam conservatory, specialising in jazz. A sought-after deputy, he plays regularly with the award-winning Metropole Orkest and is a member of the cross-genre formation Coal Harbour and the Bartolotti Ensemble for early music, with studio work for David Guetta and David Garrett.\"},\n    ];\n    { const p=this._pub(); if(p&&p.bio&&Array.isArray(p.bio.members)&&p.bio.members.length){ members = p.bio.members.map(m=>({name:m.name,role:m.role,bio:m.bio,ph:m.name,photo:m.photo})); } }\n\n    let albumDefs=[\n      {id:\"kitchen\",title:\"Kitchen Sessions\",meta:\"2017 · EP\"},\n      {id:\"feldwerk\",title:\"Feldwerk\",meta:\"2018 · EP\"},\n      {id:\"flying\",title:\"Songs for Flying\",meta:\"2019 · EP · w/ Roland Satterwhite\"},\n      {id:\"amazigh\",title:\"Electric Amazigh\",meta:\"2021 · Album · w/ Javier Infante\"},\n      {id:\"splunge\",title:\"Splunge\",meta:\"2024 · 7 Mountain Records\"},\n      {id:\"zonar\",title:\"ZONAR\",meta:\"2026 · Happy Seal Records · LP\"},\n    ];\n    { const p=this._pub(); if(p&&Array.isArray(p.albums)&&p.albums.length){ albumDefs = p.albums.map(a=>({id:a.id,title:a.title,meta:a.year||'',hero:a.hero,bandcamp:a.bandcamp,videos:a.videos,description:a.description,store:a.store})); } }\n    // Cover art comes from WordPress at runtime, so build the <img> the same way\n    // the hero images do — a literal src=\"{{ }}\" would be read as a bundled asset.\n    // An image field may be a plain URL string, a human-readable placeholder\n    // label, or the studio's positionable object {src,x,y,zoom}.\n    const imgSrc=(v)=>{ if(typeof v==='string') return v; if(v&&typeof v==='object'&&typeof v.src==='string') return v.src; return ''; };\n    const isUrl=(s)=>typeof s==='string'&&(s.indexOf('data:')===0||s.indexOf('http')===0||s.indexOf('//')===0);\n    const isImgSrc=(v)=>isUrl(imgSrc(v));\n    const imgPos=(v)=>{ const o=(v&&typeof v==='object')?v:{}; return { x:(o.x!=null?o.x:50), y:(o.y!=null?o.y:50), zoom:(o.zoom!=null?o.zoom:1) }; };\n    // Absolutely positioned so artwork always fills its frame edge to edge —\n    // a flex-sized <img> left slivers of placeholder on off-ratio uploads.\n    const coverEl=(v,title)=>{ const s=imgSrc(v); if(!isUrl(s)) return null; const p=imgPos(v);\n      return React.createElement('img',fade({src:s,alt:(title?title+' — album cover':'Album cover'),loading:'lazy',style:{position:'absolute',inset:0,width:'100%',height:'100%',objectFit:'cover',objectPosition:p.x+'% '+p.y+'%',transform:p.zoom!==1?('scale('+p.zoom+')'):'none',transformOrigin:p.x+'% '+p.y+'%',display:'block'}})); };\n    // Fills its container, honouring the crop the studio saved. Null when the\n    // field holds a label rather than a URL, so the placeholder shows through.\n    const fillEl=(v,alt)=>{ const s=imgSrc(v); if(!isUrl(s)) return null; const p=imgPos(v);\n      return React.createElement('img',fade({src:s,alt:alt||'',loading:'lazy',style:{position:'absolute',inset:0,width:'100%',height:'100%',objectFit:'cover',objectPosition:p.x+'% '+p.y+'%',transform:p.zoom!==1?('scale('+p.zoom+')'):'none',transformOrigin:p.x+'% '+p.y+'%',display:'block'}})); };\n    const albums=albumDefs.filter(a=>a.id!==\"zonar\").map(a=>({...a, noHero:!isImgSrc(a.hero), coverEl:coverEl(a.hero,a.title), ...this.navLink('music',a.id)}));\n    // /music/<slug>/ resolves to a release; anything unrecognised falls back to the list.\n    const subAlbum = sub ? albumDefs.find(a=>a.id===sub) : null;\n    // Featured release artwork: the album the studio marks as featured, else Zonar.\n    const featAlbum=(()=>{ const p=this._pub(); const wanted=(p&&p.homepage&&p.homepage.featuredAlbumId)||'zonar';\n      return albumDefs.find(a=>a.id===wanted) || albumDefs.find(a=>a.id==='zonar') || albumDefs[0] || {}; })();\n    const open=this.state.openMember;\n    const activeMember = open!=null ? members[open] : {name:\"\",role:\"\",bio:\"\",ph:\"\"};\n    const bw = Math.max(260, this.state.bioW || 0);\n    const GAP=16, HEAD=64;\n    const narrow = bw < 880;\n    const cell = Math.min(300,(bw-GAP)/2);\n    const rowW = cell*2+GAP;\n    const startX = Math.max(0,(bw-rowW)/2);\n    const others = open!=null ? [0,1,2,3].filter(x=>x!==open) : [];\n    const bigSize = narrow ? Math.min(bw,360) : 420;\n    const thumb = narrow ? (bw-2*GAP)/3 : 130;\n    const detTop = HEAD + 40;\n    const gridPos=(i)=>{ const col=i%2, row=Math.floor(i/2); return {left:(startX+col*(cell+GAP))+\"px\", top:(HEAD+row*(cell+GAP))+\"px\", width:cell+\"px\", height:cell+\"px\", z:1}; };\n    const detailPos=(i)=>{ const slot=others.indexOf(i); if(!narrow){ if(i===open) return {left:\"150px\",top:detTop+\"px\",width:\"420px\",height:\"420px\",z:2}; return {left:\"0px\",top:(detTop+slot*145)+\"px\",width:\"130px\",height:\"130px\",z:1}; } if(i===open) return {left:((bw-bigSize)/2)+\"px\",top:HEAD+\"px\",width:bigSize+\"px\",height:bigSize+\"px\",z:2}; return {left:(slot*(thumb+GAP))+\"px\",top:(HEAD+bigSize+GAP)+\"px\",width:thumb+\"px\",height:thumb+\"px\",z:1}; };\n    const membersUI=members.map((m,i)=>({...m, geo: open==null?gridPos(i):detailPos(i), photoEl:fillEl(m.photo,m.name), noPhoto:!isImgSrc(m.photo), onClick:()=>this.setState({openMember: open===i?null:i})}));\n    let panelGeo, containerHeight;\n    if(open==null){ panelGeo={left:\"0px\",top:\"0px\",width:\"0px\",height:\"0px\"}; containerHeight=(HEAD+cell*2+GAP+8)+\"px\"; }\n    else if(!narrow){ panelGeo={left:\"600px\",top:detTop+\"px\",width:Math.max(240,bw-600)+\"px\",height:\"420px\"}; containerHeight=(detTop+440)+\"px\"; }\n    else { const pTop=HEAD+bigSize+GAP+thumb+GAP; panelGeo={left:\"0px\",top:pTop+\"px\",width:bw+\"px\",height:\"360px\"}; containerHeight=(pTop+360+16)+\"px\"; }\n    const bioStyle = open==null ? {opacity:0,pointerEvents:\"none\"} : {opacity:1,pointerEvents:\"auto\"};\n    const headGeo = {left: narrow?\"0px\":\"50%\", top:\"0px\", transform: narrow?\"none\":\"translateX(-50%)\"};\n\n    let upcoming=[\n      {day:\"13\",mon:\"Sep\",year:\"2026\",title:\"ZONAR – Album Release Tour\",venue:\"Kettenfabrik\",place:\"Saarbrücken, Germany\",note:\"\",cta:\"More Info\"},\n      {day:\"26\",mon:\"Sep\",year:\"2026\",title:\"Concert\",venue:\"Beleef Zonnemaire\",place:\"Zonnemaire, The Netherlands\",note:\"\",cta:\"More Info\"},\n      {day:\"03\",mon:\"Oct\",year:\"2026\",title:\"ZONAR – Album Release Tour\",venue:\"Orange Jazz Days, TivoliVredenburg\",place:\"Utrecht, The Netherlands\",note:\"With the support of Het Kersjes Fonds, Cultuurfonds & Fonds Podiumkunsten\",cta:\"Get Tickets\"},\n      {day:\"20\",mon:\"Nov\",year:\"2026\",title:\"ZONAR – Album Release Tour\",venue:\"November Music, Theater aan de Parade\",place:\"Den Bosch, The Netherlands\",note:\"With the support of Het Kersjes Fonds, Cultuurfonds & Fonds Podiumkunsten\",cta:\"Get Tickets\"},\n    ];\n    let past=[\n      {day:\"01\",mon:\"Mar\",year:\"2026\",title:\"ZONAR – Official Release Concert\",venue:\"Amare\",place:\"Den Haag, The Netherlands\",note:\"Stage design by Roelof Pothuys\",cta:\"\"},\n      {day:\"30\",mon:\"Jan\",year:\"2026\",title:\"ZONAR – Pre-première\",venue:\"String Quartet Biennale Amsterdam\",place:\"Amsterdam, The Netherlands\",note:\"\",cta:\"\"},\n      {day:\"17\",mon:\"Nov\",year:\"2023\",title:\"Canary Islands Tour\",venue:\"Tazacorte\",place:\"La Palma, Spain\",note:\"\",cta:\"\"},\n      {day:\"14\",mon:\"May\",year:\"2023\",title:\"Batavierhuis Session\",venue:\"Batavierhuis\",place:\"Rotterdam, The Netherlands\",note:\"\",cta:\"\"},\n    ];\n    { const p=this._pub(); if(p&&p.agenda){ if(Array.isArray(p.agenda.upcoming)&&p.agenda.upcoming.length) upcoming=p.agenda.upcoming.map(e=>({day:e.day,mon:e.mon,year:e.year,title:e.title,venue:e.venue,place:e.place,note:e.info||'',cta:e.cta||'More Info',url:e.url})); if(Array.isArray(p.agenda.past)&&p.agenda.past.length) past=p.agenda.past.map(e=>({day:e.day,mon:e.mon,year:e.year,title:e.title,venue:e.venue,place:e.place,note:e.info||'',cta:e.cta||'',url:e.url})); } }\n    // \"Zonnemaire, The Netherlands\" wraps raggedly in a narrow column — split it\n    // at the last comma so city and country are deliberately two tidy lines.\n    const splitPlace=(p)=>{ const s=String(p||'').trim(); const i=s.lastIndexOf(','); return i>0?{city:s.slice(0,i).trim(),country:s.slice(i+1).trim()}:{city:s,country:''}; };\n    const events=upcoming.map(e=>({...e, ...splitPlace(e.place), noteEl:this._linkify(e.note)}));\n    // Upcoming grouped under year headers (year removed from each date block).\n    const upcomingGroups=(()=>{ const out=[]; events.forEach(e=>{ const y=String(e.year||'').trim()||'—'; let g=out[out.length-1]; if(!g||g.year!==y){ g={year:y, mt:out.length?'44px':'6px', events:[]}; out.push(g); } g.events.push(e); }); return out; })();\n    // Past shows as a compact one-line-per-event list, 20 at a time.\n    const pastShown=this.state.pastShown||20;\n    const pastEvents=past.slice(0,pastShown).map(e=>{ const sp=splitPlace(e.place); return {...e, ...sp,\n      dateLabel:[e.day,e.mon].filter(Boolean).join(' '),\n      placeLabel:[sp.city,sp.country].filter(Boolean).join(', ')}; });\n    const pastGroups=(()=>{ const out=[]; pastEvents.forEach(e=>{ const y=String(e.year||'').trim()||'—'; let g=out[out.length-1]; if(!g||g.year!==y){ g={year:y, mt:out.length?'44px':'6px', events:[]}; out.push(g); } g.events.push(e); }); return out; })();\n\n    let videos=[\n      {title:\"ROLLER\",channel:\"North Sea String Quartet\"},\n      {title:\"WTTT – Live at Bimhuis\",channel:\"North Sea String Quartet\"},\n      {title:\"“Last Ferry” – Dock Zuid Session\",channel:\"Dock Zuid\"},\n      {title:\"Choroesque | Live at Injazz ’22\",channel:\"North Sea String Quartet\"},\n      {title:\"“Cryptosplash” – Dock Zuid Session\",channel:\"Dock Zuid\"},\n      {title:\"Intergalactic Coffee Break at Jazz in Duketown 2021\",channel:\"North Sea String Quartet\"},\n    ];\n    const phLabels=[\"quartet portrait\",\"live · painting the stage\",\"live · injazz\",\"solo violin & flowers\",\"live · blue backdrop\",\"cello & flowers\",\"black & white · beach\",\"church concert\",\"dune portrait\",\"close portrait\",\"academy circle\",\"stage · green light\"];\n    const phH=[300,420,300,360,340,440,300,360,300,320,300,360];\n    let photos=phLabels.map((l,i)=>({l,h:phH[i]+\"px\"}));\n    { const p=this._pub(); if(p&&p.media){ if(Array.isArray(p.media.videos)&&p.media.videos.length) videos=p.media.videos.map(v=>({title:v.title,channel:v.channel,url:v.url})); if(Array.isArray(p.media.photos)&&p.media.photos.length) photos=p.media.photos.map((src,i)=>({l:'',h:(phH[i%phH.length])+'px',src})); } }\n    const lbList=photos.filter(p=>isImgSrc(p.src));\n    photos=photos.map(p=>{ const idx=lbList.indexOf(p); return {...p,\n      el:fillEl(p.src,p.l||'North Sea String Quartet'), noImg:!isImgSrc(p.src),\n      cursor:idx>=0?'zoom-in':'default',\n      onClick:idx>=0?(()=>this.setState({lightbox:idx})):undefined }; });\n    // YouTube ids from watch / youtu.be / shorts / embed URLs, so the video can\n    // play in an overlay instead of sending the visitor off-site.\n    const ytId=(u)=>{ const s=String(u||''); let m;\n      if((m=s.match(/[?&]v=([\\w-]{6,})/))) return m[1];\n      if((m=s.match(/youtu\\.be\\/([\\w-]{6,})/))) return m[1];\n      if((m=s.match(/\\/(?:embed|shorts|live)\\/([\\w-]{6,})/))) return m[1];\n      return ''; };\n    // maxres exists only for some uploads, so fall back to hqdefault on error.\n    const posterEl=(id,title)=>id?React.createElement('img',fade({\n      src:'https://i.ytimg.com/vi/'+id+'/maxresdefault.jpg', alt:title||'', loading:'lazy',\n      onError:(e)=>{ const t=e.target; if(t&&!t.dataset.fb){ t.dataset.fb='1'; t.src='https://i.ytimg.com/vi/'+id+'/hqdefault.jpg'; } else if(t){ t.style.opacity='1'; } },\n      style:{position:'absolute',inset:0,width:'100%',height:'100%',objectFit:'cover',display:'block'}\n    })):null;\n    const vmap=(v)=>{ const href=(typeof v.url==='string'&&v.url)?v.url:'https://www.youtube.com/@northseastringquartet';\n      const id=ytId(href);\n      return {...v, href, id, posterEl:posterEl(id,v.title), hasPoster:!!id,\n        onClick:id?((e)=>{ if(e&&e.preventDefault) e.preventDefault(); this.setState({video:id}); }):undefined }; };\n    videos=videos.map(vmap);\n    const vid=this.state.video;\n    const lb=this.state.lightbox;\n    const lbCount=lbList.length;\n    const lbStep=(d)=>()=>{ if(!lbCount) return; this.setState(s=>({lightbox:((s.lightbox+d)%lbCount+lbCount)%lbCount})); };\n    this._nudge=(d)=>lbStep(d)();\n\n    let news=[\n      {day:\"21\",mon:\"March\",year:\"2026\",title:\"★★★★★ Volkskrant, ★★★★ NRC — first reviews are in\",paras:[\n        \"We are proud to share that the first reviews of our new album Zonar are in: a five-star review in de Volkskrant and four stars in NRC. Both newspapers highlight our exploration of sound, where we bring together electronic influences, jazz, and acoustic string playing into one cohesive musical language.\",\n        \"De Volkskrant praises the originality of the album and the way we create a distinctive sonic world through composition and interplay. NRC also reflects on our adventurous approach, noting the blend of grooves, experimentation, and improvisation in our work.\",\n        \"The reviews were published on March 2 (NRC) and March 6 (de Volkskrant) 2026.\",\n      ]},\n      {day:\"26\",mon:\"January\",year:\"2026\",title:\"NSSQ selected as showcase artist at Classical:NEXT 2026\",paras:[\n        \"We are very happy to announce that North Sea String Quartet has been selected as a showcase artist for Classical:NEXT 2026, one of the key international platforms for classical and contemporary music. The event will take place in Budapest, bringing together artists, presenters, and music professionals from around the world.\",\n        \"Our showcase performance will take place on Friday 10 April at 13:00. We are truly looking forward to sharing our music in this inspiring international setting and to meeting new audiences and colleagues along the way.\",\n      ]},\n      {day:\"21\",mon:\"January\",year:\"2026\",title:\"Announcing ZONAR Album Release Tour\",paras:[\n        \"We are stoked to announce ZONAR (2026), our newest project and upcoming album. With this project, we push our sound further by immersing the acoustic string quartet in the sonic worlds of electronic music. Through unconventional techniques, prepared strings and collective composition, the music explores textures of EDM, ambient, and experimental genres — entirely without electronics.\",\n        \"The first public presentation of ZONAR will take place as a pre-première on 30 January 2026 at the String Quartet Biennale Amsterdam. The first official full-length album release concert will première on 01 March 2026 at Amare, Den Haag.\",\n      ]},\n      {day:\"10\",mon:\"April\",year:\"2024\",title:\"SPLUNGE: Album release tour announced\",paras:[\n        \"The album, which symbolizes a plunge into our creative waters and has therefore been named “Splunge,” will be released on May 10, 2024. We will celebrate this with the first concert of our Dutch release tour, at the beautiful venue LantarenVenster in our home city of Rotterdam.\",\n      ]},\n      {day:\"12\",mon:\"November\",year:\"2022\",title:\"Autumn newsletter\",paras:[\n        \"For our fans in the Canary Islands, we have very good news. This month we will be presenting — together with Javier Infante — our work Electric Amazigh at the Festival de Música Visual de Lanzarote, at the fantastic auditorium of the Jameos del Agua: a volcanic cave turned into a concert hall.\",\n        \"The tour will also take us to the islands of Tenerife and La Palma. In the meantime you can listen to the album on Spotify, Apple Music and other streaming platforms.\",\n      ]},\n    ];\n\n\n\n    let socials=[\n      {name:\"Instagram\",slug:\"instagram\",url:\"https://www.instagram.com/northseastringquartet/\"},{name:\"Facebook\",slug:\"facebook\",url:\"https://www.facebook.com/northseastringquartet\"},{name:\"YouTube\",slug:\"youtube\",url:\"https://www.youtube.com/@northseastringquartet\"},\n      {name:\"Bandcamp\",slug:\"bandcamp\",url:\"https://northseastringquartet.bandcamp.com\"},{name:\"Spotify\",slug:\"spotify\",url:\"https://open.spotify.com\"},{name:\"Apple Music\",slug:\"applemusic\",url:\"https://music.apple.com\"},\n    ];\n\n    const allQuotes=this.quotes();\n    // The homepage pair is chosen in the studio and stays put; the rotating quote\n    // still drives the footer.\n    const q=allQuotes[this.state.press];\n    const pubHp=(this._pub()&&this._pub().homepage)||{};\n    const pickQuote=(idx,fallback)=>allQuotes[(idx!=null&&allQuotes[idx])?idx:fallback]||allQuotes[0];\n    const qLead=pickQuote(pubHp.quoteLarge,0);\n    const qSmall=pickQuote(pubHp.quoteSmall,Math.min(1,allQuotes.length-1));\n\n    // ===== published-content overrides (from the CMS) =====\n    const pub=this._pub();\n    const hp=(pub&&pub.homepage)||{};\n    const hpHeading = hp.heading || \"Classical Roots, Bold Improvisations\";\n    // The headline breaks on its comma so the second half can take the accent.\n    const headParts = hpHeading.split(/,\\s*/);\n    const hpHeadingLine1 = headParts.length > 1 ? headParts[0] + ',' : hpHeading;\n    const hpHeadingLine2 = headParts.length > 1 ? headParts.slice(1).join(', ') : '';\n    const hpIntro1 = hp.intro1 || \"Four improvising string players who turn the classical quartet into a band that grooves, swings and refuses to sit still — acoustic, but never conventional.\";\n    const hpIntro2 = hp.intro2 || \"Four creative minds combining their full potential and diverse musical backgrounds, creating a unique sound, and having a lot of fun in doing so.\";\n    const feat=(hp&&hp.featured)||{};\n    const featuredKicker = feat.kicker || \"NEW ALBUM\";\n    const featuredDesc = feat.description || \"Available 01.03.2026. The acoustic string quartet immersed in the sonic worlds of electronic music — EDM, ambient and experimental textures, entirely without electronics.\";\n    const featuredLinkLabel = feat.linkLabel || \"\";\n    const featuredLinkUrl = feat.linkUrl || \"\";\n    const edu=(pub&&pub.education)||{};\n    const eduAcademyTitle = edu.academyTitle || \"Academy of Improvising Strings\";\n    const eduAcademyBody = edu.academyBody || \"Together with world-renowned violinist Tim Kliphuis, the North Sea String Quartet founded the Academy of Improvising Strings, a workshop weekend where classical string players from all over the world can learn about improvisation and non-classical styles. The Academy takes place in The Netherlands every spring.\";\n    const eduAcademyLinkLabel = edu.academyLinkLabel || \"↗ WEBSITE\";\n    const eduAcademyLinkUrl = edu.academyLinkUrl || \"#\";\n    const eduWorkshopsTitle = edu.workshopsTitle || \"Creative String Workshops\";\n    const eduWorkshopsBody1 = edu.workshopsBody1 || \"It is the NSSQ's mission to bring string improvisation back into the classroom by offering a range of workshop programs for string orchestras/ensembles, music schools and universities. Encouraging string players to put down their sheet music and use their ears instead, we draw upon elements from jazz, funk, blues and folk music.\";\n    const eduWorkshopsBody2 = edu.workshopsBody2 || \"We offer workshop programs that fit every scenario, from one-hour sessions for beginners to week-long intensive sessions for educational institutions. For inquiries, please contact us at info@northseastringquartet.com\";\n    const eduConcertTitle = edu.concertTitle || \"Concert/Lecture\";\n    const eduConcertBody1 = edu.concertBody1 || \"TITLE: “STRINGS THAT MAKE YOU MOVE”\\nSubtitle: ADAPTING MODERN STYLES INTO STRING PLAYING\\nLength: 60–70 minutes | Age group: 10–17 years.\";\n    const eduConcertBody2 = edu.concertBody2 || \"The North Sea String Quartet takes young audiences on a journey with a concert and lecture, showing an unexpected and wild side of the traditional string quartet. Through the performance of several tunes in the styles of Brazilian, jazz and African music, the quartet demonstrates methods and techniques to faithfully translate sounds, grooves and improvisation styles reminiscent of modern instruments like drums, piano and bass.\";\n    const bcn=(pub&&pub.bandcampNotice)||{};\n    const bandcampNoticeOn = bcn.enabled!==false;\n    const bandcampNoticeText = bcn.text || \"Buying or streaming on Bandcamp puts a far larger share directly into the hands of the musicians than the fractions-of-a-cent per play that streaming services pay. If you'd like to support us, Bandcamp is the place.\";\n    if(pub&&Array.isArray(pub.socials)) socials = pub.socials.filter(s=>s.enabled!==false).map(s=>({name:s.name,slug:s.slug,url:s.url}));\n    if(pub&&Array.isArray(pub.news)&&pub.news.length){ const MO=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]; const now=Date.now(); news = pub.news.filter(n=>n.status==='published'||(n.status==='scheduled'&&new Date(n.date).getTime()<=now)).map(n=>{ const d=new Date(n.date); return {day:String(d.getDate()).padStart(2,'0'),mon:MO[d.getMonth()]||n.mon||'',year:String(d.getFullYear()),title:n.title,paras:String(n.body||'').split(/\\n\\n+/).map(x=>x.trim()).filter(Boolean)}; }).sort((a,b)=>(a.year+a.mon<b.year+b.mon?1:-1)); }\n\n    const mob = this.state.vw < Component.MOBILE_MAX;\n    const NEWS_PER_PAGE = 10;\n    const newsTotalPages = Math.max(1, Math.ceil(news.length / NEWS_PER_PAGE));\n    const np = Math.min(this.state.newsPage, newsTotalPages - 1);\n    const goNewsPage=(i)=>()=>{ this.setState({newsPage:Math.max(0,Math.min(newsTotalPages-1,i))}); try{ window.scrollTo(0,0); }catch(e){} };\n\n    return {\n      newsPageItems: news.slice(np*NEWS_PER_PAGE, np*NEWS_PER_PAGE+NEWS_PER_PAGE),\n      hasNewsPages: newsTotalPages > 1,\n      newsPages: Array.from({length:newsTotalPages},(_,i)=>({label:String(i+1), onClick:goNewsPage(i), fg:i===np?'#fff':'#1a1a1a', bg:i===np?'#111':'#fff'})),\n      newsPrev: goNewsPage(np-1), newsNext: goNewsPage(np+1),\n      newsPrevCursor: np>0?'pointer':'not-allowed', newsPrevOpacity: np>0?'1':'.4',\n      newsNextCursor: np<newsTotalPages-1?'pointer':'not-allowed', newsNextOpacity: np<newsTotalPages-1?'1':'.4',\n      newsHeadGap: mob?'26px':'36px',\n      newsRowCols: mob?'1fr':'1fr 2fr 2fr',\n      newsRowGap: mob?'18px':'0px',\n      newsRowSpace: mob?'40px':'48px',\n      newsColPad: mob?'0px':'26px',\n      newsColRule: mob?'none':'1.5px solid #ddd',\n      newsDatePadB: mob?'12px':'0px',\n      newsDateRule: mob?'1px solid #e4e1d9':'none',\n      newsTitlePad: mob?'0px':'0 26px',\n      newsTitleAlign: mob?'left':'right',\n      newsTitleSize: mob?'21px':'23px',\n      newsBodyPad: mob?'0px':'26px',\n      // Four columns: date | venue+programme+notes | city/country | button.\n      // Fixed widths on the last two so every row shares the same edges.\n      agCols: mob?'1fr':'82px 1.5px minmax(0,1fr) 168px 132px',\n      agGap: mob?'12px':'0 26px',\n      agTextGap: mob?'5px':'6px',\n      agPlaceAlign: mob?'left':'right',\n      agCitySize: mob?'17px':'19px',\n      agCountrySize: mob?'15px':'16px',\n      agBtnJustify: mob?'flex-start':'flex-end',\n      agBtnWidth: mob?'auto':'100%',\n      agPad: mob?'20px 0':'26px 0',\n      agDateDir: mob?'row':'column',\n      agDateAlign: mob?'baseline':'center',\n      agDateJustify: mob?'flex-start':'center',\n      agDateGap: mob?'9px':'4px',\n      agDaySize: mob?'27px':'40px',\n      agMonSize: mob?'14px':'15px',\n      agShowRule: !mob,\n      agVenueSize: mob?'20px':'24px',\n      agProgSize: mob?'15.5px':'17px',\n      // Homepage Watch block: title/url/thumbnail come from the studio; a custom\n      // thumbnail wins over the YouTube poster.\n      homeWatch: (()=>{ const w=vmap({title:(hp.watchTitle||'ZONAR — Teaser'), channel:'North Sea String Quartet', url:(hp.watchUrl||'')});\n        const custom=fillEl(hp.thumb,(hp.watchTitle||'ZONAR — Teaser'));\n        return custom?{...w, posterEl:custom, hasPoster:true}:w; })(),\n      videoOpen: !!vid,\n      // The autoplay URL param alone is often ignored; once the frame is ready we\n      // also send the API's playVideo command, which starts it reliably.\n      videoEmbedEl: vid?React.createElement('iframe',{\n        key:vid,\n        src:'https://www.youtube-nocookie.com/embed/'+vid+'?autoplay=1&rel=0&playsinline=1&modestbranding=1&enablejsapi=1',\n        title:'North Sea String Quartet video',\n        allow:'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n        allowFullScreen:true,\n        onLoad:(e)=>{ const w=e.target&&e.target.contentWindow; if(!w) return;\n          const play=()=>{ try{ w.postMessage(JSON.stringify({event:'command',func:'playVideo',args:[]}),'*'); }catch(_){} };\n          play(); setTimeout(play,300); setTimeout(play,900); },\n        style:{position:'absolute',inset:0,width:'100%',height:'100%',border:0,display:'block'}\n      }):null,\n      closeVideo:()=>this.setState({video:null}),\n      // Portrait phones can't show a 16:9 frame at any useful size, so the player\n      // fills the landscape viewport and portrait gets a rotate prompt instead.\n      vidPad: mob ? '0' : 'clamp(12px,4vw,48px)',\n      vidW: mob ? '100%' : 'min(1100px,100%)',\n      vidMaxW: mob ? 'none' : '1100px',\n      vidClose: mob ? '12px' : 'clamp(12px,3vw,26px)',\n      askRotate: mob && this.state.portrait,\n      lightboxOpen: lb!=null && lbCount>0,\n      lightboxEl: (lb!=null && lbList[lb]) ? React.createElement('img',fade({src:imgSrc(lbList[lb].src),alt:'',style:{maxWidth:'100%',maxHeight:'78vh',objectFit:'contain',display:'block',border:'1.5px solid #fff'}})) : null,\n      lightboxCounter: (lb!=null&&lbCount)?((lb+1)+' / '+lbCount):'',\n      closeLightbox:()=>this.setState({lightbox:null}),\n      prevPhoto: lbStep(-1), nextPhoto: lbStep(1),\n      bioPortraitEl: fillEl((pub&&pub.bio&&pub.bio.portrait)||'','North Sea String Quartet'),\n      noBioPortrait: !isImgSrc(pub&&pub.bio&&pub.bio.portrait),\n      nextEvent: (()=>{ const n=upcoming[0]; if(!n) return null; const sp=splitPlace(n.place);\n        return {day:n.day,mon:n.mon,year:n.year,venue:n.venue,title:n.title,place:[sp.city,sp.country].filter(Boolean).join(', '),cta:n.cta||'Tickets'}; })(),\n      labelLogo: (pub&&pub.label&&pub.label.logo)||'',\n      labelName: (pub&&pub.label&&pub.label.name)||'Happy Seal Records',\n      goHome:this.navGo(\"home\"), goBio:this.navGo(\"bio\"), goAgenda:this.navGo(\"agenda\"),\n      goNews:this.navGo(\"news\"),\n      goZonar:this.navGo(\"music\",\"zonar\"), backToMusic:this.navGo(\"music\"),\n      hrefHome:Component.pathFor(\"home\"), hrefBio:Component.pathFor(\"bio\"), hrefAgenda:Component.pathFor(\"agenda\"),\n      hrefNews:Component.pathFor(\"news\"), hrefZonar:Component.pathFor(\"music\",\"zonar\"), hrefMusic:Component.pathFor(\"music\"),\n      foilField: (()=>{ const pub=this._pub(); const bs=pub&&pub.bgSettings; const n=Math.round((bs&&bs.quantity!=null?bs.quantity:(this.props.foilDensity ?? 42))); const spd=(bs&&bs.speed!=null?bs.speed:(this.props.foilSpeed ?? 1))||0.2; const custom=(bs&&Array.isArray(bs.custom)?bs.custom:[]).filter(c=>c&&c.src); // Custom uploads carry their own size range; the foil PNGs keep the pool width.\n      // Frequencies are shares of the field. Once they add up past 100% the later\n      // uploads would never be reached, so scale them down proportionally instead.\n      const totalFreq=custom.reduce((s,c)=>s+(Number(c.frequency)||0),0);\n      const scale=totalFreq>100?100/totalFreq:1;\n      const pickFor=(f)=>{ let acc=0; for(const c of custom){ acc += ((Number(c.frequency)||0)*scale)/100; if(f.pick < acc) return c; } return null; };\n      const widthFor=(f,c)=>{ if(!c) return f.w; const lo=Number(c.minSize)>0?Number(c.minSize):70, hi=Number(c.maxSize)>0?Number(c.maxSize):300; const a=Math.min(lo,hi), b2=Math.max(lo,hi); return (a + f.sz*(b2-a)).toFixed(0)+'px'; };\n      // Self-rotation is its own layer so the piece can spin while the outer div drifts.\n      const spin=Math.max(0, Number(bs&&bs.spin!=null?bs.spin:0));\n      const spinStyle=(f)=>{ if(!spin) return null; const sd=(46/spin)*(0.6+f.sz*0.8);\n        return { display:'block', willChange:'transform', animation:`spin ${sd.toFixed(1)}s linear infinite`, animationDirection: f.fx>0?'normal':'reverse', animationDelay:`${(-f.phase*sd).toFixed(1)}s` }; };\n      const list=this.foilPool.slice(0,n); return React.createElement(React.Fragment, null, list.map((f,i)=>{ const dur=f.durBase/spd; const c=pickFor(f); const sp=spinStyle(f); const drift={position:\"absolute\",top:f.top,left:f.left,willChange:\"transform\",animation:`drift ${dur.toFixed(1)}s linear infinite`,animationDelay:`${(-f.phase*dur).toFixed(1)}s`}; const img=React.createElement(\"img\",{src:c?c.src:f.src,alt:\"\",\"aria-hidden\":true,draggable:false,decoding:\"async\",loading:i<3?\"eager\":\"lazy\",fetchPriority:i<3?\"high\":\"auto\",style:{width:widthFor(f,c),opacity:f.op,transform:`rotate(${f.rot}) scaleX(${f.fx}) scaleY(${f.fy})`,filter:\"drop-shadow(0 10px 18px rgba(0,0,0,.16))\"}}); return React.createElement(\"div\",{key:i,style:drift}, sp ? React.createElement(\"div\",{style:sp}, img) : img); })); })(),\n      // Mobile sits the card in a 15px gutter with softened corners; desktop keeps\n      // the hard-edged 20px inset.\n      shellWidth: mob?'calc(100% - 30px)':'calc(100% - 40px)',\n      shellMargin: mob?'15px':'clamp(8px,2vw,26px)',\n      cardRadius: mob?'15px':'0px',\n      revealWillChange: this.state.settled?'auto':'opacity,transform',\n      revealOpacity: this.state.revealed?1:0,\n      revealShift: this.state.revealed?'none':'translateY(120px)',\n      nav, members:membersUI, activeMember, containerHeight, bioStyle, headGeo, panelGeo, setBioRef:(el)=>this.bindBio(el),\n      bioHeading:(()=>{ const p=this._pub(); return (p&&p.bio&&p.bio.heading)||'Strings that make you move'; })(),\n      bioLead:(()=>{ const p=this._pub(); return (p&&p.bio&&p.bio.lead)||'You can call it chamber jazz, but the members of the North Sea String Quartet are the last to limit their work with stylistic labels. As prominent improvising string players on the Dutch and international scene, they draw on modern jazz, classical, global and folk music.'; })(),\n      bioPara1:(()=>{ const p=this._pub(); return (p&&p.bio&&p.bio.para1)||'The quartet — violinists George Dumitriu and Pablo Rodríguez, violist Yanna Pelser and cellist Thomas van Geelen — formed in Rotterdam in 2016 out of a shared wish for an acoustic group that grooves and swings, improvises freely together, and still commands the classical string sound. They have performed at prestigious halls and festivals across Europe, among them the Concertgebouw Amsterdam, Bimhuis, North Sea Jazz Festival, Brosella, Jazz & The City Salzburg and Canarias Jazz & Más.'; })(),\n      bioPara2:(()=>{ const p=this._pub(); return (p&&p.bio&&p.bio.para2)||'Frequent collaborators include Trio da Kali (ML), Canary Islands guitarist Javier Infante (ES), Lílian Vieira (BR/NL) and Roland Satterwhite (USA/DE). Across a string of releases — from the early Kitchen Sessions (2017) to Electric Amazigh (2021) and their debut of entirely original compositions, Splunge (7 Mountain Records, 2024) — they have pushed the time-honoured string quartet into the modern era as improvisers, composers and a self-contained band with its own rhythm section. Their newest project, ZONAR (2026), carries that sound into the world of electronic music — entirely without electronics.'; })(),\n      bioPara3:(()=>{ const p=this._pub(); return (p&&p.bio&&p.bio.para3)||'Alongside performing, the members care deeply about inspiring the next generation of string players, leading improvisation workshops for young musicians in the Netherlands and abroad. In 2019, together with the renowned jazz violinist and pedagogue Tim Kliphuis, they founded the Academy of Improvising Strings, an annual workshop weekend in the Netherlands. North Sea String Quartet is supported by Stichting North Sea Strings.'; })(),\n      // Three bio quotes: each slot can point into the global press-quotes list\n      // (bio.quote1..3 hold an index); unset/-1 keeps the built-in default.\n      bioQuotes:(()=>{ const p=this._pub(); const defs=[\n        {text:'This dynamic and sparkling ensemble brings a fresh energy to the string quartet scene.',attr:'Tim Kliphuis, award-winning jazz violinist'},\n        {text:'This group grooves exceptionally well – no string quartet can match that.',attr:'Dennis Weijers, De Volkskrant (NL)'},\n        {text:'A remarkable ensemble, stylistically indescribable as references to jazz, folk and contemporary music appear interwoven.',attr:'Christophe Charpenel, citizenjazz.com (FR)'}];\n        const qs=(p&&Array.isArray(p.quotes)&&p.quotes.length)?p.quotes:null; const b=(p&&p.bio)||{};\n        return defs.map((d,i)=>{ const idx=Number(b['quote'+(i+1)]); if(qs&&!isNaN(idx)&&idx>=0&&qs[idx]&&qs[idx].text){ const q=qs[idx]; return {text:q.text,attr:[q.author,q.source].filter(Boolean).join(', ')||'—'}; } return d; }); })(),\n      hpHeading, hpIntro1, hpIntro2,\n      featuredKicker, featuredDesc, featuredLinkLabel, featuredLinkUrl, hasFeaturedLink:!!(featuredLinkLabel && featuredLinkUrl),\n      featuredCoverEl:coverEl(featAlbum.hero,featAlbum.title), noFeaturedHero:!isImgSrc(featAlbum.hero),\n      featuredTitleLabel:((featAlbum.title||'Album')+' cover'),\n      openFeaturedLink:()=>{ try{ window.open(featuredLinkUrl,\"_blank\",\"noopener\"); }catch(e){} },\n      eduAcademyTitle, eduAcademyBody, eduAcademyLinkLabel, eduAcademyLinkUrl,\n      eduWorkshopsTitle, eduWorkshopsBody1, eduWorkshopsBody2,\n      eduConcertTitle, eduConcertBody1, eduConcertBody2,\n      bandcampNoticeOn, bandcampNoticeText,\n      heroHome: heroVM('home','band hero photo — quartet in lab-coats operating on a cello',heroPar),\n      setHeroRef:(el)=>this.bindHero(el),\n      heroHomeHeight: heroHeight('home','clamp(260px,52vw,520px)'),\n      heroEdu: heroVM('education','education hero — leading a full string orchestra'),\n      heroEduHeight: heroHeight('education','clamp(240px,45vw,360px)'),\n      heroAgenda: heroVM('agenda','agenda hero — quartet sawing a cello, letterbox crop'),\n      heroAgendaHeight: heroHeight('agenda','230px'),\n      eduAcademyImgEl: fillEl(edu.imgAcademy,eduAcademyTitle), noEduAcademyImg: !isImgSrc(edu.imgAcademy),\n      eduWorkshopsImgEl: fillEl(edu.imgWorkshops,eduWorkshopsTitle), noEduWorkshopsImg: !isImgSrc(edu.imgWorkshops),\n      eduConcertImgEl: fillEl(edu.imgConcert,eduConcertTitle), noEduConcertImg: !isImgSrc(edu.imgConcert),\n      contactPhotoEl: fillEl((pub&&pub.contact&&pub.contact.photo)||'','North Sea String Quartet'),\n      noContactPhoto: !isImgSrc(pub&&pub.contact&&pub.contact.photo),\n      closeMember:()=>this.setState({openMember:null}),\n      stop:(e)=>e.stopPropagation(),\n      isMobile: mob,\n      showNewsBar: !mob,\n      streamOpen: this.state.openStream,\n      openStream:()=>this.setState({openStream:true}),\n      closeStream:()=>this.setState({openStream:false}),\n      albums, events, videos, photos, news, socials,\n      homeNews: news.slice(0,3).map(n=>({...n, ...this.navLink(\"news\")})),\n      isHome:page===\"home\", isBio:page===\"bio\",\n      isMusicList:page===\"music\"&&sub!==\"zonar\"&&!subAlbum, isZonar:page===\"music\"&&sub===\"zonar\",\n      isAlbumDetail:page===\"music\"&&!!subAlbum&&sub!==\"zonar\",\n      // ZONAR page: first album video is the big teaser, any others sit below it.\n      zonarWatch:(()=>{ const z=albumDefs.find(a=>a.id==='zonar')||{};\n        const vs=(Array.isArray(z.videos)?z.videos:[]).filter(v=>v&&v.url);\n        return vmap({title:(vs[0]&&vs[0].title)||'ZONAR — Official Teaser', channel:'North Sea String Quartet', url:(vs[0]&&vs[0].url)||''}); })(),\n      zonarMoreVideos:(()=>{ const z=albumDefs.find(a=>a.id==='zonar')||{};\n        const vs=(Array.isArray(z.videos)?z.videos:[]).filter(v=>v&&v.url).slice(1);\n        return vs.map((v,i)=>vmap({title:v.title||('ZONAR — video '+(i+2)), channel:'North Sea String Quartet', url:v.url})); })(),\n      zonarHasMoreVideos:(()=>{ const z=albumDefs.find(a=>a.id==='zonar')||{};\n        return (Array.isArray(z.videos)?z.videos:[]).filter(v=>v&&v.url).length>1; })(),\n      zonarArtEl:(()=>{ const z=albumDefs.find(a=>a.id==='zonar'); return fillEl(z&&z.hero,'ZONAR — album artwork'); })(),\n      zonarNoArt:(()=>{ const z=albumDefs.find(a=>a.id==='zonar'); return !isImgSrc(z&&z.hero); })(),\n      albumTitle:(subAlbum&&subAlbum.title)||'', albumMeta:(subAlbum&&subAlbum.meta)||'',\n      ...(()=>{ const parts=String((subAlbum&&subAlbum.meta)||'').split('·').map(x=>x.trim()).filter(Boolean);\n        const labels=['Year','Label','Format','Info'];\n        const specs=parts.slice(0,4).map((v,i)=>({label:labels[i],value:v}));\n        return { albumSpecs:specs, albumHasSpecs:specs.length>0 }; })(),\n      albumCoverEl:coverEl(subAlbum&&subAlbum.hero,subAlbum&&subAlbum.title),\n      albumNoCover:!isImgSrc(subAlbum&&subAlbum.hero),\n      albumParas:String((subAlbum&&subAlbum.description)||'').split(/\\n\\n+/).map(x=>x.trim()).filter(Boolean),\n      albumBandcamp:(subAlbum&&subAlbum.bandcamp)||'', albumHasBandcamp:!!(subAlbum&&subAlbum.bandcamp),\n      // Merch lives on the artist's own Bandcamp subdomain, not under the album path.\n      ...(()=>{ const pub=this._pub(); const list=(pub&&Array.isArray(pub.albums))?pub.albums:[];\n        const z=list.find(x=>/zonar/i.test(String(x&&(x.id||''))+' '+String(x&&(x.title||''))))||null;\n        const st=(z&&z.store)||{}; const on=(k)=>st[k]!==false;\n        const defs=[['cd','CD','Physical CD, shipped worldwide.'],\n                    ['digital','Digital album','Instant download in lossless quality.'],\n                    ['merch','T-shirts & merch','Wear the quartet on your chest.']];\n        const items=defs.filter(d=>on(d[0])).map(d=>({key:d[0],title:d[1],desc:d[2]}));\n        const buy=(z&&z.bandcamp)||'https://northseastringquartet.bandcamp.com';\n        let merch='https://northseastringquartet.bandcamp.com/merch';\n        try{ merch=new URL(buy).origin+'/merch'; }catch(_){}\n        return { zonarStoreItems:items, zonarStoreOn:items.length>0, zonarHasMerch:on('merch'), zonarBuyUrl:buy, zonarMerchUrl:merch }; })(),\n      albumMerchUrl:(()=>{ const u=(subAlbum&&subAlbum.bandcamp)||''; try{ return new URL(u).origin+'/merch'; }catch(_){ return 'https://northseastringquartet.bandcamp.com/merch'; } })(),\n      // Every release is sold on Bandcamp, so the store block is always offered:\n      // a release without its own album URL falls back to the artist store.\n      ...(()=>{ const st=(subAlbum&&subAlbum.store)||{};\n        const on=(k)=>st[k]!==false; // absent means available\n        const defs=[['cd','CD','Physical CD, shipped worldwide.'],\n                    ['digital','Digital album','Instant download in lossless quality.'],\n                    ['merch','T-shirts & merch','Wear the quartet on your chest.']];\n        const items=defs.filter(d=>on(d[0])).map(d=>({key:d[0],title:d[1],desc:d[2]}));\n        return { albumStoreItems:items, albumStoreOn:items.length>0, albumHasMerch:on('merch') }; })(),\n      albumBuyUrl:(subAlbum&&subAlbum.bandcamp)||'https://northseastringquartet.bandcamp.com',\n      albumVideos:((subAlbum&&Array.isArray(subAlbum.videos))?subAlbum.videos:[]).filter(v=>v&&v.url).map((v,i)=>vmap({title:v.title||((subAlbum.title||'Album')+' — video '+(i+1)),url:v.url})),\n      albumHasVideos:!!((subAlbum&&Array.isArray(subAlbum.videos))&&subAlbum.videos.filter(v=>v&&v.url).length),\n      isAgenda:page===\"agenda\", isMedia:page===\"media\", isEducation:page===\"education\",\n      isNews:page===\"news\", isContact:page===\"contact\",\n      setUpcoming:()=>this.setState({tab:\"upcoming\"}), setPast:()=>this.setState({tab:\"past\", pastShown:20}),\n      agIsUpcoming:tab===\"upcoming\", agIsPast:tab===\"past\", upcomingGroups,\n      pastEvents, pastGroups, pastHasMore:past.length>pastShown, loadMorePast:()=>this.setState({pastShown:pastShown+20}),\n      pastCols: mob?'86px 1fr':'150px 1fr minmax(120px,auto)',\n      pastPlaceCol: !mob, pastPlaceInline: mob,\n      upFg:tab===\"upcoming\"?\"#fff\":\"#1a1a1a\", upBg:tab===\"upcoming\"?\"#111\":\"#fff\",\n      pastFg:tab===\"past\"?\"#fff\":\"#1a1a1a\", pastBg:tab===\"past\"?\"#111\":\"#fff\",\n      pressText:qLead.t, pressCredit:(\"— \"+[qLead.a,qLead.s].filter(Boolean).join(\", \")),\n      pressTextNext:qSmall.t, pressCreditNext:(\"— \"+[qSmall.a,qSmall.s].filter(Boolean).join(\", \")),\n      pressAuthor:q.a, pressSource:q.s, footerPressText:q.t,\n      hpHeadingLine1, hpHeadingLine2,\n    };\n  }\n}\n<\u002Fscript>\n\n\n<\u002Fbody><\u002Fhtml>"
  