{"version":3,"file":"tokens-B2lsJTLu.cjs","names":[],"sources":["../src/tokens/surfaceScopes.ts","../src/tokens/attackPath.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts","../src/tokens/shadows.ts","../src/tokens/zIndex.ts","../src/tokens/sizes.ts","../src/tokens/index.ts"],"sourcesContent":["/**\n * Surface scopes — the ladder expressed as CSS custom properties.\n *\n * ## Why custom properties rather than the theme\n *\n * A component's correct background depends on *where it is*, and that is\n * information the theme does not have. `theme.palette.background.paper` is one\n * value for the whole tree, so a card and a card-inside-a-dialog resolve\n * identically. Threading a rung down through props would mean every component\n * between the surface and the leaf has to forward it.\n *\n * CSS custom properties already solve exactly this problem: they inherit through\n * the DOM, so a component can read `var(--ds-bg)` and get whatever its nearest\n * scoped ancestor set, without knowing who that ancestor is.\n *\n * MUI's own `cssVariables: true` is not an alternative here. It exists to switch\n * a palette along *one* axis — the colour scheme — and emits one variable per\n * palette slot under a `[data-mui-color-scheme]` selector. The ladder is a\n * second, orthogonal axis: nesting depth, which varies per subtree rather than\n * per document. The two compose fine, but only DOM inheritance handles the\n * second one.\n *\n * ## Both modes share the structural rules\n *\n * Dark and light both have six named rungs. Elevation still means lighter. A\n * field still recesses one rung below its host; `page` is still the floor\n * exception (transparent fill, outline carries the affordance). Light has only\n * ~8 L* of headroom above `#E9E9E9`, so `raised` and `overlay` share white and\n * separate by shadow + border weight — Tokens Option A Light.\n */\n\nimport {\n  SURFACE_LADDER,\n  type SurfaceRung,\n  backgroundColors,\n  borderByRung,\n  brandTintByRung,\n  inputColors,\n  lightBackgroundColors,\n  lightInputColors,\n  lightTextColors,\n  outlineByRung,\n  separatorByRung,\n  tableHeaderByRung,\n  textColors,\n} from './colors';\n\n/**\n * The custom properties a scope sets. Components read these rather than reading\n * tokens directly, which is what makes them context-sensitive.\n */\nexport const DS_VARS = {\n  /** The surface's own background. */\n  bg: '--ds-bg',\n  /** Fill for an input hosted on this surface: one rung *down*, so it reads inset. */\n  field: '--ds-field',\n  /** Outline for that input. Carries the work on `page`, where there is no rung below. */\n  fieldBorder: '--ds-field-border',\n  /** Body text on this surface. */\n  text: '--ds-text',\n  /** De-emphasised text. Switches tier partway up the ladder — see `textQuiet`. */\n  textQuiet: '--ds-text-quiet',\n  /** Border/divider legible against this rung. */\n  border: '--ds-border',\n  /**\n   * Row separator (~1.12:1). Lighter than `--ds-border` so table outlines stay\n   * the heavier structural edge. A filled header has no underline.\n   */\n  separator: '--ds-separator',\n  /** Hover state fill. */\n  hover: '--ds-hover',\n  /** Selected state fill — a resolved brand tint, not an alpha. */\n  selected: '--ds-selected',\n  /** The rung a DOM-nested child surface should take. Clamped at the ceiling. */\n  child: '--ds-child',\n  /**\n   * Fill for a *control* that has to read against a container at its own level:\n   * host + 2, clamped at the ceiling.\n   *\n   * Two rungs, not one, and the reason is that `child` is already taken by\n   * containers. A switch track or an avatar sitting at +1 is the same colour as\n   * a card on the same surface, so it reads as a panel rather than as something\n   * you operate. +2 is the first step that distinguishes a control from a\n   * container.\n   */\n  control: '--ds-control',\n  /** The rung a *portalled* child should take: max(raised, host + 1). */\n  raised: '--ds-raised',\n  /**\n   * Table header and row hover, derived from the host rung rather than named\n   * as their own palette entries.\n   *\n   * Body rows read `--ds-bg`. Header is a ~1.08:1 fill that moves *away* from\n   * elevation (lighter in dark, darker in light) so it reads recessed. Hover is\n   * host + 2, stepping *down* at the ceiling so a nested table does not lose\n   * feedback when `--ds-control` saturates.\n   */\n  tableHeader: '--ds-table-header',\n  /**\n   * Ink on a *filled* table header. The fill eats the margin `subtle` was tuned\n   * for, so filled headers step up a tier (`tertiary` in dark, with `secondary`\n   * at the overlay ceiling). Unfilled headers keep `--ds-text-quiet`.\n   *\n   * Named `--ds-table-header-ink`, not `--ds-table-header-label`: Emotion's\n   * class-name generator extracts `/label:\\s*([^\\s;{]+)/` from serialized CSS,\n   * so a custom property whose name ends in `-label` (e.g. `--foo-label:#A3A3A3`)\n   * injects the hex into the generated class name. The `#` is then parsed as an\n   * ID selector, the rule never matches, and Menu/Popover lose `position:\n   * absolute`. See the `DS_VARS` guard in `surfaceScopes.test.ts`.\n   */\n  tableHeaderLabel: '--ds-table-header-ink',\n  tableRowHover: '--ds-table-row-hover',\n} as const;\n\nexport interface SurfaceScope {\n  bg: string;\n  field: string;\n  fieldBorder: string;\n  text: string;\n  textQuiet: string;\n  border: string;\n  separator: string;\n  hover: string;\n  selected: string;\n  child: string;\n  control: string;\n  raised: string;\n  tableHeader: string;\n  tableHeaderLabel: string;\n  tableRowHover: string;\n}\n\n/**\n * Header and hover for a table mounted on `rung`. Body rows are the host fill\n * (`--ds-bg`).\n *\n * The header fill is ~1.08:1 against the host and moves *away* from the\n * elevation direction (lighter in dark, darker in light) so it reads as\n * recessed. A filled header is the edge — it does not also take a bottom rule\n * (sticky headers are the exception; they borrow `--ds-separator`).\n *\n * Hover is host + 2. At the ceiling `nextRung` saturates, so hover would equal\n * the row and a nested table would silently lose its feedback. Losing hover is\n * an interaction regression rather than a cosmetic one, so when the ladder\n * runs out the band steps *down* instead.\n */\nfunction tableBands(rung: SurfaceRung) {\n  const row = backgroundColors[rung];\n  const down = backgroundColors[previousRung(rung)];\n  const hoverUp = backgroundColors[nextRung(nextRung(rung))];\n  const saturated = hoverUp === row;\n  return {\n    tableHeader: tableHeaderByRung[rung],\n    // Filled-header labels: tertiary clears 4.5:1 on every rung except overlay,\n    // which needs secondary.\n    tableHeaderLabel: rung === 'overlay' ? textColors.secondary : textColors.tertiary,\n    tableRowHover: saturated ? down : hoverUp,\n  };\n}\n\n/** Next rung up, saturating at the top. */\nexport function nextRung(rung: SurfaceRung): SurfaceRung {\n  const i = SURFACE_LADDER.indexOf(rung);\n  return SURFACE_LADDER[Math.min(i + 1, SURFACE_LADDER.length - 1)];\n}\n\n/** Previous rung down, saturating at the bottom. */\nexport function previousRung(rung: SurfaceRung): SurfaceRung {\n  const i = SURFACE_LADDER.indexOf(rung);\n  return SURFACE_LADDER[Math.max(i - 1, 0)];\n}\n\n/**\n * The rung a portalled element should use: `max(raised, host + 1)`.\n *\n * A portalled element is reparented to `document.body`, so it cannot inherit a\n * rung through the DOM. `raised` is the floor because a tooltip over the app\n * shell still has to read as floating; `host + 1` takes over once the host is\n * already high enough that `raised` would not clear it.\n */\nexport function portalRung(host: SurfaceRung): SurfaceRung {\n  const floor = SURFACE_LADDER.indexOf('raised');\n  const above = SURFACE_LADDER.indexOf(nextRung(host));\n  return SURFACE_LADDER[Math.max(floor, above)];\n}\n\n/**\n * Quiet text expires partway up the ladder.\n *\n * `text.subtle` clears 4.5:1 on `page`, `primary` and `widget` and drops to\n * 4.25:1 on `surface`. Rather than leaving that as a rule people have to\n * remember, the scope swaps the tier — a component that reads\n * `var(--ds-text-quiet)` gets a compliant colour wherever it is mounted.\n * Pinned by `textRamp.contrast.test.ts`.\n */\nfunction quietText(rung: SurfaceRung): string {\n  const subtleHolds: readonly SurfaceRung[] = ['page', 'primary', 'widget'];\n  return subtleHolds.includes(rung) ? textColors.subtle : textColors.tertiary;\n}\n\nfunction darkScope(rung: SurfaceRung): SurfaceScope {\n  const onPage = rung === 'page';\n  return {\n    bg: backgroundColors[rung],\n    // A field recesses one rung below its host. On `page` there is nothing\n    // below, so it goes transparent and the outline does the work instead.\n    field: onPage ? 'transparent' : backgroundColors[previousRung(rung)],\n    // On `page` the outline is the only thing marking the field out, so it takes\n    // the heavier weight; elsewhere the recessed fill already reads.\n    fieldBorder: onPage ? outlineByRung[rung] : inputColors.border,\n    text: textColors.primary,\n    textQuiet: quietText(rung),\n    border: borderByRung[rung],\n    separator: separatorByRung[rung],\n    hover: 'rgba(255, 255, 255, 0.06)',\n    selected: brandTintByRung[rung],\n    child: backgroundColors[nextRung(rung)],\n    control: backgroundColors[nextRung(nextRung(rung))],\n    raised: backgroundColors[portalRung(rung)],\n    ...tableBands(rung),\n  };\n}\n\n/**\n * Light field fill for a host rung — Tokens Option A Light §03.\n *\n * Strict host−1 through `surface`. `raised` and `overlay` share a white host,\n * so they share one recessed fill (`primary`) rather than almost-white steps\n * that would not read.\n */\nfunction lightField(rung: SurfaceRung): string {\n  if (rung === 'page') return 'transparent';\n  if (rung === 'raised' || rung === 'overlay') return lightBackgroundColors.primary;\n  return lightBackgroundColors[previousRung(rung)];\n}\n\nfunction lightTableHeader(rung: SurfaceRung): string {\n  // Recessed means darker in both themes. On `page` there is nothing below, so\n  // step under the ladder; at the white ceiling reuse the primary recess.\n  if (rung === 'page') return '#E2E2E2';\n  if (rung === 'raised' || rung === 'overlay') return lightBackgroundColors.primary;\n  return lightBackgroundColors[previousRung(rung)];\n}\n\nfunction lightControl(rung: SurfaceRung): string {\n  // Dark lifts a control +2; light has no headroom above white, so a control\n  // steps *down* two rungs into a recessed grey instead.\n  const stepped = lightBackgroundColors[previousRung(previousRung(rung))];\n  if (stepped !== lightBackgroundColors[rung]) return stepped;\n  return '#E2E2E2';\n}\n\nfunction lightScope(rung: SurfaceRung): SurfaceScope {\n  return {\n    bg: lightBackgroundColors[rung],\n    field: lightField(rung),\n    // Floor exception text and the default hairline are both `#D4D4D4`.\n    fieldBorder: lightInputColors.border,\n    text: lightTextColors.primary,\n    // `subtle` clears AA from `primary` up; on `page` (#E9E9E9) it drops to\n    // ~4.2:1, so swap to `tertiary` for the same reason dark swaps at `surface`.\n    textQuiet: rung === 'page' ? lightTextColors.tertiary : lightTextColors.subtle,\n    // `raised` uses the subtler ring; overlay keeps the default hairline.\n    border: rung === 'raised' ? lightBackgroundColors.borderSubtle : lightBackgroundColors.border,\n    separator: rung === 'page' ? '#DCDCDC' : lightBackgroundColors.tableDivider,\n    hover: 'rgba(0, 0, 0, 0.04)',\n    selected: 'rgba(0, 137, 123, 0.10)',\n    child: lightBackgroundColors[nextRung(rung)],\n    control: lightControl(rung),\n    raised: lightBackgroundColors[portalRung(rung)],\n    tableHeader: lightTableHeader(rung),\n    tableHeaderLabel: lightTextColors.tertiary,\n    // Hover/selected rows go to white — the only step left that clears zebra.\n    tableRowHover: '#FFFFFF',\n  };\n}\n\nfunction buildScopes(build: (rung: SurfaceRung) => SurfaceScope) {\n  return Object.fromEntries(SURFACE_LADDER.map((rung) => [rung, build(rung)])) as Record<\n    SurfaceRung,\n    SurfaceScope\n  >;\n}\n\nexport const surfaceScopes = {\n  dark: buildScopes(darkScope),\n  light: buildScopes(lightScope),\n} as const satisfies Record<'dark' | 'light', Record<SurfaceRung, SurfaceScope>>;\n\n/** Turn a scope into the custom-property declarations for a style object. */\nexport function scopeToCssVars(scope: SurfaceScope): Record<string, string> {\n  return {\n    [DS_VARS.bg]: scope.bg,\n    [DS_VARS.field]: scope.field,\n    [DS_VARS.fieldBorder]: scope.fieldBorder,\n    [DS_VARS.text]: scope.text,\n    [DS_VARS.textQuiet]: scope.textQuiet,\n    [DS_VARS.border]: scope.border,\n    [DS_VARS.separator]: scope.separator,\n    [DS_VARS.hover]: scope.hover,\n    [DS_VARS.selected]: scope.selected,\n    [DS_VARS.child]: scope.child,\n    [DS_VARS.control]: scope.control,\n    [DS_VARS.raised]: scope.raised,\n    [DS_VARS.tableHeader]: scope.tableHeader,\n    [DS_VARS.tableHeaderLabel]: scope.tableHeaderLabel,\n    [DS_VARS.tableRowHover]: scope.tableRowHover,\n  };\n}\n\n/**\n * `var(--ds-x, fallback)`, so a component works even when it is rendered outside\n * any scope — a bare `<Chip />` in a test, or a portalled element that escaped\n * its scope. Without a fallback those render with no background at all.\n */\nexport function dsVar(name: keyof typeof DS_VARS, fallback: string): string {\n  return `var(${DS_VARS[name]}, ${fallback})`;\n}\n","/**\n * Attack Path tokens.\n *\n * Source: Figma \"Attack Path Background\" group.\n * https://www.figma.com/design/LJdrBxmaROpXg0hLW3GKe6/AiStrike-Complete-Design-System?node-id=23-476\n *\n * Each attack-path node type has a stroke (border / accent) and a filled\n * (background) color. These power the AttackPathLegend organism and any\n * graph/diagram visuals.\n */\n\nexport interface AttackPathNodeColor {\n  /** Human-readable label for legends. */\n  label: string;\n  /** Stroke / border / accent color. */\n  stroke: string;\n  /** Fill / background color. */\n  fill: string;\n}\n\nexport const attackPathNodes = {\n  impacted: { label: 'Impacted', stroke: '#BA1358', fill: '#BA1358' },\n  host: { label: 'Host', stroke: '#36C5F0', fill: '#103B48' },\n  role: { label: 'Role', stroke: '#C8511B', fill: '#4E2A1A' },\n  policy: { label: 'Policy', stroke: '#3F8624', fill: '#26351F' },\n  action: { label: 'Action', stroke: '#D3D3D3', fill: '#363636' },\n  resource: { label: 'Resource', stroke: '#12264D', fill: '#3D7FFF' },\n} as const satisfies Record<string, AttackPathNodeColor>;\n\nexport type AttackPathNodeType = keyof typeof attackPathNodes;\n\n/** Ordered list for rendering legends consistently. */\nexport const attackPathOrder: AttackPathNodeType[] = [\n  'impacted',\n  'host',\n  'role',\n  'policy',\n  'action',\n  'resource',\n];\n\nexport const attackPath = {\n  nodes: attackPathNodes,\n  order: attackPathOrder,\n} as const;\n","/**\n * Spacing tokens.\n *\n * Based on an 8px base unit (MUI default), with a 4px half-step that matches\n * the dense paddings seen in the Figma swatches and table rows.\n */\n\n/** MUI spacing factor base (in px). `theme.spacing(1) = 8px`. */\nexport const spacingUnit = 8;\n\n/** Named spacing scale in pixels. */\nexport const spacing = {\n  none: 0,\n  xxs: 2,\n  xs: 4,\n  sm: 8,\n  md: 16,\n  lg: 24,\n  xl: 32,\n  xxl: 48,\n  xxxl: 64,\n} as const;\n\nexport type SpacingToken = keyof typeof spacing;\n\n/**\n * What each rung of the scale is for.\n *\n * The counterpart to `backgroundUsage`: it keeps the \"which token do I reach\n * for\" answer next to the values themselves, so the agent kit's tokens\n * reference and the Storybook page generate from one source instead of\n * restating a table that then drifts.\n */\nexport const spacingUsage = {\n  none: { px: spacing.none, useFor: 'Collapse spacing explicitly.' },\n  xxs: { px: spacing.xxs, useFor: 'Micro optical adjustments.' },\n  xs: { px: spacing.xs, useFor: 'Icon-to-text gap, compact chip or badge padding.' },\n  sm: { px: spacing.sm, useFor: 'Default element gap, small component padding.' },\n  md: { px: spacing.md, useFor: 'Card padding, section gaps, form field spacing.' },\n  lg: { px: spacing.lg, useFor: 'Group separation, card body padding.' },\n  xl: { px: spacing.xl, useFor: 'Major section breaks, page-level gutters.' },\n  xxl: { px: spacing.xxl, useFor: 'Page margins, hero spacing.' },\n  xxxl: { px: spacing.xxxl, useFor: 'Large layout gaps, top-of-page offset.' },\n} as const satisfies Record<SpacingToken, { px: number; useFor: string }>;\n","/**\n * Border radius tokens.\n *\n * Base radius of 4px matches the Figma swatch / control corner radius.\n * Larger steps (8/12/24) match cards, popovers and hero containers.\n */\n\nexport const radius = {\n  none: 0,\n  sm: 4,\n  md: 8,\n  lg: 12,\n  xl: 24,\n  pill: 9999,\n} as const;\n\n/** Default component radius used by the MUI theme `shape.borderRadius`. */\nexport const baseRadius = radius.sm;\n\nexport type RadiusToken = keyof typeof radius;\n","/**\n * Shadow / elevation tokens.\n *\n * The base elevation matches the Figma swatch shadow\n * `0px 2px 2px rgba(0,0,0,0.05)`. On dark surfaces shadows are subtle, so\n * higher elevations lean on deeper, softer blurs.\n */\n\nexport const shadows = {\n  none: 'none',\n  /** Figma swatch base shadow. */\n  xs: '0px 2px 2px 0px rgba(0,0,0,0.05)',\n  sm: '0px 2px 4px 0px rgba(0,0,0,0.20)',\n  md: '0px 4px 8px 0px rgba(0,0,0,0.28)',\n  lg: '0px 8px 16px 0px rgba(0,0,0,0.36)',\n  xl: '0px 16px 32px 0px rgba(0,0,0,0.44)',\n} as const;\n\nexport type ShadowToken = keyof typeof shadows;\n","/**\n * z-index tokens.\n *\n * Aligned with MUI's default stacking context so custom layers compose\n * predictably with MUI overlays (Drawer, Modal, Snackbar, Tooltip).\n */\n\nexport const zIndex = {\n  hide: -1,\n  base: 0,\n  docked: 10,\n  sticky: 1100,\n  appBar: 1100,\n  banner: 1150,\n  overlay: 1200,\n  drawer: 1200,\n  modal: 1300,\n  popover: 1400,\n  snackbar: 1400,\n  tooltip: 1500,\n} as const;\n\nexport type ZIndexToken = keyof typeof zIndex;\n","/**\n * Component sizing tokens.\n *\n * Named widths for overlay surfaces so drawers/panels stay consistent instead\n * of using ad-hoc pixel values. Values are drawn from the observed drawer sizes\n * in the consuming app (380 / 430 / 460 / 560 / 660 / 954px).\n *\n * Control heights are the shared ladder for Button, TextField, Select and any\n * other single-line control that sits in a toolbar or form row. Same `size`\n * name → same outer height, so an inline Button + TextField never disagree by\n * a pixel.\n *\n * Chip has its own `chipHeights` map: `small` is a dense 22px table rung,\n * and `medium` / `large` / `extraLarge` alias onto this ladder so a Chip can\n * sit flush with a Button. Same size *name* on Chip vs Button does not mean\n * the same height — see `chipHeights`.\n */\n\n/** Drawer / side-panel widths (px). */\nexport const drawerWidths = {\n  sm: 380,\n  md: 430,\n  lg: 560,\n  xl: 660,\n  full: 954,\n} as const;\n\nexport type DrawerWidthToken = keyof typeof drawerWidths;\n\n/**\n * Outer height of a single-line control, border included.\n *\n * Button exposes all three. TextField / Select / OutlinedInput only expose\n * `small` and `medium` (MUI has no input `large`), so those map 1:1 onto the\n * first two rungs. Padding is sized under the height rather than the other way\n * around — see `buttonSizes` / `MuiOutlinedInput` in the theme.\n */\nexport const controlHeights = {\n  small: 28,\n  medium: 36,\n  large: 44,\n} as const;\n\nexport type ControlHeightToken = keyof typeof controlHeights;\n\n/**\n * Outer height of a Chip, border included.\n *\n * `small` is Chip-only (dense tables). `medium` / `large` / `extraLarge`\n * alias onto `controlHeights` so a Chip can sit flush with a Button:\n * Chip medium ↔ Button small, Chip large ↔ Button medium,\n * Chip extraLarge ↔ Button large. Same size *name* does not mean the\n * same height.\n */\nexport const chipHeights = {\n  small: 22,\n  medium: controlHeights.small,\n  large: controlHeights.medium,\n  extraLarge: controlHeights.large,\n} as const;\n\nexport type ChipHeightToken = keyof typeof chipHeights;\n","/**\n * Design tokens - the single source of truth for the Octopus UI theme.\n *\n * Tokens are framework-agnostic constants. The MUI theme (`src/theme`) consumes\n * these to produce `darkTheme` / `lightTheme`. Stories and docs render directly\n * from tokens so the documentation can never drift from the implementation.\n */\n\nexport * from './colors';\nexport * from './surfaceScopes';\nexport * from './attackPath';\nexport * from './chart';\nexport * from './spacing';\nexport * from './radius';\nexport * from './shadows';\nexport * from './typography';\nexport * from './zIndex';\nexport * from './sizes';\n\nimport { colors } from './colors';\nimport { attackPath } from './attackPath';\nimport { chartTokens } from './chart';\nimport { spacing, spacingUnit } from './spacing';\nimport { radius, baseRadius } from './radius';\nimport { shadows } from './shadows';\nimport { typographyTokens } from './typography';\nimport { zIndex } from './zIndex';\nimport { chipHeights, controlHeights, drawerWidths } from './sizes';\n\n/** Aggregate token object for convenient access and registry generation. */\nexport const tokens = {\n  colors,\n  attackPath,\n  /** Per-mode data-visualisation palettes. See `tokens/chart.ts`. */\n  chart: chartTokens,\n  spacing,\n  spacingUnit,\n  radius,\n  baseRadius,\n  shadows,\n  typography: typographyTokens,\n  zIndex,\n  drawerWidths,\n  controlHeights,\n  chipHeights,\n} as const;\n\nexport type Tokens = typeof tokens;\n"],"mappings":"kHAmDA,IAAa,EAAU,CAErB,GAAI,UAEJ,MAAO,aAEP,YAAa,oBAEb,KAAM,YAEN,UAAW,kBAEX,OAAQ,cAKR,UAAW,iBAEX,MAAO,aAEP,SAAU,gBAEV,MAAO,aAWP,QAAS,eAET,OAAQ,cAUR,YAAa,oBAab,iBAAkB,wBAClB,cAAe,sBACjB,EAkCA,SAAS,EAAW,EAAmB,CACrC,IAAM,EAAM,EAAA,EAAiB,GACvB,EAAO,EAAA,EAAiB,EAAa,CAAI,GACzC,EAAU,EAAA,EAAiB,EAAS,EAAS,CAAI,CAAC,GAClD,EAAY,IAAY,EAC9B,MAAO,CACL,YAAa,EAAA,EAAkB,GAG/B,iBAAkB,IAAS,UAAY,EAAA,EAAW,UAAY,EAAA,EAAW,SACzE,cAAe,EAAY,EAAO,CACpC,CACF,CAGA,SAAgB,EAAS,EAAgC,CACvD,IAAM,EAAI,EAAA,EAAe,QAAQ,CAAI,EACrC,OAAO,EAAA,EAAe,KAAK,IAAI,EAAI,EAAG,EAAA,EAAe,OAAS,CAAC,EACjE,CAGA,SAAgB,EAAa,EAAgC,CAC3D,IAAM,EAAI,EAAA,EAAe,QAAQ,CAAI,EACrC,OAAO,EAAA,EAAe,KAAK,IAAI,EAAI,EAAG,CAAC,EACzC,CAUA,SAAgB,EAAW,EAAgC,CACzD,IAAM,EAAQ,EAAA,EAAe,QAAQ,QAAQ,EACvC,EAAQ,EAAA,EAAe,QAAQ,EAAS,CAAI,CAAC,EACnD,OAAO,EAAA,EAAe,KAAK,IAAI,EAAO,CAAK,EAC7C,CAWA,SAAS,EAAU,EAA2B,CAE5C,MAAO,CADsC,OAAQ,UAAW,QACzD,EAAY,SAAS,CAAI,EAAI,EAAA,EAAW,OAAS,EAAA,EAAW,QACrE,CAEA,SAAS,EAAU,EAAiC,CAClD,IAAM,EAAS,IAAS,OACxB,MAAO,CACL,GAAI,EAAA,EAAiB,GAGrB,MAAO,EAAS,cAAgB,EAAA,EAAiB,EAAa,CAAI,GAGlE,YAAa,EAAS,EAAA,EAAc,GAAQ,EAAA,EAAY,OACxD,KAAM,EAAA,EAAW,QACjB,UAAW,EAAU,CAAI,EACzB,OAAQ,EAAA,EAAa,GACrB,UAAW,EAAA,EAAgB,GAC3B,MAAO,4BACP,SAAU,EAAA,EAAgB,GAC1B,MAAO,EAAA,EAAiB,EAAS,CAAI,GACrC,QAAS,EAAA,EAAiB,EAAS,EAAS,CAAI,CAAC,GACjD,OAAQ,EAAA,EAAiB,EAAW,CAAI,GACxC,GAAG,EAAW,CAAI,CACpB,CACF,CASA,SAAS,EAAW,EAA2B,CAG7C,OAFI,IAAS,OAAe,cACxB,IAAS,UAAY,IAAS,UAAkB,EAAA,EAAsB,QACnE,EAAA,EAAsB,EAAa,CAAI,EAChD,CAEA,SAAS,EAAiB,EAA2B,CAKnD,OAFI,IAAS,OAAe,UACxB,IAAS,UAAY,IAAS,UAAkB,EAAA,EAAsB,QACnE,EAAA,EAAsB,EAAa,CAAI,EAChD,CAEA,SAAS,EAAa,EAA2B,CAG/C,IAAM,EAAU,EAAA,EAAsB,EAAa,EAAa,CAAI,CAAC,GAErE,OADI,IAAY,EAAA,EAAsB,GAC/B,UAD6C,CAEtD,CAEA,SAAS,EAAW,EAAiC,CACnD,MAAO,CACL,GAAI,EAAA,EAAsB,GAC1B,MAAO,EAAW,CAAI,EAEtB,YAAa,EAAA,EAAiB,OAC9B,KAAM,EAAA,EAAgB,QAGtB,UAAW,IAAS,OAAS,EAAA,EAAgB,SAAW,EAAA,EAAgB,OAExE,OAAQ,IAAS,SAAW,EAAA,EAAsB,aAAe,EAAA,EAAsB,OACvF,UAAW,IAAS,OAAS,UAAY,EAAA,EAAsB,aAC/D,MAAO,sBACP,SAAU,0BACV,MAAO,EAAA,EAAsB,EAAS,CAAI,GAC1C,QAAS,EAAa,CAAI,EAC1B,OAAQ,EAAA,EAAsB,EAAW,CAAI,GAC7C,YAAa,EAAiB,CAAI,EAClC,iBAAkB,EAAA,EAAgB,SAElC,cAAe,SACjB,CACF,CAEA,SAAS,EAAY,EAA4C,CAC/D,OAAO,OAAO,YAAY,EAAA,EAAe,IAAK,GAAS,CAAC,EAAM,EAAM,CAAI,CAAC,CAAC,CAAC,CAI7E,CAEA,IAAa,EAAgB,CAC3B,KAAM,EAAY,CAAS,EAC3B,MAAO,EAAY,CAAU,CAC/B,EAGA,SAAgB,EAAe,EAA6C,CAC1E,MAAO,EACJ,EAAQ,IAAK,EAAM,IACnB,EAAQ,OAAQ,EAAM,OACtB,EAAQ,aAAc,EAAM,aAC5B,EAAQ,MAAO,EAAM,MACrB,EAAQ,WAAY,EAAM,WAC1B,EAAQ,QAAS,EAAM,QACvB,EAAQ,WAAY,EAAM,WAC1B,EAAQ,OAAQ,EAAM,OACtB,EAAQ,UAAW,EAAM,UACzB,EAAQ,OAAQ,EAAM,OACtB,EAAQ,SAAU,EAAM,SACxB,EAAQ,QAAS,EAAM,QACvB,EAAQ,aAAc,EAAM,aAC5B,EAAQ,kBAAmB,EAAM,kBACjC,EAAQ,eAAgB,EAAM,aACjC,CACF,CAOA,SAAgB,EAAM,EAA4B,EAA0B,CAC1E,MAAO,OAAO,EAAQ,GAAM,IAAI,EAAS,EAC3C,CCzSA,IAAa,EAAkB,CAC7B,SAAU,CAAE,MAAO,WAAY,OAAQ,UAAW,KAAM,SAAU,EAClE,KAAM,CAAE,MAAO,OAAQ,OAAQ,UAAW,KAAM,SAAU,EAC1D,KAAM,CAAE,MAAO,OAAQ,OAAQ,UAAW,KAAM,SAAU,EAC1D,OAAQ,CAAE,MAAO,SAAU,OAAQ,UAAW,KAAM,SAAU,EAC9D,OAAQ,CAAE,MAAO,SAAU,OAAQ,UAAW,KAAM,SAAU,EAC9D,SAAU,CAAE,MAAO,WAAY,OAAQ,UAAW,KAAM,SAAU,CACpE,EAKa,EAAwC,CACnD,WACA,OACA,OACA,SACA,SACA,UACF,EAEa,EAAa,CACxB,MAAO,EACP,MAAO,CACT,ECpCa,EAAc,EAGd,EAAU,CACrB,KAAM,EACN,IAAK,EACL,GAAI,EACJ,GAAI,EACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,IAAK,GACL,KAAM,EACR,EAYa,EAAe,CAC1B,KAAM,CAAE,GAAI,EAAQ,KAAM,OAAQ,8BAA+B,EACjE,IAAK,CAAE,GAAI,EAAQ,IAAK,OAAQ,4BAA6B,EAC7D,GAAI,CAAE,GAAI,EAAQ,GAAI,OAAQ,kDAAmD,EACjF,GAAI,CAAE,GAAI,EAAQ,GAAI,OAAQ,+CAAgD,EAC9E,GAAI,CAAE,GAAI,EAAQ,GAAI,OAAQ,iDAAkD,EAChF,GAAI,CAAE,GAAI,EAAQ,GAAI,OAAQ,sCAAuC,EACrE,GAAI,CAAE,GAAI,EAAQ,GAAI,OAAQ,2CAA4C,EAC1E,IAAK,CAAE,GAAI,EAAQ,IAAK,OAAQ,6BAA8B,EAC9D,KAAM,CAAE,GAAI,EAAQ,KAAM,OAAQ,wCAAyC,CAC7E,ECpCa,EAAS,CACpB,KAAM,EACN,GAAI,EACJ,GAAI,EACJ,GAAI,GACJ,GAAI,GACJ,KAAM,IACR,EAGa,EAAa,EAAO,GCTpB,EAAU,CACrB,KAAM,OAEN,GAAI,mCACJ,GAAI,mCACJ,GAAI,mCACJ,GAAI,oCACJ,GAAI,oCACN,ECTa,EAAS,CACpB,KAAM,GACN,KAAM,EACN,OAAQ,GACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,QAAS,KACT,OAAQ,KACR,MAAO,KACP,QAAS,KACT,SAAU,KACV,QAAS,IACX,ECDa,EAAe,CAC1B,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,KAAM,GACR,EAYa,EAAiB,CAC5B,MAAO,GACP,OAAQ,GACR,MAAO,EACT,EAaa,EAAc,CACzB,MAAO,GACP,OAAQ,EAAe,MACvB,MAAO,EAAe,OACtB,WAAY,EAAe,KAC7B,EC7Ba,EAAS,CACpB,OAAA,EAAA,EACA,aAEA,MAAO,EAAA,EACP,UACA,YAAA,EACA,SACA,aACA,UACA,WAAY,EAAA,EACZ,SACA,eACA,iBACA,aACF"}