PageSourceSearch

https://www.nutrient.io/blog/news/

html nutrient.io collected 2026-09-24 21:50:03 UTC 322,580 bytes, 2,052 lines download raw bytes

1<!DOCTYPE html><html lang="en" data-theme="company"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><!-- Favicons --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="shortcut icon" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><meta name="generator" content="Astro v7.3.3"><title>News category | Nutrient blog</title><meta name="description" content="Read the latest Nutrient news, announcements, and company updates."><!-- Robots meta tag for search engine crawling --><link rel="preload" href="/assets/nutrient-fonts/ABCMonumentGroteskVariable.woff2" as="font" type="font/woff2" crossorigin="anonymous" fetchpriority="high"><link rel="preload" href="/assets/nutrient-fonts/ABCMonumentGroteskMono-Medium.woff2" as="font" type="font/woff2" crossorigin="anonymous"><!-- Preconnect to external domains --><link rel="preconnect" href="https://www.googletagmanager.com"><link rel="preconnect" href="https://consent.cookiebot.com"><!-- Convert Experiences --><link rel="preconnect" href="https://cdn-4.convertexperiments.com">
1<script type="text/javascript" src="//cdn-4.convertexperiments.com/v1/js/10019196-10019528.js?environment=production" async></script>
1<!-- End Convert Experiences --><link rel="dns-prefetch" href="https://pa.nutrient.io"><link rel="dns-prefetch" href="https://pa.nutrient-staging.io"><link rel="dns-prefetch" href="https://gtm.nutrient.io"><!-- Canonical URL --><link rel="canonical" href="https://www.nutrient.io/blog/news/"><!-- Hreflang: English-only site with self-referencing tags + x-default --><link rel="alternate" hreflang="en" href="https://www.nutrient.io/blog/news/"><link rel="alternate" hreflang="x-default" href="https://www.nutrient.io/blog/news/"><!-- Feed Discovery Links --><link rel="alternate" type="application/atom+xml" title="Inside Nutrient (Atom)" href="https://www.nutrient.io/blog/feed.atom"><link rel="alternate" type="application/rss+xml" title="Inside Nutrient (RSS)" href="https://www.nutrient.io/blog/feed.xml"><!-- Markdown alternate for AI agents and automation --><!-- Alternate Platform Links --><!-- Open Graph / Facebook --><meta property="og:title" content="News category | Nutrient blog"><meta property="og:type" content="website"><meta property="og:locale" content="en"><meta property="og:description" content="Read the latest Nutrient news, announcements, and company updates."><meta property="og:site_name" content="Nutrient"><meta property="og:url" content="https://www.nutrient.io/blog/news/"><meta property="og:image" content="https://cdn.prod.website-files.com/65fdb7696055f07a05048833/6717c1324bc009b855df63a7_Nutrient.jpg"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="News category | Nutrient blog"><meta name="twitter:description" content="Read the latest Nutrient news, announcements, and company updates."><meta name="twitter:image" content="https://cdn.prod.website-files.com/65fdb7696055f07a05048833/6717c1324bc009b855df63a7_Nutrient.jpg"><!-- Initialize dataLayer early for Plausible and other scripts -->
1<script>
2      window.dataLayer = window.dataLayer || [];
3    </script>
3<script>
4      // Handle theme synchronization
5      const html = document.documentElement;
6      const forcedTheme = html.getAttribute("data-forced-theme");
7      const currentTheme = html.getAttribute("data-theme");
8
9      if (forcedTheme) {
10        // If forced theme exists, sync it to data-theme
11        html.setAttribute("data-theme", forcedTheme);
12      } else if (!currentTheme) {
13        // If no theme is set at all, default to company
14        html.setAttribute("data-theme", "company");
15      }
16      // If data-theme is already set (from server), leave it as is
17    </script>
17<!-- Plausible Analytics - conditionally loaded based on team cookie -->
17<script>(function(){const plausibleDomain = "nutrient.io";
18const plausibleScript = "https://pa.nutrient.io/js/script.js";
19
20      (function () {
21        function hasTeamCookie() {
22          return document.cookie.split(";").some(function (c) {
23            return c.trim().startsWith("nutrient_team=true");
24          });
25        }
26        if (hasTeamCookie()) {
27          console.log("[Plausible] External script not loaded for team member");
28          return;
29        }
30        // Same automation check the Plausible script itself applies, with the
31        // same window.__plausible escape hatch (set by the live funnel canary).
32        if (navigator.webdriver === true && !window.__plausible) {
33          console.log(
34            "[Plausible] External script not loaded for automated browser",
35          );
36          return;
37        }
38        const s = document.createElement("script");
39        s.defer = true;
40        s.setAttribute("data-domain", plausibleDomain);
41        s.src = plausibleScript;
42        document.head.appendChild(s);
43      })();
44    })();</script>
44<script>
45// Attribution capture (WWW-1415). Fires on EVERY visit and maintains two
46// halves of the _ntnt_utm cookie:
47// - first_* + utm params: set-once — captured on the first landing (referrer-
48//   derived source/medium when no utm/click-id params exist) and never
49//   overwritten; missing keys may be added to a pre-v2 cookie.
50// - last_*: overwritten on each new touch — the first page of a session or
51//   any page carrying campaign params. Internal navigation never counts.
52// Consent-aware: values buffer in sessionStorage and the cookie is written
53// only once Cookiebot grants marketing consent, or after an 8s fallback when
54// no CMP is present on the page.
55(function captureAttribution() {
56  try {
57    var paramKeys = ["utm_source","utm_medium","utm_campaign","utm_content","utm_term","li_cid","gclid"];
58    var cookieName = "_ntnt_utm";
59    var pendingKey = "_ntnt_utm_pending";
60    var touchKey = "_ntnt_utm_touch";
61    var searchHosts = {"google.":"google","bing.com":"bing","duckduckgo.com":"duckduckgo","search.yahoo.":"yahoo","ecosia.org":"ecosia","baidu.com":"baidu","yandex.":"yandex","search.brave.com":"brave","startpage.com":"startpage"};
62    var socialHosts = {"linkedin.com":"linkedin","lnkd.in":"linkedin","facebook.com":"facebook","twitter.com":"x","t.co":"x","x.com":"x","youtube.com":"youtube","reddit.com":"reddit","news.ycombinator.com":"hackernews"};
63
64    function readCookie() {
65      var row = document.cookie.split(';').find(function(c) {
66        return c.trim().indexOf(cookieName + '=') === 0;
67      });
68      if (!row) return null;
69      try {
70        var parsed = JSON.parse(decodeURIComponent(row.split('=').slice(1).join('=')));
71        return parsed && typeof parsed === 'object' ? parsed : null;
72      } catch (e) { return null; }
73    }
74
75    function matchHost(host, table) {
76      // Domain-boundary matching only — substring matching mis-tagged e.g.
77      // netflix.com as x.com and restaurant.co as t.co (Dasha's PR review).
78      var hits = Object.keys(table).filter(function(frag) {
79        if (frag.slice(-1) === '.') {
80          // Prefix-style fragment ("google.") — match at a label boundary so
81          // google.com, google.de, and www.google.co.uk all hit, but
82          // fakegoogle.com does not.
83          return host.indexOf(frag) === 0 || host.indexOf('.' + frag) !== -1;
84        }
85        // Domain fragment ("x.com") — exact host or a true subdomain of it.
86        return host === frag || host.slice(-(frag.length + 1)) === '.' + frag;
87      });
88      return hits.length ? table[hits[0]] : null;
89    }
90
91    function classify(params, referrer) {
92      var utmSource = params.get('utm_source');
93      if (utmSource) {
94        return { source: utmSource, medium: params.get('utm_medium') || 'campaign' };
95      }
96      if (params.get('gclid')) return { source: 'google', medium: 'cpc' };
97      if (params.get('li_cid')) return { source: 'linkedin', medium: 'cpc' };
98      if (!referrer) return { source: 'direct', medium: 'none' };
99      var host;
100      try { host = new URL(referrer).hostname.toLowerCase(); } catch (e) {
101        return { source: 'direct', medium: 'none' };
102      }
103      // Internal referrer: cookie/session expired mid-visit — treat as direct
104      // rather than inventing a fake referral.
105      if (host === window.location.hostname || host.slice(-12) === '.nutrient.io' || host === 'nutrient.io') {
106        return { source: 'direct', medium: 'none' };
107      }
108      var search = matchHost(host, searchHosts);
109      if (search) return { source: search, medium: 'organic' };
110      var social = matchHost(host, socialHosts);
111      if (social) return { source: social, medium: 'social' };
112      return { source: host, medium: 'referral' };
113    }
114
115    function buildPayload(includeFirst, includeLast) {
116      var params = new URLSearchParams(window.location.search);
117      var referrer = document.referrer || '';
118      var derived = classify(params, referrer);
119      var now = new Date().toISOString();
120      // Stored referrer: origin + path only, capped — the cookie rides on
121      // every request, so no query strings/fragments and no 500-char URLs.
122      var storedReferrer = referrer.split('#')[0].split('?')[0].slice(0, 200);
123      var payload = {};
124      if (includeFirst) {
125        payload.v = 2;
126        payload.first_landing_page = window.location.pathname;
127        payload.first_referrer = storedReferrer;
128        payload.first_source = derived.source;
129        payload.first_medium = derived.medium;
130        payload.first_touch_date = now;
131        paramKeys.forEach(function(k) {
132          var val = params.get(k);
133          if (val) payload[k] = val;
134        });
135      }
136      if (includeLast) {
137        payload.last_landing_page = window.location.pathname;
138        payload.last_referrer = storedReferrer;
139        payload.last_source = derived.source;
140        payload.last_medium = derived.medium;
141        payload.last_touch_date = now;
142        var campaign = params.get('utm_campaign');
143        if (campaign) payload.last_campaign = campaign;
144        var content = params.get('utm_content');
145        if (content) payload.last_content = content;
146        var term = params.get('utm_term');
147        if (term) payload.last_term = term;
148      }
149      return payload;
150    }
151
152    function writeCookie(payload) {
153      var maxAge = 60 * 60 * 24 * 90; // 90 days
154      var attrs = 'path=/; max-age=' + maxAge + '; SameSite=Lax';
155      if (window.location.protocol === 'https:') attrs += '; Secure';
156      if (window.location.hostname.endsWith('nutrient.io')) attrs += '; domain=.nutrient.io';
157      document.cookie = cookieName + '=' + encodeURIComponent(JSON.stringify(payload)) + '; ' + attrs;
158    }
159
160    // null = consent state not known yet (Cookiebot absent, or present but
161    // the visitor has not responded — consent.method stays null until they
162    // do). Only an actual response counts as a decision; otherwise the
163    // accept listeners must stay registered so accepting the banner on the
164    // SAME page writes the cookie immediately (Dasha's PR review).
165    function consentState() {
166      var cb = window.Cookiebot;
167      if (!cb || !cb.consent) return null;
168      if (!cb.consent.method) return null;
169      return cb.consent.marketing === true;
170    }
171
172    function attemptWrite() {
173      try {
174        var raw = sessionStorage.getItem(pendingKey);
175        if (!raw) return;
176        var pending = JSON.parse(raw);
177        var existing = readCookie();
178        var merged = existing || {};
179        var changed = false;
180        Object.keys(pending).forEach(function(k) {
181          // first_* keys (and utm params) are set-once: only fill gaps.
182          // last_* keys are the latest touch: always overwrite.
183          var isLast = k.indexOf('last_') === 0;
184          if (isLast || merged[k] === undefined) {
185            merged[k] = pending[k];
186            changed = true;
187          }
188        });
189        if (changed) writeCookie(merged);
190        sessionStorage.removeItem(pendingKey);
191      } catch (e) { /* never break the page */ }
192    }
193
194    // First touch: buffer only if the cookie is absent or predates v2, and
195    // only once per session, so a mid-session page (whose referrer is
196    // internal) can't overwrite the true landing capture.
197    // Latest touch: a "new touch" is the first page of a session, or any
198    // page carrying campaign params (a mid-session ad/email click-through).
199    // Internal navigation never counts as a touch.
200    var existing = readCookie();
201    var needsFirst = !existing || existing.v !== 2;
202    var params = new URLSearchParams(window.location.search);
203    var hasParams = paramKeys.some(function(k) { return params.get(k); });
204    var isNewTouch = hasParams || !sessionStorage.getItem(touchKey);
205    if (!sessionStorage.getItem(pendingKey) && (needsFirst || isNewTouch)) {
206      sessionStorage.setItem(
207        pendingKey,
208        JSON.stringify(buildPayload(needsFirst, isNewTouch))
209      );
210      sessionStorage.setItem(touchKey, '1');
211    }
212
213    if (!sessionStorage.getItem(pendingKey)) return;
214
215    // Write immediately when consent is already granted; otherwise wait for
216    // Cookiebot's events. Fail-closed by design (WWW-1415, privacy decision
217    // 2026-08-03): when Cookiebot never appears (blocked or failed to load),
218    // the cookie is NOT written — a blocked banner is indistinguishable from
219    // a missing one, and a marketing cookie needs a real consent signal. The
220    // session buffer stays, so a late-loading Cookiebot still triggers the
221    // write via the events below.
222    if (consentState() === true) { attemptWrite(); return; }
223    if (consentState() === false) return; // declined: keep the session buffer only
224    window.addEventListener('CookiebotOnConsentReady', attemptWrite);
225    window.addEventListener('CookiebotOnAccept', attemptWrite);
226  } catch (e) {
227    // Attribution capture must never break the page.
228  }
229})();
230
231// Bridge first-party attribution cookie → survey CTA URLs.
232// HubSpot's modern form embed renders in a cross-origin iframe on
233// js-eu1.hsforms.net, so JS in our parent page cannot reach the iframe's
234// hidden inputs and the iframe cannot read our _ntnt_utm cookie. HubSpot
235// auto-fills hidden fields from parent URL params, so on every page we
236// rewrite survey-CTA hrefs to carry the cookie's attribution as URL
237// params. Existing query params on the link (e.g. ?landing_persona=…) are
238// preserved.
239(function enrichSurveyCtas() {
240  function readAttributionCookie() {
241    try {
242      var row = document.cookie.split(';').find(function(c) {
243        return c.trim().indexOf("_ntnt_utm" + '=') === 0;
244      });
245      if (!row) return null;
246      var parsed = JSON.parse(decodeURIComponent(row.split('=').slice(1).join('=')));
247      return parsed && typeof parsed === 'object' ? parsed : null;
248    } catch (e) { return null; }
249  }
250  function enrich() {
251    var values = readAttributionCookie();
252    if (!values) return;
253    // Only URL params belong in survey CTA links — never the derived
254    // first_* keys or the version marker (WWW-1415).
255    var keys = ["utm_source","utm_medium","utm_campaign","utm_content","utm_term","li_cid","gclid"].filter(function(k) {
256      return values[k];
257    });
258    if (keys.length === 0) return;
259    var links = document.querySelectorAll(
260      "a[data-survey-cta], a[href*='/research-study/legal/survey/']"
261    );
262    links.forEach(function(a) {
263      if (a.hasAttribute('data-survey-cookie-enriched')) return;
264      try {
265        var url = new URL(a.getAttribute('href'), window.location.origin);
266        keys.forEach(function(k) {
267          if (values[k] && !url.searchParams.has(k)) {
268            url.searchParams.set(k, values[k]);
269          }
270        });
271        a.setAttribute('href', url.pathname + url.search + url.hash);
272        a.setAttribute('data-survey-cookie-enriched', 'true');
273      } catch (e) {
274        // Bad href — leave it alone.
275      }
276    });
277  }
278  if (document.readyState === 'loading') {
279    document.addEventListener('DOMContentLoaded', enrich);
280  } else {
281    enrich();
282  }
283  var observer = new MutationObserver(enrich);
284  observer.observe(document.body || document.documentElement, {
285    childList: true,
286    subtree: true,
287  });
288})();
289
290// Skip tracking if team member cookie is set
291function hasTeamCookie() {
292  return document.cookie.split(';').some(function(c) {
293    return c.trim().startsWith('nutrient_team=true');
294  });
295}
296
297// Skip the custom wiring in automation-controlled browsers (Playwright,
298// Puppeteer, Selenium, headless Chrome) — internal agents and scrapers, never
299// real users. Mirrors the official Plausible script's own automation check,
300// including its documented window.__plausible escape hatch, which the funnel
301// canary sets in live mode to verify tracking end-to-end.
302function isAutomatedBrowser() {
303  return navigator.webdriver === true && !window.__plausible;
304}
305
306// HubSpot has one portal for every environment, so a CTA click from localhost,
307// a *.npreview.dev preview or staging is indistinguishable from a real one in
308// the Occurrences tab. See src/config/analytics-environment.ts for why this is
309// an allowlist. Plausible stays unguarded — it separates environments by site.
310var NUTRIENT_PRODUCTION_HOSTS = ["nutrient.io"];
311function isProductionHost() {
312  var host = window.location.hostname.toLowerCase();
313  return NUTRIENT_PRODUCTION_HOSTS.some(function (root) {
314    return host === root || host.slice(-(root.length + 1)) === '.' + root;
315  });
316}
317
318if (hasTeamCookie()) {
319  console.log('[Plausible] Tracking disabled for team member');
320} else if (isAutomatedBrowser()) {
321  console.log('[Plausible] Tracking disabled for automated browser');
322} else {
323
324window.plausible =
325  window.plausible ||
326  function (...args) {
327    (window.plausible.q = window.plausible.q || []).push(args);
328  };
329
330document.addEventListener("DOMContentLoaded", function () {
331  // Configuration for click tracking
332  // Each entry maps a selector to an event configuration
333  const clickTrackers = [
334    // Copy buttons tracking
335    // selector-check:ignore .copy is injected by Expressive Code at build time; never in source
336    {
337      selector: "div.copy",
338      eventName: "Copy Code",
339      gtmEvent: "click_copy",
340      idAttribute: "copy-click"
341    },
342    // CTA Buttons
343    {
344      // Prefix match: header components render ids via nid(), which suffixes
345      // "-<scope>" on dynamicHeaderFooter pages (e.g. /contact-sales). The
346      // marketing headers' own contact button uses id "main-nav-contact-cta",
347      // which is NOT a prefix of "main-nav-contact-sales-cta" (nor vice versa),
348      // so both patterns are needed; both map to "Click Contact Sales CTA".
349      // In-body CTAs opt in via data-analytics-cta (MKT-5648).
350      selector:
351        '[id^="main-nav-contact-sales-cta"], [id^="main-nav-contact-cta"], [data-analytics-cta="contact-sales"]',
352      eventName: "Click Contact Sales CTA",
353      gtmEvent: "click_contact_sales_cta",
354      idAttribute: "main-nav-contact-sales-cta",
355      // Also sent to HubSpot per Kelly's call on the MKT-5648 PR — a
356      // meaningful journey event despite firing on the site-wide nav too.
357      // trial stays Plausible/GTM-only (Kelly left it out).
358      hubspotEvent: "pe145134102_click_contact_sales_cta"
359    },
360    {
361      selector: '[id^="main-nav-trial-cta"], [data-analytics-cta="trial"]',
362      eventName: "Click Trial CTA",
363      gtmEvent: "click_trial_cta",
364      idAttribute: "main-nav-trial-cta"
365    },
366    // Data-extraction API page CTAs (MKT-5648). Both dashboard-bound; names
367    // coordinate with DWS-352/DWS-342 for end-to-end tracing. hubspotEvent
368    // additionally sends the click into the HubSpot contact journey.
369    // get-api-key now resolves in check-analytics-selectors.mjs via the
370    // quoted object-key form ("data-analytics-cta": "get-api-key" in
371    // ApiDataExtractionPlan.astro etc.) — no ignore needed.
372    {
373      selector: '[data-analytics-cta="get-api-key"]',
374      eventName: "Click Get API Key CTA",
375      gtmEvent: "click_get_api_key_cta",
376      idAttribute: "get-api-key-cta",
377      hubspotEvent: "pe145134102_click_get_api_key_cta"
378    },
379    // Data Extraction Credits 2026 promo page
380    // (/api/data-extraction-api/credits-promo/). Its own goal so promo claims
381    // do not inflate the Get API Key CTA metric, and so HubSpot can tell a
382    // promo claim from an ordinary API-key signup (PR #5413).
383    // selector-check:ignore claim-promo-credits is only ever set via prop-name
384    // forms (buttonAnalyticsCta on Hero, analyticsCta on FreeTierBanner) - no
385    // source file spreads the literal object key "data-analytics-cta":
386    // "claim-promo-credits". Remove this ignore if that literal usage appears.
387    {
388      selector: '[data-analytics-cta="claim-promo-credits"]',
389      eventName: "Click Claim Promo Credits CTA",
390      gtmEvent: "click_claim_promo_credits_cta",
391      idAttribute: "claim-promo-credits-cta",
392      hubspotEvent: "pe145134102_click_claim_promo_credits_cta"
393    },
394    // selector-check:ignore open-studio is only ever set via prop-name forms
395    // (buttonAnalyticsCta/secondButtonAnalyticsCta/analyticsCta on Hero,
396    // TextBlock, FreeTierBanner) — no source file spreads the literal object
397    // key "data-analytics-cta": "open-studio", so even the quoted object-key
398    // form the checker now understands can't verify it. Remove this ignore
399    // if a future page adds that literal object-key usage.
400    {
401      selector: '[data-analytics-cta="open-studio"]',
402      eventName: "Click Open Studio CTA",
403      gtmEvent: "click_open_studio_cta",
404      idAttribute: "open-studio-cta",
405      hubspotEvent: "pe145134102_click_open_studio_cta"
406    },
407    // AI-skills pages' "Install the skill" hero CTA (MKT-5648, Dasha's PR
408    // review). Scrolls to #install, so it measures intent-to-install, not an
409    // actual install. Page-scoped and low volume, so it also goes to HubSpot.
410    // selector-check:ignore install-skill is only ever set via the
411    // buttonAnalyticsCta prop-name form on the three /ai/skills/ heroes — no
412    // source file spreads the literal object key "data-analytics-cta":
413    // "install-skill". Remove this ignore if that literal usage appears.
414    {
415      selector: '[data-analytics-cta="install-skill"]',
416      eventName: "Click Install Skill CTA",
417      gtmEvent: "click_install_skill_cta",
418      idAttribute: "install-skill-cta",
419      hubspotEvent: "pe145134102_click_install_skill_cta"
420    },
421    // Demo hero CTAs on /sdk/ocr/ ("LAUNCH DEMO") and /document-ai/ ("See it
422    // in action") — MKT-5648, Dasha's second review round. Page-scoped and
423    // low volume, so it also goes to HubSpot.
424    // selector-check:ignore demo is only ever set via the buttonAnalyticsCta
425    // prop-name form on those two heroes — no source file spreads the literal
426    // object key "data-analytics-cta": "demo". Remove this ignore if that
427    // literal usage appears.
428    {
429      selector: '[data-analytics-cta="demo"]',
430      eventName: "Click Demo CTA",
431      gtmEvent: "click_demo_cta",
432      idAttribute: "demo-cta",
433      hubspotEvent: "pe145134102_click_demo_cta"
434    },
435    // /sdk/ai-assistant/ "GET STARTED NOW" hero CTA (→ getting-started guide)
436    // — MKT-5648, Dasha's second review round. Page-scoped and low volume, so
437    // it also goes to HubSpot. NOTE: trial deliberately carries no HubSpot
438    // event — Kelly left it out of scope (MKT-5648 PR thread).
439    // selector-check:ignore get-started is only ever set via the
440    // buttonAnalyticsCta prop-name form on the ai-assistant hero — no source
441    // file spreads the literal object key "data-analytics-cta":
442    // "get-started". Remove this ignore if that literal usage appears.
443    {
444      selector: '[data-analytics-cta="get-started"]',
445      eventName: "Click Get Started CTA",
446      gtmEvent: "click_get_started_cta",
447      idAttribute: "get-started-cta",
448      hubspotEvent: "pe145134102_click_get_started_cta"
449    },
450    {
451      selector: '[id^="main-nav-downloads-cta"]',
452      eventName: "Click Downloads CTA",
453      gtmEvent: "click_downloads_cta",
454      idAttribute: "main-nav-downloads-cta"
455    },
456    {
457      // MarkdownActions renders the copy button as a class, not an id
458      // (two variants: default "Copy page" and aiQuickStart "Copy"). Also track
459      // the dropdown's "Copy page" item, which triggers the same page-copy
460      // action — so the metric counts page copies however they're triggered,
461      // not just the main button. The dropdown item is scoped to
462      // .markdown-actions-option so a future data-action="copy" elsewhere can't
463      // silently join this metric. element_id falls back to idAttribute below.
464      selector: '.copy-page-btn, .markdown-actions-option[data-action="copy"]',
465      eventName: "Click Copy Page CTA",
466      gtmEvent: "click_copy_page_cta",
467      idAttribute: "copy-page-cta"
468    },
469    {
470      selector: '.markdown-actions-option[data-action="view-markdown"]',
471      eventName: "Click View Markdown CTA",
472      gtmEvent: "click_view_markdown_cta",
473      idAttribute: "view-markdown-cta"
474    },
475    // AI Chat CTAs — MarkdownActions dropdown items carry data-action attributes.
476    {
477      selector: '.markdown-actions-option[data-action="open-chatgpt"]',
478      eventName: "Click Open with ChatGPT CTA",
479      gtmEvent: "click_open_chatgpt_cta",
480      idAttribute: "open-chatgpt-cta"
481    },
482    {
483      selector: '.markdown-actions-option[data-action="open-claude"]',
484      eventName: "Click Open with Claude CTA",
485      gtmEvent: "click_open_claude_cta",
486      idAttribute: "open-claude-cta"
487    },
488    {
489      selector: '.markdown-actions-option[data-action="open-grok"]',
490      eventName: "Click Open with Grok CTA",
491      gtmEvent: "click_open_grok_cta",
492      idAttribute: "open-grok-cta"
493    },
494    // Survey CTAs — preferred: any element with [data-survey-cta]. Falls
495    // back to the legacy href pattern for the legal landing pages whose
496    // CTAs go through shared Hero/FeaturePictogramList/TextBlock components
497    // and don't carry the data attribute. See docs/reference-surveys-system.md.
498    {
499      selector: "[data-survey-cta], a[href*='/research-study/legal/survey/']",
500      eventName: "Click Survey CTA",
501      gtmEvent: "click_survey_cta",
502      idAttribute: "click-survey-cta"
503    }
504  ];
505
506  // Generic function to attach click tracking to an element.
507  // matchCount = how many elements the selector matched on the page. Class /
508  // attribute selectors (e.g. .copy-page-btn, [data-action="…"]) can match
509  // several elements — writing the same idAttribute onto all of them would
510  // create invalid duplicate ids, so only backfill the id when the selector
511  // matched exactly one element. The element_id prop still falls back to
512  // config.idAttribute in the click handler, so analytics is unchanged either way.
513  function attachClickTracking(element, config, matchCount) {
514    // Avoid adding multiple listeners
515    if (element.hasAttribute("data-plausible-tracked")) return;
516
517    element.setAttribute("data-plausible-tracked", "true");
518
519    // Set ID if provided in config and this is the only element it matched.
520    // Skip vocabulary-tagged elements: tagged in-body CTAs must not receive a
521    // nav-style backfilled id (e.g. "main-nav-contact-sales-cta") — their
522    // element_id already resolves from the data-analytics-cta attribute below.
523    if (
524      config.idAttribute &&
525      !element.id &&
526      matchCount === 1 &&
527      !element.hasAttribute("data-analytics-cta")
528    ) {
529      element.setAttribute("id", config.idAttribute);
530    }
531
532    element.addEventListener("click", function () {
533      const elementId =
534        element.id ||
535        element.getAttribute("data-analytics-cta") ||
536        config.idAttribute ||
537        "unknown";
538
539      // Track with Plausible
540      if (window.plausible) {
541        window.plausible(config.eventName, {
542          props: {
543            location: window.location.pathname,
544            referrer: document.referrer,
545            element_id: elementId
546          },
547        });
548      }
549
550      // Send to GTM reliably via dataLayer
551      if (window.dataLayer) {
552        window.dataLayer.push({
553          event: config.gtmEvent,
554          click_id: elementId,
555          location: window.location.pathname,
556          referrer: document.referrer
557        });
558      }
559
560      // Send selected CTAs to HubSpot as custom behavioral events so the
561      // click appears in the contact's journey (MKT-5648). _hsq is HubSpot's
562      // pre-load queue; the deferred hs script drains it on load. Guarded by
563      // the same team-cookie gate as everything else in this script, plus a
564      // production-host check the cookie cannot stand in for (see above).
565      if (config.hubspotEvent && isProductionHost()) {
566        window._hsq = window._hsq || [];
567        window._hsq.push([
568          "trackCustomBehavioralEvent",
569          {
570            name: config.hubspotEvent,
571            properties: {
572              location: window.location.pathname,
573              element_id: elementId
574            }
575          }
576        ]);
577      }
578    });
579  }
580
581  // Function to process existing and new elements
582  function processElements() {
583    clickTrackers.forEach(function(config) {
584      const elements = document.querySelectorAll(config.selector);
585      elements.forEach(function(element) {
586        attachClickTracking(element, config, elements.length);
587      });
588    });
589  }
590
591  // Use MutationObserver to handle dynamically added elements
592  const observer = new MutationObserver(function (mutations) {
593    // Page-wide counts, once per batch. A batch can carry thousands of added
594    // nodes, so counting per node meant scanning the whole document tens of 
595    // thousands of times. The DOM already includes every added node here.
596    const pageMatchCounts = clickTrackers.map(function (config) {
597      return document.querySelectorAll(config.selector).length;
598    });
599
600    mutations.forEach(function (mutation) {
601      mutation.addedNodes.forEach(function (node) {
602        if (node.nodeType === 1) {
603          // Element node - check all configured selectors
604          clickTrackers.forEach(function(config, configIndex) {
605            const pageMatchCount = pageMatchCounts[configIndex];
606            // Check if the node itself matches
607            if (node.matches && node.matches(config.selector)) {
608              attachClickTracking(node, config, pageMatchCount);
609            }
610            // Check for matching elements within the added node
611            if (node.querySelectorAll) {
612              const matchingElements = node.querySelectorAll(config.selector);
613              matchingElements.forEach(function(element) {
614                attachClickTracking(element, config, pageMatchCount);
615              });
616            }
617          });
618        }
619      });
620    });
621  });
622
623  // Track existing elements
624  processElements();
625
626  // Start observing for new elements
627  observer.observe(document.body, {
628    childList: true,
629    subtree: true,
630  });
631});
632
633// Generic "Link Click" tracking (WWW-1284) — a single delegated listener on
634// document fires one Plausible custom event for every qualifying link/button
635// click site-wide, with structured props for funnel + per-page click analysis.
636// Runs alongside the named clickTrackers above; an element with a named
637// tracker emits both its named event and this generic one (accepted).
638(function trackAllLinkClicks() {
639  function getElementLocation(el) {
640    if (el.closest("footer")) return "footer";
641    if (el.closest("nav, header")) return "nav";
642    var main = el.closest("main");
643    if (main) {
644      if (el.closest("[data-hero]")) return "hero";
645      var firstSection = main.querySelector("section");
646      if (firstSection && firstSection.contains(el)) return "hero";
647      return "main";
648    }
649    return "body";
650  }
651
652  function getClickText(el) {
653    var text = (el.innerText || el.textContent || "").replace(/\s+/g, " ").trim();
654    if (!text) {
655      text = el.getAttribute("aria-label") || el.getAttribute("title") || "";
656    }
657    return text.slice(0, 120);
658  }
659
660  function getDestinationType(el, isLink, rawHref) {
661    if (!isLink) return "";
662    if (/^mailto:/i.test(rawHref)) return "mailto";
663    if (/^tel:/i.test(rawHref)) return "tel";
664    try {
665      var url = new URL(el.href, window.location.origin);
666      return url.host === window.location.host ? "internal" : "external";
667    } catch (e) {
668      return "";
669    }
670  }
671
672  // A real <button> is a button; so is an anchor styled as a CTA button.
673  // Our design-system button primitives are the "btn" and "link-button"
674  // classes (plus role="button"), so a "Try for free" / "Contact sales"
675  // anchor reports click_type "button" even though it's an <a>.
676  function getClickType(el, isButton) {
677    if (isButton) return "button";
678    if (el.matches('[role="button"], .btn, .link-button')) return "button";
679    return "link";
680  }
681
682  document.addEventListener(
683    "click",
684    function (event) {
685      try {
686        var target = event.target;
687        if (!target || !target.closest) return;
688        var el = target.closest("a, button");
689        if (!el) return;
690
691        var isLink = el.tagName === "A";
692        var isButton = el.tagName === "BUTTON";
693
694        // Ignore disabled controls.
695        if (el.disabled || el.getAttribute("aria-disabled") === "true") return;
696
697        var rawHref = isLink ? el.getAttribute("href") || "" : "";
698
699        // Ignore links with no real destination.
700        if (isLink) {
701          if (!rawHref || rawHref === "#" || /^javascript:/i.test(rawHref)) return;
702        }
703
704        if (!window.plausible) return;
705
706        window.plausible("Link Click", {
707          props: {
708            location: window.location.pathname,
709            element_id: el.id || "",
710            element_location: getElementLocation(el),
711            click_text: getClickText(el),
712            click_url: isLink ? el.href : "",
713            click_type: getClickType(el, isButton),
714            destination_type: getDestinationType(el, isLink, rawHref),
715          },
716        });
717      } catch (e) {
718        // Tracking must never break a click.
719      }
720    },
721    true,
722  );
723})();
724}
724 // end hasTeamCookie else block
725</script>
725<!-- SoftwareSourceCode Schema for code samples --><!-- Schema script that will be populated after DOM is ready --> <!-- Data attributes for page-specific values (small, varies per page) --> <div id="code-samples-data" data-platform-slug="news" data-current-url="/blog/news/" hidden></div>
725<script type="module">var A="Android",L="DocuVieware",D=".NET",N="Python",k="Java",W="Node.js",T="VR and Spatial",j="Flutter",O="MAUI",M="Cordova",q="Ionic",I="Processor",U="Web Server-Backed";var B="Salesforce",F="SharePoint",R="Microsoft Teams",V="OneDrive",J={web:"Web","document-authoring":"Document Authoring",ios:"iOS",android:A,docuvieware:L,"document-engine":"Document Engine","dws-processor":"DWS Processor","dws-accessibility":"DWS Accessibility","dws-viewer":"DWS Viewer","ai-assistant":"AI Assistant","ai-document-processing":"AI Document Processing",dotnet:D,python:N,java:k,nodejs:W,visionos:T,"mac-catalyst":"Mac Catalyst","document-converter":"Document Converter","document-editor":"Document Editor","salesforce-documents":"Nutrient Documents for Salesforce","document-searchability":"Document Searchability","document-automation-server":"Document Automation Server","workflow-automation":"Workflow Automation","react-native":"React Native",flutter:j,maui:O,"dotnet-for-ios":".NET for iOS","dotnet-for-android":".NET for Android",cordova:M,ionic:q,processor:I,server:U,uwp:"UWP","xamarin-ios":"Xamarin.iOS","xamarin-android":"Xamarin.Android",salesforce:B,sharepoint:F,teams:R,onedrive:V},P=J;function K(s,C){if(!s||s.length===0)return null;const c=new Map;for(const t of s){const o=t.programmingLanguage||"text",i=c.get(o);i?i.push(t):c.set(o,[t])}const v=t=>{const o={"@type":"SoftwareSourceCode",name:t.name||`Code example in ${t.programmingLanguage}`,programmingLanguage:t.programmingLanguage,codeSampleType:t.codeSampleType||"inline",text:t.text};return t.runtimePlatform&&(o.runtimePlatform=t.runtimePlatform),o},d=[];for(const[t,o]of c)o.length===1?d.push(v(o[0])):d.push({"@type":"SoftwareSourceCode",name:`Code examples in ${t}`,programmingLanguage:t,hasPart:o.map(v)});return{"@context":"https://schema.org","@graph":[{"@type":"SoftwareSourceCode",name:"Code samples",programmingLanguage:[...c.keys()],isPartOf:{"@type":"WebPage","@id":C},hasPart:d}]}}function w(){const s=document.getElementById("code-samples-data");if(!s)return;const C=s.dataset.platformSlug||"",c=s.dataset.currentUrl||"",v=P[C]||null,d=document.querySelectorAll("pre[data-language]");if(d.length===0)return;const t=[];if(d.forEach(o=>{const i=o.getAttribute("data-language")||"text",l=o.querySelector("code");if(!l)return;let S=null,y=null,f=o.parentElement;for(;f&&f!==document.body;){const e=f.getAttribute("data-selector-content");if(e){y=e;const n=e.split("-");for(let r=n.length;r>0;r--){for(let a=0;a<=n.length-r;a++){const h=n.slice(a,a+r).join("-");if(P[h]){S=P[h];break}}if(S)break}break}f=f.parentElement}let m=S||v;if(!m&&y){const e=y.split("-"),n=["mobile","server","desktop","cloud","api"];let r=e[0];n.includes(e[0])&&e.length>1&&(r=e[1]),m=r.charAt(0).toUpperCase()+r.slice(1)}let p;const x=l.querySelectorAll(".ec-line");if(x.length>0){const e=[];x.forEach(n=>{const r=n.querySelector(".code");if(r){const a=r.textContent||"";e.push(a)}else if(n.querySelector(".line")){const a=n.cloneNode(!0),h=a.querySelector(".line");h&&h.remove(),e.push(a.textContent||"")}else e.push(n.textContent||"")}),p=e.join(`
726`).replace(/\n{3,}/g,`
727
728`)}else p=l.textContent||"";if(p.length===0||p.length>5e3)return;let b="",g=o.previousElementSibling;for(let e=0;e<5&&g;e++){if(g instanceof HTMLElement){const n=g.tagName.toLowerCase();if(["h1","h2","h3","h4","h5","h6"].includes(n)){b=g.textContent||"";break}}g=g.previousElementSibling}let u;if(b)u=b.trim(),u.length>100&&(u=u.substring(0,97)+"...");else{const e=["Code example"];m&&e.push("for",m),e.push("in",i),u=e.join(" ")}const E={"@type":"SoftwareSourceCode",name:u,description:u,programmingLanguage:i,codeSampleType:"inline",text:p.trim(),isPartOf:{"@type":"WebPage","@id":window.location.origin+c}};m&&(E.runtimePlatform=m),t.push(E)}),t.length>0){const o=document.getElementById("code-samples-schema");if(o){const i=K(t,window.location.origin+c);if(!i)return;let l=JSON.stringify(i,null,2);l=l.split("<").join("\\u003c").split(">").join("\\u003e"),o.textContent=l}}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",w):w();document.addEventListener("astro:page-load",w);</script>
728<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://www.nutrient.io/#organization","name":"Nutrient","alternateName":["Nutrient GmbH","PSPDFKit"],"url":"https://www.nutrient.io","logo":{"@type":"ImageObject","url":"https://www.nutrient.io/android-chrome-512x512.png","width":512,"height":512,"caption":"Nutrient Logo"},"image":["https://www.nutrient.io/android-chrome-512x512.png","https://www.nutrient.io/_astro/nutrient-logo.CJxiofUP.svg"],"description":"Nutrient provides best-in-class PDF SDKs for viewing, editing, and eSigning documents. Build with SDKs that quickly and seamlessly integrate into your web, server, and mobile apps.","foundingDate":"2011","telephone":"+1-888-356-4219","location":{"@type":"Place","@id":"https://www.nutrient.io/#headquarters","name":"Nutrient head office","address":{"@type":"PostalAddress","streetAddress":"4509 Creedmoor Road, Suite 503","addressLocality":"Raleigh","addressRegion":"NC","postalCode":"27612","addressCountry":"US"},"geo":{"@type":"GeoCoordinates","latitude":35.8454,"longitude":-78.7042}},"sameAs":["https://www.linkedin.com/company/nutrientdocs","https://x.com/nutrientdocs","https://www.facebook.com/nutrientdocs/","https://www.youtube.com/channel/UCQFsRxB1vTDJ5N1NaNsZNrw?sub_confirmation=1","https://github.com/PSPDFKit","https://discord.gg/Z754Pfb8bD"],"contactPoint":[{"@type":"ContactPoint","contactType":"sales","url":"https://www.nutrient.io/contact-sales/"},{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","url":"https://support.nutrient.io/hc/en-us/requests/new"}]}</script>
728<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://www.nutrient.io/#website","url":"https://www.nutrient.io","name":"Nutrient","description":"The #1 PDF SDK Library for Viewing, Editing, eSigning and more","publisher":{"@id":"https://www.nutrient.io/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.nutrient.io/search/?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
728<style>.content-wrapper.blog-wrapper{background-color:#0000;flex-direction:column;align-items:stretch;width:100%;height:100%;display:flex}.no-posts-message{text-align:center;color:var(--text-neutral-primary);width:100%;height:100%;grid-column:span 4/span 4;justify-content:center;align-items:center;font-size:1.125rem;font-weight:400;line-height:1.75rem}.content-wrapper.blog-article{background-color:#0000;position:relative}.content-wrapper.blog-article .content-main{max-width:100%;margin:0 auto;padding:4rem 0}@media (min-width:1280px){.content-wrapper.blog-article .content-main{max-width:var(--content-blog);margin-left:0;margin-right:auto}}.content-wrapper.blog-article .right-aside .toc-content{border-radius:1rem;padding-top:.5rem}@media (min-width:1280px){.content-wrapper.blog-article .right-aside .toc-content{padding-top:4rem}}.content-wrapper.blog-article .right-aside .toc-container{width:100%}.content-wrapper.blog-article .article-header-top{justify-content:space-between;align-self:stretch;align-items:center;gap:.75rem;display:flex}.content-wrapper.blog-article .article-title{letter-spacing:-.96px;color:var(--text-neutral-primary);margin-top:2rem;margin-bottom:2rem;font-size:2.5rem;font-weight:400}@media (min-width:768px){.content-wrapper.blog-article .article-title{font-size:3rem;line-height:1}}.content-wrapper.blog-article .article-intro{color:var(--text-neutral-primary);margin-bottom:2rem;font-size:1.125rem;line-height:160%}.content-wrapper.blog-article .article-tags{flex-wrap:wrap;gap:.5rem;display:flex}.content-wrapper.blog-article .authors-box{border-color:#322f2f;border-top-width:1px;border-bottom-width:1px;border-color:var(--border-neutral-default-primary);flex-direction:column;align-items:flex-start;gap:2.5rem;margin-top:3rem;padding-top:1.5rem;padding-bottom:3rem;display:flex}.content-wrapper.blog-article .authors-box .author-box-wrapper{flex-direction:column;align-items:flex-start;gap:1.5rem;width:100%;display:flex}@media (min-width:768px){.content-wrapper.blog-article .authors-box .author-box-wrapper{flex-direction:row}}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-image{border-radius:1rem;width:6rem;height:6rem;margin:0}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info{flex-direction:column;gap:1.5rem;width:100%;display:flex}@media (min-width:768px){.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info{flex-direction:row}}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview{flex:1}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-name{letter-spacing:-.48px;margin:0;font-size:1.5rem;font-weight:400;line-height:2rem}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-role{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-secondary);margin:0;font-size:.75rem;font-weight:400;line-height:130%}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-social{margin-top:1rem}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-social .author-social-list{gap:.25rem;display:flex}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-social .author-social-list a{justify-content:center;align-items:center;width:2.5rem;height:2.5rem;display:flex}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-info .author-overview .author-social .author-social-list a svg{width:1.5rem;height:1.5rem}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-bio{flex:1}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-bio p{color:#c2bdae;margin:0;padding:0;font-size:.875rem}@media (min-width:992px){.content-wrapper.blog-article .authors-box .author-box-wrapper .author-bio p{font-size:1rem}}.content-wrapper.blog-article .authors-box .author-box-wrapper .author-bio p{color:var(--text-neutral-secondary)}.article-meta{border-color:#322f2f;border-top-width:1px;border-bottom-width:1px;border-color:var(--border-neutral-default-primary);flex-wrap:wrap;justify-content:space-between;align-self:stretch;align-items:center;gap:.75rem;margin-bottom:0;padding:.5rem 0;display:flex}@media (min-width:1280px){.article-meta{margin-bottom:2.5rem}}.article-meta .authors-wrapper{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.article-meta .authors-wrapper .author-info{align-items:center;gap:.5rem;font-style:normal;display:flex}.article-meta .authors-wrapper .author-info img{border-radius:9999px;width:1.5rem;height:1.5rem}.article-meta .authors-wrapper .author-info .author-name{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;margin:0;font-size:.75rem;font-weight:400;line-height:130%}.article-meta .article-date{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);font-size:.75rem;font-weight:400;line-height:130%}.article-preview-wrapper{flex-direction:column;gap:4rem;display:flex}.article-preview-wrapper .article-preview-item{flex-direction:column;display:flex}.article-preview-wrapper .article-preview-item .article-preview-content{flex-direction:column;align-items:center;gap:1.5rem;display:flex}@media (min-width:992px){.article-preview-wrapper .article-preview-item .article-preview-content{flex-direction:row}}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-meta{align-items:center;gap:.5rem;display:flex}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media{
728width:100%}@media (min-width:992px){.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media{width:50%}}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media img{aspect-ratio:2;-o-object-fit:cover;object-fit:cover;border-radius:1rem;width:100%;height:auto}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media:after{opacity:0;content:"";background-color:#0000;width:100%;height:100%;transition-property:opacity;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;top:0;left:0}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media:hover{overflow:hidden}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-media:hover:after{opacity:1;background-color:#1a141433;background-color:var(--bg-overlay-dark-secondary)}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-text{flex-direction:column;flex:1;gap:1rem;width:100%;margin:0;padding:0;display:flex;position:relative}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-text .article-preview-tags{flex-wrap:wrap;gap:.5rem;display:flex}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-categories-wrapper{align-items:center;gap:.75rem;display:flex}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-categories-wrapper .article-preview-categories{flex-flow:wrap;align-items:center;gap:.25rem;padding:0;display:flex}.article-preview-wrapper .article-preview-item .article-preview-content .article-preview-categories-wrapper .article-preview-categories li:before{display:none}.article-preview-wrapper .article-preview-item:hover .article-preview-media:after{opacity:1!important;background-color:#1a141433!important;background-color:var(--bg-overlay-dark-secondary)!important}.article-preview-wrapper .article-preview-item:focus-visible .article-preview-media:after,.article-preview-wrapper .article-preview-item:focus .article-preview-media:after{opacity:1!important;background-color:#fff3!important;background-color:var(--bg-overlay-light-secondary)!important}.article-preview-wrapper .label{text-transform:uppercase;letter-spacing:.24px;font-size:.75rem;line-height:130%}.article-preview-wrapper .post-title{text-wrap:balance;overflow-wrap:normal;word-break:normal;font-size:1.875rem;font-weight:400;line-height:100%}.article-preview-wrapper .post-title a{overflow-wrap:normal;word-break:normal;text-decoration-line:none}.article-preview-wrapper .post-title a:hover{text-decoration-line:none}.article-preview-wrapper p{margin:0;padding:0;font-size:1rem;line-height:120%}.latest-posts-wrapper,.blog-post-list{flex-direction:column;display:flex}.latest-posts-wrapper .article-preview-group,.blog-post-list .article-preview-group{flex-flow:wrap;gap:.5rem;margin-bottom:1.5rem;display:flex}.latest-posts-wrapper .author-info,.blog-post-list .author-info{color:var(--text-neutral-primary);width:-moz-fit-content;width:fit-content;max-width:100%;min-height:2rem;background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);border-radius:.5rem;align-items:center;gap:.5rem;padding:0 .5rem;font-style:normal;display:flex}.latest-posts-wrapper .author-info img,.blog-post-list .author-info img{border-radius:9999px;flex-shrink:0;width:1.5rem;height:1.5rem}.latest-posts-wrapper .author-info .author-name,.blog-post-list .author-info .author-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);font-size:.75rem;font-weight:400;line-height:130%;overflow:hidden}.nut-docs p{font-family:var(--theme-font-sans), system-ui, sans-serif;color:var(--text-neutral-primary);font-size:1rem;line-height:150%}.nut-docs strong{font-weight:490}.nut-docs ul li,.nut-docs ol li{color:var(--text-neutral-secondary)}.nut-docs ul li a,.nut-docs ol li a,.nut-docs ul li code,.nut-docs ol li code{color:inherit}.nut-docs blockquote h1,.nut-docs blockquote h2,.nut-docs blockquote h3,.nut-docs blockquote h4,.nut-docs blockquote h5,.nut-docs blockquote h6{margin:0}.nut-docs blockquote p{margin-bottom:.5rem}.nut-docs blockquote p:last-child{margin-bottom:0}.nut-docs .alert h1,.nut-docs .alert h2,.nut-docs .alert h3,.nut-docs .alert h4,.nut-docs .alert h5,.nut-docs .alert h6,.nut-docs .alert p,.nut-docs .alert a{color:var(--text-neutral-primary)}.nut-docs table thead th,.nut-docs table tbody td{color:var(--text-neutral-secondary);border-color:#322f2f;border-color:var(--border-neutral-default-primary)}.nut-docs table tbody td a{color:inherit}.nut-docs img{border-radius:1rem}
729</style><link rel="stylesheet" href="/_astro/global._BdQ0OwB.css"><link rel="stylesheet" href="/_astro/BlogPostPreview._K85-2Jm.css"><style>.show-more-container{justify-content:center;align-items:center;gap:1rem;margin-top:4rem;display:flex}.show-more-container .nothing-left-message{text-align:center}.show-more-container .nothing-left-message p{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-secondary);padding:0;font-size:.75rem;line-height:100%}
730</style><link rel="stylesheet" href="/_astro/Layout.BMyPAOup.css"><style>.modal-container{z-index:100;background-color:#1a1414b3;background-color:var(--bg-overlay-dark-primary);justify-content:center;align-items:center;padding:1rem;transition-property:opacity;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:flex;position:fixed;inset:0}.modal-container.modal-open{opacity:1}.modal-container.modal-closed{display:none}.modal-container .modal-content{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
730--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow);background-color:#fff;border-radius:.5rem;transition-property:transform;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.modal-container .modal-content.modal-content-open{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.modal-container .modal-content.modal-content-closed{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.modal-container .modal-content .iframe-container{width:100%;height:100%;position:relative;padding-bottom:0!important}.modal-container .modal-content .iframe-container iframe{border-style:none;border-radius:.5rem;width:100%;height:100%;position:absolute;top:0;left:0}.modal-container .modal-content .modal-slot{width:100%;height:100%}.modal-container .modal-close-button{z-index:10;--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1));--tw-shadow:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
730--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow);background-color:#fff;border-radius:9999px;padding:.5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;top:1rem;right:1rem}.modal-container .modal-close-button:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.modal-container .modal-close-button .modal-close-icon{width:1.5rem;height:1.5rem}
731.featured-post{text-wrap:balance}.featured-post a{text-wrap:balance;overflow-wrap:normal;word-break:normal;text-decoration-line:none}.featured-post a:hover{text-decoration-line:none}.featured-post .featured-post-content{flex-direction:column;order:2;grid-column:span 12/span 12;justify-content:space-between;gap:3rem;height:100%;display:flex}@media (min-width:992px){.featured-post .featured-post-content{order:1;grid-column:span 6/span 6}}@media (min-width:1280px){.featured-post .featured-post-content{grid-column:span 4/span 4}}.featured-post .featured-post-content .post-description{flex-direction:column;gap:1.5rem;display:flex}.featured-post .featured-post-content .post-description p{color:var(--text-neutral-secondary);margin:0;font-size:1rem;line-height:1.25rem}.featured-post .featured-post-content .label{text-transform:uppercase;letter-spacing:.24px;font-size:.75rem;line-height:130%}.featured-post .featured-post-content .post-meta{flex-direction:column;gap:1.5rem;display:flex}.featured-post .featured-post-content .post-meta .article-meta{border-top-width:0;border-bottom-width:0;margin:0;padding:0}.featured-post .featured-post-content .post-meta .author-info{flex-flow:wrap;gap:.5rem;display:flex}.featured-post .featured-post-content .post-meta .author-info-item{color:var(--text-neutral-primary);width:-moz-fit-content;width:fit-content;max-width:max-content;min-height:2rem;background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);border-radius:.5rem;align-items:center;gap:.5rem;padding:0 .5rem;font-style:normal;display:flex}.featured-post .featured-post-content .post-meta .author-info-item img{border-radius:9999px;width:1.5rem;height:1.5rem}.featured-post .featured-post-content .post-meta .author-info-item .author-name{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);margin:0;font-size:.75rem;font-weight:400;line-height:130%}.featured-post .featured-post-content .post-meta .post-title{text-wrap:balance;overflow-wrap:normal;word-break:normal;font-size:3rem;font-weight:400;line-height:100%}.featured-post .featured-post-content .post-meta .featured-post-label{flex-flow:wrap;gap:.5rem;display:flex}.featured-post .featured-post-media{order:1;grid-column:span 12/span 12;position:relative;overflow:hidden}@media (min-width:992px){.featured-post .featured-post-media{order:2;grid-column:span 6/span 6}}@media (min-width:1280px){.featured-post .featured-post-media{grid-column:span 7/span 7}}.featured-post .featured-post-media:after{opacity:0;content:"";background-color:#0000;width:100%;height:100%;transition-property:opacity;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;top:0;left:0}.featured-post .featured-post-media:hover{overflow:hidden}.featured-post .featured-post-media:hover:after{opacity:1;background-color:#1a141433;background-color:var(--bg-overlay-dark-secondary);border-radius:1.5rem}.featured-post-spotlight{padding-top:4rem;padding-bottom:4rem;overflow:hidden}.featured-post-spotlight .featured-post-spotlight-wrapper{grid-template-columns:repeat(1,minmax(0,1fr));gap:3rem;display:grid}@media (min-width:768px){.featured-post-spotlight .featured-post-spotlight-wrapper{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.featured-post-spotlight .featured-post-spotlight-wrapper{grid-template-columns:repeat(4,minmax(0,1fr))}}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post{width:100%;display:flex;position:relative}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post:before{--tw-content:"";content:var(--tw-content);background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);width:100%;height:1px;position:absolute;top:-1.5rem;left:0}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post:first-child:before{display:none}@media (min-width:768px){.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post:before{--tw-content:"";content:var(--tw-content);background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);width:1px;height:100%;position:absolute;top:0;left:-1.5rem}}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper{flex-direction:row;justify-content:space-between;gap:1.5rem;width:100%;text-decoration-line:none;display:flex}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper:hover{text-decoration-line:none}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper:hover .
731spotlight-post-media:after{opacity:1;background-color:#1a141433;background-color:var(--bg-overlay-dark-secondary)}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper:hover .spotlight-post-title{text-wrap:balance;overflow-wrap:normal;word-break:normal;color:var(--text-accent-default)}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-media{flex-shrink:0;width:6rem;height:-moz-fit-content;height:fit-content;position:relative;overflow:hidden}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-media img{aspect-ratio:1;-o-object-fit:cover;object-fit:cover;border-radius:1rem;width:100%;height:auto}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-media:after{opacity:0;content:"";background-color:#0000;border-radius:1rem;width:100%;height:100%;transition-property:opacity;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;top:0;left:0}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-content{flex-direction:column;gap:.75rem;display:flex}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-content .author-info{border-radius:.5rem;align-items:center;gap:.5rem;width:-moz-fit-content;width:fit-content;max-width:max-content;font-style:normal;display:flex}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-content .author-info img{border-radius:9999px;width:1.5rem;height:1.5rem}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-content .author-info .author-name{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);margin:0;font-size:.75rem;font-weight:400;line-height:130%}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post .spotlight-post-wrapper .spotlight-post-content .spotlight-post-title{text-wrap:balance;overflow-wrap:normal;word-break:normal;font-size:1.25rem;font-weight:400;line-height:120%;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.featured-post-spotlight .featured-post-spotlight-wrapper .spotlight-post-separator{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);flex-direction:column;width:1px;min-width:1px;display:flex}.featured-post-media.external-link .external-link-badge,.spotlight-post-media.external-link .external-link-badge{z-index:10;background-color:#ec8fff;background-color:var(--bg-accent-default);border-radius:.5rem;justify-content:center;align-items:center;width:2.5rem;height:2.5rem;display:flex;position:absolute;bottom:.75rem;left:.75rem}.featured-post-media.external-link .external-link-badge svg,.spotlight-post-media.external-link .external-link-badge svg{width:1.5rem;height:1.5rem;color:var(--icon-on-accent-on-default)}
732.breadcrumbs{margin:0}.breadcrumbs ol{flex-flow:wrap;align-items:center;gap:0;margin:0;padding:0;list-style-type:none;display:flex}.breadcrumbs li{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;align-items:center;font-size:.75rem;line-height:1rem;text-decoration-line:none;display:flex;position:relative}.breadcrumbs li:before,.breadcrumbs li:not(:last-child):after{display:none}.breadcrumbs li a{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);font-size:.75rem;line-height:1rem;text-decoration-line:none;position:relative}.breadcrumbs li a:hover{color:var(--text-neutral-secondary)}.breadcrumbs a{text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.breadcrumbs a:hover{text-decoration-line:none}.breadcrumbs [aria-current=page]{color:var(--text-neutral-tertiary);background-color:#0000;font-weight:500}.breadcrumb-icon{width:1.5rem;height:1.5rem;margin-left:.5rem}
733</style><link rel="stylesheet" href="/_astro/Section.CgluxyYq.css"><style>.blog-filter-dropdown-base{z-index:50;background-color:#1a1414;background-color:var(--bg-neutral-default-primary);border-width:1px;border-color:#322f2f;border-color:var(--border-neutral-default-primary);border-radius:.5rem;width:100%;max-height:20rem;margin-top:.25rem;position:absolute;overflow-y:auto}.blog-filter-dropdown-base.select-dropdown-hidden{display:none}.blog-filter-dropdown-base::-webkit-scrollbar{border-radius:9999px;width:.5rem}.blog-filter-dropdown-base::-webkit-scrollbar-track{background:0 0;border-radius:6px;margin:6px}.blog-filter-dropdown-base::-webkit-scrollbar-thumb{background-color:#c2bdae;background-color:var(--bg-static-light-subtle);background-clip:content-box;border:2px solid #0000;border-radius:6px}.blog-filter-dropdown-base::-webkit-scrollbar-thumb:hover{background-color:#fff;background-color:var(--bg-neutral-alternate-primary)}.blog-filter-option-base{cursor:pointer;color:var(--text-neutral-primary);align-items:center;padding:.75rem 1.5rem;font-size:.875rem;font-weight:400;line-height:1.25rem;display:flex}.blog-filter-option-base:hover{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary)}.blog-filter-option-base:focus-visible{outline-offset:2px;box-shadow:0 0 0 2px var(--border-state-focused,#de9dcc) inset, 0 0 0 3px var(--border-state-inset,#fff) inset;outline:2px solid #0000}.blog-filters{grid-column:span 1/span 1}@media (min-width:992px){.blog-filters{grid-column:span 8/span 8}}@media (min-width:1440px){.blog-filters{grid-column:span 9/span 9}}.blog-filters .blog-filters-container{width:100%;display:flex}.blog-filters .blog-filters-container .blog-filters-wrapper{grid-auto-columns:100%;justify-content:flex-start;align-items:flex-start;gap:.5rem;width:100%;display:grid}.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-2{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-3{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-4{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-5{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-5{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-6{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-6{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper.features-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (min-width:768px){.blog-filters .blog-filters-container .blog-filters-wrapper{flex-direction:row}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper{grid-auto-columns:50%;grid-auto-flow:column;justify-content:flex-end}}@media (min-width:1280px){.blog-filters .blog-filters-container .blog-filters-wrapper{grid-auto-columns:33.33%;justify-content:flex-end}}@media (min-width:992px){.blog-filters .blog-filters-container .blog-filters-wrapper:has(.browse-tags-button){grid-auto-columns:50% max-content}}@media (min-width:1280px){.blog-filters .blog-filters-container .blog-filters-wrapper:has(.browse-tags-button){grid-auto-columns:33.33% max-content}}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group{align-items:center;height:100%;display:flex;position:relative}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select{background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-radius:.5rem;position:relative}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper{width:100%}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-hidden{display:none}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-container{cursor:pointer;background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-style:none;border-radius:.5rem;justify-content:space-between;align-items:center;width:100%;min-height:2.5rem;padding:.5rem 1.5rem;display:flex}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-container[aria-expanded=true]{box-shadow:0px 0px 0px 2px var(--border-state-focused) inset, 0px 0px 0px 3px var(--border-state-inset) inset}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-container:focus-visible{outline-offset:2px;box-shadow:0px 0px 0px 2px var(--border-state-focused) inset, 0px 0px 0px 3px var(--border-state-inset) inset;outline:2px solid #0000}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-container .category-selected-text{color:var(--text-neutral-primary);flex:1;font-size:.875rem;font-weight:400;line-height:1.25rem}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-container .category-toggle-icon{color:var(--icon-neutral-primary) ;margin-left:.5rem}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group.category-select .category-select-wrapper .category-select-dropdown{left:0}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-filter-select{z-index:10;cursor:pointer;text-indent:0;color:var(--text-neutral-primary);width:100%;max-height:2.5rem;appearance:none;background-color:#0000;background-image:none;border-style:none;border-radius:.5rem;padding:.5rem 2rem .5rem 1.5rem;font-size:.875rem;font-weight:400;line-height:1.25rem}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-filter-select:focus,.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-filter-select:focus-visible{outline-offset:2px;box-shadow:0px 0px 0px 2px var(--border-state-focused) inset, 0px 0px 0px 3px var(--border-state-inset) inset;outline:2px solid #0000}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-filter-select::-ms-expand{display:none}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .nav-arrow-select{z-index:0;color:var(--icon-neutral-primary);cursor:pointer;position:absolute;right:.25rem}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .browse-tags-button{white-space:nowrap;flex-wrap:nowrap;width:auto}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper{width:100%}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container{background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-style:none;border-radius:.5rem;flex-wrap:wrap;align-items:center;width:100%;min-height:2.5rem;display:flex}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container.active{box-shadow:0px 0px 0px 2px var(--border-state-focused) inset, 0px 0px 0px 3px var(--border-state-inset) inset}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container{align-items:center;gap:.25rem;width:100%;padding:.5rem 2rem .5rem 1.5rem;display:flex;container-type:inline-size}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container .tag-multi-select-input{cursor:pointer;padding-top:0;padding-bottom:0;outline-offset:2px;background-color:#0000;border-style:none;outline:2px solid #0000;flex:1;width:100%;padding-inline-start:0;font-size:.875rem;font-weight:400;line-height:1.25rem}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container .tag-multi-select-input::placeholder{color:var(--text-neutral-tertiary)}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container .selected-tag{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;letter-spacing:.24px;color:var(--text-neutral-alternate);background-color:#ec8fff;background-color:var(--bg-accent-default);border-radius:9999px;align-items:center;padding-left:.75rem;padding-right:.25rem;font-size:.75rem;font-weight:400;line-height:130%;display:flex}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container .selected-tag .selected-tag-remove{cursor:pointer}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-select-container .tag-multi-select-input-container .selected-tag .selected-tag-remove:focus-within{outline-offset:2px;box-shadow:0px 0px 0px 2px var(--border-state-focused) inset;outline:2px solid #0000}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown{gap:.5rem;right:0}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option{text-overflow:ellipsis;white-space:nowrap;text-wrap:wrap;gap:1.5rem;overflow:hidden}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option .tag-option-checkbox{background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-width:1px;border-color:#322f2f;border-color:var(--border-neutral-default-primary);border-radius:.5rem;justify-content:center;align-items:center;width:1.5rem;min-width:1.5rem;height:1.5rem;display:flex}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option .tag-option-checkbox .tag-option-check-icon{color:var(--text-neutral-alternate);opacity:0;transition:opacity .2s ease-in-out}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option.selected{color:var(--text-neutral-primar
733y);background-color:#1a1414;background-color:var(--bg-neutral-default-primary)}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option.selected:hover{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary)}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option.selected .tag-option-checkbox{background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-color:#fff;border-color:var(--border-neutral-alternate-primary)}.blog-filters .blog-filters-container .blog-filters-wrapper .blog-filter-group .blog-select-tag-wrapper .tag-multi-select-dropdown .tag-multi-select-option.selected .tag-option-checkbox .tag-option-check-icon{opacity:1}.blog-filters .blog-filters-container .multi-select-hidden,.hidden-event{display:none}.blog-header{background-color:#0000;grid-template-columns:repeat(1,minmax(0,1fr));justify-content:space-between;align-items:center;gap:.75rem;padding-top:4rem;padding-bottom:4rem;display:grid;position:relative}@media (min-width:992px){.blog-header{grid-template-columns:repeat(12,minmax(0,1fr))}}.blog-header .blog-header-title{flex-direction:column;grid-column:span 1/span 1;align-items:flex-start;gap:.75rem;display:flex}@media (min-width:992px){.blog-header .blog-header-title{grid-column:span 4/span 4}}@media (min-width:1440px){.blog-header .blog-header-title{grid-column:span 3/span 3}}.blog-header .blog-header-title h1{color:var(--text-neutral-primary);font-size:1.5rem;font-weight:400;line-height:100%}
734.text-block{flex-direction:column;gap:1.5rem;max-width:100%;display:flex}.text-block .text-block-icon{color:var(--icon-accent-default);display:flex}.text-block .text-block-container{flex-direction:column;display:flex}.text-block .text-block-container .text-block-headline-container{flex-direction:column;gap:.75rem;display:flex}.text-block .text-block-container .text-block-headline-container .text-block-supertitle{color:var(--text-neutral-primary);margin:0;padding:0}.text-block .text-block-container .text-block-headline-container .text-block-title{color:var(--text-neutral-primary)}.text-block .text-block-container .text-block-headline-container .text-block-title a{color:var(--text-neutral-primary);font-weight:400;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.text-block .text-block-container .text-block-headline-container .text-block-title a:hover{color:var(--text-neutral-secondary)}.text-block .text-block-container .text-block-headline-container .text-block-title a:focus-visible{outline-offset:2px;box-shadow:0 0 0 2px var(--border-state-focused,#de9dcc) inset, 0 0 0 3px var(--border-state-inset,#fff) inset;border-radius:.5rem;outline:2px solid #0000}.text-block .text-block-content{flex-direction:column;gap:1.5rem;display:flex}.text-block .text-block-content .text-block-description{color:var(--text-neutral-secondary);margin:0;padding:0}.text-block .text-block-content .text-block-description a{color:inherit}.text-block .text-block-content .text-block-description a:hover{color:var(--text-accent-default)}.text-block .text-block-content .text-block-actions{flex-wrap:wrap;gap:.25rem;display:flex}.text-block.text-block-on-accent .text-block-icon{color:var(--icon-on-accent-on-default)}.text-block.text-block-on-accent .text-block-headline-container .text-block-supertitle,.text-block.text-block-on-accent .text-block-headline-container .text-block-title,.text-block.text-block-on-accent .text-block-content .text-block-description{color:var(--text-on-accent-on-default)}.text-block.text-block-on-accent-alternate .text-block-icon{color:var(--icon-on-accent-on-alternate)}.text-block.text-block-on-accent-alternate .text-block-headline-container .text-block-supertitle,.text-block.text-block-on-accent-alternate .text-block-headline-container .text-block-title,.text-block.text-block-on-accent-alternate .text-block-content .text-block-description{color:var(--text-on-accent-on-alternate)}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h1:where(.text-block-title){letter-spacing:-.02em;font-size:clamp(3rem,2.0458rem + 4.0712vw,4rem);font-weight:370;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h1:where(.text-block-title){font-size:clamp(4rem,10.7143vw - 1.1429rem,5.5rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h1:where(.text-block-title){font-size:5.5rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h1:where(.text-block-title){font-size:5.5rem}}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h2:where(.text-block-title){letter-spacing:-.02em;font-size:clamp(2rem,1.0458rem + 4.0712vw,3rem);font-weight:370;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h2:where(.text-block-title){font-size:clamp(3rem,10.7143vw - 2.1429rem,4.5rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h2:where(.text-block-title){font-size:4.5rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h2:where(.text-block-title){font-size:4.5rem}}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h3:where(.text-block-title){letter-spacing:-.02em;font-size:clamp(1.75rem,1.5115rem + 1.0178vw,2rem);font-weight:370;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h3:where(.text-block-title){font-size:clamp(2rem,14.2857vw - 4.8571rem,4rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h3:where(.text-block-title){font-size:4rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h3:where(.text-block-title){font-size:4rem}}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h4:where(.text-block-title){letter-spacing:-.02em;font-size:clamp(1.5rem,1.2615rem + 1.0178vw,1.75rem);font-weight:400;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h4:where(.text-block-title){font-size:clamp(1.75rem,8.9286vw - 2.5357rem,3rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h4:where(.text-block-title){font-size:3rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h4:where(.text-block-title){font-size:3rem}}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h5:where(.text-block-title){letter-spacing:-.02em;font-size:clamp(1.25rem,1.0115rem + 1.0178vw,1.5rem);font-weight:440;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h5:where(.text-block-title){font-size:clamp(1.5rem,3.5714vw - .2143rem,2rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h5:where(.text-block-title){font-size:2rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h5:where(.text-block-title){font-size:2rem}}:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h6:where(.text-block-title){font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:-.02em;font-size:clamp(1.25rem,1.0115rem + 1.0178vw,1.5rem);font-weight:400;line-height:100%}@media (min-width:768px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h6:where(.text-block-title){font-size:clamp(1.5rem,.6429rem + 1.7857vw,1.75rem)}}@media (min-width:992px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h6:where(.text-block-title){font-size:1.75rem}}@media (min-width:1280px){:where([data-theme=agentic-light],[data-theme=agentic-dark]) div h6:where(.text-block-title){font-size:1.75rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container{gap:1.5rem}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block :where(.text-block-container):has(:w
734here(h1.text-block-title,h2.text-block-title,.text-block-title.heading-1,.text-block-title.heading-2)){gap:2rem}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block :where(.text-block-container):has(:where(h3.text-block-title,h4.text-block-title,h5.text-block-title,h6.text-block-title,.text-block-title.heading-3,.text-block-title.heading-4,.text-block-title.heading-5,.text-block-title.heading-6)){gap:1.5rem}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container .text-block-supertitle{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:uppercase;color:#fff;letter-spacing:.03em;border-width:1px;border-color:#fff;border-radius:9999px;align-self:flex-start;font-size:.75rem;font-weight:440;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container .text-block-supertitle{font-size:.75rem}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container .text-block-supertitle{font-size:.75rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container .text-block-supertitle{font-size:.75rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-headline-container .text-block-supertitle{color:var(--text-neutral-primary);border-color:var(--border-neutral-alternate-primary);padding-inline:calc(.75rem - 1px);padding-top:calc(.25rem - 1px + .125em);padding-bottom:calc(.25rem - 1px - .125em)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block.text-center .text-block-headline-container .text-block-supertitle{align-self:center}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-default){font-size:1rem;font-weight:370;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-default){font-size:clamp(1rem,.5714rem + .8929vw,1.125rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-default){font-size:1.125rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-default){font-size:1.125rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-small){font-size:.875rem;font-weight:370;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-small){font-size:clamp(.875rem,.4464rem + .8929vw,1rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-small){font-size:1rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-description:where(.font-size-text-small){font-size:1rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .text-block-actions{gap:.5rem}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:0;border-radius:9999px;padding:.5rem 1.5rem;font-size:1rem;font-weight:370;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn{font-size:clamp(1rem,.5714rem + .8929vw,1.125rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn{font-size:1.125rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn{font-size:1.125rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn-primary{color:var(--text-neutral-on-alternate-primary);background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-width:0}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .text-block .btn-secondary{color:var(--text-neutral-primary);border-width:1px;border-color:#fff;border-color:var(--border-neutral-alternate-primary);background-color:#0000}
735.tag{text-align:center;width:-moz-fit-content;width:fit-content;font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-alternate);outline-offset:2px;background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-radius:9999px;outline:2px solid #0000;flex-direction:row;align-items:center;padding:.25rem .75rem;font-size:.75rem;font-weight:400;line-height:130%;display:inline-flex}.tag:hover{text-decoration-line:none!important}.tag:focus-visible{outline-offset:2px;box-shadow:0 0 0 2px var(--border-state-focused,#de9dcc) inset;outline:2px solid #0000}.tag p{color:var(--text-neutral-alternate);font-size:.75rem;line-height:1rem}.tag.tag-neutral{color:var(--text-on-accent-on-alternate);background-color:#efebe7;background-color:var(--bg-neutral-alternate-secondary)}.tag.tag-accent{color:var(--text-on-accent-on-default);background-color:#ec8fff;background-color:var(--bg-accent-default)}.tag.tag-filter{cursor:pointer;position:relative}.tag.tag-filter.active{background-color:#ec8fff;background-color:var(--bg-accent-default);text-align:center;font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-on-accent-on-default);border-radius:9999px;justify-content:center;align-items:center;gap:.125rem;padding:0 12px 0 4px;font-size:.75rem;font-weight:400;line-height:130%;display:flex}.tag.tag-filter.active:before{content:"";background-color:currentColor;width:1.5rem;height:1.5rem;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='currentColor'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='currentColor'%20d='M18%207a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-2%202a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3%203a1%201%200%201%201%202%200%201%201%200%200%201-2%200Zm-1%201a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3%203a1%201%200%201%201%202%200%201%201%200%200%201-2%200Zm-1-3a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3
735-1a1%201%200%201%201%202%200%201%201%200%200%201-2%200Z'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='currentColor'%20viewBox='0%200%2024%2024'%3e%3cpath%20fill='currentColor'%20d='M18%207a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-2%202a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3%203a1%201%200%201%201%202%200%201%201%200%200%201-2%200Zm-1%201a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3%203a1%201%200%201%201%202%200%201%201%200%200%201-2%200Zm-1-3a1%201%200%201%200%200%202%201%201%200%200%200%200-2Zm-3-1a1%201%200%201%201%202%200%201%201%200%200%201-2%200Z'/%3e%3c/svg%3e");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tag.tag-filter.tag-neutral:hover{color:var(--text-on-accent-on-alternate);background-color:#fff;background-color:var(--bg-neutral-alternate-primary)}.tag.tag-bullet,.tag.tag-bullet p{color:var(--text-neutral-primary);background-color:#0000;gap:.5rem;padding-left:0;padding-right:0}.tag.tag-bullet:hover,.tag.tag-bullet p:hover{color:var(--text-neutral-primary)}.tag.tag-bullet:before,.tag.tag-bullet p:before{--tw-content:"";content:var(--tw-content);background-color:#ec8fff;background-color:var(--bg-accent-default);border-radius:9999px;width:.25rem;height:.25rem;display:inline-block}.tag.tag-bullet.tag-accent:before,.tag.tag-bullet p.tag-accent:before{color:var(--icon-accent-default)}.tag.tag-outline{color:var(--text-neutral-primary);border-width:1px;border-color:#322f2f;border-color:var(--border-neutral-default-primary);background-color:#0000}.tag.tag-outline p{color:var(--text-neutral-primary)}.tag.tag-text{color:var(--text-neutral-primary);background-color:#0000;padding-left:0;padding-right:0}.tag.tag-text.tag-neutral,.tag.tag-text.tag-nautral p{color:var(--text-neutral-primary)}a.tag{color:var(--text-neutral-alternate)}a.tag:hover{background-color:#efebe7;background-color:var(--bg-neutral-alternate-secondary);text-decoration-line:none!important}a.tag.tag-neutral:hover{color:var(--text-on-accent-on-alternate);background-color:#fff;background-color:var(--bg-neutral-alternate-primary)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:0;font-size:.75rem;font-weight:440;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag{font-size:clamp(.75rem,.3214rem + .8929vw,.875rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag{font-size:.875rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag{font-size:.875rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag:not(.tag-bullet,.tag-text,.tag-outline,.tag-filter):hover{background-color:#c2bdae;background-color:var(--bg-neutral-alternate-tertiary)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag:focus-visible{box-shadow:0 0 0 2px var(--border-state-focused,#de9dcc) inset, 0 0 0 3px var(--border-state-inset,#fff) inset}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-outline{border-color:#fff;border-color:var(--border-neutral-alternate-primary);padding-block:calc(.25rem - 1px)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-outline:hover{color:var(--text-neutral-secondary);border-color:#c2bdae;border-color:var(--border-neutral-alternate-secondary)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-bullet,:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-text{text-transform:uppercase;letter-spacing:.03em;padding-top:0;padding-bottom:0;font-size:.75rem;font-weight:440;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-bullet,:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-text{font-size:.75rem}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-bullet,:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-text{font-size:.75rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-bullet,:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-text{font-size:.75rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-bullet:before{background-color:var(--icon-accent-default)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter{text-transform:none;color:#fff;background-color:#0000;border-width:1px;border-color:#fff;padding-left:1.25rem;padding-right:1.25rem;font-size:1rem;font-weight:400;line-height:160%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter{font-size:clamp(1rem,.5714rem + .8929vw,1.125rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter{font-size:1.125rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter{font-size:1.125rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter{color:var(--text-neutral-primary);border-color:var(--border-neutral-alternate-primary);padding-block:calc(.5rem - 1px)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter:hover{background-color:#1a141433;background-color:var(--bg-overlay-dark-secondary)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:0;
735color:#1a1414;background-color:#fff;border-color:#0000;gap:0;padding-left:1.25rem;padding-right:1.25rem;font-size:1rem;font-weight:400;line-height:160%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active{font-size:clamp(1rem,.5714rem + .8929vw,1.125rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active{font-size:1.125rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active{font-size:1.125rem}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active{background-color:var(--bg-neutral-alternate-primary);color:var(--text-neutral-on-alternate-primary);padding-block:calc(.5rem - 1px)}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active:before{display:none}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .tag.tag-filter.active:hover{background-color:#c2bdae;background-color:var(--bg-neutral-alternate-tertiary)}
736.article-preview-reading{width:100%}.article-preview-reading .reading-posts-columns{flex-direction:column;gap:1.25rem;display:flex}@media (min-width:992px){.article-preview-reading .reading-posts-columns{-moz-column-gap:3rem;flex-direction:row;column-gap:3rem}}.article-preview-reading .reading-posts-column{flex-direction:column;gap:0;display:flex}@media (min-width:768px){.article-preview-reading .reading-posts-column{flex:1}}.article-preview-reading .reading-post-item{width:100%;margin:0;padding:0}.article-preview-reading .reading-post-separator{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);width:100%;height:1px;margin-top:1.25rem;margin-bottom:1.25rem}@media (min-width:992px){.article-preview-reading .reading-post-separator.reading-post-column-separator{width:1px;height:auto}}.article-preview-reading .reading-post-link{border-radius:.5rem;align-items:flex-start;gap:1rem;padding:1rem;text-decoration-line:none;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:flex}.article-preview-reading .reading-post-link:hover{opacity:.7;text-decoration-line:none}@media (min-width:768px){.article-preview-reading .reading-post-link{gap:1.5rem}}.article-preview-reading .reading-post-number{letter-spacing:-.6px;color:var(--text-neutral-primary);flex-shrink:0;width:2rem;font-size:1.875rem;font-weight:400;line-height:2.25rem}@media (min-width:768px){.article-preview-reading .reading-post-number{width:2.5rem;font-size:2.25rem;line-height:2.5rem}}.article-preview-reading .reading-post-content{flex-direction:column;flex:1;gap:.75rem;display:flex}.article-preview-reading .reading-post-author{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-secondary);font-size:.75rem;font-weight:400;line-height:130%}.article-preview-reading .reading-post-title{letter-spacing:-.32px;margin:0;font-size:1rem;font-weight:400;line-height:120%}@media (min-width:992px){.article-preview-reading .reading-post-title{font-size:1.125rem}}.article-preview-reading .reading-post-image{border-radius:.5rem;flex-shrink:0;width:100px;height:100px;position:relative;overflow:hidden}.article-preview-reading .reading-post-image img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.article-preview-reading .reading-post-image.external-link .external-link-badge{z-index:10;background-color:#ec8fff;background-color:var(--bg-accent-default);border-radius:.5rem;justify-content:center;align-items:center;width:2rem;height:2rem;display:flex;position:absolute;bottom:.5rem;left:.5rem}.article-preview-reading .reading-post-image.external-link .external-link-badge svg{width:1.5rem;height:1.5rem;color:var(--icon-on-accent-on-default)}
737.carousel{width:100%;position:relative}.carousel .carousel-container{width:100%;position:relative;overflow:hidden}.carousel .carousel-container .carousel-item{box-sizing:border-box;flex-direction:column;flex-shrink:0;height:100%;min-height:0;display:flex;overflow:hidden}.carousel .carousel-container .carousel-item>*{flex:1}.carousel .carousel-container .carousel-item img{-o-object-fit:cover;object-fit:cover;border-radius:.5rem;width:100%;height:auto}.carousel .carousel-container .carousel-item video{border-radius:.5rem;width:100%;height:auto}.carousel .carousel-container .carousel-item .card{flex-direction:column;height:100%;display:flex}.carousel.carousel-items-height .carousel-container .carousel-item{height:auto}.carousel .carousel-track{transition:transform var(--carousel-speed,.3s) ease-in-out;will-change:transform;display:flex}.carousel.carousel-vertical .carousel-container{overflow:hidden}.carousel.carousel-vertical .carousel-track{flex-direction:column}.carousel .carousel-track.dragging{cursor:grabbing;-webkit-user-select:none;user-select:none;transition-property:none}.carousel .carousel-track{cursor:auto}.carousel .carousel-track.dragging img{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.carousel .carousel-track img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.carousel .carousel-track>*{min-width:0;display:flex}.carousel .carousel-arrow{z-index:10;cursor:pointer;color:var(--text-neutral-alternate);width:2.5rem;height:2.5rem;background-color:#ec8fff;background-color:var(--bg-accent-default);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:.5rem;justify-content:center;align-items:center;transition:all .2s;
737display:flex;position:absolute;top:50%;transform:translateY(-50%)}.carousel .carousel-arrow:not(:disabled):hover{opacity:.6}.carousel .carousel-arrow:disabled{cursor:not-allowed;display:none}.carousel .carousel-arrow-prev{left:1rem}.carousel .carousel-arrow-next{right:1rem}.carousel .carousel-arrow-minimal{color:var(--icon-on-accent-on-default);background-color:#0000}.carousel .carousel-dots{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex;position:absolute}.carousel .carousel-dots.carousel-dots-minimal{gap:.75rem}.carousel .carousel-dot{cursor:pointer;background-color:#c2bdae;background-color:var(--bg-static-light-subtle);border-style:none;border-radius:9999px;width:.75rem;min-width:.75rem;height:.75rem;min-height:.75rem;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-flex}.carousel .carousel-dot:hover{background-color:#c2bdae;background-color:var(--bg-static-light-subtle);transform:scale(1.2)}.carousel .carousel-dot.active{background-color:#68594b;background-color:var(--bg-static-dark-subtle);transform:scale(1.2)}.carousel .carousel-dots-minimal .carousel-dot{border:1px solid #fff;border-color:var(--border-neutral-alternate-primary);background-color:#0000;width:6px;min-width:6px;height:6px;min-height:6px;position:relative}.carousel .carousel-dots-minimal .carousel-dot:before{--tw-content:"";content:var(--tw-content);background-color:#0000;position:absolute;inset:-.5rem}.carousel .carousel-dots-minimal .carousel-dot:hover{opacity:.7}.carousel .carousel-dots-minimal .carousel-dot:hover:not(.active){background-color:#0000;transform:none}.carousel .carousel-dots-minimal .carousel-dot:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-sha
737dow,0 0 #0000);--tw-ring-color:var(--border-state-focused)}.carousel .carousel-dots-minimal .carousel-dot.active{background-color:#fff;background-color:var(--bg-neutral-alternate-primary);transform:none}.carousel .carousel-scrollbar{cursor:pointer;border-radius:.5rem;width:100%;height:.5rem;margin-top:1rem;position:absolute}.carousel .carousel-scrollbar-track{border-radius:.5rem;width:100%;height:100%;position:relative}.carousel .carousel-scrollbar-thumb{cursor:grab;background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);border-radius:.5rem;min-width:1rem;height:100%;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;top:0;left:0}.carousel .carousel-scrollbar-thumb:hover{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary)}.carousel .carousel-scrollbar-thumb:active{cursor:grabbing;background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary)}.carousel .carousel-track{transition:transform .3s}.carousel .carousel-track.dragging{transition:none}.carousel .carousel.adaptive-height .carousel-container{transition:height var(--carousel-speed,.3s) ease-in-out}.carousel.carousel-arrows-on-hover .carousel-arrow{opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s,transform .2s}.carousel.carousel-arrows-on-hover:hover .carousel-arrow{opacity:1;visibility:visible}@media (min-width:768px){.carousel.carousel-arrows-outside .carousel-arrow-prev{left:-2.5rem}.carousel.carousel-arrows-outside .carousel-arrow-next{right:-2.5rem}}.carousel.carousel-with-dots.carousel-dots-bottom{margin-bottom:2.25rem}.carousel.carousel-with-dots.carousel-dots-bottom .carousel-dots{bottom:-1.5rem;left:0;right:0}.carousel.carousel-with-dots.carousel-dots-left .carousel-dots{flex-direction:column;width:auto;height:auto;top:50%;left:-11px}@media (min-width:768px){.carousel.carousel-with-dots.carousel-dots-left .carousel-dots{left:-15px}}@media (min-width:992px){.carousel.carousel-with-dots.carousel-dots-left .carousel-dots{left:-2.25rem}}.carousel.carousel-with-dots.carousel-dots-left .carousel-dots{transform:translateY(-50%)}.carousel.carousel-with-dots.carousel-dots-right .carousel-dots{flex-direction:column;width:auto;height:auto;top:50%;right:-11px}@media (min-width:768px){.carousel.carousel-with-dots.carousel-dots-right .carousel-dots{right:-15px}}@media (min-width:992px){.carousel.carousel-with-dots.carousel-dots-right .carousel-dots{right:-2rem}}.carousel.carousel-with-dots.carousel-dots-right .carousel-dots{transform:translateY(-50%)}.carousel.carousel-with-dots.carousel-dots-bottom.carousel-dots-align-start .carousel-dots{justify-content:flex-start}.carousel.carousel-with-dots.carousel-dots-bottom.carousel-dots-align-center .carousel-dots{justify-content:center}.carousel.carousel-with-dots.carousel-dots-bottom.carousel-dots-align-end .carousel-dots{justify-content:flex-end}.carousel.carousel-with-dots.carousel-dots-left.carousel-dots-align-start .carousel-dots{--tw-translate-y:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:flex-start;top:0}.carousel.carousel-with-dots.carousel-dots-left.carousel-dots-align-center .carousel-dots{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:center;top:50%}.carousel.carousel-with-dots.carousel-dots-left.carousel-dots-align-end .carousel-dots{--tw-translate-y:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:flex-end;top:auto;bottom:0}.carousel.carousel-with-dots.carousel-dots-right.carousel-dots-align-start .carousel-dots{--tw-translate-y:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:flex-start;top:0}.carousel.carousel-with-dots.carousel-dots-right.carousel-dots-align-center .carousel-dots{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:center;top:50%}.carousel.carousel-with-dots.carousel-dots-right.carousel-dots-align-en
737d .carousel-dots{--tw-translate-y:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));justify-content:flex-end;top:auto;bottom:0}.carousel.carousel-with-scrollbar{margin-bottom:2.25rem}.carousel.carousel-with-scrollbar .carousel-scrollbar{bottom:-1.5rem}@media (max-width:768px){.carousel-arrow{width:2.5rem;height:2.5rem}.carousel-arrow-prev{left:.5rem}.carousel-arrow-next{right:.5rem}}
738[data-theme=nutrient-flex],[data-forced-theme=nutrient-flex]{--theme-font-sans:"Archivo", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--theme-font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--theme-font-semi-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace}[data-theme=nutrient-flex] .hero-section .text-block-title,[data-forced-theme=nutrient-flex] .hero-section .text-block-title{letter-spacing:-.02em;font-size:42px}@media (min-width:992px){[data-theme=nutrient-flex] .hero-section .text-block-title,[data-forced-theme=nutrient-flex] .hero-section .text-block-title{font-size:92px}}[data-theme=nutrient-flex] .text-block-title.heading-2,[data-forced-theme=nutrient-flex] .text-block-title.heading-2{font-size:40px}@media (min-width:992px){[data-theme=nutrient-flex] .text-block-title.heading-2,[data-forced-theme=nutrient-flex] .text-block-title.heading-2{font-size:64px}}[data-theme=nutrient-flex] .text-block-description,[data-forced-theme=nutrient-flex] .text-block-description{font-size:1.25rem;line-height:1.6}[data-theme=nutrient-flex] .text-block-supertitle,[data-forced-theme=nutrient-flex] .text-block-supertitle{font-family:var(--theme-font-semi-mono), ui-monospace, monospace}[data-theme=nutrient-flex] .btn,[data-forced-theme=nutrient-flex] .btn{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:-.005em;border-radius:9999px;padding:.75rem 1.25rem;font-size:.875rem;font-weight:490}[data-theme=nutrient-flex] .btn.btn-secondary,[data-forced-theme=nutrient-flex] .btn.btn-secondary{color:var(--text-neutral-primary);border-width:1px;border-color:#fff;border-color:var(--border-neutral-alternate-primary)}[data-theme=nutrient-flex] .btn.btn-secondary:hover,[data-forced-theme=nutrient-flex] .btn.btn-secondary:hover{opacity:1;background-color:#272121;background-color:var(--bg-neutral-default-secondary)}
739[data-theme=cloud-light],[data-forced-theme=cloud-light]{--theme-font-sans:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}[data-theme=cloud-light] .text-block-supertitle,[data-forced-theme=cloud-light] .text-block-supertitle{font-family:var(--theme-font-semi-mono), ui-monospace, monospace}[data-theme=cloud-light] .feature-switcher .font-size-text-default.text-neutral-primary,[data-forced-theme=cloud-light] .feature-switcher .font-size-text-default.text-neutral-primary{font-size:14px;font-weight:600}[data-theme=cloud-light] .feature-switcher-progress,[data-forced-theme=cloud-light] .feature-switcher-progress{background-color:var(--bg-accent-default)}[data-theme=cloud-light] .feature-switcher-order-number,[data-forced-theme=cloud-light] .feature-switcher-order-number{color:var(--text-accent-default)}[data-theme=cloud-light] .feature-switcher svg path,[data-forced-theme=cloud-light] .feature-switcher svg path{fill:var(--icon-accent-default)}[data-theme=cloud-light] .feature-switcher .feature-switcher-learn-more svg path,[data-forced-theme=cloud-light] .feature-switcher .feature-switcher-learn-more svg path{fill:var(--icon-neutral-primary)}[data-theme=cloud-light] .processing-mode-card svg path,[data-forced-theme=cloud-light] .processing-mode-card svg path{f
739ill:var(--icon-accent-default)}[data-theme=cloud-light] .pictogram-shape,[data-forced-theme=cloud-light] .pictogram-shape{color:var(--icon-accent-default)}[data-theme=cloud-light] .enterprise-feature svg path,[data-forced-theme=cloud-light] .enterprise-feature svg path,[data-theme=cloud-light] .output-format-card svg path,[data-forced-theme=cloud-light] .output-format-card svg path{fill:var(--icon-accent-default)}[data-theme=cloud-light] .btn,[data-forced-theme=cloud-light] .btn{font-family:var(--theme-font-sans), system-ui, sans-serif;text-transform:none;letter-spacing:-.005em;border-radius:9999px;padding:.75rem 1.25rem;font-size:.875rem;font-weight:490}[data-theme=cloud-light] .btn.btn-secondary,[data-forced-theme=cloud-light] .btn.btn-secondary{color:var(--text-neutral-primary);border-width:1px;border-color:#fff;border-color:var(--border-neutral-alternate-primary)}[data-theme=cloud-light] .feature-switcher .font-size-text-default[data-theme=cloud-light] .btn.btn-secondary,[data-forced-theme=cloud-light] .feature-switcher .font-size-text-default[data-theme=cloud-light] .btn.btn-secondary,[data-theme=cloud-light] .feature-switcher .font-size-text-default [data-forced-theme=cloud-light] .btn.btn-secondary,[data-forced-theme=cloud-light] .feature-switcher .font-size-text-default [data-forced-theme=cloud-light] .btn.btn-secondary{font-size:14px;font-weight:600}[data-theme=cloud-light] .btn.btn-secondary:hover,[data-forced-theme=cloud-light] .btn.btn-secondary:hover{opacity:1;background-color:#272121;background-color:var(--bg-neutral-default-secondary)}[data-theme=cloud-light] .btn.btn-secondary-on-accent,[data-theme=cloud-light] .btn.btn-secondary-on-accent:hover,[data-forced-theme=cloud-light] .btn.btn-secondary-on-accent,[data-forced-theme=cloud-light] .btn.btn-secondary-on-accent:hover{color:var(--border-on-accent-on-default)}
740.link-button{color:var(--text-neutral-primary);width:100%;justify-content:space-between;align-items:center;padding-left:.125rem;padding-right:.125rem;text-decoration-line:none;transition-property:opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:flex}.link-button:hover{opacity:.6;text-decoration-line:none}.link-button:focus-visible{opacity:1;outline-offset:2px;box-shadow:0 0 0 2px var(--border-state-focused,#de9dcc) inset;border-radius:.75rem;outline:2px solid #0000}.link-button.link-button-primary{font-family:var(--theme-font-sans), system-ui, sans-serif;padding-top:1rem;padding-bottom:1rem;font-size:.875rem}@media (min-width:992px){.link-button.link-button-primary{font-size:1rem}}.link-button.link-button-secondary{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;padding-top:.5rem;padding-bottom:.5rem;font-size:.75rem}.link-button .link-button-content{align-items:center;gap:.75rem;display:flex}.link-button .link-button-text{white-space:nowrap}.link-button .link-button-count{white-space:nowrap;font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-tertiary);flex-shrink:0;font-size:.75rem}.link-button:has(.link-button-count) .link-button-content{min-width:0}.link-button:has(.link-button-count) .link-button-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.link-button.link-button-has-helper{justify-content:flex-start;gap:.75rem}.link-button.link-button-has-helper .link-button-content{flex:1}.link-button.link-button-has-helper .link-button-text-stack{flex-direction:column;flex:1;display:flex}.link-button.link-button-has-helper .link-button-helper-text{color:var(--text-neutral-tertiary)}.link-button.link-button-primary.link-button-has-helper .link-button-text-stack{gap:.125rem}.link-button.link-button-primary.link-button-has-helper .link-button-helper-text{font-size:.75rem;line-height:1.2}@media (min-width:992px){.link-button.link-button-primary.link-button-has-helper .link-button-helper-text{font-size:.875rem}}.link-button.link-button-secondary.link-button-has-helper .link-button-text-stack{gap:.25rem;line-height:1}.link-button-list{flex-direction:column;width:100%;display:flex}
741svg[data-astro-cid-7qi5gn3v]{color:var(--icon-color)}
742.illustrated-toolbar{color:var(--icon-bg-neutral-default-tertiary)}.illustrated-page-primary{color:var(--icon-bg-neutral-default-primary)}.illustrated-page-secondary{color:var(--icon-bg-neutral-default-secondary)}.illustrated-page-tertiary{color:var(--icon-bg-neutral-default-tertiary)}.illustrated-dots{color:var(--icon-neutral-primary)}
743.pictogram-shape{color:var(--icon-static-accent-light)}.pictogram-shape-pink{color:var(--icon-static-pink)}.pictogram-shape-yellow{color:var(--icon-static-yellow)}.pictogram-shape-red{color:var(--icon-static-red)}.pictogram-shape-green{color:var(--icon-static-green)}.pictogram-dots,.dot-shape{color:var(--icon-neutral-primary)}.pictogram-stroke{color:var(--icon-static-accent-light);stroke:currentColor}.dot-stroke{color:var(--icon-neutral-primary);stroke:currentColor}
744.nutrient-input-wrapper{flex-direction:column;align-items:flex-start;width:100%;display:flex}.nutrient-input-wrapper:has(textarea){position:relative}.nutrient-input-wrapper:has(textarea) .nutrient-input-helper-container{position:relative}.nutrient-input-wrapper:has(textarea) .nutrient-input-helper-container:before{pointer-events:none;--tw-content:"";content:var(--tw-content);background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-radius:9999px;width:.25rem;height:.25rem;position:absolute;top:-.75rem;right:.5rem}.nutrient-input-label{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);padding-bottom:.5rem;font-size:.75rem}.nutrient-input{width:100%;min-height:2.5rem;font-family:var(--theme-font-sans), system-ui, sans-serif;color:var(--text-neutral-primary);outline-offset:-1px;background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-width:0;border-radius:.5rem;padding:.75rem 1.5rem;font-size:.875rem;line-height:1.2}.nutrient-input::placeholder{color:var(--text-neutral-tertiary)}.nutrient-input:hover{outline:1px solid var(--border-neutral-default-primary)}.nutrient-input:focus{outline-offset:-2px;outline:2px solid var(--border-state-focused)}.secondary .nutrient-input{background-color:#1a1414;background-color:var(--bg-neutral-default-primary)}.nutrient-input-error{border-width:1px;border-color:#ff4747;border-color:var(--border-state-error)}.nutrient-input-error:hover{outline-offset:2px;border-color:#ff4747;border-color:var(--border-state-error);outline:2px solid #0000}.nutrient-input-error:focus{outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-sha
744dow,0 0 #0000);--tw-ring-inset:inset;--tw-ring-color:var(--ring-accent-red);outline:2px solid #0000}.nutrient-input-disabled{cursor:not-allowed;opacity:.5}.nutrient-input-disabled:hover{border-color:#0000}.nutrient-input-disabled.nutrient-input-error:hover{border-color:#ff4747;border-color:var(--border-state-error)}.nutrient-input-helper-container{width:100%}.nutrient-input-helper-text{color:#897e70;font-size:.75rem;line-height:1.3}@media (min-width:992px){.nutrient-input-helper-text{font-size:.875rem}}.nutrient-input-helper-text{color:var(--text-neutral-tertiary)}.nutrient-input-error-text{color:#ff4747;font-size:.75rem;line-height:1.3}@media (min-width:992px){.nutrient-input-error-text{font-size:.875rem}}.nutrient-input-error-text{color:var(--text-state-error)}.nutrient-input-helper-text,.nutrient-input-error-text{margin-top:.5rem}.nutrient-dropdown{cursor:pointer;width:100%;height:42.8px;font-family:var(--theme-font-sans), system-ui, sans-serif;color:var(--text-neutral-primary);background-color:#272121;background-color:var(--bg-neutral-default-secondary);border-width:1px;border-color:#0000;border-radius:.5rem;align-items:center;padding-left:1.5rem;padding-right:3rem;font-size:.875rem;line-height:1.2;display:flex;position:relative}.nutrient-dropdown:hover{border-color:#322f2f;border-color:var(--border-neutral-default-primary)}.secondary .nutrient-dropdown{background-color:#1a1414;background-color:var(--bg-neutral-default-primary)}.nutrient-dropdown select{cursor:pointer;appearance:none;width:100%;height:100%;font-family:var(--theme-font-sans), system-ui, sans-serif;opacity:0;outline-offset:2px;background-color:#0000;border-radius:.25rem;outline:2px solid #0000;font-size:.875rem;line-height:1.25rem;position:absolute;inset:0}.nutrient-dropdown select:focus{outline-offset:2px;outline:2px solid #0000}.nutrient-dropdown:focus-within{outline-offset:-2px;outline:2px solid var(--border-state-focused)}.nutrient-dropdown .selected-text{pointer-events:none;text-overflow:ellipsis;white-space:nowrap;font-family:var(--theme-font-sans), system-ui, sans-serif;color:var(--text-neutral-primary);font-size:.875rem;line-height:1.25rem;overflow:hidden}.nutrient-dropdown .dropdown-icon{pointer-events:none;color:var(--text-neutral-primary);height:100%;align-items:center;display:flex;position:absolute;top:0;bottom:0;right:.25rem}.nutrient-dropdown.white-bg .selected-text,.nutrient-dropdown.white-bg .dropdown-icon{color:var(--text-neutral-primary)}.nutrient-dropdown-error,.nutrient-dropdown-error:hover{border-color:#ff4747;border-color:var(--border-state-error)}.nutrient-dropdown-error:focus{--tw-ring-color:var(--ring-accent-red);border-color:#ff4747;border-color:var(--border-state-error)}.nutrient-dropdown-disabled{cursor:not-allowed;opacity:.5}.nutrient-dropdown-disabled:hover{border-color:#0000}.nutrient-dropdown-disabled.nutrient-dropdown-error:hover{border-color:#ff4747;border-color:var(--border-state-error)}.nutrient-dropdown.is-secondary{background-color:#272121;background-color:var(--bg-neutral-default-secondary)}.nutrient-dropdown.is-inactive{pointer-events:none;opacity:.5}
745.separator{flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.separator.separator-primary{border-color:#322f2f;border-color:var(--border-neutral-default-primary)}.separator.separator-secondary{border-color:#68594b;border-color:var(--border-neutral-default-secondary)}.separator.separator-alternate.separator-primary{border-color:#efebe7;border-color:var(--border-neutral-on-alternate-primary)}.separator.separator-alternate.separator-secondary{border-color:#c2bdae;border-color:var(--border-neutral-on-alternate-secondary)}.separator.separator-with-text{flex-direction:row;align-items:center;gap:1rem}.separator.separator-with-text hr{border-color:inherit;flex:1}.separator-text{font-family:var(--theme-font-semi-mono), ui-monospace, monospace;text-transform:uppercase;letter-spacing:.24px;color:var(--text-neutral-primary);font-size:.75rem;font-weight:400;line-height:100%}.separator-vertical{background-color:#322f2f;background-color:var(--bg-neutral-default-tertiary);width:100%;height:1px}@media (min-width:992px){.separator-vertical{width:1px;height:100%}}:is([data-theme=agentic-light],[data-theme=agentic-dark]) .separator-text{font-family:var(--theme-font-sans), system-ui, sans-serif;letter-spacing:.03em;font-size:.75rem;font-weight:440;line-height:120%}@media (min-width:768px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .separator-text{font-size:clamp(.75rem,.3214rem + .8929vw,.875rem)}}@media (min-width:992px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .separator-text{font-size:.875rem}}@media (min-width:1280px){:is([data-theme=agentic-light],[data-theme=agentic-dark]) .separator-text{font-size:.875rem}}
746.nutrient-checkbox{cursor:pointer;align-items:center;gap:.5rem;width:-moz-fit-content;width:fit-content;display:flex}.nutrient-checkbox .nutrient-checkbox-input:focus~.nutrient-checkbox-box{outline-offset:1px;outline-width:2px;outline-style:solid;outline-color:var(--border-state-focused);border-radius:.5rem}.nutrient-checkbox .nutrient-checkbox-input[data-status=error]~.
746nutrient-checkbox-box{border-color:var(--border-state-error)}.nutrient-checkbox .nutrient-checkbox-input:checked~.nutrient-checkbox-box{background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-color:#fff;border-color:var(--border-neutral-alternate-primary);transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nutrient-checkbox .nutrient-checkbox-input:checked~.nutrient-checkbox-box .nutrient-checkbox-icon-check{display:block}.nutrient-checkbox .nutrient-checkbox-input:checked:hover~.nutrient-checkbox-box{opacity:.8}.nutrient-checkbox .nutrient-checkbox-input:checked[data-status=error]~.nutrient-checkbox-box{border-color:var(--border-state-error)}.nutrient-checkbox .nutrient-checkbox-input[data-indeterminate=true]~.nutrient-checkbox-box{background-color:#fff;background-color:var(--bg-neutral-alternate-primary);border-color:#fff;border-color:var(--border-neutral-alternate-primary);transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nutrient-checkbox .nutrient-checkbox-input[data-indeterminate=true]~.nutrient-checkbox-box .nutrient-checkbox-icon-check{display:none}.nutrient-checkbox .nutrient-checkbox-input[data-indeterminate=true]~.nutrient-checkbox-box .nutrient-checkbox-icon-indeterminate{display:block}.nutrient-checkbox .nutrient-checkbox-input[data-indeterminate=true]:hover~.nutrient-checkbox-box{opacity:.8}.nutrient-checkbox .nutrient-checkbox-input[data-indeterminate=true][data-status=error]~.nutrient-checkbox-box{border-color:var(--border-state-error)}.nutrient-checkbox .nutrient-checkbox-box{background-color:#1a1414;background-color:var(--bg-neutral-default-primary);border-width:1px;border-color:#322f2f;border-color:var(--border-neutral-default-primary);border-radius:.5rem;flex-shrink:0;justify-content:center;align-items:center;width:1.5rem;min-width:1.5rem;height:1.5rem;min-height:1.5rem;display:flex}.nutrient-checkbox .nutrient-checkbox-box .nutrient-checkbox-box-icon{color:var(--icon-neutral-alternate);display:none}.nutrient-checkbox .nutrient-checkbox-icon{flex-shrink:0}.nutrient-checkbox .nutrient-checkbox-label{color:#fff;overflow-wrap:anywhere;margin-top:0;font-size:.75rem}@media (min-width:992px){.nutrient-checkbox .nutrient-checkbox-label{font-size:.875rem}}.nutrient-checkbox .nutrient-checkbox-label{color:var(--text-neutral-primary)}.nutrient-checkbox .nutrient-checkbox-description{color:#897e70;overflow-wrap:anywhere;margin-top:0;font-size:.75rem}@media (min-width:992px){.nutrient-checkbox .nutrient-checkbox-description{font-size:.875rem}}.nutrient-checkbox .nutrient-checkbox-description{color:var(--text-neutral-tertiary)}
747</style>
747<script type="module" src="/_astro/page.D5kqAwMB.js"></script>
747</head> <body> <!-- Google Tag Manager (noscript) -->
vendor: 67 bytes, line 747
747<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
747GTM-T6LGJJC
vendor: 83 bytes, line 747
747" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 
747<!-- End Google Tag Manager (noscript) --> <header class="header"> <div id="top-nav-bar" class> <section class="section-spacing-horizontal-default">   <div class="container-large radius-container !px-0 !py-0 top-bar-container">   <div class="top-bar-items-wrapper"> <a target="_self" rel="noopener noreferrer" class="nav-card-container" href="/"> <div id="tnb-nutrient" class="nav-card"> <div class="nav-card-top">   <img src="/_astro/Home.BHzRH_Lz_1aASBd.webp" alt="Nutrient" loading="lazy" decoding="async" srcset="/_astro/Home.BHzRH_Lz_2gYXg8.webp 480w, /_astro/Home.BHzRH_Lz_1aASBd.webp 660w" sizes="100vw" width="660" height="400" class="nav-card-image">
747<script type="module">document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll("[data-modal-trigger]").forEach(e=>{e.addEventListener("click",d=>{d.preventDefault();const t=e.dataset.modalTrigger;t&&window.modalInstances?.get(t)?.open?.()})})});</script>
747 <div class="nav-card-svg"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
748  <path d="M35.0003 11.6667C33.7117 11.6667 32.667 12.7113 32.667 14C32.667 15.2887 33.7117 16.3333 35.0003 16.3333C36.289 16.3333 37.3337 15.2887 37.3337 14C37.3337 12.7113 36.289 11.6667 35.0003 11.6667Z" fill="currentColor"/>
749  <path d="M42.0003 23.3333C40.7117 23.3333 39.667 22.2887 39.667 21C39.667 19.7113 40.7117 18.6667 42.0003 18.6667C43.289 18.6667 44.3337 19.7113 44.3337 21C44.3337 22.2887 43.289 23.3333 42.0003 23.3333Z" fill="currentColor"/>
750  <path d="M30.3337 21C30.3337 22.2887 29.289 23.3333 28.0003 23.3333C26.7117 23.3333 25.667 22.2887 25.667 21C25.667 19.7113 26.7117 18.6667 28.0003 18.6667C29.289 18.6667 30.3337 19.7113 30.3337 21Z" fill="currentColor"/>
751  <path d="M14.0003 56C15.289 56 16.3337 54.9553 16.3337 53.6667C16.3337 52.378 15.289 51.3333 14.0003 51.3333C12.7117 51.3333 11.667 52.378 11.667 53.6667C11.667 54.9553 12.7117 56 14.0003 56Z" fill="currentColor"/>
752  <path d="M47.8337 53.6667C47.8337 54.9553 46.789 56 45.5003 56C44.2117 56 43.167 54.9553 43.167 53.6667C43.167 52.378 44.2117 51.3333 45.5003 51.3333C46.789 51.3333 47.8337 52.378 47.8337 53.6667Z" fill="currentColor"/>
753  <path d="M24.5003 56C25.789 56 26.8337 54.9553 26.8337 53.6667C26.8337 52.378 25.789 51.3333 24.5003 51.3333C23.2117 51.3333 22.167 52.378 22.167 53.6667C22.167 54.9553 23.2117 56 24.5003 56Z" fill="currentColor"/>
754  <path d="M37.3337 53.6667C37.3337 54.9553 36.289 56 35.0003 56C33.7117 56 32.667 54.9553 32.667 53.6667C32.667 52.378 33.7117 51.3333 35.0003 51.3333C36.289 51.3333 37.3337 52.378 37.3337 53.6667Z" fill="currentColor"/>
755  <path d="M56.0003 56C57.289 56 58.3337 54.9553 58.3337 53.6667C58.3337 52.378 57.289 51.3333 56.0003 51.3333C54.7117 51.3333 53.667 52.378 53.667 53.6667C53.667 54.9553 54.7117 56 56.0003 56Z" fill="currentColor"/>
756  <path d="M23.3337 28C23.3337 29.2887 22.289 30.3333 21.0003 30.3333C19.7117 30.3333 18.667 29.2887 18.667 28C18.667 26.7113 19.7117 25.6667 21.0003 25.6667C22.289 25.6667 23.3337 26.7113 23.3337 28Z" fill="currentColor"/>
757  <path d="M49.0003 30.3333C50.289 30.3333 51.3337 29.2887 51.3337 28C51.3337 26.7113 50.289 25.6667 49.0003 25.6667C47.7117 25.6667 46.667 26.7113 46.667 28C46.667 29.2887 47.7117 30.3333 49.0003 30.3333Z" fill="currentColor"/>
758  <path d="M16.3337 35C16.3337 36.2887 15.289 37.3333 14.0003 37.3333C12.7117 37.3333 11.667 36.2887 11.667 35C11.667 33.7113 12.7117 32.6667 14.0003 32.6667C15.289 32.6667 16.3337 33.7113 16.3337 35Z" fill="currentColor"/>
759  <path d="M14.0003 46.6667C15.289 46.6667 16.3337 45.622 16.3337 44.3333C16.3337 43.0447 15.289 42 14.0003 42C12.7117 42 11.667 43.0447 11.667 44.3333C11.667 45.622 12.7117 46.6667 14.0003 46.6667Z" fill="currentColor"/>
760  <path d="M58.3337 44.3333C58.3337 45.622 57.289 46.6667 56.0003 46.6667C54.7117 46.6667 53.667 45.622 53.667 44.3333C53.667 43.0447 54.7117 42 56.0003 42C57.289 42 58.3337 43.0447 58.3337 44.3333Z" fill="currentColor"/>
761  <path d="M56.0003 37.3333C57.289 37.3333 58.3337 36.2887 58.3337 35C58.3337 33.7113 57.289 32.6667 56.0003 32.6667C54.7117 32.6667 53.667 33.7113 53.667 35C53.667 36.2887 54.7117 37.3333 56.0003 37.3333Z" fill="currentColor"/>
762 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </div> <div class="nav-card-bottom"> <span class="nav-card-title">Nutrient</span> <span class="nav-card-description">Home</span> </div> </div> </a><a target="_self" rel="noopener noreferrer" class="nav-card-container" href="/sdk/"> <div id="tnb-sdk" class="nav-card"> <div class="nav-card-top">   <img src="/_astro/SDK.DNU_kr-M_1jvypQ.webp" alt="SDK" loading="lazy" decoding="async" srcset="/_astro/SDK.DNU_kr-M_1PImvn.webp 480w, /_astro/SDK.DNU_kr-M_1jvypQ.webp 660w" sizes="100vw" width="660" height="400" class="nav-card-image"> <div class="nav-card-svg"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
763  <path d="M46.6667 16.3333C46.6667 17.622 45.622 18.6667 44.3333 18.6667C43.0447 18.6667 42 17.622 42 16.3333C42 
76315.0447 43.0447 14 44.3333 14C45.622 14 46.6667 15.0447 46.6667 16.3333Z" fill="currentColor"/>
764  <path d="M18.6667 25.6667C18.6667 26.9553 17.622 28 16.3333 28C15.0447 28 14 26.9553 14 25.6667C14 24.378 15.0447 23.3333 16.3333 23.3333C17.622 23.3333 18.6667 24.378 18.6667 25.6667Z" fill="currentColor"/>
765  <path d="M18.6667 53.6667C18.6667 54.9553 17.622 56 16.3333 56C15.0447 56 14 54.9553 14 53.6667C14 52.378 15.0447 51.3333 16.3333 51.3333C17.622 51.3333 18.6667 52.378 18.6667 53.6667Z" fill="currentColor"/>
766  <path d="M44.3333 28C45.622 28 46.6667 26.9553 46.6667 25.6667C46.6667 24.378 45.622 23.3333 44.3333 23.3333C43.0447 23.3333 42 24.378 42 25.6667C42 26.9553 43.0447 28 44.3333 28Z" fill="currentColor"/>
767  <path d="M44.3333 56C45.622 56 46.6667 54.9553 46.6667 53.6667C46.6667 52.378 45.622 51.3333 44.3333 51.3333C43.0447 51.3333 42 52.378 42 53.6667C42 54.9553 43.0447 56 44.3333 56Z" fill="currentColor"/>
768  <path d="M28 25.6667C28 26.9553 26.9553 28 25.6667 28C24.378 28 23.3333 26.9553 23.3333 25.6667C23.3333 24.378 24.378 23.3333 25.6667 23.3333C26.9553 23.3333 28 24.378 28 25.6667Z" fill="currentColor"/>
769  <path d="M25.6667 18.6667C26.9553 18.6667 28 17.622 28 16.3333C28 15.0447 26.9553 14 25.6667 14C24.378 14 23.3333 15.0447 23.3333 16.3333C23.3333 17.622 24.378 18.6667 25.6667 18.6667Z" fill="currentColor"/>
770  <path d="M28 53.6667C28 54.9553 26.9553 56 25.6667 56C24.378 56 23.3333 54.9553 23.3333 53.6667C23.3333 52.378 24.378 51.3333 25.6667 51.3333C26.9553 51.3333 28 52.378 28 53.6667Z" fill="currentColor"/>
771  <path d="M35 28C36.2887 28 37.3333 26.9553 37.3333 25.6667C37.3333 24.378 36.2887 23.3333 35 23.3333C33.7113 23.3333 32.6667 24.378 32.6667 25.6667C32.6667 26.9553 33.7113 28 35 28Z" fill="currentColor"/>
772  <path d="M37.3333 16.3333C37.3333 17.622 36.2887 18.6667 35 18.6667C33.7113 18.6667 32.6667 17.622 32.6667 16.3333C32.6667 15.0447 33.7113 14 35 14C36.2887 14 37.3333 15.0447 37.3333 16.3333Z" fill="currentColor"/>
773  <path d="M35 56C36.2887 56 37.3333 54.9553 37.3333 53.6667C37.3333 52.378 36.2887 51.3333 35 51.3333C33.7113 51.3333 32.6667 52.378 32.6667 53.6667C32.6667 54.9553 33.7113 56 35 56Z" fill="currentColor"/>
774  <path d="M56 25.6667C56 26.9553 54.9553 28 53.6667 28C52.378 28 51.3333 26.9553 51.3333 25.6667C51.3333 24.378 52.378 23.3333 53.6667 23.3333C54.9553 23.3333 56 24.378 56 25.6667Z" fill="currentColor"/>
775  <path d="M53.6667 56C54.9553 56 56 54.9553 56 53.6667C56 52.378 54.9553 51.3333 53.6667 51.3333C52.378 51.3333 51.3333 52.378 51.3333 53.6667C51.3333 54.9553 52.378 56 53.6667 56Z" fill="currentColor"/>
776  <path d="M18.6667 35C18.6667 36.2887 17.622 37.3333 16.3333 37.3333C15.0447 37.3333 14 36.2887 14 35C14 33.7113 15.0447 32.6667 16.3333 32.6667C17.622 32.6667 18.6667 33.7113 18.6667 35Z" fill="currentColor"/>
777  <path d="M53.6667 37.3333C54.9553 37.3333 56 36.2887 56 35C56 33.7113 54.9553 32.6667 53.6667 32.6667C52.378 32.6667 51.3333 33.7113 51.3333 35C51.3333 36.2887 52.378 37.3333 53.6667 37.3333Z" fill="currentColor"/>
778  <path d="M18.6667 44.3333C18.6667 45.622 17.622 46.6667 16.3333 46.6667C15.0447 46.6667 14 45.622 14 44.3333C14 43.0447 15.0447 42 16.3333 42C17.622 42 18.6667 43.0447 18.6667 44.3333Z" fill="currentColor"/>
779  <path d="M53.6667 46.6667C54.9553 46.6667 56 45.622 56 44.3333C56 43.0447 54.9553 42 53.6667 42C52.378 42 51.3333 43.0447 51.3333 44.3333C51.3333 45.622 52.378 46.6667 53.6667 46.6667Z" fill="currentColor"/>
780 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </div> <div class="nav-card-bottom"> <span class="nav-card-title">SDK</span> <span class="nav-card-description">Software Development Kits</span> </div> </div> </a><a target="_self" rel="noopener noreferrer" class="nav-card-container" href="/api/"> <div id="tnb-cloud" class="nav-card"> <div class="nav-card-top">   <img src="/_astro/Cloud.C8EZjH3W_JWQ9o.webp" alt="Cloud" loading="lazy" decoding="async" srcset="/_astro/Cloud.C8EZjH3W_ZAHdYe.webp 480w, /_astro/Cloud.C8EZjH3W_JWQ9o.webp 660w" sizes="100vw" width="660" height="400" class="nav-card-image"> <div class="nav-card-svg"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
781  <path d="M35 18.6667C36.2887 18.6667 37.3333 17.622 37.3333 16.3333C37.3333 15.0447 36.2887 14 35 14C33.7113 14 32.6667 15.0447 32.6667 16.3333C32.6667 17.622 33.7113 18.6667 35 18.6667Z" fill="currentColor"/>
782  <path d="M35 28C36.2887 28 37.3333 26.9553 37.3333 25.6667C37.3333 24.378 36.2887 23.3333 35 23.3333C33.7113 23.3333 32.6667 24.378 32.6667 25.6667C32.6667 26.9553 33.7113 28 35 28Z" fill="currentColor"/>
783  <path d="M37.3333 53.6667C37.3333 54.9553 36.2887 56 35 56C33.7113 56 32.6667 54.9553 32.6667 53.6667C32.6667 52.378 33.7113 51.3333 35 51.3333C36.2887 51.3333 37.3333 52.378 37.3333 53.6667Z" fill="currentColor"/>
784  <path d="M35 46.6667C36.2887 46.6667 37.3333 45.622 37.3333 44.3333C37.3333 43.0447 36.2887 42 35 42C33.7113 42 32.6667 43.0447 32.6667 44.3333C32.6667 45.622 33.7113 46.6667 35 46.6667Z" fill="currentColor"/>
785  <path d="M44.3333 37.3333C43.0447 37.3333 42 36.2887 42 35C42 33.7113 43.0447 32.6667 44.3333 32.6667C45.622 32.6667 46.6667 33.7113 46.6667 35C46.6667 36.2887 45.622 37.3333 44.3333 37.3333Z" fill="currentColor"/>
786  <path d="M51.3333 35C51.3333 36.2887 52.378 37.3333 53.6667 37.3333C54.9553 37.3333 56 36.2887 56 35C56 33.7113 54.9553 32.6667 53.6667 32.6667C52.378 32.6667 51.3333 33.7113 51.3333 35Z" fill="currentColor"/>
787  <path d="M16.3333 37.3333C15.0447 37.3333 14 36.2887 14 35C14 33.7113 15.0447 32.6667 16.3333 32.6667C17.622 32.6667 18.6667 33.7113 18.6667 35C18.6667 36.2887 17.622 37.3333 16.3333 37.3333Z" fill="currentColor"/>
788  <path d="M23.3333 35C23.3333 36.2887 24.378 37.3333 25.6667 37.3333C26.9553 37.3333 28 36.2887 28 35C28 33.7113 26.9553 32.6667 25.6667 32.6667C24.378 32.6667 23.3333 33.7113 23.3333 35Z" fill="currentColor"/>
789  <path d="M42 30.3333C40.7113 30.3333 39.6667 29.2886 39.6667 28C39.6667 26.7113 40.7113 25.6667 42 25.6667C43.2886 25.6667 44.3333 26.7113 44.3333 28C44.3333 29.2886 43.2886 30.3333 42 30.3333Z" fill="currentColor"/>
790  <path d="M46.6667 21.0001C46.6667 22.2888 47.7114 23.3335 49.0001 23.3335C50.2887 23.3335 51.3334 22.2888 51.3334 21.0001C51.3334 19.7115 50.2887 18.6668 49.0001 18.6668C47.7114 18.6668 46.6667 19.7115 46.6667 21.0001Z" fill="currentColor"/>
791  <path d="M21 51.3333C19.7113 51.3333 18.6666 50.2886 18.6666 48.9999C18.6666 47.7113 19.7113 46.6666 21 46.6666C22.2886 46.6666 23.3333 47.7113 23.3333 48.9999C23.3333 50.2886 22.2886 51.3333 21 51.3333Z" fill="currentColor"/>
792  <path d="M25.6666 42C25.6666 43.2887 26.7113 44.3333 28 44.3333C29.2886 44.3333 30.3333 43.2887 30.3333 42C30.3333 40.7113 29.2886 39.6667 28 39.6667C26.7113 39.6667 25.6666 40.7113 25.6666 42Z" fill="currentColor"/>
793  <path d="M39.6667 42C39.6667 40.7113 40.7114 39.6667 42 39.6667C43.2887 39.6667 44.3334 40.7113 44.3334 42C44.3334 43.2887 43.2887 44.3333 42 44.3333C40.7114 44.3333 39.6667 43.2887 39.6667 42Z" fill="currentColor"/>
794  <path d="M49 46.6667C47.7114 46.6667 46.6667 47.7113 46.6667 49C46.6667 50.2887 47.7114 51.3333 49 51.3333C50.2887 51.3333 51.3334 50.2887 51.3334 49C51.3334 47.7113 50.2887 46.6667 49 46.6667Z" fill="currentColor"/>
795  <path d="M18.6667 21.0001C18.6667 19.7114 19.7114 18.6667 21 18.6667C22.2887 18.6667 23.3334 19.7114 23.3334 21.0001C23.3334 22.2887 22.2887 23.3334 21 23.3334C19.7114 23.3334 18.6667 22.2887 18.6667 21.0001Z" fill="currentColor"/>
796  <path d="M28.0001 25.6667C26.7114 25.6667 25.6667 26.7113 25.6667 28C25.6667 29.2887 26.7114 30.3333 28.0001 30.3333C29.2887 30.3333 30.3334 29.2887 30.3334 28C30.3334 26.7113 29.2887 25.6667 28.0001 25.6667Z" fill="currentColor"/>
797 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </div> <div class="nav-card-bottom"> <span class="nav-card-title">Cloud</span> <span class="nav-card-description">Document Web Services</span> </div> </div> </a><a target="_self" rel="noopener noreferrer" class="nav-card-container" href="/workflow-automation/"> <div id="tnb-workflow" class="nav-card"> <div class="nav-card-top">   <img src="/_astro/Workflow.f2atd43K_Z24fh78.webp" alt="Workflow" loading="lazy" decoding="async" srcset="/_astro/Workflow.f2atd43K_Axlpy.webp 480w, /_astro/Workflow.f2atd43K_Z24fh78.webp 660w" sizes="100vw" width="660" height="400" class="nav-card-image"> <div class="nav-card-svg"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
798  <path d="M56.0003 27.7667C54.7117 27.7667 53.667 26.7221 53.667 25.4334C53.667 24.1447 54.7117 23.1001 56.0003 23.1001C57.289 23.1001 58.3337 24.1447 58.3337 25.4334C58.3337 26.7221 57.289 27.7667 56.0003 27.7667Z" fill="currentColor"/>
799  <path d="M22.7503 28C24.039 28 25.0837 26.9553 25.0837 25.6667C25.0837 24.378 24.039 23.3333 22.7503 23.3333C21.4617 23.3333 20.417 24.378 20.417 25.6667C20.417 26.9553 21.4617 28 22.7503 28Z" fill="currentColor"/>
800  <path d="M34.7087 37.3333C35.9973 37.3333 37.042 36.2887 37.042 35C37.042 33.7113 35.9973 32.6667 34.7087 32.6667C33.42 32.6667 32.3753 33.7113 32.3753 35C32.3753 36.2887 33.42 37.3333 34.7087 37.3333Z" fill="currentColor"/>
801  <path d="M20.7086 35.0001C20.7086 36.2887 19.664 37.3334 18.3753 37.3334C17.0866 37.3334 16.042 36.2887 16.042 35.0001C16.042 33.7114 17.0866 32.6667 18.3753 32.6667C19.664 32.6667 20.7086 33.7114 20.7086 35.0001Z" fill="currentColor"/>
802  <path d="M16.3337 44.3333C16.3337 45.622 15.289 46.6667 14.0003 46.6667C12.7117 46.6667 11.667 45.622 11.667 44.3333C11.667 43.0447 12.7117 42 14.0003 42C15.289 42 16.3337 43.0447 16.3337 44.3333Z" fill="currentColor"/>
803  <path d="M32.667 44.3333C32.667 45.622 31.6223 46.6667 30.3337 46.6667C29.045 46.6667 28.0003 45.622 28.0003 44.3333C28.0003 43.0447 29.045 42 30.3337 42C31.6223 42 32.667 43.0447 32.667 44.3333Z" fill="currentColor"/>
804  <path d="M46.667 46.6667C47.9557 46.6667 49.0003 45.622 49.0003 44.3333C49.0003 43.0447 47.9557 42 46.667 42C45.3783 42 44.3337 43.0447 44.3337 44.3333C44.3337 45.622 45.3783 46.6667 46.667 46.6667Z" fill="currentColor"/>
805  <path d="M53.667 35C53.667 36.2887 52.6223 37.3333 51.3337 37.3333C50.045 37.3333 49.0003 36.2887 49.0003 35C49.0003 33.7113 50.045 32.6667 51.3337 32.6667C52.6223 32.6667 53.667 33.7113 53.667 35Z" fill="currentColor"/>
806  <path d="M26.542 37.3333C25.2533 37.3333 24.2087 36.2887 24.2087 35C24.2087 33.7113 25.2533 32.6667 26.542 32.6667C27.8307 32.6667 28.8753 33.7113 28.8753 35C28.8753 36.2887 27.8307 37.3333 26.542 37.3333Z" fill="currentColor"/>
807  <path d="M40.542 35C40.542 36.2887 41.5867 37.3333 42.8753 37.3333C44.164 37.3333 45.2087 36.2887 45.2087 35C45.2087 33.7113 44.164 32.6667 42.8753 32.6667C41.5867 32.6667 40.542 33.7113 40.542 35Z" fill="currentColor"/>
808  <path d="M37.3337 25.6667C37.3337 26.9553 38.3783 28 39.667 28C40.9557 28 42.0003 26.9553 42.0003 25.6667C42.0003 24.378 40.9557 23.3333 39.667 23.3333C38.3783 23.3333 37.3337 24.378 37.3337 25.6667Z" fill="currentColor"/>
809 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </div> <div class="nav-card-bottom"> <span class="nav-card-title">Workflow</span> <span class="nav-card-description">Workflow Automation Platform</span> </div> </div> </a><a target="_self" rel="noopener noreferrer" class="nav-card-container" href="/low-code/"> <div id="tnb-low-code" class="nav-card"> <div class="nav-card-top">   <img src="/_astro/Low-Code.Dn4vg-NJ_ZdG5ct.webp" alt="Integrations" loading="lazy" decoding="async" srcset="/_astro/Low-Code.Dn4vg-NJ_2r6xkd.webp 480w, /_astro/Low-Code.Dn4vg-NJ_ZdG5ct.webp 660w" sizes="100vw" width="660" height="400" class="nav-card-image"> <div class="nav-card-svg"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
810  <path d="M35.0003 18.6667C36.289 18.6667 37.3337 17.622 37.3337 16.3333C37.3337 15.0447 36.289 14 35.0003 14C33.7117 14 32.667 15.0447 32.667 16.3333C32.667 17.622 33.7117 18.6667 35.0003 18.6667Z" fill="currentColor"/>
811  <path d="M37.3337 25.6667C37.3337 26.9553 36.289 28 35.0003 28C33.7117 28 32.667 26.9553 32.667 25.6667C32.667 24.378 33.7117 23.3333 35.0003 23.3333C36.289 23.3333 37.3337 24.378 37.3337 25.6667Z" fill="currentColor"/>
812  <path d="M37.3337 53.6667C37.3337 54.9553 36.289 56 35.0003 56C33.7117 56 32.667 54.9553 32.667 53.6667C32.667 52.378 33.7117 51.3333 35.0003 51.3333C36.289 51.3333 37.3337 52.378 37.3337 53.6667Z" fill="currentColor"/>
813  <path d="M21.0003 42C22.289 42 23.3337 43.0447 23.3337 44.3333C23.3337 45.622 22.289 46.6667 21.0003 46.6667C19.7117 46.6667 18.667 45.622 18.667 44.3333C18.667 43.0447 19.7117 42 21.0003 42Z" fill="currentColor"/>
814  <path d="M30.217 49.1166C30.217 47.828 29.1724 46.7833 27.8837 46.7833C26.595 46.7833 25.5504 47.828 25.5504 49.1166C25.5504 50.4053 26.595 51.45 27.8837 51.45C29.1724 51.45 30.217 50.4053 30.217 49.1166Z" fill="currentColor"/>
815  <path d="M49.0003 42C47.7117 42 46.667 43.0447 46.667 44.3333C46.667 45.622 47.7117 46.6667 49.0003 46.6667C50.289 46.6667 51.3337 45.622 51.3337 44.3333C51.3337 43.0447 50.289 42 49.0003 42Z" fill="currentColor"/>
816  <path d="M39.7836 49.1166C39.7836 47.828 40.8283 46.7833 42.117 46.7833C43.4056 46.7833 44.4503 47.828 44.4503 49.1166C44.4503 50.4053 43.4056 51.45 42.117 51.45C40.8283 51.45 39.7836 50.4053 39.7836 49.1166Z" fill="currentColor"/>
817  <path d="M35.0003 37.3333C36.289 37.3333 37.3337 36.2887 37.3337 35C37.3337 33.7113 36.289 32.6667 35.0003 32.6667C33.7117 32.6667 32.667 33.7113 32.667 35C32.667 36.2887 33.7117 37.3333 35.0003 37.3333Z" fill="currentColor"/>
818  <path d="M37.217 44.3333C37.217 45.622 36.1724 46.6667 34.8837 46.6667C33.595 46.6667 32.5504 45.622 32.5504 44.3333C32.5504 43.0447 33.595 42 34.8837 42C36.1724 42 37.217 43.0447 37.217 44.3333Z" fill="currentColor"/>
819 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </div> <div class="nav-card-bottom"> <span class="nav-card-title">Integrations</span> <span class="nav-card-description">IT Document Solutions</span> </div> </div> </a> </div>  </div>  </section> </div> 
819<script type="module">document.addEventListener("DOMContentLoaded",()=>{const n=document.querySelector(".header"),a=document.querySelector("#top-nav-bar"),f=document.querySelector("main"),d=document.querySelector(".right-aside"),l=50;let o=!1,r=!1,e=null,v=!0;document.body.setAttribute("data-is-header-expanded","true"),n&&(n.style.transition="transform 0.3s ease-out"),f&&(f.style.transition="transform 0.3s ease-out");const p=a?a.getBoundingClientRect().height:0,h=document.querySelector(".banner-announcement"),y=h?h.getBoundingClientRect().height:0,s=document.querySelector(".header-nav-wrapper");s&&s.classList.add("header-transition");function i(t){if(v===t)return;v=t;const L=p+y;n&&requestAnimationFrame(()=>{n.style.transform=t?"translateY(0)":`translateY(-${L}px)`}),requestAnimationFrame(()=>{s&&(t?(s.classList.add("header-expanded"),s.classList.remove("header-collapsed"),document.body.setAttribute("data-is-header-expanded","true"),requestAnimationFrame(()=>{d&&(d.style.transform="translateY(0)")})):(s.classList.add("header-collapsed"),s.classList.remove("header-expanded"),document.body.setAttribute("data-is-header-expanded","false"),d&&(d.style.transform=`translateY(-${L}px)`)));const u=document.querySelector(".full-logo"),m=document.querySelector(".symbol-logo");u&&m&&setTimeout(()=>{requestAnimationFrame(()=>{t?(u.classList.remove("navbar-hidden"),m.classList.remove("navbar-hidden")):(u.classList.add("navbar-hidden"),m.classList.add("navbar-hidden"))})},150)})}a&&(a.addEventListener("mouseenter",()=>{r=!0,e&&clearTimeout(e),e=setTimeout(()=>{r&&requestAnimationFrame(()=>{a.classList.add("nav-expanded")}),e=null},400)}),a.addEventListener("mouseleave",()=>{r=!1,e&&(clearTimeout(e),e=null),o||requestAnimationFrame(()=>{a.classList.remove("nav-expanded")})})),n&&(n.addEventListener("mouseenter",()=>{o=!0}),n.addEventListener("mouseleave",()=>{o=!1,!r&&a&&(e&&(clearTimeout(e),e=null),requestAnimationFrame(()=>{a.classList.remove("nav-expanded")})),window.scrollY>l&&i(!1)}));let c=null;const g=10;window.addEventListener("scroll",()=>{c&&clearTimeout(c),c=setTimeout(()=>{const t=window.scrollY;if(t===0){i(!0);return}!o&&!r&&t>l&&i(!1)},g)},{passive:!0}),document.addEventListener("click",t=>{t.target?.closest('a[id^="toc-"]')&&(i(!1),setTimeout(()=>{window.scrollY<=l&&!o&&!r&&i(!0)},500))})});</script>
819 <!-- Script to get the active nav card (with the white background) --> 
819<script>(function(){const lobType = "nutrient";
820
821  /* global lobType */
822  const lob = lobType;
823
824  document.addEventListener("DOMContentLoaded", () => {
825    const activeNavItem = document.getElementById(`tnb-${lob}`);
826
827    if (activeNavItem) {
828      // add is-active to nav-card
829      activeNavItem.classList.add("is-active");
830
831      // add is-active to nav-card-bottom
832      const navCardBottom = activeNavItem.querySelector(".nav-card-bottom");
833      navCardBottom?.classList.add("is-active");
834    }
835  });
836})();</script>
836 <div class="main-nav-wrapper"> <section class="section-spacing-horizontal-default">   <div class="container-large container-spacing-horizontal-default !py-0">   <div class="header-nav-wrapper header-expanded"> <div class="nav-nutrient-logo-wrapper"> <a href="/" class="nav-nutrient-logo" aria-label="Nutrient Logo"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 208 36" width="100%" height="100%" class="full-logo hidden md:flex" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
837<path d="M4.1524 22.1521C1.8582 22.1521 0 20.2939 0 17.9997C0 15.7055 1.8582 13.8473 4.1524 13.8473C6.44659 13.8473 8.30479 15.7055 8.30479 17.9997C8.30479 20.2939 6.44659 22.1521 4.1524 22.1521ZM45.6763 13.8473C43.3821 13.8473 41.524 15.7055 41.524 17.9997C41.524 20.2939 43.3821 22.1521 45.6763 22.1521C47.9705 22.1521 49.8287 20.2939 49.8287 17.9997C49.8287 15.7055 47.9705 13.8473 45.6763 13.8473ZM6.34071 28.1647C4.58424 29.6388 4.35379 32.259 5.82789 34.0154C7.30199 35.7719 9.92215 36.0024 11.6786 34.5283C13.4351 33.0542 13.6655 30.434 12.1914 28.6775C10.7173 26.9211 8.09717 26.6906 6.34071 28.1647ZM43.488 7.8346C45.2445 6.3605 45.475 3.74033 44.0009 1.98387C42.5268 0.227407 39.9066 -0.0030509 38.1501 1.47105C36.3937 2.94515 36.1632 5.56531 37.6373 7.32177C39.1114 9.07824 41.7316 9.3087 43.488 7.8346ZM11.6786 1.47313C9.92215 -0.000974749 7.30199 0.227407 5.82789 1.98595C4.35379 3.74449 4.58217 6.36257 6.34071 7.83667C8.09925 9.31077 10.7173 9.08239 12.1914 7.32385C13.6655 5.56531 13.4372 2.94723 11.6786 1.47313ZM43.488 28.1647C41.7316 26.6906 39.1114 26.919 37.6373 28.6775C36.1632 30.434 36.3916 33.0542 38.1501 34.5283C39.9066 36.0024 42.5268 35.774 44.0009 34.0154C45.475 32.259 45.2466 29.6388 43.488 28.1647ZM32.8849 19.2661C31.1284 17.792 28.5083 18.0204 27.0342 19.779C25.5601 21.5375 25.7884 24.1556 27.547 25.6297C29.3055 27.1038 31.9236 26.8754 33.3977 25.1169C34.8718 23.3583 34.6434 20.7402 32.8849 19.2661ZM22.2818 10.3696C20.5253 8.89553 17.9051 9.12391 16.431 10.8825C14.9569 12.641 15.1853 15.2591 16.9438 16.7332C18.7024 18.2073 21.3205 17.9789 22.7946 16.2204C24.2687 14.4618 24.0403 11.8437 22.2818 10.3696Z" fill="currentColor"></path>
838<path d="M83.2482 4.00294H86.8124V32.0934H82.7174L73.1011 15.2088C72.579 14.2696 71.494 12.1667 69.849 8.90002H69.8111C69.8636 10.1017 69.9103 11.4113 69.9482 12.8288C69.9861 14.2463 70.0065 15.3079 70.0065 16.0109V32.0934H66.4424V4.00294H70.4382L80.0749 20.6921C80.559 21.5292 81.434 23.1654 82.6999 25.6096L83.4057 26.96H83.4436C83.3911 25.8896 83.3445 24.6559 83.3065 23.2588C83.2686 21.8617 83.2482 20.7388 83.2482 19.89V4.00294ZM104.254 23.2996C104.254 27.4792 102.53 29.5675 99.0828 29.5675C98.3128 29.5675 97.639 29.4975 97.0645 29.3604C96.4899 29.2234 95.9474 28.9054 95.4399 28.4096C95.0607 28.045 94.7865 27.6279 94.6174 27.1671C94.4482 26.7034 94.3461 26.2396 94.314 25.7759C94.282 25.3121 94.2645 24.6617 94.2645 23.8275V12.0354H90.5428V24.0229C90.5428 24.9621 90.572 25.7788 90.6303 26.4729C90.6886 27.1671 90.8374 27.8525 91.0707 28.5409C91.304 29.2292 91.6657 29.8242 92.147 30.3346C92.8645 31.1046 93.7074 31.6734 94.6728 32.0379C95.6382 32.4025 96.7757 32.5863 98.0824 32.5863C99.5203 32.5863 100.772 32.2859 101.842 31.685C102.912 31.0842 103.714 30.2238 104.251 29.0979V32.0963H107.856V12.0354H104.251V23.2996H104.254ZM118.677 6.45294H115.113V12.0354H110.901V15.0513H115.113V27.1584C115.113 28.9725 115.603 30.2821 116.583 31.0871C117.563 31.8921 119.141 32.2917 121.322 32.2917C121.871 32.2917 122.416 32.2625 122.959 32.2042C123.501 32.1459 123.947 32.07 124.3 31.9796L124.222 28.6896C123.215 28.9259 122.346 29.0425 121.617 29.0425C120.888 29.0425 120.275 28.9871 119.864 28.8763C119.453 28.7654 119.152 28.5671 118.963 28.2784C118.773 27.9896 118.68 27.5784 118.68 27.0446V15.0571H124.379V12.0413H118.68V6.45294H118.677ZM134.73 12.9746C133.456 13.7329 132.63 14.6721 132.251 15.795V12.0354H128.646V32.0934H132.251V22.9059C132.251 20.8029 132.563 19.1638 133.19 17.9884C133.817 16.8129 134.666 16.0079 135.737 15.5704C136.807 15.1329 138.108 14.9142 139.633 14.9142C140.246 14.9142 140.666 14.9346 140.887 14.9725L140.966 11.5454C140.103 11.5454 139.5
83854 11.5571 139.321 11.5834C137.53 11.7525 136.002 12.2163 134.727 12.9746H134.73ZM170.287 18.5979C170.588 19.785 170.737 21.0217 170.737 22.2992C170.737 22.6784 170.731 22.9584 170.716 23.1421H155.497C155.535 25.35 156.025 26.9921 156.967 28.0684C157.906 29.1446 159.318 29.6842 161.199 29.6842C162.897 29.6842 164.215 29.3167 165.157 28.5788C166.099 27.8409 166.691 26.715 166.939 25.1984L170.424 25.4725C169.981 27.8088 168.978 29.5792 167.417 30.7809C165.857 31.9825 163.798 32.5834 161.237 32.5834C158.154 32.5834 155.754 31.6034 154.027 29.6463C152.394 27.8175 151.577 25.2771 151.577 22.025C151.577 20.5229 151.79 19.1346 152.213 17.8629C152.636 16.5884 153.269 15.4888 154.103 14.5613C154.978 13.5696 156.016 12.8171 157.218 12.3096C158.419 11.7992 159.744 11.5454 161.193 11.5454C162.812 11.5454 164.32 11.8896 165.717 12.575C167.114 13.2604 168.217 14.2434 169.027 15.5238C169.564 16.3871 169.981 17.4109 170.282 18.5979H170.287ZM167.015 20.2225C167.003 19.6479 166.898 19.0238 166.703 18.3529C166.507 17.6821 166.254 17.1163 165.939 16.6584C165.428 15.9 164.792 15.3488 164.028 15.0017C163.264 14.6546 162.334 14.4825 161.237 14.4825C160.14 14.4825 159.181 14.675 158.358 15.06C157.536 15.445 156.92 15.9788 156.518 16.6554C156.177 17.2038 155.934 17.7929 155.783 18.4171C155.634 19.0442 155.549 19.645 155.538 20.2196H167.018L167.015 20.2225ZM190.672 15.6113C190.444 14.9113 190.094 14.3075 189.625 13.8C188.893 13.03 188.044 12.4613 187.079 12.0967C186.113 11.7321 184.97 11.5484 183.652 11.5484C180.583 11.5484 178.518 12.7354 177.462 15.1125V12.0384H173.857V32.0963H177.462V21.0275C177.462 18.5075 178.005 16.7984 179.087 15.9059C180.172 15.0104 181.371 14.5642 182.692 14.5642C183.436 14.5642 184.089 14.6342 184.652 14.7713C185.212 14.9084 185.749 15.2263 186.259 15.7221C186.638 16.0867 186.915 16.5067 187.09 16.9763C187.265 17.4459 187.37 17.9184 187.402 18.3967C187.434 18.8721 187.452 19.5371 187.452 20.3859V32.0992H191.194V20.1904C191.194 19.2367 191.165 18.4113 191.107 17.7113C191.048 17.0113 190.902 16.3142 190.675 15.6142L190.672 15.6113ZM207.338 15.0513V12.0354H201.639V6.45294H198.074V12.0354H193.863V15.0513H198.074V27.1584C198.074 28.9725 198.564 30.2821 199.544 31.0871C200.524 31.8921 202.102 32.2917 204.284 32.2917C204.832 32.2917 205.378 32.2625 205.92 32.2042C206.463 32.1459 206.909 32.07 207.262 31.9796L207.183 28.6896C206.177 28.9259 205.308 29.0425 204.579 29.0425C203.849 29.0425 203.237 28.9871 202.826 28.8763C202.414 28.7654 202.114 28.5671 201.924 28.2784C201.735 27.9896 201.642 27.5784 201.642 27.0446V15.0571H2
83807.341L207.338 15.0513ZM144.557 32.1225H148.162V12.0646H144.557V32.1225ZM146.359 3.41669C144.904 3.41669 143.725 4.59502 143.725 6.05044C143.725 7.50585 144.904 8.68419 146.359 8.68419C147.814 8.68419 148.993 7.50585 148.993 6.05044C148.993 4.59502 147.814 3.41669 146.359 3.41669Z" fill="currentColor"></path>
839 </svg><!-- Define styles for the SVG element with the provided color and size --> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 50 36" width="50" height="36" class="symbol-logo flex md:hidden" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
840<path d="M4.1524 22.1521C1.8582 22.1521 0 20.2939 0 17.9997C0 15.7055 1.8582 13.8473 4.1524 13.8473C6.44659 13.8473 8.30479 15.7055 8.30479 17.9997C8.30479 20.2939 6.44659 22.1521 4.1524 22.1521ZM45.6763 13.8473C43.3821 13.8473 41.524 15.7055 41.524 17.9997C41.524 20.2939 43.3821 22.1521 45.6763 22.1521C47.9705 22.1521 49.8287 20.2939 49.8287 17.9997C49.8287 15.7055 47.9705 13.8473 45.6763 13.8473ZM6.34071 28.1647C4.58424 29.6388 4.35379 32.259 5.82789 34.0154C7.30199 35.7719 9.92215 36.0024 11.6786 34.5283C13.4351 33.0542 13.6655 30.434 12.1914 28.6775C10.7173 26.9211 8.09717 26.6906 6.34071 28.1647ZM43.488 7.8346C45.2445 6.3605 45.475 3.74033 44.0009 1.98387C42.5268 0.227407 39.9066 -0.0030509 38.1501 1.47105C36.3937 2.94515 36.1632 5.56531 37.6373 7.32177C39.1114 9.07824 41.7316 9.3087 43.488 7.8346ZM11.6786 1.47313C9.92215 -0.000974749 7.30199 0.227407 5.82789 1.98595C4.35379 3.74449 4.58217 6.36257 6.34071 7.83667C8.09925 9.31077 10.7173 9.08239 12.1914 7.32385C13.6655 5.56531 13.4372 2.94723 11.6786 1.47313ZM43.488 28.1647C41.7316 26.6906 39.1114 26.919 37.6373 28.6775C36.1632 30.434 36.3916 33.0542 38.1501 34.5283C39.9066 36.0024 42.5268 35.774 44.0009 34.0154C45.475 32.259 45.2466 29.6388 43.488 28.1647ZM32.8849 19.2661C31.1284 17.792 28.5083 18.0204 27.0342 19.779C25.5601 21.5375 25.7884 24.1556 27.547 25.6297C29.3055 27.1038 31.9236 26.8754 33.3977 25.1169C34.8718 23.3583 34.6434 20.7402 32.8849 19.2661ZM22.2818 10.3696C20.5253 8.89553 17.9051 9.12391 16.431 10.8825C14.9569 12.641 15.1853 15.2591 16.9438 16.7332C18.7024 18.2073 21.3205 17.9789 22.7946 16.2204C24.2687 14.4618 24.0403 11.8437 22.2818 10.3696Z" fill="currentColor"></path>
841 </svg><!-- Define styles for the SVG element with the provided color and size -->  <span class="team-badge" style="display: none;">T</span> </a> </div>  <nav class="header-main-nav"> <div class="header-main-nav-trigger"> <button data-collapse-toggle="mega-menu" data-mobile-menu-toggle type="button" class="" aria-controls="mega-menu" aria-expanded="false"> <span class="sr-only">Open main menu</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="mobile-menu-icon-hamburger" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
842  <path fill="currentColor" d="M6 10.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 5a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm5-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm5-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm5-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-1 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"/>
843 </svg><!-- Define styles for the SVG element with the provided color and size --> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="mobile-menu-icon-close hidden" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
844  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
845 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div>
845 <!-- Global Search Trigger (desktop only, hidden on mobile) --> <div class="header-search-trigger"> <button id="global-search-trigger" type="button" class="btn btn-ghost btn-icon" aria-label="Open search" aria-expanded="false" data-global-search-trigger> <span class="sr-only">Open search</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
846  <path fill="currentColor" d="M13 4a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm8-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM8 15a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm2-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2ZM8 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm10 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm-5 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm7-5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 6a1 1 0 1 0 2 0 1 1 0 0 0-2 0Zm-1 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
847 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div> <div id="mega-menu" class="main-nav-group hidden" data-mega-menu-root> <!-- Mobile Search Trigger (only visible on mobile) --><div class="mobile-search-trigger mt-spacing-md lg:hidden"> <div class="search-input-container-base mobile-search-input-container"> <div class="search-input-icon-base mobile-search-input-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
848  <path fill="currentColor" d="M13 4a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm8-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM8 15a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm2-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2ZM8 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm10 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm-5 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm7-5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 6a1 1 0 1 0 2 0 1 1 0 0 0-2 0Zm-1 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
849 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <input type="text" class="search-input-base mobile-search-input" placeholder="Search or ask a question" data-global-search-trigger readonly> </div> </div> <!-- Please keep hidden and flex since they are used for dropdown --> <ul class="main-nav-group-list"> <!-- Products Mega Menu --><li class="main-nav-group-list-item"> <div id="products-button" data-dropdown-toggle="products-mega-menu" data-dropdown-trigger="hover" data-dropdown-delay="0" data-dropdown-offset-distance="0" class="main-nav-item"> <span>Products</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="nav-arrow" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
850<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
851<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
852<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
853<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
854<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
855 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div id="products-mega-menu" class="main-nav-dropdown-wrapper hidden" aria-labelledby="products-button"> <div class="main-nav-dropdown-grid min-w-full lg:min-w-[1050px]">   <div class="main-nav-dropdown-grid-column"> <a class="main-nav-dropdown-title" href="/sdk/"> SDK Overview <div class="main-nav-item-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
856  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
857 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </a> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/sdk/web/">  Web  </a> </li><li> <a href="/sdk/ai-document-processing/">  AI Document Processing  </a> </li><li> <a href="/sdk/ai-assistant/">  AI Assistant  </a> </li><li> <a href="/sdk/document-authoring/">  Document Authoring  </a> </li><li> <a href="/sdk/mobile-overview/">  Mobile  </a> </li><li> <a href="/sdk/document-engine/">  Document Engine  </a> </li><li> <a href="/sdk/dotnet/">  .NET  </a> </li> </ul> </div>  <div role="separator"> <span class="main-nav-dropdown-vertical-separator"></span> </div> <div class="main-nav-dropdown-grid-column"> <a class="main-nav-dropdown-title" href="/api/"> Cloud Overview <div class="main-nav-item-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
858  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
859 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </a> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/api/processor-api/">  DWS Processor API  </a> </li><li> <a href="/api/data-extraction-api/">  DWS Data Extraction API <span class="tag ml-auto"> New </span>
859<script type="module">document.addEventListener("DOMContentLoaded",()=>{const t=document.querySelectorAll(".tag-filter");t.length>0&&t.forEach(e=>{e.addEventListener("click",n=>{e.getAttribute("href")||(n.preventDefault(),e.classList.toggle("active"))})})});</script>
859 </a> </li><li> <a href="/api/accessibility-api/">  DWS Accessibility API  </a> </li><li> <a href="/api/viewer-api/">  DWS Viewer API  </a> </li> </ul> </div>  <div role="separator"> <span class="main-nav-dropdown-vertical-separator"></span> </div> <div class="main-nav-dropdown-grid-column"> <a class="main-nav-dropdown-title" href="/low-code/"> Integrations Overview <div class="main-nav-item-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
860  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
861 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </a> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/low-code/document-converter/">  Document Converter  </a> </li><li> <a href="/low-code/document-editor/">  Document Editor  </a> </li><li> <a href="/low-code/document-searchability/">  Document Searchability  </a> </li><li> <a href="/low-code/integrations/salesforce/">  Salesforce  </a> </li><li> <a href="/low-code/integrations/servicenow/">  ServiceNow  </a> </li> </ul> </div>  <div role="separator"> <span class="main-nav-dropdown-vertical-separator"></span> </div> <div class="main-nav-dropdown-grid-column"> <a class="main-nav-dropdown-title" href="/workflow-automation/"> Workflow Platform <div class="main-nav-item-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
862  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
863 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> </a> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/workflow-automation/process-builder/">  Process Builder  </a> </li><li> <a href="/workflow-automation/form-designer/">  Form Designer  </a> </li><li> <a href="/workflow-automation/document-generation/">  Office Templating  </a> </li> </ul> </div>  </div> </div> </li> <!-- Document AI Dropdown --> <li class="main-nav-group-list-item"> <div id="aisolutions-button" data-dropdown-toggle="aisolutions-dropdown" data-dropdown-trigger="hover" data-dropdown-delay="0" data-dropdown-offset-distance="0" class="main-nav-item"> <span>Document AI</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="nav-arrow" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
864<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
865<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
866<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
867<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
868<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
869 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div id="aisolutions-dropdown" class="main-nav-dropdown-wrapper hidden" aria-labelledby="aisolutions-button"> <div class="main-nav-dropdown-grid lg:min-w-[1100px]">   <div class="main-nav-dropdown-grid-column"> <span class="main-nav-dropdown-title">Start here</span> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/document-ai/">  Document AI overview  </a> </li><li> <a href="/api/data-extraction-api/">  Data Extraction API <span class="tag ml-auto"> New </span> </a> </li> </ul> </div>  <div role="separator"> <span class="main-nav-dropdown-vertical-separator"></span> </div> <div class="main-nav-dropdown-grid-column"> <span class="main-nav-dropdown-title">Govern and Review</span> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/document-ai/governance/">  Governance and Trust  </a> </li><li> <a href="/workflow-automation/ai-agents/">  Workflow Agents  </a> </li><li> <a href="/ai/agents/">  Enterprise Document Agents <span class="tag ml-auto"> Early access </span> </a> </li><li> <a href="/sdk/ai-assistant/">  AI Assistant  </a> </li> </ul> </div>  <div role="separator"> <span class="main-nav-dropdown-vertical-separator"></span> </div> <div class="main-nav-dropdown-grid-column"> <span class="main-nav-dropdown-title">Build with us</span> <div class="main-nav-title-separator-wrapper" role="separator"> <span class="main-nav-title-separator"></span> </div> <ul class="main-nav-dropdown-list"> <li> <a href="/api/mcp-server-pdf-automation-llm/">  MCP Server  </a> </li><li>
869 <a href="/ai/infrastructure/">  Build your own agent  </a> </li><li> <a href="/ai/models/">  Open models and benchmarks <span class="tag ml-auto"> New </span> </a> </li><li> <a href="/ai/skills/pdf-to-markdown/">  PDF-to-Markdown skill and CLI  </a> </li><li> <a href="/ai/skills/make-pdf/">  Make PDF skill <span class="tag ml-auto"> New </span> </a> </li><li> <a href="/ai/skills/remediate-pdf/">  Remediate PDF skill <span class="tag ml-auto"> New </span> </a> </li> </ul> </div>  </div> </div> </li> <!-- Developers --> <li class="main-nav-group-list-item"> <a class="main-nav-item" href="/sdk/developers/"> <span>Developers</span> </a> </li> <!-- Company Dropdown --> <li class="main-nav-group-list-item"> <div id="company-button" data-dropdown-toggle="company-dropdown" data-dropdown-trigger="hover" data-dropdown-delay="0" data-dropdown-offset-distance="0" class="main-nav-item"> <span>Company</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="nav-arrow" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
870<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
871<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
872<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
873<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
874<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
875 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div id="company-dropdown" class="main-nav-dropdown-wrapper hidden"> <ul class="main-nav-dropdown-list" aria-labelledby="company-button"> <li> <a href="/company/about/">  About  </a> </li><li> <a href="/company/team/">  Team  </a> </li><li> <a href="/company/careers/">  Careers  </a> </li><li> <a href="/partners/">
875  Partners  </a> </li><li> <a href="/company/contact/">  Contact  </a> </li><li> <a href="/blog/news/">  News  </a> </li> </ul> </div> </li> <!-- Resources Section --> <li class="main-nav-group-list-item"> <div id="resources-button" data-dropdown-toggle="resources" data-dropdown-trigger="hover" data-dropdown-delay="0" data-dropdown-offset-distance="0" class="main-nav-item"> <span>Resources</span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="nav-arrow" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
876<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
877<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
878<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
879<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
880<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
881 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div id="resources" class="main-nav-dropdown-wrapper hidden"> <ul class="main-nav-dropdown-list" aria-labelledby="resources-button">   <li role="none"> <a href="/blog/" class="nav-link" role="menuitem">  Blog  </a> </li><li role="none"> <a href="/events/" class="nav-link" role="menuitem">  Events  </a> </li><li role="none"> <a href="/blog/categories/customer-stories/" class="nav-link" role="menuitem">  Customer stories  </a> </li><li role="none"> <a href="/newsletter/" class="nav-link" role="menuitem">  Newsletter  </a> </li> <li role="separator"> <span class="main-nav-dropdown-separator"></span> </li>  <li role="none"> <span class="main-nav-dropdown-title">Accessibility</span> </li> <li role="none"> <a href="/solutions/pdf-accessibility/" class="nav-link" role="menuitem">  PDF accessibility hub  </a> </li><li role="none"> <a href="/blog/pdf-ua-compliance-guide/" class="nav-link" role="menuitem">  PDF/UA compliance guide  </a> </li>   </ul> </div> </li> </ul> <ul class="main-nav-group-list main-nav-group-wrapper-mobile"> <li class="main-nav-group-list-item flex md:hidden"> <div class="main-nav-item"> <a class="btn btn-secondary" id="main-nav-trial-cta" href="/try/" aria-current="page"> Try for free </a> </div> </li> <li class="main-nav-group-list-item flex sm:hidden"> <div class="main-nav-item"> <a class="btn btn-primary" id="main-nav-contact-cta" href="/contact-sales/" aria-current="page"> Contact Sales </a> </div> </li> </ul> </div> <div class="main-nav-group main-nav-group-wrapper"> <ul class="main-nav-group-list main-nav-group-wrapper-desktop"> <li class="main-nav-group-list-item hidden md:flex"> <div class="main-nav-item"> <a class="btn btn-secondary" id="main-nav-trial-cta" href="/try/" aria-current="page"> Try for free </a> </div> </li> <li class="main-nav-group-list-item hidden sm:flex"> <div class="main-nav-item"> <a class="btn btn-primary" id="main-nav-contact-cta" href="/contact-sales/" aria-current="page"> Contact Sales </a> </div> </li> </ul> </div> </nav> </div>  </div>  </section> </div> </header> <!-- Global Search Drawer --> <!-- Global Search Drawer --><div id="global-search-drawer-ecm2u5jfe" class="global-search-drawer" role="dialog" aria-modal="true" aria-label="Search" data-drawer-id="global-search-drawer-ecm2u5jfe" data-max-results="50" data-debounce-delay="300" data-current-path="/blog/news/" data-enable-shortcuts="true" data-filters="[{&quot;id&quot;:&quot;blog&quot;,&quot;label&quot;:&quot;Blog&quot;,&quot;value&quot;:&quot;blog&quot;,&quot;selected&quot;:false},{&quot;id&quot;:&quot;guides&quot;,&quot;label&quot;:&quot;Guides&quot;,&quot;value&quot;:&quot;guides&quot;,&quot;selected&quot;:false},{&quot;id&quot;:&quot;api-reference&quot;,&quot;label&quot;:&quot;API Reference&quot;,&quot;value&quot;:&quot;api-reference&quot;,&quot;selected&quot;:false}]"> <section class="section-spacing-horizontal-default !py-0 global-search-drawer-inner !pt-spacing-2xs !lg:pt-0 lg:!my-container-spacing-vertical-medium">    <button type="button" class="close-btn-base focus-ring-base global-search-close-btn-desktop" aria-label="Close search" data-close-btn-desktop> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
882  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
883 </svg><!-- Define styles for the SVG element with the provided color and size --> </button>  <div class="container-large radius-container container-spacing-horizontal-default container-spacing-vertical-large !pt-0 global-search-container">   <div class="global-search-layout"> <!-- Main Content Area --><main class="global-search-main"> <!-- Using div instead of h1 to avoid duplicate H1s across all pages for SEO --><div class="global-search-title heading-1">Search</div> <!-- Search Input with Tags --> <div class="global-search-input-wrapper"> <div class="search-input-container-base global-search-input-container" data-input-container> <div class="search-input-icon-base global-search-input-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
884  <path fill="currentColor" d="M13 4a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm8-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM8 15a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm2-10a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm6 12a1 1 0 1 1 0-2 1 1 0 0 1 0 2ZM8 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm10 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm-5 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm7-5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 6a1 1 0 1 0 2 0 1 1 0 0 0-2 0Zm-1 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
885 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <!-- Filter tags will be inserted here dynamically --> <div data-tags-container class="contents"></div> <input type="text" id="global-search-drawer-ecm2u5jfe-input" class="search-input-base global-search-input" placeholder="Search or ask a question" autocomplete="off" aria-label="Search" aria-expanded="false" aria-controls="global-search-drawer-ecm2u5jfe-results" aria-autocomplete="list" data-search-input> <button type="button" class="focus-ring-base global-search-clear-btn" aria-label="Clear search" data-clear-btn style="display: none;"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
886  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
887 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div> </div> <!-- Action Buttons (UI only) --> <div class="global-search-actions" data-actions> <button type="button" class="focus-ring-base global-search-filter-pill" data-ask-ai-btn>
888ASK AI
889</button> <button type="button" class="focus-ring-base global-search-filter-pill" data-code-examples-btn>
890SEARCH CODE EXAMPLES
891</button> </div> <!-- Results Header (outside scroll container) --> <!-- Using div instead of h2 to avoid repetitive headings across all pages for SEO --> <div class="section-title-base global-search-results-header" data-results-header style="display: none;">
892RESULTS
893</div> <!-- Scrollable Results + AI Container Wrapper --> <div class="global-search-scroll-wrapper"> <div class="global-search-scroll-container" data-scroll-container> <!-- Results Section --><div id="global-search-drawer-ecm2u5jfe-results" class="global-search-results" role="listbox" aria-label="Search results" data-results-container><!-- Dynamic results will be inserted here --></div> <!-- ASK AI ASSISTANT Section (UI Shell) --> <div class="global-search-ai-section" data-ai-section style="display: none;"> <!-- Using div instead of h2 to avoid repetitive headings across all pages for SEO --><div class="section-title-base global-search-ai-header">
894ASK AI ASSISTANT
895</div> <div data-ai-suggestions><!-- AI suggestions will be inserted here --></div> </div> </div> </div> <!-- Mobile Navigation (shown when input not focused) --> <div class="global-search-mobile-nav" data-mobile-nav><!-- Mobile navigation will be cloned from header on mobile --></div> </main> <!-- Sidebar (Desktop Only) --> <aside class="global-search-sidebar" data-sidebar> <!-- Suggested Filters (all filter types combined) --><div class="global-search-filters-section"> <!-- Using div instead of h2 to avoid repetitive headings across all pages for SEO --><div class="section-title-base global-search-filters-title">
896SUGGESTED FILTERS
897</div> <div class="global-search-filters-list" data-filters-container><!-- All filter pills will be inserted here dynamically --></div> </div> <!-- Other Ways to Connect --> <div class="global-search-contact-section"> <!-- Using div instead of h2 to avoid repetitive headings across all pages for SEO --><div class="section-title-base global-search-contact-title">
898OTHER WAYS TO CONNECT
899</div> <div class="link-button-list link-button-list">  <a href="#" target="_self" data-target="_self" data-modal-trigger="global-search-schedule-modal" tabindex="0" class="link-button link-button-primary border-b border-neutral-default-primary !px-0 !py-s
899pacing-sm" modalTrigger="global-search-schedule-modal"> <div class="link-button-content">  <span class="link-button-text">Schedule a call</span>  </div> <span class="shrink-0 text-neutral-primary"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
900  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
901 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a>
901<script type="module" src="/_astro/LinkButton.astro_astro_type_script_index_0_lang.BHoFg1U6.js"></script>
901 <a href="mailto:[email protected]" target="_self" data-url="mailto:[email protected]" data-target="_self" tabindex="0" class="link-button link-button-primary border-b border-neutral-default-primary !px-0 !py-spacing-sm" url="mailto:[email protected]"> <div class="link-button-content">  <span class="link-button-text">Email Sales</span>  </div> <span class="shrink-0 text-neutral-primary"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
902  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
903 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <a href="https://support.nutrient.io/hc/en-us/requests/new" target="_blank" rel="noopener noreferrer" data-url="https://support.nutrient.io/hc/en-us/requests/new" data-target="_blank" data-rel="noopener noreferrer" tabindex="0" class="link-button link-button-primary border-b border-neutral-default-primary !px-0 !py-spacing-sm" url="https://support.nutrient.io/hc/en-us/requests/new" data-dynamic-link="technical-support"> <div class="link-button-content">  <span class="link-button-text">Technical support</span>  </div> <span class="shrink-0 text-neutral-primary"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
904  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
905 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a>  </div> <!-- Schedule Call Modal --> <div id="global-search-schedule-modal" class="modal-container modal-closed [&amp;_.modal-close-button]:!hidden" role="dialog" aria-modal="true" aria-label="Schedule a call with our Sales team" data-modal> <div class="modal-content modal-content-closed p-0 !h-auto max-h-[90vh] !overflow-y-auto !radius-container" style="max-width: min(720px, 92vw); max-height: 90vh; width: min(720px, 92vw); height: 90vh;" data-modal-content> <!-- Modal content slot --><div class="modal-slot">  <div class="bg-neutral-default-tertiary px-spacing-sm md:px-spacing-md lg:px-spacing-lg py-spacing-sm md:py-spacing-md lg:py-spacing-lg"> <div class="flex flex-col gap-spacing-2xl"> <div class="flex items-center justify-between w-full gap-spacing-2xl"> <span class="heading-2 text-neutral-primary">Schedule a call</span> <button type="button" class="btn btn-secondary btn-icon-center border-none" data-modal-close aria-label="Close schedule a call modal"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
906  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
907 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div> <form id="global-search-schedule-modal-form" method="POST" novalidate class="flex flex-col gap-spacing-lg" data-hubspot-config="{&quot;portalId&quot;:&quot;145134102&quot;,&quot;formId&quot;:&quot;a1391a6c-0e51-43c2-9ce2-3650e4793f83&quot;,&quot;region&quot;:&quot;eu1&quot;}" data-form-type="schedule-call" data-schedule-call-form="true"> <div class="grid grid-cols-2 gap-spacing-md"> <div class="form-field-wrapper secondary" data-hubspot-field="firstname"> <div class="nutrient-input-wrapper"> <label for="input-5ve3a9" class="nutrient-input-label"> FIRST NAME  </label> <input required id="input-5ve3a9" name="firstName" type="text" placeholder value class="nutrient-input" autocomplete="given-name"> <div class="nutrient-input-helper-container">
907  <p id="input-5ve3a9-error" class="nutrient-input-error-text hidden"> Please enter your first name </p> </div> </div> </div>     <div class="form-field-wrapper secondary" data-hubspot-field="lastname"> <div class="nutrient-input-wrapper"> <label for="input-stri8c" class="nutrient-input-label"> LAST NAME  </label> <input required id="input-stri8c" name="lastName" type="text" placeholder value class="nutrient-input" autocomplete="family-name"> <div class="nutrient-input-helper-container">  <p id="input-stri8c-error" class="nutrient-input-error-text hidden"> Please enter your last name </p> </div> </div> </div>      </div><div class="form-field-wrapper secondary" data-hubspot-field="email"> <div class="nutrient-input-wrapper"> <label for="input-pgt9e6" class="nutrient-input-label"> EMAIL  </label> <input required id="input-pgt9e6" name="email" type="email" placeholder value class="nutrient-input" inputmode="email" autocapitalize="off" autocorrect="off" spellcheck="false" autocomplete="email"> <div class="nutrient-input-helper-container">  <p id="input-pgt9e6-error" class="nutrient-input-error-text hidden"> Please enter your email address </p> </div> </div> </div>     <div class="form-field-wrapper secondary" data-hubspot-field="company"> <div class="nutrient-input-wrapper"> <label for="input-ooh52t" class="nutrient-input-label"> COMPANY NAME  </label> <input required id="input-ooh52t" name="companyName" type="text" placeholder value class="nutrient-input" autocomplete="organization"> <div class="nutrient-input-helper-container">
907  <p id="input-ooh52t-error" class="nutrient-input-error-text hidden"> Please enter your company name </p> </div> </div> </div>     <div class="form-field-wrapper secondary" data-hubspot-field="phone"> <div class="nutrient-input-wrapper"> <label for="input-7ljwp0" class="nutrient-input-label"> PHONE NUMBER  </label> <input required id="input-7ljwp0" name="phone" type="tel" placeholder value class="nutrient-input" inputmode="tel" autocomplete="tel"> <div class="nutrient-input-helper-container">  <p id="input-7ljwp0-error" class="nutrient-input-error-text hidden"> Please enter your phone number </p> </div> </div> </div>       <div class="form-field-wrapper secondary" data-placeholder="Where is your company headquartered?" data-hubspot-field="country_dropdown" data-required="true"> <div class="nutrient-input-wrapper"> <label for="dropdown-xfeabv" class="nutrient-input-label"> COUNTRY  </label> <div class="nutrient-dropdown"> <div class="selected-text">Where is your company headquartered?</div> <select id="dropdown-xfeabv" name="country" data-filter="country" aria-label="COUNTRY" astro-dropdown> <!-- If no option is selected, we do not want tick on any item, so first option is empty and hidden --><!-- "hidden" attribute does not work in safari hence we need to skip rendering it if not needed --><option value="" disabled selected hidden></option> <optgroup label="Where is your company headquartered?"> <option value="United States"> United States </option><option value="United Kingdom"> United Kingdom </option><option value="Canada"> Canada </option><option value="Germany"> Germany </option><option value="France"> France </option><option value="Australia"> Australia </option><option value="Japan"> Japan </option><option value="Afghanistan"> Afghanistan </option><option value="Aland Islands"> Aland Islands </option><option value="Albania"> Albania </option><option value="Algeria"> Algeria </option><option value="Andorra"> Andorra </option><option value="Angola"> Angola </option><option value="Anguilla"> Anguilla </option><option value="Antarctica"> Antarctica </option><option value="Antigua and Barbuda"> Antigua and Barbuda </option><option value="Argentina"> Argentina </option><option value="Armenia"> Armenia </option><option value="Aruba"> Aruba </option><option value="Austria"> Austria </option><option value="Azerbaijan"> Azerbaijan </option><option value="Bahamas"> Bahamas </option><option value="Bahrain"> Bahrain </option><option value="Bangladesh"> Bangladesh </option><option value="Barbados"> Barbados </option><option value="Belarus"> Belarus </option><option value="Belgium"> Belgium </option><option value="Belize"> Belize </option><option value="Benin"> Benin </option><option value="Bermuda"> Bermuda </option><option value="Bhutan"> Bhutan </option><option value="Bolivia, Plurinational State of"> Bolivia, Plurinational State of </option><option value="Bonaire, Sint Eustatius and Saba"> Bonaire, Sint Eustatius and Saba </option><option value="Bosnia and Herzegovina"> Bosnia and Herzegovina </option><option value="Botswana"> Botswana </option><option value="Bouvet Island"> Bouvet Island </option><option value="Brazil"> Brazil </option><option value="British Indian Ocean Territory"> British Indian Ocean Territory </option><option value="Brunei Darussalam"> Brunei Darussalam </option><option value="Bulgaria"> Bulgaria </option><option value="Burkina Faso"> Burkina Faso </option><option value="Burundi"> Burundi </option><option value="Cambodia"> Cambodia </option><option value="Cameroon"> Cameroon </option><option value="Cape Verde"> Cape Verde </option><option value="Cayman Islands"> Cayman Islands </option><option value="Central African Republic"> Central African Republic </option><option value="Chad"> Chad </option><option value="Chile"> Chile </option><option value="China"> China </option><option value="Chinese Taipei"> Chinese Taipei </option><option value="Christmas Island"> Christmas Island </option><option value="Cocos (Keeling) Islands"> Cocos (Keeling) Islands </option><option value="Colombia"> Colombia </option><option value="Comoros"> Comoros </option><option value="Congo"> Congo </option><option value="Congo, the Democratic Republic of the"> Congo, the Democratic Republic of the </option><option value="Cook Islands">
907 Cook Islands </option><option value="Costa Rica"> Costa Rica </option><option value="Cote d'Ivoire"> Cote d&#39;Ivoire </option><option value="Croatia"> Croatia </option><option value="Cuba"> Cuba </option><option value="Curaçao"> Curaçao </option><option value="Cyprus"> Cyprus </option><option value="Czechia"> Czechia </option><option value="Denmark"> Denmark </option><option value="Djibouti"> Djibouti </option><option value="Dominica"> Dominica </option><option value="Dominican Republic"> Dominican Republic </option><option value="Ecuador"> Ecuador </option><option value="Egypt"> Egypt </option><option value="El Salvador"> El Salvador </option><option value="Equatorial Guinea"> Equatorial Guinea </option><option value="Eritrea"> Eritrea </option><option value="Estonia"> Estonia </option><option value="Ethiopia"> Ethiopia </option><option value="Falkland Islands (Malvinas)"> Falkland Islands (Malvinas) </option><option value="Faroe Islands"> Faroe Islands </option><option value="Fiji"> Fiji </option><option value="Finland"> Finland </option><option value="French Guiana"> French Guiana </option><option value="French Polynesia"> French Polynesia </option><option value="French Southern Territories"> French Southern Territories </option><option value="Gabon"> Gabon </option><option value="Gambia"> Gambia </option><option value="Georgia"> Georgia </option><option value="Ghana"> Ghana </option><option value="Gibraltar"> Gibraltar </option><option value="Greece"> Greece </option><option value="Greenland"> Greenland </option><option value="Grenada"> Grenada </option><option value="Guadeloupe"> Guadeloupe </option><option value="Guatemala"> Guatemala </option><option value="Guernsey"> Guernsey </option><option value="Guinea"> Guinea </option><option value="Guinea-Bissau"> Guinea-Bissau </option><option value="Guyana"> Guyana </option><option value="Haiti"> Haiti </option><option value="Heard Island and McDonald Islands"> Heard Island and McDonald Islands </option><option value="Holy See (Vatican City)"> Holy See (Vatican City) </option><option value="Honduras"> Honduras </option><option value="Hong Kong"> Hong Kong </option><option value="Hungary"> Hungary </option><option value="Iceland"> Iceland </option><option value="India"> India </option><option value="Indonesia"> Indonesia </option><option value="Iran, Islamic Republic of">
907 Iran, Islamic Republic of </option><option value="Iraq"> Iraq </option><option value="Ireland"> Ireland </option><option value="Isle of Man"> Isle of Man </option><option value="Israel"> Israel </option><option value="Italy"> Italy </option><option value="Jamaica"> Jamaica </option><option value="Jersey"> Jersey </option><option value="Jordan"> Jordan </option><option value="Kazakhstan"> Kazakhstan </option><option value="Kenya"> Kenya </option><option value="Kiribati"> Kiribati </option><option value="Korea, Democratic People's Republic of"> Korea, Democratic People&#39;s Republic of </option><option value="Korea, Republic of"> Korea, Republic of </option><option value="Kosovo"> Kosovo </option><option value="Kuwait"> Kuwait </option><option value="Kyrgyzstan"> Kyrgyzstan </option><option value="Lao People's Democratic Republic"> Lao People&#39;s Democratic Republic </option><option value="Latvia"> Latvia </option><option value="Lebanon"> Lebanon </option><option value="Lesotho"> Lesotho </option><option value="Liberia"> Liberia </option><option value="Libyan Arab Jamahiriya"> Libyan Arab Jamahiriya </option><option value="Liechtenstein"> Liechtenstein </option><option value="Lithuania"> Lithuania </option><option value="Luxembourg"> Luxembourg </option><option value="Macao"> Macao </option><option value="Macedonia, the former Yugoslav Republic of"> Macedonia, the former Yugoslav Republic of </option><option value="Madagascar"> Madagascar </option><option value="Malawi"> Malawi </option><option value="Malaysia"> Malaysia </option><option value="Maldives"> Maldives </option><option value="Mali"> Mali </option><option value="Malta"> Malta </option><option value="Martinique"> Martinique </option><option value="Mauritania"> Mauritania </option><option value="Mauritius"> Mauritius </option><option value="Mayotte"> Mayotte </option><option value="Mexico"> Mexico </option><option value="Moldova, Republic of"> Moldova, Republic of </option><option value="Monaco"> Monaco </option><option value="Mongolia"> Mongolia </option><option value="Montenegro"> Montenegro </option><option value="Montserrat"> Montserrat </option><option value="Morocco"> Morocco </option><option value="Mozambique"> Mozambique </option><option value="Myanmar"> Myanmar </option><option value="Namibia"> Namibia </option><option value="Nauru"> Nauru </option><option value="Nepal"> Nepal </option><option value="Netherlands"> Netherlands </option><option value="New Caledonia"> New Caledonia </option><option value="New Zealand"> New Zealand </option><option value="Nicaragua"> Nicaragua </option><option value="Niger"> Niger </option><option value="Nigeria"> Nigeria </option><option value="Niue"> Niue </option><option value="Norfolk Island"> Norfolk Island </option><option value="North Holland"> North Holland </option><option value="Norway"> Norway </option><option value="Oman"> Oman </option><option value="Pakistan"> Pakistan </option><option value="Panama"> Panama </option><option value="Papua New Guinea"> Papua New Guinea </option><option value="Paraguay"> Paraguay </option><option value="Peru"> Peru </option><option value="Philippines"> Philippines </option><option value="Pitcairn"> Pitcairn </option><option value="Poland"> Poland </option><option value="Portugal"> Portugal </option><option value="Qatar"> Qatar </option><option value="Reunion"> Reunion </option><option value="Romania"> Romania </option><option value="Russian Federation"> Russian Federation </option><option value="Rwanda"> Rwanda </option><option value="Saint Barthélemy"> Saint Barthélemy </option><option value="Saint Helena, Ascension and Tristan da Cunha"> Saint Helena, Ascension and Tristan da Cunha </option><option value="Saint Kitts and Nevis"> Saint Kitts and Nevis </option><option value="Saint Lucia"> Saint Lucia </option><option value="Saint Martin (French part)"> Saint Martin (French part) </option><option value="Saint Pierre and Miquelon"> Saint Pierre and Miquelon </option><option value="Saint Vincent and the Grenadines"> Saint Vincent and the Grenadines </option><option value="Samoa"> Samoa </option><option value="San Marino"> San Marino </option><option value="Sao Tome and Principe">
907 Sao Tome and Principe </option><option value="Saudi Arabia"> Saudi Arabia </option><option value="Senegal"> Senegal </option><option value="Serbia"> Serbia </option><option value="Seychelles"> Seychelles </option><option value="Sierra Leone"> Sierra Leone </option><option value="Singapore"> Singapore </option><option value="Sint Maarten (Dutch part)"> Sint Maarten (Dutch part) </option><option value="Slovakia"> Slovakia </option><option value="Slovenia"> Slovenia </option><option value="Solomon Islands"> Solomon Islands </option><option value="Somalia"> Somalia </option><option value="South Africa"> South Africa </option><option value="South Georgia and the South Sandwich Islands"> South Georgia and the South Sandwich Islands </option><option value="South Sudan"> South Sudan </option><option value="Spain"> Spain </option><option value="Sri Lanka"> Sri Lanka </option><option value="Sudan"> Sudan </option><option value="Suriname"> Suriname </option><option value="Svalbard and Jan Mayen"> Svalbard and Jan Mayen </option><option value="Swaziland"> Swaziland </option><option value="Sweden"> Sweden </option><option value="Switzerland"> Switzerland </option><option value="Syrian Arab Republic"> Syrian Arab Republic </option><option value="Taiwan"> Taiwan </option><option value="Tajikistan"> Tajikistan </option><option value="Tanzania, United Republic of"> Tanzania, United Republic of </option><option value="Thailand"> Thailand </option><option value="Timor-Leste"> Timor-Leste </option><option value="Togo"> Togo </option><option value="Tokelau"> Tokelau </option><option value="Tonga"> Tonga </option><option value="Trinidad and Tobago"> Trinidad and Tobago </option><option value="Tunisia"> Tunisia </option><option value="Turkey"> Turkey </option><option value="Turkmenistan"> Turkmenistan </option><option value="Turks and Caicos Islands"> Turks and Caicos Islands </option><option value="Tuvalu"> Tuvalu </option><option value="Uganda"> Uganda </option><option value="Ukraine"> Ukraine </option><option value="United Arab Emirates"> United Arab Emirates </option><option value="Uruguay"> Uruguay </option><option value="Uzbekistan"> Uzbekistan </option><option value="Vanuatu"> Vanuatu </option><option value="Venezuela, Bolivarian Republic of"> Venezuela, Bolivarian Republic of </option><option value="Viet Nam"> Viet Nam </option><option value="Virgin Islands, British"> Virgin Islands, British </option><option value="Wallis and Futuna"> Wallis and Futuna </option><option value="Western Sahara"> Western Sahara </option><option value="Yemen"> Yemen </option><option value="Zambia"> Zambia </option><option value="Zimbabwe"> Zimbabwe </option> </optgroup> </select> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="dropdown-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
908  <path fill="currentColor" d="M8 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm9-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-1-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
909 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div class="nutrient-input-helper-container">  <p id="dropdown-xfeabv-error" class="nutrient-input-error-text hidden"> Please select a country </p> </div> </div>
909<script type="module">var d=window;d.__dropdownSelectionInjected||(d.__dropdownSelectionInjected=!0,window.addEventListener("pageshow",()=>{document.querySelectorAll("select[astro-dropdown]").forEach(e=>{const o=e.querySelector("option[selected]");o&&(e.value=o.value)})}));</script>
909 </div>     <div class="form-field-wrapper secondary hidden" data-placeholder="Select an option" data-hubspot-field="us_state" data-required="false"> <div class="nutrient-input-wrapper"> <label for="dropdown-16noip" class="nutrient-input-label"> STATE  </label> <div class="nutrient-dropdown"> <div class="selected-text">Select an option</div> <select id="dropdown-16noip" name="state" data-filter="state" aria-label="STATE" astro-dropdown> <!-- If no option is selected, we do not want tick on any item, so first option is empty and hidden --><!-- "hidden" attribute does not work in safari hence we need to skip rendering it if not needed --><option value="" disabled selected hidden></option> <optgroup label="Select an option"> <option value="Alabama"> Alabama </option><option value="Alaska"> Alaska </option><option value="Arizona"> Arizona </option><option value="Arkansas"> Arkansas </option><option value="California"> California </option><option value="Colorado"> Colorado </option><option value="Connecticut"> Connecticut </option><option value="Delaware"> Delaware </option><option value="Florida"> Florida </option><option value="Georgia"> Georgia </option><option value="Hawaii"> Hawaii </option><option value="Idaho"> Idaho </option><option value="Illinois"> Illinois </option><option value="Indiana"> Indiana </option><option value="Iowa"> Iowa </option><option value="Kansas"> Kansas </option><option value="Kentucky"> Kentucky </option><option value="Louisiana"> Louisiana </option><option value="Maine"> Maine </option><option value="Maryland"> Maryland </option><option value="Massachusetts"> Massachusetts </option><option value="Michigan"> Michigan </option><option value="Minnesota"> Minnesota </option><option value="Mississippi"> Mississippi </option><option value="Missouri"> Missouri </option><option value="Montana"> Montana </option><option value="Nebraska"> Nebraska </option><option value="Nevada"> Nevada </option><option value="New Hampshire"> New Hampshire </option><option value="New Jersey"> New Jersey </option><option value="New Mexico"> New Mexico </option><option value="New York"> New York </option><option value="North Carolina"> North Carolina </option><option value="North Dakota"> North Dakota </option><option value="Ohio"> Ohio </option><option value="Oklahoma"> Oklahoma </option><option value="Oregon"> Oregon </option><option value="Pennsylvania"> Pennsylvania </option><option value="Rhode Island"> Rhode Island </option><option value="South Carolina"> South Carolina </option><option value="South Dakota"> South Dakota </option><option value="Tennessee"> Tennessee </option><option value="Texas"> Texas </option><option value="Utah"> Utah </option><option value="Vermont"> Vermont </option><option value="Virginia"> Virginia </option><option value="Washington"> Washington </option><option value="West Virginia"> West Virginia </option><option value="Wisconsin"> Wisconsin </option><option value="Wyoming"> Wyoming </option> </optgroup> </select> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="dropdown-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
910  <path fill="currentColor" d="M8 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm9-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-1-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
911 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div class="nutrient-input-helper-container">  <p id="dropdown-16noip-error" class="nutrient-input-error-text hidden"> Please select a state </p> </div> </div> </div>     <div class="form-field-wrapper secondary hidden" data-placeholder="Select an option" data-hubspot-field="canadian_province_territory" data-required="false"> <div class="nutrient-input-wrapper"> <label for="dropdown-9unuci" class="nutrient-input-label"> CANADIAN PROVINCE/TERRITORY  </label> <div class="nutrient-dropdown"> <div class="selected-text">Select an option</div> <select id="dropdown-9unuci" name="province" data-filter="province" aria-label="CANADIAN PROVINCE/TERRITORY" astro-dropdown> <!-- If no option is selected, we do not want tick on any item, so first option is empty and hidden --><!-- "hidden" attribute does not work in safari hence we need to skip rendering it if not needed --><option value="" disabled selected hidden></option> <optgroup label="Select an option"> <option value="Alberta"> Alberta </option><option value="British Columbia"> British Columbia </option><option value="Manitoba"> Manitoba </option><option value="New Brunswick">
911 New Brunswick </option><option value="Newfoundland and Labrador"> Newfoundland and Labrador </option><option value="Nova Scotia"> Nova Scotia </option><option value="Ontario"> Ontario </option><option value="Prince Edward Island"> Prince Edward Island </option><option value="Quebec"> Quebec </option><option value="Saskatchewan"> Saskatchewan </option><option value="Northwest Territories"> Northwest Territories </option><option value="Nunavut"> Nunavut </option><option value="Yukon"> Yukon </option> </optgroup> </select> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="dropdown-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
912  <path fill="currentColor" d="M8 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm9-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-1-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
913 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div class="nutrient-input-helper-container">  <p id="dropdown-9unuci-error" class="nutrient-input-error-text hidden"> Please select a province/territory </p> </div> </div> </div>     <div class="form-field-wrapper secondary" data-placeholder="What product line are you interested in?" data-hubspot-field="meeting_product_interest" data-required="true"> <div class="nutrient-input-wrapper"> <label for="dropdown-uq7yb6" class="nutrient-input-label"> PRODUCT INTEREST  </label> <div class="nutrient-dropdown"> <div class="selected-text">What product line are you interested in?</div> <select id="dropdown-uq7yb6" name="productInterest" data-filter="productInterest" aria-label="PRODUCT INTEREST" astro-dropdown> <!-- If no option is selected, we do not want tick on any item, so first option is empty and hidden --><!-- "hidden" attribute does not work in safari hence we need to skip rendering it if not needed --><option value="" disabled selected hidden></option> <optgroup label="What product line are you interested in?"> <option value="SDK"> SDK </option><option value="Low-Code"> Integrations </option><option value="Workflow"> Workflow Automation </option><option value="DWS API"> Cloud </option> </optgroup> </select> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="dropdown-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
914  <path fill="currentColor" d="M8 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm9-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-1-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
915 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div class="nutrient-input-helper-container">  <p id="dropdown-uq7yb6-error" class="nutrient-input-error-text hidden"> Please select a product interest </p> </div> </div> </div>     <div class="form-field-wrapper secondary hidden" data-placeholder="Which tool are you primarily using?" data-hubspot-field="meeting_product_interest_other" data-required="false"> <div class="nutrient-input-wrapper"> <label for="dropdown-12wh6o" class="nutrient-input-label"> PRIMARY TOOL  </label> <div class="nutrient-dropdown"> <div class="selected-text">Which tool are you primarily using?</div> <select id="dropdown-12wh6o" name="integrationsPlatform" data-filter="integrationsPlatform" aria-label="PRIMARY TOOL" astro-dropdown> <!-- If no option is selected, we do not want tick on any item, so first option is empty and hidden --><!-- "hidden" attribute does not work in safari hence we need to skip rendering it if not needed --><option value="" disabled selected hidden></option> <optgroup label="Which tool are you primarily using?"> <option value="Microsoft 365"> Microsoft 365 </option><option value="Salesforce"> Salesforce </option><option value="Hubspot"> Hubspot </option><option value="ServiceNow"> ServiceNow </option><option value="Nintex"> Nintex </option><option value="Windows Server"> Windows Server </option><option value="Other"> Other </option> </optgroup> </select> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="dropdown-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
916  <path fill="currentColor" d="M8 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm9-1a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-2 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-1-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
917 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div class="nutrient-input-helper-container">  <p id="dropdown-12wh6o-error" class="nutrient-input-error-text hidden"> Please select an integrations platform </p> </div> </div> </div>    <div class="form-field-wrapper secondary" data-hubspot-field="meeting_booking_notes"> <div class="nutrient-input-wrapper"> <label for="textarea-9z9lgz" class="nutrient-input-label"> ANYTHING WE SHOULD KNOW TO HELP PREPARE FOR THE CALL? <span class="text-neutral-secondary"> (OPTIONAL)</span> </label> <textarea id="textarea-9z9lgz" name="callNotes" placeholder rows="3" class="nutrient-input resize-dot"></textarea> <div class="nutrient-input-helper-container">   </div> </div> </div>        <input type="hidden" name="utm_term" id="utm_term" value data-hubspot-field="utm_term" data-utm-field="true">     <input type="hidden" name="utm_source" id="utm_source" value data-hubspot-field="utm_source" data-utm-field="true">     <input type="hidden" name="utm_medium" id="utm_medium" value data-hubspot-field="utm_medium" data-utm-field="true">     <input type="hidden" name="utm_content" id="utm_content" value data-hubspot-field="utm_content" data-utm-field="true">     <input type="hidden" name="utm_campaign" id="utm_campaign" value data-hubspot-field="utm_campaign" data-utm-field="true">  <input type="text" name="contact_ref_2" style="position: absolute; left: -9999px; width: 1px; height: 1px;" tabindex="-1" autocomplete="off" aria-hidden="true">  </form>
917<script type="module" src="/_astro/Form.astro_astro_type_script_index_0_lang._Fn6Dq-s.js"></script>
917<script type="module" src="/_astro/ScheduleCallForm.astro_astro_type_script_index_0_lang.Bcq2wQNO.js"></script>
917 <div> <p class="mt-0 text-sm text-neutral-secondary">
918By submitting this form, you agree to Nutrient's <a href="/legal/privacy/" class="text-neutral-secondary">Privacy Policy</a> and <a href="/legal/terms/" class="text-neutral-secondary">Terms of Service</a>.
919</p> </div> <button type="submit" form="global-search-schedule-modal-form" class="btn btn-primary" tabindex="0" role="button"> Next </button> </div> </div>  </div> </div> <!-- Close button --> <button type="button" class="modal-close-button" data-modal-close aria-label="Close modal"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="modal-close-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
920  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
921 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div>
921<script type="module">var e=class{modal;modalContent;closeButton;closeOnBackdrop;closeOnEscape;constructor(o){this.modal=o,this.modalContent=o.querySelector("[data-modal-content]"),this.closeButton=o.querySelector("[data-modal-close]"),this.closeOnBackdrop=o.dataset.closeOnBackdrop!=="false",this.closeOnEscape=o.dataset.closeOnEscape!=="false",this.init()}init(){this.closeButton?.addEventListener("click",()=>this.close()),this.closeOnBackdrop&&this.modal.addEventListener("click",o=>{o.target===this.modal&&this.close()}),this.closeOnEscape&&document.addEventListener("keydown",o=>{o.key==="Escape"&&this.isOpen()&&this.close()})}open(){this.modal.parentElement!==document.body&&document.body.appendChild(this.modal),this.modal.classList.remove("modal-closed"),this.modal.classList.add("modal-open"),this.modalContent.classList.remove("modal-content-closed"),this.modalContent.classList.add("modal-content-open"),this.modal.focus(),document.body.style.overflow="hidden",this.modal.dispatchEvent(new CustomEvent("modal:open",{bubbles:!0,detail:{modalId:this.modal.id}}))}close(){this.modal.classList.add("modal-closed"),this.modal.classList.remove("modal-open"),this.modalContent.classList.add("modal-content-closed"),this.modalContent.classList.remove("modal-content-open"),document.body.style.overflow=""}isOpen(){return this.modal.classList.contains("modal-open")}toggle(){this.isOpen()?this.close():this.open()}};document.addEventListener("DOMContentLoaded",()=>{const o=document.querySelectorAll("[data-modal]"),t=new Map;o.forEach(s=>{const d=new e(s);t.set(s.id,d)}),window.modalInstances=t});window.Modal=e;</script>
921 <div id="global-search-schedule-modal-confirmation" class="modal-container modal-closed [&amp;_.modal-close-button]:!hidden" role="dialog" aria-modal="true" aria-label="Thanks, we'll be in touch" data-modal> <div class="modal-content modal-content-closed p-0 !h-auto max-h-[90vh] !overflow-y-auto !radius-container" style="max-width: min(720px, 92vw); max-height: 90vh; width: min(720px, 92vw); height: 90vh;" data-modal-content> <!-- Modal content slot --><div class="modal-slot">  <div class="bg-neutral-default-tertiary px-spacing-sm md:px-spacing-md lg:px-spacing-lg py-spacing-sm md:py-spacing-md lg:py-spacing-lg"> <div class="flex flex-col gap-spacing-2xl" role="status"> <span class="heading-2 text-neutral-primary">Thanks — we'll be in touch</span> <p class="mt-0 text-neutral-secondary">
922We've received your request and a member of our team will reach out
923        shortly. If your request is urgent, email <a href="mailto:[email protected]" class="text-neutral-secondary">[email protected]</a>.
924</p> <button type="button" class="btn btn-primary" data-modal-close>Close</button> </div> </div>  </div> </div> <!-- Close button --> <button type="button" class="modal-close-button" data-modal-close aria-label="Close modal"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="modal-close-icon" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
925  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
926 </svg><!-- Define styles for the SVG element with the provided color and size --> </button> </div>  
926<script type="module" src="/_astro/ScheduleCallModal.astro_astro_type_script_index_0_lang.CMV0dHeY.js"></script>
926 </div> </aside> </div>  </div>  </section> </div> <!-- Templates for dynamic content cloning --> <!-- Tag remove icon (X button) - Used in FilterTagsRenderer --><template id="global-search-tag-remove-template"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
927  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
928 </svg><!-- Define styles for the SVG element with the provided color and size --> </template> <!-- Arrow icon for navigation - Used in result items --> <template id="global-search-arrow-template"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
929  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
930 </svg><!-- Define styles for the SVG element with the provided color and size --> </template> <!-- Question/bullet icon - Used in AI suggestions --> <template id="global-search-question-template"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="20" height="20" class width="20" height="20" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
931  <path fill="currentColor" d="M12 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm1 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm-3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm3-3a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"/>
932 </svg><!-- Define styles for the SVG element with the provided color and size --> </template> <!-- Loading spinner - Used in ResultsRenderer during search --> <template id="global-search-loading-template"> <div class="centered-state-base"> <div class="global-search-loading-spinner"></div> </div> </template>
932<script type="module" src="/_astro/GlobalSearchDrawer.astro_astro_type_script_index_0_lang.YrGcySPm.js"></script>
932<script type="module" src="/_astro/Header.astro_astro_type_script_index_0_lang.DSLjO0VQ.js"></script>
932<!-- Global search trigger wiring lives in `GlobalSearchDrawer.astro` via `[data-global-search-trigger]`.
933     Keeping it there avoids duplicate listeners (double-toggle) across Astro swaps. -->  <main> <div class="page-wrapper nutrient-blog">  <section class="section-spacing-horizontal-default !py-0">   <div class="container-large radius-container container-spacing-horizontal-default !py-0">   <div class="container grid gap-6 blog-header">  <div class="blog-header-title">  <nav aria-label="Breadcrumb" class="breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList"> <ol class="flex flex-wrap items-center">  <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">  <a href="/blog/" class="text-neutral-primary hover:underline" id="breadcrumb-link-blog"> <span itemprop="name">Blog</span> </a> <link itemprop="item" href="https://www.nutrient.io/blog/"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="breadcrumb-icon h-4 w-4 mx-2 icon-neutral-primary" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
934  <path fill="currentColor" d="M11 16a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-9a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/>
935 </svg><!-- Define styles for the SVG element with the provided color and size -->  <meta itemprop="position" content="1"> </li><li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">  <link itemprop="item" href="https://www.nutrient.io/blog/news/"> <span class="text-neutral-primary" aria-current="page" itemprop="name"> News </span>  <meta itemprop="position" content="2"> </li>  </ol> 
935<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https://www.nutrient.io/blog/"},{"@type":"ListItem","position":2,"name":"News","item":"https://www.nutrient.io/blog/news/"}]}</script>
935 </nav>  </div> <div class="blog-filters">  <div class="blog-filters-container"> <h2 class="sr-only">Blog Filters</h2> <div class="blog-filters-wrapper"> <!-- Category Select --><div class="blog-filter-group category-select"> <h3 class="sr-only">Category Filter</h3> <div class="category-select-wrapper" role="group" aria-labelledby="category-select-label"> <span id="category-select-label" class="sr-only">Filter by Category</span> <select id="category-select" class="category-select-hidden" aria-hidden="true" tabindex="-1"> <option value="/blog/">All Categories</option> <option value="/blog/categories/ai/"> AI </option><option value="/blog/categories/api/"> API </option><option value="/blog/cloud/"> Cloud </option><option value="/blog/categories/company/"> Company </option><option value="/blog/categories/customer-stories/"> Customer Stories </option><option value="/blog/categories/design/"> Design </option><option value="/blog/categories/development/"> Development </option><option value="/blog/categories/digital-signatures/"> Digital Signatures </option><option value="/blog/categories/insights/"> Insights </option><option value="/blog/categories/integrations/"> Integrations </option><option value="/blog/categories/learning/"> Learning </option><option value="/blog/low-code/"> Low-Code </option><option value="/blog/news/" selected> News </option><option value="/blog/categories/performance/"> Performance </option><option value="/blog/categories/productivity/"> Productivity </option><option value="/blog/categories/products/"> Products </option><option value="/blog/categories/releases/"> Releases </option><option value="/blog/sdk/"> SDK </option><option value="/blog/categories/security/"> Security </option><option value="/blog/categories/solutions/"> Solutions </option><option value="/blog/categories/tutorials/"> Tutorials </option><option value="/blog/categories/web/"> Web </option><option value="/blog/workflow/"> Workflow </option><option value="/blog/categories/workflow-automation/"> Workflow Automation </option><option value="/blog/categories/visionos/"> visionOS </option> </select> <div id="category-select-container" class="category-select-container" role="combobox" aria-expanded="false" aria-haspopup="listbox" aria-controls="category-select-dropdown" aria-owns="category-select-dropdown" aria-labelledby="category-select-label" tabindex="0"> <span class="category-selected-text"> News </span> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="1.5rem" height="1.5rem" class="nav-arrow nav-arrow-select category-toggle-icon" width="1.5rem" height="1.5rem" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
936<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
937<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
938<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
939<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
940<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
941 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <div id="category-select-dropdown" class="blog-filter-dropdown-base category-select-dropdown select-dropdown-hidden" role="listbox"> <div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/" tabindex="0">
942All Categories
943</div> <div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/ai/" tabindex="0"> AI </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/api/" tabindex="0"> API </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/cloud/" tabindex="0"> Cloud </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/company/" tabindex="0"> Company </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/customer-stories/" tabindex="0"> Customer Stories </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/design/" tabindex="0"> Design </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/development/" tabindex="0"> Development </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/digital-signatures/" tabindex="0"> Digital Signatures </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/insights/" tabindex="0"> Insights </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/integrations/" tabindex="0"> Integrations </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/learning/" tabindex="0">
943 Learning </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/low-code/" tabindex="0"> Low-Code </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/news/" tabindex="0"> News </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/performance/" tabindex="0"> Performance </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/productivity/" tabindex="0"> Productivity </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/products/" tabindex="0"> Products </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/releases/" tabindex="0"> Releases </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/sdk/" tabindex="0"> SDK </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/security/" tabindex="0"> Security </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/solutions/" tabindex="0"> Solutions </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/tutorials/" tabindex="0"> Tutorials </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/web/" tabindex="0"> Web </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/workflow/" tabindex="0"> Workflow </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/workflow-automation/" tabindex="0"> Workflow Automation </div><div class="blog-filter-option-base category-select-option" role="option" data-value="/blog/categories/visionos/" tabindex="0"> visionOS </div> </div> </div> </div> <!-- Tags Multi-Select --> <div class="blog-filter-group"> <div class="blog-select-tag-wrapper" role="group" aria-labelledby="tag-select-label"> <span id="tag-select-label" class="sr-only">
944Filter by Tags
945</span> <select id="tag-select-8t12ntw" multiple class="multi-select-hidden" aria-hidden="true" tabindex="-1"> <option value="Media coverage"> Media coverage </option><option value="Press release"> Press release </option><option value="Security"> Security </option> </select> <div id="tag-select-8t12ntw-container" class="tag-select-container" role="combobox" aria-expanded="false" aria-haspopup="listbox" aria-controls="tag-select-8t12ntw-dropdown" aria-owns="tag-select-8t12ntw-dropdown" aria-labelledby="tag-select-label" aria-activedescendant=""> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="1.5rem" height="1.5rem" class="nav-arrow nav-arrow-select tag-toggle-icon" width="1.5rem" height="1.5rem" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
946<path d="M8 11C8.55228 11 9 10.5523 9 10C9 9.44772 8.55228 9 8 9C7.44772 9 7 9.44771 7 10C7 10.5523 7.44771 11 8 11Z" fill="currentColor"></path>
947<path d="M17 10C17 10.5523 16.5523 11 16 11C15.4477 11 15 10.5523 15 10C15 9.44771 15.4477 9 16 9C16.5523 9 17 9.44772 17 10Z" fill="currentColor"></path>
948<path d="M15 12C15 12.5523 14.5523 13 14 13C13.4477 13 13 12.5523 13 12C13 11.4477 13.4477 11 14 11C14.5523 11 15 11.4477 15 12Z" fill="currentColor"></path>
949<path d="M12 15C12.5523 15 13 14.5523 13 14C13 13.4477 12.5523 13 12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15Z" fill="currentColor"></path>
950<path d="M11 12C11 12.5523 10.5523 13 10 13C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11C10.5523 11 11 11.4477 11 12Z" fill="currentColor"></path>
951 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <template id="tag-remove-icon-template"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="tag-remove-icon" width="24" height="24" aria-label="Remove tag" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
952  <path fill="currentColor" d="M15 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-2 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm6-2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-7-7a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM9 8a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
953 </svg><!-- Define styles for the SVG element with the provided color and size --> </template> <template id="tag-check-icon-template"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="tag-option-check-icon" width="24" height="24" aria-hidden="true" role="presentation" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
954  <path fill="currentColor" d="M18 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-2 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1-3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3-1a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"/>
955 </svg><!-- Define styles for the SVG element with the provided color and size --> </template> </div> </div> <!-- Browse Tags button (main blog view only — category pages have the tag multi-select) -->  </div> </div> 
955<script>(function(){const isOverviewPage = true;
956
957  // Variables passed from Astro component
958
959  const isOverviewPageValue = isOverviewPage;
960
961  // Global dropdown manager to ensure only one dropdown is open at a time
962  const dropdownManager = {
963    activeDropdown: null,
964    categoryDropdown: null,
965    tagsDropdown: null,
966
967    register: function (type, showFn, hideFn) {
968      if (type === "category") {
969        this.categoryDropdown = { show: showFn, hide: hideFn };
970      } else if (type === "tags") {
971        this.tagsDropdown = { show: showFn, hide: hideFn };
972      }
973    },
974
975    show: function (type) {
976      // Close any currently active dropdown
977      if (this.activeDropdown && this.activeDropdown !== type) {
978        if (this.activeDropdown === "category" && this.categoryDropdown) {
979          this.categoryDropdown.hide();
980        } else if (this.activeDropdown === "tags" && this.tagsDropdown) {
981          this.tagsDropdown.hide();
982        }
983      }
984
985      // Show the requested dropdown
986      if (type === "category" && this.categoryDropdown) {
987        this.categoryDropdown.show();
988        this.activeDropdown = "category";
989      } else if (type === "tags" && this.tagsDropdown) {
990        this.tagsDropdown.show();
991        this.activeDropdown = "tags";
992      }
993    },
994
995    hide: function (type) {
996      if (this.activeDropdown === type) {
997        this.activeDropdown = null;
998      }
999    },
1000  };
1001
1002  document.addEventListener("DOMContentLoaded", function () {
1003    // Initialize the category select component
1004    initCategorySelect();
1005
1006    // Initialize the multi-select component
1007    const multiSelectId = document.querySelector(
1008      ".blog-select-tag-wrapper select",
1009    )?.id;
1010    if (multiSelectId) {
1011      initMultiSelectTag(multiSelectId);
1012    }
1013  });
1014
1015  // Category select implementation
1016  function initCategorySelect() {
1017    const container = document.getElementById("category-select-container");
1018    const dropdown = document.getElementById("category-select-dropdown");
1019    const toggleIcon = container?.querySelector(".category-toggle-icon");
1020
1021    if (!container || !dropdown) return;
1022
1023    // Handle container click to toggle dropdown
1024    container.addEventListener("click", function (e) {
1025      e.stopPropagation();
1026      if (container.getAttribute("aria-expanded") === "true") {
1027        hideCategoryDropdown();
1028      } else {
1029        dropdownManager.show("category");
1030      }
1031    });
1032
1033    // Handle keyboard navigation
1034    container.addEventListener("keydown", function (e) {
1035      if (e.key === "Enter" || e.key === " ") {
1036        e.preventDefault();
1037        if (container.getAttribute("aria-expanded") === "true") {
1038          hideCategoryDropdown();
1039        } else {
1040          dropdownManager.show("category");
1041        }
1042      } else if (e.key === "ArrowDown") {
1043        e.preventDefault();
1044        dropdownManager.show("category");
1045        const firstOption = dropdown.querySelector(".category-select-option");
1046        if (firstOption) firstOption.focus();
1047      }
1048    });
1049
1050    // Handle option clicks
1051    dropdown.addEventListener("click", function (e) {
1052      const option = e.target.closest(".category-select-option");
1053      if (option) {
1054        const value = option.getAttribute("data-value");
1055        const text = option.textContent;
1056        selectCategoryOption(value, text);
1057      }
1058    });
1059
1060    // Handle option keyboard navigation
1061    dropdown.addEventListener("keydown", function (e) {
1062      const options = Array.from(
1063        dropdown.querySelectorAll(".category-select-option"),
1064      );
1065      const currentIndex = options.indexOf(document.activeElement);
1066
1067      if (e.key === "Enter" || e.key === " ") {
1068        e.preventDefault();
1069        const option = e.target;
1070        if (option.classList.contains("category-select-option")) {
1071          const value = option.getAttribute("data-value");
1072          const text = option.textContent;
1073          selectCategoryOption(value, text);
1074        }
1075      } else if (e.key === "ArrowDown") {
1076        e.preventDefault();
1077        const nextIndex = (currentIndex + 1) % options.length;
1078        options[nextIndex].focus();
1079      } else if (e.key === "ArrowUp") {
1080        e.preventDefault();
1081        if (currentIndex === 0) {
1082          container.focus();
1083        } else {
1084          const prevIndex =
1085            (currentIndex - 1 + options.length) % options.length;
1086          options[prevIndex].focus();
1087        }
1088      } else if (e.key === "Escape") {
1089        e.preventDefault();
1090        hideCategoryDropdown();
1091        container.focus();
1092      }
1093    });
1094
1095    // Handle clicks outside the component
1096    document.addEventListener("click", function (e) {
1097      if (!container.contains(e.target) && !dropdown.contains(e.target)) {
1098        hideCategoryDropdown();
1099      }
1100    });
1101
1102    function showCategoryDropdown() {
1103      container.setAttribute("aria-expanded", "true");
1104      dropdown.classList.remove("select-dropdown-hidden");
1105      if (toggleIcon) toggleIcon.classList.add("menu-caret-animated");
1106    }
1107
1108    function hideCategoryDropdown() {
1109      container.setAttribute("aria-expanded", "false");
1110      dropdown.classList.add("select-dropdown-hidden");
1111      if (toggleIcon) toggleIcon.classList.remove("menu-caret-animated");
1112      dropdownManager.hide("category");
1113    }
1114
1115    // Register this dropdown with the manager
1116    dropdownManager.register(
1117      "category",
1118      showCategoryDropdown,
1119      hideCategoryDropdown,
1120    );
1121
1122    function selectCategoryOption(value, text) {
1123      // Update the displayed text
1124      const selectedText = container.querySelector(".category-selected-text");
1125      if (selectedText) {
1126        selectedText.textContent = text;
1127      }
1128
1129      // Hide the dropdown
1130      hideCategoryDropdown();
1131      container.focus();
1132
1133      // Navigate to the selected URL
1134      window.location.href = value;
1135    }
1136  }
1137
1138  // Screen reader announcement function
1139  function announceToScreenReader(message) {
1140    const announcement = document.createElement("div");
1141    announcement.setAttribute("aria-live", "polite");
1142    announcement.setAttribute("aria-atomic", "true");
1143    announcement.className = "sr-only";
1144    announcement.textContent = message;
1145    document.body.appendChild(announcement);
1146
1147    // Remove the announcement element after a brief delay
1148    setTimeout(() => {
1149      document.body.removeChild(announcement);
1150    }, 1000);
1151  }
1152
1153  // Optimized option creation utilities
1154  const OptionCreator = {
1155    // Cache template elements for performance
1156    checkIconTemplate: null,
1157
1158    init() {
1159      this.checkIconTemplate = document.getElementById(
1160        "tag-check-icon-template",
1161      );
1162    },
1163
1164    // DRY: Centralized option creation
1165    createOption(option) {
1166      const optionEl = document.createElement("div");
1167      const optionId = `option-${option.value.replace(/\s+/g, "-").toLowerCase()}`;
1168
1169      // Set all attributes at once for better performance
1170      Object.assign(optionEl, {
1171        className: "blog-filter-option-base tag-multi-select-option",
1172        tabIndex: 0,
1173      });
1174
1175      optionEl.setAttribute("role", "option");
1176      optionEl.setAttribute("id", optionId);
1177      optionEl.setAttribute("data-value", option.value);
1178      optionEl.setAttribute(
1179        "aria-selected",
1180        option.selected ? "true" : "false",
1181      );
1182
1183      if (option.selected) {
1184        optionEl.classList.add("selected");
1185        optionEl.setAttribute("aria-describedby", `${optionId}-desc`);
1186      }
1187
1188      // Create structured content
1189      this.appendOptionContent(optionEl, option, optionId);
1190
1191      return optionEl;
1192    },
1193
1194    // DRY: Centralized content creation
1195    appendOptionContent(optionEl, option, optionId) {
1196      // Checkbox container
1197      const checkboxEl = document.createElement("div");
1198      checkboxEl.className = "tag-option-checkbox";
1199
1200      // Clone check icon (cached template)
1201      if (this.checkIconTemplate) {
1202        const checkIconClone = document.importNode(
1203          this.checkIconTemplate.content,
1204          true,
1205        );
1206        checkboxEl.appendChild(checkIconClone);
1207      }
1208
1209      // Text content
1210      const textEl = document.createElement("span");
1211      textEl.textContent = option.textContent;
1212
1213      // Accessibility description
1214      const descEl = document.createElement("span");
1215      descEl.id = `${optionId}-desc`;
1216      descEl.className = "sr-only";
1217      descEl.textContent = option.selected ? "Selected" : "Not selected";
1218
1219      // Append all content
1220      optionEl.appendChild(checkboxEl);
1221      optionEl.appendChild(textEl);
1222      optionEl.appendChild(descEl);
1223    },
1224
1225    // DRY: Centralized state update
1226    updateOptionState(optionEl, isSelected) {
1227      const desc = optionEl.querySelector(`#${optionEl.id}-desc`);
1228
1229      if (isSelected) {
1230        optionEl.classList.add("selected");
1231        optionEl.setAttribute("aria-selected", "true");
1232        if (desc) desc.textContent = "Selected";
1233      } else {
1234        optionEl.classList.remove("selected");
1235        optionEl.setAttribute("aria-selected", "false");
1236        if (desc) desc.textContent = "Not selected";
1237      }
1238    },
1239  };
1240
1241  // Multi-select tag implementation
1242  function initMultiSelectTag(selectId) {
1243    const select = document.getElementById(selectId);
1244    if (!select) return;
1245
1246    const container = document.getElementById(`${selectId}-container`);
1247    if (!container) return;
1248
1249    // Initialize option creator
1250    OptionCreator.init();
1251
1252    // Get URL parameters to initialize selected tags
1253    const url = new URL(window.location.href);
1254    const tagsParam = url.searchParams.get("tags");
1255
1256    // If there are tags in the URL, select them in the select element
1257    if (tagsParam) {
1258      const selectedTags = tagsParam
1259        .split(",")
1260        .map((tag) => {
1261          try {
1262            return decodeURIComponent(tag.trim());
1263          } catch {
1264            return tag.trim();
1265          }
1266        })
1267        .filter((tag) => tag !== "");
1268
1269      // Update the select element options based on URL parameters
1270      Array.from(select.options).forEach((option) => {
1271        const optionValue = option.value.toLowerCase();
1272        option.selected = selectedTags.some(
1273          (tag) => tag.toLowerCase() === optionValue,
1274        );
1275      });
1276    }
1277
1278    // Create the input field
1279    const inputContainer = document.createElement("div");
1280    inputContainer.className = "tag-multi-select-input-container";
1281    container.appendChild(inputContainer);
1282
1283    // Create the selected tags and input field
1284    updateSelectedTags();
1285
1286    // Create the dropdown
1287    const dropdown = document.createElement("div");
1288    dropdown.className =
1289      "blog-filter-dropdown-base tag-multi-select-dropdown select-dropdown-hidden";
1290    dropdown.id = `${selectId}-dropdown`;
1291    dropdown.setAttribute("role", "listbox");
1292    dropdown.setAttribute("aria-multiselectable", "true");
1293    container.parentNode.appendChild(dropdown);
1294
1295    // Performance: Use event delegation with passive listeners where possible
1296    dropdown.addEventListener("click", handleDropdownClick, { passive: false });
1297    dropdown.addEventListener("keydown", handleDropdownKeydown, {
1298      passive: false,
1299    });
1300    dropdown.addEventListener("focus", handleDropdownFocus, {
1301      passive: true,
1302      capture: true,
1303    });
1304
1305    // Add click event to container to focus the input
1306    container.addEventListener("click", function (e) {
1307      // Don't process clicks on tags or remove buttons
1308      if (
1309        e.target.closest(".selected-tag") ||
1310        e.target.closest(".selected-tag-remove")
1311      ) {
1312        return;
1313      }
1314
1315      const input = container.querySelector(".tag-multi-select-input");
1316      if (input) {
1317        input.focus();
1318        dropdownManager.show("tags");
1319      }
1320    });
1321
1322    // Add click event to the arrow icon
1323    const toggleIcon = container.querySelector(".tag-toggle-icon");
1324    if (toggleIcon) {
1325      toggleIcon.addEventListener("click", function (e) {
1326        e.stopPropagation(); // Prevent container click event
1327        const input = container.querySelector(".tag-multi-select-input");
1328        if (container.classList.contains("active")) {
1329          hideDropdown();
1330          input?.blur();
1331          toggleIcon.classList.remove("menu-caret-animated");
1332        } else {
1333          dropdownManager.show("tags");
1334          input?.focus();
1335          toggleIcon.classList.add("menu-caret-animated");
1336        }
1337      });
1338    }
1339
1340    // Handle dropdown display
1341    function showDropdown() {
1342      container.classList.add("active");
1343      container.setAttribute("aria-expanded", "true");
1344      dropdown.classList.remove("select-dropdown-hidden");
1345      const input = container.querySelector(".tag-multi-select-input");
1346      if (input) input.setAttribute("aria-expanded", "true");
1347      const toggleIcon = container.querySelector(".tag-toggle-icon");
1348      if (toggleIcon) toggleIcon.classList.add("menu-caret-animated");
1349      populateDropdown();
1350    }
1351
1352    function hideDropdown() {
1353      container.classList.remove("active");
1354      container.setAttribute("aria-expanded", "false");
1355      dropdown.classList.add("select-dropdown-hidden");
1356      const input = container.querySelector(".tag-multi-select-input");
1357      if (input) input.setAttribute("aria-expanded", "false");
1358      const toggleIcon = container.querySelector(".tag-toggle-icon");
1359      if (toggleIcon) toggleIcon.classList.remove("menu-caret-animated");
1360      dropdownManager.hide("tags");
1361    }
1362
1363    // Register this dropdown with the manager
1364    dropdownManager.register("tags", showDropdown, hideDropdown);
1365
1366    // Handle clicks outside the component
1367    document.addEventListener("click", function (e) {
1368      if (!container.contains(e.target) && !dropdown.contains(e.target)) {
1369        hideDropdown();
1370      }
1371    });
1372
1373    // Update the selected tags UI
1374    function updateSelectedTags() {
1375      // Clear the input container
1376      inputContainer.innerHTML = "";
1377
1378      const selectedOptions = Array.from(select.selectedOptions);
1379
1380      // Set data attribute for tracking tag count
1381      inputContainer.setAttribute("data-tag-count", selectedOptions.length);
1382
1383      // Reset counter mode when no tags are selected
1384      if (selectedOptions.length === 0) {
1385        inputContainer.removeAttribute("data-was-counter");
1386      }
1387
1388      // Always start with individual tags layout - let browser do the layout
1389      createIndividualTagsLayout(selectedOptions, setupInputHandlers);
1390
1391      // Only check for space optimization if there are tags selected
1392      if (selectedOptions.length > 0) {
1393        // Use a single requestAnimationFrame after layout is complete
1394        requestAnimationFrame(() => {
1395          checkIfOptimizationNeeded(selectedOptions);
1396        });
1397      }
1398
1399      // Simple, reliable check: measure actual rendered input width
1400      function checkIfOptimizationNeeded(selectedOptions) {
1401        const input = inputContainer.querySelector(".tag-multi-select-input");
1402        if (!input) return;
1403
1404        // Simple rule: if input is squeezed below a comfortable width, use counter
1405        const inputWidth = input.getBoundingClientRect().width;
1406        const minComfortableWidth = 50; // Consistent with resize monitoring
1407
1408        if (inputWidth < minComfortableWidth) {
1409          // Switch to counter layout
1410          performLayoutSwitch(() => {
1411            switchToCounterLayout(selectedOptions);
1412          });
1413        } else {
1414          // Set up monitoring for future changes
1415          setupPersistentResizeMonitoring();
1416        }
1417      }
1418
1419      // Create counter layout directly
1420      function createCounterLayout(selectedOptions, setupInputHandlers) {
1421        // Mark that we're using counter layout
1422        inputContainer.setAttribute("data-was-counter", "true");
1423
1424        // Create counter tag
1425        const tag = document.createElement("div");
1426        tag.className = "selected-tag selected-tag-count";
1427
1428        const textSpan = document.createElement("span");
1429        textSpan.textContent = `${selectedOptions.length} tags`;
1430        tag.appendChild(textSpan);
1431
1432        const removeSpan = document.createElement("span");
1433        removeSpan.className = "selected-tag-remove";
1434        removeSpan.setAttribute("data-value", "clear-all");
1435        removeSpan.setAttribute("role", "button");
1436        removeSpan.setAttribute("tabindex", "0");
1437        removeSpan.setAttribute("aria-label", "Clear all tags");
1438
1439        const iconTemplate = document.getElementById(
1440          "tag-remove-icon-template",
1441        );
1442        if (iconTemplate) {
1443          const iconClone = document.importNode(iconTemplate.content, true);
1444          removeSpan.appendChild(iconClone);
1445        }
1446
1447        removeSpan.addEventListener("click", function (e) {
1448          e.stopPropagation();
1449          Array.from(select.selectedOptions).forEach((option) => {
1450            option.selected = false;
1451          });
1452          updateSelectedTags();
1453          updateURL();
1454          populateDropdown();
1455          dropdownManager.show("tags");
1456        });
1457
1458        removeSpan.addEventListener("keydown", function (e) {
1459          if (e.key === "Enter" || e.key === " ") {
1460            e.preventDefault();
1461            e.stopPropagation();
1462            Array.from(select.selectedOptions).forEach((option) => {
1463              option.selected = false;
1464            });
1465            updateSelectedTags();
1466            updateURL();
1467            populateDropdown();
1468            dropdownManager.show("tags");
1469          }
1470        });
1471
1472        tag.appendChild(removeSpan);
1473        inputContainer.appendChild(tag);
1474
1475        // Add input field
1476        const input = document.createElement("input");
1477        input.type = "text";
1478        input.className = "tag-multi-select-input";
1479        input.setAttribute("role", "combobox");
1480        input.setAttribute("aria-label", "Search and select tags");
1481        input.setAttribute("aria-expanded", "false");
1482        input.setAttribute("aria-controls", `${selectId}-dropdown`);
1483        input.setAttribute("aria-autocomplete", "list");
1484        input.placeholder = selectedOptions.length ? "" : "Select tags...";
1485
1486        inputContainer.appendChild(input);
1487        setupInputHandlers(input);
1488
1489        // Set up resize monitoring for counter layout too
1490        setupPersistentResizeMonitoring();
1491      }
1492
1493      // Global state to prevent resize observer loops - declare outside functions
1494      let globalResizeObserver = null;
1495      let lastLayoutChangeTime = 0;
1496      let isInTransition = false;
1497
1498      // Centralized resize monitoring that persists across layout changes
1499      function setupPersistentResizeMonitoring() {
1500        // Clean up any existing observer
1501        if (globalResizeObserver) {
1502          globalResizeObserver.disconnect();
1503        }
1504
1505        let resizeTimeout;
1506
1507        globalResizeObserver = new ResizeObserver(() => {
1508          clearTimeout(resizeTimeout);
1509          resizeTimeout = setTimeout(() => {
1510            // Skip if we just changed layouts recently or are in transition
1511            const timeSinceLastChange = Date.now() - lastLayoutChangeTime;
1512            if (timeSinceLastChange < 500 || isInTransition) {
1513              return;
1514            }
1515
1516            const currentSelectedOptions = Array.from(select.selectedOptions);
1517            if (currentSelectedOptions.length === 0) return;
1518
1519            requestAnimationFrame(() => {
1520              const input = inputContainer.querySelector(
1521                ".tag-multi-select-input",
1522              );
1523              if (!input) return;
1524
1525              const inputWidth = input.getBoundingClientRect().width;
1526              const isCurrentlyCounter =
1527                inputContainer.hasAttribute("data-was-counter");
1528
1529              // Only switch if there's a significant difference to avoid oscillation
1530              // Use a larger hysteresis gap between thresholds
1531              if (!isCurrentlyCounter && inputWidth < 50) {
1532                // Switch to counter (lower threshold)
1533                performLayoutSwitch(() => {
1534                  switchToCounterLayout(currentSelectedOptions);
1535                });
1536              } else if (isCurrentlyCounter && inputWidth >= 180) {
1537                // Switch back to individual (much larger gap to prevent oscillation)
1538                performLayoutSwitch(() => {
1539                  switchToIndividualLayout(currentSelectedOptions);
1540                });
1541              }
1542            });
1543          }, 200); // Longer debounce for more stability
1544        });
1545
1546        globalResizeObserver.observe(inputContainer);
1547      }
1548
1549      // Helper to manage layout transitions
1550      function performLayoutSwitch(switchFunction) {
1551        isInTransition = true;
1552        lastLayoutChangeTime = Date.now();
1553
1554        switchFunction();
1555
1556        // Reset transition state after a delay
1557        setTimeout(() => {
1558          isInTransition = false;
1559        }, 300);
1560      }
1561
1562      // Helper function to switch to counter layout
1563      function switchToCounterLayout(selectedOptions) {
1564        inputContainer.setAttribute("data-was-counter", "true");
1565        inputContainer.innerHTML = "";
1566        createCounterLayout(selectedOptions, setupInputHandlers);
1567      }
1568
1569      // Helper function to switch to individual layout
1570      function switchToIndividualLayout(selectedOptions) {
1571        inputContainer.removeAttribute("data-was-counter");
1572        inputContainer.innerHTML = "";
1573        createIndividualTagsLayout(selectedOptions, setupInputHandlers);
1574
1575        // Set up monitoring in the new layout with a longer delay
1576        // Allow the layout to settle before making decisions
1577        setTimeout(() => {
1578          // Only check if we're not in transition and haven't switched recently
1579          if (isInTransition || Date.now() - lastLayoutChangeTime < 500) {
1580            setupPersistentResizeMonitoring();
1581            return;
1582          }
1583
1584          const input = inputContainer.querySelector(".tag-multi-select-input");
1585          if (input && input.getBoundingClientRect().width < 50) {
1586            // If still too tight, go back to counter
1587            performLayoutSwitch(() => {
1588              switchToCounterLayout(selectedOptions);
1589            });
1590          } else {
1591            setupPersistentResizeMonitoring();
1592          }
1593        }, 100); // Give layout time to settle
1594      }
1595
1596      // Helper function to create individual tag layout
1597      function createIndividualTagsLayout(selectedOptions, setupInputHandlers) {
1598        // Clear counter layout marker since we're using individual layout
1599        inputContainer.removeAttribute("data-was-counter");
1600
1601        // Add selected tags directly to container
1602        selectedOptions.forEach((option) => {
1603          const tag = document.createElement("div");
1604          tag.className = "selected-tag";
1605
1606          const textSpan = document.createElement("span");
1607          textSpan.textContent = option.textContent;
1608          tag.appendChild(textSpan);
1609
1610          const removeSpan = document.createElement("span");
1611          removeSpan.className = "selected-tag-remove";
1612          removeSpan.setAttribute("data-value", option.value);
1613          removeSpan.setAttribute("role", "button");
1614          removeSpan.setAttribute("tabindex", "0");
1615          removeSpan.setAttribute(
1616            "aria-label",
1617            `Remove ${option.textContent} tag`,
1618          );
1619
1620          const iconTemplate = document.getElementById(
1621            "tag-remove-icon-template",
1622          );
1623          if (iconTemplate) {
1624            const iconClone = document.importNode(iconTemplate.content, true);
1625            removeSpan.appendChild(iconClone);
1626          }
1627
1628          tag.appendChild(removeSpan);
1629          inputContainer.appendChild(tag);
1630
1631          removeSpan.addEventListener("click", function (e) {
1632            e.stopPropagation();
1633            removeTag(this.getAttribute("data-value"));
1634          });
1635
1636          removeSpan.addEventListener("keydown", function (e) {
1637            if (e.key === "Enter" || e.key === " ") {
1638              e.preventDefault();
1639              e.stopPropagation();
1640              removeTag(this.getAttribute("data-value"));
1641            }
1642          });
1643        });
1644
1645        // Add input field
1646        const input = document.createElement("input");
1647        input.type = "text";
1648        input.className = "tag-multi-select-input";
1649        input.setAttribute("role", "combobox");
1650        input.setAttribute("aria-label", "Search and select tags");
1651        input.setAttribute("aria-expanded", "false");
1652        input.setAttribute("aria-controls", `${selectId}-dropdown`);
1653        input.setAttribute("aria-autocomplete", "list");
1654        input.placeholder = selectedOptions.length ? "" : "Select tags...";
1655
1656        inputContainer.appendChild(input);
1657        setupInputHandlers(input);
1658      }
1659
1660      function setupInputHandlers(input) {
1661        // Handle input focus
1662        input.addEventListener("focus", function () {
1663          dropdownManager.show("tags");
1664        });
1665
1666        // Handle input for filtering
1667        input.addEventListener("input", function () {
1668          populateDropdown(this.value);
1669        });
1670
1671        // Handle keyboard navigation
1672        input.addEventListener("keydown", function (e) {
1673          if (e.key === "Backspace" && !this.value) {
1674            if (selectedOptions.length) {
1675              const removedTag = selectedOptions[selectedOptions.length - 1];
1676              removeTag(removedTag.value);
1677              announceToScreenReader(`${removedTag.textContent} removed`);
1678
1679              // Focus the input after tag removal and position cursor at the end
1680              requestAnimationFrame(() => {
1681                const newInput = inputContainer.querySelector(
1682                  ".tag-multi-select-input",
1683                );
1684                if (newInput) {
1685                  newInput.focus();
1686                  // Position cursor at the end of the input
1687                  newInput.setSelectionRange(
1688                    newInput.value.length,
1689                    newInput.value.length,
1690                  );
1691                }
1692              });
1693            }
1694          } else if (e.key === "ArrowDown") {
1695            e.preventDefault();
1696            const firstOption = dropdown.querySelector(
1697              ".tag-multi-select-option",
1698            );
1699            if (firstOption) {
1700              firstOption.focus();
1701            }
1702          } else if (e.key === "Escape") {
1703            e.preventDefault();
1704            hideDropdown();
1705          }
1706        });
1707      }
1708    }
1709
1710    // Use CSS container queries instead of ResizeObserver to avoid forced reflows
1711    // The layout switching is now handled purely by CSS based on container size
1712
1713    // Event delegation handlers for better performance
1714    function handleDropdownClick(e) {
1715      const optionEl = e.target.closest(".tag-multi-select-option");
1716      if (!optionEl) return;
1717
1718      e.stopPropagation();
1719      toggleOptionSelection(optionEl);
1720
1721      // Keep focus on input
1722      const input = document.querySelector(".tag-multi-select-input");
1723      if (input) input.focus();
1724    }
1725
1726    function handleDropdownKeydown(e) {
1727      const optionEl = e.target.closest(".tag-multi-select-option");
1728      if (!optionEl) return;
1729
1730      if (e.key === "Enter" || e.key === " ") {
1731        e.preventDefault();
1732        toggleOptionSelection(optionEl);
1733
1734        // Announce selection change
1735        const announcement = optionEl.classList.contains("selected")
1736          ? `${optionEl.textContent} selected`
1737          : `${optionEl.textContent} deselected`;
1738        announceToScreenReader(announcement);
1739      } else if (e.key === "ArrowDown") {
1740        e.preventDefault();
1741        const nextOption = optionEl.nextElementSibling;
1742        if (nextOption) nextOption.focus();
1743      } else if (e.key === "ArrowUp") {
1744        e.preventDefault();
1745        const prevOption = optionEl.previousElementSibling;
1746        if (prevOption) {
1747          prevOption.focus();
1748        } else {
1749          // Focus back on input
1750          const input = document.querySelector(".tag-multi-select-input");
1751          if (input) {
1752            input.focus();
1753            container.setAttribute("aria-activedescendant", "");
1754          }
1755        }
1756      } else if (e.key === "Escape") {
1757        e.preventDefault();
1758        hideDropdown();
1759        const input = document.querySelector(".tag-multi-select-input");
1760        if (input) input.focus();
1761      }
1762    }
1763
1764    function handleDropdownFocus(e) {
1765      const optionEl = e.target.closest(".tag-multi-select-option");
1766      if (optionEl) {
1767        container.setAttribute("aria-activedescendant", optionEl.id);
1768      }
1769    }
1770
1771    // DRY: Centralized selection toggle
1772    function toggleOptionSelection(optionEl) {
1773      const value = optionEl.getAttribute("data-value");
1774      const isCurrentlySelected = optionEl.classList.contains("selected");
1775
1776      if (isCurrentlySelected) {
1777        removeTag(value);
1778      } else {
1779        addTag(value);
1780      }
1781
1782      // Update visual state
1783      OptionCreator.updateOptionState(optionEl, !isCurrentlySelected);
1784    }
1785
1786    // Populate the dropdown with options (Performance Optimized)
1787    function populateDropdown(filter = "") {
1788      // Use DocumentFragment for better performance
1789      const fragment = document.createDocumentFragment();
1790
1791      const options = Array.from(select.options);
1792      const filterLower = filter.toLowerCase();
1793
1794      // Filter options efficiently
1795      const filteredOptions = options.filter((option) =>
1796        option.textContent.toLowerCase().includes(filterLower),
1797      );
1798
1799      if (filteredOptions.length === 0) {
1800        dropdown.innerHTML =
1801          '<div class="p-4" role="status">No matching tags found</div>';
1802        return;
1803      }
1804
1805      // Batch DOM operations using DocumentFragment and DRY utilities
1806      filteredOptions.forEach((option) => {
1807        const optionEl = OptionCreator.createOption(option);
1808        fragment.appendChild(optionEl);
1809      });
1810
1811      // Single DOM update for better performance
1812      dropdown.innerHTML = "";
1813      dropdown.appendChild(fragment);
1814    }
1815
1816    // Add a tag
1817    function addTag(value) {
1818      const option = Array.from(select.options).find(
1819        (opt) => opt.value === value,
1820      );
1821      if (option) {
1822        option.selected = true;
1823      }
1824      updateSelectedTags();
1825      updateURL();
1826    }
1827
1828    // Remove a tag
1829    function removeTag(value) {
1830      const option = Array.from(select.options).find(
1831        (opt) => opt.value === value,
1832      );
1833      if (option) {
1834        option.selected = false;
1835      }
1836      updateSelectedTags();
1837      updateURL();
1838
1839      // Refresh the dropdown to show the newly available tag
1840      populateDropdown(
1841        document.querySelector(".tag-multi-select-input")?.value || "",
1842      );
1843
1844      // If the input is focused, make sure the dropdown stays visible
1845      const input = document.querySelector(".tag-multi-select-input");
1846      if (input && document.activeElement === input) {
1847        dropdownManager.show("tags");
1848      }
1849    }
1850
1851    // Update the URL with selected tags
1852    function updateURL() {
1853      const selectedValues = Array.from(select.selectedOptions).map(
1854        (option) => option.value,
1855      );
1856
1857      // Get current URL and params
1858      const url = new URL(window.location.href);
1859      const pathParts = url.pathname.split("/").filter(Boolean);
1860
1861      // If we're on an overview page and tags are selected, redirect to the category page
1862      if (isOverviewPageValue && selectedValues.length > 0) {
1863        // Get the category name from the current URL path
1864        const categoryFromPath = pathParts[pathParts.length - 1];
1865
1866        // Create the new URL for the categories page
1867        const newUrl = new URL(window.location.origin);
1868        newUrl.pathname = `/blog/categories/${categoryFromPath}/`;
1869        if (selectedValues.length > 0) {
1870          // Convert tags to URL-friendly format
1871          const tagsValue = selectedValues
1872            .map((tag) => encodeURIComponent(tag))
1873            .join(",");
1874          newUrl.searchParams.set("tags", tagsValue);
1875        }
1876
1877        // Force a page reload to the new URL
1878        window.location.replace(newUrl.toString());
1879        return; // Stop here since we're redirecting
1880      }
1881
1882      // For non-overview pages, just update the URL
1883      if (selectedValues.length > 0) {
1884        // Convert tags to URL-friendly format
1885        const tagsValue = selectedValues
1886          .map((tag) => encodeURIComponent(tag))
1887          .join(",");
1888        url.searchParams.set("tags", tagsValue);
1889      } else {
1890        url.searchParams.delete("tags");
1891      }
1892
1893      // Update the URL without refreshing the page
1894      window.history.pushState({}, "", url.toString());
1895
1896      // Update post visibility based on selected tags
1897      updatePostVisibility(selectedValues);
1898
1899      // Dispatch a custom event to notify that tags have changed
1900      const event = new CustomEvent("tagsChanged", {
1901        detail: {
1902          tags: selectedValues,
1903          category: pathParts[pathParts.length - 1] || "",
1904        },
1905      });
1906      document.dispatchEvent(event);
1907    }
1908
1909    // Function to update post visibility based on selected tags
1910    function updatePostVisibility(selectedTags) {
1911      // Find all blog post list containers
1912      const containers = document.querySelectorAll("[id^='blog-post-list-']");
1913
1914      containers.forEach((container) => {
1915        const componentId = container.id;
1916        const showMoreButton = document.getElementById(
1917          `${componentId}-show-more`,
1918        );
1919        const showAllButton = document.getElementById(
1920          `${componentId}-show-all`,
1921        );
1922        const noMoreMessage = document.getElementById(`${componentId}-no-more`);
1923        const allPosts = container.querySelectorAll(".post-item");
1924
1925        // If no tags selected, reset to initial infinite scroll state
1926        if (selectedTags.length === 0) {
1927          const itemsPerPage = showMoreButton
1928            ? parseInt(
1929                showMoreButton.getAttribute("data-items-per-page") || "12",
1930                10,
1931              )
1932            : 12;
1933          // Batch DOM operations for better performance
1934          const postsToShow = Array.from(allPosts).slice(0, itemsPerPage);
1935          const postsToHide = Array.from(allPosts).slice(itemsPerPage);
1936
1937          requestAnimationFrame(() => {
1938            postsToShow.forEach((post) => post.classList.remove("hidden-post"));
1939            postsToHide.forEach((post) => post.classList.add("hidden-post"));
1940          });
1941
1942          // Reset buttons
1943          if (showMoreButton) {
1944            showMoreButton.style.display =
1945              allPosts.length > itemsPerPage ? "inline-block" : "none";
1946            showMoreButton.setAttribute("data-current-page", "1");
1947          }
1948          if (showAllButton) {
1949            showAllButton.style.display =
1950              allPosts.length > itemsPerPage ? "inline-block" : "none";
1951          }
1952          if (noMoreMessage) {
1953            noMoreMessage.classList.add("hidden");
1954          }
1955          return;
1956        }
1957
1958        // Convert selected tags to lowercase for comparison
1959        const selectedTagsLower = selectedTags.map((tag) => tag.toLowerCase());
1960
1961        // Batch DOM operations using requestAnimationFrame for better performance
1962        const postsToShow = [];
1963        const postsToHide = [];
1964
1965        // First pass: determine which posts to show/hide without DOM manipulation
1966        allPosts.forEach((post) => {
1967          const postTagsAttr = post
1968            .querySelector("[data-tags]")
1969            ?.getAttribute("data-tags");
1970          if (!postTagsAttr) return;
1971
1972          try {
1973            const postTags = JSON.parse(postTagsAttr).map((tag) =>
1974              tag.toLowerCase(),
1975            );
1976            const hasMatchingTag = postTags.some((tag) =>
1977              selectedTagsLower.includes(tag),
1978            );
1979
1980            if (hasMatchingTag) {
1981              postsToShow.push(post);
1982            } else {
1983              postsToHide.push(post);
1984            }
1985          } catch (e) {
1986            console.error("Error parsing post tags:", e);
1987          }
1988        });
1989
1990        // Second pass: batch apply changes in requestAnimationFrame
1991        requestAnimationFrame(() => {
1992          postsToShow.forEach((post) => post.classList.remove("hidden-post"));
1993          postsToHide.forEach((post) => post.classList.add("hidden-post"));
1994        });
1995
1996        // Update button visibility
1997        if (showMoreButton) showMoreButton.style.display = "none";
1998        if (showAllButton) showAllButton.style.display = "none";
1999        if (noMoreMessage) noMoreMessage.classList.remove("hidden");
2000      });
2001    }
2002  }
2003})();</script>
2003  </div> </div>  </div>  </section>  <section class="featured-post-section section" aria-labelledby="featured-post-heading"> <div class="padding-global-box"> <div class="container-large box-component box-rounded-full bg-neutral-default-secondary"> <div class="section-padding vertical extra-small gap-16"> <article class="featured-post" aria-labelledby="featured-post-title"> <h2 id="featured-post-heading" class="sr-only">
2004Featured Post
2005</h2> <div class="container items-center grid grid-cols-12 gap-x-0 gap-y-8 md:gap-x-8"> <div class="featured-post-content"> <div class="post-meta"> <div class="featured-post-label"> <address class="author-info">  <div class="author-info-item">   <img src="/_astro/jonathan-d-rhyne.xChnw7U9_Z77b9n.webp" alt="Profile picture of Jonathan D. Rhyne" loading="lazy" decoding="async" srcset="/_astro/jonathan-d-rhyne.xChnw7U9_ZJJBqE.webp 192w" sizes="100vw" width="48" height="48"> <p class="author-name">Jonathan D. Rhyne</p> </div> </address> </div> <h2 id="featured-post-title" class="post-title"> <a href="/blog/nutrient-launches-documents-for-salesforce/" aria-label="Read full article: Nutrient launches Documents for Salesforce, consolidating the enterprise document lifecycle inside the CRM"> Nutrient launches Documents for Salesforce, consolidating the enterprise document lifecycle inside the CRM </a> </h2> </div> <div class="post-description"> <p>Nutrient announces Documents for Salesforce, a natively built solution that consolidates document generation, editing, redaction, and signing inside Salesforce. The platform eliminates fragmented document workflows by keeping templates, editing, and signing on the Salesforce record — governed by existing CRM permissions and controls.</p> <a href="/blog/nutrient-launches-documents-for-salesforce/" class="btn btn-primary" aria-label="Read more about Nutrient launches Documents for Salesforce, consolidating the enterprise document lifecycle inside the CRM">
2006Read more
2007</a> </div> </div> <div class="xl:block xl:col-span-1 hidden xl:order-2"></div> <a href="/blog/nutrient-launches-documents-for-salesforce/" class="featured-post-media " aria-hidden="true" tabindex="-1"> <div class="relative aspect-video overflow-hidden rounded-3xl">   <img src="/_astro/article-header.uigNq342_105tMT.webp" alt="Featured image for article: Nutrient launches Documents for Salesforce, consolidating the enterprise document lifecycle inside the CRM" loading="eager" decoding="async" fetchpriority="high" srcset="/_astro/article-header.uigNq342_Z2okeg7.webp 480w, /_astro/article-header.uigNq342_fJ9Fd.webp 768w, /_astro/article-header.uigNq342_Z1Kyryg.webp 992w, /_astro/article-header.uigNq342_ZG5N8i.webp 1280w, /_astro/article-header.uigNq342_2rV2Tu.webp 1440w, /_astro/article-header.uigNq342_Zm5QgT.webp 1920w, /_astro/article-header.uigNq342_105tMT.webp 2000w" sizes="(min-width: 1400px) 760px, (min-width: 992px) 60vw, 100vw" width="2000" height="1000" class="object-cover w-full h-full">  </div> </a> </div> </article> </div> </div> </div> </section>   <!-- Badges Section --> <section class="section-spacing-horizontal-default">   <div class="container-large radius-container container-spacing-horizontal-default container-spacing-vertical-large">   <div class="container grid grid-cols-1 lg:grid-cols-12 gap-spacing-lg">  <div class="lg:col-span-5 flex items-center">  <div class="text-block text-left">  <div class="text-block-container gap-spacing-lg"> <div class="text-block-headline-container">  <h2 class="text-block-title heading-3">Recognized by the industry, trusted by developers</h2> </div> <div class="text-block-content"> <p class="text-block-description font-size-text-default">Nutrient is consistently ranked as a leader in document technology by G2 and SourceForge.</p>  </div> </div> </div>  </div> <div class="lg:col-span-6 lg:col-start-7 flex items-start justify-between">  <div class="container grid gap-6 grid-cols-2 md:grid-cols-4 justify-between">  <div>    <a title="Users love Nutrient SDK on G2" href="https://www.g2.com/products/nutrient-sdk/reviews?utm_source=rewards-medal" target="_blank"><img alt="Users Love Us" class="w-[104px] !rounded-none" src="https://www.g2.com/shared-assets/product-badges/users-love-us.svg"></a>   </div> <div>    <a title="Nutrient SDK reviews on SourceForge" href="https://sourceforge.net/software/product/Nutrient-SDK/?pk_campaign=badge&pk_source=vendor" target="_blank"><img alt="Nutrient SDK Reviews" class="w-[104px] !rounded-none" src="https://b.sf-syn.com/badge_img/3081810/leader-summer-white?achievement=leader-seasonal-2026-summer&variant_id=sf"></a>   </div> <div>    <a title="Nutrient SDK reviews on SourceForge" href="https://sourceforge.net/software/product/Nutrient-SDK/?pk_campaign=badge&pk_source=vendor" target="_blank"><img alt="Nutrient SDK Reviews" class="w-[104px] !rounded-none" src="https://b.sf-syn.com/badge_img/3081810/leader-spring-white?achievement=leader-seasonal-2026-spring&variant_id=sf"></a>   </div> <div>    <a title="Nutrient SDK reviews on SourceForge" href="https://sourceforge.net/software/product/Nutrient-SDK/?pk_campaign=badge&pk_source=vendor" target="_blank"><img alt="Nutrient SDK Reviews" class="w-[104px] !rounded-none" src="https://b.sf-syn.com/badge_img/3081810/leader-winter-white?achievement=leader-seasonal-2026-winter&variant_id=sf"></a>   </div>  </div>  </div>  </div>  </div>  </section> <!-- Separator --> <section class="section-spacing-horizontal-default">   <div class="container-large radius-container container-spacing-horizontal-default !py-0">   <hr class="separator separator-primary">  </div>  </section> <!-- Latest News Section --> <section class="section-spacing-horizontal-default">   <div class="container-large radius-container container-spacing-horizontal-default !py-0 flex flex-col gap-container-spacing-vertical-small mb-container-spacing-vertical-medium mt
2007-container-spacing-vertical-small">   <div class="container grid gap-6 grid-cols-1">  <div class="flex flex-col gap-[10px] sm:gap-spacing-md sm:flex-row sm:justify-between sm:items-center">  <div class="text-block text-left">  <div class="text-block-container gap-spacing-2xs"> <div class="text-block-headline-container">  <h4 class="text-block-title heading-4">Latest news</h4> </div>  </div> </div> <a href="/blog/categories/news/" target="_self" tabindex="0" class="btn btn-ghost btn-icon-right"> EXPLORE MORE <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class="w-6 h-6" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2008  <path fill="currentColor" d="M15 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-3 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-1 3a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-1-5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Zm-4-1a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-2 1a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"/>
2009 </svg><!-- Define styles for the SVG element with the provided color and size --> </a>  </div>  </div> <section class="latest-posts-wrapper article-preview-grid ">      <div class="article-preview-wrapper">  <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;]">  <div class="article-preview-content"> <a href="https://governmenttechnologyinsider.com/the-document-accessibility-deadline-most-agencies-are-going-to-miss/" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="The Document Accessibility Deadline Most Agencies Are Going to Miss " loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2010  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2011 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/default-avatar.DzCEIadE_ZznCP0.webp" alt="Government Technology Insider" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">Government Technology Insider</p> </address> </div> <h2 class="post-title"> <a href="https://governmenttechnologyinsider.com/the-document-accessibility-deadline-most-agencies-are-going-to-miss/" target="_blank" rel="noopener noreferrer"> The Document Accessibility Deadline Most Agencies Are Going to Miss  </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Press release&quot;]">  <div class="article-preview-content"> <a href="/blog/nutrient-advances-workflow-platform-agentic-ai/" class="article-preview-media ">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Nutrient advances Workflow platform with agentic AI for enterprise-grade speed and consistency in document-heavy operations" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover">  </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/jonathan-d-rhyne.xChnw7U9_Z77b9n.webp" alt="Jonathan D. Rhyne" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">Jonathan D. Rhyne</p> </address> </div> <h2 class="post-title"> <a href="/blog/nutrient-advances-workflow-platform-agentic-ai/"> Nutrient advances Workflow platform with agentic AI for enterprise-grade speed and consistency in document-heavy operations </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;,&quot;Security&quot;]">  <div class="article-preview-content"> <a href="https://securitybuzz.com/cybersecurity-news/why-enterprise-permissions-are-ais-most-d
2011angerous-inheritance/" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Why Enterprise Permissions Are AI’s Most Dangerous Inheritance" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2012  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2013 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/default-avatar.DzCEIadE_ZznCP0.webp" alt="SecurityBuzz" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">SecurityBuzz</p> </address> </div> <h2 class="post-title"> <a href="https://securitybuzz.com/cybersecurity-news/why-enterprise-permissions-are-ais-most-dangerous-inheritance/" target="_blank" rel="noopener noreferrer"> Why Enterprise Permissions Are AI’s Most Dangerous Inheritance </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Press release&quot;]">  <div class="article-preview-content"> <a href="/blog/nutrient-expands-ai-assistant/" class="article-preview-media ">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Nutrient expands AI Assistant, automating multistep document workflows inside any application" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover">  </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/jonathan-d-rhyne.xChnw7U9_Z77b9n.webp" alt="Jonathan D. Rhyne" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">Jonathan D. Rhyne</p> </address> </div> <h2 class="post-title"> <a href="/blog/nutrient-expands-ai-assistant/"> Nutrient expands AI Assistant, automating multistep document workflows inside any application </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;]">  <div class="article-preview-content"> <a href="https://fortune.com/2026/02/19/openclaw-who-is-peter-steinberger-openai-sam-altman-anthropic-moltbook/" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Who is OpenClaw creator Peter Steinberger? The millennial developer caught the attention of Sam Altman and Mark Zuckerberg" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2014  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2015 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/default-avatar.DzCEIadE_ZznCP0.webp" alt="Fortune" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">Fortune</p> </address> </div> <h2 class="post-title"> <a href="https://fortune.com/2026/02/19/openclaw-who-is-peter-steinberger-openai-sam-altman-anthropic-moltbook/" target="_blank" rel="noopener noreferrer"> Who is OpenClaw creator Peter Steinberger? The millennial developer caught the attention of Sam Altman and Mark Zuckerberg </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;]">  <div class="article-preview-content"> <a href="https://www.sdcexec.com/warehousing/automation/article/22957364/nutrient-workflow-automation-the-missing-link-in-supply-chain-efficiency" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Workflow Automation: The missing link in supply chain efficiency" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2016  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2017 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/bradley-hearn.h45ieF14_1Npwtn.webp" alt="Bradley Hearn" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">Bradley Hearn</p> </address> </div> <h2 class="post-title"> <a href="https://www.sdcexec.com/warehousing/automation/article/22957364/nutrient-workflow-automation-the-missing-link-in-supply-chain-efficiency" target="_blank" rel="noopener noreferrer"> Workflow Automation: The missing link in supply chain efficiency </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;]">  <div class="article-preview-content"> <a href="https://www.devopsdigest.com/2026-low-code-no-code-predictions" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="2026 Low-Code/No-Code Predictions by DevOps" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2018  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2019 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/default-avatar.DzCEIadE_ZznCP0.webp" alt="DevOps Digest" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">DevOps Digest</p> </address> </div> <h2 class="post-title"> <a href="https://www.devopsdigest.com/2026-low-code-no-code-predictions" target="_blank" rel="noopener noreferrer"> 2026 Low-Code/No-Code Predictions by DevOps </a> </h2> </div> </div>      </article>   <article class="article-preview-item " data-tags="[&quot;Media coverage&quot;]">  <div class="article-preview-content"> <a href="https://www.kmworld.com/Articles/Editorial/ViewPoints/Leaders-predict-AI-to-continue-permeating-all-aspects-of-KM-in-2026-172594.aspx" target="_blank" rel="noopener noreferrer" class="article-preview-media external-link">   <img src="/_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp" alt="Leaders predict AI to continue permeating all aspects of KM in 2026" loading="lazy" decoding="async" srcset="/_astro/news-placeholder.BWNgkSPl_1ST1zN.webp 480w, /_astro/news-placeholder.BWNgkSPl_Z2vX443.webp 768w, /_astro/news-placeholder.BWNgkSPl_Z11eYlf.webp 992w, /_astro/news-placeholder.BWNgkSPl_ZwrIs9.webp 1280w, /_astro/news-placeholder.BWNgkSPl_Z1INL0M.webp 1440w, /_astro/news-placeholder.BWNgkSPl_Z1OGffh.webp 1920w, /_astro/news-placeholder.BWNgkSPl_Zep4Qd.webp 2000w" sizes="(min-width: 992px) 40vw, (min-width: 768px) 50vw, 100vw" width="2000" height="1000" class="w-full h-full object-cover"> <span class="external-link-badge" aria-label="Opens in new tab"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" width="24" height="24" class width="24" height="24" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2020  <path fill="currentColor" d="M9 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm3 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm4-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-4 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm-1 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm8-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0Zm1 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/>
2021 </svg><!-- Define styles for the SVG element with the provided color and size --> </span> </a> <div class="article-preview-text"> <div class="article-preview-meta"> <address class="author-info">   <img src="/_astro/default-avatar.DzCEIadE_ZznCP0.webp" alt="KMWorld" loading="lazy" decoding="async" width="48" height="48"> <p class="author-name">KMWorld</p> </address> </div> <h2 class="post-title"> <a href="https://www.kmworld.com/Articles/Editorial/ViewPoints/Leaders-predict-AI-to-continue-permeating-all-aspects-of-KM-in-2026-172594.aspx" target="_blank" rel="noopener noreferrer"> Leaders predict AI to continue permeating all aspects of KM in 2026 </a> </h2> </div> </div>      </article>   </div>   </section>  </div>  </section> <!-- CTA Section --> <section class="section-spacing-horizontal-default mb-container-spacing-vertical-medium">   <div class="container-large radius-container container-spacing-horizontal-default container-spacing-vertical-large bg-neutral-default-secondary">   <div class="container grid grid-cols-1 lg:grid-cols-12 gap-spacing-xl">  <div class="lg:col-span-4 lg:col-start-5">  <div class="text-block text-center mx-auto">  <div class="text-block-container gap-spacing-lg"> <div class="text-block-headline-container"> <p class="text-block-supertitle heading-6"> blog archive </p> <h3 class="text-block-title heading-3">View all blog posts</h3> </div> <div class="text-block-content">  <div class="text-block-actions justify-center"> <a href="/blog/all/" target="_self" tabindex="0" class="btn btn-primary text-block-button"> view all  </a>  </div> </div> </div> </div>  </div>  </div>  </div>  </section>  </div> </main> <footer class="footer"> <div class="footer-wrapper"> <section class="section-spacing-horizontal-default">   <div class="container-large container-spacing-horizontal-default !py-0">  <div class="footer-top"> <!-- Icon --><div class="footer-icon"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 70 70" width="70" height="70" class aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2022  <path d="M35.0003 11.6667C33.7117 11.6667 32.667 12.7113 32.667 14
2022C32.667 15.2887 33.7117 16.3333 35.0003 16.3333C36.289 16.3333 37.3337 15.2887 37.3337 14C37.3337 12.7113 36.289 11.6667 35.0003 11.6667Z" fill="currentColor"/>
2023  <path d="M42.0003 23.3333C40.7117 23.3333 39.667 22.2887 39.667 21C39.667 19.7113 40.7117 18.6667 42.0003 18.6667C43.289 18.6667 44.3337 19.7113 44.3337 21C44.3337 22.2887 43.289 23.3333 42.0003 23.3333Z" fill="currentColor"/>
2024  <path d="M30.3337 21C30.3337 22.2887 29.289 23.3333 28.0003 23.3333C26.7117 23.3333 25.667 22.2887 25.667 21C25.667 19.7113 26.7117 18.6667 28.0003 18.6667C29.289 18.6667 30.3337 19.7113 30.3337 21Z" fill="currentColor"/>
2025  <path d="M14.0003 56C15.289 56 16.3337 54.9553 16.3337 53.6667C16.3337 52.378 15.289 51.3333 14.0003 51.3333C12.7117 51.3333 11.667 52.378 11.667 53.6667C11.667 54.9553 12.7117 56 14.0003 56Z" fill="currentColor"/>
2026  <path d="M47.8337 53.6667C47.8337 54.9553 46.789 56 45.5003 56C44.2117 56 43.167 54.9553 43.167 53.6667C43.167 52.378 44.2117 51.3333 45.5003 51.3333C46.789 51.3333 47.8337 52.378 47.8337 53.6667Z" fill="currentColor"/>
2027  <path d="M24.5003 56C25.789 56 26.8337 54.9553 26.8337 53.6667C26.8337 52.378 25.789 51.3333 24.5003 51.3333C23.2117 51.3333 22.167 52.378 22.167 53.6667C22.167 54.9553 23.2117 56 24.5003 56Z" fill="currentColor"/>
2028  <path d="M37.3337 53.6667C37.3337 54.9553 36.289 56 35.0003 56C33.7117 56 32.667 54.9553 32.667 53.6667C32.667 52.378 33.7117 51.3333 35.0003 51.3333C36.289 51.3333 37.3337 52.378 37.3337 53.6667Z" fill="currentColor"/>
2029  <path d="M56.0003 56C57.289 56 58.3337 54.9553 58.3337 53.6667C58.3337 52.378 57.289 51.3333 56.0003 51.3333C54.7117 51.3333 53.667 52.378 53.667 53.6667C53.667 54.9553 54.7117 56 56.0003 56Z" fill="currentColor"/>
2030  <path d="M23.3337 28C23.3337 29.2887 22.289 30.3333 21.0003 30.3333C19.7117 30.3333 18.667 29.2887 18.667 28C18.667 26.7113 19.7117 25.6667 21.0003 25.6667C22.289 25.6667 23.3337 26.7113 23.3337 28Z" fill="currentColor"/>
2031  <path d="M49.0003 30.3333C50.289 30.3333 51.3337 29.2887 51.3337 28C51.3337 26.7113 50.289 25.6667 49.0003 25.6667C47.7117 25.6667 46.667 26.7113 46.667 28C46.667 29.2887 47.7117 30.3333 49.0003 30.3333Z" fill="currentColor"/>
2032  <path d="M16.3337 35C16.3337 36.2887 15.289 37.3333 14.0003 37.3333C12.7117 37.3333 11.667 36.2887 11.667 35C11.667 33.7113 12.7117 32.6667 14.0003 32.6667C15.289 32.6667 16.3337 33.7113 16.3337 35Z" fill="currentColor"/>
2033  <path d="M14.0003 46.6667C15.289 46.6667 16.3337 45.622 16.3337 44.3333C16.3337 43.0447 15.289 42 14.0003 42C12.7117 42 11.667 43.0447 11.667 44.3333C11.667 45.622 12.7117 46.6667 14.0003 46.6667Z" fill="currentColor"/>
2034  <path d="M58.3337 44.3333C58.3337 45.622 57.289 46.6667 56.0003 46.6667C54.7117 46.6667 53.667 45.622 53.667 44.3333C53.667 43.0447 54.7117 42 56.0003 42C57.289 42 58.3337 43.0447 58.3337 44.3333Z" fill="currentColor"/>
2035  <path d="M56.0003 37.3333C57.289 37.3333 58.3337 36.2887 58.3337 35C58.3337 33.7113 57.289 32.6667 56.0003 32.6667C54.7117 32.6667 53.667 33.7113 53.667 35C53.667 36.2887 54.7117 37.3333 56.0003 37.3333Z" fill="currentColor"/>
2036 </svg><!-- Define styles for the SVG element with the provided color and size --> </div> <!-- Company --> <div class="footer-column"> <span class="footer-heading">Company</span> <ul> <li> <a href="/company/about/" class="footer-link"> About </a> </li><li> <a href="/security/" class="footer-link"> Security </a> </li><li> <a href="/company/team/" class="footer-link"> Team </a> </li><li> <a href="/company/careers/" class="footer-link"> Careers </a> </li><li> <a href="/partners/" class="footer-link"> Partners </a> </li><li> <a href="/legal/privacy/" class="footer-link"> Legal </a> </li><li> <a href="/blog/news/" class="footer-link"> News </a> </li> </ul> </div> <!-- Products --> <div class="footer-column"> <span class="footer-heading">Products</span> <ul> <li> <a href="/sdk/" class="footer-link"> SDK </a> </li><li> <a href="/low-code/" class="footer-link"> Integrations </a> </li><li> <a href="/workflow-automation/" class="footer-link"> Workflow </a> </li><li> <a href="/api/" class="footer-link"> Cloud </a> </li> </ul> </div> <!-- Resources --> <div class="footer-column"> <span class="footer-heading">Resources</span> <ul> <li> <a href="/blog/" class="footer-link"> Blog </a> </li><li> <a href="/events/" class="footer-link"> Events </a> </li><li> <a href="/blog/categories/customer-stories/" class="footer-link">
2036 Customer Stories </a> </li><li> <a href="/blog/categories/tutorials/" class="footer-link"> Tutorials </a> </li><li> <a href="/newsletter/" class="footer-link"> Newsletter </a> </li><li> <a href="/solutions/pdf-accessibility/" class="footer-link"> PDF Accessibility </a> </li><li> <a href="/blog/pdf-ua-compliance-guide/" class="footer-link"> PDF/UA Guide </a> </li> </ul> </div> <!-- Connect --> <div class="footer-column"> <span class="footer-heading">Connect</span> <ul> <li> <a href="/company/contact/" class="footer-link"> Contact </a> </li><li> <a href="https://www.linkedin.com/company/nutrientdocs" class="footer-link"> LinkedIn </a> </li><li> <a href="https://www.youtube.com/channel/UCQFsRxB1vTDJ5N1NaNsZNrw?sub_confirmation=1" class="footer-link"> YouTube </a> </li><li> <a href="https://discord.gg/Z754Pfb8bD" class="footer-link"> Discord </a> </li><li> <a href="https://x.com/nutrientdocs" class="footer-link"> X </a> </li><li> <a href="https://www.facebook.com/nutrientdocs/" class="footer-link"> Facebook </a> </li> </ul> </div> </div><div class="footer-bottom"> <!-- Render the SVG element with the computed attributes and content --><svg aria-hidden="true" fill="currentColor" viewBox="0 0 58 40" width="58" height="40" class="w-14 h-10 mx-auto icon-neutral-primary" aria-hidden="true" style="--icon-color: currentColor;" data-astro-cid-7qi5gn3v> 
2037<path d="M5.27196 24.7452C2.65002 24.7452 0.526367 22.6216 0.526367 19.9996C0.526367 17.3777 2.65002 15.254 5.27196 15.254C7.8939 15.254 10.0176 17.3777 10.0176 19.9996C10.0176 22.6216 7.8939 24.7452 5.27196 24.7452ZM52.7279 15.254C50.106 15.254 47.9823 17.3777 47.9823 19.9996C47.9823 22.6216 50.106 24.7452 52.7279 24.7452C55.3498 24.7452 57.4735 22.6216 57.4735 19.9996C57.4735 17.3777 55.3498 15.254 52.7279 15.254ZM7.77289 31.6168C5.7655 33.3015 5.50212 36.296 7.18681 38.3034C8.8715 40.3108 11.866 40.5741 13.8734 38.8895C15.8807 37.2048 16.1441 34.2103 14.4594 32.2029C12.7747 30.1955 9.78028 29.9321 7.77289 31.6168ZM50.227 8.38239C52.2344 6.69771 52.4977 3.70324 50.8131 1.69585C49.1284 -0.311535 46.1339 -0.574915 44.1265 1.10977C42.1191 2.79446 41.8558 5.78893 43.5404 7.79631C45.2251 9.8037 48.2196 10.0671 50.227 8.38239ZM13.8734 1.11214C11.866 -0.572543 8.8715 -0.311535 7.18681 1.69822C5.50212 3.70798 5.76313 6.70008 7.77289 8.38477C9.78265 10.0695 12.7747 9.80845 14.4594 7.79869C16.1441 5.78893 15.8831 2.79683 13.8734 1.11214ZM50.227 31.6168C48.2196 29.9321 45.2251 30.1931 43.5404 32.2029C41.8558 34.2103 42.1168 37.2048 44.1265 38.8895C46.1339 40.5741 49.1284 40.3131 50.8131 38.3034C52.4977 36.296 52.2367 33.3015 50.227 31.6168ZM38.1091 21.447C36.1017 19.7623 33.1072 20.0233 31.4226 22.0331C29.7379 24.0429 29.9989 27.035 32.0086 28.7196C34.0184 30.4043 37.0105 30.1433 38.6952 28.1336C40.3799 26.1238 40.1189 23.1317 38.1091 21.447ZM25.9912 11.2796C23.9838 9.59489 20.9894 9.8559 19.3047 11.8657C17.62 13.8754 17.881 16.8675 19.8908 18.5522C21.9005 20.2369 24.8926 19.9759 26.5773 17.9661C28.262 15.9564 28.001 12.9643 25.9912 11.2796Z" fill="currentColor"></path>
2038 </svg><!-- Define styles for the SVG element with the provided color and size --> <p>Copyright 2026 Nutrient. All rights reserved.</p> </div> </div>  </section> </div> </footer> <!-- Persistent "Ask AI" launcher pill. Styled to match the Chatlio pill so the
2039     two group together bottom-right; opens the kapa modal on click (kapa's own
2040     launcher is hidden — see data-button-hide below). When Chatlio is present
2041     its position is nudged left of the Chatlio pill at runtime (see script);
2042     otherwise it sits flush to the right margin. --><button id="kapa-lazy-button" class="group fixed bottom-[10px] right-4 z-[199]
2043    h-[40px] pl-5 pr-6 pt-[2px]
2044    rounded-full border-0
2045    cursor-pointer shadow-lg
2046    inline-flex items-center gap-2
2047    !bg-accent-default !text-on-accent-on-default hover:bg-[#2A2020]
2048    text-sm
2049          transition-[transform,right,background-color] duration-200
2050    focus:outline-none focus-visible:ring-2 focus-visible:ring-white/40
2051    disabled:hover:scale-100
2052    active:translate-y-0.5" aria-label="Ask AI" aria-busy="false" data-chatlio-present="true"> <svg id="kapa-button-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
2052 <path fill="currentColor" d="M13 18C13 18.2652 12.8946 18.5196 12.7071 18.7071C12.5196 18.8946 12.2652 19 12 19C11.7348 19 11.4804 18.8946 11.2929 18.7071C11.1054 18.5196 11 18.2652 11 18C11 17.7348 11.1054 17.4804 11.2929 17.2929C11.4804 17.1054 11.7348 17 12 17C12.2652 17 12.5196 17.1054 12.7071 17.2929C12.8946 17.4804 13 17.7348 13 18ZM13 22C13 22.2652 12.8946 22.5196 12.7071 22.7071C12.5196 22.8946 12.2652 23 12 23C11.7348 23 11.4804 22.8946 11.2929 22.7071C11.1054 22.5196 11 22.2652 11 22C11 21.7348 11.1054 21.4804 11.2929 21.2929C11.4804 21.1054 11.7348 21 12 21C12.2652 21 12.5196 21.1054 12.7071 21.2929C12.8946 21.4804 13 21.7348 13 22ZM9 23C8.73478 23 8.48043 22.8946 8.29289 22.7071C8.10536 22.5196 8 22.2652 8 22C8 21.7348 8.10536 21.4804 8.29289 21.2929C8.48043 21.1054 8.73478 21 9 21C9.26522 21 9.51957 21.1054 9.70711 21.2929C9.89464 21.4804 10 21.7348 10 22C10 22.2652 9.89464 22.5196 9.70711 22.7071C9.51957 22.8946 9.26522 23 9 23ZM5 22C5 22.2652 5.10536 22.5196 5.29289 22.7071C5.48043 22.8946 5.73478 23 6 23C6.26522 23 6.51957 22.8946 6.70711 22.7071C6.89464 22.5196 7 22.2652 7 22C7 21.7348 6.89464 21.4804 6.70711 21.2929C6.51957 21.1054 6.26522 21 6 21C5.73478 21 5.48043 21.1054 5.29289 21.2929C5.10536 21.4804 5 21.7348 5 22ZM2 19C2 19.2652 2.10536 19.5196 2.29289 19.7071C2.48043 19.8946 2.73478 20 3 20C3.26522 20 3.51957 19.8946 3.70711 19.7071C3.89464 19.5196 4 19.2652 4 19C4 18.7348 3.89464 18.4804 3.70711 18.2929C3.51957 18.1054 3.26522 18 3 18C2.73478 18 2.48043 18.1054 2.29289 18.2929C2.10536 18.4804 2 18.7348 2 19ZM3 17C2.73478 17 2.48043 16.8946 2.29289 16.7071C2.10536 16.5196 2 16.2652 2 16C2 15.7348 2.10536 15.4804 2.29289 15.2929C2.48043 15.1054 2.73478 15 3 15C3.26522 15 3.51957 15.1054 3.70711 15.2929C3.89464 15.4804 4 15.7348 4 16C4 16.2652 3.89464 16.5196 3.70711 16.7071C3.51957 16.8946 3.26522 17 3 17ZM2 13C2 13.2652 2.10536 13.5196 2.29289 13.7071C2.48043 13.8946 2.73478 14 3 14C3.26522 14 3.51957 13.8946 3.70711 13.7071C3.89464 13.5196 4 13.2652 4 13C4 12.7348 3.89464 12.4804 3.70711 12.2929C3.51957 12.1054 3.26522 12 3 12C2.73478 12 2.48043 12.1054 2.29289 12.2929C2.10536 12.4804 2 12.7348 2 13ZM2 10C2 10.2652 2.10536 10.5196 2.29289 10.7071C2.48043 10.8946 2.73478 11 3 11C3.26522 11 3.51957 10.8946 3.70711 10.7071C3.89464 10.5196 4 10.2652 4 10C4 9.73478 3.89464 9.48043 3.70711 9.29289C3.51957 9.10536 3.26522 9 3 9C2.73478 9 2.48043 9.10536 2.29289 9.29289C2.10536 9.48043 2 9.73478 2 10ZM21 11C20.7348 11 20.4804 10.8946 20.2929 10.7071C20.1054 10.5196 20 10.2652 20 10C20 9.73478 20.1054 9.48043 20.2929 9.29289C20.4804 9.10536 20.7348 9 21 9C21.2652 9 21.5196 9.10536 21.7071 9.29289C21.8946 9.48043 22 9.73478 22 10C22 10.2652 21.8946 10.5196 21.7071 10.7071C21.5196 10.8946 21.2652 11 21 11ZM20 13C20 13.2652 20.1054 13.5196 20.2929 13.7071C20.4804 13.8946 20.7348 14 21 14C21.2652 14 21.5196 13.8946 21.7071 13.7071C21.8946 13.5196 22 13.2652 22 13C22 12.7348 21.8946 12.4804 21.7071 12.2929C21.5196 12.1054 21.2652 12 21 12C20.7348 12 20.4804 12.1054 20.2929 12.2929C20.1054 12.4804 20 12.7348 20 13ZM21 17C20.7348 17 20.4804 16.8946 20.2929 16.7071C20.1054 16.5196 20 16.2652 20 16C20 15.7348 20.1054 15.4804 20.2929 15.2929C20.4804 15.1054 20.7348 15 21 15C21.2652 15 21.5196 15.1054 21.7071 15.2929C21.8946 15.4804 22 15.7348 22 16C22 16.2652 21.8946 16.5196 21.7071 16.7071C21.5196 16.8946 21.2652 17 21 17ZM20 19C20 19.2652 20.1054 19.5196 20.2929 19.7071C20.4804 19.8946 20.7348 20 21 20C21.2652 20 21.5196 19.8946 21.7071 19.7071C21.8946 19.5196 22 19.2652 22 19C22 18.7348 21.8946 18.4804 21.7071 18.2929C21.5196 18.1054 21.2652 18 21 18C20.7348 18 20.4804 18.1054 20.2929 18.2929C20.1054 18.4804 20 18.7348 20 19ZM18 23C17.7348 23 17.4804 22.8946 17.2929 22.7071C17.1054 22.5196 17 22.2652 17 22C17 21.7348 17.1054 21.4804 17.2929 21.2929C17.4804 21.1054 17.7348 21 18 21C18.2652 21 18.5196 21.1054 18.7071 21.2929C18.8946 21.4804 19 21.7348 19 22C19 22.2652 18.8946 22.5196 18.7071 22.7071C18.5196 22.8946 18.2652 23 18 23ZM15 23C14.7348 23 14.4804 22.8946 14.2929 22.7071C14.1054 22.5196 14 22.2652 14 22C14 21.7348 14.1054 21.4804 14.2929 21.2929C14.4804 21.1054 14.7348 21 15 21C15.2652 21 15.5196 21.1054 15.7071 21.2929C15.8946 21.4804 16 21.7348 16 22C16 22.2652 15.8946 22.5196 15.7071 22.7071C15.5196 22.8946 15.2652 23 15 23ZM16 13C16.2652 13 16.5196 12.8946 16.7071 12.7071C16.8946 12.5196 17 12.2652 17 12C17 11.7348 16.8946 11.4804 16.7071 11.2929C16.5196 11.1054 16.2652 11 16 11C15.7348 11 15.4804 11.1054 15.2929 11.2929C15.1054 11.4804 15 11.7348 15 12C15 12.2652 15.1054 12.5196 15.2929 12.7071C15.4804 12.8946 15.7348 13 
205216 13ZM8 13C7.73478 13 7.48043 12.8946 7.29289 12.7071C7.10536 12.5196 7 12.2652 7 12C7 11.7348 7.10536 11.4804 7.29289 11.2929C7.48043 11.1054 7.73478 11 8 11C8.26522 11 8.51957 11.1054 8.70711 11.2929C8.89464 11.4804 9 11.7348 9 12C9 12.2652 8.89464 12.5196 8.70711 12.7071C8.51957 12.8946 8.26522 13 8 13ZM16 18C16 18.2652 15.8946 18.5196 15.7071 18.7071C15.5196 18.8946 15.2652 19 15 19C14.7348 19 14.4804 18.8946 14.2929 18.7071C14.1054 18.5196 14 18.2652 14 18C14 17.7348 14.1054 17.4804 14.2929 17.2929C14.4804 17.1054 14.7348 17 15 17C15.2652 17 15.5196 17.1054 15.7071 17.2929C15.8946 17.4804 16 17.7348 16 18ZM10 18C10 18.2652 9.89464 18.5196 9.70711 18.7071C9.51957 18.8946 9.26522 19 9 19C8.73478 19 8.48043 18.8946 8.29289 18.7071C8.10536 18.5196 8 18.2652 8 18C8 17.7348 8.10536 17.4804 8.29289 17.2929C8.48043 17.1054 8.73478 17 9 17C9.26522 17 9.51957 17.1054 9.70711 17.2929C9.89464 17.4804 10 17.7348 10 18ZM6 8C5.73478 8 5.48043 7.89464 5.29289 7.70711C5.10536 7.51957 5 7.26522 5 7C5 6.73478 5.10536 6.48043 5.29289 6.29289C5.48043 6.10536 5.73478 6 6 6C6.26522 6 6.51957 6.10536 6.70711 6.29289C6.89464 6.48043 7 6.73478 7 7C7 7.26522 6.89464 7.51957 6.70711 7.70711C6.51957 7.89464 6.26522 8 6 8ZM9 8C8.73478 8 8.48043 7.89464 8.29289 7.70711C8.10536 7.51957 8 7.26522 8 7C8 6.73478 8.10536 6.48043 8.29289 6.29289C8.48043 6.10536 8.73478 6 9 6C9.26522 6 9.51957 6.10536 9.70711 6.29289C9.89464 6.48043 10 6.73478 10 7C10 7.26522 9.89464 7.51957 9.70711 7.70711C9.51957 7.89464 9.26522 8 9 8ZM11 7C11 7.26522 11.1054 7.51957 11.2929 7.70711C11.4804 7.89464 11.7348 8 12 8C12.2652 8 12.5196 7.89464 12.7071 7.70711C12.8946 7.51957 13 7.26522 13 7C13 6.73478 12.8946 6.48043 12.7071 6.29289C12.5196 6.10536 12.2652 6 12 6C11.7348 6 11.4804 6.10536 11.2929 6.29289C11.1054 6.48043 11 6.73478 11 7ZM15 8C14.7348 8 14.4804 7.89464 14.2929 7.70711C14.1054 7.51957 14 7.26522 14 7C14 6.73478 14.1054 6.48043 14.2929 6.29289C14.4804 6.10536 14.7348 6 15 6C15.2652 6 15.5196 6.10536 15.7071 6.29289C15.8946 6.48043 16 6.73478 16 7C16 7.26522 15.8946 7.51957 15.7071 7.70711C15.5196 7.89464 15.2652 8 15 8ZM17 7C17 7.26522 17.1054 7.51957 17.2929 7.70711C17.4804 7.89464 17.7348 8 18 8C18.2652 8 18.5196 7.89464 18.7071 7.70711C18.8946 7.51957 19 7.26522 19 7C19 6.73478 18.8946 6.48043 18.7071 6.29289C18.5196 6.10536 18.2652 6 18 6C17.7348 6 17.4804 6.10536 17.2929 6.29289C17.1054 6.48043 17 6.73478 17 7ZM11 4C11 4.26522 11.1054 4.51957 11.2929 4.70711C11.4804 4.89464 11.7348 5 12 5C12.2652 5 12.5196 4.89464 12.7071 4.70711C12.8946 4.51957 13 4.26522 13 4C13 3.73478 12.8946 3.48043 12.7071 3.29289C12.5196 3.10536 12.2652 3 12 3C11.7348 3 11.4804 3.10536 11.2929 3.29289C11.1054 3.48043 11 3.73478 11 4ZM11 1C11 1.26522 11.1054 1.51957 11.2929 1.70711C11.4804 1.89464 11.7348 2 12 2C12.2652 2 12.5196 1.89464 12.7071 1.70711C12.8946 1.51957 13 1.26522 13 1C13 0.734784 12.8946 0.48043 12.7071 0.292893C12.5196 0.105357 12.2652 0 12 0C11.7348 0 11.4804 0.105357 11.2929 0.292893C11.1054 0.48043 11 0.734784 11 1Z"></path> </svg> <span id="kapa-button-text">Ask AI</span> </button>
2052<script type="module" src="/_astro/KapaWidgetLazy.astro_astro_type_script_index_0_lang.CvY4fyjC.js"></script>
2052 <chatlio-widget widgetid="ff0f5411-22c5-423f-6bdb-4c7779dc367c"></chatlio-widget>
2052<script type="module" src="/_astro/ChatlioWidget.astro_astro_type_script_index_0_lang.mw7P_HYS.js"></script>
2052 <!-- Deferred Third-Party Scripts (GTM, HubSpot) - loaded on user interaction or timeout --> 
2052<script type="module">var u=["nutrient.io"];function m(e){const n=e.toLowerCase();return u.some(t=>n===t||n.endsWith(`.${t}`))}var o="pending";function l(){return document.cookie.split(";").some(e=>e.trim().startsWith("nutrient_team=true"))}function f(){return navigator.webdriver===!0}function p(){(function(e,n,t,i,d){e.dataLayer=e.dataLayer||[],e.dataLayer.push({"gtm.start":new Date().getTime(),event:"gtm.js"});const s=n.getElementsByTagName(t)[0],r=n.createElement(t),c=i!=="dataLayer"?"&l="+i:"";r.async=!0,r.src="https://www.googletagmanager.com/gtm.js?id="+d+c,s.parentNode?.insertBefore(r,s)})(window,document,"script","dataLayer","GTM-T6LGJJC")}function w(){const e=document.createElement("script");e.id="hs-script-loader",e.async=!0,e.src="https://js.hs-scripts.com/145134102.js",document.head.appendChild(e)}function a(){if(o==="pending"){if(o="loading",l()){console.log("[DeferredScripts] Disabled for team member"),o="loaded";return}if(f()){console.log("[DeferredScripts] Disabled for automated browser"),o="loaded";return}if(!m(window.location.hostname)){console.log("[DeferredScripts] Disabled outside production:",window.location.hostname),o="loaded";return}p(),w(),o="loaded"}}function g(){window.dataLayer=window.dataLayer||[];const e=["scroll","click","touchstart","keydown","mousemove"],n=()=>{a(),e.forEach(t=>window.removeEventListener(t,n,{capture:!0}))};e.forEach(t=>{window.addEventListener(t,n,{capture:!0,passive:!0,once:!0})}),setTimeout(a,5e3),document.addEventListener("visibilitychange",()=>{document.hidden&&a()},{once:!0})}g();</script>
2052<!-- Auth-based visibility control --> 
2052<script type="module" src="/_astro/Layout.astro_astro_type_script_index_1_lang.DPfFpIR_.js"></script>
2052<!-- CSP-safe Cookiebot Accept/Deny handling (WWW-1425) --> 
2052<script type="module">var i='[data-cookiebot-action="accept"]',a='[data-cookiebot-action="deny"]';function s(o){const t=o.target;if(!(t instanceof Element))return;const e=t.closest(i),c=e?null:t.closest(a);if(!e&&!c)return;o.preventDefault();const n=window.Cookiebot?.dialog;n&&(e?n.submitConsent?.():n.submitDecline?.())}document.addEventListener("click",s);</script>
2052<!-- Credit pricing (client-side with auth support) -->  </body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.