{"version":3,"file":"XTShared.B49Mf8Mu.mjs","names":["React.useState","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","window","ce","init_jsx_runtime","c","_e","RenderTarget","init_framer_BL70qLPA","XTStyle","css","useAnimated","ok","setOk","once","w","key","install","afterPaint","id","fn","whenSized","last","stable","n","raf","done","tick","r","box","k","settle","run","inst","getInst","ids","ms","teardown","step","f","gc","hidden","others","cls","keep","e","__patch","__saved","P","watched","t","add","__recorders","type","l","o","cb","opt","__unpatch","track","rec","open","disposed","dispose","close","wait","until","XT_FONT_IMPORT","XT_BASE_CSS","XT_LOCKUP_CSS","init_XTShared"],"sources":["https:/framerusercontent.com/modules/dJPZ5VRbhPbRDwnU4bd6/SWSCRD2FKFAHO19Do92q/XTShared.js"],"sourcesContent":["// @ts-nocheck\n// XT shared runtime for the XT code components (redesign-r8). Generated from site/assets/xt.css (sections 1, 3, 6, 7, 8, 14, 23)\n// and site/assets/brand/lockup.css. Tokens are scoped to .xtcc so nothing leaks into legacy pages.\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";export const XT_FONT_IMPORT=`@import url(\"https://fonts.googleapis.com/css2?family=Fragment+Mono&family=Funnel+Sans:wght@300;400;500;600&display=swap\");`;export const XT_BASE_CSS=`.xtcc {\n  /* Ink and text */\n  --ink: #0c0a09;            /* display, primary text */\n  --ink-2: #292524;          /* ink pill, strong body, chart ink */\n  --body: #4e4e4e;           /* running text */\n  --muted: #716b64;          /* subtitles, labels (AA 4.5+ on canvas and --strong) */\n  --muted-soft: #a8a29e;     /* disabled, faint axis text */\n\n  /* Surfaces */\n  --canvas: #f5f5f4;         /* page floor (warm off-white) */\n  --canvas-soft: #fafaf9;    /* alternating band, figure wells */\n  --card: #ffffff;\n  --strong: #f0efed;         /* badges, quiet plates */\n  --dark: #0c0a09;           /* dark band (rare: max one per page) */\n  --dark-2: #1c1917;         /* panels on dark */\n  --dark-3: #292524;         /* raised rows on dark */\n  --on-dark: #fafaf9;\n  --on-dark-soft: #c9c4bf;   /* body on dark */\n  --on-dark-muted: #948e88;  /* labels on dark (AA on --dark, --dark-2, --dark-3) */\n\n  /* Hairlines */\n  --hair: #e7e5e4;\n  --hair-soft: #f0efed;\n  --hair-strong: #d6d3d1;\n  --hair-ink: #292524;       /* section-opening rule */\n  --hair-dark: rgba(250, 250, 249, .10);\n  --hair-dark-strong: rgba(250, 250, 249, .18);\n\n  /* Atmosphere: light only. Never on text, buttons or card fills. */\n  --mint: #a7e5d3;\n  --peach: #f4c5a8;\n  --lavender: #c8b8e0;\n  --sky: #a8c8e8;\n  --rose: #e8b8c4;\n  /* deeper stops for glow on the dark band */\n  --lavender-deep: #8d7bb8;\n  --sky-deep: #6f93bd;\n\n  /* Data ramps for product mocks (team tiles, heatmaps). Pastel, never rust. */\n  --ramp-0: #efedf5;\n  --ramp-1: #d9d0ea;\n  --ramp-2: #c3b4dd;\n  --ramp-3: #a6bfdf;\n  --ramp-4: #86a9d3;\n\n  /* Product-UI signal (inside mocks only, sparingly) */\n  --pos: #2f7a56;\n  --neg: #a4492a;\n\n  /* Type families (crux-labs.ai). One sans family does everything; mono is the small second voice. */\n  --display: \"XT Display\", \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;  /* headings, big numbers */\n  --sans: \"Funnel Sans\", system-ui, -apple-system, \"Segoe UI\", sans-serif;                    /* body, UI, buttons */\n  --mono: \"Fragment Mono\", ui-monospace, \"SFMono-Regular\", Menlo, monospace;                  /* eyebrows, labels, data captions */\n  --serif: var(--display);   /* DEPRECATED alias kept so older markup and visuals inherit the change. Not a serif. */\n\n  /* Type scale (size / line-height / tracking). Crux sizes: 64 hero, 55 section, 44, 32, 24, 20, 18, 16, 14, 12.\n     Fluid values hit the Crux desktop size at 1440px and the Crux mobile size at phone width. */\n  --fs-mega: clamp(40px, 4.45vw, 64px);     --lh-mega: 1.1;     --ls-mega: -0.04em;\n  --fs-mega-long: clamp(32px, 3.2vw, 46px); /* round 7: hero H1s too long for 2 lines at 64 (governance, research articles) */\n  --mega-measure: 22ch;                     /* round 7: hero H1 measure (1ch = .55em in Funnel Sans: 22ch = 12.1em) */\n  --mega-measure-long: 32ch;                /* round 7: measure for --fs-mega-long titles */\n  --fs-display: clamp(32px, 3.82vw, 55px);  --lh-display: 1.2;  --ls-display: -0.04em;\n  --fs-h2: clamp(28px, 3.06vw, 44px);       --lh-h2: 1.2;       --ls-h2: -0.04em;\n  --fs-h3: clamp(24px, 2.23vw, 32px);       --lh-h3: 1.2;       --ls-h3: -0.04em;\n  --fs-h4: 24px;                            --lh-h4: 1.3;       --ls-h4: -0.04em;\n  --fs-title: 20px;   /* Funnel Sans 500 */\n  --fs-lede: clamp(18px, 1.39vw, 20px);\n  --fs-body: 16px;\n  --fs-sm: 14px;\n  --fs-xs: 13px;\n  --fs-eyebrow: 12px; /* Fragment Mono caps */\n  --fs-mono: 12px;    /* Fragment Mono: labels, captions, data */\n  --lh-body: 1.4;     /* Crux 140% for running text */\n  --lh-snug: 1.3;     /* Crux 130% for titles, labels, buttons */\n  --ls-body: -0.04em; /* Crux tracks almost all sans text at -4% */\n  --ls-caps: 0em;     /* caps labels are set in mono, untracked */\n\n  /* Spacing. Crux rhythm: 8, 10, 12, 16, 24, 32, 40, 48, 64, 80, 112. */\n  --s-1: 4px;  --s-2: 8px;  --s-3: 12px; --s-4: 16px; --s-5: 20px;\n  --s-6: 24px; --s-7: 32px; --s-8: 40px; --s-9: 48px; --s-10: 64px;\n  --s-11: 80px; --s-12: 112px; --s-13: 128px;\n  --section: clamp(64px, 7.8vw, 112px);       /* vertical band padding: 112 at 1440, 64 on phones */\n  --section-tight: clamp(48px, 5.6vw, 80px);\n\n  /* Layout (Crux: 64px side padding at 1440, 40px under 1200, 16px under 810) */\n  --wrap: 1312px;\n  --gutter: 64px;\n  --nav-h: 64px;\n\n  /* Radii */\n  --r-xs: 4px; --r-sm: 6px; --r-md: 8px; --r-lg: 12px;\n  --r-xl: 16px; --r-xxl: 24px; --r-pill: 9999px;\n\n  /* Elevation: hairline + one soft tier, plus a float tier for product mocks */\n  --sh-1: 0 4px 16px rgba(12, 10, 9, .04);\n  --sh-2: 0 1px 2px rgba(12, 10, 9, .04), 0 12px 32px -12px rgba(41, 37, 36, .14);\n  --sh-float: 0 1px 0 rgba(255, 255, 255, .8) inset, 0 0 0 1px rgba(12, 10, 9, .04), 0 40px 80px -36px rgba(41, 37, 36, .30), 0 14px 28px -16px rgba(41, 37, 36, .10);\n  --sh-menu: 0 0 0 1px rgba(12, 10, 9, .05), 0 24px 56px -20px rgba(41, 37, 36, .22), 0 6px 16px -8px rgba(41, 37, 36, .08);\n\n  /* Motion */\n  --ease: cubic-bezier(.2, .7, .1, 1);\n  --ease-out: cubic-bezier(.16, 1, .3, 1);\n  --t-fast: .18s;\n  --t-med: .32s;\n\n  /* Grain (SVG fractal noise) */\n  --grain: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n' color-interpolation-filters='sRGB' x='0' y='0'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch' result='t'/><feColorMatrix in='t' values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 2.2 -1.08' result='d'/><feColorMatrix in='t' values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 -2.2 1.12' result='l'/><feMerge><feMergeNode in='d'/><feMergeNode in='l'/></feMerge></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>\");\n}\n   -------------------------------------------------------------------------- */\n/* Display and headings: Funnel Sans 400, -4% tracking, 110-130% leading (Crux).\n   .serif is kept as a class name for old markup; it now renders the display sans. */\n.t-mega, .t-display, .t-h2, .t-h3, .t-h4, .serif {\n  font-family: var(--display);\n  font-weight: 400;\n  color: var(--ink);\n  text-wrap: balance;\n}\n.serif { letter-spacing: var(--ls-body); }\n.t-mega    { font-size: var(--fs-mega);    line-height: var(--lh-mega);    letter-spacing: var(--ls-mega); }\n.t-display { font-size: var(--fs-display); line-height: var(--lh-display); letter-spacing: var(--ls-display); }\n.t-h2      { font-size: var(--fs-h2);      line-height: var(--lh-h2);      letter-spacing: var(--ls-h2); }\n.t-h3      { font-size: var(--fs-h3);      line-height: var(--lh-h3);      letter-spacing: var(--ls-h3); }\n.t-h4      { font-size: var(--fs-h4);      line-height: var(--lh-h4);      letter-spacing: var(--ls-h4); }\n/* No italics in this system (Funnel Sans has none). Emphasis in a heading drops to the muted ink. */\n.t-mega em, .t-display em, .t-h2 em, .t-h3 em, .t-h4 em { font-style: normal; color: var(--muted); }\n.band-dark :is(.t-mega, .t-display, .t-h2, .t-h3, .t-h4) em { color: var(--on-dark-muted); }\n.t-title   { font: 500 var(--fs-title)/var(--lh-snug) var(--sans); letter-spacing: var(--ls-body); color: var(--ink); }\n.lede      { font-size: var(--fs-lede); line-height: var(--lh-body); color: var(--body); text-wrap: pretty; max-width: 36em; }\n.body      { font-size: var(--fs-body); line-height: var(--lh-body); color: var(--body); text-wrap: pretty; }\n.small     { font-size: var(--fs-sm); line-height: var(--lh-body); color: var(--body); }\n.caption   { font-size: var(--fs-xs); line-height: var(--lh-body); color: var(--muted); }\n.ink { color: var(--ink); }\n.muted { color: var(--muted); }\n.measure { max-width: 36em; }\n.measure-narrow { max-width: 28em; }\n.nowrap { white-space: nowrap; }\n\n/* Eyebrow: Fragment Mono caps, 12px, untracked (Crux small-label voice). */\n.eyebrow {\n  display: inline-flex; align-items: center; gap: 10px;\n  font: 400 var(--fs-eyebrow)/var(--lh-snug) var(--mono);\n  letter-spacing: var(--ls-caps);\n  text-transform: uppercase;\n  color: var(--muted);\n}\n.eyebrow--dot::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #fff 0, var(--lavender) 45%, var(--sky) 100%); box-shadow: 0 0 0 1px rgba(12,10,9,.06); }\n.eyebrow--rule::before { content: \"\"; width: 24px; height: 1px; background: currentColor; opacity: .6; }\n\n/* Mono: eyebrows, small labels, fig captions, data labels in mocks */\n.mono { font-family: var(--mono); font-size: var(--fs-mono); letter-spacing: 0; }\n\n   -------------------------------------------------------------------------- */\n/* Crux button: small 4px-radius rectangle, Funnel Sans 14px caps at -4%. */\n.btn {\n  --btn-h: 40px;\n  display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n  height: var(--btn-h); padding: 0 20px;\n  border-radius: var(--r-xs); border: 1px solid transparent;\n  font: 400 14px/1 var(--sans); letter-spacing: var(--ls-body); text-transform: uppercase; white-space: nowrap;\n  transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease), transform var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);\n}\n.btn:active { transform: translateY(1px); }\n.btn--ink { background: var(--ink-2); color: #fff; box-shadow: 0 1px 0 rgba(255,255,255,.08) inset, 0 1px 2px rgba(12,10,9,.12); }\n.btn--ink:hover { background: var(--ink); }\n.btn--outline { background: var(--card); color: var(--ink); border-color: var(--hair); }\n.btn--outline:hover { border-color: var(--ink-2); background: var(--card); }\n.btn--sm { --btn-h: 36px; padding: 0 16px; font-size: 13px; }\n.btn--lg { --btn-h: 48px; padding: 0 24px; font-size: 14px; }\n.band-dark .btn--ink { background: var(--on-dark); color: var(--ink); }\n.band-dark .btn--ink:hover { background: #fff; }\n.band-dark .btn--outline { color: var(--on-dark); border-color: var(--hair-dark-strong); background: transparent; }\n.band-dark .btn--outline:hover { border-color: var(--on-dark); background: rgba(255,255,255,.04); }\n.btn-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n@media (max-width: 640px) {\n  .btn-row--stack { flex-direction: column; align-items: stretch; }\n  .btn-row--stack .btn { width: 100%; --btn-h: 50px; }\n}\n\n/* Text link with arrow */\n.link-arrow {\n  display: inline-flex; align-items: center; gap: 8px;\n  font: 400 16px/var(--lh-snug) var(--sans); letter-spacing: var(--ls-body); color: var(--ink);\n  padding-bottom: 3px;\n  background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat;\n  background-color: transparent;\n  transition: background-size var(--t-med) var(--ease);\n}\n.link-arrow::after {\n  content: \"\"; width: 14px; height: 10px; flex: none;\n  background: currentColor;\n  -webkit-mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'><path d='M0 5h12.5M8.5 1l4 4-4 4' fill='none' stroke='black' stroke-width='1.4'/></svg>\") center / contain no-repeat;\n          mask: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 10'><path d='M0 5h12.5M8.5 1l4 4-4 4' fill='none' stroke='black' stroke-width='1.4'/></svg>\") center / contain no-repeat;\n  transition: transform var(--t-med) var(--ease);\n}\n.link-arrow:hover::after { transform: translateX(3px); }\n.link-arrow:hover { background-size: 0% 1px; background-position: 100% 100%; }\n.link-arrow--quiet { color: var(--body); font-weight: 400; }\n.link-arrow--ext::after { transform: rotate(-45deg); }\n.link-arrow--ext:hover::after { transform: rotate(-45deg) translateX(3px); }\n\n/* Inline link inside prose */\n.link-inline { color: var(--ink); text-decoration: underline; text-decoration-color: var(--hair-strong); text-underline-offset: 3px; text-decoration-thickness: 1px; transition: text-decoration-color var(--t-fast); }\n.link-inline:hover { text-decoration-color: var(--ink); }\n.band-dark .link-inline { color: var(--on-dark); text-decoration-color: var(--hair-dark-strong); }\n\n   -------------------------------------------------------------------------- */\n.badge {\n  display: inline-flex; align-items: center; gap: 6px; min-height: 24px; padding: 5px 10px;\n  flex: none; width: max-content; max-width: none; box-sizing: border-box;\n  border-radius: var(--r-pill); background: var(--strong); color: var(--ink-2);\n  font: 400 11px/1 var(--mono); letter-spacing: 0; text-transform: uppercase; white-space: nowrap;\n}\n.badge--outline { background: transparent; box-shadow: inset 0 0 0 1px var(--hair-strong); }\n.badge__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }\n.badge--recommend .badge__dot { background: var(--sky-deep); }\n.badge--enforced .badge__dot { background: var(--lavender-deep); }\n.band-dark .badge, .ui--dark .badge { background: var(--dark-3); color: var(--on-dark-soft); }\n\n/* Round 5: the sample-data tag on product mocks is retired (founder feedback). Mocks show their\n   numbers without a tag; .tag-illus is kept only as a safety net so stray markup never renders. */\n.tag-illus { display: none !important; }\n\n   <div class=\"atmos\" aria-hidden=\"true\">\n     <span class=\"orb orb--peach\" style=\"--x:20%;--y:30%;--size:520px\"></span>\n   </div>\n   or a preset field: <div class=\"atmos atmos--hero\" aria-hidden=\"true\"></div>\n   -------------------------------------------------------------------------- */\n.atmos { position: absolute; inset: 0; pointer-events: none; z-index: -1; overflow: visible; }\n/* Any element holding an .atmos becomes its own layer so the light sits behind content, above the bg. */\n:where(:has(> .atmos)) { position: relative; isolation: isolate; }\n.atmos--clip { overflow: hidden; border-radius: inherit; }\n.atmos::after {\n  content: \"\"; position: absolute; inset: -10%; pointer-events: none;\n  background-image: var(--grain); opacity: .13; mix-blend-mode: soft-light;\n  -webkit-mask: radial-gradient(closest-side, #000 30%, transparent 74%);\n          mask: radial-gradient(closest-side, #000 30%, transparent 74%);\n}\n.atmos--clip::after { inset: 0; -webkit-mask: radial-gradient(120% 120% at 50% 50%, #000 40%, transparent 100%); mask: radial-gradient(120% 120% at 50% 50%, #000 40%, transparent 100%); opacity: .1; }\n.orb {\n  --size: 480px; --x: 50%; --y: 50%; --c: var(--lavender); --blur: 40px; --o: .9;\n  position: absolute; left: var(--x); top: var(--y);\n  width: var(--size); aspect-ratio: 1; translate: -50% -50%;\n  border-radius: 50%;\n  background: radial-gradient(closest-side, var(--c) 0%, color-mix(in oklab, var(--c) 55%, transparent) 45%, transparent 100%);\n  filter: blur(var(--blur)); opacity: var(--o);\n  animation: orb-drift 26s ease-in-out infinite alternate;\n}\n.orb:nth-child(2n) { animation-duration: 32s; animation-direction: alternate-reverse; }\n.orb:nth-child(3n) { animation-duration: 38s; }\n.orb--mint { --c: var(--mint); }\n.orb--peach { --c: var(--peach); }\n.orb--lavender { --c: var(--lavender); }\n.orb--sky { --c: var(--sky); }\n.orb--rose { --c: var(--rose); }\n@keyframes orb-drift {\n  0% { transform: translate(0, 0) scale(1); }\n  50% { transform: translate(2.5%, -2%) scale(1.04); }\n  100% { transform: translate(-2%, 2.5%) scale(.97); }\n}\n\n/* Preset: hero field. One large soft multi-stop field that bleeds past its box. */\n.atmos--hero::before {\n  content: \"\"; position: absolute; left: 50%; top: 50%; width: 130%; aspect-ratio: 1.15; translate: -50% -50%;\n  background:\n    radial-gradient(34% 32% at 32% 38%, var(--peach) 0%, transparent 100%),\n    radial-gradient(36% 34% at 66% 34%, var(--lavender) 0%, transparent 100%),\n    radial-gradient(34% 32% at 48% 70%, var(--mint) 0%, transparent 100%),\n    radial-gradient(28% 28% at 74% 66%, var(--sky) 0%, transparent 100%),\n    radial-gradient(44% 42% at 50% 50%, color-mix(in oklab, var(--rose) 70%, transparent) 0%, transparent 100%);\n  filter: blur(46px); opacity: .9;\n  -webkit-mask: radial-gradient(closest-side, #000 62%, transparent 100%);\n          mask: radial-gradient(closest-side, #000 62%, transparent 100%);\n  animation: field-drift 34s ease-in-out infinite alternate;\n}\n@keyframes field-drift {\n  0% { transform: rotate(0deg) scale(1); }\n  100% { transform: rotate(14deg) scale(1.06); }\n}\n/* Preset: card well. Two orbs, set per card by modifier. */\n.atmos--finops  { --o1: var(--peach); --o2: var(--rose); }\n.atmos--enable  { --o1: var(--mint);  --o2: var(--sky); }\n.atmos--govern  { --o1: var(--lavender); --o2: var(--sky); }\n.atmos--finops::before, .atmos--enable::before, .atmos--govern::before {\n  content: \"\"; position: absolute; inset: -30%;\n  background:\n    radial-gradient(38% 42% at 78% 22%, var(--o1) 0%, transparent 100%),\n    radial-gradient(34% 38% at 14% 86%, color-mix(in oklab, var(--o2) 80%, transparent) 0%, transparent 100%);\n  filter: blur(30px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .orb, .atmos--hero::before { animation: none; }\n}\n\n   <figure class=\"figure\"> ...mock... <figcaption class=\"fig-cap\"><span class=\"fig-cap__n\">Fig. 01</span><p>...</p></figcaption></figure>\n   Max one Fig. caption per major figure; never \"Fig. 2a\" style sub-labels.\n   -------------------------------------------------------------------------- */\n.figure { position: relative; }\n.figure__stage { position: relative; isolation: isolate; padding: clamp(28px, 5vw, 72px) clamp(16px, 4vw, 56px); }\n.figure__stage > .ui { position: relative; }\n.fig-cap { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--s-4); margin-top: var(--s-5); padding-top: var(--s-4); border-top: 1px solid var(--hair); max-width: 44em; }\n.fig-cap__n { font: 400 var(--fs-mono)/1.6 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; }\n.fig-cap p { font-size: var(--fs-sm); line-height: var(--lh-body); color: var(--muted); }\n.band-dark .fig-cap { border-top-color: var(--hair-dark); }\n.band-dark .fig-cap__n { color: var(--on-dark-soft); }\n.band-dark .fig-cap p { color: var(--on-dark-muted); }\n\n/* UI panel: product mock surface (white, r-lg, float shadow). */\n.ui {\n  background: rgba(255, 255, 255, .94);\n  -webkit-backdrop-filter: blur(16px) saturate(1.1); backdrop-filter: blur(16px) saturate(1.1);\n  border-radius: 14px; box-shadow: var(--sh-float);\n  font-family: var(--sans); letter-spacing: -0.02em; color: var(--ink-2); font-size: 13px; line-height: var(--lh-snug);\n  overflow: hidden;\n}\n.ui__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--hair); }\n.ui__title { font: 500 14px/1.2 var(--sans); letter-spacing: -0.03em; color: var(--ink); white-space: nowrap; }\n.ui__title > span:not(.xt-lockup) { font-weight: 400; color: var(--muted); }\n.ui__tabs { display: flex; gap: 20px; padding: 0 18px; border-bottom: 1px solid var(--hair); overflow: hidden; }\n.ui__tabs span { padding: 11px 0 10px; font: 400 13px/1 var(--sans); letter-spacing: -0.02em; color: var(--muted); white-space: nowrap; border-bottom: 1.5px solid transparent; margin-bottom: -1px; }\n.ui__tabs .is-on { color: var(--ink); border-bottom-color: var(--ink-2); }\n.ui__body { padding: 16px 18px; }\n.ui__section + .ui__section { border-top: 1px solid var(--hair); }\n.ui-label { font: 400 11px/1.3 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--muted); }\n.ui-kpis { display: grid; grid-template-columns: repeat(var(--kpi-cols, 3), minmax(0, 1fr)); border-bottom: 1px solid var(--hair); }\n.ui-kpi { padding: 14px 18px; }\n.ui-kpi + .ui-kpi { border-left: 1px solid var(--hair); }\n.ui-kpi__k { font: 400 12px/1.3 var(--sans); letter-spacing: -0.02em; color: var(--muted); }\n.ui-kpi__v { margin-top: 6px; font: 400 30px/1.1 var(--display); letter-spacing: -0.04em; color: var(--ink); font-variant-numeric: lining-nums tabular-nums; }\n.ui-kpi__d { margin-top: 6px; font: 400 11px/1.3 var(--mono); color: var(--muted); }\n.ui-kpi__d .up { color: var(--pos); } .ui-kpi__d .dn { color: var(--pos); } .ui-kpi__d .bad { color: var(--neg); }\n.ui-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }\n.ui-table th { white-space: nowrap; text-align: left; font: 400 11px/1.3 var(--mono); letter-spacing: 0; text-transform: uppercase; color: var(--muted); padding: 10px 18px 8px; border-bottom: 1px solid var(--hair); }\n.ui-table td { padding: 9px 18px; border-bottom: 1px solid var(--hair-soft); color: var(--ink-2); }\n.ui-table tr:last-child td { border-bottom: 0; }\n.ui-table .num { text-align: right; font-family: var(--mono); font-size: 12px; letter-spacing: 0; font-variant-numeric: tabular-nums; }\n.ui-bar { height: 4px; border-radius: 2px; background: var(--hair-soft); overflow: hidden; min-width: 60px; }\n.ui-bar > b { display: block; height: 100%; background: var(--ink-2); border-radius: 2px; }\n.ui-foot { display: flex; justify-content: space-between; align-items: center; padding: 10px 18px; border-top: 1px solid var(--hair); }\n/* Dark console variant (inside .band-dark) */\n.ui--dark { background: color-mix(in oklab, var(--dark-2) 88%, transparent); color: var(--on-dark-soft); box-shadow: 0 0 0 1px var(--hair-dark), 0 40px 80px -30px rgba(0,0,0,.6); }\n.ui--dark .ui__head, .ui--dark .ui__tabs, .ui--dark .ui-kpis, .ui--dark .ui-foot, .ui--dark .ui__section + .ui__section, .ui--dark .ui-table th { border-color: var(--hair-dark); }\n.ui--dark .ui-table td { border-color: rgba(250,250,249,.06); color: var(--on-dark-soft); }\n.ui--dark .ui__title, .ui--dark .ui-kpi__v, .ui--dark .ui__tabs .is-on { color: var(--on-dark); }\n.ui--dark .ui__tabs .is-on { border-bottom-color: var(--on-dark); }\n.ui--dark .ui-label, .ui--dark .ui-kpi__k, .ui--dark .ui-kpi__d, .ui--dark .ui__tabs span { color: var(--on-dark-muted); }\n.ui--dark .ui-kpi + .ui-kpi { border-color: var(--hair-dark); }\n.ui--dark .ui__title > span:not(.xt-lockup) { color: var(--on-dark-muted); }\n.ui--dark .ui-bar { background: var(--dark-3); } .ui--dark .ui-bar > b { background: var(--lavender); }\n@media (max-width: 640px) {\n  .ui-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .ui-kpi:nth-child(3) { grid-column: 1 / -1; border-left: 0; border-top: 1px solid var(--hair); }\n  .ui-kpi { padding: 12px 14px; }\n  .ui__head { flex-wrap: wrap; row-gap: 8px; }\n  .ui__title { white-space: normal; }\n  .ui-hide-sm { display: none !important; }\n  .ui__head, .ui__body, .ui-foot { padding-inline: 14px; }\n  .ui__tabs { padding-inline: 14px; gap: 16px; }\n  .ui-table th, .ui-table td { padding-inline: 14px; }\n  .figure__stage { padding-inline: 0; }\n}\n\n/* Team tiles (team-level only; never individuals). Pastel ramp. */\n.tiles { display: grid; grid-template-columns: repeat(var(--tile-cols, 12), minmax(0, 1fr)); gap: 6px; }\n.tile { aspect-ratio: 1; border-radius: 5px; background: var(--dark-3); box-shadow: inset 0 0 0 1px rgba(250,250,249,.04); transition: background .5s var(--ease), box-shadow .5s var(--ease); }\n.tile.is-on { background: linear-gradient(140deg, var(--lavender), var(--sky)); box-shadow: inset 0 0 0 1px rgba(255,255,255,.25), 0 0 14px -2px color-mix(in oklab, var(--lavender) 60%, transparent); }\n.tile.is-on:nth-child(3n) { background: linear-gradient(140deg, var(--mint), var(--sky)); }\n.tile.is-on:nth-child(5n) { background: linear-gradient(140deg, var(--rose), var(--lavender)); }\n/* :not(.is-on) so lit tiles keep their pastel on light backgrounds (was overriding .tile.is-on) */\n.tiles--light .tile:not(.is-on) { background: var(--strong); box-shadow: inset 0 0 0 1px var(--hair); }\n\n/* Note: key product statements (e.g. \"what runs where\"). Body-small, normal contrast. */\n.note { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 9fr); column-gap: var(--s-7); row-gap: var(--s-2); padding-top: var(--s-5); border-top: 1px solid var(--hair); }\n.note__label { font: 400 var(--fs-mono)/1.6 var(--mono); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--muted); }\n.note p:not(.note__label) { font-size: var(--fs-body); line-height: var(--lh-body); color: var(--body); max-width: 44em; }\n.band-dark .note { border-top-color: var(--hair-dark); }\n.band-dark .note__label { color: var(--on-dark-muted); }\n.band-dark .note p:not(.note__label) { color: var(--on-dark-soft); }\n@media (max-width: 860px) { .note { grid-template-columns: minmax(0, 1fr); } }\n\n   <span class=\"icon-tile\"><svg class=\"xi xi-wallet\" viewBox=\"0 0 24 24\" …>…</svg></span>\n   - Glyphs live in assets/icons/ (paste inline); assets/icons.css sizes and colors\n     .xi glyphs. The rules here style ANY inline <svg> in the tile, so the tile\n     works with or without icons.css.\n   - Decorative: aria-hidden on the svg, the adjacent heading carries the meaning.\n   - Use in a few scannable lists only (steps, capability lists, problem cards).\n   Sizes: default 40px tile / 20px glyph \\xb7 --sm 32 / 16 \\xb7 --lg 48 / 24.\n   Placement helpers: .icon-tile--above (tile above a title, 24px gap, as on Crux);\n   inside ol.steps it replaces .steps__n; ul.features--icons gives it its own column.\n   -------------------------------------------------------------------------- */\n.icon-tile {\n  --tile: 40px; --glyph: 20px;\n  --xi-color: color-mix(in oklab, var(--ink) 70%, transparent);   /* read by assets/icons.css */\n  display: inline-grid; place-items: center; flex: none;\n  width: var(--tile); height: var(--tile);\n  border-radius: var(--r-sm);\n  background: var(--hair);\n  color: color-mix(in oklab, var(--ink) 70%, transparent);\n  vertical-align: middle;\n}\n.icon-tile :where(svg) {\n  display: block; width: var(--glyph); height: var(--glyph);\n  fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;\n  overflow: visible;\n}\n/* doubled class so the tile's glyph size beats the 20px default in icons.css (loaded later) */\n.icon-tile.icon-tile > .xi { --xi-size: var(--glyph); }\n.icon-tile--sm { --tile: 32px; --glyph: 16px; border-radius: var(--r-xs); }\n.icon-tile--lg { --tile: 48px; --glyph: 24px; border-radius: var(--r-md); }\n.icon-tile--above { display: grid; margin-bottom: var(--s-6); }\n/* On white cards the tile reads a touch lighter; on the dark band it inverts. */\n.card .icon-tile, .ui .icon-tile { background: var(--strong); }\n.band-dark .icon-tile, .ui--dark .icon-tile {\n  --xi-color: color-mix(in oklab, var(--on-dark) 75%, transparent);\n  background: var(--dark-3); color: color-mix(in oklab, var(--on-dark) 75%, transparent);\n}\n\n/* Inline icon: sits on the text baseline at the text's size, e.g. in a label row.\n   <span class=\"icon-inline\"><svg …>…</svg></span> Budgets */\n.icon-inline {\n  display: inline-flex; align-items: center; justify-content: center; flex: none;\n  width: 1.15em; height: 1.15em; vertical-align: -0.2em; margin-right: .35em;\n  color: color-mix(in oklab, currentColor 70%, transparent);\n  --xi-color: currentColor;\n}\n.icon-inline :where(svg) {\n  display: block; width: 100%; height: 100%;\n  fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;\n}\n.icon-inline > .xi { --xi-size: 100%; }\n@media (forced-colors: active) { .icon-tile { border: 1px solid CanvasText; } }\n`;export const XT_LOCKUP_CSS=`\n.xtcc .xt-lockup{--lk-mark:28px;--lk-word-color:#000;display:inline-flex;align-items:center;height:var(--lk-mark);color:var(--lk-word-color);text-decoration:none;white-space:nowrap;vertical-align:middle}\n.xtcc .xt-lockup__mark{flex:none;width:var(--lk-mark);height:var(--lk-mark);background:currentColor;-webkit-mask:url(\"https://framerusercontent.com/images/6cPoeSyVUGbuAMJLQFtl23kClgo.svg\") center/100% 100% no-repeat;mask:url(\"https://framerusercontent.com/images/6cPoeSyVUGbuAMJLQFtl23kClgo.svg\") center/100% 100% no-repeat}\n.xtcc .xt-lockup__word{display:block;flex:none;margin-left:calc(var(--lk-mark)*0.309);width:calc(var(--lk-mark)*2.9926);height:var(--lk-mark);font-size:0;color:transparent;background:var(--lk-word-color);-webkit-mask:url(\"https://framerusercontent.com/images/nZKtzTHxCnMLC6CrQhk5HLD34.svg\") right center/auto 100% no-repeat;mask:url(\"https://framerusercontent.com/images/nZKtzTHxCnMLC6CrQhk5HLD34.svg\") right center/auto 100% no-repeat}\n.xtcc .xt-lockup--ui{--lk-mark:1.15em;vertical-align:-0.28em}\n.xtcc .ui--dark .xt-lockup--ui,.xtcc [data-theme=\"dark\"] .xt-lockup--ui,.xtcc.xt-dark .xt-lockup--ui{--lk-word-color:currentColor}\n`;/** Inline <style> so the server HTML is styled before hydration (no flash, no layout shift). */export function XTStyle({css}){return /*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:css}});}/** True on the published site and in Preview; false on the canvas, in thumbnails and exports. */export function useAnimated(){const[ok,setOk]=React.useState(false);React.useEffect(()=>{setOk(RenderTarget.current()===RenderTarget.preview);},[]);return ok;}/** Run once per page: installs the original (verbatim) runtime script. */export function once(key,install){if(typeof window===\"undefined\")return;const w=window;w.__xtInstalled=w.__xtInstalled||{};if(w.__xtInstalled[key])return;w.__xtInstalled[key]=true;install();}/** Start client work after first paint (idle), return a cancel function. */export function afterPaint(fn){const w=window;if(w.requestIdleCallback){const id=w.requestIdleCallback(fn,{timeout:600});return()=>w.cancelIdleCallback(id);}const id=setTimeout(fn,0);return()=>clearTimeout(id);}/** Calls fn once the box has a stable, non-zero size (layout settled), or after ~1s at the latest. */export function whenSized(box,fn){let last=\"\",stable=0,n=0,raf=0,done=false;const tick=()=>{const r=box.getBoundingClientRect();const k=Math.round(r.width)+\"x\"+Math.round(r.height);if(r.width>0&&r.height>0&&k===last)stable++;else stable=0;last=k;n++;if(stable>=3||n>60){done=true;fn();return;}raf=requestAnimationFrame(tick);};raf=requestAnimationFrame(tick);return()=>{if(!done)cancelAnimationFrame(raf);};}/** Re-measure and redraw an instance a few times after mount (sizes settle after fonts and layout). */export function settle(getInst){const run=()=>{const inst=getInst();if(!inst)return;try{if(typeof inst.layout===\"function\")inst.layout();if(typeof inst.resize===\"function\")inst.resize();if(inst.still&&typeof inst.drawStill===\"function\")inst.drawStill();else if(typeof inst.draw===\"function\"&&!inst.running)inst.draw();if(typeof inst.frame===\"function\"&&typeof inst.T===\"number\")inst.frame(inst.T);}catch(e){}};const ids=[60,400,1200,2500].map(ms=>setTimeout(run,ms));window.addEventListener(\"load\",run);return()=>{ids.forEach(clearTimeout);window.removeEventListener(\"load\",run);};}/** Stop an instance created by one of the original scripts: loops, observers, timers, canvas memory. Each step is\n *  guarded on its own (some instances expose read-only getters such as `still`). */export function teardown(inst){if(!inst||typeof inst!==\"object\")return;const step=f=>{try{f();}catch(e){}};step(()=>{inst.visible=false;});step(()=>{inst.running=false;});step(()=>{inst.still=true;});step(()=>{if(inst.raf)cancelAnimationFrame(inst.raf);});step(()=>{if(inst.loopTimer)clearTimeout(inst.loopTimer);});step(()=>{if(inst.io&&inst.io.disconnect)inst.io.disconnect();});step(()=>{if(inst.ro&&inst.ro.disconnect)inst.ro.disconnect();});step(()=>{if(typeof inst.pause===\"function\")inst.pause();});step(()=>{if(inst.canvas){inst.canvas.width=0;inst.canvas.height=0;}});step(()=>{const gc=window.GConstellation;if(gc&&gc.instances&&gc.instances.delete)gc.instances.delete(inst);});}/** Runs fn with every other element of class `cls` (except `keep`) briefly unclassed, so a script's page-wide\n *  auto-init only ever picks up the instance being mounted. Synchronous: nothing is painted in between. */export function hidden(cls,keep,fn){const others=Array.from(document.getElementsByClassName(cls)).filter(e=>e!==keep);others.forEach(e=>e.classList.remove(cls));try{fn();}finally{others.forEach(e=>e.classList.add(cls));}}// Listener / observer recording for one instance (window, document, <html> and media-query listeners, plus\n// ResizeObserver and IntersectionObserver), so unmount removes what the original scripts never remove.\nconst __recorders=new Set;let __saved=null;function __patch(){if(__saved)return;const w=window,P=EventTarget.prototype;__saved={add:P.addEventListener,RO:w.ResizeObserver,IO:w.IntersectionObserver};const watched=t=>t===window||t===document||t===document.documentElement||typeof MediaQueryList!==\"undefined\"&&t instanceof MediaQueryList;const add=__saved.add;P.addEventListener=function(type,l,o){if(watched(this))__recorders.forEach(r=>r.push([\"l\",this,type,l,o]));return add.call(this,type,l,o);};if(__saved.RO)w.ResizeObserver=class extends __saved.RO{constructor(cb){super(cb);__recorders.forEach(r=>r.push([\"o\",this]));}};if(__saved.IO)w.IntersectionObserver=class extends __saved.IO{constructor(cb,opt){super(cb,opt);__recorders.forEach(r=>r.push([\"o\",this]));}};}function __unpatch(){if(!__saved||__recorders.size)return;const w=window;EventTarget.prototype.addEventListener=__saved.add;if(__saved.RO)w.ResizeObserver=__saved.RO;if(__saved.IO)w.IntersectionObserver=__saved.IO;__saved=null;}/** Records what fn (and, when given, the work until `until()` settles) registers; returns a disposer that removes it. */export function track(fn,until){const rec=[];let open=true,disposed=false;const dispose=()=>{disposed=true;rec.splice(0).forEach(r=>{try{if(r[0]===\"l\")r[1].removeEventListener(r[2],r[3],r[4]);else r[1].disconnect();}catch(e){}});};const close=()=>{if(!open)return;open=false;__recorders.delete(rec);__unpatch();if(disposed)dispose();};__recorders.add(rec);__patch();let wait;try{fn();wait=until?until():undefined;}finally{if(!wait)close();}if(wait)wait.then(close,close);return()=>{dispose();close();};}\nexport const __FramerMetadata__ = {\"exports\":{\"hidden\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"settle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"whenSized\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"track\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_FONT_IMPORT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_LOCKUP_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"teardown\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"afterPaint\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XT_BASE_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"once\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAnimated\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"XTStyle\":{\"type\":\"reactComponent\",\"name\":\"XTStyle\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./XTShared.map"],"mappings":"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"}