{"id":11672,"date":"2026-10-17T13:06:10","date_gmt":"2026-10-17T17:06:10","guid":{"rendered":"https:\/\/crassulapharma.com\/?page_id=11672"},"modified":"2026-10-22T17:22:33","modified_gmt":"2026-10-22T21:22:33","slug":"facilities","status":"publish","type":"page","link":"https:\/\/crassulapharma.com\/es\/facilities\/","title":{"rendered":"Facilities"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11672\" class=\"elementor elementor-11672\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c8744a e-con-full e-flex e-con e-parent\" data-id=\"8c8744a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fd8ff7f elementor-widget elementor-widget-html\" data-id=\"fd8ff7f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\n     CRASSULA \u00b7 facilities \u00b7 contenido para el widget HTML de Elementor\n     Pegar TODO este archivo en un widget HTML (contenedor a ancho\n     completo, sin padding; p\u00e1gina \"Elementor Full Width\" o \"Canvas\").\n     Incluye todo: SEO, fuentes, CSS, datos estructurados, contenido y JS.\n     ========================================================= -->\n\n<!-- SEO \u00b7 el script de abajo mueve estas etiquetas al <head> y reemplaza\n     las que traiga Rank Math\/Yoast o el tema. -->\n<title>Crassula Facilities | WHO-GMP PQNS Manufacturing<\/title>\n<meta name=\"description\" content=\"Crassula's 20,000 m\u00b2 WHO-GMP site manufactures prescription tablets and PQNS-enabled capsules and softgels, with in-house QC\/QA and stability.\">\n<meta name=\"robots\" content=\"index, follow, max-image-preview:large\">\n<link rel=\"canonical\" href=\"https:\/\/crassulapharma.com\/facilities\/\">\n<meta name=\"theme-color\" content=\"#101A42\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:site_name\" content=\"Crassula Pharmaceuticals\">\n<meta property=\"og:locale\" content=\"en_US\">\n<meta property=\"og:title\" content=\"Crassula Facilities | WHO-GMP PQNS Manufacturing\">\n<meta property=\"og:description\" content=\"Crassula's 20,000 m\u00b2 WHO-GMP site manufactures prescription tablets and PQNS-enabled capsules and softgels, with in-house QC\/QA and stability.\">\n<meta property=\"og:url\" content=\"https:\/\/crassulapharma.com\/facilities\/\">\n<meta property=\"og:image\" content=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blsiter-Machine-1024x684.jpg\">\n<meta property=\"og:image:alt\" content=\"High-speed blister packaging machine producing serialized prescription packs\">\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:site\" content=\"@crassula_llc\">\n<meta name=\"twitter:title\" content=\"Crassula Facilities | WHO-GMP PQNS Manufacturing\">\n<meta name=\"twitter:description\" content=\"Crassula's 20,000 m\u00b2 WHO-GMP site manufactures prescription tablets and PQNS-enabled capsules and softgels, with in-house QC\/QA and stability.\">\n<meta name=\"twitter:image\" content=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blsiter-Machine-1024x684.jpg\">\n<script>\n\/* Move this page's SEO tags into <head>; replace any duplicate set by the theme or SEO plugin *\/\n(function () {\n  var head = document.head, me = document.currentScript, el = me.previousElementSibling, tags = [];\n  while (el && \/^(META|LINK|TITLE)$\/.test(el.tagName)) { tags.unshift(el); el = el.previousElementSibling; }\n  tags.forEach(function (t) {\n    var sel = t.tagName === 'TITLE' ? 'title'\n      : t.tagName === 'LINK' ? 'link[rel=\"' + t.getAttribute('rel') + '\"]'\n      : t.hasAttribute('property') ? 'meta[property=\"' + t.getAttribute('property') + '\"]'\n      : 'meta[name=\"' + t.getAttribute('name') + '\"]';\n    [].slice.call(head.querySelectorAll(sel)).forEach(function (old) { old.parentNode.removeChild(old); });\n    head.appendChild(t);\n  });\n})();\n<\/script>\n\n<!-- Fuentes: Poppins 100\u2013900 + it\u00e1licas -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&amp;display=swap\">\n\n<!-- Estilos incluidos para que la p\u00e1gina funcione sola (widget o navegador) -->\n<style>\nbody { margin: 0; }\n\/* =========================================================\n   CRASSULA PHARMACEUTICALS \u2014 about.css \u00b7 PALETTE v2 (navy #101A42 \u00b7 white \u00b7 green #5BA044 \u00b7 grey #ECECEC)\n   Base design system (tokens, components, motion) + About Us page.\n   Load FIRST on every page. Page add-ons (facilities.css, social.css, \u2026) load after it.\n   Palette: #5BA044 \u00b7 #5BA044 \u00b7 #FFFFFF \u00b7 #ECECEC + derived ink\n   Type: Poppins 100\u2013900 + italics (Google Fonts)\n\n   CONTENTS\n   00  WordPress \/ theme guard\n   01  Tokens\n   02  Base\n   03  Layout & surfaces\n   04  Typography\n   05  Components\n       05.1 Buttons            05.6 Figures\n       05.2 Page hero          05.7 Markers (pending \/ review)\n       05.3 Breadcrumbs        05.8 Cursor follower\n       05.4 Scroll cue         05.9 Page transition\n       05.5 Sub navigation\n   06  Sections (shared blocks)\n   07  Pages\n       07.1 About Us  (\/about-us\/)          \u2014 APPROVED v1.3\n       07.2 Facilities \u2192 facilities.css (separate file)\n       07.3 Social Responsibility \u2192 social.css (separate file)\n       07.4 Team \u00b7 07.5 Pharma\n       07.6 Supplements \u00b7 07.8 Media Releases\n       07.9 Contact \u00b7 07.10 Home\n   08  Motion system (reveals, keyframes, reduced motion)\n   09  Responsive\n   ========================================================= *\/\n\n\/* =========================================================\n   00  WORDPRESS \/ THEME GUARD\n   The Hello theme and Elementor kit style every <a>, <button> and\n   [type=button|submit] (magenta #c36 hover background, white text,\n   nowrap, border). These rules neutralise them inside .cr-page;\n   component rules below re-apply our own states.\n   ========================================================= *\/\n.cr-page a:hover, .cr-page a:focus, .cr-page a:active { color: inherit; }\n.cr-page button, .cr-page [type=\"button\"], .cr-page [type=\"submit\"] { white-space: normal; text-transform: none; font-family: inherit; letter-spacing: inherit; box-shadow: none; }\n.cr-page button:hover, .cr-page button:focus, .cr-page button:active { background-color: transparent; color: inherit; text-decoration: none; }\n\n\/* =========================================================\n   01  TOKENS\n   ========================================================= *\/\n:root {\n  \/* Palette *\/\n  --cr-green: #5BA044;\n  --cr-green-text: #3E7A2C;   \/* derived: brand green for text on white\/grey *\/        \/* primary \u00b7 CTAs \u00b7 impact sections (cream text 4.91:1) *\/\n  --cr-lime: #5BA044;         \/* accents \u00b7 hover \u00b7 data \u2014 never text on light *\/\n  --cr-cream: #FFFFFF;        \/* main light background *\/\n  --cr-peach: #ECECEC;        \/* alternate surfaces *\/\n  --cr-ink: #101A42;          \/* derived near-black green \u00b7 text + dark sections (15.4:1 on cream) *\/\n  --cr-ink-70: #454D6B;       \/* derived muted ink (7.97:1 on cream, 7.0:1 on peach) *\/\n  --cr-line: rgba(16, 26, 66, 0.16);\n  --cr-line-dark: rgba(255, 255, 255, 0.2);\n\n  \/* Type *\/\n  --cr-font: \"Poppins\", \"Segoe UI\", system-ui, sans-serif;\n  --cr-fs-display: clamp(2.4rem, 10.5vw, 9.5rem);\n  --cr-fs-h2: clamp(2.25rem, 1.2rem + 3.6vw, 4.5rem);\n  --cr-fs-h3: clamp(1.375rem, 1.1rem + 0.9vw, 1.875rem);\n  --cr-fs-quote: clamp(2rem, 1rem + 3.6vw, 4.25rem);\n  --cr-fs-lead: clamp(1.0625rem, 0.95rem + 0.45vw, 1.3125rem);\n  --cr-fs-body: 1rem;\n  --cr-fs-small: 0.875rem;\n  --cr-fs-label: 0.75rem;\n  --cr-tracking-label: 0.18em;\n\n  \/* Space *\/\n  --cr-s1: 4px; --cr-s2: 8px; --cr-s3: 12px; --cr-s4: 16px; --cr-s5: 24px; --cr-s6: 32px; --cr-s7: 48px; --cr-s8: 64px; --cr-s9: 96px; --cr-s10: 144px;\n  --cr-container: 1360px;\n  --cr-gutter: clamp(20px, 4.5vw, 64px);\n\n  \/* Shape & motion *\/\n  --cr-r-pill: 999px;\n  --cr-r-card: 20px;\n  --cr-ease: cubic-bezier(0.22, 1, 0.36, 1);\n  --cr-ease-io: cubic-bezier(0.65, 0, 0.35, 1);\n  --cr-t-fast: 300ms;\n  --cr-t-med: 560ms;\n  --cr-t-slow: 900ms;\n}\n\n\/* =========================================================\n   02  BASE\n   ========================================================= *\/\n.cr-page, .cr-page * { box-sizing: border-box; }\n.cr-page { margin: 0; background: var(--cr-cream); color: var(--cr-ink); font-family: var(--cr-font); font-size: var(--cr-fs-body); line-height: 1.65; -webkit-font-smoothing: antialiased; }\n.cr-page img { max-width: 100%; display: block; }\n.cr-page a { color: inherit; }\n.cr-page :focus-visible { outline: 2px solid var(--cr-green); outline-offset: 3px; border-radius: 4px; }\n.cr-dark :focus-visible, .cr-green-bg :focus-visible { outline-color: var(--cr-lime); }\n.cr-wrap { max-width: var(--cr-container); margin: 0 auto; padding: 0 var(--cr-gutter); }\n.cr-section { position: relative; padding: var(--cr-s10) 0; }\n.cr-sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n\n\/* =========================================================\n   03  LAYOUT & SURFACES\n   ========================================================= *\/\n.cr-cream { background: var(--cr-cream); }\n.cr-peach { background: var(--cr-peach); }\n.cr-dark { background: var(--cr-ink); color: var(--cr-cream); }\n.cr-green-bg { background: var(--cr-green); color: var(--cr-cream); }\n\n\/* =========================================================\n   04  TYPOGRAPHY\n   ========================================================= *\/\n.cr-label {\n  display: inline-flex; align-items: center; gap: var(--cr-s3);\n  font-weight: 500; font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; line-height: 1.4;\n}\n.cr-label__idx { font-variant-numeric: tabular-nums; }\n.cr-label__bar { width: 40px; height: 1px; background: currentColor; opacity: .5; }\n.cr-h2 { font-weight: 600; font-size: var(--cr-fs-h2); line-height: 1.02; letter-spacing: -0.035em; margin: var(--cr-s5) 0 0; }\n.cr-h2 .t-200 { font-weight: 200; }\n.cr-h2 em, .cr-display em { font-style: italic; }\n.cr-h3 { font-weight: 600; font-size: var(--cr-fs-h3); line-height: 1.2; letter-spacing: -0.015em; margin: 0; }\n.cr-lead { font-size: var(--cr-fs-lead); line-height: 1.6; font-weight: 400; margin: var(--cr-s5) 0 0; max-width: 60ch; }\n.cr-muted { color: var(--cr-ink-70); }\n.cr-dark .cr-muted, .cr-green-bg .cr-muted { color: rgba(255, 255, 255, 0.86); }\n.t-100 { font-weight: 100; } .t-200 { font-weight: 200; } .t-300 { font-weight: 300; } .t-800 { font-weight: 800; }\n\n\/* Line-split reveal: lines are pre-marked in HTML (text always in DOM) *\/\n.cr-ln { display: block; overflow: hidden; padding-bottom: 0.06em; }\n.cr-ln > span { display: block; }\n\n\/* =========================================================\n   05  COMPONENTS\n   ========================================================= *\/\n\/* 05.1 Buttons *\/\n.cr-btn {\n  position: relative; display: inline-flex; align-items: center; gap: var(--cr-s3);\n  min-height: 52px; padding: 0 10px 0 26px; border-radius: var(--cr-r-pill);\n  font-family: var(--cr-font); font-weight: 500; font-size: 0.9375rem; letter-spacing: 0.01em; text-decoration: none;\n  border: 1.5px solid transparent; overflow: hidden; isolation: isolate;\n  transition: color var(--cr-t-med) var(--cr-ease), border-color var(--cr-t-med) var(--cr-ease);\n}\n.cr-btn__icon { width: 34px; height: 34px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; transition: transform 700ms var(--cr-ease), background-color var(--cr-t-med) var(--cr-ease), color var(--cr-t-med) var(--cr-ease); }\n.cr-btn::before { content: \"\"; position: absolute; inset: 0; z-index: -1; border-radius: inherit; transform: scaleX(0); transform-origin: left; transition: transform 700ms var(--cr-ease); }\n.cr-btn--primary { background: var(--cr-green); color: var(--cr-cream); }\n.cr-btn--primary .cr-btn__icon { background: var(--cr-cream); color: var(--cr-green-text); }\n.cr-btn--primary::before { background: var(--cr-ink); }\n.cr-btn--ghost { background: transparent; color: var(--cr-cream); border-color: rgba(255, 255, 255, 0.6); }\n.cr-btn--ghost .cr-btn__icon { background: var(--cr-cream); color: var(--cr-ink); }\n.cr-btn--ghost::before { background: var(--cr-cream); }\n@media (hover: hover) {\n  .cr-btn:hover::before { transform: scaleX(1); }\n  .cr-btn:hover .cr-btn__icon { transform: rotate(-45deg); }\n  .cr-btn--ghost:hover { color: var(--cr-ink); border-color: var(--cr-cream); }\n  .cr-btn--ghost:hover .cr-btn__icon { background: var(--cr-ink); color: var(--cr-cream); }\n}\n\n\/* 05.2 Page hero (shared pattern) *\/\n.cr-hero { position: relative; isolation: isolate; overflow: hidden; min-height: min(100svh, 980px); display: flex; align-items: flex-end; color: var(--cr-cream); background: var(--cr-ink); }\n.cr-hero__media { position: absolute; inset: -10% 0; z-index: -2; }\n.cr-hero__media img { width: 100%; height: 100%; object-fit: cover; }\n.cr-hero::before { content: \"\"; position: absolute; inset: 0; z-index: -1;\n  background: linear-gradient(180deg, rgba(16, 26, 66,.62) 0%, rgba(16, 26, 66,.78) 55%, rgba(16, 26, 66,.94) 100%); }\n.cr-hero__grid { position: absolute; inset: 0; z-index: -1; pointer-events: none;\n  background-image: linear-gradient(to right, rgba(255, 255, 255,.07) 1px, transparent 1px);\n  background-size: calc((min(100vw, var(--cr-container)) - 2 * var(--cr-gutter)) \/ 12) 100%; background-position: center; }\n.cr-hero__inner { width: 100%; padding-top: calc(var(--cr-s10) + var(--cr-s6)); padding-bottom: var(--cr-s9); }\n.cr-hero__top { display: flex; justify-content: space-between; gap: var(--cr-s5); flex-wrap: wrap; }\n\/* 05.3 Breadcrumbs *\/\n.cr-crumbs ol { list-style: none; display: flex; flex-wrap: wrap; gap: var(--cr-s2); margin: 0; padding: 0; font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; }\n.cr-crumbs li + li::before { content: \"\/\"; margin-right: var(--cr-s2); opacity: .6; }\n.cr-crumbs a { text-decoration: none; border-bottom: 1px solid rgba(255, 255, 255,.5); }\n.cr-crumbs [aria-current] { color: var(--cr-lime); }\n\/* Hero display title *\/\n.cr-display { font-size: var(--cr-fs-display); line-height: 0.9; letter-spacing: -0.055em; margin: var(--cr-s7) 0 0; font-weight: 200; }\n.cr-display .t-800 { letter-spacing: -0.06em; }\n.cr-display__pre { display: block; font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; margin-bottom: var(--cr-s5); color: var(--cr-lime); }\n.cr-hero__foot { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--cr-s7); margin-top: var(--cr-s8); align-items: end; }\n.cr-answer { font-size: var(--cr-fs-lead); line-height: 1.6; margin: 0; max-width: 54ch; color: var(--cr-cream); }\n.cr-specs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--cr-line-dark); margin: 0; }\n.cr-specs div { padding: var(--cr-s4) var(--cr-s4) 0 0; }\n.cr-specs dt { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; color: var(--cr-lime); }\n.cr-specs dd { margin: var(--cr-s2) 0 0; font-weight: 500; }\n\/* 05.4 Scroll cue *\/\n.cr-scroll { position: absolute; left: 50%; bottom: var(--cr-s5); transform: translateX(-50%); width: 48px; height: 64px; display: flex; align-items: center; justify-content: center; color: var(--cr-cream); }\n.cr-scroll__mouse { width: 26px; height: 40px; border: 2px solid rgba(255, 255, 255,.85); border-radius: 14px; position: relative; }\n.cr-scroll__wheel { position: absolute; left: 50%; top: 8px; width: 4px; height: 8px; margin-left: -2px; border-radius: 2px; background: var(--cr-lime); }\n\n\/* Hero: display size inside heroes (moderate, max ~100px) *\/\n.cr-hero .cr-display { font-size: clamp(2.25rem, 1rem + 5.2vw, 6.25rem); line-height: .95; }\n\n\/* Hero variant: centered content *\/\n.cr-hero--center { align-items: center; text-align: center; }\n.cr-hero--center::before { background: linear-gradient(180deg, rgba(16, 26, 66,.55) 0%, rgba(16, 26, 66,.66) 50%, rgba(16, 26, 66,.82) 100%); }\n.cr-hero--center .cr-hero__inner { padding-top: var(--cr-s10); padding-bottom: calc(var(--cr-s10) + var(--cr-s5)); }\n.cr-hero--center .cr-hero__top { justify-content: center; }\n.cr-hero--center .cr-crumbs ol { justify-content: center; }\n.cr-hero--center .cr-display { margin-left: auto; margin-right: auto; }\n.cr-hero--center .cr-hero__foot { grid-template-columns: 1fr; justify-items: center; gap: var(--cr-s6); margin-top: var(--cr-s7); }\n.cr-hero--center .cr-answer { margin: 0 auto; max-width: 62ch; }\n.cr-hero--center .cr-specs { width: min(100%, 760px); }\n.cr-hero--center .cr-specs div { padding: var(--cr-s4) var(--cr-s3) 0; }\n\n\/* 05.5 Sub navigation (in-page) *\/\n.cr-subnav { position: sticky; top: var(--cr-sticky-offset, 0px); z-index: 30; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px) saturate(1.2); border-bottom: 1px solid var(--cr-line); }\n.cr-subnav ol { list-style: none; margin: 0 auto; padding: 0 var(--cr-gutter); max-width: var(--cr-container); display: flex; gap: var(--cr-s6); overflow-x: auto; scrollbar-width: none; }\n.cr-subnav ol::-webkit-scrollbar { display: none; }\n.cr-subnav a { position: relative; display: inline-flex; align-items: center; gap: var(--cr-s2); min-height: 56px; white-space: nowrap; text-decoration: none; font-size: var(--cr-fs-small); font-weight: 500; color: var(--cr-ink-70); transition: color var(--cr-t-fast) var(--cr-ease); }\n.cr-subnav a span { font-size: var(--cr-fs-label); letter-spacing: .1em; }\n.cr-subnav a::after { content: \"\"; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--cr-green); transform: scaleX(0); transform-origin: left; transition: transform var(--cr-t-med) var(--cr-ease); }\n.cr-subnav a:hover, .cr-subnav a[aria-current=\"true\"] { color: var(--cr-ink); }\n.cr-subnav a[aria-current=\"true\"]::after { transform: scaleX(1); }\n.cr-progress { position: absolute; left: 0; bottom: -1px; height: 2px; width: 100%; background: var(--cr-lime); transform-origin: left; transform: scaleX(0); }\n\n\/* 05.6 Figures (official images, parallax inside frame) *\/\n.cr-figure { margin: var(--cr-s8) 0 0; }\n.cr-figure__frame { position: relative; overflow: hidden; border-radius: var(--cr-r-card); background: var(--cr-peach); }\n.cr-figure__frame img { width: 100%; height: 118%; object-fit: cover; will-change: transform; transition: scale 1.2s var(--cr-ease); }\n.cr-figure--wide .cr-figure__frame { aspect-ratio: 21 \/ 9; }\n.cr-figure--banner .cr-figure__frame { aspect-ratio: 1024 \/ 328; background: var(--cr-cream); }\n.cr-figure--split .cr-figure__frame { aspect-ratio: 16 \/ 7; }\n.cr-figure__cap { display: flex; gap: var(--cr-s4); align-items: center; margin-top: var(--cr-s3); font-size: var(--cr-fs-small); color: var(--cr-ink-70); }\n.cr-figure__cap .cr-label { color: var(--cr-green-text); }\n.cr-peach .cr-figure__cap .cr-label { color: var(--cr-ink); } \/* green on peach < 4.5:1 *\/\n@media (hover: hover) { .cr-figure:hover .cr-figure__frame img { scale: 1.04; } }\n\n\/* =========================================================\n   06  SECTIONS (shared blocks)\n   ========================================================= *\/\n\/* Section head: label + H2 left, intro right *\/\n.cr-head { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: var(--cr-s7); align-items: start; }\n.cr-dark .cr-label, .cr-green-bg .cr-label { color: var(--cr-lime); }\n.cr-green-bg .cr-label { color: var(--cr-cream); }\n\n\/* =========================================================\n   07  PAGES\n   ========================================================= *\/\n\n\/* ---------------------------------------------------------\n   07.1 ABOUT US  (\/about-us\/) \u2014 APPROVED v1.3\n   --------------------------------------------------------- *\/\n\/* Who we are *\/\n.cr-quote { font-size: var(--cr-fs-quote); line-height: 1.04; letter-spacing: -0.04em; font-weight: 200; font-style: italic; margin: 0; color: var(--cr-green-text); }\n.cr-quote strong { font-weight: 700; font-style: normal; color: var(--cr-ink); }\n.cr-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: var(--cr-s8) 0 0; border-top: 1px solid var(--cr-line); }\n.cr-facts div { padding: var(--cr-s5) var(--cr-s5) 0 0; border-right: 1px solid var(--cr-line); }\n.cr-facts div:last-child { border-right: 0; padding-left: var(--cr-s5); }\n.cr-facts div:nth-child(2) { padding-left: var(--cr-s5); }\n.cr-facts dt { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; color: var(--cr-ink-70); }\n.cr-facts dd { margin: var(--cr-s3) 0 0; font-size: var(--cr-fs-h3); font-weight: 600; letter-spacing: -0.02em; line-height: 1.2; }\n.cr-facts dd small { display: block; font-size: var(--cr-fs-small); font-weight: 400; letter-spacing: 0; color: var(--cr-ink-70); margin-top: var(--cr-s2); }\n\n\/* What we do *\/\n.cr-tags { list-style: none; margin: var(--cr-s6) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--cr-s2); }\n.cr-tags li { padding: 10px 18px; border: 1px solid var(--cr-ink); border-radius: var(--cr-r-pill); font-weight: 500; font-size: var(--cr-fs-small); transition: background-color var(--cr-t-med) var(--cr-ease), color var(--cr-t-med) var(--cr-ease); }\n@media (hover: hover) { .cr-tags li:hover { background: var(--cr-ink); color: var(--cr-cream); } }\n.cr-chain { list-style: none; margin: var(--cr-s9) 0 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); position: relative; }\n.cr-chain::before { content: \"\"; position: absolute; left: 0; right: 0; top: 11px; height: 1px; background: var(--cr-ink); transform-origin: left; transform: scaleX(var(--cr-draw, 1)); transition: transform 1.4s var(--cr-ease-io); }\n.cr-chain li { position: relative; padding-right: var(--cr-s4); }\n.cr-chain__dot { display: block; width: 23px; height: 23px; border-radius: 50%; background: var(--cr-peach); border: 1.5px solid var(--cr-ink); position: relative; transition: background-color var(--cr-t-med) var(--cr-ease), transform var(--cr-t-slow) var(--cr-ease); }\n.cr-chain__dot::after { content: \"\"; position: absolute; inset: 5px; border-radius: 50%; background: var(--cr-green); }\n.cr-chain li:hover .cr-chain__dot { transform: scale(1.15); background: var(--cr-lime); }\n.cr-chain__n { display: block; margin-top: var(--cr-s5); font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); font-weight: 500; color: var(--cr-ink-70); }\n.cr-chain__t { display: block; margin-top: var(--cr-s2); font-size: var(--cr-fs-h3); font-weight: 600; letter-spacing: -0.02em; line-height: 1.15; }\n.cr-channels { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--cr-s5); margin-top: var(--cr-s9); }\n.cr-channel { background: var(--cr-cream); border-radius: var(--cr-r-card); padding: var(--cr-s6); display: flex; gap: var(--cr-s5); align-items: flex-start; transition: transform 700ms var(--cr-ease), box-shadow 700ms var(--cr-ease); }\n.cr-channel__k { font-size: clamp(2.5rem, 1.5rem + 3vw, 4rem); font-weight: 800; letter-spacing: -0.05em; line-height: .9; color: var(--cr-green-text); }\n@media (hover: hover) { .cr-channel:hover { transform: translateY(-3px); box-shadow: 0 18px 40px -26px rgba(16, 26, 66,.5); } }\n\n\/* Platforms & brands (dark) *\/\n.cr-sub { margin-top: var(--cr-s9); }\n.cr-sub__head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: var(--cr-s4); padding-bottom: var(--cr-s5); border-bottom: 1px solid var(--cr-line-dark); }\n.cr-sub__head p { margin: 0; max-width: 48ch; }\n.cr-table { list-style: none; margin: 0; padding: 0; }\n.cr-table li { position: relative; display: grid; grid-template-columns: 80px minmax(0, 4fr) minmax(0, 6fr); gap: var(--cr-s5); align-items: baseline; padding: var(--cr-s6) 0; border-bottom: 1px solid var(--cr-line-dark); transition: background-color var(--cr-t-med) var(--cr-ease); }\n.cr-table li > * { transition: transform var(--cr-t-med) var(--cr-ease); }\n.cr-table li::before { content: \"\"; position: absolute; left: 0; top: -1px; height: 2px; width: 100%; background: var(--cr-lime); transform: scaleX(0); transform-origin: left; transition: transform 700ms var(--cr-ease); }\n.cr-table__i { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); font-weight: 500; color: var(--cr-lime); }\n.cr-table__n { font-size: var(--cr-fs-h3); font-weight: 600; letter-spacing: -0.02em; }\n.cr-table__d { color: rgba(255, 255, 255,.86); }\n@media (hover: hover) {\n  .cr-table li:hover > * { transform: translateX(12px); }\n  .cr-table li:hover::before { transform: scaleX(1); }\n}\n\/* Product families (category column turns green when active; image swaps per product) *\/\n.cr-families { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--cr-s3); }\n.cr-family { padding: var(--cr-s6) var(--cr-s6) var(--cr-s4); border: 1px solid var(--cr-line-dark); border-radius: var(--cr-r-card); transition: background-color 600ms var(--cr-ease), color 600ms var(--cr-ease); }\n.cr-family h4 { margin: 0; font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; color: var(--cr-lime); }\n.cr-family__img { margin: var(--cr-s5) 0 0; aspect-ratio: 4 \/ 3; border-radius: 14px; background: #FFFFFF; overflow: hidden; }\n.cr-family__img img { width: 100%; height: 100%; object-fit: contain; padding: var(--cr-s4); transition: opacity 450ms var(--cr-ease); }\n.cr-family__img img.is-swap { opacity: 0; }\n.cr-family ul { list-style: none; margin: var(--cr-s5) 0 0; padding: 0; }\n.cr-family li { border-bottom: 1px solid var(--cr-line-dark); }\n.cr-family a, .cr-family span.cr-plain { display: flex; justify-content: space-between; align-items: center; gap: var(--cr-s3); padding: var(--cr-s3) 0; text-decoration: none; font-size: 1.0625rem; font-weight: 500; transition: color var(--cr-t-med) var(--cr-ease); }\n.cr-family a svg { opacity: 0; transform: translateX(-8px); transition: opacity var(--cr-t-med) var(--cr-ease), transform 600ms var(--cr-ease); color: var(--cr-lime); }\n.cr-family a:hover svg, .cr-family a:focus-visible svg { opacity: 1; transform: none; }\n.cr-family a:hover { color: var(--cr-lime); }\n.cr-family .cr-note { display: block; font-size: var(--cr-fs-small); font-weight: 400; color: rgba(255, 255, 255,.86); }\n.cr-family.is-active { background: var(--cr-green); }\n.cr-family.is-active h4 { color: var(--cr-cream); }\n.cr-family.is-active li { border-bottom-color: rgba(255, 255, 255,.3); }\n.cr-family.is-active a:hover { color: var(--cr-cream); }\n.cr-family.is-active a svg { color: var(--cr-cream); }\n.cr-services { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--cr-s4); }\n.cr-service { height: 100%; padding: var(--cr-s6) var(--cr-s5); border: 1px solid var(--cr-line-dark); border-radius: var(--cr-r-card); position: relative; overflow: hidden; transition: border-color 700ms var(--cr-ease), transform 700ms var(--cr-ease); }\n.cr-service::after { content: \"\"; position: absolute; left: 0; top: 0; height: 3px; width: 100%; background: var(--cr-lime); transform: scaleX(0); transform-origin: left; transition: transform 700ms var(--cr-ease); }\n.cr-service h4 { margin: var(--cr-s7) 0 0; font-size: 1.25rem; font-weight: 600; letter-spacing: -0.015em; line-height: 1.25; }\n.cr-service p { margin: var(--cr-s3) 0 0; color: rgba(255, 255, 255,.86); font-size: 0.9375rem; }\n.cr-service__i { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); font-weight: 500; color: var(--cr-lime); }\n@media (hover: hover) { .cr-service:hover { transform: translateY(-3px); border-color: rgba(255, 255, 255,.45); } .cr-service:hover::after { transform: scaleX(1); } }\n\n\/* Quality & compliance *\/\n.cr-quality { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--cr-s5); margin-top: var(--cr-s8); }\n.cr-qcard { border-top: 1px solid var(--cr-ink); padding-top: var(--cr-s5); }\n.cr-qcard__n { display: block; font-size: clamp(4rem, 2rem + 6vw, 8rem); font-weight: 100; line-height: .9; letter-spacing: -0.06em; color: var(--cr-green-text); transform-origin: left bottom; transition: transform var(--cr-t-slow) var(--cr-ease), opacity var(--cr-t-slow) var(--cr-ease); }\n.cr-qcard h3 { margin-top: var(--cr-s5); }\n.cr-qcard p { margin: var(--cr-s3) 0 0; color: var(--cr-ink-70); }\n@media (hover: hover) { .cr-qcard:hover .cr-qcard__n { transform: translateY(-6px) scale(1.06); } }\n.cr-seal { width: 132px; height: 132px; border-radius: 50%; background: #fff; border: 1px solid var(--cr-line); display: flex; align-items: center; justify-content: center; padding: 16px; box-shadow: 0 10px 24px -18px rgba(16, 26, 66,.6); transition: transform var(--cr-t-med) var(--cr-ease); }\n.cr-seal img { width: 100%; height: auto; }\n@media (hover: hover) { .cr-seal:hover { transform: scale(1.06); } }\n\n\/* R&D + Medical affairs (green) *\/\n.cr-rd { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--cr-s9); margin-top: var(--cr-s8); }\n.cr-rd__col { border-top: 1px solid var(--cr-line-dark); padding-top: var(--cr-s6); }\n.cr-rd__col .cr-lead { font-style: italic; font-weight: 300; font-size: clamp(1.25rem, 1rem + 1vw, 1.75rem); line-height: 1.4; max-width: none; }\n.cr-points { list-style: none; margin: var(--cr-s6) 0 0; padding: 0; display: grid; gap: var(--cr-s4); }\n.cr-points li { display: grid; grid-template-columns: 14px 1fr; gap: var(--cr-s4); align-items: start; }\n.cr-points li::before { content: \"\"; width: 10px; height: 10px; border-radius: 50%; background: var(--cr-lime); margin-top: 9px; }\n\n\/* Locations *\/\n.cr-locs > li { min-width: 0; }\n.cr-locs { list-style: none; margin: var(--cr-s8) 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--cr-s5); }\n.cr-loc { height: 100%; display: flex; flex-direction: column; gap: var(--cr-s5); padding: var(--cr-s6); background: var(--cr-peach); border-radius: var(--cr-r-card); position: relative; overflow: hidden; transition: transform 700ms var(--cr-ease), background-color 700ms var(--cr-ease); }\n.cr-loc__country { font-size: clamp(2.5rem, 1.5rem + 3.2vw, 4.5rem); font-weight: 800; letter-spacing: -0.06em; line-height: .9; color: var(--cr-green-text); margin: 0; }\n.cr-loc address { font-style: normal; color: var(--cr-ink-70); }\n.cr-loc__contact { margin-top: auto; display: grid; gap: var(--cr-s2); padding-top: var(--cr-s4); border-top: 1px solid var(--cr-line); font-weight: 500; font-size: 0.9375rem; }\n.cr-loc__contact a { overflow-wrap: anywhere; text-decoration: none; border-bottom: 1px solid transparent; width: fit-content; transition: border-color var(--cr-t-fast) var(--cr-ease); }\n.cr-loc__contact a:hover { border-color: currentColor; }\n@media (hover: hover) { .cr-loc:hover { transform: translateY(-4px); } }\n\n\/* ---------------------------------------------------------\n   07.4 TEAM \u00b7 07.5 PHARMA \u00b7 07.6 SUPPLEMENTS\n   07.8 MEDIA RELEASES \u00b7 07.9 CONTACT \u00b7 07.10 HOME\n   (each page adds its own block here, reusing 05\/06 first)\n   --------------------------------------------------------- *\/\n\n\/* Shared closing CTA band (06) *\/\n.cr-cta { padding: var(--cr-s10) 0; }\n.cr-cta .cr-display { margin: 0; font-size: clamp(3rem, 1rem + 7vw, 8rem); }\n.cr-cta__row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: var(--cr-s6); margin-top: var(--cr-s7); }\n.cr-cta__row p { margin: 0; max-width: 46ch; }\n.cr-cta__actions { display: flex; flex-wrap: wrap; gap: var(--cr-s3); }\n\n\/* 05.7 Markers (pending content \/ review) *\/\n.cr-pending { display: inline-block; font-size: 0.8125rem; font-weight: 500; color: #6B3E00; background: #FFE9B8; border: 1px dashed #B97A12; border-radius: 4px; padding: 2px 8px; }\n\n\/* 05.8 Cursor follower (decorative, pointer devices) *\/\n.cr-cursor { position: fixed; left: 0; top: 0; width: 36px; height: 36px; margin: -18px 0 0 -18px; border: 1.5px solid var(--cr-green); border-radius: 50%; pointer-events: none; z-index: 90; opacity: 0; transition: width 600ms var(--cr-ease), height 600ms var(--cr-ease), margin 600ms var(--cr-ease), background-color 600ms var(--cr-ease), border-color 600ms var(--cr-ease), opacity 400ms var(--cr-ease); mix-blend-mode: multiply; }\n.cr-cursor.is-on { opacity: 1; }\n.cr-cursor.is-hover { width: 72px; height: 72px; margin: -36px 0 0 -36px; background: rgba(91, 160, 68,.35); border-color: var(--cr-lime); }\n.cr-cursor.is-dark { border-color: var(--cr-lime); mix-blend-mode: normal; }\n\n\/* 05.9 Page transition *\/\n.cr-transition { position: fixed; inset: 0; z-index: 100; background: var(--cr-green); transform: scaleY(0); transform-origin: bottom; pointer-events: none; }\n.cr-transition.is-enter { animation: cr-wipe-out 900ms var(--cr-ease-io) forwards; }\n.cr-transition.is-leave { transform-origin: bottom; animation: cr-wipe-in 600ms var(--cr-ease-io) forwards; }\n@keyframes cr-wipe-out { from { transform: scaleY(1); transform-origin: top; } to { transform: scaleY(0); transform-origin: top; } }\n@keyframes cr-wipe-in { from { transform: scaleY(0); } to { transform: scaleY(1); } }\n\n\/* =========================================================\n   08  MOTION SYSTEM (JS adds .cr-js on <html>)\n   ========================================================= *\/\n@media (prefers-reduced-motion: no-preference) {\n  .cr-js [data-reveal] { opacity: 0; transform: translateY(32px); transition: opacity 900ms var(--cr-ease), transform 900ms var(--cr-ease); transition-delay: var(--cr-d, 0ms); }\n  .cr-js [data-reveal].is-in { opacity: 1; transform: none; }\n  .cr-js [data-lines] .cr-ln > span { transform: translateY(105%); transition: transform 1100ms var(--cr-ease); }\n  .cr-js [data-lines] .cr-ln:nth-child(2) > span { transition-delay: 90ms; }\n  .cr-js [data-lines] .cr-ln:nth-child(3) > span { transition-delay: 180ms; }\n  .cr-js [data-lines].is-in .cr-ln > span { transform: none; }\n  .cr-js .cr-chain { --cr-draw: 0; }\n  .cr-js .cr-chain.is-in { --cr-draw: 1; }\n  .cr-scroll__wheel { animation: cr-wheel 1.6s var(--cr-ease) infinite; }\n}\n@keyframes cr-wheel { 0% { opacity: 0; transform: translateY(0); } 20% { opacity: 1; } 70% { opacity: 1; transform: translateY(12px); } 100% { opacity: 0; transform: translateY(14px); } }\n@media (prefers-reduced-motion: reduce) {\n  .cr-page *, .cr-page *::before, .cr-page *::after { transition-duration: 0.01ms !important; animation: none !important; }\n  .cr-cursor, .cr-transition { display: none; }\n}\n\n\/* =========================================================\n   09  RESPONSIVE\n   ========================================================= *\/\n@media (max-width: 1100px) {\n  .cr-services { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .cr-hero__foot { grid-template-columns: 1fr; gap: var(--cr-s6); }\n}\n@media (max-width: 900px) {\n  .cr-section { padding: var(--cr-s9) 0; }\n  .cr-head, .cr-rd { grid-template-columns: 1fr; gap: var(--cr-s5); }\n  .cr-rd { gap: var(--cr-s7); }\n  .cr-families, .cr-quality, .cr-locs { grid-template-columns: 1fr; }\n  .cr-family { padding: var(--cr-s5); }\n  .cr-chain { grid-template-columns: 1fr; gap: var(--cr-s5); padding-left: 40px; }\n  .cr-chain::before { left: 11px; right: auto; top: 0; bottom: 0; width: 1px; height: auto; transform-origin: top; transform: scaleY(var(--cr-draw, 1)); }\n  .cr-chain__dot { position: absolute; left: -40px; top: 4px; }\n  .cr-chain__n { margin-top: 0; }\n  .cr-channels { grid-template-columns: 1fr; }\n  .cr-table li { grid-template-columns: 48px 1fr; }\n  .cr-table__d { grid-column: 2; }\n}\n@media (max-width: 600px) {\n  .cr-figure--wide .cr-figure__frame, .cr-figure--split .cr-figure__frame { aspect-ratio: 4 \/ 3; }\n  .cr-figure--banner .cr-figure__frame { aspect-ratio: 16 \/ 9; }\n  .cr-hero__inner { padding-top: var(--cr-s10); padding-bottom: calc(var(--cr-s9) + 24px); }\n  .cr-specs, .cr-facts { grid-template-columns: 1fr; }\n  .cr-facts div, .cr-facts div:nth-child(2), .cr-facts div:last-child { border-right: 0; padding-left: 0; border-bottom: 1px solid var(--cr-line); padding-bottom: var(--cr-s4); }\n  .cr-services { grid-template-columns: 1fr; }\n  .cr-subnav ol { gap: var(--cr-s5); }\n  .cr-cta__actions, .cr-cta__actions .cr-btn { width: 100%; }\n  .cr-cta__actions .cr-btn { justify-content: space-between; }\n}\n\n\n\/* =========================================================\n   BUTTON STATES \u2014 protected against the theme guard and the\n   Elementor kit link colors (text never matches the hover fill)\n   ========================================================= *\/\n.cr-page a.cr-btn, .cr-page a.cr-btn:hover, .cr-page a.cr-btn:focus { text-decoration: none !important; }\n.cr-page a.cr-btn--primary, .cr-page a.cr-btn--primary:visited, .cr-page a.cr-btn--primary:focus, .cr-page a.cr-btn--primary:active { color: var(--cr-cream) !important; }\n.cr-page a.cr-btn--ghost, .cr-page a.cr-btn--ghost:visited, .cr-page a.cr-btn--ghost:focus, .cr-page a.cr-btn--ghost:active { color: var(--cr-cream) !important; }\n@media (hover: hover) {\n  .cr-page a.cr-btn--primary:hover { color: var(--cr-cream) !important; }\n  .cr-page a.cr-btn--ghost:hover { color: var(--cr-ink) !important; }\n}\n\n\/* PALETTE v2 \u2014 contrast fixes (white on #5BA044 is 3.1:1 \u2192 green surfaces carry navy text) *\/\n.cr-green-bg { color: var(--cr-ink); }\n.cr-green-bg .cr-muted { color: rgba(16, 26, 66, 0.86); }\n.cr-green-bg .cr-label, .cr-green-bg .cr-label__idx { color: var(--cr-ink); }\n.cr-green-bg :focus-visible { outline-color: var(--cr-ink); }\n.cr-btn--primary { color: var(--cr-ink); }\n.cr-btn--primary .cr-btn__icon { background: var(--cr-ink); color: #FFFFFF; }\n.cr-btn--primary:hover .cr-btn__icon { background: #FFFFFF; color: var(--cr-ink); }\n.cr-page a.cr-btn--primary, .cr-page a.cr-btn--primary:visited, .cr-page a.cr-btn--primary:focus, .cr-page a.cr-btn--primary:active { color: var(--cr-ink) !important; }\n@media (hover: hover) { .cr-page a.cr-btn--primary:hover { color: #FFFFFF !important; } }\n.cr-family.is-active, .cr-family.is-active h4, .cr-family.is-active a, .cr-family.is-active a:hover, .cr-family.is-active a svg, .cr-family.is-active .cr-note { color: var(--cr-ink); }\n.cr-family.is-active li { border-bottom-color: rgba(16, 26, 66, 0.25); }\n.cr-page .cr-green-bg a.cr-btn--ghost, .cr-page .cr-green-bg a.cr-btn--ghost:visited, .cr-page .cr-green-bg a.cr-btn--ghost:focus { color: var(--cr-ink) !important; border-color: var(--cr-ink) !important; }\n.cr-green-bg .cr-btn--ghost .cr-btn__icon { background: var(--cr-ink); color: #FFFFFF; }\n.cr-green-bg .cr-btn--ghost::before { background: var(--cr-ink); }\n@media (hover: hover) { .cr-page .cr-green-bg a.cr-btn--ghost:hover { color: #FFFFFF !important; } .cr-green-bg .cr-btn--ghost:hover .cr-btn__icon { background: #FFFFFF; color: var(--cr-ink); } }\n.cr-dark .cr-quote, .cr-dark .cr-qcard__n, .cr-dark .cr-channel__k, .cr-dark .cr-loc__country { color: var(--cr-lime); }\n\n\/* =========================================================\n   CRASSULA PHARMACEUTICALS \u2014 facilities.css\n   Facilities page (\/facilities\/) add-on.\n   Requires about.css (base design system) loaded before it.\n   ========================================================= *\/\n\n\/* ---------------------------------------------------------\n   07.2 FACILITIES (\/facilities\/) \u2014 v1 (pending approval)\n   --------------------------------------------------------- *\/\n\/* Hero background video (YouTube, muted loop) over a poster image *\/\n.cr-hero__video { position: absolute; inset: 0; z-index: -2; overflow: hidden; pointer-events: none; opacity: 0; transition: opacity 1.2s var(--cr-ease); }\n.cr-hero__video.is-ready { opacity: 1; }\n.cr-hero__video iframe { position: absolute; top: 50%; left: 50%; width: max(100%, 177.78vh); height: max(100%, 56.25vw); transform: translate(-50%, -50%); border: 0; }\n.cr-hero__toggle { position: absolute; right: var(--cr-gutter); bottom: var(--cr-s5); width: 44px; height: 44px; border-radius: 50%; border: 1.5px solid rgba(255, 255, 255,.7); background: rgba(16, 26, 66,.35); color: var(--cr-cream); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color var(--cr-t-med) var(--cr-ease), border-color var(--cr-t-med) var(--cr-ease); }\nbutton.cr-hero__toggle:hover, button.cr-hero__toggle:focus { background: rgba(16, 26, 66,.7); border-color: var(--cr-lime); }\n.cr-hero__toggle[hidden] { display: none; }\n.cr-display--long { font-size: clamp(2rem, 0.9rem + 3.9vw, 4.75rem) !important; line-height: 1 !important; max-width: 18ch; }\n\n\/* 01 Facility: spec sheet + photo *\/\n.cr-spec { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--cr-s8); align-items: start; margin-top: var(--cr-s8); }\n.cr-spec__rows { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--cr-ink); }\n.cr-spec__rows li { display: grid; grid-template-columns: 56px 1fr; gap: var(--cr-s4); padding: var(--cr-s5) 0; border-bottom: 1px solid var(--cr-line); }\n.cr-spec__rows li > span:first-child { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); font-weight: 500; color: var(--cr-green-text); padding-top: 4px; }\n.cr-spec__rows li > * { transition: transform var(--cr-t-med) var(--cr-ease); }\n@media (hover: hover) { .cr-spec__rows li:hover > * { transform: translateX(8px); } }\n.cr-spec .cr-figure { margin: 0; position: sticky; top: calc(var(--cr-sticky-offset, 0px) + 88px); }\n.cr-spec .cr-figure__frame { aspect-ratio: 4 \/ 3; }\n.cr-datarow { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: var(--cr-s9) 0 0; border-top: 1px solid var(--cr-ink); }\n.cr-datarow div { padding: var(--cr-s5) var(--cr-s5) 0 0; }\n.cr-datarow div + div { border-left: 1px solid var(--cr-line); padding-left: var(--cr-s5); }\n.cr-datarow dt { font-size: var(--cr-fs-label); letter-spacing: var(--cr-tracking-label); text-transform: uppercase; font-weight: 500; color: var(--cr-ink-70); }\n.cr-datarow dd { margin: var(--cr-s3) 0 0; font-size: clamp(2rem, 1.2rem + 2vw, 3.25rem); font-weight: 200; letter-spacing: -0.05em; line-height: 1; white-space: nowrap; }\n.cr-datarow dd small { white-space: normal; }\n.cr-datarow dd strong { font-weight: 700; }\n.cr-datarow dd small { display: block; margin-top: var(--cr-s3); font-size: var(--cr-fs-small); letter-spacing: 0; font-weight: 400; color: var(--cr-ink-70); line-height: 1.5; }\n\n\/* 02 Capabilities: heading scrolls normally (same top padding as other sections); only the cards pin *\/\n.cr-hs { padding: var(--cr-s10) 0 0; }\n.cr-hs__head { display: flex; justify-content: space-between; align-items: end; gap: var(--cr-s6); flex-wrap: wrap; }\n.cr-hs__head .cr-lead { margin: 0; max-width: 46ch; }\n.cr-hs__pin { position: relative; }\n.cr-hs__sticky { position: sticky; top: 0; height: 100vh; height: 100svh; display: flex; flex-direction: column; justify-content: center; gap: var(--cr-s6); overflow: hidden; padding: calc(var(--cr-sticky-offset, 0px) + 56px) 0 var(--cr-s5); } \/* 56px clears the sticky sub-nav *\/\n.cr-hs__meter { height: 2px; background: var(--cr-line-dark); position: relative; overflow: hidden; }\n.cr-hs__meter span { position: absolute; inset: 0; background: var(--cr-lime); transform: scaleX(0); transform-origin: left; }\n.cr-hs__track { list-style: none; margin: 0; padding: 0 0 0 max(var(--cr-gutter), calc((100vw - var(--cr-container)) \/ 2 + var(--cr-gutter))); display: flex; gap: var(--cr-s5); will-change: transform; }\n.cr-hs__track::after { content: \"\"; flex: 0 0 var(--cr-gutter); }\n.cr-cap { flex: 0 0 min(420px, 80vw); height: min(380px, calc(100svh - 56px - 140px)); min-height: 280px; display: flex; flex-direction: column; justify-content: space-between; padding: var(--cr-s6); border: 1px solid var(--cr-line-dark); border-radius: var(--cr-r-card); transition: border-color 700ms var(--cr-ease), background-color 700ms var(--cr-ease), transform 700ms var(--cr-ease); }\n.cr-cap__n { font-size: clamp(3.5rem, 2.2rem + 3.5vw, 6rem); font-weight: 100; letter-spacing: -0.06em; line-height: .85; color: var(--cr-lime); transition: transform 900ms var(--cr-ease); transform-origin: left bottom; }\n.cr-cap h3 { margin: 0; font-size: var(--cr-fs-h3); font-weight: 600; letter-spacing: -0.02em; line-height: 1.2; }\n.cr-cap p { margin: var(--cr-s3) 0 0; color: rgba(255, 255, 255,.86); }\n.cr-cap--key { background: var(--cr-green); border-color: transparent; }\n.cr-cap--key .cr-cap__n, .cr-cap--key p { color: var(--cr-cream); }\n@media (hover: hover) { .cr-cap:hover { border-color: rgba(255, 255, 255,.5); transform: translateY(-4px); } .cr-cap:hover .cr-cap__n { transform: scale(1.06); } }\n.cr-hs--static .cr-hs__sticky { position: static; height: auto; overflow: visible; padding: var(--cr-s7) 0 var(--cr-s10); }\n.cr-hs--static .cr-hs__track { flex-wrap: wrap; transform: none !important; max-width: var(--cr-container); margin: 0 auto; padding: 0 var(--cr-gutter); }\n.cr-hs--static .cr-hs__track::after { display: none; }\n.cr-hs--static .cr-cap { flex: 1 1 300px; height: auto; min-height: 0; gap: var(--cr-s6); }\n.cr-hs--static .cr-hs__meter { display: none; }\n\n\/* 03 Quality & certifications *\/\n.cr-certs { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: var(--cr-s8); align-items: center; margin-top: var(--cr-s8); }\n.cr-certs__card { background: #FFFFFF; border-radius: var(--cr-r-card); padding: var(--cr-s6); box-shadow: 0 24px 48px -36px rgba(16, 26, 66,.55); transition: transform 700ms var(--cr-ease); }\n.cr-certs__card img { width: 100%; height: auto; }\n@media (hover: hover) { .cr-certs__card:hover { transform: translateY(-4px); } }\n.cr-chips { list-style: none; margin: var(--cr-s5) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--cr-s2); }\n.cr-chips li { padding: 10px 18px; border-radius: var(--cr-r-pill); border: 1px solid var(--cr-ink); font-weight: 500; font-size: var(--cr-fs-small); transition: background-color var(--cr-t-med) var(--cr-ease), color var(--cr-t-med) var(--cr-ease); }\n@media (hover: hover) { .cr-chips li:hover { background: var(--cr-ink); color: var(--cr-cream); } }\n.cr-certs__seal { display: flex; align-items: center; gap: var(--cr-s5); margin-top: var(--cr-s7); padding-top: var(--cr-s5); border-top: 1px solid var(--cr-line); }\n\n\/* 05 CTA on green *\/\n.cr-green-bg .cr-btn--primary { background: var(--cr-cream); color: var(--cr-ink); }\n.cr-green-bg .cr-btn--primary .cr-btn__icon { background: var(--cr-green); color: var(--cr-cream); }\n.cr-green-bg .cr-btn--primary:hover { color: var(--cr-cream); }\n\n@media (max-width: 900px) {\n  .cr-spec, .cr-certs { grid-template-columns: 1fr; gap: var(--cr-s6); }\n  .cr-spec .cr-figure { position: static; }\n  .cr-datarow { grid-template-columns: 1fr; }\n  .cr-datarow div + div { border-left: 0; padding-left: 0; border-top: 1px solid var(--cr-line); margin-top: var(--cr-s4); }\n  .cr-hs { padding-top: var(--cr-s9); }\n}\n\/* palette v2: navy text on the green key card *\/\n.cr-cap--key, .cr-cap--key h3, .cr-cap--key p, .cr-cap--key .cr-cap__n { color: var(--cr-ink) !important; }\n\n<\/style>\n\n<!-- GEO \/ AIO \u00b7 datos estructurados -->\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[\n {\"@type\":\"AboutPage\",\"@id\":\"https:\/\/crassulapharma.com\/facilities\/#page\",\"url\":\"https:\/\/crassulapharma.com\/facilities\/\",\"name\":\"Crassula Facilities \u2014 WHO-GMP Manufacturing with PQNS Capsule & Softgel Lines\",\"description\":\"Crassula's 20,000 m\u00b2 WHO-GMP site manufactures prescription tablets and PQNS-enabled capsules and softgels, with in-house QC\/QA and stability.\",\"inLanguage\":\"en\",\"about\":{\"@id\":\"https:\/\/crassulapharma.com\/#organization\"},\"breadcrumb\":{\"@id\":\"https:\/\/crassulapharma.com\/facilities\/#breadcrumb\"},\"primaryImageOfPage\":\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blsiter-Machine-1024x684.jpg\"},\n {\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/crassulapharma.com\/facilities\/#breadcrumb\",\"itemListElement\":[\n  {\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/crassulapharma.com\/\"},\n  {\"@type\":\"ListItem\",\"position\":2,\"name\":\"Facilities\",\"item\":\"https:\/\/crassulapharma.com\/facilities\/\"}]},\n {\"@type\":\"Service\",\"@id\":\"https:\/\/crassulapharma.com\/facilities\/#cdmo\",\"name\":\"CDMO manufacturing services\",\"serviceType\":\"Contract development and manufacturing (CDMO)\",\"provider\":{\"@id\":\"https:\/\/crassulapharma.com\/#organization\"},\n  \"hasOfferCatalog\":{\"@type\":\"OfferCatalog\",\"name\":\"Capabilities\",\"itemListElement\":[\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Product Development\",\"description\":\"Pre-formulation, excipient screening, QbD, scale-up, and tech transfer.\"}},\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"PQNS Capsules & Softgels\",\"description\":\"Programmable release layers, gut-friendly profiles, and dose-efficient designs.\"}},\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Manufacturing\",\"description\":\"Granulation, compression, coating, blistering\/bottling with IPC at critical steps.\"}},\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Analytical & Stability\",\"description\":\"Assay & CU, dissolution, micro; ICH stability chambers; LC\u2013MS\/MS-ready methods.\"}},\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Regulatory & Dossiers\",\"description\":\"CTD compilation, validation protocols\/reports, variations and change control.\"}},\n   {\"@type\":\"Offer\",\"itemOffered\":{\"@type\":\"Service\",\"name\":\"Packaging & Serialization\",\"description\":\"Blister and bottle formats, artwork control, GS1 serialization and track-and-trace.\"}}]}},\n {\"@type\":\"Organization\",\"@id\":\"https:\/\/crassulapharma.com\/#organization\",\"name\":\"Crassula Pharmaceuticals\",\"legalName\":\"CRASSULA LLC\",\"url\":\"https:\/\/crassulapharma.com\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/Crassulapharmaceuticals\/\",\"https:\/\/www.linkedin.com\/company\/crassula-pharmaceuticals\",\"https:\/\/www.youtube.com\/@CrassulaPharmaceuticals\",\"https:\/\/x.com\/crassula_llc\"]}\n]}\n<\/script>\n\n<!-- Contenido -->\n<div class=\"cr-transition\" aria-hidden=\"true\"><\/div>\n\n<main id=\"content\" class=\"cr-page\" data-page=\"facilities\">\n\n  <!-- ===== HERO (video) ===== -->\n  <section class=\"cr-section cr-hero cr-hero--center\" aria-labelledby=\"fac-title\" style=\"padding:0\">\n    <div class=\"cr-hero__media\" data-parallax=\"0.18\">\n      <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blsiter-Machine-1024x684.jpg\" alt=\"\" width=\"1024\" height=\"684\" fetchpriority=\"high\" title=\"\">\n    <\/div>\n    <div class=\"cr-hero__video\" data-yt=\"aOvPxSouWgk\" data-title=\"Crassula manufacturing facility\"><\/div>\n    <div class=\"cr-hero__grid\" aria-hidden=\"true\"><\/div>\n    <div class=\"cr-wrap cr-hero__inner\">\n      <div class=\"cr-hero__top\">\n        <nav class=\"cr-crumbs\" aria-label=\"Breadcrumb\"><ol><li><a href=\"\/\">Home<\/a><\/li><li aria-current=\"page\">Facilities<\/li><\/ol><\/nav>\n      <\/div>\n      <h1 class=\"cr-display cr-display--long\" id=\"fac-title\" data-lines>\n        <span class=\"cr-ln\"><span>WHO-GMP manufacturing<\/span><\/span>\n        <span class=\"cr-ln\"><span class=\"t-800\">with PQNS capsule<\/span><\/span>\n        <span class=\"cr-ln\"><span class=\"t-800\">&amp; softgel lines<\/span><\/span>\n      <\/h1>\n      <div class=\"cr-hero__foot\">\n        <!-- REVIEW: claim (WHO-GMP \/ ISO 9001\/13485) -->\n        <p class=\"cr-answer\" data-reveal>Crassula\u2019s manufacturing site is a 20,000 m\u00b2 facility dedicated to prescription tablets and PQNS-enabled capsules and softgels. In-house QC\/QA laboratories, stability chambers and ISO 9001\/13485 quality systems support quality, reliability and global supply readiness, from formulation to finished pack.<\/p>\n      <\/div>\n    <\/div>\n    <a class=\"cr-scroll\" href=\"#facility\" aria-label=\"Scroll to the manufacturing facility\"><span class=\"cr-scroll__mouse\" aria-hidden=\"true\"><span class=\"cr-scroll__wheel\"><\/span><\/span><\/a>\n    <button class=\"cr-hero__toggle\" type=\"button\" aria-pressed=\"false\" aria-label=\"Pause background video\" hidden><svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path class=\"cr-ico\" d=\"M8 5v14M16 5v14\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" fill=\"none\"\/><\/svg><\/button>\n  <\/section>\n\n  <!-- ===== SUB NAV ===== -->\n  <nav class=\"cr-subnav\" aria-label=\"On this page\">\n    <ol>\n      <li><a href=\"#facility\"><span>01<\/span> Manufacturing facility<\/a><\/li>\n      <li><a href=\"#capabilities\"><span>02<\/span> Capabilities<\/a><\/li>\n      <li><a href=\"#quality\"><span>03<\/span> Quality &amp; certifications<\/a><\/li>\n      <li><a href=\"#packs\"><span>04<\/span> Finished packs<\/a><\/li>\n      <li><a href=\"#visit\"><span>05<\/span> Technical visit<\/a><\/li>\n    <\/ol>\n    <span class=\"cr-progress\" aria-hidden=\"true\"><\/span>\n  <\/nav>\n\n  <!-- ===== 01 MANUFACTURING FACILITY ===== -->\n  <section class=\"cr-section cr-facility cr-cream\" id=\"facility\" aria-labelledby=\"f1-title\">\n    <div class=\"cr-wrap\">\n      <div class=\"cr-head\">\n        <div data-reveal>\n          <span class=\"cr-label\"><span class=\"cr-label__idx\">01<\/span><span class=\"cr-label__bar\"><\/span>Manufacturing facility<\/span>\n          <h2 class=\"cr-h2\" id=\"f1-title\">One site, <span class=\"t-200\"><em>R&amp;D to commercial<\/em><\/span><\/h2>\n        <\/div>\n        <p class=\"cr-lead cr-muted\" data-reveal style=\"--cr-d:120ms;margin-top:0\">A modern site for solid oral dosage forms and PQNS-enabled capsules and softgels, integrating R&amp;D, scale-up and commercial production under rigorous quality systems.<\/p>\n      <\/div>\n      <div class=\"cr-spec\">\n        <div>\n          <h3 class=\"cr-h3\" data-reveal>Focus<\/h3>\n          <ol class=\"cr-spec__rows\" data-stagger style=\"margin-top:24px\">\n            <li data-reveal><span>01<\/span><span>Prescription tablets and capsules: film-coated, controlled-release and fixed-dose combinations.<\/span><\/li>\n            <li data-reveal><span>02<\/span><span>PQNS capsule and softgel manufacturing with validated cleaning and electronic batch records.<\/span><\/li>\n            <li data-reveal><span>03<\/span><span>Environmental monitoring, controlled flows and ICH-guided qualification.<\/span><\/li>\n          <\/ol>\n        <\/div>\n        <figure class=\"cr-figure\" data-reveal>\n          <div class=\"cr-figure__frame\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blsiter-Machine-1024x684.jpg\" alt=\"High-speed blister packaging machine producing serialized prescription packs\" width=\"1024\" height=\"684\" loading=\"lazy\" data-parallax-img title=\"\"><\/div>\n          <figcaption class=\"cr-figure__cap\"><span class=\"cr-label\">Fig. 01<\/span> High-speed blister packaging producing serialized prescription packs<\/figcaption>\n        <\/figure>\n      <\/div>\n      <dl class=\"cr-datarow\" data-reveal>\n        <div><dt>Site area<\/dt><dd><strong>20,000<\/strong> m\u00b2<small>Dedicated to prescription tablets and PQNS-enabled capsules and softgels<\/small><\/dd><\/div>\n        <div><dt>In-house<\/dt><dd><strong>QC\/QA<\/strong><small>Quality control and assurance laboratories<\/small><\/dd><\/div>\n        <div><dt>Stability<\/dt><dd><strong>ICH<\/strong> chambers<small>Stability programs to ICH guidance<\/small><\/dd><\/div>\n      <\/dl>\n    <\/div>\n  <\/section>\n\n  <!-- ===== 02 CAPABILITIES (horizontal sequence) ===== -->\n  <section class=\"cr-dark cr-hs\" id=\"capabilities\" aria-labelledby=\"f2-title\" data-hscroll>\n    <div class=\"cr-wrap\">\n      <div class=\"cr-hs__head\">\n        <div data-reveal>\n          <span class=\"cr-label\"><span class=\"cr-label__idx\">02<\/span><span class=\"cr-label__bar\"><\/span>Capabilities<\/span>\n          <h2 class=\"cr-h2\" id=\"f2-title\">Formulation <span class=\"t-200\"><em>to finished pack<\/em><\/span><\/h2>\n        <\/div>\n        <p class=\"cr-lead cr-muted\" data-reveal style=\"--cr-d:120ms\">End-to-end support built on robust quality systems, across six connected capabilities.<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"cr-hs__pin\">\n      <div class=\"cr-hs__sticky\">\n        <div class=\"cr-wrap\" style=\"width:100%\"><div class=\"cr-hs__meter\" aria-hidden=\"true\"><span><\/span><\/div><\/div>\n        <ol class=\"cr-hs__track\">\n        <li class=\"cr-cap\"><span class=\"cr-cap__n\" aria-hidden=\"true\">01<\/span><div><h3>Product Development<\/h3><p>Pre-formulation, excipient screening, QbD, scale-up and tech transfer.<\/p><\/div><\/li>\n        <li class=\"cr-cap cr-cap--key\"><span class=\"cr-cap__n\" aria-hidden=\"true\">02<\/span><div><h3>PQNS Capsules &amp; Softgels<\/h3><p>Programmable release layers, gut-friendly profiles and dose-efficient designs.<\/p><\/div><\/li>\n        <li class=\"cr-cap\"><span class=\"cr-cap__n\" aria-hidden=\"true\">03<\/span><div><h3>Manufacturing<\/h3><p>Granulation, compression, coating and blistering\/bottling, with in-process controls at critical steps.<\/p><\/div><\/li>\n        <li class=\"cr-cap\"><span class=\"cr-cap__n\" aria-hidden=\"true\">04<\/span><div><h3>Analytical &amp; Stability<\/h3><p>Assay and content uniformity, dissolution and micro; ICH stability chambers; LC\u2013MS\/MS-ready methods.<\/p><\/div><\/li>\n        <li class=\"cr-cap\"><span class=\"cr-cap__n\" aria-hidden=\"true\">05<\/span><div><h3>Regulatory &amp; Dossiers<\/h3><p>CTD compilation, validation protocols and reports, variations and change control.<\/p><\/div><\/li>\n        <li class=\"cr-cap\"><span class=\"cr-cap__n\" aria-hidden=\"true\">06<\/span><div><h3>Packaging &amp; Serialization<\/h3><p>Blister and bottle formats, artwork control, GS1 serialization and track-and-trace.<\/p><\/div><\/li>\n      <\/ol>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===== 03 QUALITY & CERTIFICATIONS ===== -->\n  <section class=\"cr-section cr-peach\" id=\"quality\" aria-labelledby=\"f3-title\">\n    <div class=\"cr-wrap\">\n      <div class=\"cr-certs\">\n        <div data-reveal>\n          <span class=\"cr-label\"><span class=\"cr-label__idx\">03<\/span><span class=\"cr-label__bar\"><\/span>Quality &amp; certifications<\/span>\n          <h2 class=\"cr-h2\" id=\"f3-title\">Quality <span class=\"t-200\"><em>by system<\/em><\/span><\/h2>\n          <p class=\"cr-lead\">Validated cleaning, electronic batch records, environmental monitoring and ICH-guided qualification support every batch.<\/p>\n          <!-- REVIEW: claim (certifications) -->\n          <ul class=\"cr-chips\" aria-label=\"Certifications\">\n            <li>FDA Registered<\/li><li>GMP<\/li><li>HACCP<\/li><li>ISO 22000<\/li><li>Kosher<\/li><li>Halal<\/li>\n          <\/ul>\n          <div class=\"cr-certs__seal\">\n            <div class=\"cr-seal\" style=\"width:96px;height:96px;padding:12px\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2026\/10\/logo-gmp.png\" alt=\"GMP seal\" width=\"72\" height=\"72\" loading=\"lazy\" title=\"\"><\/div>\n            <p class=\"cr-muted\" style=\"margin:0;max-width:40ch\">Facilities operate under WHO-GMP manufacturing practices.<\/p>\n          <\/div>\n        <\/div>\n        <figure class=\"cr-certs__card\" data-reveal style=\"--cr-d:140ms;margin:0\">\n          <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/09\/image.png\" alt=\"Certifications: FDA Registered, GMP, HACCP, ISO 22000, Kosher, Halal\" width=\"800\" height=\"400\" loading=\"lazy\" title=\"\">\n        <\/figure>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===== 04 FINISHED PACKS ===== -->\n  <section class=\"cr-section cr-cream\" id=\"packs\" aria-labelledby=\"f4-title\">\n    <div class=\"cr-wrap\">\n      <div class=\"cr-head\">\n        <div data-reveal>\n          <span class=\"cr-label\"><span class=\"cr-label__idx\">04<\/span><span class=\"cr-label__bar\"><\/span>Finished packs<\/span>\n          <h2 class=\"cr-h2\" id=\"f4-title\">Blister <span class=\"t-200\"><em>&amp; bottle formats<\/em><\/span><\/h2>\n        <\/div>\n        <p class=\"cr-lead cr-muted\" data-reveal style=\"--cr-d:120ms;margin-top:0\">Artwork control, GS1 serialization and track-and-trace, across a range of blister configurations and cavity layouts.<\/p>\n      <\/div>\n      <figure class=\"cr-figure cr-figure--banner\" data-reveal>\n        <div class=\"cr-figure__frame\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/crassulapharma.com\/wp-content\/uploads\/2025\/01\/Blister-Multiples-1024x328.jpg\" alt=\"Range of blister configurations and cavity layouts for finished packs\" width=\"1024\" height=\"328\" loading=\"lazy\" data-parallax-img title=\"\"><\/div>\n        <figcaption class=\"cr-figure__cap\"><span class=\"cr-label\">Fig. 02<\/span> Blister configurations and cavity layouts for finished packs<\/figcaption>\n      <\/figure>\n    <\/div>\n  <\/section>\n\n  <!-- ===== 05 CTA ===== -->\n  <section class=\"cr-section cr-cta cr-green-bg\" id=\"visit\" aria-labelledby=\"f5-title\">\n    <div class=\"cr-wrap\">\n      <span class=\"cr-label\" data-reveal><span class=\"cr-label__idx\">05<\/span><span class=\"cr-label__bar\"><\/span>Technical visit<\/span>\n      <h2 class=\"cr-display\" id=\"f5-title\" data-lines style=\"margin-top:24px\">\n        <span class=\"cr-ln\"><span>Plan a<\/span><\/span>\n        <span class=\"cr-ln\"><span class=\"t-800\">technical visit<\/span><\/span>\n      <\/h2>\n      <div class=\"cr-cta__row\">\n        <p class=\"cr-lead\" data-reveal style=\"margin:0\">Review PQNS capsule and softgel options, dossier readiness, stability plans and packaging with our team.<\/p>\n        <div class=\"cr-cta__actions\" data-reveal style=\"--cr-d:120ms\">\n          <a class=\"cr-btn cr-btn--primary\" href=\"\/contact\/\">Contact manufacturing <span class=\"cr-btn__icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M13 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/span><\/a>\n          <a class=\"cr-btn cr-btn--ghost\" href=\"\/about-us\/\">About Crassula <span class=\"cr-btn__icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M13 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/span><\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n<\/main>\n\n<!-- JS de la p\u00e1gina (main.js) -->\n<script>\n\/* =========================================================\n   CRASSULA PHARMACEUTICALS \u2014 main.js\n   Single script for every page (vanilla, loaded with defer).\n   Rule: animations only change transform\/opacity of content that\n   already exists in the HTML. No content is injected with JS.\n\n   CONTENTS\n   01  Core (flags + module runner)\n   02  Global modules (run on every page; skip if markup is absent)\n       reveal \u00b7 subnav \u00b7 heroParallax \u00b7 figureParallax \u00b7 heroVideo \u00b7 hscroll \u00b7 dialogs \u00b7 countUp \u00b7 cursor \u00b7 pageTransition\n   03  Shared section modules\n       productFamilies\n   04  Page modules (keyed by data-page=\"\u2026\" on <body> or <main>)\n       about \u00b7 facilities \u00b7 social \u00b7 team \u00b7 pharma \u00b7 supplements\n       media \u00b7 contact \u00b7 home\n   05  Boot\n   ========================================================= *\/\n(function () {\n  'use strict';\n\n  \/* ---------- 01 CORE ---------- *\/\n  var html = document.documentElement;\n  var RM = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var FINE = window.matchMedia('(hover: hover) and (pointer: fine)').matches;\n  var HAS_IO = 'IntersectionObserver' in window;\n  var $ = function (sel, ctx) { return (ctx || document).querySelector(sel); };\n  var $$ = function (sel, ctx) { return [].slice.call((ctx || document).querySelectorAll(sel)); };\n  var onScroll = function (fn) {\n    var ticking = false;\n    window.addEventListener('scroll', function () {\n      if (ticking) return; ticking = true;\n      requestAnimationFrame(function () { fn(); ticking = false; });\n    }, { passive: true });\n    fn();\n  };\n  html.classList.add('cr-js');\n\n  \/* ---------- 02 GLOBAL MODULES ---------- *\/\n  var Global = {\n\n    \/* Reveal on scroll: [data-reveal], [data-lines], .cr-chain; [data-stagger] staggers children *\/\n    reveal: function () {\n      var els = $$('[data-reveal], [data-lines], .cr-chain');\n      if (!els.length) return;\n      if (RM || !HAS_IO) { els.forEach(function (el) { el.classList.add('is-in'); }); return; }\n      $$('[data-stagger]').forEach(function (group) {\n        [].slice.call(group.children).forEach(function (c, i) { c.style.setProperty('--cr-d', (i * 90) + 'ms'); });\n      });\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); } });\n      }, { rootMargin: '0px 0px -10% 0px', threshold: 0.05 });\n      els.forEach(function (el) { io.observe(el); });\n    },\n\n    \/* Sticky in-page navigation: active section + reading progress *\/\n    subnav: function () {\n      var nav = $('.cr-subnav'); if (!nav) return;\n      var links = $$('a[href^=\"#\"]', nav), list = $('ol', nav), bar = $('.cr-progress', nav), map = {};\n      links.forEach(function (a) { map[a.getAttribute('href').slice(1)] = a; });\n      if (HAS_IO) {\n        var io = new IntersectionObserver(function (entries) {\n          entries.forEach(function (e) {\n            if (!e.isIntersecting) return;\n            links.forEach(function (a) { a.removeAttribute('aria-current'); });\n            var a = map[e.target.id]; if (!a) return;\n            a.setAttribute('aria-current', 'true');\n            list.scrollTo({ left: a.offsetLeft - (list.clientWidth - a.offsetWidth) \/ 2, behavior: RM ? 'auto' : 'smooth' });\n          });\n        }, { rootMargin: '-35% 0px -60% 0px' });\n        Object.keys(map).forEach(function (id) { var s = document.getElementById(id); if (s) io.observe(s); });\n      }\n      if (bar) {\n        var main = $('main');\n        onScroll(function () {\n          var r = main.getBoundingClientRect(), h = r.height - window.innerHeight;\n          bar.style.transform = 'scaleX(' + Math.min(1, Math.max(0, -r.top \/ (h || 1))).toFixed(3) + ')';\n        });\n      }\n    },\n\n    \/* Hero background parallax: [data-parallax=\"speed\"] *\/\n    heroParallax: function () {\n      var els = $$('[data-parallax]'); if (!els.length || RM) return;\n      onScroll(function () {\n        els.forEach(function (el) {\n          var speed = parseFloat(el.getAttribute('data-parallax')) || 0.2;\n          var r = el.parentElement.getBoundingClientRect();\n          if (r.bottom > 0 && r.top < window.innerHeight) el.style.transform = 'translate3d(0,' + (-r.top * speed).toFixed(1) + 'px,0)';\n        });\n      });\n    },\n\n    \/* Image parallax inside framed figures: img[data-parallax-img] *\/\n    figureParallax: function () {\n      var imgs = $$('[data-parallax-img]'); if (!imgs.length || RM) return;\n      onScroll(function () {\n        var vh = window.innerHeight;\n        imgs.forEach(function (img) {\n          var r = img.parentElement.getBoundingClientRect();\n          if (r.bottom < 0 || r.top > vh) return;\n          var p = (r.top + r.height \/ 2 - vh \/ 2) \/ vh;\n          img.style.transform = 'translate3d(0,' + (-8 + p * -8).toFixed(2) + '%,0)';\n        });\n      });\n    },\n\n    \/* Hero background video (YouTube): loads only when motion is allowed; pause\/play control (WCAG 2.2.2) *\/\n    heroVideo: function () {\n      var box = $('.cr-hero__video[data-yt]'); if (!box) return;\n      var btn = $('.cr-hero__toggle');\n      if (RM) return; \/* poster image only *\/\n      var id = box.getAttribute('data-yt');\n      var f = document.createElement('iframe');\n      f.src = 'https:\/\/www.youtube-nocookie.com\/embed\/' + id + '?autoplay=1&mute=1&loop=1&playlist=' + id + '&controls=0&rel=0&modestbranding=1&playsinline=1&enablejsapi=1';\n      f.title = box.getAttribute('data-title') || 'Background video';\n      f.setAttribute('allow', 'autoplay; encrypted-media; picture-in-picture');\n      f.setAttribute('tabindex', '-1'); f.setAttribute('aria-hidden', 'true');\n      f.addEventListener('load', function () { setTimeout(function () { box.classList.add('is-ready'); }, 600); });\n      box.appendChild(f);\n      if (!btn) return;\n      btn.hidden = false;\n      var playing = true;\n      btn.addEventListener('click', function () {\n        playing = !playing;\n        f.contentWindow.postMessage(JSON.stringify({ event: 'command', func: playing ? 'playVideo' : 'pauseVideo', args: [] }), '*');\n        btn.setAttribute('aria-pressed', String(!playing));\n        btn.setAttribute('aria-label', playing ? 'Pause background video' : 'Play background video');\n        var ico = $('.cr-ico', btn); ico.setAttribute('d', playing ? 'M8 5v14M16 5v14' : 'M8 5l11 7-11 7z'); ico.setAttribute('fill', playing ? 'none' : 'currentColor');\n      });\n    },\n\n    \/* Horizontal sequence pinned on scroll: section[data-hscroll] (vertical grid on small screens \/ reduced motion) *\/\n    hscroll: function () {\n      $$('[data-hscroll]').forEach(function (root) {\n        var sec = $('.cr-hs__pin', root) || root;\n        var track = $('.cr-hs__track', root), meter = $('.cr-hs__meter span', root);\n        if (!track) return;\n        var mq = window.matchMedia('(min-width: 901px)');\n        var dist = 0;\n        var setup = function () {\n          if (RM || !mq.matches || window.innerHeight < 560) { root.classList.add('cr-hs--static'); sec.style.height = ''; track.style.transform = ''; dist = 0; return; }\n          root.classList.remove('cr-hs--static');\n          dist = Math.max(0, track.scrollWidth - window.innerWidth);\n          sec.style.height = (window.innerHeight + dist) + 'px';\n        };\n        var upd = function () {\n          if (!dist) return;\n          var r = sec.getBoundingClientRect();\n          var p = Math.min(1, Math.max(0, -r.top \/ dist));\n          track.style.transform = 'translate3d(' + (-p * dist).toFixed(1) + 'px,0,0)';\n          if (meter) meter.style.transform = 'scaleX(' + p.toFixed(3) + ')';\n        };\n        setup(); onScroll(upd);\n        window.addEventListener('resize', function () { setup(); upd(); });\n        window.addEventListener('load', function () { setup(); upd(); });\n      });\n    },\n\n    \/* Dialogs: [data-dialog-open=\"id\"] opens <dialog id>; close button, Esc and backdrop click close it *\/\n    dialogs: function () {\n      $$('[data-dialog-open]').forEach(function (btn) {\n        var dlg = document.getElementById(btn.getAttribute('data-dialog-open'));\n        if (!dlg || typeof dlg.showModal !== 'function') return;\n        btn.addEventListener('click', function () { dlg.showModal(); html.style.overflow = 'hidden'; });\n        dlg.addEventListener('close', function () { html.style.overflow = ''; btn.focus(); });\n        dlg.addEventListener('click', function (e) { if (e.target === dlg) dlg.close(); });\n        $$('[data-dialog-close]', dlg).forEach(function (x) { x.addEventListener('click', function () { dlg.close(); }); });\n      });\n    },\n\n    \/* Count-up figures: [data-count=\"N\"] (text already in the HTML; animates from 0 when visible) *\/\n    countUp: function () {\n      var els = $$('[data-count]'); if (!els.length || RM || !HAS_IO) return;\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) {\n          if (!e.isIntersecting) return; io.unobserve(e.target);\n          var el = e.target, to = +el.getAttribute('data-count'), t0 = performance.now();\n          (function step(t) { var p = Math.min(1, (t - t0) \/ 1100); el.textContent = Math.round(to * (1 - Math.pow(1 - p, 3))).toLocaleString('en-US'); if (p < 1) requestAnimationFrame(step); })(t0);\n        });\n      }, { threshold: 0.6 });\n      els.forEach(function (el) { io.observe(el); });\n    },\n\n    \/* Cursor follower ring (decorative; native cursor stays visible) *\/\n    cursor: function () {\n      if (RM || !FINE) return;\n      var c = document.createElement('div'); c.className = 'cr-cursor'; c.setAttribute('aria-hidden', 'true'); document.body.appendChild(c);\n      var x = 0, y = 0, cx = 0, cy = 0;\n      document.addEventListener('mousemove', function (e) { x = e.clientX; y = e.clientY; c.classList.add('is-on'); });\n      document.addEventListener('mouseleave', function () { c.classList.remove('is-on'); });\n      (function loop() { cx += (x - cx) * 0.2; cy += (y - cy) * 0.2; c.style.transform = 'translate3d(' + cx + 'px,' + cy + 'px,0)'; requestAnimationFrame(loop); })();\n      document.addEventListener('mouseover', function (e) {\n        c.classList.toggle('is-hover', !!e.target.closest('a, button, [data-cursor]'));\n        c.classList.toggle('is-dark', !!e.target.closest('.cr-dark, .cr-green-bg, .cr-hero'));\n      });\n    },\n\n    \/* Page transitions (no SPA): wipe in on internal navigation, wipe out on load *\/\n    pageTransition: function () {\n      var tr = $('.cr-transition'); if (!tr || RM) return;\n      tr.classList.add('is-enter');\n      document.addEventListener('click', function (e) {\n        var a = e.target.closest('a[href]'); if (!a) return;\n        var href = a.getAttribute('href');\n        if (!href || href.charAt(0) === '#' || a.target === '_blank' || e.metaKey || e.ctrlKey || e.shiftKey || \/^(mailto:|tel:)\/.test(href)) return;\n        var url = new URL(a.href, location.href); if (url.origin !== location.origin) return;\n        e.preventDefault();\n        tr.classList.remove('is-enter'); tr.classList.add('is-leave');\n        setTimeout(function () { location.href = url.href; }, 560);\n      });\n      window.addEventListener('pageshow', function (ev) { if (ev.persisted) { tr.classList.remove('is-leave'); tr.classList.add('is-enter'); } });\n    }\n  };\n\n  \/* ---------- 03 SHARED SECTION MODULES ---------- *\/\n  var Sections = {\n\n    \/* Product families: active column + product image swap on hover\/focus *\/\n    productFamilies: function () {\n      var fams = $$('.cr-family'); if (!fams.length) return;\n      fams.forEach(function (fam) {\n        var target = $('.cr-family__img img', fam);\n        var activate = function () { fams.forEach(function (f) { f.classList.toggle('is-active', f === fam); }); };\n        fam.addEventListener('mouseenter', activate);\n        fam.addEventListener('focusin', activate);\n        if (!target) return;\n        var show = function (a) {\n          var src = a.getAttribute('data-img'); if (!src || target.getAttribute('src') === src) return;\n          if (RM) { target.src = src; target.alt = a.getAttribute('data-alt'); return; }\n          target.classList.add('is-swap');\n          setTimeout(function () {\n            target.src = src; target.alt = a.getAttribute('data-alt');\n            target.onload = function () { target.classList.remove('is-swap'); };\n            setTimeout(function () { target.classList.remove('is-swap'); }, 400);\n          }, 300);\n        };\n        $$('a[data-img]', fam).forEach(function (a) {\n          a.addEventListener('mouseenter', function () { show(a); });\n          a.addEventListener('focus', function () { show(a); });\n        });\n      });\n    }\n  };\n\n  \/* ---------- 04 PAGE MODULES ([data-page] on <body> or <main>) ---------- *\/\n  var Pages = {\n    about: function () { \/* About Us \u2014 APPROVED v1.3: uses Global + Sections.productFamilies only *\/ },\n    facilities: function () { \/* Facilities \u2014 v1: uses Global.heroVideo + Global.hscroll *\/ },\n    social: function () { \/* Social Responsibility \u2014 v1: Global modules only *\/ },\n    team: function () { \/* Team \u2014 v1: uses Global.dialogs for bios *\/ },\n    pharma: function () { \/* Pharma \u2014 uses Global modules (subnav, countUp, reveal) *\/ },\n    supplements: function () { \/* Supplements \u2014 uses Global modules *\/ },\n    \/* Media Releases: category filter (shows\/hides releases already in the HTML) *\/\n    media: function () {\n      var btns = $$('.cr-filter'); if (!btns.length) return;\n      var rels = $$('.cr-rel'), years = $$('.cr-year');\n      btns.forEach(function (b) {\n        b.addEventListener('click', function () {\n          var cat = b.getAttribute('data-filter');\n          btns.forEach(function (x) { x.setAttribute('aria-pressed', String(x === b)); });\n          rels.forEach(function (r) { r.hidden = !(cat === 'all' || r.getAttribute('data-cat') === cat); });\n          years.forEach(function (y) { y.hidden = !$$('.cr-rel:not([hidden])', y).length; });\n        });\n      });\n    },\n    \/* Contact: route cards preset the form topic; copy-address buttons; visual-only form (no backend) *\/\n    contact: function () {\n      var form = $('#contact-form'), topic = $('#cf-topic'), status = $('.cr-form__status');\n      $$('[data-topic]').forEach(function (b) {\n        b.addEventListener('click', function () {\n          if (topic) topic.value = b.getAttribute('data-topic');\n          var target = $('#form'); if (target) target.scrollIntoView({ behavior: RM ? 'auto' : 'smooth' });\n          setTimeout(function () { var f = $('#cf-first'); if (f) f.focus({ preventScroll: true }); }, RM ? 0 : 700);\n        });\n      });\n      $$('[data-copy]').forEach(function (b) {\n        b.addEventListener('click', function () {\n          var txt = b.getAttribute('data-copy'), label = b.textContent;\n          var done = function () { b.textContent = 'Copied'; setTimeout(function () { b.textContent = label; }, 1800); };\n          if (navigator.clipboard) navigator.clipboard.writeText(txt).then(done, done); else done();\n        });\n      });\n      if (form) form.addEventListener('submit', function (e) {\n        if (form.getAttribute('data-handler') === 'none') { e.preventDefault(); if (status) status.hidden = false; }\n      });\n    },\n    \/* Home: business-area panels expand on hover\/focus\/click (content already in the HTML) *\/\n    home: function () {\n      var areas = $$('.cr-area'); if (!areas.length) return;\n      var open = function (a) { areas.forEach(function (x) { var on = x === a; x.classList.toggle('is-open', on); var b = $('.cr-area__toggle', x); if (b) b.setAttribute('aria-expanded', String(on)); }); };\n      areas.forEach(function (a) {\n        a.addEventListener('mouseenter', function () { open(a); });\n        a.addEventListener('focusin', function () { open(a); });\n        var b = $('.cr-area__toggle', a); if (b) b.addEventListener('click', function () { open(a); });\n      });\n    }\n  };\n\n  \/* ---------- 05 BOOT ---------- *\/\n  Object.keys(Global).forEach(function (k) { Global[k](); });\n  Object.keys(Sections).forEach(function (k) { Sections[k](); });\n  \/* data-page can sit on <body> or on any wrapper (e.g. <main> inside an Elementor HTML widget) *\/\n  var holder = document.querySelector('[data-page]');\n  var page = holder && holder.getAttribute('data-page');\n  if (page && Pages[page]) Pages[page]();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Crassula Facilities | WHO-GMP PQNS Manufacturing Home Facilities WHO-GMP manufacturing with PQNS capsule &amp; softgel lines Crassula\u2019s manufacturing site is a 20,000 m\u00b2 facility dedicated to prescription tablets and PQNS-enabled capsules and softgels. In-house QC\/QA laboratories, stability chambers and ISO 9001\/13485 quality systems support quality, reliability and global supply readiness, from formulation to finished pack. [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-11672","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/pages\/11672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/comments?post=11672"}],"version-history":[{"count":22,"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/pages\/11672\/revisions"}],"predecessor-version":[{"id":12089,"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/pages\/11672\/revisions\/12089"}],"wp:attachment":[{"href":"https:\/\/crassulapharma.com\/es\/wp-json\/wp\/v2\/media?parent=11672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}