{"id":3108,"date":"2026-07-20T13:01:48","date_gmt":"2026-07-20T12:01:48","guid":{"rendered":"https:\/\/la-cortigiana.it\/?page_id=3108"},"modified":"2026-07-20T13:01:53","modified_gmt":"2026-07-20T12:01:53","slug":"all","status":"publish","type":"page","link":"https:\/\/la-cortigiana.it\/nl\/all\/","title":{"rendered":"Objects with meaning"},"content":{"rendered":"\n<main id=\"lc-gallery-root\" class=\"lc-gallery-root\">\n  <style>\n    .lc-gallery-root {\n      --lc-bg: #f4eee5;\n      --lc-paper: #fffaf2;\n      --lc-ink: #221914;\n      --lc-muted: #75665c;\n      --lc-line: rgba(34, 25, 20, 0.14);\n      --lc-accent: #7b1e2b;\n      --lc-accent-dark: #4f121c;\n      --lc-gold: #b08a57;\n\n      min-height: 100vh;\n      background:\n        radial-gradient(circle at 8% 0%, rgba(123, 30, 43, 0.08), transparent 34rem),\n        radial-gradient(circle at 92% 10%, rgba(176, 138, 87, 0.13), transparent 30rem),\n        linear-gradient(180deg, #fbf6ef 0%, var(--lc-bg) 52%, #efe4d8 100%);\n      color: var(--lc-ink);\n      font-family: inherit;\n    }\n\n    .lc-gallery-root * {\n      box-sizing: border-box;\n    }\n\n    .lc-gallery-root button,\n    .lc-gallery-root input {\n      font: inherit;\n    }\n\n    .lc-gallery-shell {\n      width: min(1440px, calc(100% - 36px));\n      margin: 0 auto;\n      padding: clamp(46px, 7vw, 92px) 0 90px;\n    }\n\n    .lc-gallery-hero {\n      max-width: 980px;\n      margin: 0 auto 42px;\n      text-align: center;\n    }\n\n    .lc-gallery-kicker {\n      margin-bottom: 16px;\n      color: var(--lc-accent);\n      font-size: 11px;\n      font-weight: 900;\n      letter-spacing: 0.2em;\n      text-transform: uppercase;\n    }\n\n    .lc-gallery-hero h1 {\n      margin: 0;\n      font-family: Georgia, \"Times New Roman\", serif;\n      font-size: clamp(48px, 7vw, 96px);\n      font-weight: 400;\n      line-height: 0.94;\n      letter-spacing: -0.06em;\n    }\n\n    .lc-gallery-hero p {\n      max-width: 760px;\n      margin: 24px auto 0;\n      color: var(--lc-muted);\n      font-size: clamp(16px, 1.6vw, 20px);\n      line-height: 1.65;\n    }\n\n    .lc-gallery-offer {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      margin-top: 24px;\n      padding: 10px 15px;\n      border: 1px solid rgba(123, 30, 43, 0.18);\n      border-radius: 999px;\n      background: rgba(255, 250, 242, 0.76);\n      color: var(--lc-accent-dark);\n      font-size: 11px;\n      font-weight: 900;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n    }\n\n    .lc-gallery-offer::before {\n      content: \"\";\n      width: 7px;\n      height: 7px;\n      flex: 0 0 7px;\n      border-radius: 50%;\n      background: var(--lc-accent);\n      box-shadow: 0 0 0 5px rgba(123, 30, 43, 0.10);\n    }\n\n    .lc-gallery-tools {\n      position: sticky;\n      z-index: 20;\n      top: 12px;\n      margin-bottom: 30px;\n      padding: 14px;\n      border: 1px solid var(--lc-line);\n      border-radius: 24px;\n      background: rgba(255, 250, 242, 0.88);\n      box-shadow: 0 15px 45px rgba(34, 25, 20, 0.10);\n      backdrop-filter: blur(15px);\n      -webkit-backdrop-filter: blur(15px);\n    }\n\n    .lc-gallery-filters {\n      display: flex;\n      gap: 8px;\n      overflow-x: auto;\n      padding: 1px 1px 9px;\n      scrollbar-width: thin;\n      -webkit-overflow-scrolling: touch;\n    }\n\n    .lc-gallery-filter {\n      flex: 0 0 auto;\n      min-height: 42px;\n      padding: 10px 16px;\n      border: 1px solid var(--lc-line);\n      border-radius: 999px;\n      background: rgba(255, 255, 255, 0.54);\n      color: var(--lc-ink);\n      cursor: pointer;\n      font-size: 10px;\n      font-weight: 900;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      transition: background 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms ease;\n      white-space: nowrap;\n    }\n\n    .lc-gallery-filter:hover {\n      transform: translateY(-1px);\n      border-color: rgba(123, 30, 43, 0.40);\n    }\n\n    .lc-gallery-filter.is-active {\n      border-color: var(--lc-accent);\n      background: var(--lc-accent);\n      color: #fffaf4;\n    }\n\n    .lc-gallery-search-row {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) auto;\n      gap: 12px;\n      align-items: center;\n      padding-top: 3px;\n    }\n\n    .lc-gallery-search-wrap {\n      position: relative;\n    }\n\n    .lc-gallery-search-wrap::before {\n      content: \"\u2315\";\n      position: absolute;\n      left: 15px;\n      top: 50%;\n      transform: translateY(-54%);\n      color: var(--lc-muted);\n      font-size: 22px;\n      pointer-events: none;\n    }\n\n    .lc-gallery-search {\n      width: 100%;\n      min-height: 46px;\n      padding: 11px 16px 11px 43px;\n      border: 1px solid var(--lc-line);\n      border-radius: 15px;\n      outline: none;\n      background: rgba(255, 255, 255, 0.64);\n      color: var(--lc-ink);\n      font-size: 14px;\n      transition: border-color 160ms ease, box-shadow 160ms ease;\n    }\n\n    .lc-gallery-search:focus {\n      border-color: rgba(123, 30, 43, 0.52);\n      box-shadow: 0 0 0 4px rgba(123, 30, 43, 0.08);\n    }\n\n    .lc-gallery-count {\n      min-width: 104px;\n      color: var(--lc-muted);\n      font-size: 11px;\n      font-weight: 800;\n      letter-spacing: 0.08em;\n      text-align: right;\n      text-transform: uppercase;\n    }\n\n    .lc-masonry {\n      display: grid;\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n      grid-auto-rows: 8px;\n      gap: 18px;\n      align-items: start;\n    }\n\n    .lc-product-card {\n      position: relative;\n      display: block;\n      grid-row-end: span 50;\n      overflow: hidden;\n      min-height: 300px;\n      border: 1px solid rgba(34, 25, 20, 0.13);\n      border-radius: 26px;\n      background: #ded1c2;\n      color: #fffaf4;\n      text-decoration: none;\n      box-shadow: 0 17px 48px rgba(34, 25, 20, 0.11);\n      transform: translateZ(0);\n      transition: transform 220ms ease, box-shadow 220ms ease;\n    }\n\n    .lc-product-card[hidden] {\n      display: none !important;\n    }\n\n    .lc-product-card:hover {\n      transform: translateY(-4px);\n      box-shadow: 0 25px 65px rgba(34, 25, 20, 0.18);\n    }\n\n    .lc-product-card img {\n      display: block;\n      width: 100%;\n      height: auto;\n      min-height: 300px;\n      max-height: 680px;\n      object-fit: cover;\n      transition: transform 700ms ease, filter 220ms ease;\n    }\n\n    .lc-product-card:hover img {\n      transform: scale(1.035);\n      filter: saturate(1.04) contrast(1.02);\n    }\n\n    .lc-product-card::after {\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      background:\n        linear-gradient(180deg, rgba(25, 15, 12, 0.03) 32%, rgba(25, 15, 12, 0.18) 58%, rgba(25, 15, 12, 0.88) 100%);\n      pointer-events: none;\n    }\n\n    .lc-product-content {\n      position: absolute;\n      z-index: 2;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      padding: 70px 21px 21px;\n    }\n\n    .lc-product-category {\n      display: block;\n      margin-bottom: 8px;\n      color: rgba(255, 250, 244, 0.72);\n      font-size: 9px;\n      font-weight: 900;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n    }\n\n    .lc-product-name {\n      display: block;\n      color: #fffaf4;\n      font-family: Georgia, \"Times New Roman\", serif;\n      font-size: clamp(21px, 2vw, 30px);\n      font-weight: 400;\n      line-height: 1.05;\n      letter-spacing: -0.035em;\n      text-shadow: 0 2px 14px rgba(0, 0, 0, 0.24);\n    }\n\n    .lc-product-meta {\n      display: flex;\n      gap: 10px;\n      align-items: center;\n      justify-content: space-between;\n      margin-top: 13px;\n    }\n\n    .lc-product-price {\n      color: #fffaf4;\n      font-size: 13px;\n      font-weight: 800;\n    }\n\n    .lc-product-price del {\n      margin-right: 6px;\n      color: rgba(255, 250, 244, 0.56);\n      font-weight: 500;\n    }\n\n    .lc-product-arrow {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 34px;\n      height: 34px;\n      flex: 0 0 34px;\n      border: 1px solid rgba(255, 250, 244, 0.34);\n      border-radius: 50%;\n      background: rgba(255, 250, 244, 0.12);\n      color: #fffaf4;\n      font-size: 16px;\n      backdrop-filter: blur(8px);\n    }\n\n    .lc-product-badge {\n      position: absolute;\n      z-index: 3;\n      top: 15px;\n      left: 15px;\n      padding: 8px 11px;\n      border: 1px solid rgba(255, 250, 244, 0.26);\n      border-radius: 999px;\n      background: rgba(34, 25, 20, 0.48);\n      color: #fffaf4;\n      font-size: 9px;\n      font-weight: 900;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      backdrop-filter: blur(10px);\n    }\n\n    .lc-gallery-status {\n      grid-column: 1 \/ -1;\n      padding: 70px 20px;\n      border: 1px solid var(--lc-line);\n      border-radius: 28px;\n      background: rgba(255, 250, 242, 0.72);\n      color: var(--lc-muted);\n      text-align: center;\n    }\n\n    .lc-gallery-loader {\n      display: inline-block;\n      width: 34px;\n      height: 34px;\n      margin-bottom: 16px;\n      border: 3px solid rgba(123, 30, 43, 0.16);\n      border-top-color: var(--lc-accent);\n      border-radius: 50%;\n      animation: lc-spin 800ms linear infinite;\n    }\n\n    .lc-gallery-retry {\n      display: inline-flex;\n      margin-top: 16px;\n      padding: 11px 18px;\n      border: 1px solid var(--lc-accent);\n      border-radius: 999px;\n      background: var(--lc-accent);\n      color: #fffaf4;\n      cursor: pointer;\n      font-size: 10px;\n      font-weight: 900;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n    }\n\n    @keyframes lc-spin {\n      to { transform: rotate(360deg); }\n    }\n\n    @media (max-width: 1120px) {\n      .lc-masonry {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n      }\n    }\n\n    @media (max-width: 760px) {\n      .lc-gallery-shell {\n        width: min(100% - 20px, 1440px);\n        padding-top: 42px;\n      }\n\n      .lc-gallery-hero {\n        margin-bottom: 30px;\n      }\n\n      .lc-gallery-tools {\n        top: 7px;\n        margin-right: -2px;\n        margin-left: -2px;\n        padding: 10px;\n        border-radius: 20px;\n      }\n\n      .lc-gallery-search-row {\n        grid-template-columns: 1fr;\n        gap: 8px;\n      }\n\n      .lc-gallery-count {\n        min-width: 0;\n        padding: 0 4px 2px;\n        text-align: left;\n      }\n\n      .lc-masonry {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        gap: 10px;\n      }\n\n      .lc-product-card {\n        min-height: 230px;\n        border-radius: 18px;\n      }\n\n      .lc-product-card img {\n        min-height: 230px;\n        max-height: 520px;\n      }\n\n      .lc-product-content {\n        padding: 54px 14px 14px;\n      }\n\n      .lc-product-category {\n        margin-bottom: 6px;\n        font-size: 8px;\n      }\n\n      .lc-product-name {\n        font-size: clamp(17px, 5vw, 23px);\n      }\n\n      .lc-product-price {\n        font-size: 11px;\n      }\n\n      .lc-product-arrow {\n        width: 29px;\n        height: 29px;\n        flex-basis: 29px;\n      }\n\n      .lc-product-badge {\n        top: 10px;\n        left: 10px;\n        padding: 6px 8px;\n        font-size: 8px;\n      }\n    }\n\n    @media (max-width: 420px) {\n      .lc-gallery-shell {\n        width: min(100% - 14px, 1440px);\n      }\n\n      .lc-masonry {\n        gap: 7px;\n      }\n\n      .lc-product-card,\n      .lc-product-card img {\n        min-height: 210px;\n      }\n\n      .lc-product-content {\n        padding: 48px 11px 11px;\n      }\n\n      .lc-product-category {\n        display: none;\n      }\n\n      .lc-product-meta {\n        margin-top: 9px;\n      }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      .lc-gallery-root *,\n      .lc-gallery-root *::before,\n      .lc-gallery-root *::after {\n        scroll-behavior: auto !important;\n        animation-duration: 0.01ms !important;\n        animation-iteration-count: 1 !important;\n        transition-duration: 0.01ms !important;\n      }\n    }\n\n    \/* Astra \/ Gutenberg page-width correction for this custom page only. *\/\n    body:has(#lc-gallery-root) .site-content .ast-container,\n    body:has(#lc-gallery-root) .entry-content,\n    body:has(#lc-gallery-root) .wp-block-post-content {\n      width: 100%;\n      max-width: none;\n      margin: 0;\n      padding: 0;\n    }\n\n    body:has(#lc-gallery-root) .entry-header,\n    body:has(#lc-gallery-root) .entry-title {\n      display: none;\n    }\n  <\/style>\n\n  <div class=\"lc-gallery-shell\">\n    <header class=\"lc-gallery-hero\">\n      <div class=\"lc-gallery-kicker\">The La Cortigiana collection<\/div>\n      <h1>Objects with meaning<\/h1>\n      <p>\n        Explore handmade lingerie, symbolic jewellery and leather objects.\n        Select a category or search the collection by name.\n      <\/p>\n      <div class=\"lc-gallery-offer\">\n        Choose any 3 full-price items \u00b7 Save 15% automatically\n      <\/div>\n    <\/header>\n\n    <section class=\"lc-gallery-tools\" aria-label=\"Product filters\">\n      <div class=\"lc-gallery-filters\" role=\"group\" aria-label=\"Filter products by category\">\n        <button class=\"lc-gallery-filter is-active\" type=\"button\" data-filter=\"all\" aria-pressed=\"true\">All<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"lingerie\" aria-pressed=\"false\">Lingerie &amp; Corsetry<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"pendants\" aria-pressed=\"false\">Pendants<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"bracelets\" aria-pressed=\"false\">Bracelets &amp; Anklets<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"leather\" aria-pressed=\"false\">Collars &amp; Cuffs<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"ritual\" aria-pressed=\"false\">Ritual Sets<\/button>\n        <button class=\"lc-gallery-filter\" type=\"button\" data-filter=\"impact\" aria-pressed=\"false\">Whips &amp; Paddles<\/button>\n      <\/div>\n\n      <div class=\"lc-gallery-search-row\">\n        <label class=\"lc-gallery-search-wrap\">\n          <span class=\"screen-reader-text\">Search products<\/span>\n          <input\n            id=\"lc-gallery-search\"\n            class=\"lc-gallery-search\"\n            type=\"search\"\n            inputmode=\"search\"\n            autocomplete=\"off\"\n            placeholder=\"Search the collection\u2026\"\n          >\n        <\/label>\n\n        <div id=\"lc-gallery-count\" class=\"lc-gallery-count\" aria-live=\"polite\">\n          Loading products\u2026\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section id=\"lc-masonry\" class=\"lc-masonry\" aria-label=\"La Cortigiana products\">\n      <div class=\"lc-gallery-status\" id=\"lc-gallery-status\">\n        <span class=\"lc-gallery-loader\" aria-hidden=\"true\"><\/span>\n        <div>Loading the collection\u2026<\/div>\n      <\/div>\n    <\/section>\n\n    <noscript>\n      <div class=\"lc-gallery-status\">\n        JavaScript is required to display the collection. Please visit\n        <a href=\"\/shop\/\">the shop<\/a> to browse all products.\n      <\/div>\n    <\/noscript>\n  <\/div>\n\n  <script>\n    (() => {\n      const root = document.getElementById('lc-gallery-root');\n\n      if (!root || root.dataset.initialized === 'true') return;\n      root.dataset.initialized = 'true';\n\n      const grid = root.querySelector('#lc-masonry');\n      const count = root.querySelector('#lc-gallery-count');\n      const search = root.querySelector('#lc-gallery-search');\n      const filterButtons = [...root.querySelectorAll('.lc-gallery-filter')];\n\n      const state = {\n        products: [],\n        activeFilter: 'all',\n        searchTerm: ''\n      };\n\n      const groupRules = {\n        lingerie: ['corsets-lingerie', 'corsets-and-lingerie', 'lingerie'],\n        pendants: ['symbol-pendants', 'pendants'],\n        bracelets: ['symbol-bracelets', 'bracelets', 'anklets'],\n        leather: ['collars-handcuffs', 'collars-and-handcuffs', 'collars', 'handcuffs'],\n        ritual: ['ritual-sets-boxes', 'ritual-sets-and-boxes', 'ritual-sets'],\n        impact: ['whips-paddles', 'whips-and-paddles', 'whips', 'paddles']\n      };\n\n      function normalize(value = '') {\n        return value\n          .toString()\n          .toLowerCase()\n          .normalize('NFD')\n          .replace(\/[\\u0300-\\u036f]\/g, '')\n          .replace(\/&\/g, 'and')\n          .replace(\/[^a-z0-9]+\/g, '-')\n          .replace(\/^-+|-+$\/g, '');\n      }\n\n      function productGroups(product) {\n        const categoryTokens = (product.categories || []).flatMap(category => [\n          normalize(category.slug),\n          normalize(category.name)\n        ]);\n\n        return Object.entries(groupRules)\n          .filter(([, acceptedTokens]) =>\n            acceptedTokens.some(token => categoryTokens.includes(token))\n          )\n          .map(([group]) => group);\n      }\n\n      function formatMoney(value, prices) {\n        if (value === null || value === undefined || value === '') return '';\n\n        const minorUnit = Number(prices.currency_minor_unit ?? 2);\n        const numericValue = Number(value) \/ Math.pow(10, minorUnit);\n\n        if (!Number.isFinite(numericValue)) return '';\n\n        try {\n          return new Intl.NumberFormat(document.documentElement.lang || 'en', {\n            style: 'currency',\n            currency: prices.currency_code || 'EUR',\n            minimumFractionDigits: Number.isInteger(numericValue) ? 0 : minorUnit,\n            maximumFractionDigits: minorUnit\n          }).format(numericValue);\n        } catch (error) {\n          return `${prices.currency_prefix || prices.currency_symbol || '\u20ac'}${numericValue.toFixed(minorUnit)}${prices.currency_suffix || ''}`;\n        }\n      }\n\n      function priceContent(product) {\n        const prices = product.prices || {};\n        const current = formatMoney(prices.price, prices);\n        const regular = formatMoney(prices.regular_price, prices);\n\n        if (product.on_sale && regular && current && regular !== current) {\n          const fragment = document.createDocumentFragment();\n          const oldPrice = document.createElement('del');\n          oldPrice.textContent = regular;\n          fragment.append(oldPrice, document.createTextNode(current));\n          return fragment;\n        }\n\n        return document.createTextNode(current || 'View product');\n      }\n\n      function primaryCategory(product) {\n        const categories = product.categories || [];\n        const useful = categories.find(category =>\n          !['uncategorized', 'senza-categoria'].includes(normalize(category.slug || category.name))\n        );\n\n        return useful ? useful.name : 'La Cortigiana';\n      }\n\n      function createProductCard(product, index) {\n        const image = product.images && product.images[0];\n\n        if (!image || !image.src || !product.permalink) return null;\n\n        const card = document.createElement('a');\n        card.className = 'lc-product-card';\n        card.href = product.permalink;\n        card.dataset.name = normalize(product.name);\n        card.dataset.groups = productGroups(product).join(' ');\n        card.setAttribute('aria-label', `${product.name} \u2014 view product`);\n\n        const productImage = document.createElement('img');\n        productImage.src = image.src;\n        productImage.alt = image.alt || product.name;\n        productImage.decoding = 'async';\n        productImage.loading = index < 6 ? 'eager' : 'lazy';\n\n        if (image.srcset) productImage.srcset = image.srcset;\n        if (image.sizes) productImage.sizes = '(max-width: 760px) 50vw, (max-width: 1120px) 33vw, 25vw';\n\n        if (!product.is_in_stock) {\n          const badge = document.createElement('span');\n          badge.className = 'lc-product-badge';\n          badge.textContent = 'Sold out';\n          card.appendChild(badge);\n        } else if (product.on_sale) {\n          const badge = document.createElement('span');\n          badge.className = 'lc-product-badge';\n          badge.textContent = 'Sale';\n          card.appendChild(badge);\n        }\n\n        const content = document.createElement('span');\n        content.className = 'lc-product-content';\n\n        const category = document.createElement('span');\n        category.className = 'lc-product-category';\n        category.textContent = primaryCategory(product);\n\n        const name = document.createElement('span');\n        name.className = 'lc-product-name';\n        name.textContent = product.name;\n\n        const meta = document.createElement('span');\n        meta.className = 'lc-product-meta';\n\n        const price = document.createElement('span');\n        price.className = 'lc-product-price';\n        price.appendChild(priceContent(product));\n\n        const arrow = document.createElement('span');\n        arrow.className = 'lc-product-arrow';\n        arrow.setAttribute('aria-hidden', 'true');\n        arrow.textContent = '\u2192';\n\n        meta.append(price, arrow);\n        content.append(category, name, meta);\n        card.append(productImage, content);\n\n        productImage.addEventListener('load', () => resizeCard(card));\n        productImage.addEventListener('error', () => {\n          card.remove();\n          applyFilters();\n        });\n\n        return card;\n      }\n\n      function resizeCard(card) {\n        if (!card || card.hidden) return;\n\n        const styles = window.getComputedStyle(grid);\n        const rowHeight = parseFloat(styles.getPropertyValue('grid-auto-rows')) || 8;\n        const rowGap = parseFloat(styles.getPropertyValue('row-gap')) || 0;\n        const height = card.getBoundingClientRect().height;\n        const span = Math.ceil((height + rowGap) \/ (rowHeight + rowGap));\n\n        card.style.gridRowEnd = `span ${Math.max(span, 1)}`;\n      }\n\n      function resizeVisibleCards() {\n        requestAnimationFrame(() => {\n          root.querySelectorAll('.lc-product-card:not([hidden])').forEach(resizeCard);\n        });\n      }\n\n      function applyFilters() {\n        const cards = [...root.querySelectorAll('.lc-product-card')];\n        let visible = 0;\n\n        cards.forEach(card => {\n          const groups = card.dataset.groups.split(' ').filter(Boolean);\n          const matchesFilter = state.activeFilter === 'all' || groups.includes(state.activeFilter);\n          const matchesSearch = !state.searchTerm || card.dataset.name.includes(state.searchTerm);\n          const show = matchesFilter && matchesSearch;\n\n          card.hidden = !show;\n\n          if (show) visible += 1;\n        });\n\n        count.textContent = `${visible} ${visible === 1 ? 'item' : 'items'}`;\n\n        let emptyState = root.querySelector('#lc-gallery-empty');\n\n        if (!visible && cards.length) {\n          if (!emptyState) {\n            emptyState = document.createElement('div');\n            emptyState.id = 'lc-gallery-empty';\n            emptyState.className = 'lc-gallery-status';\n            emptyState.textContent = 'No products match this selection.';\n            grid.appendChild(emptyState);\n          }\n          emptyState.hidden = false;\n        } else if (emptyState) {\n          emptyState.hidden = true;\n        }\n\n        resizeVisibleCards();\n      }\n\n      function renderProducts(products) {\n        grid.replaceChildren();\n\n        const fragment = document.createDocumentFragment();\n\n        products.forEach((product, index) => {\n          const card = createProductCard(product, index);\n          if (card) fragment.appendChild(card);\n        });\n\n        grid.appendChild(fragment);\n        applyFilters();\n        resizeVisibleCards();\n      }\n\n      function showError() {\n        grid.innerHTML = `\n          <div class=\"lc-gallery-status\">\n            <div>We could not load the collection.<\/div>\n            <button class=\"lc-gallery-retry\" type=\"button\">Try again<\/button>\n          <\/div>\n        `;\n\n        count.textContent = 'Unavailable';\n        grid.querySelector('.lc-gallery-retry')?.addEventListener('click', loadProducts);\n      }\n\n      async function loadProducts() {\n        count.textContent = 'Loading products\u2026';\n        grid.innerHTML = `\n          <div class=\"lc-gallery-status\">\n            <span class=\"lc-gallery-loader\" aria-hidden=\"true\"><\/span>\n            <div>Loading the collection\u2026<\/div>\n          <\/div>\n        `;\n\n        try {\n          const endpoint = '\/wp-json\/wc\/store\/v1\/products?per_page=100&catalog_visibility=visible&orderby=menu_order&order=asc';\n          const firstResponse = await fetch(endpoint, {\n            credentials: 'same-origin',\n            headers: { Accept: 'application\/json' }\n          });\n\n          if (!firstResponse.ok) throw new Error(`Request failed: ${firstResponse.status}`);\n\n          const products = await firstResponse.json();\n          const totalPages = Number(firstResponse.headers.get('X-WP-TotalPages') || 1);\n\n          if (totalPages > 1) {\n            const remainingRequests = [];\n\n            for (let page = 2; page <= totalPages; page += 1) {\n              remainingRequests.push(\n                fetch(`${endpoint}&#038;page=${page}`, {\n                  credentials: 'same-origin',\n                  headers: { Accept: 'application\/json' }\n                }).then(response => {\n                  if (!response.ok) throw new Error(`Request failed: ${response.status}`);\n                  return response.json();\n                })\n              );\n            }\n\n            const remainingPages = await Promise.all(remainingRequests);\n            remainingPages.forEach(pageProducts => products.push(...pageProducts));\n          }\n\n          state.products = products.filter(product => product.images && product.images.length);\n          renderProducts(state.products);\n        } catch (error) {\n          console.error('La Cortigiana gallery:', error);\n          showError();\n        }\n      }\n\n      filterButtons.forEach(button => {\n        button.addEventListener('click', () => {\n          state.activeFilter = button.dataset.filter;\n\n          filterButtons.forEach(item => {\n            const active = item === button;\n            item.classList.toggle('is-active', active);\n            item.setAttribute('aria-pressed', active ? 'true' : 'false');\n          });\n\n          applyFilters();\n        });\n      });\n\n      search.addEventListener('input', () => {\n        state.searchTerm = normalize(search.value);\n        applyFilters();\n      });\n\n      let resizeTimer;\n      window.addEventListener('resize', () => {\n        window.clearTimeout(resizeTimer);\n        resizeTimer = window.setTimeout(resizeVisibleCards, 120);\n      });\n\n      if ('ResizeObserver' in window) {\n        const observer = new ResizeObserver(resizeVisibleCards);\n        observer.observe(grid);\n      }\n\n      loadProducts();\n    })();\n  <\/script>\n<\/main>\n","protected":false},"excerpt":{"rendered":"<p>The La Cortigiana collection Objects with meaning Explore handmade lingerie, symbolic jewellery and leather objects. Select a category or search [&hellip;]<\/p>\n","protected":false},"author":846,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","googlesitekit_rrm_CAowrc_CDA:productID":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ai_generated_summary":"","footnotes":""},"class_list":["post-3108","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6.1 (Yoast SEO v28.0) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Objects with meaning -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/la-cortigiana.it\/nl\/all\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Objects with meaning\" \/>\n<meta property=\"og:description\" content=\"The La Cortigiana collection Objects with meaning Explore handmade lingerie, symbolic jewellery and leather objects. Select a category or search [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/la-cortigiana.it\/nl\/all\/\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/LaCortigiana\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T12:01:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/la-cortigiana.it\/wp-content\/uploads\/2026\/01\/three2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"667\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@la_cortigianait\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/all\\\/\",\"url\":\"https:\\\/\\\/la-cortigiana.it\\\/all\\\/\",\"name\":\"Objects with meaning -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#website\"},\"datePublished\":\"2026-07-20T12:01:48+00:00\",\"dateModified\":\"2026-07-20T12:01:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/all\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/la-cortigiana.it\\\/all\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/all\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/la-cortigiana.it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Objects with meaning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#website\",\"url\":\"https:\\\/\\\/la-cortigiana.it\\\/\",\"name\":\"La Cortigiana | Discreet Symbol Jewelry & Erotic Leather, Handmade in Italy\",\"description\":\"Quiet Marks of Chosen Desire\",\"publisher\":{\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/la-cortigiana.it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#organization\",\"name\":\"La Cortigiana\",\"url\":\"https:\\\/\\\/la-cortigiana.it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/la-cortigiana.it\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/La-Cortigiana.png\",\"contentUrl\":\"https:\\\/\\\/la-cortigiana.it\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/La-Cortigiana.png\",\"width\":1646,\"height\":575,\"caption\":\"La Cortigiana\"},\"image\":{\"@id\":\"https:\\\/\\\/la-cortigiana.it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/LaCortigiana\\\/\",\"https:\\\/\\\/x.com\\\/la_cortigianait\",\"https:\\\/\\\/www.instagram.com\\\/la_cortigiana.it\",\"https:\\\/\\\/substack.com\\\/@lacortigiana\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Objects with meaning -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/la-cortigiana.it\/nl\/all\/","og_locale":"nl_NL","og_type":"article","og_title":"Objects with meaning","og_description":"The La Cortigiana collection Objects with meaning Explore handmade lingerie, symbolic jewellery and leather objects. Select a category or search [&hellip;]","og_url":"https:\/\/la-cortigiana.it\/nl\/all\/","article_publisher":"https:\/\/www.facebook.com\/LaCortigiana\/","article_modified_time":"2026-07-20T12:01:53+00:00","og_image":[{"width":1000,"height":667,"url":"https:\/\/la-cortigiana.it\/wp-content\/uploads\/2026\/01\/three2.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@la_cortigianait","twitter_misc":{"Geschatte leestijd":"1 minuut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/la-cortigiana.it\/all\/","url":"https:\/\/la-cortigiana.it\/all\/","name":"Objects with meaning -","isPartOf":{"@id":"https:\/\/la-cortigiana.it\/#website"},"datePublished":"2026-07-20T12:01:48+00:00","dateModified":"2026-07-20T12:01:53+00:00","breadcrumb":{"@id":"https:\/\/la-cortigiana.it\/all\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/la-cortigiana.it\/all\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/la-cortigiana.it\/all\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/la-cortigiana.it\/"},{"@type":"ListItem","position":2,"name":"Objects with meaning"}]},{"@type":"WebSite","@id":"https:\/\/la-cortigiana.it\/#website","url":"https:\/\/la-cortigiana.it\/","name":"La Cortigiana | Discrete symbolische sieraden en erotisch leer, handgemaakt in Itali\u00eb","description":"Stille tekenen van een gekozen verlangen","publisher":{"@id":"https:\/\/la-cortigiana.it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/la-cortigiana.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/la-cortigiana.it\/#organization","name":"De Cortigiana","url":"https:\/\/la-cortigiana.it\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/la-cortigiana.it\/#\/schema\/logo\/image\/","url":"https:\/\/la-cortigiana.it\/wp-content\/uploads\/2025\/01\/La-Cortigiana.png","contentUrl":"https:\/\/la-cortigiana.it\/wp-content\/uploads\/2025\/01\/La-Cortigiana.png","width":1646,"height":575,"caption":"La Cortigiana"},"image":{"@id":"https:\/\/la-cortigiana.it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/LaCortigiana\/","https:\/\/x.com\/la_cortigianait","https:\/\/www.instagram.com\/la_cortigiana.it","https:\/\/substack.com\/@lacortigiana"]}]}},"_links":{"self":[{"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/pages\/3108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/users\/846"}],"replies":[{"embeddable":true,"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/comments?post=3108"}],"version-history":[{"count":1,"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/pages\/3108\/revisions"}],"predecessor-version":[{"id":3109,"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/pages\/3108\/revisions\/3109"}],"wp:attachment":[{"href":"https:\/\/la-cortigiana.it\/nl\/wp-json\/wp\/v2\/media?parent=3108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}